inet_diag.c (7c23aaf2eacdd10825237160cb8005efd7222061) inet_diag.c (33cf7c90fe2f97afb1cadaa0cfb782cb9d1b9ee2)
1/*
2 * inet_diag.c Module for monitoring INET transport protocols sockets.
3 *
4 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version

--- 207 unchanged lines hidden (view full) ---

216 struct user_namespace *user_ns,
217 u32 portid, u32 seq, u16 nlmsg_flags,
218 const struct nlmsghdr *unlh)
219{
220 return inet_sk_diag_fill(sk, inet_csk(sk), skb, req,
221 user_ns, portid, seq, nlmsg_flags, unlh);
222}
223
1/*
2 * inet_diag.c Module for monitoring INET transport protocols sockets.
3 *
4 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version

--- 207 unchanged lines hidden (view full) ---

216 struct user_namespace *user_ns,
217 u32 portid, u32 seq, u16 nlmsg_flags,
218 const struct nlmsghdr *unlh)
219{
220 return inet_sk_diag_fill(sk, inet_csk(sk), skb, req,
221 user_ns, portid, seq, nlmsg_flags, unlh);
222}
223
224static int inet_twsk_diag_fill(struct inet_timewait_sock *tw,
224static int inet_twsk_diag_fill(struct sock *sk,
225 struct sk_buff *skb,
226 const struct inet_diag_req_v2 *req,
227 u32 portid, u32 seq, u16 nlmsg_flags,
228 const struct nlmsghdr *unlh)
229{
225 struct sk_buff *skb,
226 const struct inet_diag_req_v2 *req,
227 u32 portid, u32 seq, u16 nlmsg_flags,
228 const struct nlmsghdr *unlh)
229{
230 struct inet_timewait_sock *tw = inet_twsk(sk);
230 struct inet_diag_msg *r;
231 struct nlmsghdr *nlh;
232 s32 tmo;
233
234 nlh = nlmsg_put(skb, portid, seq, unlh->nlmsg_type, sizeof(*r),
235 nlmsg_flags);
236 if (!nlh)
237 return -EMSGSIZE;

--- 4 unchanged lines hidden (view full) ---

242 tmo = tw->tw_ttd - inet_tw_time_stamp();
243 if (tmo < 0)
244 tmo = 0;
245
246 r->idiag_family = tw->tw_family;
247 r->idiag_retrans = 0;
248
249 r->id.idiag_if = tw->tw_bound_dev_if;
231 struct inet_diag_msg *r;
232 struct nlmsghdr *nlh;
233 s32 tmo;
234
235 nlh = nlmsg_put(skb, portid, seq, unlh->nlmsg_type, sizeof(*r),
236 nlmsg_flags);
237 if (!nlh)
238 return -EMSGSIZE;

--- 4 unchanged lines hidden (view full) ---

243 tmo = tw->tw_ttd - inet_tw_time_stamp();
244 if (tmo < 0)
245 tmo = 0;
246
247 r->idiag_family = tw->tw_family;
248 r->idiag_retrans = 0;
249
250 r->id.idiag_if = tw->tw_bound_dev_if;
250 sock_diag_save_cookie(tw, r->id.idiag_cookie);
251 sock_diag_save_cookie(sk, r->id.idiag_cookie);
251
252 r->id.idiag_sport = tw->tw_sport;
253 r->id.idiag_dport = tw->tw_dport;
254
255 memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));
256 memset(&r->id.idiag_dst, 0, sizeof(r->id.idiag_dst));
257
258 r->id.idiag_src[0] = tw->tw_rcv_saddr;

--- 19 unchanged lines hidden (view full) ---

278
279static int sk_diag_fill(struct sock *sk, struct sk_buff *skb,
280 const struct inet_diag_req_v2 *r,
281 struct user_namespace *user_ns,
282 u32 portid, u32 seq, u16 nlmsg_flags,
283 const struct nlmsghdr *unlh)
284{
285 if (sk->sk_state == TCP_TIME_WAIT)
252
253 r->id.idiag_sport = tw->tw_sport;
254 r->id.idiag_dport = tw->tw_dport;
255
256 memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));
257 memset(&r->id.idiag_dst, 0, sizeof(r->id.idiag_dst));
258
259 r->id.idiag_src[0] = tw->tw_rcv_saddr;

--- 19 unchanged lines hidden (view full) ---

279
280static int sk_diag_fill(struct sock *sk, struct sk_buff *skb,
281 const struct inet_diag_req_v2 *r,
282 struct user_namespace *user_ns,
283 u32 portid, u32 seq, u16 nlmsg_flags,
284 const struct nlmsghdr *unlh)
285{
286 if (sk->sk_state == TCP_TIME_WAIT)
286 return inet_twsk_diag_fill(inet_twsk(sk), skb, r, portid, seq,
287 return inet_twsk_diag_fill(sk, skb, r, portid, seq,
287 nlmsg_flags, unlh);
288
289 return inet_csk_diag_fill(sk, skb, r, user_ns, portid, seq,
290 nlmsg_flags, unlh);
291}
292
293int inet_diag_dump_one_icsk(struct inet_hashinfo *hashinfo,
294 struct sk_buff *in_skb,

--- 375 unchanged lines hidden (view full) ---

670 const struct inet_diag_req_v2 *r,
671 const struct nlattr *bc)
672{
673 twsk_build_assert();
674
675 if (!inet_diag_bc_sk(bc, sk))
676 return 0;
677
288 nlmsg_flags, unlh);
289
290 return inet_csk_diag_fill(sk, skb, r, user_ns, portid, seq,
291 nlmsg_flags, unlh);
292}
293
294int inet_diag_dump_one_icsk(struct inet_hashinfo *hashinfo,
295 struct sk_buff *in_skb,

--- 375 unchanged lines hidden (view full) ---

671 const struct inet_diag_req_v2 *r,
672 const struct nlattr *bc)
673{
674 twsk_build_assert();
675
676 if (!inet_diag_bc_sk(bc, sk))
677 return 0;
678
678 return inet_twsk_diag_fill(inet_twsk(sk), skb, r,
679 return inet_twsk_diag_fill(sk, skb, r,
679 NETLINK_CB(cb->skb).portid,
680 cb->nlh->nlmsg_seq, NLM_F_MULTI, cb->nlh);
681}
682
683/* Get the IPv4, IPv6, or IPv4-mapped-IPv6 local and remote addresses
684 * from a request_sock. For IPv4-mapped-IPv6 we must map IPv4 to IPv6.
685 */
686static void inet_diag_req_addrs(const struct sock *sk,

--- 42 unchanged lines hidden (view full) ---

729
730 r = nlmsg_data(nlh);
731 r->idiag_family = sk->sk_family;
732 r->idiag_state = TCP_SYN_RECV;
733 r->idiag_timer = 1;
734 r->idiag_retrans = req->num_retrans;
735
736 r->id.idiag_if = sk->sk_bound_dev_if;
680 NETLINK_CB(cb->skb).portid,
681 cb->nlh->nlmsg_seq, NLM_F_MULTI, cb->nlh);
682}
683
684/* Get the IPv4, IPv6, or IPv4-mapped-IPv6 local and remote addresses
685 * from a request_sock. For IPv4-mapped-IPv6 we must map IPv4 to IPv6.
686 */
687static void inet_diag_req_addrs(const struct sock *sk,

--- 42 unchanged lines hidden (view full) ---

730
731 r = nlmsg_data(nlh);
732 r->idiag_family = sk->sk_family;
733 r->idiag_state = TCP_SYN_RECV;
734 r->idiag_timer = 1;
735 r->idiag_retrans = req->num_retrans;
736
737 r->id.idiag_if = sk->sk_bound_dev_if;
737 sock_diag_save_cookie(req, r->id.idiag_cookie);
738
738
739 BUILD_BUG_ON(offsetof(struct inet_request_sock, ir_cookie) !=
740 offsetof(struct sock, sk_cookie));
741 sock_diag_save_cookie((struct sock *)ireq, r->id.idiag_cookie);
742
739 tmo = req->expires - jiffies;
740 if (tmo < 0)
741 tmo = 0;
742
743 r->id.idiag_sport = inet->inet_sport;
744 r->id.idiag_dport = ireq->ir_rmt_port;
745
746 memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));

--- 454 unchanged lines hidden ---
743 tmo = req->expires - jiffies;
744 if (tmo < 0)
745 tmo = 0;
746
747 r->id.idiag_sport = inet->inet_sport;
748 r->id.idiag_dport = ireq->ir_rmt_port;
749
750 memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));

--- 454 unchanged lines hidden ---