Home | History | Annotate | Download | only in idiag
      1 /*
      2  * netlink/idiag/idiagnl.h		Inetdiag Netlink
      3  *
      4  *	This library is free software; you can redistribute it and/or
      5  *	modify it under the terms of the GNU Lesser General Public
      6  *	License as published by the Free Software Foundation version 2.1
      7  *	of the License.
      8  *
      9  * Copyright (c) 2013 Sassano Systems LLC <joe (at) sassanosystems.com>
     10  */
     11 
     12 #ifndef NETLINK_IDIAGNL_H_
     13 #define NETLINK_IDIAGNL_H_
     14 
     15 #include <netlink/netlink.h>
     16 
     17 #ifdef __cplusplus
     18 extern "C" {
     19 #endif
     20 
     21 /**
     22  * Inet Diag message types
     23  */
     24 #define IDIAG_TCPDIAG_GETSOCK	18
     25 #define IDIAG_DCCPDIAG_GETSOCK	19
     26 #define IDIAG_GETSOCK_MAX	24
     27 
     28 /**
     29  * Socket state identifiers
     30  * @ingroup idiag
     31  */
     32 enum {
     33 	IDIAG_SS_UNKNOWN,
     34 	IDIAG_SS_ESTABLISHED,
     35 	IDIAG_SS_SYN_SENT,
     36 	IDIAG_SS_SYN_RECV,
     37 	IDIAG_SS_FIN_WAIT1,
     38 	IDIAG_SS_FIN_WAIT2,
     39 	IDIAG_SS_TIME_WAIT,
     40 	IDIAG_SS_CLOSE,
     41 	IDIAG_SS_CLOSE_WAIT,
     42 	IDIAG_SS_LAST_ACK,
     43 	IDIAG_SS_LISTEN,
     44 	IDIAG_SS_CLOSING,
     45 	IDIAG_SS_MAX
     46 };
     47 
     48 /**
     49  * Macro to represent all socket states.
     50  * @ingroup idiag
     51  */
     52 #define IDIAG_SS_ALL ((1<<IDIAG_SS_MAX)-1)
     53 
     54 /**
     55  * Inet Diag extended attributes
     56  * @ingroup idiag
     57  */
     58 enum {
     59 	IDIAG_ATTR_NONE,
     60 	IDIAG_ATTR_MEMINFO,
     61 	IDIAG_ATTR_INFO,
     62 	IDIAG_ATTR_VEGASINFO,
     63 	IDIAG_ATTR_CONG,
     64 	IDIAG_ATTR_TOS,
     65 	IDIAG_ATTR_TCLASS,
     66 	IDIAG_ATTR_SKMEMINFO,
     67 	IDIAG_ATTR_SHUTDOWN,
     68 	IDIAG_ATTR_MAX,
     69 };
     70 
     71 /**
     72  * Macro to represent all socket attributes.
     73  * @ingroup idiag
     74  */
     75 #define IDIAG_ATTR_ALL ((1<<IDIAG_ATTR_MAX)-1)
     76 
     77 /**
     78  * Socket memory info identifiers
     79  * @ingroup idiag
     80  */
     81 enum {
     82 	IDIAG_SK_MEMINFO_RMEM_ALLOC,
     83 	IDIAG_SK_MEMINFO_RCVBUF,
     84 	IDIAG_SK_MEMINFO_WMEM_ALLOC,
     85 	IDIAG_SK_MEMINFO_SNDBUF,
     86 	IDIAG_SK_MEMINFO_FWD_ALLOC,
     87 	IDIAG_SK_MEMINFO_WMEM_QUEUED,
     88 	IDIAG_SK_MEMINFO_OPTMEM,
     89 	IDIAG_SK_MEMINFO_BACKLOG,
     90 
     91 	IDIAG_SK_MEMINFO_VARS,
     92 };
     93 
     94 /**
     95  * Socket timer indentifiers
     96  * @ingroupd idiag
     97  */
     98 enum {
     99 	IDIAG_TIMER_OFF,
    100 	IDIAG_TIMER_ON,
    101 	IDIAG_TIMER_KEEPALIVE,
    102 	IDIAG_TIMER_TIMEWAIT,
    103 	IDIAG_TIMER_PERSIST,
    104 	IDIAG_TIMER_UNKNOWN,
    105 };
    106 
    107 extern char *	idiagnl_state2str(int, char *, size_t);
    108 extern int	idiagnl_str2state(const char *);
    109 
    110 extern int	idiagnl_connect(struct nl_sock *);
    111 extern int	idiagnl_send_simple(struct nl_sock *, int, uint8_t, uint16_t,
    112                                     uint16_t);
    113 
    114 extern char *		idiagnl_timer2str(int, char *, size_t);
    115 extern int		idiagnl_str2timer(const char *);
    116 extern char *		idiagnl_attrs2str(int, char *, size_t);
    117 extern char *		idiagnl_tcpstate2str(uint8_t, char *, size_t);
    118 extern char *		idiagnl_tcpopts2str(uint8_t, char *, size_t);
    119 extern char *		idiagnl_shutdown2str(uint8_t, char *, size_t);
    120 extern char *		idiagnl_exts2str(uint8_t, char *, size_t);
    121 
    122 #ifdef __cplusplus
    123 }
    124 #endif /* __cplusplus */
    125 
    126 #endif /* NETLINK_IDIAGNL_H_ */
    127