diff options
Diffstat (limited to 'net/tipc/eth_media.c')
-rw-r--r-- | net/tipc/eth_media.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c index ebba0fcd937..3b75c0d656d 100644 --- a/net/tipc/eth_media.c +++ b/net/tipc/eth_media.c @@ -54,18 +54,24 @@ struct eth_bearer { struct packet_type tipc_packet_type; }; +static struct media eth_media_info; static struct eth_bearer eth_bearers[MAX_ETH_BEARERS]; static int eth_started; static struct notifier_block notifier; /** * eth_media_addr_set - initialize Ethernet media address structure + * + * 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) { - a->type = htonl(TIPC_MEDIA_TYPE_ETH); - memcpy(&a->dev_addr.eth_addr, mac, ETH_ALEN); + 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); } /** @@ -94,7 +100,7 @@ static int send_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr, skb_reset_network_header(clone); clone->dev = dev; - dev_hard_header(clone, dev, ETH_P_TIPC, &dest->dev_addr.eth_addr, + dev_hard_header(clone, dev, ETH_P_TIPC, dest->value, dev->dev_addr, clone->len); dev_queue_xmit(clone); return 0; @@ -256,12 +262,10 @@ static int recv_notification(struct notifier_block *nb, unsigned long evt, static int eth_addr2str(struct tipc_media_addr *a, char *str_buf, int str_size) { - unchar *addr = (unchar *)&a->dev_addr; - if (str_size < 18) /* 18 = strlen("aa:bb:cc:dd:ee:ff\0") */ return 1; - sprintf(str_buf, "%pM", addr); + sprintf(str_buf, "%pM", a->value); return 0; } @@ -293,7 +297,7 @@ static int eth_addr2msg(struct tipc_media_addr *a, char *msg_area) { memset(msg_area, 0, TIPC_MEDIA_ADDR_SIZE); msg_area[TIPC_MEDIA_TYPE_OFFSET] = TIPC_MEDIA_TYPE_ETH; - memcpy(msg_area + ETH_ADDR_OFFSET, a->dev_addr.eth_addr, ETH_ALEN); + memcpy(msg_area + ETH_ADDR_OFFSET, a->value, ETH_ALEN); return 0; } @@ -322,8 +326,8 @@ static struct media eth_media_info = { .str2addr = eth_str2addr, .addr2msg = eth_addr2msg, .msg2addr = eth_msg2addr, - .bcast_addr = { htonl(TIPC_MEDIA_TYPE_ETH), - { {0xff, 0xff, 0xff, 0xff, 0xff, 0xff} } }, + .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, |