diff options
Diffstat (limited to 'include/linux/netlink.h')
| -rw-r--r-- | include/linux/netlink.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 6358da5eeee8..7a6c396a263b 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
| @@ -46,6 +46,7 @@ struct netlink_kernel_cfg { | |||
| 46 | void (*input)(struct sk_buff *skb); | 46 | void (*input)(struct sk_buff *skb); |
| 47 | struct mutex *cb_mutex; | 47 | struct mutex *cb_mutex; |
| 48 | void (*bind)(int group); | 48 | void (*bind)(int group); |
| 49 | bool (*compare)(struct net *net, struct sock *sk); | ||
| 49 | }; | 50 | }; |
| 50 | 51 | ||
| 51 | extern struct sock *__netlink_kernel_create(struct net *net, int unit, | 52 | extern struct sock *__netlink_kernel_create(struct net *net, int unit, |
| @@ -84,6 +85,22 @@ int netlink_attachskb(struct sock *sk, struct sk_buff *skb, | |||
| 84 | void netlink_detachskb(struct sock *sk, struct sk_buff *skb); | 85 | void netlink_detachskb(struct sock *sk, struct sk_buff *skb); |
| 85 | int netlink_sendskb(struct sock *sk, struct sk_buff *skb); | 86 | int netlink_sendskb(struct sock *sk, struct sk_buff *skb); |
| 86 | 87 | ||
| 88 | static inline struct sk_buff * | ||
| 89 | netlink_skb_clone(struct sk_buff *skb, gfp_t gfp_mask) | ||
| 90 | { | ||
| 91 | struct sk_buff *nskb; | ||
| 92 | |||
| 93 | nskb = skb_clone(skb, gfp_mask); | ||
| 94 | if (!nskb) | ||
| 95 | return NULL; | ||
| 96 | |||
| 97 | /* This is a large skb, set destructor callback to release head */ | ||
| 98 | if (is_vmalloc_addr(skb->head)) | ||
| 99 | nskb->destructor = skb->destructor; | ||
| 100 | |||
| 101 | return nskb; | ||
| 102 | } | ||
| 103 | |||
| 87 | /* | 104 | /* |
| 88 | * skb should fit one page. This choice is good for headerless malloc. | 105 | * skb should fit one page. This choice is good for headerless malloc. |
| 89 | * But we should limit to 8K so that userspace does not have to | 106 | * But we should limit to 8K so that userspace does not have to |
| @@ -144,4 +161,14 @@ static inline int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, | |||
| 144 | return __netlink_dump_start(ssk, skb, nlh, control); | 161 | return __netlink_dump_start(ssk, skb, nlh, control); |
| 145 | } | 162 | } |
| 146 | 163 | ||
| 164 | struct netlink_tap { | ||
| 165 | struct net_device *dev; | ||
| 166 | struct module *module; | ||
| 167 | struct list_head list; | ||
| 168 | }; | ||
| 169 | |||
| 170 | extern int netlink_add_tap(struct netlink_tap *nt); | ||
| 171 | extern int __netlink_remove_tap(struct netlink_tap *nt); | ||
| 172 | extern int netlink_remove_tap(struct netlink_tap *nt); | ||
| 173 | |||
| 147 | #endif /* __LINUX_NETLINK_H */ | 174 | #endif /* __LINUX_NETLINK_H */ |
