Following is a quote from MPLS VPN architecture page 47.
An egress Edge-LSR in an MPLS network might have to perform two lookups on a packet received from an MPLS neighbor and destined for a subnet outside the MPLS domain.
here it says that PHP is used for for networks outside MPLs domain, here is another statement:
Penultimate Hop Popping is used only for directly connected subnets or aggregate routes.
this means that if the route outside MPLs domain is more than a hop away i.e not direcetly connected to the Edge-LSR, Label for that route will not be removed by the second last router(one before the ELSR) , and the ELSR will have to perform to lookups one in LFIB and other in FIB....
kindly explain.. i have tested this and it does only works for directly connected networks no matter inside or outside MPLS domain...
You are right PHP works for directly connected and aggregated routes or summary routes. As stated in the scenario the PHP will work only on C to reach D. After that no PHP will work because it is not the MPLS domain.
Never think that for each and everyhop PHP will work. The PHP will work only one router before the destination. Assume if the destination is C router then B and D will perform the PHP. to reach C. After C the packets will move to ip cloud i.e. twowards customer.