mirror_frr/include/linux
Anuradha Karuppiah cde1af847e zebra: set connected route metric based on the devaddr metric
MACVLAN devices are typically used for applications such as VRR/VRRP that
require a second MAC address (virtual). These devices have a corresponding
SVI/VLAN device -
root@TORC11:~# ip addr show vlan1002
39: vlan1002@bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9152 qdisc noqueue master vrf1 state UP group default
    link/ether 00:02:00:00:00:2e brd ff:ff:ff:ff:ff:ff
    inet6 2001:aa:1::2/64 scope global
       valid_lft forever preferred_lft forever
root@TORC11:~# ip addr show vlan1002-v0
40: vlan1002-v0@vlan1002: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9152 qdisc noqueue master vrf1 state UP group default
    link/ether 00:00:5e:00:01:01 brd ff:ff:ff:ff:ff:ff
    inet6 2001:aa:1::a/64 metric 1024 scope global
       valid_lft forever preferred_lft forever
root@TORC11:~#

The macvlan device is used primarily for RX (VR-IP/VR-MAC). And TX is via
the SVI. To acheive that functionality the macvlan network's metric
is set to a higher value.

Zebra currently ignores the devaddr metric sent by the kernel and hardcodes
it to 0. This commit eliminates that hardcoding. If the devaddr metric
is available (METRIC_MAX) it is used for setting up the connected route
otherwise we fallback to the dev/interface metric.

Setting the macvlan metric to a higher value ensures that zebra will always
select the connected route on the SVI (and subsequently use it for next hop
resolution etc.) -
root@TORC11:~# vtysh -c "show ip route vrf vrf1 2001:aa:1::/64"
Routing entry for 2001:aa:1::/64
  Known via "connected", distance 0, metric 1024, vrf vrf1
  Last update 11:30:56 ago
  * directly connected, vlan1002-v0

Routing entry for 2001:aa:1::/64
  Known via "connected", distance 0, metric 0, vrf vrf1, best
  Last update 11:30:56 ago
  * directly connected, vlan1002

root@TORC11:~#

Ticket: CM-23511
Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-01-25 14:19:26 -05:00
..
fib_rules.h *: PBR - netlink interaction and basic definitions 2018-03-09 11:07:41 -05:00
if_addr.h zebra: set connected route metric based on the devaddr metric 2019-01-25 14:19:26 -05:00
if_bridge.h build: include our own copies of some linux kernel headers 2017-10-24 09:20:12 -02:00
if_link.h build: include our own copies of some linux kernel headers 2017-10-24 09:20:12 -02:00
lwtunnel.h build: include our own copies of some linux kernel headers 2017-10-24 09:20:12 -02:00
mpls_iptunnel.h build: include our own copies of some linux kernel headers 2017-10-24 09:20:12 -02:00
neighbour.h build: include our own copies of some linux kernel headers 2017-10-24 09:20:12 -02:00
net_namespace.h zebra: upon NS creation, collect the NSID via netlink 2018-02-27 11:11:24 +01:00
netlink.h include: add netlink.h to our build system 2018-06-21 08:07:30 -04:00
rtnetlink.h build: include our own copies of some linux kernel headers 2017-10-24 09:20:12 -02:00
socket.h build: include our own copies of some linux kernel headers 2017-10-24 09:20:12 -02:00