Node Protection for MPLS TE Tunnels

Node Protection for MPLS TE Tunnels

Link Protection guarantees protection against link-failures. The failure could be due to link itself or failure of the node. This article covers node protection (also called NNHOP or next next-hop FRR) for MPLS TE tunnels which takes care of link failure as well as node failure.

In figure 1, a DiffServ TE is setup between PE1 and PE6 routers with a reservation of 8Mbps for Class Type 0, along the path PE1-P2-P4-P5-PE6. This TE is protected against failure of P4 router by a backup tunnel taking the path P2-P3-P5 that merges back into main TE path at P5 router (Merge Point MP). When P4 router fails, traffic is forwarded onto backup path at P2 router (Point of Local Repair PLR) and merges back to main path at P5 router where it continues on its normal path to PE6 router.

Before Failure

The backup path must be ready before the failure occurs at P4 router. The backup path is configured at P2 router to P5 router along the path P2-P3-P5, avoiding P4 router. This backup path is also configured as a DS-TE tunnel, otherwise traffic will not be forwarded over backup tunnel during failover if the backup path does not meet the requirements like bandwidth and Class Type. The backup tunnel is configured as below:

Backup tunnel at P2 router

interface fastethernet 1/1
 ip address 10.24.1.1 255.255.255.0
 mpls traffic-eng tunnels
 mpls traffic-eng backup-path tunnel 100
 ip rsvp bandwidth rdm bc0 1000 bc1 1000
!
interface tunnel 100
 ip unnumbered Loopback 0
 tunnel mode mpls traffic-eng
 tunnel destination 5.5.5.5
 tunnel mpls traffic-eng bandwidth 10000 class-type 0
 tunnel mpls traffic-eng path-option 1 explicit name BACKUP_PATH
 tunnel mpls traffic-eng record-route
!
ip explicit-path name BACKUP_PATH
 next-address 3.3.3.3
 next-address 5.5.5.5
!

At PE1 router, node protection for a TE tunnel is enabled using tunnel mpls traffic-eng fast-reroute node-protect command. The configuration of TE tunnel is as below:

Primary TE tunnel on PE1 router

interface tunnel 10
 ip unnumbered Loopback 0
 tunnel mode mpls traffic-eng
 tunnel destination 6.6.6.6
 tunnel mpls traffic-eng bandwidth 8000 class-type 0
 tunnel mpls traffic-eng path-option 1 explicit name PATH
 tunnel mpls traffic-eng fast-reroute node-protect
 tunnel mpls traffic-eng record-route
!
ip explicit-path name PATH
 next-address 2.2.2.2
 next-address 4.4.4.4
 next-address 5.5.5.5
 next-address 6.6.6.6
!

When PE1 router signals RSVP PATH message, it sets the node protection desired flag and the label recording desired flag in the Session_Attribute flag. The label recording flag indicates that the label information should be included in the RRO sub-object called Label sub-object. This way the label information is available to the PLR.

The following output (debug ip rsvp dump-messages path command) shows the PATH message sent by PE1 router along the path to PE6 router.

PATH message from PE1 router

