1 00:00:00,000 --> 00:00:03,325 [AUDIO LOGO] 2 00:00:03,325 --> 00:00:08,080 3 00:00:08,080 --> 00:00:11,230 The MPLS forwarding label, the label 4 00:00:11,230 --> 00:00:15,160 that's normally learned from LDP is generally 5 00:00:15,160 --> 00:00:18,130 used to forward the traffic through our MPLS 6 00:00:18,130 --> 00:00:21,700 core from the ingress PE's loopback 7 00:00:21,700 --> 00:00:24,920 to the egress PE's loopback. 8 00:00:24,920 --> 00:00:30,410 Now, the egress PE generally knows the customer's routes. 9 00:00:30,410 --> 00:00:33,500 However, the PE routers in the middle don't. 10 00:00:33,500 --> 00:00:35,890 And that's why we need this label. 11 00:00:35,890 --> 00:00:37,750 In the case of the forwarding label, 12 00:00:37,750 --> 00:00:40,840 we're just worried about getting the traffic between the two 13 00:00:40,840 --> 00:00:42,100 PEs. 14 00:00:42,100 --> 00:00:45,590 The egress PE will then handle it from there. 15 00:00:45,590 --> 00:00:50,560 So it's a pretty good argument to say that the egress PE does 16 00:00:50,560 --> 00:00:55,600 not need to know the forwarding label for its own loopback. 17 00:00:55,600 --> 00:00:59,200 It knows how to get to its own loopback interface, which 18 00:00:59,200 --> 00:01:02,510 would be the BGP Next-Hop because, of course, 19 00:01:02,510 --> 00:01:04,239 it's directly connected. 20 00:01:04,239 --> 00:01:07,960 And because of this, MPLS implements 21 00:01:07,960 --> 00:01:12,580 a feature called PHP, or Penultimate Hop Popping. 22 00:01:12,580 --> 00:01:15,280 Now, we've seen this in use through some 23 00:01:15,280 --> 00:01:18,470 of our previous demonstrations and, of course, 24 00:01:18,470 --> 00:01:22,000 it's on by default because we've seen it operate. 25 00:01:22,000 --> 00:01:24,550 What we want to look at in this video 26 00:01:24,550 --> 00:01:29,710 is some situations where maybe PHP doesn't work out 27 00:01:29,710 --> 00:01:32,540 the best for what we're trying to accomplish. 28 00:01:32,540 --> 00:01:36,970 There are reasons we may need to disable it or turn it off. 29 00:01:36,970 --> 00:01:41,110 And in that case, instead of it being an implicit null, 30 00:01:41,110 --> 00:01:43,960 it's going to be an explicit null. 31 00:01:43,960 --> 00:01:48,010 And instead of using label 3, like we do for PHP, 32 00:01:48,010 --> 00:01:50,680 we will use label 0. 33 00:01:50,680 --> 00:01:53,060 And we'll see this as we progress. 34 00:01:53,060 --> 00:01:56,200 So let's jump into our topology diagram, 35 00:01:56,200 --> 00:01:58,030 just take a look at the path that we're 36 00:01:58,030 --> 00:02:00,070 going to be examining our traffic on 37 00:02:00,070 --> 00:02:02,290 and then we'll jump into the command line 38 00:02:02,290 --> 00:02:07,570 and see how to operate with PHP. 39 00:02:07,570 --> 00:02:12,730 So in this skill, we're again, going to be on MPLS topology 3. 40 00:02:12,730 --> 00:02:15,620 And for this particular demonstration, 41 00:02:15,620 --> 00:02:18,790 we're going to be starting off on router 6, 42 00:02:18,790 --> 00:02:21,850 and we're going to be looking at the traffic flow that's 43 00:02:21,850 --> 00:02:26,230 going from router 6 through our core to router 8. 44 00:02:26,230 --> 00:02:29,240 Now, keep in mind we do have multiple paths here, 45 00:02:29,240 --> 00:02:32,260 so it very well could be multipathing and taking 46 00:02:32,260 --> 00:02:35,960 this lower path, but our main focus is, of course, 47 00:02:35,960 --> 00:02:40,270 going to be on these links right here, that last hop before we 48 00:02:40,270 --> 00:02:45,190 get to router 5 because router 5 is the one in this example that 49 00:02:45,190 --> 00:02:47,320 would be doing PHP. 50 00:02:47,320 --> 00:02:51,190 This is going to be about what label router 5 is generating. 51 00:02:51,190 --> 00:02:53,890 So let's go ahead and jump into the command line 52 00:02:53,890 --> 00:02:57,250 and take a look at some of the details of PHP. 53 00:02:57,250 --> 00:02:59,820 54 00:02:59,820 --> 00:03:05,490 So let's start off by tracing our path to the 10.100.10.8, 55 00:03:05,490 --> 00:03:09,030 which is the client side of router 8. 56 00:03:09,030 --> 00:03:12,240 And if we examine our trace here, a couple of things to 57 00:03:12,240 --> 00:03:12,970 note. 58 00:03:12,970 --> 00:03:15,270 First, we can see that it is, in fact, load sharing 59 00:03:15,270 --> 00:03:18,120 through our core here at hop 2 where it's 60 00:03:18,120 --> 00:03:21,540 going to both routers 3 and 4. 61 00:03:21,540 --> 00:03:24,900 But notice as it's going towards routers 3 and 4, 62 00:03:24,900 --> 00:03:27,390 it has 2 labels on it. 63 00:03:27,390 --> 00:03:33,390 For example, towards hop 4 here, it's using label 24403, 64 00:03:33,390 --> 00:03:38,160 and then it's got the VPN label 24507. 65 00:03:38,160 --> 00:03:41,590 Now, we know that's the VPN label for two reasons. 66 00:03:41,590 --> 00:03:43,740 One, it's the second label. 67 00:03:43,740 --> 00:03:48,090 Two, the numbering that we used when we built our lab. 68 00:03:48,090 --> 00:03:51,150 The fact that the third digit is a 5 69 00:03:51,150 --> 00:03:54,720 means that this label was generated by router 5 70 00:03:54,720 --> 00:03:57,510 because that's how we built our environment. 71 00:03:57,510 --> 00:04:01,050 And we see that when we send the traffic towards router 3, 72 00:04:01,050 --> 00:04:03,660 it's using a different forwarding label, 73 00:04:03,660 --> 00:04:07,620 in fact, one from router 3, the 24302, 74 00:04:07,620 --> 00:04:12,240 and it's using the same VPN label because, again, that's 75 00:04:12,240 --> 00:04:14,930 originated from router 5. 76 00:04:14,930 --> 00:04:20,360 But then notice that when both 4 and 3 forward this to router 5, 77 00:04:20,360 --> 00:04:23,270 router 5 is only getting one label. 78 00:04:23,270 --> 00:04:30,500 It's only getting the VPN label, the 24507 because of PHP. 79 00:04:30,500 --> 00:04:34,400 So let's start taking a look at what this can actually cause. 80 00:04:34,400 --> 00:04:37,730 And one of the biggest issues for PHP 81 00:04:37,730 --> 00:04:41,780 is going to be QoS, particularly if we 82 00:04:41,780 --> 00:04:45,380 want to work with QoS in the core of the service provider 83 00:04:45,380 --> 00:04:46,500 environment. 84 00:04:46,500 --> 00:04:48,740 So let's take a look at what that means 85 00:04:48,740 --> 00:04:52,150 and how PHP affects that. 86 00:04:52,150 --> 00:04:54,850 The easiest way to start seeing this problem 87 00:04:54,850 --> 00:04:58,090 is we're going to configure router 6 to just start 88 00:04:58,090 --> 00:05:01,480 marking all of its traffic as it sends it 89 00:05:01,480 --> 00:05:05,140 out that interface towards the MPLS environment. 90 00:05:05,140 --> 00:05:07,990 And we'll just set it to IP precedence 3. 91 00:05:07,990 --> 00:05:10,540 So let's just jump in and configure that. 92 00:05:10,540 --> 00:05:12,950 We'll go into configuration mode, 93 00:05:12,950 --> 00:05:15,400 we'll write a QoS policy map. 94 00:05:15,400 --> 00:05:20,830 We'll call this PM_SET_IPP for IP precedence. 95 00:05:20,830 --> 00:05:24,310 We'll simply do this in class class-default, that 96 00:05:24,310 --> 00:05:26,500 will affect all traffic. 97 00:05:26,500 --> 00:05:29,950 And we'll say set ip precedence, and like I said, 98 00:05:29,950 --> 00:05:31,030 we'll set it to 3. 99 00:05:31,030 --> 00:05:34,000 It doesn't really matter, we're just looking for the marking. 100 00:05:34,000 --> 00:05:37,000 We'll go into our interface, gigabit 1 which, of course, is 101 00:05:37,000 --> 00:05:40,160 facing the MPLS environment, and we'll 102 00:05:40,160 --> 00:05:43,790 apply this policy outbound. 103 00:05:43,790 --> 00:05:45,990 We'll exit configuration. 104 00:05:45,990 --> 00:05:48,670 And let's do our trace again. 105 00:05:48,670 --> 00:05:50,960 If we take a look at this output, 106 00:05:50,960 --> 00:05:56,440 we can see that MPLS has taken the IP precedence field 107 00:05:56,440 --> 00:06:00,520 and automatically copied it onto the MPLS label 108 00:06:00,520 --> 00:06:03,020 when the label is imposed. 109 00:06:03,020 --> 00:06:07,840 So if we look at this output, it looks like Exp 3, 110 00:06:07,840 --> 00:06:11,110 or IP precedence 3, is making it the whole way 111 00:06:11,110 --> 00:06:12,340 through our environment. 112 00:06:12,340 --> 00:06:15,950 We see it on each and every hop, until of course, 113 00:06:15,950 --> 00:06:18,700 we remove everything and send it out to router 8. 114 00:06:18,700 --> 00:06:22,460 But we're not worried about outside of MPLS right now. 115 00:06:22,460 --> 00:06:24,500 So here's the point. 116 00:06:24,500 --> 00:06:29,500 If all we were trying to do was get a customer's QoS markings 117 00:06:29,500 --> 00:06:31,870 all the way through our environment, 118 00:06:31,870 --> 00:06:33,890 this would be fine. 119 00:06:33,890 --> 00:06:37,130 We can see that this QoS marking is, 120 00:06:37,130 --> 00:06:39,730 in fact, making it the whole way through the environment. 121 00:06:39,730 --> 00:06:44,950 Where the problem comes in is what if we as service providers 122 00:06:44,950 --> 00:06:48,740 want to use the Exp markings ourselves? 123 00:06:48,740 --> 00:06:53,040 That's where the problem comes in, let's take a look. 124 00:06:53,040 --> 00:06:55,370 So let's go over to router 1. 125 00:06:55,370 --> 00:06:57,440 We'll make a policy map. 126 00:06:57,440 --> 00:07:01,940 We'll call this PM_SET_EXP. 127 00:07:01,940 --> 00:07:07,080 For our class, we'll again use class-default. 128 00:07:07,080 --> 00:07:12,560 And what we want to do is set the MPLS EXP bits. 129 00:07:12,560 --> 00:07:15,350 But something sort of important to note here, 130 00:07:15,350 --> 00:07:17,940 there's only two choices. 131 00:07:17,940 --> 00:07:21,020 The first choice is on imposition. 132 00:07:21,020 --> 00:07:23,030 And we don't really want to use that one 133 00:07:23,030 --> 00:07:25,820 too often because usually we're not 134 00:07:25,820 --> 00:07:29,600 going to be changing QoS markings on the same router 135 00:07:29,600 --> 00:07:31,650 that's imposing the label. 136 00:07:31,650 --> 00:07:33,620 Now, in this particular case, router 1 137 00:07:33,620 --> 00:07:35,430 we could possibly do that. 138 00:07:35,430 --> 00:07:40,140 But the other choice is topmost or the forwarding label. 139 00:07:40,140 --> 00:07:42,950 So what if we change the forwarding label, 140 00:07:42,950 --> 00:07:46,440 and we want that to go through our MPLS environment? 141 00:07:46,440 --> 00:07:48,440 Well, let's set the topmost label 142 00:07:48,440 --> 00:07:51,180 and let's change it to something different. 143 00:07:51,180 --> 00:07:52,970 So we'll say, topmost-- 144 00:07:52,970 --> 00:07:54,493 and let's mark it down. 145 00:07:54,493 --> 00:07:55,910 Let's say we're going to degragate 146 00:07:55,910 --> 00:07:57,230 the traffic a little bit. 147 00:07:57,230 --> 00:07:59,840 Let's mark it down to 2. 148 00:07:59,840 --> 00:08:02,480 Let's go into our interfaces now, 149 00:08:02,480 --> 00:08:05,510 and these are going to be the interfaces facing the MPLS 150 00:08:05,510 --> 00:08:06,740 core. 151 00:08:06,740 --> 00:08:11,240 We do our service policy out and we apply our policy. 152 00:08:11,240 --> 00:08:13,770 Now, since we are doing load sharing, 153 00:08:13,770 --> 00:08:16,890 we want to make sure we cover both possible paths. 154 00:08:16,890 --> 00:08:21,230 So let's apply this to interface gigabit 2 as well. 155 00:08:21,230 --> 00:08:25,560 Commit our changes and we'll exit configuration. 156 00:08:25,560 --> 00:08:28,950 Now, let's go back and look at our trace again. 157 00:08:28,950 --> 00:08:34,070 So we'll do our trace and right here, we see the problem. 158 00:08:34,070 --> 00:08:36,710 We as service providers are trying 159 00:08:36,710 --> 00:08:42,090 to mark this traffic down for whatever reason to Exp 2. 160 00:08:42,090 --> 00:08:45,200 And as we can see on the second hop here, 161 00:08:45,200 --> 00:08:48,920 we have, in fact, put on a marking of Exp 2. 162 00:08:48,920 --> 00:08:51,420 So our policy worked. 163 00:08:51,420 --> 00:08:53,910 Here's where the problem comes in. 164 00:08:53,910 --> 00:08:58,490 Notice that on hop 3, when PHP happens 165 00:08:58,490 --> 00:09:01,700 and router 5 tells us to pop that label, 166 00:09:01,700 --> 00:09:04,250 well, we pop the top label. 167 00:09:04,250 --> 00:09:06,590 That's the one that we marked. 168 00:09:06,590 --> 00:09:11,630 So the marking or the change that we made is now lost. 169 00:09:11,630 --> 00:09:15,710 Now, there is a possibility that we only wanted this change 170 00:09:15,710 --> 00:09:18,980 to affect all of the PE routers in our environment 171 00:09:18,980 --> 00:09:23,330 and we don't really care if this Exp marking of 2 172 00:09:23,330 --> 00:09:27,170 makes it all the way to the egress PE. 173 00:09:27,170 --> 00:09:30,080 And if that's the case, then we could end our discussion 174 00:09:30,080 --> 00:09:31,100 right now. 175 00:09:31,100 --> 00:09:34,910 But to sort of prove the point that we actually do sometimes 176 00:09:34,910 --> 00:09:37,580 need this marking to make it all the way 177 00:09:37,580 --> 00:09:41,360 to the egress PE, that's where we're going to need 178 00:09:41,360 --> 00:09:44,870 to turn off or disable PHP. 179 00:09:44,870 --> 00:09:47,810 Now, just a quick note here, we're 180 00:09:47,810 --> 00:09:52,220 talking about getting this marking to the egress PE 181 00:09:52,220 --> 00:09:55,280 so that the egress PE can do something with it 182 00:09:55,280 --> 00:09:56,910 or act upon it. 183 00:09:56,910 --> 00:10:01,700 This is not talking about this change going all the way 184 00:10:01,700 --> 00:10:03,290 to the customer. 185 00:10:03,290 --> 00:10:06,620 If we want this change to go all the way to the customer, 186 00:10:06,620 --> 00:10:09,320 that's a different discussion and we'll 187 00:10:09,320 --> 00:10:12,070 have to talk about that in a different skill. 188 00:10:12,070 --> 00:10:13,820 But for right now, we need to at least get 189 00:10:13,820 --> 00:10:16,700 the marking to our egress PE. 190 00:10:16,700 --> 00:10:21,030 So let's turn off PHP and see what happens. 191 00:10:21,030 --> 00:10:22,700 So let's start by looking at what's 192 00:10:22,700 --> 00:10:27,740 going on router 3, our P router that's directly connected 193 00:10:27,740 --> 00:10:30,920 to router 5, our egress PE. 194 00:10:30,920 --> 00:10:34,190 So if we do a show MPLS forwarding table 195 00:10:34,190 --> 00:10:36,800 and we look at router 5's loopback, which 196 00:10:36,800 --> 00:10:39,290 is, of course, where this traffic is headed, 197 00:10:39,290 --> 00:10:41,990 notice that it is currently set to Pop. 198 00:10:41,990 --> 00:10:49,040 Pop is PHP-- that means pop 1 label, but leave on the rest. 199 00:10:49,040 --> 00:10:52,560 That as opposed by the way to going to say, 200 00:10:52,560 --> 00:10:56,630 for example, router 12 here, where it's unlabeled, 201 00:10:56,630 --> 00:11:00,110 that's because the interfaces going up to our route reflector 202 00:11:00,110 --> 00:11:02,390 are not even running MPLS. 203 00:11:02,390 --> 00:11:03,410 They don't have to. 204 00:11:03,410 --> 00:11:05,600 They're not in the MPLS forwarding path. 205 00:11:05,600 --> 00:11:09,170 So Unlabeled means remove all labels, 206 00:11:09,170 --> 00:11:13,290 Pop means remove just the top label. 207 00:11:13,290 --> 00:11:15,410 So now let's see what happens if we go 208 00:11:15,410 --> 00:11:18,740 to router 5 and turn off PHP. 209 00:11:18,740 --> 00:11:22,190 On IOS XE this is a very, very simple command, 210 00:11:22,190 --> 00:11:27,560 it's mpls ldp explicit-null. 211 00:11:27,560 --> 00:11:28,590 That's it. 212 00:11:28,590 --> 00:11:32,540 We hit Enter, we can exit out of configuration. 213 00:11:32,540 --> 00:11:35,400 Let's go back over to router 3 again. 214 00:11:35,400 --> 00:11:38,090 And if we look at our forwarding table again, 215 00:11:38,090 --> 00:11:42,830 now it says explicit null for IP version 4. 216 00:11:42,830 --> 00:11:45,170 So now let's go all the way back to router 6 217 00:11:45,170 --> 00:11:48,880 and see what happens with our trace again. 218 00:11:48,880 --> 00:11:52,754 So two things to note here, again, particularly on hop 3. 219 00:11:52,754 --> 00:11:58,110 First is notice the forwarding label is label 0. 220 00:11:58,110 --> 00:12:03,270 Explicit null uses label 0 for the forwarding label. 221 00:12:03,270 --> 00:12:07,490 And the second thing is that our Exp marking of 2 222 00:12:07,490 --> 00:12:12,300 has now made it all the way to the egress PE who could then 223 00:12:12,300 --> 00:12:15,520 do something with it if we wanted to. 224 00:12:15,520 --> 00:12:18,010 So now what about going the other direction? 225 00:12:18,010 --> 00:12:22,230 Let's hop up to router 8, and let's trace the other way. 226 00:12:22,230 --> 00:12:25,422 Let's go 10.100.1.6. 227 00:12:25,422 --> 00:12:26,880 Now, here we're not going to bother 228 00:12:26,880 --> 00:12:29,910 with setting the IP precedent and all that because we've 229 00:12:29,910 --> 00:12:31,690 already seen how that works. 230 00:12:31,690 --> 00:12:36,370 But notice that at hop 3, we are popping the forwarding label. 231 00:12:36,370 --> 00:12:39,640 So we have the same thing going on the other direction. 232 00:12:39,640 --> 00:12:42,210 So of course, what this is about is seeing 233 00:12:42,210 --> 00:12:46,800 how to turn off PHP on IOS XR. 234 00:12:46,800 --> 00:12:50,820 So now let's go disable PHP on router 1. 235 00:12:50,820 --> 00:12:53,400 So we'll go into configuration mode, 236 00:12:53,400 --> 00:13:03,000 here the command is mpls ldp address-family ipv4 label 237 00:13:03,000 --> 00:13:06,030 local, and then we hit the question mark 238 00:13:06,030 --> 00:13:07,530 to see our choices. 239 00:13:07,530 --> 00:13:10,980 Now, we have sort of two major choices here. 240 00:13:10,980 --> 00:13:16,750 First, we could do an implicit-null-override, 241 00:13:16,750 --> 00:13:21,600 and then it wants the word "for," so OK, for what? 242 00:13:21,600 --> 00:13:24,310 An IP access list. 243 00:13:24,310 --> 00:13:26,550 So with this structure does is it 244 00:13:26,550 --> 00:13:32,550 allows us to disable PHP or enable explicit null, whichever 245 00:13:32,550 --> 00:13:35,850 way you want to say that, but it allows us to do it just 246 00:13:35,850 --> 00:13:37,960 for specific prefixes. 247 00:13:37,960 --> 00:13:40,800 Now, we don't have to quite get into this level of detail 248 00:13:40,800 --> 00:13:43,800 here, but just be aware that we can do it. 249 00:13:43,800 --> 00:13:46,230 The other choice we're going to do here next 250 00:13:46,230 --> 00:13:48,900 is to do it for all the prefixes. 251 00:13:48,900 --> 00:13:51,030 Sort of like what we did on router 5, 252 00:13:51,030 --> 00:13:53,580 we just turned the feature on, and that was it, 253 00:13:53,580 --> 00:13:55,000 it did it for everything. 254 00:13:55,000 --> 00:13:57,030 So that's what we're going to do here. 255 00:13:57,030 --> 00:14:00,780 To do that, we're going to go back to the word "local," 256 00:14:00,780 --> 00:14:04,740 and instead, use this other choice, advertise, 257 00:14:04,740 --> 00:14:08,160 and we simply say, explicit-null. 258 00:14:08,160 --> 00:14:10,270 So the command is quite a bit longer, 259 00:14:10,270 --> 00:14:12,840 but this is the equivalent to the command 260 00:14:12,840 --> 00:14:15,630 that we put in on router 5. 261 00:14:15,630 --> 00:14:17,860 So let's go ahead and commit that change. 262 00:14:17,860 --> 00:14:20,580 We'll exit out of configuration mode. 263 00:14:20,580 --> 00:14:25,270 For verification, let's hop back over onto router 3 again. 264 00:14:25,270 --> 00:14:27,390 Notice here that when we looked at it earlier, 265 00:14:27,390 --> 00:14:31,290 router 1 was Pop, and now we're expecting 266 00:14:31,290 --> 00:14:34,740 it to look like explicit null just like Router 5 does. 267 00:14:34,740 --> 00:14:36,870 And we can see, in fact, that it does. 268 00:14:36,870 --> 00:14:39,940 They're both set to explicit null now. 269 00:14:39,940 --> 00:14:44,980 So of course, let's go back to router 8, do our trace again. 270 00:14:44,980 --> 00:14:47,490 So we can see that this is acting the same way where 271 00:14:47,490 --> 00:14:51,830 it's now using a forwarding label of 0. 272 00:14:51,830 --> 00:14:57,110 So in this video, we saw how to handle PHP, its default 273 00:14:57,110 --> 00:15:00,710 behavior, as well as things that can be affected 274 00:15:00,710 --> 00:15:03,320 by that such as QoS markings. 275 00:15:03,320 --> 00:15:07,610 And because of that, we also saw how to turn off PHP, 276 00:15:07,610 --> 00:15:11,000 or you could say turn on explicit null. 277 00:15:11,000 --> 00:15:14,330 We also saw that when we do turn on explicit null, 278 00:15:14,330 --> 00:15:20,120 it uses a label of 0 as opposed to implicit null, which is 279 00:15:20,120 --> 00:15:23,660 PHP, which uses a label of 3. 280 00:15:23,660 --> 00:15:25,760 Now, we also want to take a look at 281 00:15:25,760 --> 00:15:30,170 some other advanced features, such as TTL propagation 282 00:15:30,170 --> 00:15:34,550 and how the TTL is handled in this same environment. 283 00:15:34,550 --> 00:15:37,080 And that's exactly what we get to do next. 284 00:15:37,080 --> 00:15:40,400 Until then, I hope this has been informative for you, 285 00:15:40,400 --> 00:15:43,450 and I'd like to thank you for viewing. 286 00:15:43,450 --> 00:15:47,000