mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 02:43:41 +00:00
zebra: retrieve zns context from zvrf when netlink discovery
So as to get the correct NETNS where some discovery must be done and populated, the zns pointer is directly retrieved from zvrf, instead of checking that the VRF is a backend NETNS or not. In the case where the interfaces are discovered before the VRF is enabled ( VRF-lite populate), then the default NS is retrieved. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
This commit is contained in:
parent
281da0a94d
commit
009f8ad5f3
@ -513,13 +513,14 @@ void if_add_update(struct interface *ifp)
|
|||||||
{
|
{
|
||||||
struct zebra_if *if_data;
|
struct zebra_if *if_data;
|
||||||
struct zebra_ns *zns;
|
struct zebra_ns *zns;
|
||||||
|
struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);
|
||||||
|
|
||||||
if (vrf_is_backend_netns())
|
/* case interface populate before vrf enabled */
|
||||||
zns = zebra_ns_lookup((ns_id_t)ifp->vrf_id);
|
if (zvrf->zns)
|
||||||
|
zns = zvrf->zns;
|
||||||
else
|
else
|
||||||
zns = zebra_ns_lookup(NS_DEFAULT);
|
zns = zebra_ns_lookup(NS_DEFAULT);
|
||||||
if_link_per_ns(zns, ifp);
|
if_link_per_ns(zns, ifp);
|
||||||
|
|
||||||
if_data = ifp->info;
|
if_data = ifp->info;
|
||||||
assert(if_data);
|
assert(if_data);
|
||||||
|
|
||||||
@ -810,11 +811,8 @@ void if_nbr_ipv6ll_to_ipv4ll_neigh_update(struct interface *ifp,
|
|||||||
inet_pton(AF_INET, buf, &ipv4_ll);
|
inet_pton(AF_INET, buf, &ipv4_ll);
|
||||||
|
|
||||||
ipv6_ll_address_to_mac(address, (u_char *)mac);
|
ipv6_ll_address_to_mac(address, (u_char *)mac);
|
||||||
|
ns_id = zvrf->zns->ns_id;
|
||||||
|
|
||||||
if (!vrf_is_backend_netns())
|
|
||||||
ns_id = NS_DEFAULT;
|
|
||||||
else
|
|
||||||
ns_id = (ns_id_t)(ifp->vrf_id);
|
|
||||||
/*
|
/*
|
||||||
* Remove existed arp record for the interface as netlink
|
* Remove existed arp record for the interface as netlink
|
||||||
* protocol does not have update message types
|
* protocol does not have update message types
|
||||||
|
@ -1337,10 +1337,7 @@ static int netlink_route_multipath(int cmd, struct prefix *p,
|
|||||||
struct zebra_ns *zns;
|
struct zebra_ns *zns;
|
||||||
struct zebra_vrf *zvrf = vrf_info_lookup(re->vrf_id);
|
struct zebra_vrf *zvrf = vrf_info_lookup(re->vrf_id);
|
||||||
|
|
||||||
if (!vrf_is_backend_netns())
|
zns = zvrf->zns;
|
||||||
zns = zebra_ns_lookup(NS_DEFAULT);
|
|
||||||
else
|
|
||||||
zns = (struct zebra_ns *)ns_info_lookup(re->vrf_id);
|
|
||||||
memset(&req, 0, sizeof req - NL_PKT_BUF_SIZE);
|
memset(&req, 0, sizeof req - NL_PKT_BUF_SIZE);
|
||||||
|
|
||||||
bytelen = (family == AF_INET ? 4 : 16);
|
bytelen = (family == AF_INET ? 4 : 16);
|
||||||
@ -1640,10 +1637,7 @@ int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *in)
|
|||||||
mroute = mr;
|
mroute = mr;
|
||||||
struct zebra_ns *zns;
|
struct zebra_ns *zns;
|
||||||
|
|
||||||
if (!vrf_is_backend_netns())
|
zns = zvrf->zns;
|
||||||
zns = zebra_ns_lookup(NS_DEFAULT);
|
|
||||||
else
|
|
||||||
zns = (struct zebra_ns *)ns_info_lookup(zvrf->vrf->vrf_id);
|
|
||||||
memset(&req.n, 0, sizeof(req.n));
|
memset(&req.n, 0, sizeof(req.n));
|
||||||
memset(&req.ndm, 0, sizeof(req.ndm));
|
memset(&req.ndm, 0, sizeof(req.ndm));
|
||||||
|
|
||||||
@ -1736,11 +1730,9 @@ static int netlink_vxlan_flood_list_update(struct interface *ifp,
|
|||||||
char buf[256];
|
char buf[256];
|
||||||
} req;
|
} req;
|
||||||
u_char dst_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
|
u_char dst_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
|
||||||
|
struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
|
||||||
|
|
||||||
if (!vrf_is_backend_netns())
|
zns = zvrf->zns;
|
||||||
zns = zebra_ns_lookup(NS_DEFAULT);
|
|
||||||
else
|
|
||||||
zns = (struct zebra_ns *)ns_info_lookup(ifp->vrf_id);
|
|
||||||
memset(&req.n, 0, sizeof(req.n));
|
memset(&req.n, 0, sizeof(req.n));
|
||||||
memset(&req.ndm, 0, sizeof(req.ndm));
|
memset(&req.ndm, 0, sizeof(req.ndm));
|
||||||
|
|
||||||
@ -2046,11 +2038,9 @@ static int netlink_macfdb_update(struct interface *ifp, vlanid_t vid,
|
|||||||
int vid_present = 0, dst_present = 0;
|
int vid_present = 0, dst_present = 0;
|
||||||
char vid_buf[20];
|
char vid_buf[20];
|
||||||
char dst_buf[30];
|
char dst_buf[30];
|
||||||
|
struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
|
||||||
|
|
||||||
if (!vrf_is_backend_netns())
|
zns = zvrf->zns;
|
||||||
zns = zebra_ns_lookup(NS_DEFAULT);
|
|
||||||
else
|
|
||||||
zns = (struct zebra_ns *)ns_info_lookup(ifp->vrf_id);
|
|
||||||
zif = ifp->info;
|
zif = ifp->info;
|
||||||
if ((br_if = zif->brslave_info.br_if) == NULL) {
|
if ((br_if = zif->brslave_info.br_if) == NULL) {
|
||||||
zlog_warn("MAC %s on IF %s(%u) - no mapping to bridge",
|
zlog_warn("MAC %s on IF %s(%u) - no mapping to bridge",
|
||||||
@ -2355,11 +2345,9 @@ static int netlink_neigh_update2(struct interface *ifp, struct ipaddr *ip,
|
|||||||
struct zebra_ns *zns;
|
struct zebra_ns *zns;
|
||||||
char buf[INET6_ADDRSTRLEN];
|
char buf[INET6_ADDRSTRLEN];
|
||||||
char buf2[ETHER_ADDR_STRLEN];
|
char buf2[ETHER_ADDR_STRLEN];
|
||||||
|
struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
|
||||||
|
|
||||||
if (!vrf_is_backend_netns())
|
zns = zvrf->zns;
|
||||||
zns = zebra_ns_lookup(NS_DEFAULT);
|
|
||||||
else
|
|
||||||
zns = (struct zebra_ns *)ns_info_lookup(ifp->vrf_id);
|
|
||||||
memset(&req.n, 0, sizeof(req.n));
|
memset(&req.n, 0, sizeof(req.n));
|
||||||
memset(&req.ndm, 0, sizeof(req.ndm));
|
memset(&req.ndm, 0, sizeof(req.ndm));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user