forked from FRRouting/frr
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
1 parent
ec0ab54
commit cde1af8
Showing
9 changed files
with
110 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
#ifndef __LINUX_IF_ADDR_H | ||
#define __LINUX_IF_ADDR_H | ||
|
||
#include <linux/types.h> | ||
#include <linux/netlink.h> | ||
|
||
struct ifaddrmsg { | ||
__u8 ifa_family; | ||
__u8 ifa_prefixlen; /* The prefix length */ | ||
__u8 ifa_flags; /* Flags */ | ||
__u8 ifa_scope; /* Address scope */ | ||
__u32 ifa_index; /* Link index */ | ||
}; | ||
|
||
/* | ||
* Important comment: | ||
* IFA_ADDRESS is prefix address, rather than local interface address. | ||
* It makes no difference for normally configured broadcast interfaces, | ||
* but for point-to-point IFA_ADDRESS is DESTINATION address, | ||
* local address is supplied in IFA_LOCAL attribute. | ||
* | ||
* IFA_FLAGS is a u32 attribute that extends the u8 field ifa_flags. | ||
* If present, the value from struct ifaddrmsg will be ignored. | ||
*/ | ||
enum { | ||
IFA_UNSPEC, | ||
IFA_ADDRESS, | ||
IFA_LOCAL, | ||
IFA_LABEL, | ||
IFA_BROADCAST, | ||
IFA_ANYCAST, | ||
IFA_CACHEINFO, | ||
IFA_MULTICAST, | ||
IFA_FLAGS, | ||
IFA_RT_PRIORITY, /* u32, priority/metric for prefix route */ | ||
__IFA_MAX, | ||
}; | ||
|
||
#define IFA_MAX (__IFA_MAX - 1) | ||
|
||
/* ifa_flags */ | ||
#define IFA_F_SECONDARY 0x01 | ||
#define IFA_F_TEMPORARY IFA_F_SECONDARY | ||
|
||
#define IFA_F_NODAD 0x02 | ||
#define IFA_F_OPTIMISTIC 0x04 | ||
#define IFA_F_DADFAILED 0x08 | ||
#define IFA_F_HOMEADDRESS 0x10 | ||
#define IFA_F_DEPRECATED 0x20 | ||
#define IFA_F_TENTATIVE 0x40 | ||
#define IFA_F_PERMANENT 0x80 | ||
#define IFA_F_MANAGETEMPADDR 0x100 | ||
#define IFA_F_NOPREFIXROUTE 0x200 | ||
#define IFA_F_MCAUTOJOIN 0x400 | ||
#define IFA_F_STABLE_PRIVACY 0x800 | ||
|
||
struct ifa_cacheinfo { | ||
__u32 ifa_prefered; | ||
__u32 ifa_valid; | ||
__u32 cstamp; /* created timestamp, hundredths of seconds */ | ||
__u32 tstamp; /* updated timestamp, hundredths of seconds */ | ||
}; | ||
|
||
/* backwards compatibility for userspace */ | ||
#define IFA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg)))) | ||
#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg)) | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters