From de0016d4e280d3d5912bf14ba11473480052a1aa Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Sun, 2 Mar 2003 08:47:43 -0800 Subject: [PATCH] [NET]: Move fc_type_trans into generic code. --- drivers/net/fc/iph5526.c | 32 -------------------------------- include/linux/fcdevice.h | 2 +- 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 4eaa4a26299dc..9e5afc18f1a84 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 25687bb17c702..8b81098ea96f5 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 d34031fe85a15..7fa81023a3fab 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); +} -- 2.53.0