diff options
| author | Russ White <russ@riw.us> | 2019-09-30 07:46:19 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-09-30 07:46:19 -0400 |
| commit | 9898a2fb3441e7382dba4190233f466b8271deae (patch) | |
| tree | 9629a5ce665db95addf0d0bc0f46864ef71b5a49 /bfdd/ptm_adapter.c | |
| parent | 5c256b572ca09b5d15b67ba0236c8a2678dda19c (diff) | |
| parent | 26f8f6fe7fb90208d4a5eb285fdf0dca83bde508 (diff) | |
Merge pull request #5009 from donaldsharp/interface_deletion
lib, zebra: Allow for interface deletion when kernel event happens
Diffstat (limited to 'bfdd/ptm_adapter.c')
| -rw-r--r-- | bfdd/ptm_adapter.c | 37 |
1 files changed, 9 insertions, 28 deletions
diff --git a/bfdd/ptm_adapter.c b/bfdd/ptm_adapter.c index ae6d04e77d..1b3219c235 100644 --- a/bfdd/ptm_adapter.c +++ b/bfdd/ptm_adapter.c @@ -673,33 +673,10 @@ void bfdd_sessions_disable_vrf(struct vrf *vrf) } } -static int bfdd_interface_update(ZAPI_CALLBACK_ARGS) +static int bfd_ifp_destroy(struct interface *ifp) { - struct interface *ifp; - - /* - * `zebra_interface_add_read` will handle the interface creation - * on `lib/if.c`. We'll use that data structure instead of - * rolling our own. - */ - if (cmd == ZEBRA_INTERFACE_ADD) { - ifp = zebra_interface_add_read(zclient->ibuf, vrf_id); - if (ifp == NULL) - return 0; - - bfdd_sessions_enable_interface(ifp); - return 0; - } - - /* Update interface information. */ - ifp = zebra_interface_state_read(zclient->ibuf, vrf_id); - if (ifp == NULL) - return 0; - bfdd_sessions_disable_interface(ifp); - if_set_index(ifp, IFINDEX_INTERNAL); - return 0; } @@ -756,8 +733,16 @@ static int bfdd_interface_address_update(ZAPI_CALLBACK_ARGS) return 0; } +static int bfd_ifp_create(struct interface *ifp) +{ + bfdd_sessions_enable_interface(ifp); + + return 0; +} + void bfdd_zclient_init(struct zebra_privs_t *bfdd_priv) { + if_zapi_callbacks(bfd_ifp_create, NULL, NULL, bfd_ifp_destroy); zclient = zclient_new(master, &zclient_options_default); assert(zclient != NULL); zclient_init(zclient, ZEBRA_ROUTE_BFD, 0, bfdd_priv); @@ -772,10 +757,6 @@ void bfdd_zclient_init(struct zebra_privs_t *bfdd_priv) /* Send replay request on zebra connect. */ zclient->zebra_connected = bfdd_zebra_connected; - /* Learn interfaces from zebra instead of the OS. */ - zclient->interface_add = bfdd_interface_update; - zclient->interface_delete = bfdd_interface_update; - /* Learn about interface VRF. */ zclient->interface_vrf_update = bfdd_interface_vrf_update; |
