Well, time for another IOS XR post, this time on Interface Bundles, particularly Ethernet. With IOS XR a bundle can be considered a group of one or more ports that are aggregated together and treated as one link. The different links within a single bundle can have different speeds, where the fastest link can be up to four times faster than the slowest link. Each bundle has a single MAC, and a single IP address.
As with some other devices, you can have interfaces in a bundle across multiple line cards, thus protecting yourself from a single point of failure. If a line card fails, the bundle interface will stay up as you configured it to span more then 1 card. A bundle also provides you with more bandwidth then might normally be available if using a single interface. Cisco IOS XR supports 802.3ad (LACP) as well as Cisco proprietary EtherChannel. In all honesty, if you use anything other then LACP you are asking for trouble – LACP has prevent many problems when GBICs have gone bad, but the interfaces are still UP/UP.
Ok, time for the meat and potatoes:
Etherchannels are also different between IOS and IOS XR. In typical IOS, they would be configured as such:
interface port-channel 1
IP add 10.1.1.1 255.255.255.0
interface FastEthernet0/0
channel-group 1
no shut
interface FastEthernet0/1
channel-group 1
no shut
IOS XE is a little different then IOS as you can choose LACP:
interface GigabitEthernet0/0/2
channel-group 12 mode active
no shut
interface GigabitEthernet0/0/3
channel-group 12 mode active
no shut
interface Port-channel12
ip address 10.1.1.1 255.255.255.252
And with IOS XR, it is a bit different again. So, for this example we will configure Ethernet Bundle 200 using two routers called PE1 and PE2. Our interfaces are G0/0/0/11 and G0/1/0/11 on both routers.
First on PE2:
RP/0/RSP0/CPU0:PE2#conf t
First up though, let’s reset the interfaces back to factory by using the no interface command:
RP/0/RSP0/CPU0:PE2(config)#no int g0/0/0/11
RP/0/RSP0/CPU0:PE2(config)#commit
Instead of a port-channel interface, we do a bundle-ether interface
RP/0/RSP0/CPU0:PE2(config)#int bundle-ether 200
RP/0/RSP0/CPU0:PE2(config-if)#ip add 150.1.12.2 255.255.255.0
Now let’s look at our bundle options:
RP/0/RSP0/CPU0:PE2(config-if)#bundle ?
load-balancing Load balancing commands on a bundle
maximum-active Set a limit on the number of links that can be active
minimum-active Set the minimum criteria for the bundle to be active
shutdown Bring all links in the bundle down to Standby state
wait-while Set the wait-while timeout for members of this bundle
Ok, since this is a bundle, we should put restrictions around the max and min links. Normally this is not a problem, but if you had to guarantee bandwidth (say 4G, then you might consider having the min links set to 4, and if you dropped below 4 the interface would go down).
RP/0/RSP0/CPU0:PE2(config-if)#bundle maximum-active links 2
RP/0/RSP0/CPU0:PE2(config-if)#bundle minimum-active links 1
Now let’s take a quick look at our load balancing hash options:
RP/0/RSP0/CPU0:PE2(config-if)#bundle load-balancing hash ?
dst-ip Use the destination IP as the hash function
src-ip Use the source IP as the hash function
So, for this example we will use the src-ip
RP/0/RSP0/CPU0:PE2(config-if)#bundle load-balancing hash src-ip
Now, let’s assign the interfaces to the bundle
RP/0/RSP0/CPU0:PE2(config-if)#int g0/1/0/11
Just like port-channels, the bundle ID should match the interface number you created. But here we will also look at what bundle options we have:
RP/0/RSP0/CPU0:PE2(config-if)#bundle id 200 mode ?
active Run LACP in active mode over the port.
on Do not run LACP over the port.
passive Run LACP in passive mode over the port.
We will use LACP in ACTIVE mode as that is what is recommended by Cisco:
RP/0/RSP0/CPU0:PE2(config-if)#bundle id 200 mode active
RP/0/RSP0/CPU0:PE2(config-if)#no shut
And do the same for G0/0/0/11:
RP/0/RSP0/CPU0:PE2(config-if)#int g0/0/0/11
RP/0/RSP0/CPU0:PE2(config-if)#bundle id 200 mode ac
RP/0/RSP0/CPU0:PE2(config-if)#no shut
Now let’s check our config before we commit:
RP/0/RSP0/CPU0:PE2(config-if)#show config
Fri Apr 27 01:46:28.451 UTC
Building configuration…
!! IOS XR Configuration 4.1.2
interface Bundle-Ether200
ipv4 address 150.1.12.2 255.255.255.0
bundle load-balancing hash src-ip
bundle maximum-active links 2
bundle minimum-active links 1
!
interface GigabitEthernet0/0/0/11
bundle id 200 mode active
no shutdown
!
interface GigabitEthernet0/1/0/11
bundle id 200 mode active
no shutdown
!
end
Looks good, now we can commit the changes
RP/0/RSP0/CPU0:PE2(config)#commit
Fri Apr 27 01:46:44.692 UTC
Now we can do the other Router, PE1
RP/0/RSP0/CPU0:PE1(config)#no int g0/0/0/11
RP/0/RSP0/CPU0:PE1(config)#commit
Fri Apr 27 01:49:05.892 UTC
RP/0/RSP0/CPU0:PE1(config)#int bundle-ether 200
RP/0/RSP0/CPU0:PE1(config-if)#ip add 150.1.12.1/24
RP/0/RSP0/CPU0:PE1(config-if)#bundle maximum-active links 2
RP/0/RSP0/CPU0:PE1(config-if)#bundle minimum-active links 1
RP/0/RSP0/CPU0:PE1(config-if)#bundle load-balancing hash src-ip
RP/0/RSP0/CPU0:PE1(config-if)#int g0/1/0/11
RP/0/RSP0/CPU0:PE1(config-if)#bundle id 200 mode act
RP/0/RSP0/CPU0:PE1(config-if)#no shut
RP/0/RSP0/CPU0:PE1(config-if)#int g0/0/0/11
RP/0/RSP0/CPU0:PE1(config-if)#bundle id 200 mode act
RP/0/RSP0/CPU0:PE1(config-if)#no shut
RP/0/RSP0/CPU0:PE1(config-if)#exit
RP/0/RSP0/CPU0:PE1(config)#show config
Fri Apr 27 01:50:34.351 UTC
Building configuration…
!! IOS XR Configuration 4.1.2
interface Bundle-Ether200
ipv4 address 150.1.12.1 255.255.255.0
bundle load-balancing hash src-ip
bundle maximum-active links 2
bundle minimum-active links 1
!
interface GigabitEthernet0/0/0/11
bundle id 200 mode active
no shutdown
!
interface GigabitEthernet0/1/0/11
bundle id 200 mode active
no shutdown
!
end
RP/0/RSP0/CPU0:PE1(config)#commit
Fri Apr 27 01:50:37.705 UTC
RP/0/RSP0/CPU0:PE1(config)#
Now, let’s look at our bundle interface:
RP/0/RSP0/CPU0:PE1#sh int bundle-eth 200
Fri Apr 27 01:51:04.668 UTC
Bundle-Ether200 is up, line protocol is up
Interface state transitions: 1
Hardware is Aggregated Ethernet interface(s), address is 6c9c.ed2d.0bab
Internet address is 150.1.12.1/24
MTU 1514 bytes, BW 2000000 Kbit (Max: 2000000 Kbit)
reliability 255/255, txload 0/255, rxload 0/255
Encapsulation ARPA,
Full-duplex, 2000Mb/s
loopback not set,
ARP type ARPA, ARP timeout 04:00:00
No. of members in this bundle: 2
GigabitEthernet0/0/0/11 Full-duplex 1000Mb/s Active
GigabitEthernet0/1/0/11 Full-duplex 1000Mb/s Active
Last input 00:00:18, output 00:00:18
Last clearing of “show interface” counters never
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
15 packets input, 1792 bytes, 50 total input drops
0 drops for unrecognized upper-level protocol
Received 2 broadcast packets, 13 multicast packets
0 runts, 0 giants, 0 throttles, 0 parity
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
12 packets output, 1408 bytes, 0 total output drops
As we can see, we are UP and have a full-duplex bandwidth of 2Gs.
So, let’s PING!
RP/0/RSP0/CPU0:PE1#ping 150.1.12.2
Fri Apr 27 01:51:12.692 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 150.1.12.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/4/16 ms
RP/0/RSP0/CPU0:PE1#
Cool! The bundle is working.
Now we can check out some of the details:
RP/0/RSP0/CPU0:PE1#sh bundle bundle-ether 200
Fri Apr 27 02:13:16.767 UTC
Bundle-Ether200
Status: Up
Local links <active/standby/configured>: 2 / 0 / 2
Local bandwidth <effective/available>: 2000000 (2000000) kbps
MAC address (source): 6c9c.ed2d.0bab (Chassis pool)
Minimum active links / bandwidth: 1 / 1 kbps
Maximum active links: 2
Wait while timer: 2000 ms
Load balancing:
Link order signaling: Not configured
Hash type: Src-IP
LACP: Operational
Flap suppression timer: Off
Cisco extensions: Disabled
mLACP: Not configured
IPv4 BFD: Not configured
Port Device State Port ID B/W, kbps
——————– ————— ———– ————– ———-
Gi0/0/0/11 Local Active 0x8000, 0x0002 1000000
Link is Active
Gi0/1/0/11 Local Active 0x8000, 0x0001 1000000
Link is Active
RP/0/RSP0/CPU0:PE1#
Now we can look at LACP:
RP/0/RSP0/CPU0:PE1#show lacp
Fri Apr 27 01:52:35.115 UTC
State: a – Port is marked as Aggregatable.
s – Port is Synchronized with peer.
c – Port is marked as Collecting.
d – Port is marked as Distributing.
A – Device is in Active mode.
F – Device requests PDUs from the peer at fast rate.
D – Port is using default values for partner information.
E – Information about partner has expired.
Bundle-Ether200
Port (rate) State Port ID Key System ID
——————– ——– ————- —— ————————
Local
Gi0/0/0/11 30s ascdA— 0x8000,0x0002 0x00c8 0x8000,6c-9c-ed-2d-0b-ac
Partner 30s ascdA— 0x8000,0x0003 0x00c8 0x8000,6c-9c-ed-2d-1f-cc
Gi0/1/0/11 30s ascdA— 0x8000,0x0001 0x00c8 0x8000,6c-9c-ed-2d-0b-ac
Partner 30s ascdA— 0x8000,0x0004 0x00c8 0x8000,6c-9c-ed-2d-1f-cc
Port Receive Period Selection Mux A Churn P Churn
——————– ———- —— ———- ——— ——- ——-
Local
Gi0/0/0/11 Current Slow Selected Distrib None None
Gi0/1/0/11 Current Slow Selected Distrib None None
RP/0/RSP0/CPU0:PE1#