cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

p8022.c (1703B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *	NET3:	Support for 802.2 demultiplexing off Ethernet
      4 *
      5 *		Demultiplex 802.2 encoded protocols. We match the entry by the
      6 *		SSAP/DSAP pair and then deliver to the registered datalink that
      7 *		matches. The control byte is ignored and handling of such items
      8 *		is up to the routine passed the frame.
      9 *
     10 *		Unlike the 802.3 datalink we have a list of 802.2 entries as
     11 *		there are multiple protocols to demux. The list is currently
     12 *		short (3 or 4 entries at most). The current demux assumes this.
     13 */
     14#include <linux/module.h>
     15#include <linux/netdevice.h>
     16#include <linux/skbuff.h>
     17#include <linux/slab.h>
     18#include <net/datalink.h>
     19#include <linux/mm.h>
     20#include <linux/in.h>
     21#include <linux/init.h>
     22#include <net/llc.h>
     23#include <net/p8022.h>
     24
     25static int p8022_request(struct datalink_proto *dl, struct sk_buff *skb,
     26			 const unsigned char *dest)
     27{
     28	llc_build_and_send_ui_pkt(dl->sap, skb, dest, dl->sap->laddr.lsap);
     29	return 0;
     30}
     31
     32struct datalink_proto *register_8022_client(unsigned char type,
     33					    int (*func)(struct sk_buff *skb,
     34							struct net_device *dev,
     35							struct packet_type *pt,
     36							struct net_device *orig_dev))
     37{
     38	struct datalink_proto *proto;
     39
     40	proto = kmalloc(sizeof(*proto), GFP_ATOMIC);
     41	if (proto) {
     42		proto->type[0]		= type;
     43		proto->header_length	= 3;
     44		proto->request		= p8022_request;
     45		proto->sap = llc_sap_open(type, func);
     46		if (!proto->sap) {
     47			kfree(proto);
     48			proto = NULL;
     49		}
     50	}
     51	return proto;
     52}
     53
     54void unregister_8022_client(struct datalink_proto *proto)
     55{
     56	llc_sap_put(proto->sap);
     57	kfree(proto);
     58}
     59
     60EXPORT_SYMBOL(register_8022_client);
     61EXPORT_SYMBOL(unregister_8022_client);
     62
     63MODULE_LICENSE("GPL");