Description

This article outlines the limitation on MAC address configuration on IRB (Integrated Bridging and Routing) interfaces.

Symptoms

Starting with Junos release 13.2, IRB interfaces can be configured with MAC addresses on MPC cards to allow for a distinct MAC address per VLAN.

This MAC address is effective only for the inet family; it does not apply to the inet6 family.

The example below shows this behavior.

R1(irb.102)------------------(xe-2/2/0)R2


[edit]
lab@R1 show interfaces xe-2/3/0
encapsulation ethernet-bridge;
unit 0 {
family bridge;
}

[edit]
lab@R1 show interfaces irb
unit 102 {
family inet {
address 10.0.102.20/24;
}
family inet6 {
address 2001:db8:0:102::20/64;
}
mac 00:00:00:10:02:20;
}


[edit]
lab@R1 show bridge-domains BD
vlan-id none;
interface xe-2/3/0.0;
routing-interface irb.102;


.
lab@R2# show interfaces xe-2/2/0
unit 0 {
family inet {
address 10.0.102.21/24;
}
family inet6 {
address 2001:db8:0:102::21/64;
}
}

lab@R1> show interfaces irb extensive
Physical interface: irb, Enabled, Physical link is Up
Interface index: 132, SNMP ifIndex: 503, Generation: 135
Type: Ethernet, Link-level type: Ethernet, MTU: 1514, Clocking: Unspecified, Speed: Unspecified
Device flags : Present Running
Interface flags: SNMP-Traps
Link type : Full-Duplex
Link flags : None
Physical info : Unspecified
Hold-times : Up 0 ms, Down 0 ms
Current address: 80:71:1f:10:a0:30, Hardware address: 80:71:1f:10:a0:30
Alternate link address: Unspecified
Last flapped : Never
Statistics last cleared: Never
Traffic statistics:
Input bytes : 0
Output bytes : 0
Input packets: 0
Output packets: 0
IPv6 transit statistics:
Input bytes : 0
Output bytes : 0
Input packets: 0
Output packets: 0
Input errors:
Errors: 0, Drops: 0, Framing errors: 0, Runts: 0, Giants: 0, Policed discards: 0, Resource errors: 0
Output errors:
Carrier transitions: 0, Errors: 0, Drops: 0, MTU errors: 0, Resource errors: 0

Logical interface irb.102 (Index 338) (SNMP ifIndex 619) (Generation 153)
Flags: Up SNMP-Traps 0x4004000 Encapsulation: ENET2
MAC: 00:00:00:10:02:20
Bandwidth: 1000mbps
Routing Instance: default-switch Bridging Domain: BD
Traffic statistics:
Input bytes : 9160
Output bytes : 8174
Input packets: 144
Output packets: 115
IPv6 transit statistics:
Input bytes : 1344
Output bytes : 0
Input packets: 21
Output packets: 0
Local statistics:
Input bytes : 7816
Output bytes : 8174
Input packets: 123
Output packets: 115
Transit statistics:
Input bytes : 1344 0 bps
Output bytes : 0 0 bps
Input packets: 21 0 pps
Output packets: 0 0 pps
IPv6 transit statistics:
Input bytes : 1344
Output bytes : 0
Input packets: 21
Output packets: 0
Protocol inet, MTU: 1500, Generation: 182, Route table: 0
Flags: Sendbcast-pkt-to-re
Addresses, Flags: Is-Preferred Is-Primary
Destination: 10.0.102/24, Local: 10.0.102.20, Broadcast: 10.0.102.255, Generation: 150
Protocol inet6, MTU: 1500, Generation: 183, Route table: 0
Flags: Is-Primary
Addresses, Flags: Is-Default Is-Preferred Is-Primary
Destination: 2001:db8:0:102::/64, Local: 2001:db8:0:102::20
Generation: 178
Addresses, Flags: Is-Preferred
Destination: fe80::/64, Local: fe80::8271:1f00:6610:a030
Protocol multiservice, MTU: 1500, Generation: 168
Generation: 184, Route table: 0
Policer: Input: __default_arp_policer__


In the example above, the irb.102 interface is configured with a static MAC of 00:00:00:10:02:20, and is reflected correctly in the output. However, when traffic is originated for an ipv6 destination, the configured MAC address will not be used.


[edit]
lab@R1 run ping 2001:db8:0:102::21
PING6(56=40+8+8 bytes) 2001:db8:0:102::20 --> 2001:db8:0:102::21
16 bytes from 2001:db8:0:102::21, icmp_seq=0 hlim=64 time=3.363 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=1 hlim=64 time=1.862 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=2 hlim=64 time=0.725 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=3 hlim=64 time=0.754 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=4 hlim=64 time=0.699 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=5 hlim=64 time=0.700 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=6 hlim=64 time=0.704 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=7 hlim=64 time=0.711 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=8 hlim=64 time=0.706 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=9 hlim=64 time=0.714 ms
16 bytes from 2001:db8:0:102::21, icmp_seq=10 hlim=64 time=0.705 ms


lab@R2 monitor traffic interface xe-2/2/0 layer2-headers detail
Address resolution is ON. Use <no-resolve> to avoid any reverse lookup delay.
Address resolution timeout is 4s.
Listening on xe-2/2/0, capture size 1514 bytes

Reverse lookup for ff02::1:ff00:21 failed (check DNS reachability).
Other reverse lookup failures will not be reported.
Use <no-resolve> to avoid reverse lookups on IP addresses.

