diff options
| -rw-r--r-- | drivers/net/fc/iph5526.c | 32 | ||||
| -rw-r--r-- | include/linux/fcdevice.h | 2 | ||||
| -rw-r--r-- | net/802/fc.c | 35 |
3 files changed, 35 insertions, 34 deletions
diff --git a/drivers/net/fc/iph5526.c b/drivers/net/fc/iph5526.c index 4eaa4a26299d..9e5afc18f1a8 100644 --- a/drivers/net/fc/iph5526.c +++ b/drivers/net/fc/iph5526.c @@ -3175,38 +3175,6 @@ struct fch_hdr fch; LEAVE("rx_net_mfs_packet"); } -unsigned short fc_type_trans(struct sk_buff *skb, struct net_device *dev) -{ -struct fch_hdr *fch=(struct fch_hdr *)skb->data; -struct fcllc *fcllc; - skb->mac.raw = skb->data; - fcllc = (struct fcllc *)(skb->data + sizeof(struct fch_hdr) + 2); - skb_pull(skb,sizeof(struct fch_hdr) + 2); - - if(*fch->daddr & 1) { - if(!memcmp(fch->daddr,dev->broadcast,FC_ALEN)) - skb->pkt_type = PACKET_BROADCAST; - else - skb->pkt_type = PACKET_MULTICAST; - } - else if(dev->flags & IFF_PROMISC) { - if(memcmp(fch->daddr, dev->dev_addr, FC_ALEN)) - skb->pkt_type=PACKET_OTHERHOST; - } - - /* Strip the SNAP header from ARP packets since we don't - * pass them through to the 802.2/SNAP layers. - */ - - if (fcllc->dsap == EXTENDED_SAP && - (fcllc->ethertype == ntohs(ETH_P_IP) || - fcllc->ethertype == ntohs(ETH_P_ARP))) { - skb_pull(skb, sizeof(struct fcllc)); - return fcllc->ethertype; - } - return ntohs(ETH_P_802_2); -} - static int tx_exchange(struct fc_info *fi, char *data, u_int len, u_int r_ctl, u_int type, u_int d_id, u_int mtu, int int_required, u_short tx_ox_id, u_int frame_class) { u_char df_ctl; diff --git a/include/linux/fcdevice.h b/include/linux/fcdevice.h index 25687bb17c70..8b81098ea96f 100644 --- a/include/linux/fcdevice.h +++ b/include/linux/fcdevice.h @@ -31,7 +31,7 @@ extern int fc_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, void *daddr, void *saddr, unsigned len); extern int fc_rebuild_header(struct sk_buff *skb); -//extern unsigned short fc_type_trans(struct sk_buff *skb, struct net_device *dev); +extern unsigned short fc_type_trans(struct sk_buff *skb, struct net_device *dev); extern struct net_device *init_fcdev(struct net_device *dev, int sizeof_priv); extern struct net_device *alloc_fcdev(int sizeof_priv); diff --git a/net/802/fc.c b/net/802/fc.c index d34031fe85a1..7fa81023a3fa 100644 --- a/net/802/fc.c +++ b/net/802/fc.c @@ -95,4 +95,37 @@ int fc_rebuild_header(struct sk_buff *skb) return 0; #endif } - + +unsigned short +fc_type_trans(struct sk_buff *skb, struct net_device *dev) +{ + struct fch_hdr *fch = (struct fch_hdr *)skb->data; + struct fcllc *fcllc; + + skb->mac.raw = skb->data; + fcllc = (struct fcllc *)(skb->data + sizeof (struct fch_hdr) + 2); + skb_pull(skb, sizeof (struct fch_hdr) + 2); + + if (*fch->daddr & 1) { + if (!memcmp(fch->daddr, dev->broadcast, FC_ALEN)) + skb->pkt_type = PACKET_BROADCAST; + else + skb->pkt_type = PACKET_MULTICAST; + } else if (dev->flags & IFF_PROMISC) { + if (memcmp(fch->daddr, dev->dev_addr, FC_ALEN)) + skb->pkt_type = PACKET_OTHERHOST; + } + + /* + * Strip the SNAP header from ARP packets since we don't pass + * them through to the 802.2/SNAP layers. + */ + if (fcllc->dsap == EXTENDED_SAP && + (fcllc->ethertype == ntohs(ETH_P_IP) || + fcllc->ethertype == ntohs(ETH_P_ARP))) { + skb_pull(skb, sizeof (struct fcllc)); + return fcllc->ethertype; + } + + return ntohs(ETH_P_802_2); +} |
