@@ -27,6 +27,7 @@
#include <getopt.h>
#include <stdbool.h>
+#include "ss_types.h"
#include "utils.h"
#include "rt_names.h"
#include "ll_map.h"
@@ -113,55 +114,17 @@ static const char *UDP_PROTO = "udp";
static const char *RAW_PROTO = "raw";
static const char *dg_proto = NULL;
-enum
-{
- TCP_DB,
- DCCP_DB,
- UDP_DB,
- RAW_DB,
- UNIX_DG_DB,
- UNIX_ST_DB,
- UNIX_SQ_DB,
- PACKET_DG_DB,
- PACKET_R_DB,
- NETLINK_DB,
- MAX_DB
-};
#define PACKET_DBM ((1<<PACKET_DG_DB)|(1<<PACKET_R_DB))
#define UNIX_DBM ((1<<UNIX_DG_DB)|(1<<UNIX_ST_DB)|(1<<UNIX_SQ_DB))
#define ALL_DB ((1<<MAX_DB)-1)
#define INET_DBM ((1<<TCP_DB)|(1<<UDP_DB)|(1<<DCCP_DB)|(1<<RAW_DB))
-enum {
- SS_UNKNOWN,
- SS_ESTABLISHED,
- SS_SYN_SENT,
- SS_SYN_RECV,
- SS_FIN_WAIT1,
- SS_FIN_WAIT2,
- SS_TIME_WAIT,
- SS_CLOSE,
- SS_CLOSE_WAIT,
- SS_LAST_ACK,
- SS_LISTEN,
- SS_CLOSING,
- SS_MAX
-};
-
#define SS_ALL ((1 << SS_MAX) - 1)
#define SS_CONN (SS_ALL & ~((1<<SS_LISTEN)|(1<<SS_CLOSE)|(1<<SS_TIME_WAIT)|(1<<SS_SYN_RECV)))
#include "ssfilter.h"
-struct filter
-{
- int dbs;
- int states;
- int families;
- struct ssfilter *f;
-};
-
static const struct filter default_dbs[MAX_DB] = {
[TCP_DB] = {
.states = SS_CONN,
@@ -376,16 +339,6 @@ static FILE *ephemeral_ports_open(void)
return generic_proc_open("PROC_IP_LOCAL_PORT_RANGE", "sys/net/ipv4/ip_local_port_range");
}
-struct user_ent {
- struct user_ent *next;
- unsigned int ino;
- int pid;
- int fd;
- char *process;
- char *process_ctx;
- char *socket_ctx;
-};
-
#define USER_ENT_HASH_SIZE 256
struct user_ent *user_ent_hash[USER_ENT_HASH_SIZE];
@@ -538,12 +491,6 @@ static void user_ent_hash_build(void)
closedir(dir);
}
-enum entry_types {
- USERS,
- PROC_CTX,
- PROC_SOCK_CTX
-};
-
#define ENTRY_BUF_SIZE 512
static int find_entry(unsigned ino, char **buf, int type)
{
@@ -616,17 +563,6 @@ next:
return cnt;
}
-/* Get stats from slab */
-
-struct slabstat
-{
- int socks;
- int tcp_ports;
- int tcp_tws;
- int tcp_syns;
- int skbs;
-};
-
static struct slabstat slabstat;
static const char *slabstat_ids[] =
@@ -711,75 +647,6 @@ static const char *sstate_namel[] = {
[SS_CLOSING] = "closing",
};
-struct sockstat
-{
- struct sockstat *next;
- unsigned int type;
- uint16_t prot;
- inet_prefix local;
- inet_prefix remote;
- int lport;
- int rport;
- int state;
- int rq, wq;
- unsigned ino;
- unsigned uid;
- int refcnt;
- unsigned int iface;
- unsigned long long sk;
- char *name;
- char *peer_name;
-};
-
-struct dctcpstat
-{
- unsigned int ce_state;
- unsigned int alpha;
- unsigned int ab_ecn;
- unsigned int ab_tot;
- bool enabled;
-};
-
-struct tcpstat
-{
- struct sockstat ss;
- int timer;
- int timeout;
- int probes;
- char cong_alg[16];
- double rto, ato, rtt, rttvar;
- int qack, cwnd, ssthresh, backoff;
- double send_bps;
- int snd_wscale;
- int rcv_wscale;
- int mss;
- unsigned int lastsnd;
- unsigned int lastrcv;
- unsigned int lastack;
- double pacing_rate;
- double pacing_rate_max;
- unsigned long long bytes_acked;
- unsigned long long bytes_received;
- unsigned int segs_out;
- unsigned int segs_in;
- unsigned int unacked;
- unsigned int retrans;
- unsigned int retrans_total;
- unsigned int lost;
- unsigned int sacked;
- unsigned int fackets;
- unsigned int reordering;
- double rcv_rtt;
- int rcv_space;
- bool has_ts_opt;
- bool has_sack_opt;
- bool has_ecn_opt;
- bool has_ecnseen_opt;
- bool has_fastopen_opt;
- bool has_wscale_opt;
- struct dctcpstat *dctcp;
-};
-
static void sock_state_print(struct sockstat *s, const char *sock_name)
{
if (netid_width)
@@ -853,13 +720,6 @@ static const char *print_ms_timer(int timeout)
return buf;
}
-struct scache {
- struct scache *next;
- int port;
- char *name;
- const char *proto;
-};
-
struct scache *rlist;
static void init_service_resolver(void)
@@ -1024,13 +884,6 @@ static void inet_addr_print(const inet_prefix *a, int port, unsigned int ifindex
ifname);
}
-struct aafilter
-{
- inet_prefix addr;
- int port;
- struct aafilter *next;
-};
-
static int inet2_addr_match(const inet_prefix *a, const inet_prefix *p,
int plen)
{
@@ -2186,11 +2039,6 @@ static int sockdiag_send(int family, int fd, int protocol, struct filter *f)
return 0;
}
-struct inet_diag_arg {
- struct filter *f;
- int protocol;
-};
-
static int show_one_inet_sock(const struct sockaddr_nl *addr,
struct nlmsghdr *h, void *arg)
{
@@ -3218,10 +3066,6 @@ static int netlink_show(struct filter *f)
return 0;
}
-struct sock_diag_msg {
- __u8 sdiag_family;
-};
-
static int generic_show_sock(const struct sockaddr_nl *addr,
struct nlmsghdr *nlh, void *arg)
{
@@ -3276,11 +3120,6 @@ Exit:
return ret;
}
-struct snmpstat
-{
- int tcp_estab;
-};
-
static int get_snmp_int(char *proto, char *key, int *result)
{
char buf[1024];
@@ -3325,28 +3164,6 @@ static int get_snmp_int(char *proto, char *key, int *result)
return -1;
}
-
-/* Get stats from sockstat */
-
-struct ssummary
-{
- int socks;
- int tcp_mem;
- int tcp_total;
- int tcp_orphans;
- int tcp_tws;
- int tcp4_hashed;
- int udp4;
- int raw4;
- int frag4;
- int frag4_mem;
- int tcp6_hashed;
- int udp6;
- int raw6;
- int frag6;
- int frag6_mem;
-};
-
static void get_sockstat_line(char *line, struct ssummary *s)
{
char id[256], rem[256];
@@ -3811,7 +3628,6 @@ int main(int argc, char *argv[])
(current_filter.dbs&(UNIX_DBM|(1<<TCP_DB)|(1<<UDP_DB)|(1<<DCCP_DB))))
init_service_resolver();
-
if (current_filter.dbs == 0) {
fprintf(stderr, "ss: no socket tables to show with such filter.\n");
exit(0);
new file mode 100644
@@ -0,0 +1,186 @@
+#ifndef SS_STRUCTS_H
+#define SS_STRUCTS_H
+
+#include <stdbool.h>
+#include <stdint.h>
+#include "utils.h"
+
+enum {
+ TCP_DB,
+ DCCP_DB,
+ UDP_DB,
+ RAW_DB,
+ UNIX_DG_DB,
+ UNIX_ST_DB,
+ UNIX_SQ_DB,
+ PACKET_DG_DB,
+ PACKET_R_DB,
+ NETLINK_DB,
+ MAX_DB
+};
+
+enum {
+ SS_UNKNOWN,
+ SS_ESTABLISHED,
+ SS_SYN_SENT,
+ SS_SYN_RECV,
+ SS_FIN_WAIT1,
+ SS_FIN_WAIT2,
+ SS_TIME_WAIT,
+ SS_CLOSE,
+ SS_CLOSE_WAIT,
+ SS_LAST_ACK,
+ SS_LISTEN,
+ SS_CLOSING,
+ SS_MAX
+};
+
+struct filter {
+ int dbs;
+ int states;
+ int families;
+ struct ssfilter *f;
+};
+
+struct user_ent {
+ struct user_ent *next;
+ unsigned int ino;
+ int pid;
+ int fd;
+ char *process;
+ char *process_ctx;
+ char *socket_ctx;
+};
+
+/* Get stats from slab */
+
+struct slabstat {
+ int socks;
+ int tcp_ports;
+ int tcp_tws;
+ int tcp_syns;
+ int skbs;
+};
+
+struct sockstat {
+ struct sockstat *next;
+ unsigned int type;
+ uint16_t prot;
+ inet_prefix local;
+ inet_prefix remote;
+ int lport;
+ int rport;
+ int state;
+ int rq, wq;
+ unsigned ino;
+ unsigned uid;
+ int refcnt;
+ unsigned int iface;
+ unsigned long long sk;
+ char *name;
+ char *peer_name;
+};
+
+struct dctcpstat {
+ unsigned int ce_state;
+ unsigned int alpha;
+ unsigned int ab_ecn;
+ unsigned int ab_tot;
+ bool enabled;
+};
+
+#pragma pack(push, 1)
+
+struct tcpstat {
+ struct sockstat ss;
+ int timer;
+ int timeout;
+ int probes;
+ char cong_alg[16];
+ double rto, ato, rtt, rttvar;
+ int qack, cwnd, ssthresh, backoff;
+ double send_bps;
+ int snd_wscale;
+ int rcv_wscale;
+ int mss;
+ unsigned int lastsnd;
+ unsigned int lastrcv;
+ unsigned int lastack;
+ double pacing_rate;
+ double pacing_rate_max;
+ unsigned long long bytes_acked;
+ unsigned long long bytes_received;
+ unsigned int segs_out;
+ unsigned int segs_in;
+ unsigned int unacked;
+ unsigned int retrans;
+ unsigned int retrans_total;
+ unsigned int lost;
+ unsigned int sacked;
+ unsigned int fackets;
+ unsigned int reordering;
+ bool has_ts_opt;
+ bool has_sack_opt;
+ bool has_ecn_opt;
+ bool has_ecnseen_opt;
+ bool has_fastopen_opt;
+ bool has_wscale_opt;
+ struct dctcpstat *dctcp;
+ double rcv_rtt;
+ int rcv_space;
+};
+
+#pragma pack(pop)
+
+struct scache {
+ struct scache *next;
+ int port;
+ char *name;
+ const char *proto;
+};
+
+struct aafilter {
+ inet_prefix addr;
+ int port;
+ struct aafilter *next;
+};
+
+struct snmpstat {
+ int tcp_estab;
+};
+
+struct sock_diag_msg {
+ __u8 sdiag_family;
+};
+
+struct inet_diag_arg {
+ struct filter *f;
+ int protocol;
+};
+
+/* Get stats from sockstat */
+
+struct ssummary {
+ int socks;
+ int tcp_mem;
+ int tcp_total;
+ int tcp_orphans;
+ int tcp_tws;
+ int tcp4_hashed;
+ int udp4;
+ int raw4;
+ int frag4;
+ int frag4_mem;
+ int tcp6_hashed;
+ int udp6;
+ int raw6;
+ int frag6;
+ int frag6_mem;
+};
+
+enum entry_types {
+ USERS,
+ PROC_CTX,
+ PROC_SOCK_CTX
+};
+#endif /* SS_STRUCTS_H */
The prospected output formatters and ss do share type declarations like slabstat or tcpstat so that the decision has been made to centralize those declarations in ss_types.h. Potential future declarations shall be placed there. The latter should help amend the extent of ss.c as well. Signed-off-by: Matthias Tafelmeier <matthias.tafelmeier@gmx.net> Suggested-by: Hagen Paul Pfeifer <hagen@jauu.net> --- misc/ss.c | 186 +------------------------------------------------------- misc/ss_types.h | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 187 insertions(+), 185 deletions(-) create mode 100644 misc/ss_types.h