13 #include <linux/module.h>
14 #include <linux/inet_diag.h>
15 #include <linux/udp.h>
18 #include <linux/sock_diag.h>
39 struct net *
net = sock_net(in_skb->
sk);
43 req->
id.idiag_src[0], req->
id.idiag_sport,
44 req->
id.idiag_dst[0], req->
id.idiag_dport,
45 req->
id.idiag_if, tbl);
46 #if IS_ENABLED(CONFIG_IPV6)
53 req->
id.idiag_if, tbl);
97 struct net *net = sock_net(skb->
sk);
100 num = s_num = cb->
args[1];
102 for (slot = s_slot; slot <= table->
mask; num = s_num = 0, slot++) {
107 if (hlist_nulls_empty(&hslot->
head))
110 spin_lock_bh(&hslot->
lock);
114 if (!net_eq(sock_net(sk), net))
130 if (sk_diag_dump(sk, skb, cb, r, bc) < 0) {
131 spin_unlock_bh(&hslot->
lock);
137 spin_unlock_bh(&hslot->
lock);
150 static int udp_diag_dump_one(
struct sk_buff *in_skb,
const struct nlmsghdr *nlh,
153 return udp_dump_one(&
udp_table, in_skb, nlh, req);
164 .dump = udp_diag_dump,
165 .dump_one = udp_diag_dump_one,
166 .idiag_get_info = udp_diag_get_info,
173 udp_dump(&udplite_table, skb, cb, r, bc);
176 static int udplite_diag_dump_one(
struct sk_buff *in_skb,
const struct nlmsghdr *nlh,
179 return udp_dump_one(&udplite_table, in_skb, nlh, req);
183 .dump = udplite_diag_dump,
184 .dump_one = udplite_diag_dump_one,
185 .idiag_get_info = udp_diag_get_info,
189 static int __init udp_diag_init(
void)
206 static void __exit udp_diag_exit(
void)