diff options
| -rw-r--r-- | bgpd/bgp_attr.c | 17 | ||||
| -rw-r--r-- | bgpd/bgp_lcommunity.c | 16 | 
2 files changed, 15 insertions, 18 deletions
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c index da5d1e8d9c..42cf45c88a 100644 --- a/bgpd/bgp_attr.c +++ b/bgpd/bgp_attr.c @@ -3058,20 +3058,20 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,  	if (CHECK_FLAG(peer->af_flags[afi][safi],  		       PEER_FLAG_SEND_LARGE_COMMUNITY)  	    && (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_LARGE_COMMUNITIES))) { -		if (attr->lcommunity->size * LCOMMUNITY_SIZE > 255) { +		if (lcom_length(attr->lcommunity) > 255) {  			stream_putc(s, BGP_ATTR_FLAG_OPTIONAL  					       | BGP_ATTR_FLAG_TRANS  					       | BGP_ATTR_FLAG_EXTLEN);  			stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES); -			stream_putw(s, attr->lcommunity->size * LCOMMUNITY_SIZE); +			stream_putw(s, lcom_length(attr->lcommunity));  		} else {  			stream_putc(s, BGP_ATTR_FLAG_OPTIONAL  					       | BGP_ATTR_FLAG_TRANS);  			stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES); -			stream_putc(s, attr->lcommunity->size * LCOMMUNITY_SIZE); +			stream_putc(s, lcom_length(attr->lcommunity));  		}  		stream_put(s, attr->lcommunity->val, -			   attr->lcommunity->size * LCOMMUNITY_SIZE); +			   lcom_length(attr->lcommunity));  	}  	/* Route Reflector. */ @@ -3422,21 +3422,20 @@ void bgp_dump_routes_attr(struct stream *s, struct attr *attr,  	/* Large Community attribute. */  	if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_LARGE_COMMUNITIES)) { -		if (attr->lcommunity->size * LCOMMUNITY_SIZE > 255) { +		if (lcom_length(attr->lcommunity) > 255) {  			stream_putc(s, BGP_ATTR_FLAG_OPTIONAL  					       | BGP_ATTR_FLAG_TRANS  					       | BGP_ATTR_FLAG_EXTLEN);  			stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES); -			stream_putw(s, attr->lcommunity->size * LCOMMUNITY_SIZE); +			stream_putw(s, lcom_length(attr->lcommunity));  		} else {  			stream_putc(s, BGP_ATTR_FLAG_OPTIONAL  					       | BGP_ATTR_FLAG_TRANS);  			stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES); -			stream_putc(s, attr->lcommunity->size * LCOMMUNITY_SIZE); +			stream_putc(s, lcom_length(attr->lcommunity));  		} -		stream_put(s, attr->lcommunity->val, -			   attr->lcommunity->size * LCOMMUNITY_SIZE); +		stream_put(s, attr->lcommunity->val, lcom_length(attr->lcommunity));  	}  	/* Add a MP_NLRI attribute to dump the IPv6 next hop */ diff --git a/bgpd/bgp_lcommunity.c b/bgpd/bgp_lcommunity.c index 344a25dfa6..fd734b2c5b 100644 --- a/bgpd/bgp_lcommunity.c +++ b/bgpd/bgp_lcommunity.c @@ -151,9 +151,8 @@ struct lcommunity *lcommunity_dup(struct lcommunity *lcom)  	new = XCALLOC(MTYPE_LCOMMUNITY, sizeof(struct lcommunity));  	new->size = lcom->size;  	if (new->size) { -		new->val = XMALLOC(MTYPE_LCOMMUNITY_VAL, -				   lcom->size * LCOMMUNITY_SIZE); -		memcpy(new->val, lcom->val, lcom->size * LCOMMUNITY_SIZE); +		new->val = XMALLOC(MTYPE_LCOMMUNITY_VAL, lcom_length(lcom)); +		memcpy(new->val, lcom->val, lcom_length(lcom));  	} else  		new->val = NULL;  	return new; @@ -175,14 +174,13 @@ struct lcommunity *lcommunity_merge(struct lcommunity *lcom1,  	if (lcom1->val)  		lcom1->val =  			XREALLOC(MTYPE_LCOMMUNITY_VAL, lcom1->val, -				 (lcom1->size + lcom2->size) * LCOMMUNITY_SIZE); +				 lcom_length(lcom1) + lcom_length(lcom2));  	else  		lcom1->val =  			XMALLOC(MTYPE_LCOMMUNITY_VAL, -				(lcom1->size + lcom2->size) * LCOMMUNITY_SIZE); +				lcom_length(lcom1) + lcom_length(lcom2)); -	memcpy(lcom1->val + (lcom1->size * LCOMMUNITY_SIZE), lcom2->val, -	       lcom2->size * LCOMMUNITY_SIZE); +	memcpy(lcom1->val + lcom_length(lcom1), lcom2->val, lcom_length(lcom2));  	lcom1->size += lcom2->size;  	return lcom1; @@ -231,7 +229,7 @@ void lcommunity_unintern(struct lcommunity **lcom)  unsigned int lcommunity_hash_make(void *arg)  {  	const struct lcommunity *lcom = arg; -	int size = lcom->size * LCOMMUNITY_SIZE; +	int size = lcom_length(lcom);  	u_int8_t *pnt = lcom->val;  	unsigned int key = 0;  	int c; @@ -261,7 +259,7 @@ int lcommunity_cmp(const void *arg1, const void *arg2)  	const struct lcommunity *lcom2 = arg2;  	return (lcom1->size == lcom2->size -		&& memcmp(lcom1->val, lcom2->val, lcom1->size * LCOMMUNITY_SIZE) +		&& memcmp(lcom1->val, lcom2->val, lcom_length(lcom1))  			   == 0);  }  | 
