equal
deleted
inserted
replaced
48 __u16 cscov; |
48 __u16 cscov; |
49 __u8 partial_cov; |
49 __u8 partial_cov; |
50 }; |
50 }; |
51 #define UDP_SKB_CB(__skb) ((struct udp_skb_cb *)((__skb)->cb)) |
51 #define UDP_SKB_CB(__skb) ((struct udp_skb_cb *)((__skb)->cb)) |
52 |
52 |
53 extern struct hlist_head udp_hash[UDP_HTABLE_SIZE]; |
53 struct udp_hslot { |
54 extern rwlock_t udp_hash_lock; |
54 struct hlist_nulls_head head; |
|
55 spinlock_t lock; |
|
56 } __attribute__((aligned(2 * sizeof(long)))); |
|
57 struct udp_table { |
|
58 struct udp_hslot hash[UDP_HTABLE_SIZE]; |
|
59 }; |
|
60 extern struct udp_table udp_table; |
|
61 extern void udp_table_init(struct udp_table *); |
55 |
62 |
56 |
63 |
57 /* Note: this must match 'valbool' in sock_setsockopt */ |
64 /* Note: this must match 'valbool' in sock_setsockopt */ |
58 #define UDP_CSUM_NOXMIT 1 |
65 #define UDP_CSUM_NOXMIT 1 |
59 |
66 |
108 static inline void udp_lib_hash(struct sock *sk) |
115 static inline void udp_lib_hash(struct sock *sk) |
109 { |
116 { |
110 BUG(); |
117 BUG(); |
111 } |
118 } |
112 |
119 |
113 static inline void udp_lib_unhash(struct sock *sk) |
120 extern void udp_lib_unhash(struct sock *sk); |
114 { |
|
115 write_lock_bh(&udp_hash_lock); |
|
116 if (sk_del_node_init(sk)) { |
|
117 inet_sk(sk)->num = 0; |
|
118 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); |
|
119 } |
|
120 write_unlock_bh(&udp_hash_lock); |
|
121 } |
|
122 |
121 |
123 static inline void udp_lib_close(struct sock *sk, long timeout) |
122 static inline void udp_lib_close(struct sock *sk, long timeout) |
124 { |
123 { |
125 sk_common_release(sk); |
124 sk_common_release(sk); |
126 } |
125 } |
185 |
184 |
186 /* /proc */ |
185 /* /proc */ |
187 struct udp_seq_afinfo { |
186 struct udp_seq_afinfo { |
188 char *name; |
187 char *name; |
189 sa_family_t family; |
188 sa_family_t family; |
190 struct hlist_head *hashtable; |
189 struct udp_table *udp_table; |
191 struct file_operations seq_fops; |
190 struct file_operations seq_fops; |
192 struct seq_operations seq_ops; |
191 struct seq_operations seq_ops; |
193 }; |
192 }; |
194 |
193 |
195 struct udp_iter_state { |
194 struct udp_iter_state { |
196 struct seq_net_private p; |
195 struct seq_net_private p; |
197 sa_family_t family; |
196 sa_family_t family; |
198 int bucket; |
197 int bucket; |
199 struct hlist_head *hashtable; |
198 struct udp_table *udp_table; |
200 }; |
199 }; |
201 |
200 |
202 #ifdef CONFIG_PROC_FS |
201 #ifdef CONFIG_PROC_FS |
203 extern int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo); |
202 extern int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo); |
204 extern void udp_proc_unregister(struct net *net, struct udp_seq_afinfo *afinfo); |
203 extern void udp_proc_unregister(struct net *net, struct udp_seq_afinfo *afinfo); |