diff options
Diffstat (limited to 'net/ipv4/protocol.c')
| -rw-r--r-- | net/ipv4/protocol.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/net/ipv4/protocol.c b/net/ipv4/protocol.c index 8918eff1426d..0f9d09f54bd9 100644 --- a/net/ipv4/protocol.c +++ b/net/ipv4/protocol.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <net/protocol.h> | 29 | #include <net/protocol.h> |
| 30 | 30 | ||
| 31 | const struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS] __read_mostly; | 31 | const struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS] __read_mostly; |
| 32 | const struct net_offload __rcu *inet_offloads[MAX_INET_PROTOS] __read_mostly; | ||
| 32 | 33 | ||
| 33 | /* | 34 | /* |
| 34 | * Add a protocol handler to the hash tables | 35 | * Add a protocol handler to the hash tables |
| @@ -41,6 +42,13 @@ int inet_add_protocol(const struct net_protocol *prot, unsigned char protocol) | |||
| 41 | } | 42 | } |
| 42 | EXPORT_SYMBOL(inet_add_protocol); | 43 | EXPORT_SYMBOL(inet_add_protocol); |
| 43 | 44 | ||
| 45 | int inet_add_offload(const struct net_offload *prot, unsigned char protocol) | ||
| 46 | { | ||
| 47 | return !cmpxchg((const struct net_offload **)&inet_offloads[protocol], | ||
| 48 | NULL, prot) ? 0 : -1; | ||
| 49 | } | ||
| 50 | EXPORT_SYMBOL(inet_add_offload); | ||
| 51 | |||
| 44 | /* | 52 | /* |
| 45 | * Remove a protocol from the hash tables. | 53 | * Remove a protocol from the hash tables. |
| 46 | */ | 54 | */ |
| @@ -57,3 +65,16 @@ int inet_del_protocol(const struct net_protocol *prot, unsigned char protocol) | |||
| 57 | return ret; | 65 | return ret; |
| 58 | } | 66 | } |
| 59 | EXPORT_SYMBOL(inet_del_protocol); | 67 | EXPORT_SYMBOL(inet_del_protocol); |
| 68 | |||
| 69 | int inet_del_offload(const struct net_offload *prot, unsigned char protocol) | ||
| 70 | { | ||
| 71 | int ret; | ||
| 72 | |||
| 73 | ret = (cmpxchg((const struct net_offload **)&inet_offloads[protocol], | ||
| 74 | prot, NULL) == prot) ? 0 : -1; | ||
| 75 | |||
| 76 | synchronize_net(); | ||
| 77 | |||
| 78 | return ret; | ||
| 79 | } | ||
| 80 | EXPORT_SYMBOL(inet_del_offload); | ||
