From: YOSHIFUJI Hideaki / 吉藤英明 Date: Mon, 25 Mar 2013 08:25:48 +0000 (+0000) Subject: firewire net: Send L2 multicast via GASP. X-Git-Tag: v5.15~20166^2~338^2~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=021b97e469714b31b9e808c91b49543a8766c342;p=platform%2Fkernel%2Flinux-starfive.git firewire net: Send L2 multicast via GASP. Send L2 multicast packet via GASP (Global asynchronous stream packet) by seeing the multicast bit in the L2 hardware address, not by seeing upper- layer protocol address. Signed-off-by: YOSHIFUJI Hideaki Signed-off-by: David S. Miller --- diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c index d438c5b..7c2e16a 100644 --- a/drivers/firewire/net.c +++ b/drivers/firewire/net.c @@ -84,6 +84,11 @@ struct fwnet_header { __be16 h_proto; /* packet type ID field */ } __packed; +static bool fwnet_hwaddr_is_multicast(u8 *ha) +{ + return !!(*ha & 1); +} + /* IPv4 and IPv6 encapsulation header */ struct rfc2734_header { u32 w0; @@ -626,7 +631,7 @@ static int fwnet_finish_incoming_packet(struct net_device *net, skb_reset_mac_header(skb); skb_pull(skb, sizeof(*eth)); eth = (struct fwnet_header *)skb_mac_header(skb); - if (*eth->h_dest & 1) { + if (fwnet_hwaddr_is_multicast(eth->h_dest)) { if (memcmp(eth->h_dest, net->broadcast, net->addr_len) == 0) skb->pkt_type = PACKET_BROADCAST; @@ -1366,10 +1371,7 @@ static netdev_tx_t fwnet_tx(struct sk_buff *skb, struct net_device *net) * Set the transmission type for the packet. ARP packets and IP * broadcast packets are sent via GASP. */ - if (memcmp(hdr_buf.h_dest, net->broadcast, FWNET_ALEN) == 0 - || proto == htons(ETH_P_ARP) - || (proto == htons(ETH_P_IP) - && IN_MULTICAST(ntohl(ip_hdr(skb)->daddr)))) { + if (fwnet_hwaddr_is_multicast(hdr_buf.h_dest)) { max_payload = dev->broadcast_xmt_max_payload; datagram_label_ptr = &dev->broadcast_xmt_datagramlabel;