patch-2.4.21 linux-2.4.21/net/802/fc.c
Next file: linux-2.4.21/net/802/tr.c
Previous file: linux-2.4.21/net/802/Makefile
Back to the patch index
Back to the overall index
- Lines: 50
- Date:
2003-06-13 07:51:39.000000000 -0700
- Orig file:
linux-2.4.20/net/802/fc.c
- Orig date:
1999-11-12 04:29:47.000000000 -0800
diff -urN linux-2.4.20/net/802/fc.c linux-2.4.21/net/802/fc.c
@@ -11,6 +11,8 @@
*/
#include <linux/config.h>
+#include <linux/module.h>
+
#include <asm/uaccess.h>
#include <asm/system.h>
#include <linux/types.h>
@@ -95,4 +97,39 @@
return 0;
#endif
}
-
+
+EXPORT_SYMBOL(fc_type_trans);
+
+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);
+}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)