*Aug 27 04:35:24.135: Outgoing Path:
*Aug 27 04:35:24.135:   version:1 flags:0000 cksum:F063 ttl:255 reserved:0 length:244
*Aug 27 04:35:24.139:  SESSION              type 7 length 16:
*Aug 27 04:35:24.139:   Tun Dest:   6.6.6.6  Tun ID: 10  Ext Tun ID: 1.1.1.1
*Aug 27 04:35:24.139:  HOP                  type 1 length 12:
*Aug 27 04:35:24.139:   Hop Addr: 10.12.1.1 LIH: 0x09000406
*Aug 27 04:35:24.143:  TIME_VALUES          type 1 length 8 :
*Aug 27 04:35:24.143:   Refresh Period (msec): 30000
*Aug 27 04:35:24.143:  EXPLICIT_ROUTE       type 1 length 68:
*Aug 27 04:35:24.143:   10.12.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:24.147:   10.24.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:24.147:   10.24.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:24.147:   10.45.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:24.147:   10.45.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:24.151:   10.56.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:24.151:   10.56.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:24.151:   6.6.6.6 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:24.151:  LABEL_REQUEST        type 1 length 8 :
*Aug 27 04:35:24.155:   Layer 3 protocol ID: 2048
*Aug 27 04:35:24.155:  SESSION_ATTRIBUTE    type 7 length 16:
*Aug 27 04:35:24.155:   Setup Prio: 7, Holding Prio: 7
*Aug 27 04:35:24.155:   Flags: (0x17) Local Prot desired, Label Recording, SE Style
*Aug 27 04:35:24.159:                 Node Prot desired
*Aug 27 04:35:24.159:   Session Name: PE1_t10
*Aug 27 04:35:24.159:  SENDER_TEMPLATE      type 7 length 12:
*Aug 27 04:35:24.159:   Tun Sender: 1.1.1.1  LSP ID: 30
*Aug 27 04:35:24.163:  SENDER_TSPEC         type 2 length 36:
*Aug 27 04:35:24.163:   version=0, length in words=7
*Aug 27 04:35:24.163:   Token bucket fragment (service_id=1, length=6 words
*Aug 27 04:35:24.163:     parameter id=127, flags=0, parameter length=5
*Aug 27 04:35:24.163:     average rate=1000000 bytes/sec,burst depth=1000 bytes
*Aug 27 04:35:24.167:     peak rate   =1000000 bytes/sec
*Aug 27 04:35:24.167:     min unit=0 bytes, max pkt size=2147483647 bytes
*Aug 27 04:35:24.167:  ADSPEC               type 2 length 48:
*Aug 27 04:35:24.167:  version=0  length in words=10
*Aug 27 04:35:24.171:  General Parameters  break bit=0  service length=8
*Aug 27 04:35:24.171:                                         IS Hops:1
*Aug 27 04:35:24.171:              Minimum Path Bandwidth (bytes/sec):12500000
*Aug 27 04:35:24.171:                     Path Latency (microseconds):0
*Aug 27 04:35:24.171:                                        Path MTU:1500
*Aug 27 04:35:24.175:  Controlled Load Service  break bit=0  service length=0
*Aug 27 04:35:24.175:  RECORD_ROUTE         type 1 length 12:
*Aug 27 04:35:24.175:   10.12.1.1/32, Flags:0x0 (No Local Protection)

When P2 router (also PLR) receives this PATH message from PE1 router, it identifies that node protection is desired. It sets the Local Protection Available flag in the RRO object in the outgoing PATH message, and sends along the path to PE6 router. In this way, all routers along the path are aware that node protection is available at P2 router, except PE1 router, at this stage. The following output shows the PATH message sent by P2 router to P4 router.

PATH message sent by P2 router

*Aug 27 04:35:25.043: Outgoing Path:
*Aug 27 04:35:25.043:   version:1 flags:0000 cksum:1B8D ttl:254 reserved:0 length:236
*Aug 27 04:35:25.043:  SESSION              type 7 length 16:
*Aug 27 04:35:25.043:   Tun Dest:   6.6.6.6  Tun ID: 10  Ext Tun ID: 1.1.1.1
*Aug 27 04:35:25.047:  HOP                  type 1 length 12:
*Aug 27 04:35:25.047:   Hop Addr: 10.24.1.1 LIH: 0x0A000413
*Aug 27 04:35:25.047:  TIME_VALUES          type 1 length 8 :
*Aug 27 04:35:25.047:   Refresh Period (msec): 30000
*Aug 27 04:35:25.051:  EXPLICIT_ROUTE       type 1 length 52:
*Aug 27 04:35:25.051:   10.24.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:25.051:   10.45.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:25.051:   10.45.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:25.051:   10.56.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:25.051:   10.56.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:25.051:   6.6.6.6 (Strict IPv4 Prefix, 8 bytes, /32)
*Aug 27 04:35:25.057:  LABEL_REQUEST        type 1 length 8 :
*Aug 27 04:35:25.057:   Layer 3 protocol ID: 2048
*Aug 27 04:35:25.057:  SESSION_ATTRIBUTE    type 7 length 16:
*Aug 27 04:35:25.057:   Setup Prio: 7, Holding Prio: 7
*Aug 27 04:35:25.057:   Flags: (0x17) Local Prot desired, Label Recording, SE Style
*Aug 27 04:35:25.057:                 Node Prot desired
*Aug 27 04:35:25.057:   Session Name: PE1_t10
*Aug 27 04:35:25.059:  SENDER_TEMPLATE      type 7 length 12:
*Aug 27 04:35:25.059:   Tun Sender: 1.1.1.1  LSP ID: 248
*Aug 27 04:35:26.001:  SENDER_TSPEC         type 2 length 36:
*Aug 27 04:35:26.001:   version=0, length in words=7
*Aug 27 04:35:26.001:   Token bucket fragment (service_id=1, length=6 words
*Aug 27 04:35:26.001:     parameter id=127, flags=0, parameter length=5
*Aug 27 04:35:26.001:     average rate=1000000 bytes/sec, burst depth=1000 bytes
*Aug 27 04:35:26.001:     peak rate   =1000000 bytes/sec
*Aug 27 04:35:26.001:     min unit=0 bytes, max pkt size=2147483647 bytes
*Aug 27 04:35:26.006:  ADSPEC               type 2 length 48:
*Aug 27 04:35:26.006:  version=0  length in words=10
*Aug 27 04:35:26.006:  General Parameters  break bit=0  service length=8
*Aug 27 04:35:26.006:                                         IS Hops:2
*Aug 27 04:35:26.006:              Minimum Path Bandwidth (bytes/sec):12500000
*Aug 27 04:35:26.006:                     Path Latency (microseconds):0
*Aug 27 04:35:26.006:                                        Path MTU:1500
*Aug 27 04:35:26.006:  Controlled Load Service  break bit=0  service length=0
*Aug 27 04:35:26.009:  RECORD_ROUTE         type 1 length 20:
*Aug 27 04:35:26.009:   10.24.1.1/32, Flags:0x9 (Local Prot Avail/to NNHOP)
*Aug 27 04:35:26.009:   10.12.1.1/32, Flags:0x0 (No Local Protection)

When PE router agrees to setup the path, it sends a RESV message towards PE1 router with a label inside the Label object. When the RESV message arrives at P2 router, it sends out a RESV message to PE1 router with Local Protection Available flag set in the RRO object. It also sets the node-id flag for 2.2.2.2/32 indicating protection is available at this node. The following output shows the RESV message sent to PE1 router:

RESV message sent by P2 to PE1 router

*Aug 27 04:35:28.935: Outgoing Resv:
*Aug 27 04:35:28.935:   version:1 flags:0000 cksum:E6A6 ttl:255 reserved:0 length:240
*Aug 27 04:35:28.939:  SESSION              type 7 length 16:
*Aug 27 04:35:28.939:   Tun Dest:   6.6.6.6  Tun ID: 10  Ext Tun ID: 1.1.1.1
*Aug 27 04:35:28.939:  HOP                  type 1 length 12:
*Aug 27 04:35:28.943:   Hop Addr: 10.12.1.2 LIH: 0x09000406
*Aug 27 04:35:28.943:  TIME_VALUES          type 1 length 8 :
*Aug 27 04:35:28.943:   Refresh Period (msec): 30000
*Aug 27 04:35:28.943:  STYLE                type 1 length 8 :
*Aug 27 04:35:28.943:   Shared-Explicit (SE)
*Aug 27 04:35:28.947:  FLOWSPEC             type 2 length 36:
*Aug 27 04:35:28.947:     version = 0 length in words = 7
*Aug 27 04:35:28.947:     service id = 5, service length = 6
*Aug 27 04:35:28.947:     tspec parameter id = 127, flags = 0,length = 5
*Aug 27 04:35:28.951:     average rate = 1000000 bytes/sec, burst depth = 1000 bytes
*Aug 27 04:35:28.951:     peak rate    = 1000000 bytes/sec
*Aug 27 04:35:28.951:     min unit = 0 bytes,max pkt size = 1500 bytes
*Aug 27 04:35:28.951:  FILTER_SPEC          type 7 length 12:
*Aug 27 04:35:28.951:   Tun Sender: 1.1.1.1, LSP ID: 30
*Aug 27 04:35:28.955:  LABEL                type 1 length 8 :
*Aug 27 04:35:28.955:   Labels: 17
*Aug 27 04:35:28.955:  RECORD_ROUTE         type 1 length 132:
*Aug 27 04:35:28.955:   2.2.2.2/32, Flags:0x29 (Local Prot Avail/to NNHOP, Node-id)
*Aug 27 04:35:28.959:     Label subobject: Flags 0x1, C-Type 1, Label 17
*Aug 27 04:35:28.959:   10.24.1.1/32, Flags:0x9 (Local Prot Avail/to NNHOP)
*Aug 27 04:35:28.963:     Label subobject: Flags 0x1, C-Type 1, Label 17
*Aug 27 04:35:28.963:   4.4.4.4/32, Flags:0x20 (No Local Protection, Node-id)
*Aug 27 04:35:28.967:     Label subobject: Flags 0x1, C-Type 1, Label 23
*Aug 27 04:35:28.967:   10.45.1.1/32, Flags:0x0 (No Local Protection)
*Aug 27 04:35:28.971:     Label subobject: Flags 0x1, C-Type 1, Label 23
*Aug 27 04:35:28.971:   5.5.5.5/32, Flags:0x20 (No Local Protection, Node-id)
*Aug 27 04:35:28.975:     Label subobject: Flags 0x1, C-Type 1, Label 24
*Aug 27 04:35:28.975:   10.56.1.1/32, Flags:0x0 (No Local Protection)
*Aug 27 04:35:28.979:     Label subobject: Flags 0x1, C-Type 1, Label 24
*Aug 27 04:35:28.979:   6.6.6.6/32, Flags:0x20 (No Local Protection, Node-id)
*Aug 27 04:35:28.983:     Label subobject: Flags 0x1, C-Type 1, Label 0
*Aug 27 04:35:28.983:   10.56.1.2/32, Flags:0x0 (No Local Protection)
*Aug 27 04:35:28.987:     Label subobject: Flags 0x1, C-Type 1, Label 0

Notice that RRO object carries a sub-label object which carries a label value. This RESV message is received by PE1 router and now it knows that node protection is available at P2 router.

The following output shows the reservation information available to PE1 router.

show ip rsvp reservation detail

PE1# show ip rsvp reservation detail
Reservation:
  Tun Dest:   6.6.6.6  Tun ID: 10  Ext Tun ID: 1.1.1.1
  Tun Sender: 1.1.1.1  LSP ID: 30
  Next Hop: 10.12.1.2 on FastEthernet1/0
  Label: 17 (outgoing)
  Reservation Style is Shared-Explicit, QoS Service is Controlled-Load
  Resv ID handle: 0D00040B.
  Created: 04:20:04 UTC Fri Aug 27 2010
  Average Bitrate is 8M bits/sec, Maximum Burst is 1K bytes
  Min Policed Unit: 0 bytes, Max Pkt Size: 1500 bytes
  RRO:
    2.2.2.2/32, Flags:0x29 (Local Prot Avail/to NNHOP, Node-id)
      Label subobject: Flags 0x1, C-Type 1, Label 17
    10.24.1.1/32, Flags:0x9 (Local Prot Avail/to NNHOP)
      Label subobject: Flags 0x1, C-Type 1, Label 17
    4.4.4.4/32, Flags:0x20 (No Local Protection, Node-id)
      Label subobject: Flags 0x1, C-Type 1, Label 23
    10.45.1.1/32, Flags:0x0 (No Local Protection)
      Label subobject: Flags 0x1, C-Type 1, Label 23
    5.5.5.5/32, Flags:0x20 (No Local Protection, Node-id)
      Label subobject: Flags 0x1, C-Type 1, Label 24
    10.56.1.1/32, Flags:0x0 (No Local Protection)
      Label subobject: Flags 0x1, C-Type 1, Label 24
    6.6.6.6/32, Flags:0x20 (No Local Protection, Node-id)
      Label subobject: Flags 0x1, C-Type 1, Label 0
    10.56.1.2/32, Flags:0x0 (No Local Protection)
      Label subobject: Flags 0x1, C-Type 1, Label 0
  Status:
  Policy: Accepted. Policy source(s): MPLS/TE

The following output shows the path information sent by P2 router along the path to PE6 router. Notice that the backup tunnel status is ready.

show ip rsvp sender detail

P2# show ip rsvp sender detail
PATH:
  Tun Dest:   6.6.6.6  Tun ID: 10  Ext Tun ID: 1.1.1.1
  Tun Sender: 1.1.1.1  LSP ID: 30
  Path refreshes:
    arriving: from PHOP 10.12.1.1 on Fa1/0 every 30000 msecs. Timeout in 201 sec
    sent:     to   NHOP 10.24.1.2 on FastEthernet1/1
  Session Attr:
    Setup Prio: 7, Holding Prio: 7
    Flags: (0x17) Local Prot desired, Label Recording, SE Style
                  Node Prot desired
    Session Name: PE1_t10
  ERO: (incoming)
    10.12.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
    10.24.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
    10.24.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
    10.45.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
    10.45.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
    10.56.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
    10.56.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
    6.6.6.6 (Strict IPv4 Prefix, 8 bytes, /32)
  ERO: (outgoing)
    10.24.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
    10.45.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
    10.45.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
    10.56.1.1 (Strict IPv4 Prefix, 8 bytes, /32)
    10.56.1.2 (Strict IPv4 Prefix, 8 bytes, /32)
    6.6.6.6 (Strict IPv4 Prefix, 8 bytes, /32)
  RRO:
    10.12.1.1/32, Flags:0x0 (No Local Protection)
  Class-Type: None
  Traffic params - Rate: 8M bits/sec, Max. burst: 1K bytes
    Min Policed Unit: 0 bytes, Max Pkt Size 2147483647 bytes
  Fast-Reroute Backup info:
    Inbound  FRR: Not active
    Outbound FRR: Ready -- backup tunnel selected
      Backup Tunnel: Tu100      (label 24)
      Bkup Sender Template:
        Tun Sender: 10.23.1.1  LSP ID: 30
      Bkup FilerSpec:
        Tun Sender: 10.23.1.1, LSP ID: 30
  Path ID handle: 3A00040E.
  Incoming policy: Accepted. Policy source(s): MPLS/TE
  Status:
  Output on FastEthernet1/1. Policy status: Forwarding. Handle: BD00040B
    Policy source(s): MPLS/TE

The following traceroute from PE1 router to PE6 router shows the labels imposed along the path.

Traceroute 6.6.6.6

PE1# traceroute 6.6.6.6
Type escape sequence to abort.
Tracing the route to 6.6.6.6
  1 10.12.1.2 [MPLS: Label 17 Exp 0] 216 msec 288 msec 324 msec
  2 10.24.1.2 [MPLS: Label 23 Exp 0] 248 msec 256 msec 244 msec
  3 10.45.1.2 [MPLS: Label 24 Exp 0] 384 msec 216 msec 244 msec
  4 10.56.1.2 236 msec 208 msec *

After Failure

Like in link protection mechanism, when P2 router notices the failure of P4 router (or the link connecting P2 to P4), it suppresses any event notification to PE1 router in order to prevent the teardown of the LSP. Instead, P2 router sends a Path Error message to PE1 router with Notify error code and Tunnel locally repaired sub-code, and the node where error is detected. The outbound FRR status changes to Active on P2 router.

P2 sends a Path Error message to PE1 router

*Aug 27 04:41:30.455: Outgoing PathError:
*Aug 27 04:41:30.455:   version:1 flags:0000 cksum:5ABF ttl:255 reserved:0 length:132
*Aug 27 04:41:30.459:  SESSION              type 7 length 16:
*Aug 27 04:41:30.459:   Tun Dest:   6.6.6.6  Tun ID: 10  Ext Tun ID: 1.1.1.1
*Aug 27 04:41:30.463:  ERROR_SPEC           type 1 length 12:
*Aug 27 04:41:30.463:   Error Node: 10.12.1.2
*Aug 27 04:41:30.463:   Error Code: 25 (Notify)
*Aug 27 04:41:30.463:   Error Value: 0x3  (Tunnel locally repaired)
*Aug 27 04:41:30.467:   Flags: 0x0
*Aug 27 04:41:30.467:  SENDER_TEMPLATE      type 7 length 12:
*Aug 27 04:41:30.467:   Tun Sender: 1.1.1.1  LSP ID: 30
*Aug 27 04:41:30.467:  SENDER_TSPEC         type 2 length 36:
*Aug 27 04:41:30.471:   version=0, length in words=7
*Aug 27 04:41:30.471:   Token bucket fragment (service_id=1, length=6 words
*Aug 27 04:41:30.471:     parameter id=127, flags=0, parameter length=5
*Aug 27 04:41:30.471:     average rate=1000000 bytes/sec, burst depth=1000 bytes
*Aug 27 04:41:30.475:     peak rate   =1000000 bytes/sec
*Aug 27 04:41:30.475:     min unit=0 bytes, max pkt size=2147483647 bytes
*Aug 27 04:41:30.475:  ADSPEC               type 2 length 48:
*Aug 27 04:41:30.475:  version=0  length in words=10
*Aug 27 04:41:30.475:  General Parameters  break bit=0  service length=8
*Aug 27 04:41:30.479:                                         IS Hops:1
*Aug 27 04:41:30.479:              Minimum Path Bandwidth (bytes/sec):12500000
*Aug 27 04:41:30.479:                     Path Latency (microseconds):0
*Aug 27 04:41:30.479:                                        Path MTU:1500
*Aug 27 04:41:30.483:  Controlled Load Service  break bit=0  service length=0

PE1 router realizes change in the resources upon the receipt of Path Error message from P2 router, and sends out a PATH message in order to re-route to alternate path. It receives RESV message with a different path in RRO due to failover to backup path.

Tunnel status on PE1 router

PE1# show mpls traffic-eng tunnels tunnel 10
Name: PE1_t10                             (Tunnel10) Destination: 6.6.6.6
  Status:
    Admin: up         Oper: up     Path: valid       Signalling: connected
    path option 1, type explicit PATH (Basis for Setup, path weight 4)
        Change in required resources detected: reroute pending
        Currently Signalled Parameters:
          Bandwidth: 8000     kbps (CT0)  Priority: 7  7   Affinity: 0x0/0xFFFF
          Metric Type: TE (default)
  Config Parameters:
    Bandwidth: 8000     kbps (CT0)  Priority: 7  7   Affinity: 0x0/0xFFFF
    Metric Type: TE (default)
    AutoRoute announce: enabled  LockDown: disabled Loadshare: 8000     bw-based
    auto-bw: disabled
  Active Path Option Parameters:
    State: explicit path option 1 is active
    BandwidthOverride: disabled  LockDown: disabled  Verbatim: disabled
  InLabel  :  -
  OutLabel : FastEthernet1/0, 17
  Next Hop : 10.12.1.2
  RSVP Signalling Info:
       Src 1.1.1.1, Dst 6.6.6.6, Tun_Id 10, Tun_Instance 30
    RSVP Path Info:
      My Address: 10.12.1.1
      Explicit Route: 10.12.1.2 10.24.1.1 10.24.1.2 10.45.1.1
                      10.45.1.2 10.56.1.1 10.56.1.2 6.6.6.6
      Record   Route:
      Tspec: ave rate=8000 kbits, burst=1000 bytes, peak rate=8000 kbits
    RSVP Resv Info:
      Record   Route:  2.2.2.2(17) 10.23.1.1(17)
                       5.5.5.5(24) 10.56.1.1(24)
                       6.6.6.6(0) 10.56.1.2(0)
      Fspec: ave rate=8000 kbits, burst=1000 bytes, peak rate=8000 kbits
  Shortest Unconstrained Path Info:
    Path Weight: 22 (TE)
    Explicit Route: 10.12.1.1 10.12.1.2 10.23.1.1 10.23.1.2
                    10.35.1.1 10.35.1.2 10.56.1.1 10.56.1.2
                    6.6.6.6
  History:
    Tunnel:
      Time since created: 47 minutes, 45 seconds
      Time since path change: 45 minutes, 6 seconds
      Number of LSP IDs (Tun_Instances) used: 30
    Current LSP: [ID: 30]
      Uptime: 29 minutes, 24 seconds
      Selection: reoptimization
    Prior LSP: [ID: 25]
      ID: path option unknown
      Removal Trigger: re-route path error

The traceroute after failure shows P2 router pushing an extra label onto the stack. This label is what P5 router (MP) expects for traffic arriving to it.

Traceroute 6.6.6.6

PE1# traceroute 6.6.6.6
Type escape sequence to abort.
Tracing the route to 6.6.6.6
  1 10.12.1.2 [MPLS: Label 17 Exp 0] 212 msec 244 msec 200 msec
  2 10.23.1.2 [MPLS: Labels 18/24 Exp 0] 312 msec 256 msec 196 msec
  3 10.35.1.2 [MPLS: Label 24 Exp 0] 216 msec 256 msec 324 msec
  4 10.56.1.2 312 msec 216 msec *

To summarize, node protection provides protection against link failure as well as node failure. Label recording is required because the PLR must know the label MP expects the traffic to arrive with.