06:43:15.816097 In PFE proto 6 (ipv6): (class 0xc0, hlim 255, next-header: ICMPv6 (58), length: 32) 2001:db8:0:102::20 > ff02::1:ff00:21: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has 2001:db8:0:102::21
source link-address option (1), length 8 (1): 80:71:1f:10:a0:30
06:43:15.816165 Out 80:71:1f:10:9e:b4 > 80:71:1f:10:a0:30 , ethertype IPv6 (0x86dd), length 86: (class 0xc0, hlim 255, next-header: ICMPv6 (58), length: 32) 2001:db8:0:102::21 > 2001:db8:0:102::20: [icmp6 sum ok] ICMP6, neighbor advertisement, length 32, tgt is 2001:db8:0:102::21, Flags [router, solicited, override]
destination link-address option (2), length 8 (1): 80:71:1f:10:9e:b4
06:43:15.817031 In PFE proto 6 (ipv6): (hlim 64, next-header: ICMPv6 (58), length: 16) 2001:db8:0:102::20 > 2001:db8:0:102::21: [icmp6 sum ok] ICMP6, echo request, seq 0
06:43:15.817037 In PFE proto 6 (ipv6): (hlim 64, next-header: ICMPv6 (58), length: 16) 2001:db8:0:102::20 > 2001:db8:0:102::21: [icmp6 sum ok] ICMP6, echo request, seq 1
06:43:15.817060 Out 80:71:1f:10:9e:b4 > 80:71:1f:10:a0:30, ethertype IPv6 (0x86dd), length 70: (hlim 64, next-header: ICMPv6 (58), length: 16) 2001:db8:0:102::21 > 2001:db8:0:102::20: [icmp6 sum ok] ICMP6, echo reply, seq 0


For ipv4, the configured MAC address is used as the source MAC address.


lab@R2 monitor traffic interface xe-2/2/0 layer2-headers detail
Address resolution is ON. Use <no-resolve> to avoid any reverse lookup delay.
Address resolution timeout is 4s.
Listening on xe-2/2/0, capture size 1514 bytes

Reverse lookup for 10.0.102.21 failed (check DNS reachability).
Other reverse lookup failures will not be reported.
Use <no-resolve> to avoid reverse lookups on IP addresses.

06:42:28.913256 In PFE proto 2 (ipv4): (tos 0x0, ttl 64, id 19332, offset 0, flags [none], proto: ICMP (1), length: 84) 10.0.102.20 > 10.0.102.21: ICMP echo request, id 58899, seq 0, length 64
06:42:28.913364 Out 80:71:1f:10:9e:b4 > Broadcast, ethertype ARP (0x0806), length 42: arp who-has 10.0.102.20 tell 10.0.102.21
06:42:28.913967 In 00:00:00:10:02:20 > 80:71:1f:10:9e:b4, ethertype ARP (0x0806), length 60: arp reply 10.0.102.20 is-at 00:00:00:10:02:20
06:42:28.913974 Out 80:71:1f:10:9e:b4 > 00:00:00:10:02:20, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 19335, offset 0, flags [none], proto: ICMP (1), length: 84) 10.0.102.21 > 10.0.102.20: ICMP echo reply, id 58899, seq 0, length 64
06:42:29.913243 In PFE proto 2 (ipv4): (tos 0x0, ttl 64, id 19380, offset 0, flags [none], proto: ICMP (1), length: 84) 10.0.102.20 > 10.0.102.21: ICMP echo request, id 58899, seq 1, length 64
06:42:29.913257 Out 80:71:1f:10:9e:b4 > 00:00:00:10:02:20, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 19383, offset 0, flags [none], proto: ICMP (1), length: 84) 10.0.102.21 > 10.0.102.20: ICMP echo reply, id 58899, seq 1, length 64
06:42:30.914075 In PFE proto 2 (ipv4): (tos 0x0, ttl 64, id 19414, offset 0, flags [none], proto: ICMP (1), length: 84) 10.0.102.20 > 10.0.102.21: ICMP echo request, id 58899, seq 2, length 64
06:42:30.914085 Out 80:71:1f:10:9e:b4 > 00:00:00:10:02:20 , ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 19417, offset 0, flags [none], proto: ICMP (1), length: 84) 10.0.102.21 > 10.0.102.20: ICMP echo reply, id 58899, seq 2, length 64
06:42:31.915591 In PFE proto 2 (ipv4): (tos 0x0, ttl 64, id 19447, offset 0, flags [none], proto: ICMP (1), length: 84) 10.0.102.20 > 10.0.102.21: ICMP echo request, id 58899, seq 3, length 64
06:42:31.915601 Out 80:71:1f:10:9e:b4 > 00:00:00:10:02:20, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 19450, offset 0, flags [none], proto: ICMP (1), length: 84) 10.0.102.21 > 10.0.102.20: ICMP echo reply, id 58899, seq 3, length 64


The ipv6 neighbor on R2 is also learned via the original IRB MAC address.


lab@R2> show ipv6 neighbors 
IPv6 Address                 Linklayer Address  State       Exp Rtr Secure Interface 
2001:Db8:0:102::20           80:71:1f:10:a0:30  stale       384 yes no      xe-2/2/0.0  


The ipv4 ARP entry on R2 shows the configured MAC address on R1.


lab@R2> show arp | match xe
00:00:00:10:02:20 10.0.102.20 10.0.102.20 xe-2/2/0.0 none

Solution


As confirmed by the example above, the MAC address configured under the edit interfaces irb unit <xyz> hierarchy is not effective for the inet6 family.

This has always been the case. There are no plans to include this support in the future.