From: Louis Scalbert Date: Fri, 22 Apr 2022 16:08:08 +0000 (+0200) Subject: lib: add a function to get the VRF or loopback interface X-Git-Tag: base_8.5~109^2~16 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=e7192e9d24638fec3c482982df2ec0763c453ce0;p=mirror%2Ffrr.git lib: add a function to get the VRF or loopback interface Add a function to find the VRF or the loopback interface: the loopback interface for the default VRF and the VRF master interface otherwise. Signed-off-by: Louis Scalbert --- diff --git a/lib/if.c b/lib/if.c index 70c0c18141..db73210036 100644 --- a/lib/if.c +++ b/lib/if.c @@ -564,6 +564,20 @@ size_t if_lookup_by_hwaddr(const uint8_t *hw_addr, size_t addrsz, return count; } +/* Get the VRF loopback interface, i.e. the loopback on the default VRF + * or the VRF interface. + */ +struct interface *if_get_vrf_loopback(vrf_id_t vrf_id) +{ + struct interface *ifp = NULL; + struct vrf *vrf = vrf_lookup_by_id(vrf_id); + + FOR_ALL_INTERFACES (vrf, ifp) + if (if_is_loopback(ifp)) + return ifp; + + return NULL; +} /* Get interface by name if given name interface doesn't exist create one. */ diff --git a/lib/if.h b/lib/if.h index 91dcd46247..a653246ccb 100644 --- a/lib/if.h +++ b/lib/if.h @@ -532,6 +532,7 @@ static inline bool if_address_is_local(const void *matchaddr, int family, struct vrf; extern struct interface *if_lookup_by_name_vrf(const char *name, struct vrf *vrf); extern struct interface *if_lookup_by_name(const char *ifname, vrf_id_t vrf_id); +extern struct interface *if_get_vrf_loopback(vrf_id_t vrf_id); extern struct interface *if_get_by_name(const char *ifname, vrf_id_t vrf_id, const char *vrf_name);