diff options
| -rw-r--r-- | pimd/pim_autorp.c | 16 | ||||
| -rw-r--r-- | pimd/pim_autorp.h | 1 | ||||
| -rw-r--r-- | pimd/pim_instance.c | 7 | ||||
| -rw-r--r-- | pimd/pim_mroute.c | 10 |
4 files changed, 24 insertions, 10 deletions
diff --git a/pimd/pim_autorp.c b/pimd/pim_autorp.c index d8dc791430..12dd76577b 100644 --- a/pimd/pim_autorp.c +++ b/pimd/pim_autorp.c @@ -509,10 +509,19 @@ static bool pim_autorp_socket_enable(struct pim_autorp *autorp) return false; } + if (vrf_bind(autorp->pim->vrf->vrf_id, fd, NULL)) { + zlog_warn("Could not bind autorp socket to vrf fd=%d: vrf_id=%d: errno=%d: %s", + fd, autorp->pim->vrf->vrf_id, errno, safe_strerror(errno)); + close(fd); + return false; + } + autorp->sock = fd; + if (!pim_autorp_setup(autorp)) { - zlog_warn("Could not setup autorp socket fd=%d: errno=%d: %s", - fd, errno, safe_strerror(errno)); + zlog_warn("Could not setup autorp socket fd=%d: errno=%d: %s", fd, errno, + safe_strerror(errno)); + close(fd); autorp->sock = -1; return false; @@ -1043,7 +1052,10 @@ void pim_autorp_init(struct pim_instance *pim) if (PIM_DEBUG_AUTORP) zlog_debug("%s: AutoRP Initialized", __func__); +} +void pim_autorp_enable(struct pim_instance *pim) +{ /* Start AutoRP discovery by default on startup */ pim_autorp_start_discovery(pim); } diff --git a/pimd/pim_autorp.h b/pimd/pim_autorp.h index a0b029d00a..5b8633b576 100644 --- a/pimd/pim_autorp.h +++ b/pimd/pim_autorp.h @@ -150,6 +150,7 @@ void pim_autorp_rm_ifp(struct interface *ifp); void pim_autorp_start_discovery(struct pim_instance *pim); void pim_autorp_stop_discovery(struct pim_instance *pim); void pim_autorp_init(struct pim_instance *pim); +void pim_autorp_enable(struct pim_instance *pim); void pim_autorp_finish(struct pim_instance *pim); int pim_autorp_config_write(struct pim_instance *pim, struct vty *vty); void pim_autorp_show_autorp(struct vty *vty, struct pim_instance *pim, diff --git a/pimd/pim_instance.c b/pimd/pim_instance.c index f7c5ea3bcf..535bcf8b8c 100644 --- a/pimd/pim_instance.c +++ b/pimd/pim_instance.c @@ -186,8 +186,15 @@ static int pim_vrf_enable(struct vrf *vrf) zlog_debug("%s: for %s %u", __func__, vrf->name, vrf->vrf_id); + if (vrf_bind(vrf->vrf_id, pim->reg_sock, NULL) < 0) + zlog_warn("Failed to bind register socket to VRF %s", vrf->name); + pim_mroute_socket_enable(pim); +#if PIM_IPV == 4 + pim_autorp_enable(pim); +#endif + FOR_ALL_INTERFACES (vrf, ifp) { if (!ifp->info) continue; diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index adc47e719d..77e5123e46 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -864,17 +864,11 @@ int pim_mroute_socket_enable(struct pim_instance *pim) pim->vrf->name); #endif -#ifdef SO_BINDTODEVICE - if (pim->vrf->vrf_id != VRF_DEFAULT - && setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, - pim->vrf->name, strlen(pim->vrf->name))) { - zlog_warn("Could not setsockopt SO_BINDTODEVICE: %s", - safe_strerror(errno)); + if (vrf_bind(pim->vrf->vrf_id, fd, NULL)) { + zlog_warn("Could not bind to vrf: %s", safe_strerror(errno)); close(fd); return -3; } -#endif - } pim->mroute_socket = fd; |
