Repost from INE blog by Petr Lapukhov, 4xCCIE/CCDE:
1) MLPPP uses fragmentation scheme where large packets are sliced in pieces and sequence numbers are added using special MLPPP headers
2) Small voice packets are interleaved with fragments of large packets using a special priority queue
We see that MLPPP was originally designed to work with multiple physical links at the same time. However, PPP Multilink Interleave only works with one physical link. The reason is that voice (small) packets are being sent without sequence numbers. If we were using multiple physical links, the receiving side may start accepting voice packets out of their original order (due to different physical link latencies). And since voice packets bear no fragmentation headers, there is no way to reorder them. In effect, packets may arrive to their final destination out of order, degrading voice quality.
To overcome this obstacle, Multiclass Multilink PPP (MCMLPPP or MCMLP) has been introduced in RFC 2886. Under this RFC, different “fragment streams” or classes are supported at sending and receiving sides, using independent sequence numbers. Therefore, with MCMLPPP voice packets may be sent using MLPPP header with separate sequence numbers space. In result, MCMPPP permits the use of fragmentation and interleaving over multiple physical links at time.
Now back to our MLPPPoFR example. Let’s imagine the situation where we have two routers (R1 and R2) connected via FR cloud, with physical ports clocked at 512Kpbs and PVC CIR values equal to 384Kbps (There is no ATM interworking in this example). We need to provide priority treatment to voice packets and enable PPP Multilink and Interleave to decrease serialization delays.
Topology:
[R1]---[DLCI 112]---[Frame-Relay]---[DLCI 211]---[R2]
Qos Policy:R1
class-map match-all VOICE
match ip dscp ef
class-map match-all SIGNALING
match ip dscp cs3
!
!
policy-map CBWFQ
class VOICE
priority 48
class SIGNALING
bandwidth 8
class class-default
fair-queue
Next create a Virtual-Template interface for PPPoFR. We need to
calculate the fragment size for MLPPP. Since physical port speed is
512Kpbs, and required serialization delay should not exceed 10ms
(remember, fragment size is based on physical port speed!), the fragment
size must be set to [512000/8]*0.01=640 bytes. How is the fragment size
configured with MLPPP? By using command ppp multilink fragment delay
– however, IOS CLI takes this delay value (in milliseconds) and
multiplies it by configured interface (virtual-template) bandwidth (in
our case 384Kbps). We can actually change the virtual-template bandwidth
to match the physical interface speed, but this would affect the CBWFQ
weights! Therefore, we take the virtual-template bandwidth (384Kpbs) and
adjust the delay to make sure the fragment size matches the physical
interace rate is 512Kpbs. This way, the “effective” delay value would be
set to “640*8/384 = 13ms” (Fragment_Size/CIR*8) to accomodate the
physical and logical bandwidth discrepancy. (This may be unimportant if
our physical port speed does not differ much from PVC CIR. However, if
you have say PVC CIR=384Kbps and port speed 768Kbps you may want to pay
attention to this issue)
R1:
interface Loopback0
ip address 177.1.101.1 255.255.255.255
!
interface Virtual-Template1
bandwidth 384
ip unnumbered Loopback0
ppp multilink
ppp multilink fragment delay 13
ppp multilink interleave
service-policy output CBWFQ
R2:
interface Loopback0
ip address 177.1.102.1 255.255.255.255
!
interface Virtual-Template1
bandwidth 384
ip unnumbered Loopback0
ppp multilink
ppp multilink fragment delay 13
ppp multilink interleave
service-policy output CBWFQ
Next we configure PVC shaping settings by using legacy FRTS configuration. Note that Bc is set to CIR*10ms.
R1&R2
map-class frame-relay SHAPE_384K
frame-relay cir 384000
frame-relay bc 3840
frame-relay be 0
frame-relay mincir 384000
apply all the settings to the Frame-Relay interfaces:
R1:
interface Serial0/0
no ip address
encapsulation frame-relay
serial restart-delay 0
frame-relay traffic-shaping
!
interface Serial0/0.1 point-to-point
frame-relay interface-dlci 112 ppp Virtual-Template1
class SHAPE_384K
R2:
interface Serial0/0
no ip address
encapsulation frame-relay
serial restart-delay 0
frame-relay traffic-shaping
!
interface Serial0/0.1 point-to-point
frame-relay interface-dlci 211 ppp Virtual-Template1
class SHAPE_384K
Verification
R1#SHOW INT VIRtual-ACCess 2
Virtual-Access2 is up, line protocol is up
Hardware is Virtual Access interface
Interface is unnumbered. Using address of Loopback0 (177.1.101.1)
MTU 1500 bytes, BW 384 Kbit/sec, DLY 100000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation PPP, LCP Open, multilink Open
Link is a member of Multilink bundle Virtual-Access3
PPPoFR vaccess, cloned from Virtual-Template1
Vaccess status 0x44
Bound to Serial0/0.1 DLCI 112, Cloned from Virtual-Template1, loopback not set
Keepalive set (10 sec)
DTR is pulsed for 5 seconds on reset
Last input 00:00:05, output never, output hang never
Last clearing of "show interface" counters 00:48:42
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
572 packets input, 10084 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
572 packets output, 8960 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 unknown protocol drops
0 output buffer failures, 0 output buffers swapped out
0 carrier transitions
R1#
R1#
R1#SHOW INT VIRtual-ACCess 3
Virtual-Access3 is up, line protocol is up
Hardware is Virtual Access interface
Interface is unnumbered. Using address of Loopback0 (177.1.101.1)
MTU 1500 bytes, BW 384 Kbit/sec, DLY 100000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation PPP, LCP Open, multilink Open
Open: IPCP
MLP Bundle vaccess, cloned from Virtual-Template1
Vaccess status 0x40, loopback not set
Keepalive set (10 sec)
DTR is pulsed for 5 seconds on reset
Last input 00:37:26, output never, output hang never
Last clearing of "show interface" counters 00:47:35
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: Class-based queueing
Output queue: 0/1000/64/0 (size/max total/threshold/drops)
Conversations 0/1/128 (active/max active/max total)
Reserved Conversations 1/1 (allocated/max allocated)
Available Bandwidth 232 kilobits/sec
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
12 packets input, 1068 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
12 packets output, 1134 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 unknown protocol drops
0 output buffer failures, 0 output buffers swapped out
0 carrier transitions
R1#
R1#show policy-map inte
R1#show policy-map interface
Virtual-Template1
Service-policy output: CBWFQ
Service policy content is displayed
for cloned interfaces only such as vaccess and
sessions
Virtual-Access3
Service-policy output: CBWFQ
Class-map: VOICE (match-all)
5 packets, 510 bytes
5 minute offered rate 0 bps, drop rate 0 bps
Match: ip dscp ef (46)
Queueing
Strict Priority
Output Queue: Conversation 136
Bandwidth 48 (kbps) Burst 1200 (Bytes)
(pkts matched/bytes matched) 5/510
(total drops/bytes drops) 0/0
Class-map: SIGNALING (match-all)
0 packets, 0 bytes
5 minute offered rate 0 bps, drop rate 0 bps
Match: ip dscp cs3 (24)
Queueing
Output Queue: Conversation 137
Bandwidth 8 (kbps)Max Threshold 64 (packets)
(pkts matched/bytes matched) 0/0
(depth/total drops/no-buffer drops) 0/0/0
Class-map: class-default (match-any)
7 packets, 534 bytes
5 minute offered rate 0 bps, drop rate 0 bps
Match: any
Queueing
Flow Based Fair Queueing
Maximum Number of Hashed Queues 128
(total queued/total drops/no-buffer drops) 0/0/0
R1# show ppp multilink
Virtual-Access3, bundle name is R2
Endpoint discriminator is R2
Bundle up for 00:49:28, total bandwidth 384, load 1/255
Receive buffer limit 12192 bytes, frag timeout 1000 ms
Interleaving enabled
0/0 fragments/bytes in reassembly list
0 lost fragments, 0 reordered
0/0 discarded fragments/bytes, 0 lost received
0x7 received sequence, 0x7 sent sequence
Member links: 1 (max not set, min not set)
Vi2, since 00:49:28, 624 weight, 614 frag size
No inactive multilink interfaces
R1#
R1#
R1#
R1#sho int s0/0
Serial0/0 is up, line protocol is up
Hardware is M4T
MTU 1500 bytes, BW 1544 Kbit/sec, DLY 20000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation FRAME-RELAY, crc 16, loopback not set
Keepalive set (10 sec)
Restart-Delay is 0 secs
LMI enq sent 298, LMI stat recvd 299, LMI upd recvd 0, DTE LMI up
LMI enq recvd 0, LMI stat sent 0, LMI upd sent 0
LMI DLCI 0 LMI type is ANSI Annex D frame relay DTE
FR SVC disabled, LAPF state down
Broadcast queue 0/64, broadcasts sent/dropped 49/0, interface broadcasts 0
Last input 00:00:05, output 00:00:02, output hang never
Last clearing of "show interface" counters 00:50:43
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: dual fifo
Output queue: high size/max/dropped 0/256/0
Output queue: 0/128 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
947 packets input, 31366 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
946 packets output, 31062 bytes, 0 underruns
0 output errors, 0 collisions, 2 interface resets
0 unknown protocol drops
0 output buffer failures, 0 output buffers swapped out
2 carrier transitions DCD=up DSR=up DTR=up RTS=up CTS=up