linux-bk/net/802/p8022.c
<<
>>
Prefs
   1/*
   2 *      NET3:   Support for 802.2 demultiplexing off Ethernet (Token ring
   3 *              is kept separate see p8022tr.c)
   4 *              This program is free software; you can redistribute it and/or
   5 *              modify it under the terms of the GNU General Public License
   6 *              as published by the Free Software Foundation; either version
   7 *              2 of the License, or (at your option) any later version.
   8 *
   9 *              Demultiplex 802.2 encoded protocols. We match the entry by the
  10 *              SSAP/DSAP pair and then deliver to the registered datalink that
  11 *              matches. The control byte is ignored and handling of such items
  12 *              is up to the routine passed the frame.
  13 *
  14 *              Unlike the 802.3 datalink we have a list of 802.2 entries as
  15 *              there are multiple protocols to demux. The list is currently
  16 *              short (3 or 4 entries at most). The current demux assumes this.
  17 */
  18#include <linux/module.h>
  19#include <linux/netdevice.h>
  20#include <linux/skbuff.h>
  21#include <net/datalink.h>
  22#include <linux/mm.h>
  23#include <linux/in.h>
  24#include <linux/init.h>
  25#include <net/llc.h>
  26#include <net/p8022.h>
  27
  28static int p8022_request(struct datalink_proto *dl, struct sk_buff *skb,
  29                         unsigned char *dest)
  30{
  31        llc_build_and_send_ui_pkt(dl->sap, skb, dest, dl->sap->laddr.lsap);
  32        return 0;
  33}
  34
  35struct datalink_proto *register_8022_client(unsigned char type,
  36                                            int (*func)(struct sk_buff *skb,
  37                                                        struct net_device *dev,
  38                                                        struct packet_type *pt))
  39{
  40        struct datalink_proto *proto;
  41
  42        proto = kmalloc(sizeof(*proto), GFP_ATOMIC);
  43        if (proto) {
  44                proto->type[0]          = type;
  45                proto->header_length    = 3;
  46                proto->request          = p8022_request;
  47                proto->sap = llc_sap_open(type, func);
  48                if (!proto->sap) {
  49                        kfree(proto);
  50                        proto = NULL;
  51                }
  52        }
  53        return proto;
  54}
  55
  56void unregister_8022_client(struct datalink_proto *proto)
  57{
  58        llc_sap_close(proto->sap);
  59        kfree(proto);
  60}
  61
  62EXPORT_SYMBOL(register_8022_client);
  63EXPORT_SYMBOL(unregister_8022_client);
  64
  65MODULE_LICENSE("GPL");
  66
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.