diff options
Diffstat (limited to 'net/tipc/eth_media.c')
| -rw-r--r-- | net/tipc/eth_media.c | 39 | 
1 files changed, 12 insertions, 27 deletions
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c index 2132c1ef295..120a676a336 100644 --- a/net/tipc/eth_media.c +++ b/net/tipc/eth_media.c @@ -77,12 +77,13 @@ static struct notifier_block notifier = {   * Media-dependent "value" field stores MAC address in first 6 bytes   * and zeroes out the remaining bytes.   */ -static void eth_media_addr_set(struct tipc_media_addr *a, char *mac) +static void eth_media_addr_set(const struct tipc_bearer *tb_ptr, +			       struct tipc_media_addr *a, char *mac)  {  	memcpy(a->value, mac, ETH_ALEN);  	memset(a->value + ETH_ALEN, 0, sizeof(a->value) - ETH_ALEN);  	a->media_id = TIPC_MEDIA_TYPE_ETH; -	a->broadcast = !memcmp(mac, eth_media_info.bcast_addr.value, ETH_ALEN); +	a->broadcast = !memcmp(mac, tb_ptr->bcast_addr.value, ETH_ALEN);  }  /** @@ -110,6 +111,7 @@ static int send_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr,  	skb_reset_network_header(clone);  	clone->dev = dev; +	clone->protocol = htons(ETH_P_TIPC);  	dev_hard_header(clone, dev, ETH_P_TIPC, dest->value,  			dev->dev_addr, clone->len);  	dev_queue_xmit(clone); @@ -201,9 +203,13 @@ static int enable_bearer(struct tipc_bearer *tb_ptr)  	/* Associate TIPC bearer with Ethernet bearer */  	eb_ptr->bearer = tb_ptr;  	tb_ptr->usr_handle = (void *)eb_ptr; +	memset(tb_ptr->bcast_addr.value, 0, sizeof(tb_ptr->bcast_addr.value)); +	memcpy(tb_ptr->bcast_addr.value, dev->broadcast, ETH_ALEN); +	tb_ptr->bcast_addr.media_id = TIPC_MEDIA_TYPE_ETH; +	tb_ptr->bcast_addr.broadcast = 1;  	tb_ptr->mtu = dev->mtu;  	tb_ptr->blocked = 0; -	eth_media_addr_set(&tb_ptr->addr, (char *)dev->dev_addr); +	eth_media_addr_set(tb_ptr, &tb_ptr->addr, (char *)dev->dev_addr);  	return 0;  } @@ -302,25 +308,6 @@ static int eth_addr2str(struct tipc_media_addr *a, char *str_buf, int str_size)  }  /** - * eth_str2addr - convert string to Ethernet address - */ -static int eth_str2addr(struct tipc_media_addr *a, char *str_buf) -{ -	char mac[ETH_ALEN]; -	int r; - -	r = sscanf(str_buf, "%02x:%02x:%02x:%02x:%02x:%02x", -		       (u32 *)&mac[0], (u32 *)&mac[1], (u32 *)&mac[2], -		       (u32 *)&mac[3], (u32 *)&mac[4], (u32 *)&mac[5]); - -	if (r != ETH_ALEN) -		return 1; - -	eth_media_addr_set(a, mac); -	return 0; -} - -/**   * eth_str2addr - convert Ethernet address format to message header format   */  static int eth_addr2msg(struct tipc_media_addr *a, char *msg_area) @@ -334,12 +321,13 @@ static int eth_addr2msg(struct tipc_media_addr *a, char *msg_area)  /**   * eth_str2addr - convert message header address format to Ethernet format   */ -static int eth_msg2addr(struct tipc_media_addr *a, char *msg_area) +static int eth_msg2addr(const struct tipc_bearer *tb_ptr, +			struct tipc_media_addr *a, char *msg_area)  {  	if (msg_area[TIPC_MEDIA_TYPE_OFFSET] != TIPC_MEDIA_TYPE_ETH)  		return 1; -	eth_media_addr_set(a, msg_area + ETH_ADDR_OFFSET); +	eth_media_addr_set(tb_ptr, a, msg_area + ETH_ADDR_OFFSET);  	return 0;  } @@ -351,11 +339,8 @@ static struct tipc_media eth_media_info = {  	.enable_bearer	= enable_bearer,  	.disable_bearer	= disable_bearer,  	.addr2str	= eth_addr2str, -	.str2addr	= eth_str2addr,  	.addr2msg	= eth_addr2msg,  	.msg2addr	= eth_msg2addr, -	.bcast_addr	= { { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, -			    TIPC_MEDIA_TYPE_ETH, 1 },  	.priority	= TIPC_DEF_LINK_PRI,  	.tolerance	= TIPC_DEF_LINK_TOL,  	.window		= TIPC_DEF_LINK_WIN,  |