]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_msdp_socket.c
*: Actually allow end users to not build pbrd
[mirror_frr.git] / pimd / pim_msdp_socket.c
index b8c103fe276a8c452b680e92d7af1f117d187312..f245a043534af4557dca3210e35dfab4418e6906 100644 (file)
@@ -153,7 +153,18 @@ int pim_msdp_sock_listen(struct pim_instance *pim)
        if (pim->vrf_id != VRF_DEFAULT) {
                struct interface *ifp =
                        if_lookup_by_name(pim->vrf->name, pim->vrf_id);
-               pim_socket_bind(sock, ifp);
+               if (!ifp) {
+                       zlog_err("%s: Unable to lookup vrf interface: %s",
+                                __PRETTY_FUNCTION__, pim->vrf->name);
+                       close(sock);
+                       return -1;
+               }
+               if (pim_socket_bind(sock, ifp)) {
+                       zlog_err("%s: Unable to bind to socket: %s",
+                                __PRETTY_FUNCTION__, safe_strerror(errno));
+                       close(sock);
+                       return -1;
+               }
        }
 
        if (pimd_privs.change(ZPRIVS_RAISE)) {
@@ -226,7 +237,18 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp)
        if (mp->pim->vrf_id != VRF_DEFAULT) {
                struct interface *ifp =
                        if_lookup_by_name(mp->pim->vrf->name, mp->pim->vrf_id);
-               pim_socket_bind(mp->fd, ifp);
+               if (!ifp) {
+                       zlog_err("%s: Unable to lookup vrf interface: %s",
+                                __PRETTY_FUNCTION__, mp->pim->vrf->name);
+                       return -1;
+               }
+               if (pim_socket_bind(mp->fd, ifp)) {
+                       zlog_err("%s: Unable to bind to socket: %s",
+                                __PRETTY_FUNCTION__, safe_strerror(errno));
+                       close(mp->fd);
+                       mp->fd = -1;
+                       return -1;
+               }
        }
 
        set_nonblocking(mp->fd);