mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-25 23:36:12 +00:00
Merge pull request #1956 from pguibert6WIND/misc_fixes_netns
Misc fixes netns
This commit is contained in:
commit
4adfefaeac
@ -279,5 +279,6 @@ extern int vrf_netns_handler_create(struct vty *vty, struct vrf *vrf,
|
||||
*/
|
||||
extern void vrf_disable(struct vrf *vrf);
|
||||
extern int vrf_enable(struct vrf *vrf);
|
||||
extern void vrf_delete(struct vrf *vrf);
|
||||
|
||||
#endif /*_ZEBRA_VRF_H*/
|
||||
|
@ -867,6 +867,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);
|
||||
|
||||
zif = ifp->info;
|
||||
zif->up_count++;
|
||||
@ -909,7 +910,7 @@ void if_up(struct interface *ifp)
|
||||
link_if = ifp;
|
||||
zebra_vxlan_svi_up(ifp, link_if);
|
||||
} else if (IS_ZEBRA_IF_VLAN(ifp)) {
|
||||
link_if = if_lookup_by_index_per_ns(zebra_ns_lookup(NS_DEFAULT),
|
||||
link_if = if_lookup_by_index_per_ns(zvrf->zns,
|
||||
zif->link_ifindex);
|
||||
if (link_if)
|
||||
zebra_vxlan_svi_up(ifp, link_if);
|
||||
@ -922,6 +923,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);
|
||||
|
||||
zif = ifp->info;
|
||||
zif->down_count++;
|
||||
@ -938,7 +940,7 @@ void if_down(struct interface *ifp)
|
||||
link_if = ifp;
|
||||
zebra_vxlan_svi_down(ifp, link_if);
|
||||
} else if (IS_ZEBRA_IF_VLAN(ifp)) {
|
||||
link_if = if_lookup_by_index_per_ns(zebra_ns_lookup(NS_DEFAULT),
|
||||
link_if = if_lookup_by_index_per_ns(zvrf->zns,
|
||||
zif->link_ifindex);
|
||||
if (link_if)
|
||||
zebra_vxlan_svi_down(ifp, link_if);
|
||||
|
@ -120,6 +120,32 @@ static int zebra_ns_continue_read(struct zebra_netns_info *zns_info,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int zebra_ns_delete(char *name)
|
||||
{
|
||||
struct vrf *vrf = vrf_lookup_by_name(name);
|
||||
struct ns *ns;
|
||||
|
||||
if (!vrf) {
|
||||
zlog_warn(
|
||||
"NS notify : no VRF found using NS %s",
|
||||
name);
|
||||
return 0;
|
||||
}
|
||||
/* Clear configured flag and invoke delete. */
|
||||
UNSET_FLAG(vrf->status, VRF_CONFIGURED);
|
||||
ns = (struct ns *)vrf->ns_ctxt;
|
||||
/* the deletion order is the same
|
||||
* as the one used when siging signal is received
|
||||
*/
|
||||
vrf_delete(vrf);
|
||||
if (ns)
|
||||
ns_delete(ns);
|
||||
|
||||
zlog_info("NS notify : deleted VRF %s", name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int zebra_ns_ready_read(struct thread *t)
|
||||
{
|
||||
struct zebra_netns_info *zns_info = THREAD_ARG(t);
|
||||
@ -178,8 +204,10 @@ static int zebra_ns_notify_read(struct thread *t)
|
||||
char *netnspath;
|
||||
struct zebra_netns_info *netnsinfo;
|
||||
|
||||
if (!(event->mask & IN_CREATE))
|
||||
if (!(event->mask & (IN_CREATE | IN_DELETE)))
|
||||
continue;
|
||||
if (event->mask & IN_DELETE)
|
||||
return zebra_ns_delete(event->name);
|
||||
netnspath = ns_netns_pathname(NULL, event->name);
|
||||
if (!netnspath)
|
||||
continue;
|
||||
@ -234,7 +262,8 @@ void zebra_ns_notify_init(void)
|
||||
zlog_warn("NS notify init: failed to initialize inotify (%s)",
|
||||
safe_strerror(errno));
|
||||
}
|
||||
if (inotify_add_watch(fd_monitor, NS_RUN_DIR, IN_CREATE) < 0) {
|
||||
if (inotify_add_watch(fd_monitor, NS_RUN_DIR,
|
||||
IN_CREATE | IN_DELETE) < 0) {
|
||||
zlog_warn("NS notify watch: failed to add watch (%s)",
|
||||
safe_strerror(errno));
|
||||
}
|
||||
|
@ -135,6 +135,10 @@ int zebra_ns_enable(ns_id_t ns_id, void **info)
|
||||
|
||||
zns->ns_id = ns_id;
|
||||
|
||||
zns->rules_hash =
|
||||
hash_create_size(8, zebra_pbr_rules_hash_key,
|
||||
zebra_pbr_rules_hash_equal, "Rules Hash");
|
||||
|
||||
#if defined(HAVE_RTADV)
|
||||
rtadv_init(zns);
|
||||
#endif
|
||||
@ -287,9 +291,6 @@ int zebra_ns_init(void)
|
||||
/* Default NS is activated */
|
||||
zebra_ns_enable(ns_id, (void **)&dzns);
|
||||
|
||||
dzns->rules_hash =
|
||||
hash_create_size(8, zebra_pbr_rules_hash_key,
|
||||
zebra_pbr_rules_hash_equal, "Rules Hash");
|
||||
if (vrf_is_backend_netns()) {
|
||||
ns_add_hook(NS_NEW_HOOK, zebra_ns_new);
|
||||
ns_add_hook(NS_ENABLE_HOOK, zebra_ns_enabled);
|
||||
|
Loading…
Reference in New Issue
Block a user