diff options
| author | Renato Westphal <renato@openbsd.org> | 2018-03-26 13:29:38 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-26 13:29:38 -0300 |
| commit | 4adfefaeaca8d29ded65094702f2ee9b1839f02c (patch) | |
| tree | e44795ca1be3ba3e41cc82da5ecfb6aa0dac9d81 /zebra/zebra_netns_notify.c | |
| parent | 81b6404b5846d23d0e01b912ffcb4f94d039d1db (diff) | |
| parent | b00592cb797dc14e2df56e63d3df2433cf89a2f4 (diff) | |
Merge pull request #1956 from pguibert6WIND/misc_fixes_netns
Misc fixes netns
Diffstat (limited to 'zebra/zebra_netns_notify.c')
| -rw-r--r-- | zebra/zebra_netns_notify.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/zebra/zebra_netns_notify.c b/zebra/zebra_netns_notify.c index 98b36dd10f..f9beb32ac4 100644 --- a/zebra/zebra_netns_notify.c +++ b/zebra/zebra_netns_notify.c @@ -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)); } |
