diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index fae11b674a..1ffea6ab46 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -87,6 +87,7 @@ struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim) pim_ifp->options = 0; pim_ifp->mroute_vif_index = -1; + pim_ifp->pim_raw_fd = -1; pim_ifp->igmp_default_robustness_variable = IGMP_DEFAULT_ROBUSTNESS_VARIABLE; pim_ifp->igmp_default_query_interval = IGMP_GENERAL_QUERY_INTERVAL; @@ -162,6 +163,12 @@ void pim_if_delete(struct interface *ifp) pim_ifp = ifp->info; zassert(pim_ifp); + if (pim_ifp->pim_raw_fd == -1) + { + close (pim_ifp->pim_raw_fd); + pim_ifp->pim_raw_fd = -1; + } + if (pim_ifp->igmp_join_list) { pim_if_igmp_join_del_all(ifp); } diff --git a/pimd/pim_iface.h b/pimd/pim_iface.h index 75b85c306a..7f3d6961fa 100644 --- a/pimd/pim_iface.h +++ b/pimd/pim_iface.h @@ -73,6 +73,7 @@ struct pim_interface { struct list *igmp_join_list; /* list of struct igmp_join */ int pim_sock_fd; /* PIM socket file descriptor */ + int pim_raw_fd; /* RP forwarding */ struct thread *t_pim_sock_read; /* thread for reading PIM socket */ int64_t pim_sock_creation; /* timestamp of PIM socket creation */