summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilippe Guibert <philippe.guibert@6wind.com>2019-02-11 17:42:50 +0100
committerPhilippe Guibert <philippe.guibert@6wind.com>2019-06-12 14:10:28 +0200
commita41c4e1b1f577443ad26222704a69649c280cd9e (patch)
tree2d01484bb959675b20c1596be1c1f4e28ddaf403
parentlib, bgpd, ospfd, pimd, zebra, rip, ripng, bfd: change if_update_to_new_vrf()... (diff)
downloadfrr-a41c4e1b1f577443ad26222704a69649c280cd9e.tar.xz
frr-a41c4e1b1f577443ad26222704a69649c280cd9e.zip
*: change interface structure, from vrf_id to vrf
Field vrf_id is replaced by the pointer of the struct vrf *. For that all other code referencing to (interface)->vrf_id is replaced. This work should not change the behaviour. It is just a continuation work toward having an interface API handling vrf pointer only. some new generic functions are created in vrf: vrf_to_id, vrf_to_name, a zebra function is also created: zvrf_info_lookup an ospf function is also created: ospf_lookup_by_vrf it is to be noted that now that interface has a vrf pointer, some more optimisations could be thought through all the rest of the code. as example, many structure store the vrf_id. those structures could get the exact vrf structure if inherited from an interface vrf context. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
-rw-r--r--bfdd/bfd.c4
-rw-r--r--bfdd/ptm_adapter.c8
-rw-r--r--bgpd/bgp_zebra.c2
-rw-r--r--isisd/isis_cli.c3
-rw-r--r--lib/if.c25
-rw-r--r--lib/if.h30
-rw-r--r--lib/vrf.c15
-rw-r--r--lib/vrf.h2
-rw-r--r--lib/zclient.c12
-rw-r--r--ospfd/ospf_interface.c4
-rw-r--r--ospfd/ospf_vty.c14
-rw-r--r--ospfd/ospf_zebra.c8
-rw-r--r--ospfd/ospfd.c9
-rw-r--r--ospfd/ospfd.h1
-rw-r--r--pimd/pim_iface.c8
-rw-r--r--pimd/pim_static.c2
-rw-r--r--pimd/pim_zebra.c2
-rw-r--r--ripd/rip_interface.c11
-rw-r--r--ripd/ripd.c2
-rw-r--r--ripngd/ripng_interface.c11
-rw-r--r--ripngd/ripngd.c2
-rw-r--r--staticd/static_routes.c4
-rw-r--r--zebra/connected.c24
-rw-r--r--zebra/if_ioctl.c3
-rw-r--r--zebra/if_netlink.c14
-rw-r--r--zebra/interface.c42
-rw-r--r--zebra/ioctl.c12
-rw-r--r--zebra/redistribute.c18
-rw-r--r--zebra/router-id.c4
-rw-r--r--zebra/rt_netlink.c14
-rw-r--r--zebra/rtadv.c14
-rw-r--r--zebra/zapi_msg.c16
-rw-r--r--zebra/zebra_dplane.c8
-rw-r--r--zebra/zebra_ptm.c2
-rw-r--r--zebra/zebra_vrf.h9
-rw-r--r--zebra/zebra_vxlan.c47
36 files changed, 229 insertions, 177 deletions
diff --git a/bfdd/bfd.c b/bfdd/bfd.c
index 435443182..3d8f38181 100644
--- a/bfdd/bfd.c
+++ b/bfdd/bfd.c
@@ -139,7 +139,7 @@ int bfd_session_enable(struct bfd_session *bs)
if (bs->key.ifname[0]) {
if (vrf)
- ifp = if_lookup_by_name(bs->key.ifname, vrf->vrf_id);
+ ifp = if_lookup_by_name(bs->key.ifname, vrf);
else
ifp = if_lookup_by_name_all_vrf(bs->key.ifname);
if (ifp == NULL) {
@@ -148,7 +148,7 @@ int bfd_session_enable(struct bfd_session *bs)
return 0;
}
if (bs->key.ifname[0] && !vrf) {
- vrf = vrf_lookup_by_id(ifp->vrf_id);
+ vrf = ifp->vrf;
if (vrf == NULL) {
log_error(
"session-enable: specified VRF doesn't exists.");
diff --git a/bfdd/ptm_adapter.c b/bfdd/ptm_adapter.c
index 1d5e8310f..a634d923d 100644
--- a/bfdd/ptm_adapter.c
+++ b/bfdd/ptm_adapter.c
@@ -572,7 +572,10 @@ static void bfdd_sessions_enable_interface(struct interface *ifp)
{
struct bfd_session_observer *bso;
struct bfd_session *bs;
- struct vrf *vrf;
+ struct vrf *vrf = ifp->vrf;
+
+ if (!vrf)
+ return;
TAILQ_FOREACH(bso, &bglobal.bg_obslist, bso_entry) {
bs = bso->bso_bs;
@@ -581,9 +584,6 @@ static void bfdd_sessions_enable_interface(struct interface *ifp)
/* Interface name mismatch. */
if (strcmp(ifp->name, bs->key.ifname))
continue;
- vrf = vrf_lookup_by_id(ifp->vrf_id);
- if (!vrf)
- continue;
if (bs->key.vrfname[0] &&
strcmp(vrf->name, bs->key.vrfname))
continue;
diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
index 44c1261a9..ae30fcfb1 100644
--- a/bgpd/bgp_zebra.c
+++ b/bgpd/bgp_zebra.c
@@ -802,7 +802,7 @@ bool bgp_zebra_nexthop_set(union sockunion *local, union sockunion *remote,
peer->bgp->vrf_id));
} else if (peer->update_if)
ifp = if_lookup_by_name(peer->update_if,
- vrf_lookup_by_id(peer->bgp->vrf_id));
+ vrf_lookup_by_id(peer->bgp->vrf_id));
else
ifp = if_lookup_by_ipv6_exact(&local->sin6.sin6_addr,
local->sin6.sin6_scope_id,
diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c
index 0334b98a1..d2733ebaf 100644
--- a/isisd/isis_cli.c
+++ b/isisd/isis_cli.c
@@ -97,8 +97,7 @@ DEFPY(no_router_isis, no_router_isis_cmd, "no router isis WORD$tag",
/* add callbacks to delete each of the circuits listed
*/
const char *vrf_name =
- vrf_lookup_by_id(circuit->interface->vrf_id)
- ->name;
+ circuit->interface->vrf->name;
snprintf(
temp_xpath, XPATH_MAXLEN,
"/frr-interface:lib/interface[name='%s'][vrf='%s']/frr-isisd:isis",
diff --git a/lib/if.c b/lib/if.c
index 16d2b2bd6..163de6856 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -141,7 +141,7 @@ struct interface *if_create(const char *name, struct vrf *vrf)
assert(name);
strlcpy(ifp->name, name, sizeof(ifp->name));
- ifp->vrf_id = vrf->vrf_id;
+ ifp->vrf = vrf;
IFNAME_RB_INSERT(vrf, ifp);
ifp->connected = list_new();
ifp->connected->del = (void (*)(void *))connected_free;
@@ -170,14 +170,14 @@ void if_update_to_new_vrf(struct interface *ifp, struct vrf *vrf)
return;
}
/* remove interface from old master vrf list */
- old_vrf = vrf_lookup_by_id(ifp->vrf_id);
+ old_vrf = ifp->vrf;
if (old_vrf) {
IFNAME_RB_REMOVE(old_vrf, ifp);
if (ifp->ifindex != IFINDEX_INTERNAL)
IFINDEX_RB_REMOVE(old_vrf, ifp);
}
- ifp->vrf_id = vrf->vrf_id;
+ ifp->vrf = vrf;
IFNAME_RB_INSERT(vrf, ifp);
if (ifp->ifindex != IFINDEX_INTERNAL)
@@ -225,9 +225,8 @@ void if_delete_retain(struct interface *ifp)
/* Delete and free interface structure. */
void if_delete(struct interface *ifp)
{
- struct vrf *vrf;
+ struct vrf *vrf = ifp->vrf;
- vrf = vrf_lookup_by_id(ifp->vrf_id);
assert(vrf);
IFNAME_RB_REMOVE(vrf, ifp);
@@ -440,7 +439,7 @@ struct interface *if_get_by_name(const char *name, struct vrf *vrf)
case VRF_BACKEND_VRF_LITE:
ifp = if_lookup_by_name_all_vrf(name);
if (ifp) {
- if (ifp->vrf_id == vrf->vrf_id)
+ if (ifp->vrf == vrf)
return ifp;
/* If it came from the kernel or by way of zclient,
* believe it and update the ifp accordingly.
@@ -458,7 +457,7 @@ void if_set_index(struct interface *ifp, ifindex_t ifindex)
{
struct vrf *vrf;
- vrf = vrf_lookup_by_id(ifp->vrf_id);
+ vrf = ifp->vrf;
assert(vrf);
if (ifp->ifindex == ifindex)
@@ -602,7 +601,8 @@ static void if_dump(const struct interface *ifp)
zlog_info(
"Interface %s vrf %u index %d metric %d mtu %d "
"mtu6 %d %s",
- ifp->name, ifp->vrf_id, ifp->ifindex, ifp->metric,
+ ifp->name, vrf_to_id(ifp->vrf),
+ ifp->ifindex, ifp->metric,
ifp->mtu, ifp->mtu6, if_flag_dump(ifp->flags));
}
@@ -784,7 +784,8 @@ connected_log(struct connected *connected, char *str)
p = connected->address;
snprintf(logbuf, BUFSIZ, "%s interface %s vrf %u %s %s/%d ", str,
- ifp->name, ifp->vrf_id, prefix_family_str(p),
+ ifp->name, vrf_to_id(ifp->vrf),
+ prefix_family_str(p),
inet_ntop(p->family, &p->u.prefix, buf, BUFSIZ), p->prefixlen);
p = connected->destination;
@@ -1159,7 +1160,7 @@ DEFPY_NOSH (interface,
ifp = if_lookup_by_name(ifname, vrf);
else
ifp = if_lookup_by_name_all_vrf(ifname);
- if (ifp && ifp->vrf_id != vrf->vrf_id) {
+ if (ifp && ifp->vrf != vrf) {
/*
* Special case 1: a VRF name was specified, but the found
* interface is associated to different VRF. Reject the command.
@@ -1175,7 +1176,7 @@ DEFPY_NOSH (interface,
* interface is associated to a VRF other than the default one.
* Update vrf_id and vrfname to account for that.
*/
- vrf = vrf_lookup_by_id(ifp->vrf_id);
+ vrf = ifp->vrf;
assert(vrf);
vrfname = vrf->name;
}
@@ -1340,7 +1341,7 @@ static int lib_interface_create(enum nb_event event,
*/
if (vrf_get_backend() == VRF_BACKEND_VRF_LITE) {
ifp = if_lookup_by_name_all_vrf(ifname);
- if (ifp && ifp->vrf_id != vrf->vrf_id) {
+ if (ifp && ifp->vrf != vrf) {
zlog_warn(
"%s: interface %s already exists in another VRF",
__func__, ifp->name);
diff --git a/lib/if.h b/lib/if.h
index 8bbbd1082..93c651e39 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -294,7 +294,7 @@ struct interface {
#endif /* HAVE_NET_RT_IFLIST */
struct route_node *node;
- vrf_id_t vrf_id;
+ struct vrf *vrf;
QOBJ_FIELDS
};
@@ -305,33 +305,37 @@ RB_HEAD(if_index_head, interface);
RB_PROTOTYPE(if_index_head, interface, index_entry, if_cmp_func)
DECLARE_QOBJ_TYPE(interface)
-#define IFNAME_RB_INSERT(vrf, ifp) \
- if (RB_INSERT(if_name_head, &vrf->ifaces_by_name, (ifp))) \
+#define IFNAME_RB_INSERT(_vrf, _ifp) \
+ if (RB_INSERT(if_name_head, &(_vrf)->ifaces_by_name, (_ifp))) \
flog_err(EC_LIB_INTERFACE, \
"%s(%s): corruption detected -- interface with this " \
"name exists already in VRF %u!", \
- __func__, (ifp)->name, (ifp)->vrf_id);
+ __func__, (_ifp)->name, (_ifp)->vrf ? \
+ (_ifp)->vrf->vrf_id : VRF_UNKNOWN);
-#define IFNAME_RB_REMOVE(vrf, ifp) \
- if (RB_REMOVE(if_name_head, &vrf->ifaces_by_name, (ifp)) == NULL) \
+#define IFNAME_RB_REMOVE(_vrf, _ifp) \
+ if (RB_REMOVE(if_name_head, &(_vrf)->ifaces_by_name, (_ifp)) == NULL) \
flog_err(EC_LIB_INTERFACE, \
"%s(%s): corruption detected -- interface with this " \
"name doesn't exist in VRF %u!", \
- __func__, (ifp)->name, (ifp)->vrf_id);
+ __func__, (_ifp)->name, (_ifp)->vrf ? \
+ (_ifp)->vrf->vrf_id : VRF_UNKNOWN);
-#define IFINDEX_RB_INSERT(vrf, ifp) \
- if (RB_INSERT(if_index_head, &vrf->ifaces_by_index, (ifp))) \
+#define IFINDEX_RB_INSERT(_vrf, _ifp) \
+ if (RB_INSERT(if_index_head, &(_vrf)->ifaces_by_index, (_ifp))) \
flog_err(EC_LIB_INTERFACE, \
"%s(%u): corruption detected -- interface with this " \
"ifindex exists already in VRF %u!", \
- __func__, (ifp)->ifindex, (ifp)->vrf_id);
+ __func__, (_ifp)->ifindex, (_ifp)->vrf ? \
+ (_ifp)->vrf->vrf_id : VRF_UNKNOWN);
-#define IFINDEX_RB_REMOVE(vrf, ifp) \
- if (RB_REMOVE(if_index_head, &vrf->ifaces_by_index, (ifp)) == NULL) \
+#define IFINDEX_RB_REMOVE(_vrf, _ifp) \
+ if (RB_REMOVE(if_index_head, &(_vrf)->ifaces_by_index, (_ifp)) == NULL)\
flog_err(EC_LIB_INTERFACE, \
"%s(%u): corruption detected -- interface with this " \
"ifindex doesn't exist in VRF %u!", \
- __func__, (ifp)->ifindex, (ifp)->vrf_id);
+ __func__, (_ifp)->ifindex, (_ifp)->vrf ? \
+ (_ifp)->vrf->vrf_id : VRF_UNKNOWN);
#define FOR_ALL_INTERFACES(vrf, ifp) \
if (vrf) \
diff --git a/lib/vrf.c b/lib/vrf.c
index 862a3da06..2efc64b09 100644
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -923,14 +923,15 @@ int vrf_bind(vrf_id_t vrf_id, int fd, const char *name)
{
int ret = 0;
struct interface *ifp;
+ struct vrf *vrf = vrf_lookup_by_id(vrf_id);
- if (fd < 0 || name == NULL)
+ if (fd < 0 || name == NULL || !vrf)
return fd;
/* the device should exist
* otherwise we should return
* case ifname = vrf in netns mode => return
*/
- ifp = if_lookup_by_name(name, vrf_id);
+ ifp = if_lookup_by_name(name, vrf);
if (!ifp)
return fd;
#ifdef SO_BINDTODEVICE
@@ -1017,3 +1018,13 @@ vrf_id_t vrf_generate_id(void)
return ++vrf_id_local;
}
+
+vrf_id_t vrf_to_id(struct vrf *vrf)
+{
+ return vrf ? vrf->vrf_id : VRF_UNKNOWN;
+}
+
+const char *vrf_to_name(struct vrf *vrf)
+{
+ return vrf ? vrf->name : "NIL";
+}
diff --git a/lib/vrf.h b/lib/vrf.h
index af055ee27..169feb6f5 100644
--- a/lib/vrf.h
+++ b/lib/vrf.h
@@ -113,6 +113,8 @@ extern struct vrf *vrf_lookup_by_name(const char *);
extern struct vrf *vrf_get(vrf_id_t, const char *);
extern const char *vrf_id_to_name(vrf_id_t vrf_id);
extern vrf_id_t vrf_name_to_id(const char *);
+extern vrf_id_t vrf_to_id(struct vrf *vrf);
+extern const char *vrf_to_name(struct vrf *vrf);
/* vrf context is searched and created
*/
diff --git a/lib/zclient.c b/lib/zclient.c
index da8dc4e90..94d92f67e 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -1469,6 +1469,11 @@ struct interface *zebra_interface_add_read(struct stream *s, vrf_id_t vrf_id)
/* Lookup/create interface by name. */
ifp = if_get_by_name(ifname_tmp, vrf);
+ /* update vrf_id of interface */
+ if (ifp->vrf->vrf_id == VRF_UNKNOWN &&
+ vrf->vrf_id != VRF_UNKNOWN)
+ ifp->vrf = vrf;
+
zebra_interface_if_set_value(s, ifp);
return ifp;
@@ -2844,11 +2849,12 @@ void zclient_interface_set_master(struct zclient *client,
s = client->obuf;
stream_reset(s);
- zclient_create_header(s, ZEBRA_INTERFACE_SET_MASTER, master->vrf_id);
+ zclient_create_header(s, ZEBRA_INTERFACE_SET_MASTER,
+ vrf_to_id(master->vrf));
- stream_putl(s, master->vrf_id);
+ stream_putl(s, vrf_to_id(master->vrf));
stream_putl(s, master->ifindex);
- stream_putl(s, slave->vrf_id);
+ stream_putl(s, vrf_to_id(slave->vrf));
stream_putl(s, slave->ifindex);
stream_putw_at(s, 0, stream_get_endp(s));
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index 4075f3209..6516129c5 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -349,8 +349,8 @@ void ospf_if_free(struct ospf_interface *oi)
if (IS_DEBUG_OSPF_EVENT)
zlog_debug("%s: ospf interface %s vrf %s id %u deleted",
__PRETTY_FUNCTION__, oi->ifp->name,
- ospf_vrf_id_to_name(oi->ifp->vrf_id),
- oi->ifp->vrf_id);
+ vrf_to_name(oi->ifp->vrf),
+ vrf_to_id(oi->ifp->vrf));
ospf_delete_from_if(oi->ifp, oi);
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index e2ddf36a3..6fee49d12 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -7279,7 +7279,7 @@ static int ospf_vty_dead_interval_set(struct vty *vty, const char *interval_str,
if (nbr_str) {
struct ospf *ospf = NULL;
- ospf = ospf_lookup_by_vrf_id(ifp->vrf_id);
+ ospf = ospf_lookup_by_vrf(ifp->vrf);
if (ospf) {
oi = ospf_if_lookup_by_local_addr(ospf, ifp, addr);
if (oi)
@@ -7396,7 +7396,7 @@ DEFUN (no_ip_ospf_dead_interval,
if (argc == 1) {
struct ospf *ospf = NULL;
- ospf = ospf_lookup_by_vrf_id(ifp->vrf_id);
+ ospf = ospf_lookup_by_vrf(ifp->vrf);
if (ospf) {
oi = ospf_if_lookup_by_local_addr(ospf, ifp, addr);
if (oi)
@@ -7995,8 +7995,8 @@ DEFUN (ip_ospf_area,
argv_find(argv, argc, "area", &idx);
areaid = argv[idx + 1]->arg;
- if (ifp->vrf_id && !instance)
- ospf = ospf_lookup_by_vrf_id(ifp->vrf_id);
+ if (ifp->vrf && ifp->vrf->vrf_id && !instance)
+ ospf = ospf_lookup_by_vrf(ifp->vrf);
else
ospf = ospf_lookup_instance(instance);
@@ -8093,8 +8093,8 @@ DEFUN (no_ip_ospf_area,
if (argv_find(argv, argc, "(1-65535)", &idx))
instance = strtol(argv[idx]->arg, NULL, 10);
- if (ifp->vrf_id && !instance)
- ospf = ospf_lookup_by_vrf_id(ifp->vrf_id);
+ if (ifp->vrf && ifp->vrf->vrf_id && !instance)
+ ospf = ospf_lookup_by_vrf(ifp->vrf);
else
ospf = ospf_lookup_instance(instance);
@@ -9720,7 +9720,7 @@ static int config_write_interface_one(struct vty *vty, struct vrf *vrf)
continue;
vty_frame(vty, "!\n");
- if (ifp->vrf_id == VRF_DEFAULT)
+ if (ifp->vrf->vrf_id == VRF_DEFAULT)
vty_frame(vty, "interface %s\n", ifp->name);
else
vty_frame(vty, "interface %s vrf %s\n", ifp->name,
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index 01b48b0c7..33d2c82d0 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -110,8 +110,8 @@ static int ospf_interface_add(ZAPI_CALLBACK_ARGS)
if (IS_DEBUG_OSPF(zebra, ZEBRA_INTERFACE))
zlog_debug(
"Zebra: interface add %s vrf %s[%u] index %d flags %llx metric %d mtu %d speed %u",
- ifp->name, ospf_vrf_id_to_name(ifp->vrf_id),
- ifp->vrf_id, ifp->ifindex,
+ ifp->name, vrf_to_name(ifp->vrf),
+ vrf_to_id(ifp->vrf), ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu,
ifp->speed);
@@ -152,8 +152,8 @@ static int ospf_interface_delete(ZAPI_CALLBACK_ARGS)
if (IS_DEBUG_OSPF(zebra, ZEBRA_INTERFACE))
zlog_debug(
"Zebra: interface delete %s vrf %s[%u] index %d flags %llx metric %d mtu %d",
- ifp->name, ospf_vrf_id_to_name(ifp->vrf_id),
- ifp->vrf_id, ifp->ifindex,
+ ifp->name, vrf_to_name(ifp->vrf),
+ vrf_to_id(ifp->vrf), ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);
hook_call(ospf_if_delete, ifp);
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 073a51561..de51ec226 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -452,6 +452,11 @@ struct ospf *ospf_lookup_by_vrf_id(vrf_id_t vrf_id)
vrf = vrf_lookup_by_id(vrf_id);
if (!vrf)
return NULL;
+ return ospf_lookup_by_vrf(vrf);
+}
+
+struct ospf *ospf_lookup_by_vrf(struct vrf *vrf)
+{
return (vrf->info) ? (struct ospf *)vrf->info : NULL;
}
@@ -1347,8 +1352,8 @@ void ospf_if_update(struct ospf *ospf, struct interface *ifp)
if (IS_DEBUG_OSPF_EVENT)
zlog_debug(
- "%s: interface %s ifp->vrf_id %u ospf vrf %s vrf_id %u router_id %s",
- __PRETTY_FUNCTION__, ifp->name, ifp->vrf_id,
+ "%s: interface %s ifp->vrf->vrf_id %u ospf vrf %s vrf_id %u router_id %s",
+ __PRETTY_FUNCTION__, ifp->name, vrf_to_id(ifp->vrf),
ospf_vrf_id_to_name(ospf->vrf_id), ospf->vrf_id,
inet_ntoa(ospf->router_id));
diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h
index cbea033b7..a46febaec 100644
--- a/ospfd/ospfd.h
+++ b/ospfd/ospfd.h
@@ -507,6 +507,7 @@ extern struct ospf *ospf_get_instance(unsigned short);
extern struct ospf *ospf_lookup_by_inst_name(unsigned short instance,
const char *name);
extern struct ospf *ospf_lookup_by_vrf_id(vrf_id_t vrf_id);
+extern struct ospf *ospf_lookup_by_vrf(struct vrf *vrf);
extern void ospf_finish(struct ospf *);
extern void ospf_router_id_update(struct ospf *ospf);
extern int ospf_network_set(struct ospf *, struct prefix_ipv4 *, struct in_addr,
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c
index 4d6af1b51..6ccc6ed19 100644
--- a/pimd/pim_iface.c
+++ b/pimd/pim_iface.c
@@ -120,7 +120,7 @@ struct pim_interface *pim_if_new(struct interface *ifp, bool igmp, bool pim,
pim_ifp = XCALLOC(MTYPE_PIM_INTERFACE, sizeof(*pim_ifp));
pim_ifp->options = 0;
- pim_ifp->pim = pim_get_pim_instance(ifp->vrf_id);
+ pim_ifp->pim = pim_get_pim_instance(vrf_to_id(ifp->vrf));
pim_ifp->mroute_vif_index = -1;
pim_ifp->igmp_version = IGMP_DEFAULT_VERSION;
@@ -781,7 +781,7 @@ void pim_if_addr_del_all(struct interface *ifp)
struct connected *ifc;
struct listnode *node;
struct listnode *nextnode;
- struct vrf *vrf = vrf_lookup_by_id(ifp->vrf_id);
+ struct vrf *vrf = ifp->vrf;
struct pim_instance *pim;
if (!vrf)
@@ -853,7 +853,7 @@ struct in_addr pim_find_primary_addr(struct interface *ifp)
int v4_addrs = 0;
int v6_addrs = 0;
struct pim_interface *pim_ifp = ifp->info;
- struct vrf *vrf = vrf_lookup_by_id(ifp->vrf_id);
+ struct vrf *vrf = ifp->vrf;
if (!vrf)
return addr;
@@ -894,7 +894,7 @@ struct in_addr pim_find_primary_addr(struct interface *ifp)
if (!v4_addrs && v6_addrs && !if_is_loopback(ifp)) {
struct interface *lo_ifp;
// DBS - Come back and check here
- if (ifp->vrf_id == VRF_DEFAULT)
+ if (!ifp->vrf || ifp->vrf->vrf_id == VRF_DEFAULT)
lo_ifp = if_lookup_by_name("lo", vrf);
else
lo_ifp = if_lookup_by_name(vrf->name, vrf);
diff --git a/pimd/pim_static.c b/pimd/pim_static.c
index 442b22e06..4ddf21951 100644
--- a/pimd/pim_static.c
+++ b/pimd/pim_static.c
@@ -92,7 +92,7 @@ int pim_static_add(struct pim_instance *pim, struct interface *iif,
return -4;
}
#endif
- if (iif->vrf_id != oif->vrf_id) {
+ if (iif->vrf != oif->vrf) {
return -3;
}
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index b5cde6b7f..c4d183535 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -214,7 +214,7 @@ static int pim_zebra_if_state_up(ZAPI_CALLBACK_ARGS)
RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
if ((table_id == vrf->data.l.table_id)
- && (ifp->vrf_id != vrf->vrf_id)) {
+ && (ifp->vrf != vrf)) {
struct interface *master = if_lookup_by_name(
vrf->name, vrf);
diff --git a/ripd/rip_interface.c b/ripd/rip_interface.c
index 631c7f460..307785cdb 100644
--- a/ripd/rip_interface.c
+++ b/ripd/rip_interface.c
@@ -364,7 +364,7 @@ int rip_interface_down(ZAPI_CALLBACK_ARGS)
if (IS_RIP_DEBUG_ZEBRA)
zlog_debug(
"interface %s vrf %u index %d flags %llx metric %d mtu %d is down",
- ifp->name, ifp->vrf_id, ifp->ifindex,
+ ifp->name, ifp->vrf->vrf_id, ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);
return 0;
@@ -385,7 +385,7 @@ int rip_interface_up(ZAPI_CALLBACK_ARGS)
if (IS_RIP_DEBUG_ZEBRA)
zlog_debug(
"interface %s vrf %u index %d flags %#llx metric %d mtu %d is up",
- ifp->name, ifp->vrf_id, ifp->ifindex,
+ ifp->name, ifp->vrf->vrf_id, ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);
rip_interface_sync(ifp);
@@ -413,7 +413,7 @@ int rip_interface_add(ZAPI_CALLBACK_ARGS)
if (IS_RIP_DEBUG_ZEBRA)
zlog_debug(
"interface add %s vrf %u index %d flags %#llx metric %d mtu %d",
- ifp->name, ifp->vrf_id, ifp->ifindex,
+ ifp->name, ifp->vrf->vrf_id, ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);
/* Check if this interface is RIP enabled or not.*/
@@ -453,7 +453,7 @@ int rip_interface_delete(ZAPI_CALLBACK_ARGS)
zlog_info(
"interface delete %s vrf %u index %d flags %#llx metric %d mtu %d",
- ifp->name, ifp->vrf_id, ifp->ifindex,
+ ifp->name, ifp->vrf->vrf_id, ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu);
/* To support pseudo interface do not free interface structure. */
@@ -482,6 +482,7 @@ int rip_interface_vrf_update(ZAPI_CALLBACK_ARGS)
ifp->name, vrf_id, new_vrf_id);
if_update_to_new_vrf(ifp, new_vrf);
+
rip_interface_sync(ifp);
return 0;
@@ -1226,7 +1227,7 @@ void rip_interface_sync(struct interface *ifp)
{
struct vrf *vrf;
- vrf = vrf_lookup_by_id(ifp->vrf_id);
+ vrf = ifp->vrf;
if (vrf) {
struct rip_interface *ri;
diff --git a/ripd/ripd.c b/ripd/ripd.c
index 72af5326b..2098435d7 100644
--- a/ripd/ripd.c
+++ b/ripd/ripd.c
@@ -3451,6 +3451,8 @@ void rip_if_rmap_update_interface(struct interface *ifp)
if (!rip)
return;
+ if (ifp->vrf && ifp->vrf->vrf_id == VRF_UNKNOWN)
+ return;
ctx = rip->if_rmap_ctx;
if (!ctx)
return;
diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c
index ebecb6484..71f5552b2 100644
--- a/ripngd/ripng_interface.c
+++ b/ripngd/ripng_interface.c
@@ -210,7 +210,7 @@ int ripng_interface_up(ZAPI_CALLBACK_ARGS)
if (IS_RIPNG_DEBUG_ZEBRA)
zlog_debug(
"interface up %s vrf %u index %d flags %llx metric %d mtu %d",
- ifp->name, ifp->vrf_id, ifp->ifindex,
+ ifp->name, ifp->vrf->vrf_id, ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);
ripng_interface_sync(ifp);
@@ -247,7 +247,7 @@ int ripng_interface_down(ZAPI_CALLBACK_ARGS)
if (IS_RIPNG_DEBUG_ZEBRA)
zlog_debug(
"interface down %s vrf %u index %d flags %#llx metric %d mtu %d",
- ifp->name, ifp->vrf_id, ifp->ifindex,
+ ifp->name, ifp->vrf->vrf_id, ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);
return 0;
@@ -264,7 +264,7 @@ int ripng_interface_add(ZAPI_CALLBACK_ARGS)
if (IS_RIPNG_DEBUG_ZEBRA)
zlog_debug(
"RIPng interface add %s vrf %u index %d flags %#llx metric %d mtu %d",
- ifp->name, ifp->vrf_id, ifp->ifindex,
+ ifp->name, ifp->vrf->vrf_id, ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);
/* Check is this interface is RIP enabled or not.*/
@@ -299,7 +299,7 @@ int ripng_interface_delete(ZAPI_CALLBACK_ARGS)
zlog_info(
"interface delete %s vrf %u index %d flags %#llx metric %d mtu %d",
- ifp->name, ifp->vrf_id, ifp->ifindex,
+ ifp->name, ifp->vrf->vrf_id, ifp->ifindex,
(unsigned long long)ifp->flags, ifp->metric, ifp->mtu6);
/* To support pseudo interface do not free interface structure. */
@@ -328,6 +328,7 @@ int ripng_interface_vrf_update(ZAPI_CALLBACK_ARGS)
ifp->name, vrf_id, new_vrf_id);
if_update_to_new_vrf(ifp, new_vrf);
+
ripng_interface_sync(ifp);
return 0;
@@ -932,7 +933,7 @@ void ripng_interface_sync(struct interface *ifp)
{
struct vrf *vrf;
- vrf = vrf_lookup_by_id(ifp->vrf_id);
+ vrf = ifp->vrf;
if (vrf) {
struct ripng_interface *ri;
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c
index 67a52e9f0..b083a07f8 100644
--- a/ripngd/ripngd.c
+++ b/ripngd/ripngd.c
@@ -2603,6 +2603,8 @@ void ripng_if_rmap_update_interface(struct interface *ifp)
struct if_rmap *if_rmap;
struct if_rmap_ctx *ctx;
+ if (ifp->vrf && ifp->vrf->vrf_id == VRF_UNKNOWN)
+ return;
if (!ripng)
return;
ctx = ripng->if_rmap_ctx;
diff --git a/staticd/static_routes.c b/staticd/static_routes.c
index 9c012c475..e9fdad6ba 100644
--- a/staticd/static_routes.c
+++ b/staticd/static_routes.c
@@ -516,7 +516,7 @@ static void static_fixup_intf_nh(struct route_table *stable,
for (rn = route_top(stable); rn; rn = route_next(rn)) {
for (si = rn->info; si; si = si->next) {
- if (si->nh_vrf_id != ifp->vrf_id)
+ if (si->nh_vrf_id != vrf_to_id(ifp->vrf))
continue;
if (si->ifindex != ifp->ifindex)
@@ -542,7 +542,7 @@ void static_install_intf_nh(struct interface *ifp)
struct static_vrf *svrf = vrf->info;
/* Not needed if same vrf since happens naturally */
- if (vrf->vrf_id == ifp->vrf_id)
+ if (vrf == ifp->vrf)
continue;
/* Install any static routes configured for this interface. */
diff --git a/zebra/connected.c b/zebra/connected.c
index bba221c2c..bd4f9b66a 100644
--- a/zebra/connected.c
+++ b/zebra/connected.c
@@ -207,16 +207,16 @@ void connected_up(struct interface *ifp, struct connected *ifc)
struct nexthop nh = {
.type = NEXTHOP_TYPE_IFINDEX,
.ifindex = ifp->ifindex,
- .vrf_id = ifp->vrf_id,
+ .vrf_id = vrf_to_id(ifp->vrf),
};
struct zebra_vrf *zvrf;
uint32_t metric;
- zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
+ zvrf = zebra_vrf_lookup_by_id(ifp->vrf->vrf_id);
if (!zvrf) {
flog_err(EC_ZEBRA_VRF_NOT_FOUND,
"%s: Received Up for interface but no associated zvrf: %d",
- __PRETTY_FUNCTION__, ifp->vrf_id);
+ __PRETTY_FUNCTION__, ifp->vrf->vrf_id);
return;
}
if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL))
@@ -265,7 +265,7 @@ void connected_up(struct interface *ifp, struct connected *ifc)
zlog_debug(
"%u: IF %s address %s add/up, scheduling RIB processing",
- ifp->vrf_id, ifp->name,
+ vrf_to_id(ifp->vrf), ifp->name,
prefix2str(&p, buf, sizeof(buf)));
}
rib_update(zvrf->vrf->vrf_id, RIB_UPDATE_IF_CHANGE);
@@ -383,15 +383,15 @@ void connected_down(struct interface *ifp, struct connected *ifc)
struct nexthop nh = {
.type = NEXTHOP_TYPE_IFINDEX,
.ifindex = ifp->ifindex,
- .vrf_id = ifp->vrf_id,
+ .vrf_id = vrf_to_id(ifp->vrf),
};
struct zebra_vrf *zvrf;
- zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
+ zvrf = zebra_vrf_lookup_by_id(ifp->vrf->vrf_id);
if (!zvrf) {
flog_err(EC_ZEBRA_VRF_NOT_FOUND,
"%s: Received Up for interface but no associated zvrf: %d",
- __PRETTY_FUNCTION__, ifp->vrf_id);
+ __PRETTY_FUNCTION__, ifp->vrf->vrf_id);
return;
}
@@ -473,22 +473,22 @@ static void connected_delete_helper(struct connected *ifc, struct prefix *p)
zlog_debug(
"%u: IF %s IP %s address del, scheduling RIB processing",
- ifp->vrf_id, ifp->name,
+ vrf_to_id(ifp->vrf), ifp->name,
prefix2str(p, buf, sizeof(buf)));
}
- rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE);
+ rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE);
/* Schedule LSP forwarding entries for processing, if appropriate. */
- if (ifp->vrf_id == VRF_DEFAULT) {
+ if (vrf_to_id(ifp->vrf) == VRF_DEFAULT) {
if (IS_ZEBRA_DEBUG_MPLS) {
char buf[PREFIX_STRLEN];
zlog_debug(
"%u: IF %s IP %s address delete, scheduling MPLS processing",
- ifp->vrf_id, ifp->name,
+ vrf_to_id(ifp->vrf), ifp->name,
prefix2str(p, buf, sizeof(buf)));
}
- mpls_mark_lsps_for_processing(vrf_info_lookup(ifp->vrf_id), p);
+ mpls_mark_lsps_for_processing(zvrf_info_lookup(ifp->vrf), p);
}
}
diff --git a/zebra/if_ioctl.c b/zebra/if_ioctl.c
index a5a18a10f..6ce566262 100644
--- a/zebra/if_ioctl.c
+++ b/zebra/if_ioctl.c
@@ -152,7 +152,8 @@ static int if_get_hwaddr(struct interface *ifp)
ifreq.ifr_addr.sa_family = AF_INET;
/* Fetch Hardware address if available. */
- ret = vrf_if_ioctl(SIOCGIFHWADDR, (caddr_t)&ifreq, ifp->vrf_id);
+ ret = vrf_if_ioctl(SIOCGIFHWADDR, (caddr_t)&ifreq,
+ vrf_to_id(ifp->vrf));
if (ret < 0)
ifp->hw_addr_len = 0;
else {
diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c
index acd1159ca..4b6000c94 100644
--- a/zebra/if_netlink.c
+++ b/zebra/if_netlink.c
@@ -387,7 +387,7 @@ static int get_iflink_speed(struct interface *interface)
/* use ioctl to get IP address of an interface */
frr_elevate_privs(&zserv_privs) {
sd = vrf_socket(PF_INET, SOCK_DGRAM, IPPROTO_IP,
- interface->vrf_id,
+ vrf_to_id(interface->vrf),
NULL);
if (sd < 0) {
if (IS_ZEBRA_DEBUG_KERNEL)
@@ -396,7 +396,7 @@ static int get_iflink_speed(struct interface *interface)
return 0;
}
/* Get the current link state for the interface */
- rc = vrf_ioctl(interface->vrf_id, sd, SIOCETHTOOL,
+ rc = vrf_ioctl(vrf_to_id(interface->vrf), sd, SIOCETHTOOL,
(char *)&ifdata);
}
if (rc < 0) {
@@ -1232,7 +1232,7 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
ifp = if_get_by_name(name, vrf);
} else {
/* pre-configured interface, learnt now */
- if (ifp->vrf_id != vrf_id)
+ if (ifp->vrf != vrf)
if_update_to_new_vrf(ifp, vrf);
}
@@ -1272,16 +1272,16 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
bridge_ifindex);
else if (IS_ZEBRA_IF_BOND_SLAVE(ifp))
zebra_l2if_update_bond_slave(ifp, bond_ifindex);
- } else if (ifp->vrf_id != vrf_id) {
+ } else if (ifp->vrf != vrf) {
/* VRF change for an interface. */
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
"RTM_NEWLINK vrf-change for %s(%u) "
"vrf_id %u -> %u flags 0x%x",
- name, ifp->ifindex, ifp->vrf_id, vrf_id,
- ifi->ifi_flags);
+ name, ifp->ifindex, vrf_to_id(ifp->vrf),
+ vrf_id, ifi->ifi_flags);
- if_handle_vrf_change(ifp, vrf_id);
+ if_handle_vrf_change(ifp, vrf->vrf_id);
} else {
bool was_bridge_slave, was_bond_slave;
diff --git a/zebra/interface.c b/zebra/interface.c
index 0eec68e84..6e16ae819 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -530,7 +530,7 @@ void if_add_update(struct interface *ifp)
{
struct zebra_if *if_data;
struct zebra_ns *zns;
- struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);
+ struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);
/* case interface populate before vrf enabled */
if (zvrf->zns)
@@ -558,7 +558,8 @@ void if_add_update(struct interface *ifp)
zlog_debug(
"interface %s vrf %u index %d is shutdown. "
"Won't wake it up.",
- ifp->name, ifp->vrf_id, ifp->ifindex);
+ ifp->name, vrf_to_id(ifp->vrf),
+ ifp->ifindex);
return;
}
@@ -567,12 +568,13 @@ void if_add_update(struct interface *ifp)
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
"interface %s vrf %u index %d becomes active.",
- ifp->name, ifp->vrf_id, ifp->ifindex);
+ ifp->name, vrf_to_id(ifp->vrf), ifp->ifindex);
} else {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("interface %s vrf %u index %d is added.",
- ifp->name, ifp->vrf_id, ifp->ifindex);
+ ifp->name, vrf_to_id(ifp->vrf),
+ ifp->ifindex);
}
}
@@ -714,7 +716,7 @@ void if_delete_update(struct interface *ifp)
flog_err(
EC_LIB_INTERFACE,
"interface %s vrf %u index %d is still up while being deleted.",
- ifp->name, ifp->vrf_id, ifp->ifindex);
+ ifp->name, vrf_to_id(ifp->vrf), ifp->ifindex);
return;
}
@@ -726,7 +728,7 @@ void if_delete_update(struct interface *ifp)
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("interface %s vrf %u index %d is now inactive.",
- ifp->name, ifp->vrf_id, ifp->ifindex);
+ ifp->name, vrf_to_id(ifp->vrf), ifp->ifindex);
/* Delete connected routes from the kernel. */
if_delete_connected(ifp);
@@ -750,7 +752,7 @@ void if_delete_update(struct interface *ifp)
* occur with this implementation whereas it is not possible with
* vrf-lite).
*/
- if (ifp->vrf_id && !vrf_is_backend_netns())
+ if (ifp->vrf->vrf_id && !vrf_is_backend_netns())
if_handle_vrf_change(ifp, VRF_DEFAULT);
/* Reset some zebra interface params to default values. */
@@ -770,7 +772,7 @@ void if_handle_vrf_change(struct interface *ifp, vrf_id_t vrf_id)
vrf_id_t old_vrf_id;
struct vrf *vrf = vrf_lookup_by_id(vrf_id);
- old_vrf_id = ifp->vrf_id;
+ old_vrf_id = vrf_to_id(ifp->vrf);
/* Uninstall connected routes. */
if_uninstall_connected(ifp);
@@ -801,9 +803,9 @@ void if_handle_vrf_change(struct interface *ifp, vrf_id_t vrf_id)
*/
if (IS_ZEBRA_DEBUG_RIB_DETAILED)
zlog_debug("%u: IF %s VRF change, scheduling RIB processing",
- ifp->vrf_id, ifp->name);
+ vrf_to_id(ifp->vrf), ifp->name);
rib_update(old_vrf_id, RIB_UPDATE_IF_CHANGE);
- rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE);
+ rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE);
}
static void ipv6_ll_address_to_mac(struct in6_addr *address, uint8_t *mac)
@@ -821,7 +823,7 @@ void if_nbr_mac_to_ipv4ll_neigh_update(struct interface *ifp,
struct in6_addr *address,
int add)
{
- struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);
+ struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);
struct zebra_if *zif = ifp->info;
char buf[16] = "169.254.0.1";
struct in_addr ipv4_ll;
@@ -917,7 +919,7 @@ void if_up(struct interface *ifp)
{
struct zebra_if *zif;
struct interface *link_if;
- struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);
+ struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);
zif = ifp->info;
zif->up_count++;
@@ -948,8 +950,8 @@ void if_up(struct interface *ifp)
if (IS_ZEBRA_DEBUG_RIB_DETAILED)
zlog_debug("%u: IF %s up, scheduling RIB processing",
- ifp->vrf_id, ifp->name);
- rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE);
+ vrf_to_id(ifp->vrf), ifp->name);
+ rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE);
/* Handle interface up for specific types for EVPN. Non-VxLAN interfaces
* are checked to see if (remote) neighbor entries need to be installed
@@ -974,7 +976,7 @@ void if_down(struct interface *ifp)
{
struct zebra_if *zif;
struct interface *link_if;
- struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);
+ struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);
zif = ifp->info;
zif->down_count++;
@@ -1006,8 +1008,8 @@ void if_down(struct interface *ifp)
if (IS_ZEBRA_DEBUG_RIB_DETAILED)
zlog_debug("%u: IF %s down, scheduling RIB processing",
- ifp->vrf_id, ifp->name);
- rib_update(ifp->vrf_id, RIB_UPDATE_IF_CHANGE);
+ vrf_to_id(ifp->vrf), ifp->name);
+ rib_update(vrf_to_id(ifp->vrf), RIB_UPDATE_IF_CHANGE);
if_nbr_ipv6ll_to_ipv4ll_neigh_del_all(ifp);
@@ -1308,7 +1310,7 @@ static void if_dump_vty(struct vty *vty, struct interface *ifp)
zebra_ptm_show_status(vty, ifp);
- vrf = vrf_lookup_by_id(ifp->vrf_id);
+ vrf = ifp->vrf;
vty_out(vty, " vrf: %s\n", vrf->name);
if (ifp->desc)
@@ -3134,9 +3136,9 @@ static int if_config_write(struct vty *vty)
struct vrf *vrf;
if_data = ifp->info;
- vrf = vrf_lookup_by_id(ifp->vrf_id);
+ vrf = ifp->vrf;
- if (ifp->vrf_id == VRF_DEFAULT)
+ if (vrf->vrf_id == VRF_DEFAULT)
vty_frame(vty, "interface %s\n", ifp->name);
else
vty_frame(vty, "interface %s vrf %s\n",
diff --git a/zebra/ioctl.c b/zebra/ioctl.c
index 8202e076a..628be6563 100644
--- a/zebra/ioctl.c
+++ b/zebra/ioctl.c
@@ -142,7 +142,8 @@ void if_get_metric(struct interface *ifp)
ifreq_set_name(&ifreq, ifp);
- if (vrf_if_ioctl(SIOCGIFMETRIC, (caddr_t)&ifreq, ifp->vrf_id) < 0)
+ if (vrf_if_ioctl(SIOCGIFMETRIC, (caddr_t)&ifreq,
+ vrf_to_id(ifp->vrf)) < 0)
return;
ifp->metric = ifreq.ifr_metric;
if (ifp->metric == 0)
@@ -160,7 +161,8 @@ void if_get_mtu(struct interface *ifp)
ifreq_set_name(&ifreq, ifp);
#if defined(SIOCGIFMTU)
- if (vrf_if_ioctl(SIOCGIFMTU, (caddr_t)&ifreq, ifp->vrf_id) < 0) {
+ if (vrf_if_ioctl(SIOCGIFMTU, (caddr_t)&ifreq,
+ vrf_to_id(ifp->vrf)) < 0) {
zlog_info("Can't lookup mtu by ioctl(SIOCGIFMTU)");
ifp->mtu6 = ifp->mtu = -1;
return;
@@ -427,7 +429,7 @@ void if_get_flags(struct interface *ifp)
ifreq_set_name(&ifreq, ifp);
- ret = vrf_if_ioctl(SIOCGIFFLAGS, (caddr_t)&ifreq, ifp->vrf_id);
+ ret = vrf_if_ioctl(SIOCGIFFLAGS, (caddr_t)&ifreq, vrf_to_id(ifp->vrf));
if (ret < 0) {
flog_err_sys(EC_LIB_SYSTEM_CALL,
"vrf_if_ioctl(SIOCGIFFLAGS) failed: %s",
@@ -477,7 +479,7 @@ int if_set_flags(struct interface *ifp, uint64_t flags)
ifreq.ifr_flags = ifp->flags;
ifreq.ifr_flags |= flags;
- ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, ifp->vrf_id);
+ ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, vrf_to_id(ifp->vrf));
if (ret < 0) {
zlog_info("can't set interface flags");
@@ -498,7 +500,7 @@ int if_unset_flags(struct interface *ifp, uint64_t flags)
ifreq.ifr_flags = ifp->flags;
ifreq.ifr_flags &= ~flags;
- ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, ifp->vrf_id);
+ ret = vrf_if_ioctl(SIOCSIFFLAGS, (caddr_t)&ifreq, vrf_to_id(ifp->vrf));
if (ret < 0) {
zlog_info("can't unset interface flags");
diff --git a/zebra/redistribute.c b/zebra/redistribute.c
index b13f1170c..7b3332e58 100644
--- a/zebra/redistribute.c
+++ b/zebra/redistribute.c
@@ -402,7 +402,7 @@ void zebra_interface_up_update(struct interface *ifp)
if (IS_ZEBRA_DEBUG_EVENT)
zlog_debug("MESSAGE: ZEBRA_INTERFACE_UP %s(%u)",
- ifp->name, ifp->vrf_id);
+ ifp->name, vrf_to_id(ifp->vrf));
if (ifp->ptm_status || !ifp->ptm_enable) {
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode,
@@ -422,7 +422,7 @@ void zebra_interface_down_update(struct interface *ifp)
if (IS_ZEBRA_DEBUG_EVENT)
zlog_debug("MESSAGE: ZEBRA_INTERFACE_DOWN %s(%u)",
- ifp->name, ifp->vrf_id);
+ ifp->name, vrf_to_id(ifp->vrf));
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {
zsend_interface_update(ZEBRA_INTERFACE_DOWN, client, ifp);
@@ -437,7 +437,7 @@ void zebra_interface_add_update(struct interface *ifp)
if (IS_ZEBRA_DEBUG_EVENT)
zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADD %s(%u)", ifp->name,
- ifp->vrf_id);
+ vrf_to_id(ifp->vrf));
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {
client->ifadd_cnt++;
@@ -453,7 +453,7 @@ void zebra_interface_delete_update(struct interface *ifp)
if (IS_ZEBRA_DEBUG_EVENT)
zlog_debug("MESSAGE: ZEBRA_INTERFACE_DELETE %s(%u)",
- ifp->name, ifp->vrf_id);
+ ifp->name, vrf_to_id(ifp->vrf));
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {
client->ifdel_cnt++;
@@ -475,7 +475,7 @@ void zebra_interface_address_add_update(struct interface *ifp,
p = ifc->address;
zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADDRESS_ADD %s on %s(%u)",
prefix2str(p, buf, sizeof(buf)), ifp->name,
- ifp->vrf_id);
+ vrf_to_id(ifp->vrf));
}
if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL))
@@ -509,7 +509,7 @@ void zebra_interface_address_delete_update(struct interface *ifp,
p = ifc->address;
zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADDRESS_DELETE %s on %s(%u)",
prefix2str(p, buf, sizeof(buf)),
- ifp->name, ifp->vrf_id);
+ ifp->name, vrf_to_id(ifp->vrf));
}
zebra_vxlan_add_del_gw_macip(ifp, ifc->address, 0);
@@ -535,7 +535,7 @@ void zebra_interface_vrf_update_del(struct interface *ifp, vrf_id_t new_vrf_id)
if (IS_ZEBRA_DEBUG_EVENT)
zlog_debug(
"MESSAGE: ZEBRA_INTERFACE_VRF_UPDATE/DEL %s VRF Id %u -> %u",
- ifp->name, ifp->vrf_id, new_vrf_id);
+ ifp->name, vrf_to_id(ifp->vrf), new_vrf_id);
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {
/* Need to delete if the client is not interested in the new
@@ -558,7 +558,7 @@ void zebra_interface_vrf_update_add(struct interface *ifp, vrf_id_t old_vrf_id)
if (IS_ZEBRA_DEBUG_EVENT)
zlog_debug(
"MESSAGE: ZEBRA_INTERFACE_VRF_UPDATE/ADD %s VRF Id %u -> %u",
- ifp->name, old_vrf_id, ifp->vrf_id);
+ ifp->name, old_vrf_id, vrf_to_id(ifp->vrf));
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {
/* Need to add if the client is interested in the new VRF. */
@@ -816,7 +816,7 @@ void zebra_interface_parameters_update(struct interface *ifp)
if (IS_ZEBRA_DEBUG_EVENT)
zlog_debug("MESSAGE: ZEBRA_INTERFACE_LINK_PARAMS %s(%u)",
- ifp->name, ifp->vrf_id);
+ ifp->name, vrf_to_id(ifp->vrf));
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client))
zsend_interface_link_params(client, ifp);
diff --git a/zebra/router-id.c b/zebra/router-id.c
index 569ffbab4..b5a8860c4 100644
--- a/zebra/router-id.c
+++ b/zebra/router-id.c
@@ -122,7 +122,7 @@ void router_id_add_address(struct connected *ifc)
struct prefix before;
struct prefix after;
struct zserv *client;
- struct zebra_vrf *zvrf = vrf_info_get(ifc->ifp->vrf_id);
+ struct zebra_vrf *zvrf = vrf_info_get(vrf_to_id(ifc->ifp->vrf));
if (router_id_bad_address(ifc))
return;
@@ -154,7 +154,7 @@ void router_id_del_address(struct connected *ifc)
struct prefix before;
struct listnode *node;
struct zserv *client;
- struct zebra_vrf *zvrf = vrf_info_get(ifc->ifp->vrf_id);
+ struct zebra_vrf *zvrf = vrf_info_get(vrf_to_id(ifc->ifp->vrf));
if (router_id_bad_address(ifc))
return;
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
index 92c78a4cb..1624eea39 100644
--- a/zebra/rt_netlink.c
+++ b/zebra/rt_netlink.c
@@ -545,7 +545,7 @@ static int netlink_route_change_read_unicast(struct nlmsghdr *h, ns_id_t ns_id,
zebra_ns_lookup(ns_id),
index);
if (ifp)
- nh_vrf_id = ifp->vrf_id;
+ nh_vrf_id = vrf_to_id(ifp->vrf);
}
nh.vrf_id = nh_vrf_id;
@@ -605,7 +605,7 @@ static int netlink_route_change_read_unicast(struct nlmsghdr *h, ns_id_t ns_id,
zebra_ns_lookup(ns_id),
index);
if (ifp)
- nh_vrf_id = ifp->vrf_id;
+ nh_vrf_id = vrf_to_id(ifp->vrf);
else {
flog_warn(
EC_ZEBRA_UNKNOWN_INTERFACE,
@@ -1889,7 +1889,7 @@ static int netlink_vxlan_flood_list_update(struct interface *ifp,
char buf[256];
} req;
uint8_t dst_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
- struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
+ struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);
zns = zvrf->zns;
memset(&req, 0, sizeof(req));
@@ -2287,7 +2287,7 @@ static int netlink_macfdb_update(struct interface *ifp, vlanid_t vid,
int vid_present = 0;
char vid_buf[20];
char dst_buf[30];
- struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
+ struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);
zns = zvrf->zns;
zif = ifp->info;
@@ -2631,7 +2631,7 @@ int netlink_neigh_read_specific_ip(struct ipaddr *ip,
{
int ret = 0;
struct zebra_ns *zns;
- struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(vlan_if->vrf_id);
+ struct zebra_vrf *zvrf = zvrf_info_lookup(vlan_if->vrf);
char buf[INET6_ADDRSTRLEN];
struct zebra_dplane_info dp_info;
@@ -2644,7 +2644,7 @@ int netlink_neigh_read_specific_ip(struct ipaddr *ip,
__PRETTY_FUNCTION__, vlan_if->name,
vlan_if->ifindex,
ipaddr2str(ip, buf, sizeof(buf)),
- vlan_if->vrf_id);
+ vrf_to_id(vlan_if->vrf));
ret = netlink_request_specific_neigh_in_vlan(zns, RTM_GETNEIGH, ip,
vlan_if->ifindex);
@@ -2709,7 +2709,7 @@ static int netlink_neigh_update2(struct interface *ifp, struct ipaddr *ip,
struct zebra_ns *zns;
char buf[INET6_ADDRSTRLEN];
char buf2[ETHER_ADDR_STRLEN];
- struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
+ struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);
zns = zvrf->zns;
memset(&req, 0, sizeof(req));
diff --git a/zebra/rtadv.c b/zebra/rtadv.c
index e181b495b..d591e230c 100644
--- a/zebra/rtadv.c
+++ b/zebra/rtadv.c
@@ -532,7 +532,7 @@ static int rtadv_timer(struct thread *thread)
static void rtadv_process_solicit(struct interface *ifp)
{
- struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);
+ struct zebra_vrf *zvrf = zvrf_info_lookup(ifp->vrf);
assert(zvrf);
rtadv_send_packet(rtadv_get_socket(zvrf), ifp);
@@ -882,7 +882,7 @@ static void ipv6_nd_suppress_ra_set(struct interface *ifp,
struct zebra_vrf *zvrf;
zif = ifp->info;
- zvrf = vrf_info_lookup(ifp->vrf_id);
+ zvrf = zvrf_info_lookup(ifp->vrf);
if (status == RA_SUPPRESS) {
/* RA is currently enabled */
@@ -955,11 +955,11 @@ static void zebra_interface_radv_set(ZAPI_HANDLER_ARGS, int enable)
zebra_route_string(client->proto));
return;
}
- if (ifp->vrf_id != zvrf_id(zvrf)) {
+ if (ifp->vrf != zvrf->vrf) {
zlog_debug(
"%u: IF %u RA %s client %s - VRF mismatch, IF VRF %u",
zvrf_id(zvrf), ifindex, enable ? "enable" : "disable",
- zebra_route_string(client->proto), ifp->vrf_id);
+ zebra_route_string(client->proto), vrf_to_id(ifp->vrf));
return;
}
@@ -1056,7 +1056,7 @@ DEFUN (ipv6_nd_ra_interval_msec,
struct zebra_if *zif = ifp->info;
struct zebra_vrf *zvrf;
- zvrf = vrf_info_lookup(ifp->vrf_id);
+ zvrf = zvrf_info_lookup(ifp->vrf);
interval = strtoul(argv[idx_number]->arg, NULL, 10);
if ((zif->rtadv.AdvDefaultLifetime != -1
@@ -1094,7 +1094,7 @@ DEFUN (ipv6_nd_ra_interval,
struct zebra_if *zif = ifp->info;
struct zebra_vrf *zvrf;
- zvrf = vrf_info_lookup(ifp->vrf_id);
+ zvrf = zvrf_info_lookup(ifp->vrf);
interval = strtoul(argv[idx_number]->arg, NULL, 10);
if ((zif->rtadv.AdvDefaultLifetime != -1
@@ -1133,7 +1133,7 @@ DEFUN (no_ipv6_nd_ra_interval,
struct zebra_if *zif = ifp->info;
struct zebra_vrf *zvrf = NULL;
- zvrf = vrf_info_lookup(ifp->vrf_id);
+ zvrf = zvrf_info_lookup(ifp->vrf);
if (zif->rtadv.MaxRtrAdvInterval % 1000)
zvrf->rtadv.adv_msec_if_count--;
diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c
index f4347e5ac..2f41f7133 100644
--- a/zebra/zapi_msg.c
+++ b/zebra/zapi_msg.c
@@ -165,7 +165,7 @@ int zsend_interface_add(struct zserv *client, struct interface *ifp)
{
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
- zclient_create_header(s, ZEBRA_INTERFACE_ADD, ifp->vrf_id);
+ zclient_create_header(s, ZEBRA_INTERFACE_ADD, vrf_to_id(ifp->vrf));
zserv_encode_interface(s, ifp);
client->ifadd_cnt++;
@@ -177,7 +177,7 @@ int zsend_interface_delete(struct zserv *client, struct interface *ifp)
{
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
- zclient_create_header(s, ZEBRA_INTERFACE_DELETE, ifp->vrf_id);
+ zclient_create_header(s, ZEBRA_INTERFACE_DELETE, vrf_to_id(ifp->vrf));
zserv_encode_interface(s, ifp);
client->ifdel_cnt++;
@@ -217,7 +217,8 @@ int zsend_interface_link_params(struct zserv *client, struct interface *ifp)
return 0;
}
- zclient_create_header(s, ZEBRA_INTERFACE_LINK_PARAMS, ifp->vrf_id);
+ zclient_create_header(s, ZEBRA_INTERFACE_LINK_PARAMS,
+ vrf_to_id(ifp->vrf));
/* Add Interface Index */
stream_putl(s, ifp->ifindex);
@@ -279,7 +280,7 @@ int zsend_interface_address(int cmd, struct zserv *client,
struct prefix *p;
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
- zclient_create_header(s, cmd, ifp->vrf_id);
+ zclient_create_header(s, cmd, vrf_to_id(ifp->vrf));
stream_putl(s, ifp->ifindex);
/* Interface address flag. */
@@ -321,7 +322,7 @@ static int zsend_interface_nbr_address(int cmd, struct zserv *client,
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
struct prefix *p;
- zclient_create_header(s, cmd, ifp->vrf_id);
+ zclient_create_header(s, cmd, vrf_to_id(ifp->vrf));
stream_putl(s, ifp->ifindex);
/* Prefix information. */
@@ -429,7 +430,8 @@ int zsend_interface_vrf_update(struct zserv *client, struct interface *ifp,
{
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
- zclient_create_header(s, ZEBRA_INTERFACE_VRF_UPDATE, ifp->vrf_id);
+ zclient_create_header(s, ZEBRA_INTERFACE_VRF_UPDATE,
+ vrf_to_id(ifp->vrf));
/* Fill in the name of the interface and its new VRF (id) */
stream_put(s, ifp->name, INTERFACE_NAMSIZ);
@@ -504,7 +506,7 @@ int zsend_interface_update(int cmd, struct zserv *client, struct interface *ifp)
{
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
- zclient_create_header(s, cmd, ifp->vrf_id);
+ zclient_create_header(s, cmd, vrf_to_id(ifp->vrf));
zserv_encode_interface(s, ifp);
if (cmd == ZEBRA_INTERFACE_UP)
diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c
index 1707d3a68..3d64c201f 100644
--- a/zebra/zebra_dplane.c
+++ b/zebra/zebra_dplane.c
@@ -1916,7 +1916,7 @@ enum zebra_dplane_result dplane_intf_addr_set(const struct interface *ifp,
struct prefix_ipv4 *p;
p = (struct prefix_ipv4 *)ifc->address;
- rib_lookup_and_pushup(p, ifp->vrf_id);
+ rib_lookup_and_pushup(p, ifp->vrf->vrf_id);
}
#endif
@@ -1947,7 +1947,7 @@ static enum zebra_dplane_result intf_addr_update_internal(
prefix2str(ifc->address, addr_str, sizeof(addr_str));
zlog_debug("init intf ctx %s: idx %d, addr %u:%s",
- dplane_op2str(op), ifp->ifindex, ifp->vrf_id,
+ dplane_op2str(op), ifp->ifindex, ifp->vrf->vrf_id,
addr_str);
}
@@ -1955,9 +1955,9 @@ static enum zebra_dplane_result intf_addr_update_internal(
ctx->zd_op = op;
ctx->zd_status = ZEBRA_DPLANE_REQUEST_SUCCESS;
- ctx->zd_vrf_id = ifp->vrf_id;
+ ctx->zd_vrf_id = ifp->vrf->vrf_id;
- zns = zebra_ns_lookup(ifp->vrf_id);
+ zns = zebra_ns_lookup(ifp->vrf->vrf_id);
dplane_ctx_ns_init(ctx, zns, false);
/* Init the interface-addr-specific area */
diff --git a/zebra/zebra_ptm.c b/zebra/zebra_ptm.c
index 46f138552..636bceb98 100644
--- a/zebra/zebra_ptm.c
+++ b/zebra/zebra_ptm.c
@@ -522,7 +522,7 @@ static int zebra_ptm_handle_bfd_msg(void *arg, void *in_ctxt,
}
if (!strcmp(ZEBRA_PTM_INVALID_VRF, vrf_str) && ifp) {
- vrf_id = ifp->vrf_id;
+ vrf_id = vrf_to_id(ifp->vrf);
} else {
vrf_id = vrf_name_to_id(vrf_str);
}
diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h
index 972fe381c..1b8766950 100644
--- a/zebra/zebra_vrf.h
+++ b/zebra/zebra_vrf.h
@@ -193,6 +193,15 @@ static inline vrf_id_t zvrf_id(struct zebra_vrf *zvrf)
return zvrf->vrf->vrf_id;
}
+static inline struct zebra_vrf *zvrf_info_lookup(struct vrf *vrf)
+{
+ struct zebra_vrf *zvrf = NULL;
+
+ if (vrf)
+ zvrf = (struct zebra_vrf *)vrf->info;
+ return zvrf;
+}
+
static inline const char *zvrf_ns_name(struct zebra_vrf *zvrf)
{
if (!zvrf->vrf || !zvrf->vrf->ns_ctxt)
diff --git a/zebra/zebra_vxlan.c b/zebra/zebra_vxlan.c
index 077c1ff8f..99e2f9b17 100644
--- a/zebra/zebra_vxlan.c
+++ b/zebra/zebra_vxlan.c
@@ -2353,7 +2353,7 @@ static void zvni_process_neigh_on_local_mac_change(zebra_vni_t *zvni,
struct zebra_vrf *zvrf = NULL;
char buf[ETHER_ADDR_STRLEN];
- zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);
+ zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);
if (IS_ZEBRA_DEBUG_VXLAN)
zlog_debug("Processing neighbors on local MAC %s %s, VNI %u",
@@ -2612,7 +2612,7 @@ struct interface *zebra_get_vrr_intf_for_svi(struct interface *ifp)
struct interface *tmp_if = NULL;
struct zebra_if *zif = NULL;
- zvrf = vrf_info_lookup(ifp->vrf_id);
+ zvrf = zvrf_info_lookup(ifp->vrf);
assert(zvrf);
FOR_ALL_INTERFACES (zvrf->vrf, tmp_if) {
@@ -2716,10 +2716,10 @@ static int zvni_advertise_subnet(zebra_vni_t *zvni, struct interface *ifp,
apply_mask(&p);
if (advertise)
- ip_prefix_send_to_client(ifp->vrf_id, &p,
+ ip_prefix_send_to_client(vrf_to_id(ifp->vrf), &p,
ZEBRA_IP_PREFIX_ROUTE_ADD);
else
- ip_prefix_send_to_client(ifp->vrf_id, &p,
+ ip_prefix_send_to_client(vrf_to_id(ifp->vrf), &p,
ZEBRA_IP_PREFIX_ROUTE_DEL);
}
return 0;
@@ -2838,7 +2838,7 @@ static int zvni_gw_macip_del(struct interface *ifp, zebra_vni_t *zvni,
if (IS_ZEBRA_DEBUG_VXLAN)
zlog_debug(
"%u:SVI %s(%u) VNI %u, sending GW MAC %s IP %s del to BGP",
- ifp->vrf_id, ifp->name, ifp->ifindex, zvni->vni,
+ vrf_to_id(ifp->vrf), ifp->name, ifp->ifindex, zvni->vni,
prefix_mac2str(&(n->emac), buf1, sizeof(buf1)),
ipaddr2str(ip, buf2, sizeof(buf2)));
@@ -3025,11 +3025,11 @@ static int zvni_local_neigh_update(zebra_vni_t *zvni,
}
}
- zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);
+ zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);
if (!zvrf) {
if (IS_ZEBRA_DEBUG_VXLAN)
- zlog_debug("\tUnable to find vrf for: %d",
- zvni->vxlan_if->vrf_id);
+ zlog_debug("\tUnable to find vrf for: %s",
+ zvni->vxlan_if->vrf->name);
return -1;
}
@@ -4086,8 +4086,9 @@ static void zvni_build_hash_table(void)
vlan_if = zvni_map_to_svi(vxl->access_vlan,
zif->brslave_info.br_if);
if (vlan_if) {
- zvni->vrf_id = vlan_if->vrf_id;
- zl3vni = zl3vni_from_vrf(vlan_if->vrf_id);
+ zvni->vrf_id = vrf_to_id(vlan_if->vrf);
+ zl3vni = zl3vni_from_vrf(
+ vrf_to_id(vlan_if->vrf));
if (zl3vni)
listnode_add_sort(zl3vni->l2vnis, zvni);
}
@@ -5240,7 +5241,7 @@ static void process_remote_macip_add(vni_t vni,
return;
}
- zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);
+ zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);
if (!zvrf)
return;
@@ -5568,7 +5569,7 @@ static void process_remote_macip_del(vni_t vni,
if (!mac && !n)
return;
- zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);
+ zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);
/* Ignore the delete if this mac is a gateway mac-ip */
if (CHECK_FLAG(mac->flags, ZEBRA_MAC_LOCAL)
@@ -7255,7 +7256,7 @@ int zebra_vxlan_handle_kernel_neigh_del(struct interface *ifp,
return 0;
}
- zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);
+ zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);
if (!zvrf) {
zlog_debug("%s: VNI %u vrf lookup failed.",
__PRETTY_FUNCTION__, zvni->vni);
@@ -7678,11 +7679,11 @@ int zebra_vxlan_local_mac_add_update(struct interface *ifp,
return -1;
}
- zvrf = vrf_info_lookup(zvni->vxlan_if->vrf_id);
+ zvrf = zvrf_info_lookup(zvni->vxlan_if->vrf);
if (!zvrf) {
if (IS_ZEBRA_DEBUG_VXLAN)
- zlog_debug("\tNo Vrf found for vrf_id: %d",
- zvni->vxlan_if->vrf_id);
+ zlog_debug("\tNo Vrf found for vrf_id: %s",
+ zvni->vxlan_if->vrf->name);
return -1;
}
@@ -8214,10 +8215,10 @@ int zebra_vxlan_svi_up(struct interface *ifp, struct interface *link_if)
zlog_debug(
"SVI %s(%u) VNI %u VRF %s is UP, installing neighbors",
ifp->name, ifp->ifindex, zvni->vni,
- vrf_id_to_name(ifp->vrf_id));
+ vrf_to_name(ifp->vrf));
/* update the vrf information for l2-vni and inform bgp */
- zvni->vrf_id = ifp->vrf_id;
+ zvni->vrf_id = vrf_to_id(ifp->vrf);
zvni_send_add_to_client(zvni);
/* Install any remote neighbors for this VNI. */
@@ -8343,8 +8344,8 @@ int zebra_vxlan_if_up(struct interface *ifp)
vlan_if = zvni_map_to_svi(vxl->access_vlan,
zif->brslave_info.br_if);
if (vlan_if) {
- zvni->vrf_id = vlan_if->vrf_id;
- zl3vni = zl3vni_from_vrf(vlan_if->vrf_id);
+ zvni->vrf_id = vrf_to_id(vlan_if->vrf);
+ zl3vni = zl3vni_from_vrf(vrf_to_id(vlan_if->vrf));
if (zl3vni)
listnode_add_sort(zl3vni->l2vnis, zvni);
}
@@ -8672,8 +8673,8 @@ int zebra_vxlan_if_add(struct interface *ifp)
vlan_if = zvni_map_to_svi(vxl->access_vlan,
zif->brslave_info.br_if);
if (vlan_if) {
- zvni->vrf_id = vlan_if->vrf_id;
- zl3vni = zl3vni_from_vrf(vlan_if->vrf_id);
+ zvni->vrf_id = vrf_to_id(vlan_if->vrf);
+ zl3vni = zl3vni_from_vrf(vrf_to_id(vlan_if->vrf));
if (zl3vni)
listnode_add_sort(zl3vni->l2vnis, zvni);
}
@@ -8690,7 +8691,7 @@ int zebra_vxlan_if_add(struct interface *ifp)
zlog_debug(
"Add L2-VNI %u VRF %s intf %s(%u) VLAN %u local IP %s mcast_grp %s master %u",
vni,
- vlan_if ? vrf_id_to_name(vlan_if->vrf_id)
+ vlan_if ? vrf_to_name(vlan_if->vrf)
: VRF_DEFAULT_NAME,
ifp->name, ifp->ifindex, vxl->access_vlan,
addr_buf1, addr_buf2,