nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* |
2 | * src/nf-ct-list.c List Conntrack Entries |
||
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) 2003-2009 Thomas Graf <tgraf@suug.ch> |
||
10 | * Copyright (c) 2007 Philip Craig <philipc@snapgear.com> |
||
11 | * Copyright (c) 2007 Secure Computing Corporation |
||
12 | */ |
||
13 | |||
14 | #include <netlink/cli/utils.h> |
||
15 | #include <netlink/cli/ct.h> |
||
16 | |||
17 | static void print_usage(void) |
||
18 | { |
||
19 | printf( |
||
20 | "Usage: nf-ct-list [OPTION]... [CONNTRACK ENTRY]\n" |
||
21 | "\n" |
||
22 | "Options\n" |
||
23 | " -f, --format=TYPE Output format { brief | details | stats }\n" |
||
24 | " -h, --help Show this help\n" |
||
25 | " -v, --version Show versioning information\n" |
||
26 | "\n" |
||
27 | "Conntrack Selection\n" |
||
28 | " -i, --id=NUM Identifier\n" |
||
29 | " -p, --proto=PROTOCOL Protocol\n" |
||
30 | " --tcp-state=STATE TCP connection state\n" |
||
31 | " --orig-src=ADDR Original source address\n" |
||
32 | " --orig-sport=PORT Original source port\n" |
||
33 | " --orig-dst=ADDR Original destination address\n" |
||
34 | " --orig-dport=PORT Original destination port\n" |
||
35 | " --reply-src=ADDR Reply source address\n" |
||
36 | " --reply-sport=PORT Reply source port\n" |
||
37 | " --reply-dst=ADDR Reply destination address\n" |
||
38 | " --reply-dport=PORT Reply destination port\n" |
||
39 | " -F, --family=FAMILY Address family\n" |
||
40 | " --mark=NUM Mark value\n" |
||
41 | " --timeout=NUM Timeout value\n" |
||
42 | " --refcnt=NUM Use counter value\n" |
||
43 | " --flags Flags\n" |
||
44 | ); |
||
45 | exit(0); |
||
46 | } |
||
47 | |||
48 | int main(int argc, char *argv[]) |
||
49 | { |
||
50 | struct nl_sock *sock; |
||
51 | struct nl_cache *ct_cache; |
||
52 | struct nfnl_ct *ct; |
||
53 | struct nl_dump_params params = { |
||
54 | .dp_type = NL_DUMP_LINE, |
||
55 | .dp_fd = stdout, |
||
56 | }; |
||
57 | |||
58 | ct = nl_cli_ct_alloc(); |
||
59 | |||
60 | for (;;) { |
||
61 | int c, optidx = 0; |
||
62 | enum { |
||
63 | ARG_MARK = 257, |
||
64 | ARG_TCP_STATE = 258, |
||
65 | ARG_ORIG_SRC, |
||
66 | ARG_ORIG_SPORT, |
||
67 | ARG_ORIG_DST, |
||
68 | ARG_ORIG_DPORT, |
||
69 | ARG_REPLY_SRC, |
||
70 | ARG_REPLY_SPORT, |
||
71 | ARG_REPLY_DST, |
||
72 | ARG_REPLY_DPORT, |
||
73 | ARG_TIMEOUT, |
||
74 | ARG_REFCNT, |
||
75 | ARG_FLAGS, |
||
76 | }; |
||
77 | static struct option long_opts[] = { |
||
78 | { "format", 1, 0, 'f' }, |
||
79 | { "help", 0, 0, 'h' }, |
||
80 | { "version", 0, 0, 'v' }, |
||
81 | { "id", 1, 0, 'i' }, |
||
82 | { "proto", 1, 0, 'p' }, |
||
83 | { "tcp-state", 1, 0, ARG_TCP_STATE }, |
||
84 | { "orig-src", 1, 0, ARG_ORIG_SRC }, |
||
85 | { "orig-sport", 1, 0, ARG_ORIG_SPORT }, |
||
86 | { "orig-dst", 1, 0, ARG_ORIG_DST }, |
||
87 | { "orig-dport", 1, 0, ARG_ORIG_DPORT }, |
||
88 | { "reply-src", 1, 0, ARG_REPLY_SRC }, |
||
89 | { "reply-sport", 1, 0, ARG_REPLY_SPORT }, |
||
90 | { "reply-dst", 1, 0, ARG_REPLY_DST }, |
||
91 | { "reply-dport", 1, 0, ARG_REPLY_DPORT }, |
||
92 | { "family", 1, 0, 'F' }, |
||
93 | { "mark", 1, 0, ARG_MARK }, |
||
94 | { "timeout", 1, 0, ARG_TIMEOUT }, |
||
95 | { "refcnt", 1, 0, ARG_REFCNT }, |
||
96 | { 0, 0, 0, 0 } |
||
97 | }; |
||
98 | |||
99 | c = getopt_long(argc, argv, "46f:hvi:p:F:", long_opts, &optidx); |
||
100 | if (c == -1) |
||
101 | break; |
||
102 | |||
103 | switch (c) { |
||
104 | case '?': exit(NLE_INVAL); |
||
105 | case '4': nfnl_ct_set_family(ct, AF_INET); break; |
||
106 | case '6': nfnl_ct_set_family(ct, AF_INET6); break; |
||
107 | case 'f': params.dp_type = nl_cli_parse_dumptype(optarg); break; |
||
108 | case 'h': print_usage(); break; |
||
109 | case 'v': nl_cli_print_version(); break; |
||
110 | case 'i': nl_cli_ct_parse_id(ct, optarg); break; |
||
111 | case 'p': nl_cli_ct_parse_protocol(ct, optarg); break; |
||
112 | case ARG_TCP_STATE: nl_cli_ct_parse_tcp_state(ct, optarg); break; |
||
113 | case ARG_ORIG_SRC: nl_cli_ct_parse_src(ct, 0, optarg); break; |
||
114 | case ARG_ORIG_SPORT: nl_cli_ct_parse_src_port(ct, 0, optarg); break; |
||
115 | case ARG_ORIG_DST: nl_cli_ct_parse_dst(ct, 0, optarg); break; |
||
116 | case ARG_ORIG_DPORT: nl_cli_ct_parse_dst_port(ct, 0, optarg); break; |
||
117 | case ARG_REPLY_SRC: nl_cli_ct_parse_src(ct, 1, optarg); break; |
||
118 | case ARG_REPLY_SPORT: nl_cli_ct_parse_src_port(ct, 1, optarg); break; |
||
119 | case ARG_REPLY_DST: nl_cli_ct_parse_dst(ct, 1, optarg); break; |
||
120 | case ARG_REPLY_DPORT: nl_cli_ct_parse_dst_port(ct, 1, optarg); break; |
||
121 | case 'F': nl_cli_ct_parse_family(ct, optarg); break; |
||
122 | case ARG_MARK: nl_cli_ct_parse_mark(ct, optarg); break; |
||
123 | case ARG_TIMEOUT: nl_cli_ct_parse_timeout(ct, optarg); break; |
||
124 | case ARG_REFCNT: nl_cli_ct_parse_use(ct, optarg); break; |
||
125 | case ARG_FLAGS: nl_cli_ct_parse_status(ct, optarg); break; |
||
126 | } |
||
127 | } |
||
128 | |||
129 | sock = nl_cli_alloc_socket(); |
||
130 | nl_cli_connect(sock, NETLINK_NETFILTER); |
||
131 | ct_cache = nl_cli_ct_alloc_cache(sock); |
||
132 | |||
133 | nl_cache_dump_filter(ct_cache, ¶ms, OBJ_CAST(ct)); |
||
134 | |||
135 | return 0; |
||
136 | } |