Is a label imposed in case of Penultimate Hop Popping?

Shivlu Jain sent me an interesting question:
I'm wondering whether a router performing penultimate hop popping (PHP) imposes an IGP label or not.The value of implicit null is 3; does it mean the router imposes this label (and adds four bytes to the packet)?
The penultimate router does not impose the IGP label (that's why this behavior is called penultimate hop popping). However, the egress router has to signal to its upstream neighbor (the penultimate router) that it should NOT impose a label, so it uses "implicit null" label (= 3) in TDP/LDP updates to signal that the top label should be popped, not rewriten.
This article is part of You've asked for it series.


  1. I have a few pet peeves with MPLS on Cisco devices.

    1. From my experience with the RSVP-TE side of signaling, you find that by default IOS advertises explicit null (label 0). This is fine and dandy if you run an all Cisco network, because a next-to-last hop (penultimate hop) Cisco will do PHP, no matter what the ultimate hop signals to it. But if you now throw in a Juniper as the penultimate hop with a Cisco terminating the tunnel (again signling a label of 0) to the penultimate hop, Junos does the right thing and assumes that you really want UHP. Now you've broken PHP. To address this, Cisco introduced "mpls traffic-eng signaling advertise implicit-null." This will cause the IOS tail-end to signal label 3 to the PHP Juniper and Junos also correctly interprets this as PHP.

    2. Some mainstream trains of IOS still require tag-switching ip to work at all.

    3. Most Cisco documentation states that you must enable LDP before doing MPLS-TE, which is a complete fallacy, probably related to confusion with #2 above; though, that is pure speculation.
  2. There is a very good reason you need to run LDP across MPLS TE tunnel. Will write a post on it.
Add comment