diff options
author | Donald Sharp <sharpd@nvidia.com> | 2023-04-27 05:25:27 +0200 |
---|---|---|
committer | Donald Sharp <sharpd@nvidia.com> | 2023-07-05 17:49:36 +0200 |
commit | 6a3ae11c9b1480966b22d4f9b67a40b76d96aa15 (patch) | |
tree | c01ee9579924a91b3970c76ad412ac5e55a0ab20 | |
parent | Merge pull request #13875 from donaldsharp/static_dplane_issues (diff) | |
download | frr-6a3ae11c9b1480966b22d4f9b67a40b76d96aa15.tar.xz frr-6a3ae11c9b1480966b22d4f9b67a40b76d96aa15.zip |
zebra: Rename vrf_lookup_by_tableid to zebra_vrf_lookup..
Rename the vrf_lookup_by_id function to zebra_vrf_lookup_by_id
and move to zebra_vrf.c where it nominally belongs, as that
we need zebra specific data to find this vrf_id and as such
it does not belong in vrf.c
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
-rw-r--r-- | zebra/if_netlink.c | 3 | ||||
-rw-r--r-- | zebra/rt_netlink.c | 31 | ||||
-rw-r--r-- | zebra/rt_netlink.h | 1 | ||||
-rw-r--r-- | zebra/zebra_vrf.c | 27 | ||||
-rw-r--r-- | zebra/zebra_vrf.h | 1 |
5 files changed, 32 insertions, 31 deletions
diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index cd200d821..cea47b4c3 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -325,7 +325,8 @@ static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb, if (!vrf_lookup_by_id((vrf_id_t)ifi->ifi_index)) { vrf_id_t exist_id; - exist_id = vrf_lookup_by_table(nl_table_id, ns_id); + exist_id = + zebra_vrf_lookup_by_table(nl_table_id, ns_id); if (exist_id != VRF_DEFAULT) { vrf = vrf_lookup_by_id(exist_id); diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index de01ced41..0f542ab80 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -380,33 +380,6 @@ static inline int proto2zebra(int proto, int family, bool is_nexthop) return proto; } -/* -Pending: create an efficient table_id (in a tree/hash) based lookup) - */ -vrf_id_t vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id) -{ - struct vrf *vrf; - struct zebra_vrf *zvrf; - - RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - zvrf = vrf->info; - if (zvrf == NULL) - continue; - /* case vrf with netns : match the netnsid */ - if (vrf_is_backend_netns()) { - if (ns_id == zvrf_id(zvrf)) - return zvrf_id(zvrf); - } else { - /* VRF is VRF_BACKEND_VRF_LITE */ - if (zvrf->table_id != table_id) - continue; - return zvrf_id(zvrf); - } - } - - return VRF_DEFAULT; -} - /** * @parse_encap_mpls() - Parses encapsulated mpls attributes * @tb: Pointer to rtattr to look for nested items in. @@ -790,7 +763,7 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h, table = rtm->rtm_table; /* Map to VRF */ - vrf_id = vrf_lookup_by_table(table, ns_id); + vrf_id = zebra_vrf_lookup_by_table(table, ns_id); if (vrf_id == VRF_DEFAULT) { if (!is_zebra_valid_kernel_table(table) && !is_zebra_main_routing_table(table)) @@ -1079,7 +1052,7 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h, else table = rtm->rtm_table; - vrf = vrf_lookup_by_table(table, ns_id); + vrf = zebra_vrf_lookup_by_table(table, ns_id); if (tb[RTA_IIF]) iif = *(int *)RTA_DATA(tb[RTA_IIF]); diff --git a/zebra/rt_netlink.h b/zebra/rt_netlink.h index 3ca59ce67..d9d0ee762 100644 --- a/zebra/rt_netlink.h +++ b/zebra/rt_netlink.h @@ -90,7 +90,6 @@ extern int netlink_macfdb_read_specific_mac(struct zebra_ns *zns, uint16_t vid); extern int netlink_neigh_read_specific_ip(const struct ipaddr *ip, struct interface *vlan_if); -extern vrf_id_t vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id); struct nl_batch; extern enum netlink_msg_status diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c index 3365cdcdb..74b9d106c 100644 --- a/zebra/zebra_vrf.c +++ b/zebra/zebra_vrf.c @@ -376,6 +376,33 @@ struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf) return zvrf; } +/* +Pending: create an efficient table_id (in a tree/hash) based lookup) + */ +vrf_id_t zebra_vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id) +{ + struct vrf *vrf; + struct zebra_vrf *zvrf; + + RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { + zvrf = vrf->info; + if (zvrf == NULL) + continue; + /* case vrf with netns : match the netnsid */ + if (vrf_is_backend_netns()) { + if (ns_id == zvrf_id(zvrf)) + return zvrf_id(zvrf); + } else { + /* VRF is VRF_BACKEND_VRF_LITE */ + if (zvrf->table_id != table_id) + continue; + return zvrf_id(zvrf); + } + } + + return VRF_DEFAULT; +} + /* Lookup VRF by identifier. */ struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id) { diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h index b23b72826..aef83cd8f 100644 --- a/zebra/zebra_vrf.h +++ b/zebra/zebra_vrf.h @@ -237,6 +237,7 @@ extern struct route_table *zebra_vrf_get_table_with_table_id(afi_t afi, extern void zebra_vrf_update_all(struct zserv *client); extern struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id); extern struct zebra_vrf *zebra_vrf_lookup_by_name(const char *); +extern vrf_id_t zebra_vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id); extern struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf); extern struct route_table *zebra_vrf_table(afi_t, safi_t, vrf_id_t); |