diff options
| author | Lou Berger <lberger@labn.net> | 2018-06-04 09:53:59 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-06-04 09:53:59 -0400 |
| commit | f89270226297ec1f1a8290481d1dc7fb66d71422 (patch) | |
| tree | affbee2ba38111a1efb9bd8c1cb092e14718b36c | |
| parent | 2d2117125f1c3cb28a8973673fad2f8e6af2e6d1 (diff) | |
| parent | 7e0c80ea1c526903d4b67dabddc9430c3aab8d65 (diff) | |
Merge pull request #2362 from donaldsharp/vrf_debug_5.0
Couple of cherry-picks of code
| -rw-r--r-- | bgpd/bgp_network.c | 4 | ||||
| -rw-r--r-- | bgpd/bgpd.c | 58 | ||||
| -rw-r--r-- | lib/vrf.c | 2 | ||||
| -rw-r--r-- | zebra/redistribute.c | 33 |
4 files changed, 34 insertions, 63 deletions
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c index 37d06c1e53..84a959d0e8 100644 --- a/bgpd/bgp_network.c +++ b/bgpd/bgp_network.c @@ -723,7 +723,9 @@ int bgp_socket(struct bgp *bgp, unsigned short port, const char *address) if (bgpd_privs.change(ZPRIVS_RAISE)) zlog_err("Can't raise privileges"); sock = vrf_socket(ainfo->ai_family, ainfo->ai_socktype, - ainfo->ai_protocol, bgp->vrf_id, NULL); + ainfo->ai_protocol, bgp->vrf_id, + (bgp->inst_type == BGP_INSTANCE_TYPE_VRF ? + bgp->name : NULL)); if (bgpd_privs.change(ZPRIVS_LOWER)) zlog_err("Can't lower privileges"); if (sock < 0) { diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index cfb759d124..41f85f4a6f 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -109,12 +109,7 @@ extern struct zclient *zclient; static int bgp_check_main_socket(bool create, struct bgp *bgp) { static int bgp_server_main_created; - struct listnode *bgpnode, *nbgpnode; - struct bgp *bgp_temp; - if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF && - vrf_is_mapped_on_netns(bgp->vrf_id)) - return 0; if (create == true) { if (bgp_server_main_created) return 0; @@ -125,18 +120,6 @@ static int bgp_check_main_socket(bool create, struct bgp *bgp) } if (!bgp_server_main_created) return 0; - /* only delete socket on some cases */ - for (ALL_LIST_ELEMENTS(bm->bgp, bgpnode, nbgpnode, bgp_temp)) { - /* do not count with current bgp */ - if (bgp_temp == bgp) - continue; - /* if other instance non VRF, do not delete socket */ - if (bgp_temp->inst_type == BGP_INSTANCE_TYPE_DEFAULT) - return 0; - /* vrf lite, do not delete socket */ - if (!vrf_is_mapped_on_netns(bgp_temp->vrf_id)) - return 0; - } bgp_close(); bgp_server_main_created = 0; return 0; @@ -3074,17 +3057,16 @@ int bgp_handle_socket(struct bgp *bgp, struct vrf *vrf, vrf_id_t old_vrf_id, /* Create BGP server socket, if listen mode not disabled */ if (!bgp || bgp_option_check(BGP_OPT_NO_LISTEN)) return 0; - if (bgp->name && bgp->inst_type == BGP_INSTANCE_TYPE_VRF && vrf) { + if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF) { /* * suppress vrf socket */ if (create == FALSE) { - if (vrf_is_mapped_on_netns(vrf->vrf_id)) - bgp_close_vrf_socket(bgp); - else - ret = bgp_check_main_socket(create, bgp); - return ret; + bgp_close_vrf_socket(bgp); + return 0; } + if (vrf == NULL) + return BGP_ERR_INVALID_VALUE; /* do nothing * if vrf_id did not change */ @@ -3099,21 +3081,12 @@ int bgp_handle_socket(struct bgp *bgp, struct vrf *vrf, vrf_id_t old_vrf_id, */ if (vrf->vrf_id == VRF_UNKNOWN) return 0; - /* if BGP VRF instance requested - * if backend is NETNS, create BGP server socket in the NETNS - */ - if (vrf_is_mapped_on_netns(bgp->vrf_id)) { - ret = bgp_socket(bgp, bm->port, bm->address); - if (ret < 0) - return BGP_ERR_INVALID_VALUE; - return 0; - } - } - /* if BGP VRF instance requested or VRF lite backend - * if BGP non VRF instance, create it - * if not already done - */ - return bgp_check_main_socket(create, bgp); + ret = bgp_socket(bgp, bm->port, bm->address); + if (ret < 0) + return BGP_ERR_INVALID_VALUE; + return 0; + } else + return bgp_check_main_socket(create, bgp); } /* Called from VTY commands. */ @@ -3490,16 +3463,7 @@ struct peer *peer_lookup(struct bgp *bgp, union sockunion *su) struct listnode *bgpnode, *nbgpnode; for (ALL_LIST_ELEMENTS(bm->bgp, bgpnode, nbgpnode, bgp)) { - /* Skip VRFs Lite only, this function will not be - * invoked without an instance - * when examining VRFs. - */ - if ((bgp->inst_type == BGP_INSTANCE_TYPE_VRF) - && !vrf_is_mapped_on_netns(bgp->vrf_id)) - continue; - peer = hash_lookup(bgp->peerhash, &tmp_peer); - if (peer) break; } @@ -856,7 +856,7 @@ int vrf_bind(vrf_id_t vrf_id, int fd, char *name) if (vrf_is_mapped_on_netns(vrf_id)) return fd; #ifdef SO_BINDTODEVICE - ret = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, name, strlen(name)); + ret = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, name, strlen(name)+1); if (ret < 0) zlog_debug("bind to interface %s failed, errno=%d", name, errno); diff --git a/zebra/redistribute.c b/zebra/redistribute.c index 810ee33839..c7acd73988 100644 --- a/zebra/redistribute.c +++ b/zebra/redistribute.c @@ -120,7 +120,7 @@ static void zebra_redistribute(struct zserv *client, int type, if (IS_ZEBRA_DEBUG_EVENT) zlog_debug( - "%s: client %s %s(%d) checking: selected=%d, type=%d, distance=%d, metric=%d zebra_check_addr=%d", + "%s: client %s %s(%u) checking: selected=%d, type=%d, distance=%d, metric=%d zebra_check_addr=%d", __func__, zebra_route_string(client->proto), prefix2str(dst_p, buf, sizeof(buf)), @@ -192,7 +192,7 @@ void redistribute_update(struct prefix *p, struct prefix *src_p, if (send_redistribute) { if (IS_ZEBRA_DEBUG_EVENT) { zlog_debug( - "%s: client %s %s(%d), type=%d, distance=%d, metric=%d", + "%s: client %s %s(%u), type=%d, distance=%d, metric=%d", __func__, zebra_route_string(client->proto), prefix2str(p, buf, sizeof(buf)), @@ -270,7 +270,7 @@ void zebra_redistribute_add(ZAPI_HANDLER_ARGS) if (IS_ZEBRA_DEBUG_EVENT) zlog_debug( - "%s: client proto %s afi=%d, wants %s, vrf %d, instance=%d", + "%s: client proto %s afi=%d, wants %s, vrf %u, instance=%d", __func__, zebra_route_string(client->proto), afi, zebra_route_string(type), zvrf_id(zvrf), instance); @@ -298,7 +298,7 @@ void zebra_redistribute_add(ZAPI_HANDLER_ARGS) if (!vrf_bitmap_check(client->redist[afi][type], zvrf_id(zvrf))) { if (IS_ZEBRA_DEBUG_EVENT) - zlog_debug("%s: setting vrf %d redist bitmap", + zlog_debug("%s: setting vrf %u redist bitmap", __func__, zvrf_id(zvrf)); vrf_bitmap_set(client->redist[afi][type], zvrf_id(zvrf)); @@ -365,7 +365,8 @@ void zebra_interface_up_update(struct interface *ifp) struct zserv *client; if (IS_ZEBRA_DEBUG_EVENT) - zlog_debug("MESSAGE: ZEBRA_INTERFACE_UP %s", ifp->name); + zlog_debug("MESSAGE: ZEBRA_INTERFACE_UP %s(%u)", + ifp->name, ifp->vrf_id); if (ifp->ptm_status || !ifp->ptm_enable) { for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client)) @@ -384,7 +385,8 @@ void zebra_interface_down_update(struct interface *ifp) struct zserv *client; if (IS_ZEBRA_DEBUG_EVENT) - zlog_debug("MESSAGE: ZEBRA_INTERFACE_DOWN %s", ifp->name); + zlog_debug("MESSAGE: ZEBRA_INTERFACE_DOWN %s(%u)", + ifp->name, ifp->vrf_id); for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client)) { zsend_interface_update(ZEBRA_INTERFACE_DOWN, client, ifp); @@ -398,7 +400,7 @@ void zebra_interface_add_update(struct interface *ifp) struct zserv *client; if (IS_ZEBRA_DEBUG_EVENT) - zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADD %s[%d]", ifp->name, + zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADD %s(%u)", ifp->name, ifp->vrf_id); for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client)) @@ -415,7 +417,8 @@ void zebra_interface_delete_update(struct interface *ifp) struct zserv *client; if (IS_ZEBRA_DEBUG_EVENT) - zlog_debug("MESSAGE: ZEBRA_INTERFACE_DELETE %s", ifp->name); + zlog_debug("MESSAGE: ZEBRA_INTERFACE_DELETE %s(%u)", + ifp->name, ifp->vrf_id); for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client)) { client->ifdel_cnt++; @@ -435,8 +438,9 @@ void zebra_interface_address_add_update(struct interface *ifp, char buf[PREFIX_STRLEN]; p = ifc->address; - zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADDRESS_ADD %s on %s", - prefix2str(p, buf, sizeof(buf)), ifc->ifp->name); + zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADDRESS_ADD %s on %s(%u)", + prefix2str(p, buf, sizeof(buf)), ifp->name, + ifp->vrf_id); } if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL)) @@ -467,8 +471,9 @@ void zebra_interface_address_delete_update(struct interface *ifp, char buf[PREFIX_STRLEN]; p = ifc->address; - zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADDRESS_DELETE %s on %s", - prefix2str(p, buf, sizeof(buf)), ifc->ifp->name); + zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADDRESS_DELETE %s on %s(%u)", + prefix2str(p, buf, sizeof(buf)), + ifp->name, ifp->vrf_id); } zebra_vxlan_add_del_gw_macip(ifp, ifc->address, 0); @@ -768,8 +773,8 @@ void zebra_interface_parameters_update(struct interface *ifp) struct zserv *client; if (IS_ZEBRA_DEBUG_EVENT) - zlog_debug("MESSAGE: ZEBRA_INTERFACE_LINK_PARAMS %s", - ifp->name); + zlog_debug("MESSAGE: ZEBRA_INTERFACE_LINK_PARAMS %s(%u)", + ifp->name, ifp->vrf_id); for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client)) if (client->ifinfo) |
