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