Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/net/ipv6/protocol.c
15109 views
1
/*
2
* INET An implementation of the TCP/IP protocol suite for the LINUX
3
* operating system. INET is implemented using the BSD Socket
4
* interface as the means of communication with the user level.
5
*
6
* PF_INET6 protocol dispatch tables.
7
*
8
* Authors: Pedro Roque <[email protected]>
9
*
10
* This program is free software; you can redistribute it and/or
11
* modify it under the terms of the GNU General Public License
12
* as published by the Free Software Foundation; either version
13
* 2 of the License, or (at your option) any later version.
14
*/
15
16
/*
17
* Changes:
18
*
19
* Vince Laviano ([email protected]) 16 May 2001
20
* - Removed unused variable 'inet6_protocol_base'
21
* - Modified inet6_del_protocol() to correctly maintain copy bit.
22
*/
23
#include <linux/module.h>
24
#include <linux/netdevice.h>
25
#include <linux/spinlock.h>
26
#include <net/protocol.h>
27
28
const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS] __read_mostly;
29
30
int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char protocol)
31
{
32
int hash = protocol & (MAX_INET_PROTOS - 1);
33
34
return !cmpxchg((const struct inet6_protocol **)&inet6_protos[hash],
35
NULL, prot) ? 0 : -1;
36
}
37
EXPORT_SYMBOL(inet6_add_protocol);
38
39
/*
40
* Remove a protocol from the hash tables.
41
*/
42
43
int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char protocol)
44
{
45
int ret, hash = protocol & (MAX_INET_PROTOS - 1);
46
47
ret = (cmpxchg((const struct inet6_protocol **)&inet6_protos[hash],
48
prot, NULL) == prot) ? 0 : -1;
49
50
synchronize_net();
51
52
return ret;
53
}
54
EXPORT_SYMBOL(inet6_del_protocol);
55
56