1*53ee8cc1Swenshuai.xi #ifndef _INET_DIAG_H_ 2*53ee8cc1Swenshuai.xi #define _INET_DIAG_H_ 1 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi /* Just some random number */ 5*53ee8cc1Swenshuai.xi #define TCPDIAG_GETSOCK 18 6*53ee8cc1Swenshuai.xi #define DCCPDIAG_GETSOCK 19 7*53ee8cc1Swenshuai.xi 8*53ee8cc1Swenshuai.xi #define INET_DIAG_GETSOCK_MAX 24 9*53ee8cc1Swenshuai.xi 10*53ee8cc1Swenshuai.xi /* Socket identity */ 11*53ee8cc1Swenshuai.xi struct inet_diag_sockid { 12*53ee8cc1Swenshuai.xi __be16 idiag_sport; 13*53ee8cc1Swenshuai.xi __be16 idiag_dport; 14*53ee8cc1Swenshuai.xi __be32 idiag_src[4]; 15*53ee8cc1Swenshuai.xi __be32 idiag_dst[4]; 16*53ee8cc1Swenshuai.xi __u32 idiag_if; 17*53ee8cc1Swenshuai.xi __u32 idiag_cookie[2]; 18*53ee8cc1Swenshuai.xi #define INET_DIAG_NOCOOKIE (~0U) 19*53ee8cc1Swenshuai.xi }; 20*53ee8cc1Swenshuai.xi 21*53ee8cc1Swenshuai.xi /* Request structure */ 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi struct inet_diag_req { 24*53ee8cc1Swenshuai.xi __u8 idiag_family; /* Family of addresses. */ 25*53ee8cc1Swenshuai.xi __u8 idiag_src_len; 26*53ee8cc1Swenshuai.xi __u8 idiag_dst_len; 27*53ee8cc1Swenshuai.xi __u8 idiag_ext; /* Query extended information */ 28*53ee8cc1Swenshuai.xi 29*53ee8cc1Swenshuai.xi struct inet_diag_sockid id; 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi __u32 idiag_states; /* States to dump */ 32*53ee8cc1Swenshuai.xi __u32 idiag_dbs; /* Tables to dump (NI) */ 33*53ee8cc1Swenshuai.xi }; 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi enum { 36*53ee8cc1Swenshuai.xi INET_DIAG_REQ_NONE, 37*53ee8cc1Swenshuai.xi INET_DIAG_REQ_BYTECODE, 38*53ee8cc1Swenshuai.xi }; 39*53ee8cc1Swenshuai.xi 40*53ee8cc1Swenshuai.xi #define INET_DIAG_REQ_MAX INET_DIAG_REQ_BYTECODE 41*53ee8cc1Swenshuai.xi 42*53ee8cc1Swenshuai.xi /* Bytecode is sequence of 4 byte commands followed by variable arguments. 43*53ee8cc1Swenshuai.xi * All the commands identified by "code" are conditional jumps forward: 44*53ee8cc1Swenshuai.xi * to offset cc+"yes" or to offset cc+"no". "yes" is supposed to be 45*53ee8cc1Swenshuai.xi * length of the command and its arguments. 46*53ee8cc1Swenshuai.xi */ 47*53ee8cc1Swenshuai.xi 48*53ee8cc1Swenshuai.xi struct inet_diag_bc_op { 49*53ee8cc1Swenshuai.xi unsigned char code; 50*53ee8cc1Swenshuai.xi unsigned char yes; 51*53ee8cc1Swenshuai.xi unsigned short no; 52*53ee8cc1Swenshuai.xi }; 53*53ee8cc1Swenshuai.xi 54*53ee8cc1Swenshuai.xi enum { 55*53ee8cc1Swenshuai.xi INET_DIAG_BC_NOP, 56*53ee8cc1Swenshuai.xi INET_DIAG_BC_JMP, 57*53ee8cc1Swenshuai.xi INET_DIAG_BC_S_GE, 58*53ee8cc1Swenshuai.xi INET_DIAG_BC_S_LE, 59*53ee8cc1Swenshuai.xi INET_DIAG_BC_D_GE, 60*53ee8cc1Swenshuai.xi INET_DIAG_BC_D_LE, 61*53ee8cc1Swenshuai.xi INET_DIAG_BC_AUTO, 62*53ee8cc1Swenshuai.xi INET_DIAG_BC_S_COND, 63*53ee8cc1Swenshuai.xi INET_DIAG_BC_D_COND, 64*53ee8cc1Swenshuai.xi }; 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xi struct inet_diag_hostcond { 67*53ee8cc1Swenshuai.xi __u8 family; 68*53ee8cc1Swenshuai.xi __u8 prefix_len; 69*53ee8cc1Swenshuai.xi int port; 70*53ee8cc1Swenshuai.xi __be32 addr[0]; 71*53ee8cc1Swenshuai.xi }; 72*53ee8cc1Swenshuai.xi 73*53ee8cc1Swenshuai.xi /* Base info structure. It contains socket identity (addrs/ports/cookie) 74*53ee8cc1Swenshuai.xi * and, alas, the information shown by netstat. */ 75*53ee8cc1Swenshuai.xi struct inet_diag_msg { 76*53ee8cc1Swenshuai.xi __u8 idiag_family; 77*53ee8cc1Swenshuai.xi __u8 idiag_state; 78*53ee8cc1Swenshuai.xi __u8 idiag_timer; 79*53ee8cc1Swenshuai.xi __u8 idiag_retrans; 80*53ee8cc1Swenshuai.xi 81*53ee8cc1Swenshuai.xi struct inet_diag_sockid id; 82*53ee8cc1Swenshuai.xi 83*53ee8cc1Swenshuai.xi __u32 idiag_expires; 84*53ee8cc1Swenshuai.xi __u32 idiag_rqueue; 85*53ee8cc1Swenshuai.xi __u32 idiag_wqueue; 86*53ee8cc1Swenshuai.xi __u32 idiag_uid; 87*53ee8cc1Swenshuai.xi __u32 idiag_inode; 88*53ee8cc1Swenshuai.xi }; 89*53ee8cc1Swenshuai.xi 90*53ee8cc1Swenshuai.xi /* Extensions */ 91*53ee8cc1Swenshuai.xi 92*53ee8cc1Swenshuai.xi enum { 93*53ee8cc1Swenshuai.xi INET_DIAG_NONE, 94*53ee8cc1Swenshuai.xi INET_DIAG_MEMINFO, 95*53ee8cc1Swenshuai.xi INET_DIAG_INFO, 96*53ee8cc1Swenshuai.xi INET_DIAG_VEGASINFO, 97*53ee8cc1Swenshuai.xi INET_DIAG_CONG, 98*53ee8cc1Swenshuai.xi }; 99*53ee8cc1Swenshuai.xi 100*53ee8cc1Swenshuai.xi #define INET_DIAG_MAX INET_DIAG_CONG 101*53ee8cc1Swenshuai.xi 102*53ee8cc1Swenshuai.xi 103*53ee8cc1Swenshuai.xi /* INET_DIAG_MEM */ 104*53ee8cc1Swenshuai.xi 105*53ee8cc1Swenshuai.xi struct inet_diag_meminfo { 106*53ee8cc1Swenshuai.xi __u32 idiag_rmem; 107*53ee8cc1Swenshuai.xi __u32 idiag_wmem; 108*53ee8cc1Swenshuai.xi __u32 idiag_fmem; 109*53ee8cc1Swenshuai.xi __u32 idiag_tmem; 110*53ee8cc1Swenshuai.xi }; 111*53ee8cc1Swenshuai.xi 112*53ee8cc1Swenshuai.xi /* INET_DIAG_VEGASINFO */ 113*53ee8cc1Swenshuai.xi 114*53ee8cc1Swenshuai.xi struct tcpvegas_info { 115*53ee8cc1Swenshuai.xi __u32 tcpv_enabled; 116*53ee8cc1Swenshuai.xi __u32 tcpv_rttcnt; 117*53ee8cc1Swenshuai.xi __u32 tcpv_rtt; 118*53ee8cc1Swenshuai.xi __u32 tcpv_minrtt; 119*53ee8cc1Swenshuai.xi }; 120*53ee8cc1Swenshuai.xi 121*53ee8cc1Swenshuai.xi 122*53ee8cc1Swenshuai.xi #endif /* _INET_DIAG_H_ */ 123