/* Register SNAP clients. We don't yet use this for IP.  */
struct datalink_proto* register_snap_client(const unsigned char *desc, int(*rcvfunc)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *))
/* Register SNAP clients. We don't yet use this for IP.  */
struct datalink_proto* register_snap_client(const unsigned char *desc, int(*rcvfunc)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *))
{
	struct datalink_proto *proto = NULL;
	spin_lock_bh(&snap_lock);
	if (find_snap_client(desc))
		goto out;
	proto = kmalloc(sizeof(*proto), GFP_ATOMIC);
	if (proto) {
		memcpy(proto->type, desc, 5);
		proto->rcvfunc		= rcvfunc;
		proto->header_length	= 5 + 3;
		proto->request		= snap_request;
		list_add_rcu(&proto->node, &snap_list);
	}
out:
	spin_unlock_bh(&snap_lock);
	synchronize_net();
	return proto;
}