mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
c6b641a4c6
Sing GSO support is now separate, pull it out of the module and make it its own init call. Remove the cleanup functions as they are no longer called. Signed-off-by: Vlad Yasevich <vyasevic@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
78 lines
2.1 KiB
C
78 lines
2.1 KiB
C
/*
|
|
* INET An implementation of the TCP/IP protocol suite for the LINUX
|
|
* operating system. INET is implemented using the BSD Socket
|
|
* interface as the means of communication with the user level.
|
|
*
|
|
* PF_INET6 protocol dispatch tables.
|
|
*
|
|
* Authors: Pedro Roque <roque@di.fc.ul.pt>
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
/*
|
|
* Changes:
|
|
*
|
|
* Vince Laviano (vince@cs.stanford.edu) 16 May 2001
|
|
* - Removed unused variable 'inet6_protocol_base'
|
|
* - Modified inet6_del_protocol() to correctly maintain copy bit.
|
|
*/
|
|
#include <linux/module.h>
|
|
#include <linux/netdevice.h>
|
|
#include <linux/spinlock.h>
|
|
#include <net/protocol.h>
|
|
|
|
#if IS_ENABLED(CONFIG_IPV6)
|
|
const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS] __read_mostly;
|
|
EXPORT_SYMBOL(inet6_protos);
|
|
|
|
int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char protocol)
|
|
{
|
|
return !cmpxchg((const struct inet6_protocol **)&inet6_protos[protocol],
|
|
NULL, prot) ? 0 : -1;
|
|
}
|
|
EXPORT_SYMBOL(inet6_add_protocol);
|
|
|
|
/*
|
|
* Remove a protocol from the hash tables.
|
|
*/
|
|
|
|
int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char protocol)
|
|
{
|
|
int ret;
|
|
|
|
ret = (cmpxchg((const struct inet6_protocol **)&inet6_protos[protocol],
|
|
prot, NULL) == prot) ? 0 : -1;
|
|
|
|
synchronize_net();
|
|
|
|
return ret;
|
|
}
|
|
EXPORT_SYMBOL(inet6_del_protocol);
|
|
#endif
|
|
|
|
const struct net_offload __rcu *inet6_offloads[MAX_INET_PROTOS] __read_mostly;
|
|
|
|
int inet6_add_offload(const struct net_offload *prot, unsigned char protocol)
|
|
{
|
|
return !cmpxchg((const struct net_offload **)&inet6_offloads[protocol],
|
|
NULL, prot) ? 0 : -1;
|
|
}
|
|
EXPORT_SYMBOL(inet6_add_offload);
|
|
|
|
int inet6_del_offload(const struct net_offload *prot, unsigned char protocol)
|
|
{
|
|
int ret;
|
|
|
|
ret = (cmpxchg((const struct net_offload **)&inet6_offloads[protocol],
|
|
prot, NULL) == prot) ? 0 : -1;
|
|
|
|
synchronize_net();
|
|
|
|
return ret;
|
|
}
|
|
EXPORT_SYMBOL(inet6_del_offload);
|