]>
git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - include/linux/inet_diag.h
1 /* SPDX-License-Identifier: GPL-2.0 */
3 #define _INET_DIAG_H_ 1
5 #include <net/netlink.h>
6 #include <uapi/linux/inet_diag.h>
10 struct inet_diag_handler
{
11 void (*dump
)(struct sk_buff
*skb
,
12 struct netlink_callback
*cb
,
13 const struct inet_diag_req_v2
*r
);
15 int (*dump_one
)(struct netlink_callback
*cb
,
16 const struct inet_diag_req_v2
*req
);
18 void (*idiag_get_info
)(struct sock
*sk
,
19 struct inet_diag_msg
*r
,
22 int (*idiag_get_aux
)(struct sock
*sk
,
26 size_t (*idiag_get_aux_size
)(struct sock
*sk
,
29 int (*destroy
)(struct sk_buff
*in_skb
,
30 const struct inet_diag_req_v2
*req
);
33 __u16 idiag_info_size
;
36 struct bpf_sk_storage_diag
;
37 struct inet_diag_dump_data
{
38 struct nlattr
*req_nlas
[__INET_DIAG_REQ_MAX
];
39 #define inet_diag_nla_bc req_nlas[INET_DIAG_REQ_BYTECODE]
40 #define inet_diag_nla_bpf_stgs req_nlas[INET_DIAG_REQ_SK_BPF_STORAGES]
42 struct bpf_sk_storage_diag
*bpf_stg_diag
;
45 struct inet_connection_sock
;
46 int inet_sk_diag_fill(struct sock
*sk
, struct inet_connection_sock
*icsk
,
47 struct sk_buff
*skb
, struct netlink_callback
*cb
,
48 const struct inet_diag_req_v2
*req
,
49 u16 nlmsg_flags
, bool net_admin
);
50 void inet_diag_dump_icsk(struct inet_hashinfo
*h
, struct sk_buff
*skb
,
51 struct netlink_callback
*cb
,
52 const struct inet_diag_req_v2
*r
);
53 int inet_diag_dump_one_icsk(struct inet_hashinfo
*hashinfo
,
54 struct netlink_callback
*cb
,
55 const struct inet_diag_req_v2
*req
);
57 struct sock
*inet_diag_find_one_icsk(struct net
*net
,
58 struct inet_hashinfo
*hashinfo
,
59 const struct inet_diag_req_v2
*req
);
61 int inet_diag_bc_sk(const struct nlattr
*_bc
, struct sock
*sk
);
63 void inet_diag_msg_common_fill(struct inet_diag_msg
*r
, struct sock
*sk
);
65 static inline size_t inet_diag_msg_attrs_size(void)
67 return nla_total_size(1) /* INET_DIAG_SHUTDOWN */
68 + nla_total_size(1) /* INET_DIAG_TOS */
69 #if IS_ENABLED(CONFIG_IPV6)
70 + nla_total_size(1) /* INET_DIAG_TCLASS */
71 + nla_total_size(1) /* INET_DIAG_SKV6ONLY */
73 + nla_total_size(4) /* INET_DIAG_MARK */
74 + nla_total_size(4) /* INET_DIAG_CLASS_ID */
75 #ifdef CONFIG_SOCK_CGROUP_DATA
76 + nla_total_size_64bit(sizeof(u64
)) /* INET_DIAG_CGROUP_ID */
78 + nla_total_size(sizeof(struct inet_diag_sockopt
))
79 /* INET_DIAG_SOCKOPT */
82 int inet_diag_msg_attrs_fill(struct sock
*sk
, struct sk_buff
*skb
,
83 struct inet_diag_msg
*r
, int ext
,
84 struct user_namespace
*user_ns
, bool net_admin
);
86 extern int inet_diag_register(const struct inet_diag_handler
*handler
);
87 extern void inet_diag_unregister(const struct inet_diag_handler
*handler
);
88 #endif /* _INET_DIAG_H_ */