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