mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-18 04:27:17 +07:00
35ac838a9b
This get_info handler will simply dispatch to the appropriate existing inet protocol handler. This patch also includes a new netlink attribute (INET_DIAG_PROTOCOL). This attribute is currently only used for multicast messages. Without this attribute, there is no way of knowing the IP protocol used by the socket information being broadcast. This attribute is not necessary in the 'dump' variant of this protocol (though it could easily be added) because dump requests are issued for specific family/protocol pairs. Tested: ss -E (note, the -E option has not yet been merged into the upstream version of ss). Signed-off-by: Craig Gallek <kraig@google.com> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
152 lines
2.8 KiB
C
152 lines
2.8 KiB
C
#ifndef _UAPI_INET_DIAG_H_
|
|
#define _UAPI_INET_DIAG_H_
|
|
|
|
#include <linux/types.h>
|
|
|
|
/* Just some random number */
|
|
#define TCPDIAG_GETSOCK 18
|
|
#define DCCPDIAG_GETSOCK 19
|
|
|
|
#define INET_DIAG_GETSOCK_MAX 24
|
|
|
|
/* Socket identity */
|
|
struct inet_diag_sockid {
|
|
__be16 idiag_sport;
|
|
__be16 idiag_dport;
|
|
__be32 idiag_src[4];
|
|
__be32 idiag_dst[4];
|
|
__u32 idiag_if;
|
|
__u32 idiag_cookie[2];
|
|
#define INET_DIAG_NOCOOKIE (~0U)
|
|
};
|
|
|
|
/* Request structure */
|
|
|
|
struct inet_diag_req {
|
|
__u8 idiag_family; /* Family of addresses. */
|
|
__u8 idiag_src_len;
|
|
__u8 idiag_dst_len;
|
|
__u8 idiag_ext; /* Query extended information */
|
|
|
|
struct inet_diag_sockid id;
|
|
|
|
__u32 idiag_states; /* States to dump */
|
|
__u32 idiag_dbs; /* Tables to dump (NI) */
|
|
};
|
|
|
|
struct inet_diag_req_v2 {
|
|
__u8 sdiag_family;
|
|
__u8 sdiag_protocol;
|
|
__u8 idiag_ext;
|
|
__u8 pad;
|
|
__u32 idiag_states;
|
|
struct inet_diag_sockid id;
|
|
};
|
|
|
|
enum {
|
|
INET_DIAG_REQ_NONE,
|
|
INET_DIAG_REQ_BYTECODE,
|
|
};
|
|
|
|
#define INET_DIAG_REQ_MAX INET_DIAG_REQ_BYTECODE
|
|
|
|
/* Bytecode is sequence of 4 byte commands followed by variable arguments.
|
|
* All the commands identified by "code" are conditional jumps forward:
|
|
* to offset cc+"yes" or to offset cc+"no". "yes" is supposed to be
|
|
* length of the command and its arguments.
|
|
*/
|
|
|
|
struct inet_diag_bc_op {
|
|
unsigned char code;
|
|
unsigned char yes;
|
|
unsigned short no;
|
|
};
|
|
|
|
enum {
|
|
INET_DIAG_BC_NOP,
|
|
INET_DIAG_BC_JMP,
|
|
INET_DIAG_BC_S_GE,
|
|
INET_DIAG_BC_S_LE,
|
|
INET_DIAG_BC_D_GE,
|
|
INET_DIAG_BC_D_LE,
|
|
INET_DIAG_BC_AUTO,
|
|
INET_DIAG_BC_S_COND,
|
|
INET_DIAG_BC_D_COND,
|
|
};
|
|
|
|
struct inet_diag_hostcond {
|
|
__u8 family;
|
|
__u8 prefix_len;
|
|
int port;
|
|
__be32 addr[0];
|
|
};
|
|
|
|
/* Base info structure. It contains socket identity (addrs/ports/cookie)
|
|
* and, alas, the information shown by netstat. */
|
|
struct inet_diag_msg {
|
|
__u8 idiag_family;
|
|
__u8 idiag_state;
|
|
__u8 idiag_timer;
|
|
__u8 idiag_retrans;
|
|
|
|
struct inet_diag_sockid id;
|
|
|
|
__u32 idiag_expires;
|
|
__u32 idiag_rqueue;
|
|
__u32 idiag_wqueue;
|
|
__u32 idiag_uid;
|
|
__u32 idiag_inode;
|
|
};
|
|
|
|
/* Extensions */
|
|
|
|
enum {
|
|
INET_DIAG_NONE,
|
|
INET_DIAG_MEMINFO,
|
|
INET_DIAG_INFO,
|
|
INET_DIAG_VEGASINFO,
|
|
INET_DIAG_CONG,
|
|
INET_DIAG_TOS,
|
|
INET_DIAG_TCLASS,
|
|
INET_DIAG_SKMEMINFO,
|
|
INET_DIAG_SHUTDOWN,
|
|
INET_DIAG_DCTCPINFO,
|
|
INET_DIAG_PROTOCOL, /* response attribute only */
|
|
};
|
|
|
|
#define INET_DIAG_MAX INET_DIAG_PROTOCOL
|
|
|
|
/* INET_DIAG_MEM */
|
|
|
|
struct inet_diag_meminfo {
|
|
__u32 idiag_rmem;
|
|
__u32 idiag_wmem;
|
|
__u32 idiag_fmem;
|
|
__u32 idiag_tmem;
|
|
};
|
|
|
|
/* INET_DIAG_VEGASINFO */
|
|
|
|
struct tcpvegas_info {
|
|
__u32 tcpv_enabled;
|
|
__u32 tcpv_rttcnt;
|
|
__u32 tcpv_rtt;
|
|
__u32 tcpv_minrtt;
|
|
};
|
|
|
|
/* INET_DIAG_DCTCPINFO */
|
|
|
|
struct tcp_dctcp_info {
|
|
__u16 dctcp_enabled;
|
|
__u16 dctcp_ce_state;
|
|
__u32 dctcp_alpha;
|
|
__u32 dctcp_ab_ecn;
|
|
__u32 dctcp_ab_tot;
|
|
};
|
|
|
|
union tcp_cc_info {
|
|
struct tcpvegas_info vegas;
|
|
struct tcp_dctcp_info dctcp;
|
|
};
|
|
#endif /* _UAPI_INET_DIAG_H_ */
|