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)  | 
