patch-2.1.109 linux/net/802/p8022tr.c
Next file: linux/net/802/psnap.c
Previous file: linux/net/802/Makefile
Back to the patch index
Back to the overall index
- Lines: 144
- Date:
Wed Dec 31 16:00:00 1969
- Orig file:
v2.1.108/linux/net/802/p8022tr.c
- Orig date:
Mon Feb 23 18:12:12 1998
diff -u --recursive --new-file v2.1.108/linux/net/802/p8022tr.c linux/net/802/p8022tr.c
@@ -1,143 +0,0 @@
-/*
- * NET3: Handling for token ring frames that are not IP. IP is hooked
- * early in the token ring support code.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- */
-
-#include <linux/module.h>
-#include <linux/netdevice.h>
-#include <linux/skbuff.h>
-#include <net/datalink.h>
-#include <linux/mm.h>
-#include <linux/in.h>
-#include <linux/init.h>
-#include <net/p8022tr.h>
-
-#define SNAP_HEADER_LEN 8
-
-static struct datalink_proto *p8022tr_list = NULL;
-
-/*
- * We don't handle the loopback SAP stuff, the extended
- * 802.2 command set, multicast SAP identifiers and non UI
- * frames. We have the absolute minimum needed for IPX,
- * IP and Appletalk phase 2. See the llc_* routines for support
- * to handle the fun stuff.
- *
- * We assume the list will be very short (at the moment its normally
- * one or two entries).
- */
-
-static struct datalink_proto *find_8022tr_client(unsigned char type)
-{
- struct datalink_proto *proto;
-
- for (proto = p8022tr_list;
- ((proto != NULL) && (*(proto->type) != type));
- proto = proto->next)
- ;
-
- return proto;
-}
-
-int p8022tr_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
-{
- struct datalink_proto *proto;
-
- proto = find_8022tr_client(*(skb->h.raw));
- if (proto != NULL) {
- skb->h.raw += 3;
- skb_pull(skb,3);
- return proto->rcvfunc(skb, dev, pt);
- }
-
- skb->sk = NULL;
- kfree_skb(skb);
- return 0;
-}
-
-static void p8022tr_datalink_header(struct datalink_proto *dl,
- struct sk_buff *skb, unsigned char *dest_node)
-{
- struct device *dev = skb->dev;
- unsigned char *rawp;
- unsigned char *olddata;
- unsigned char *newdata;
-
- rawp = skb_push(skb,3);
- *rawp++ = dl->type[0];
- *rawp++ = dl->type[0];
- *rawp = 0x03; /* UI */
- dev->hard_header(skb, dev, ETH_P_802_3, dest_node, NULL, skb->len);
- olddata = skb->data;
- newdata = skb_pull(skb, SNAP_HEADER_LEN);
- memmove(newdata, olddata, dev->hard_header_len - SNAP_HEADER_LEN);
-}
-
-static struct packet_type p8022tr_packet_type =
-{
- 0,
- NULL, /* All devices */
- p8022tr_rcv,
- NULL,
- NULL,
-};
-
-
-EXPORT_SYMBOL(register_8022tr_client);
-EXPORT_SYMBOL(unregister_8022tr_client);
-
-__initfunc(void p8022tr_proto_init(struct net_proto *pro))
-{
- p8022tr_packet_type.type=htons(ETH_P_TR_802_2);
- dev_add_pack(&p8022tr_packet_type);
-}
-
-struct datalink_proto *register_8022tr_client(unsigned char type,
- int (*rcvfunc)(struct sk_buff *, struct device *, struct packet_type *))
-{
- struct datalink_proto *proto;
-
- if (find_8022tr_client(type) != NULL)
- return NULL;
-
- proto = (struct datalink_proto *) kmalloc(sizeof(*proto), GFP_ATOMIC);
- if (proto != NULL) {
- proto->type[0] = type;
- proto->type_len = 1;
- proto->rcvfunc = rcvfunc;
- proto->header_length = 3;
- proto->datalink_header = p8022tr_datalink_header;
- proto->string_name = "802.2TR";
- proto->next = p8022tr_list;
- p8022tr_list = proto;
- }
-
- return proto;
-}
-
-void unregister_8022tr_client(unsigned char type)
-{
- struct datalink_proto *tmp, **clients = &p8022tr_list;
- unsigned long flags;
-
- save_flags(flags);
- cli();
-
- while ((tmp = *clients) != NULL)
- {
- if (tmp->type[0] == type) {
- *clients = tmp->next;
- kfree_s(tmp, sizeof(struct datalink_proto));
- break;
- } else {
- clients = &tmp->next;
- }
- }
-
- restore_flags(flags);
-}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov