• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: LGPL-2.1-only */
2 /*
3  * Copyright (c) 2013 Sassano Systems LLC <joe@sassanosystems.com>
4  */
5 
6 #ifndef NETLINK_IDIAGNL_H_
7 #define NETLINK_IDIAGNL_H_
8 
9 #include <netlink/netlink.h>
10 #include <linux/sock_diag.h>
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /*************************************************************
17  * The following part contains DEPRECATED names and defines.
18  * Don't use them.
19  *************************************************************/
20 
21 /**
22  * Inet Diag message types
23  *
24  * deprecated: use TCPDIAG_GETSOCK, DCCPDIAG_GETSOCK and
25  * INET_DIAG_GETSOCK_MAX from linux/inet_diag.h
26  */
27 #define IDIAG_TCPDIAG_GETSOCK	18
28 #define IDIAG_DCCPDIAG_GETSOCK	19
29 #define IDIAG_GETSOCK_MAX	24
30 
31 /**
32  * Socket state identifiers
33  * @ingroup idiag
34  * @deprecated: use instead the TCP_* defines from netinet/tcp.h.
35  */
36 enum {
37 	IDIAG_SS_UNKNOWN           = 0,
38 
39 	IDIAG_SS_ESTABLISHED       = 1,  /* TCP_ESTABLISHED */
40 	IDIAG_SS_SYN_SENT          = 2,  /* TCP_SYN_SENT */
41 	IDIAG_SS_SYN_RECV          = 3,  /* TCP_SYN_RECV */
42 	IDIAG_SS_FIN_WAIT1         = 4,  /* TCP_FIN_WAIT1 */
43 	IDIAG_SS_FIN_WAIT2         = 5,  /* TCP_FIN_WAIT2 */
44 	IDIAG_SS_TIME_WAIT         = 6,  /* TCP_TIME_WAIT */
45 	IDIAG_SS_CLOSE             = 7,  /* TCP_CLOSE */
46 	IDIAG_SS_CLOSE_WAIT        = 8,  /* TCP_CLOSE_WAIT */
47 	IDIAG_SS_LAST_ACK          = 9,  /* TCP_LAST_ACK */
48 	IDIAG_SS_LISTEN            = 10, /* TCP_LISTEN */
49 	IDIAG_SS_CLOSING           = 11, /* TCP_CLOSING */
50 
51 	IDIAG_SS_MAX               = 12,
52 };
53 
54 /**
55  * Macro to represent all socket states.
56  * @ingroup idiag
57  * @deprecated
58  */
59 #define IDIAG_SS_ALL  IDIAGNL_SS_ALL
60 
61 
62 /**
63  * Inet Diag extended attributes
64  * @ingroup idiag
65  * @deprecated These attributes should not be used. They mirror the
66  * INET_DIAG_* extension flags from kernel headers. Use those instead. */
67 enum {
68 	IDIAG_ATTR_NONE         = 0, /* INET_DIAG_NONE */
69 	IDIAG_ATTR_MEMINFO      = 1, /* INET_DIAG_MEMINFO */
70 	IDIAG_ATTR_INFO         = 2, /* INET_DIAG_INFO */
71 	IDIAG_ATTR_VEGASINFO    = 3, /* INET_DIAG_VEGASINFO */
72 	IDIAG_ATTR_CONG         = 4, /* INET_DIAG_CONG */
73 	IDIAG_ATTR_TOS          = 5, /* INET_DIAG_TOS */
74 	IDIAG_ATTR_TCLASS       = 6, /* INET_DIAG_TCLASS */
75 	IDIAG_ATTR_SKMEMINFO    = 7, /* INET_DIAG_SKMEMINFO */
76 	IDIAG_ATTR_SHUTDOWN     = 8, /* INET_DIAG_SHUTDOWN */
77 
78 	/* IDIAG_ATTR_MAX was wrong, because it did not correspond to
79 	 * INET_DIAG_MAX. Anyway, freeze it to the previous value. */
80 	IDIAG_ATTR_MAX          = 9,
81 
82 	IDIAG_ATTR_ALL          = (1<<IDIAG_ATTR_MAX) - 1,
83 };
84 
85 
86 /* deprectated keep these only for compatibility, DO NOT USE THEM */
87 #define IDIAG_SK_MEMINFO_RMEM_ALLOC                      0  /* SK_MEMINFO_RMEM_ALLOC */
88 #define IDIAG_SK_MEMINFO_RCVBUF                          1  /* SK_MEMINFO_RCVBUF */
89 #define IDIAG_SK_MEMINFO_WMEM_ALLOC                      2  /* SK_MEMINFO_WMEM_ALLOC */
90 #define IDIAG_SK_MEMINFO_SNDBUF                          3  /* SK_MEMINFO_SNDBUF */
91 #define IDIAG_SK_MEMINFO_FWD_ALLOC                       4  /* SK_MEMINFO_FWD_ALLOC */
92 #define IDIAG_SK_MEMINFO_WMEM_QUEUED                     5  /* SK_MEMINFO_WMEM_QUEUED */
93 #define IDIAG_SK_MEMINFO_OPTMEM                          6  /* SK_MEMINFO_OPTMEM */
94 #define IDIAG_SK_MEMINFO_BACKLOG                         7  /* SK_MEMINFO_BACKLOG */
95 #define IDIAG_SK_MEMINFO_VARS              SK_MEMINFO_VARS
96 
97 /* deprecated names. */
98 #define IDIAG_TIMER_OFF                 IDIAGNL_TIMER_OFF
99 #define IDIAG_TIMER_ON                  IDIAGNL_TIMER_ON
100 #define IDIAG_TIMER_KEEPALIVE           IDIAGNL_TIMER_KEEPALIVE
101 #define IDIAG_TIMER_TIMEWAIT            IDIAGNL_TIMER_TIMEWAIT
102 #define IDIAG_TIMER_PERSIST             IDIAGNL_TIMER_PERSIST
103 #define IDIAG_TIMER_UNKNOWN             IDIAGNL_TIMER_UNKNOWN
104 
105 /*************************************************************/
106 
107 /**
108  * Macro to represent all socket states.
109  * @ingroup idiag
110  */
111 #define IDIAGNL_SS_ALL (((1<<12)-1))
112 
113 /**
114  * Socket timer indentifiers
115  * @ingroupd idiag
116  */
117 enum {
118 	IDIAGNL_TIMER_OFF               = 0,
119 	IDIAGNL_TIMER_ON                = 1,
120 	IDIAGNL_TIMER_KEEPALIVE         = 2,
121 	IDIAGNL_TIMER_TIMEWAIT          = 3,
122 	IDIAGNL_TIMER_PERSIST           = 4,
123 	IDIAGNL_TIMER_UNKNOWN           = 5,
124 };
125 
126 extern char *	idiagnl_state2str(int, char *, size_t);
127 extern int	idiagnl_str2state(const char *);
128 
129 extern int	idiagnl_connect(struct nl_sock *);
130 extern int	idiagnl_send_simple(struct nl_sock *, int, uint8_t, uint16_t,
131                                     uint16_t);
132 
133 extern char *		idiagnl_timer2str(int, char *, size_t);
134 extern int		idiagnl_str2timer(const char *);
135 extern char *		idiagnl_attrs2str(int, char *, size_t);
136 extern char *		idiagnl_tcpstate2str(uint8_t, char *, size_t);
137 extern char *		idiagnl_tcpopts2str(uint8_t, char *, size_t);
138 extern char *		idiagnl_shutdown2str(uint8_t, char *, size_t);
139 extern char *		idiagnl_exts2str(uint8_t, char *, size_t);
140 
141 #ifdef __cplusplus
142 }
143 #endif /* __cplusplus */
144 
145 #endif /* NETLINK_IDIAGNL_H_ */
146