blob: 607ccfe62e5837f20a3ae7911737170d60f5e34f [file] [log] [blame]
xjb04a4022021-11-25 15:01:52 +08001#include <stdlib.h>
2#include <stdio.h>
3#include <string.h>
4#include <sys/ioctl.h>
5#include <fcntl.h>
6#include <getopt.h>
7
8#include "ac_ioctl.h"
9#include "ac_api.h"
10
11void show_usage(void)
12{
13
14 printf("Add Mac Upload Accounting Rule\n");
15 printf("ac -a -m [Mac] \n");
16
17 printf("Add Mac Download Accounting Rule\n");
18 printf("ac -b -m [Mac] \n");
19
20 printf("Del Mac Upload Accounting Rule\n");
21 printf("ac -c -m [Mac]\n");
22
23 printf("Del Mac download Accounting Rule\n");
24 printf("ac -d -m [Mac]\n");
25
26 printf("Add Vlan Upload Accounting Rule\n");
27 printf("ac -A -k [Vlan] \n");
28
29 printf("Add Vlan Download Accounting Rule\n");
30 printf("ac -B -k [Vlan] \n");
31
32 printf("Del Vlan Upload Accounting Rule\n");
33 printf("ac -C -k [Vlan]\n");
34
35 printf("Del Vlan download Accounting Rule\n");
36 printf("ac -D -k [Vlan]\n");
37
38 printf("Add IP Upload Accounting Rule\n");
39 printf("ac -e -i [IpS] -j [IpE]\n");
40
41 printf("Add IP Download Accounting Rule\n");
42 printf("ac -f -i [IpS] -j [IpE] \n");
43
44 printf("Del IP Upload Accounting Rule\n");
45 printf("ac -g -i [IpS] -j [IpE] \n");
46
47 printf("Del IP Download Accounting Rule\n");
48 printf("ac -h -i [IpS] -j [IpE]\n");
49
50 printf("Show Upload Packet Count of the Mac\n");
51 printf("ac -p -m [Mac] \n");
52
53 printf("Show Download Packet Count of the Mac\n");
54 printf("ac -q -m [Mac]\n");
55
56 printf("Show Upload Byte Count of the Mac\n");
57 printf("ac -r -m [Mac]\n");
58
59 printf("Show Download Byte Count of the Mac\n");
60 printf("ac -s -m [Mac]\n");
61
62 printf("Show Upload Packet Count of the Vlan\n");
63 printf("ac -P -k [Vlan] \n");
64
65 printf("Show Download Packet Count of the Vlan\n");
66 printf("ac -Q -k [Vlan]\n");
67
68 printf("Show Upload Byte Count of the Vlan\n");
69 printf("ac -R -k [Vlan]\n");
70
71 printf("Show Download Byte Count of the Vlan\n");
72 printf("ac -S -k [Vlan]\n");
73
74 printf("Show Upload Packet Count of the IP\n");
75 printf("ac -t -i [IpS] -j [IpE]\n");
76
77 printf("Show Download Packet Count of the IP\n");
78 printf("ac -u -i [IpS] -j [IpE]\n");
79
80 printf("Show Upload Byte Count of the IP\n");
81 printf("ac -v -i [IpS] -j [IpE]\n");
82
83 printf("Show Download Byte Count of the IP\n");
84 printf("ac -w -i [IpS] -j [IpE]\n");
85
86 printf("Clear Ac Table\n");
87 printf("ac -z\n");
88
89}
90
91int main(int argc, char *argv[])
92{
93 int opt;
94 char options[] = "ABCDabcdefghPQRSpqrstuvwz?m:i:j:k:";
95 int fd;
96 int method=-1;
97 struct ac_args args;
98 int result;
99
100
101 fd = open("/dev/"AC_DEVNAME, O_RDONLY);
102 if (fd < 0)
103 {
104 printf("Open %s pseudo device failed\n","/dev/"AC_DEVNAME);
105 return 0;
106 }
107
108 if(argc < 2) {
109 show_usage();
110 close(fd);
111 return 0;
112 }
113
114 while ((opt = getopt (argc, argv, options)) != -1) {
115 switch (opt) {
116 case 'a':
117 method=AC_ADD_MAC_UL_ENTRY;
118 break;
119 case 'b':
120 method=AC_ADD_MAC_DL_ENTRY;
121 break;
122 case 'c':
123 method=AC_DEL_MAC_UL_ENTRY;
124 break;
125 case 'd':
126 method=AC_DEL_MAC_DL_ENTRY;
127 break;
128 case 'e':
129 method=AC_ADD_IP_UL_ENTRY;
130 break;
131 case 'f':
132 method=AC_ADD_IP_DL_ENTRY;
133 break;
134 case 'g':
135 method=AC_DEL_IP_UL_ENTRY;
136 break;
137 case 'h':
138 method=AC_DEL_IP_DL_ENTRY;
139 break;
140 case 'A':
141 method=AC_ADD_VLAN_UL_ENTRY;
142 break;
143 case 'B':
144 method=AC_ADD_VLAN_DL_ENTRY;
145 break;
146 case 'C':
147 method=AC_DEL_VLAN_UL_ENTRY;
148 break;
149 case 'D':
150 method=AC_DEL_VLAN_DL_ENTRY;
151 break;
152 case 'p':
153 method=AC_GET_MAC_UL_PKT_CNT;
154 break;
155 case 'q':
156 method=AC_GET_MAC_DL_PKT_CNT;
157 break;
158 case 'r':
159 method=AC_GET_MAC_UL_BYTE_CNT;
160 break;
161 case 's':
162 method=AC_GET_MAC_DL_BYTE_CNT;
163 break;
164 case 't':
165 method=AC_GET_IP_UL_PKT_CNT;
166 break;
167 case 'u':
168 method=AC_GET_IP_DL_PKT_CNT;
169 break;
170 case 'v':
171 method=AC_GET_IP_UL_BYTE_CNT;
172 break;
173 case 'w':
174 method=AC_GET_IP_DL_BYTE_CNT;
175 break;
176 case 'P':
177 method=AC_GET_VLAN_UL_PKT_CNT;
178 break;
179 case 'Q':
180 method=AC_GET_VLAN_DL_PKT_CNT;
181 break;
182 case 'R':
183 method=AC_GET_VLAN_UL_BYTE_CNT;
184 break;
185 case 'S':
186 method=AC_GET_VLAN_DL_BYTE_CNT;
187 break;
188 case 'z': /* CleanTbl */
189 method=AC_CLEAN_TBL;
190 break;
191 case 'm': /* Mac */
192 str_to_mac(args.mac, optarg);
193 break;
194 case 'i': /* IP */
195 str_to_ip(&args.ip_s, optarg);
196 break;
197 case 'j':
198 str_to_ip(&args.ip_e, optarg);
199 break;
200 case 'k':
201 args.vid = strtoll(optarg, NULL, 10);
202 break;
203
204 case '?': /* Help */
205 show_usage();
206 break;
207 }
208 }
209
210
211 switch(method) {
212 case AC_ADD_VLAN_UL_ENTRY:
213 case AC_ADD_VLAN_DL_ENTRY:
214 case AC_ADD_MAC_UL_ENTRY:
215 case AC_ADD_MAC_DL_ENTRY:
216 case AC_ADD_IP_UL_ENTRY:
217 case AC_ADD_IP_DL_ENTRY:
218 case AC_CLEAN_TBL:
219 SetAcEntry(&args, method);
220 result = args.result;
221 break;
222 case AC_DEL_VLAN_UL_ENTRY:
223 case AC_DEL_VLAN_DL_ENTRY:
224 case AC_DEL_MAC_UL_ENTRY:
225 case AC_DEL_MAC_DL_ENTRY:
226 case AC_DEL_IP_UL_ENTRY:
227 case AC_DEL_IP_DL_ENTRY:
228 SetAcEntry(&args, method);
229 result = args.result;
230 break;
231 case AC_GET_VLAN_UL_PKT_CNT:
232 case AC_GET_VLAN_DL_PKT_CNT:
233 case AC_GET_MAC_UL_PKT_CNT:
234 case AC_GET_MAC_DL_PKT_CNT:
235 case AC_GET_IP_UL_PKT_CNT:
236 case AC_GET_IP_DL_PKT_CNT:
237 case AC_GET_VLAN_UL_BYTE_CNT:
238 case AC_GET_VLAN_DL_BYTE_CNT:
239 case AC_GET_MAC_UL_BYTE_CNT:
240 case AC_GET_MAC_DL_BYTE_CNT:
241 case AC_GET_IP_UL_BYTE_CNT:
242 case AC_GET_IP_DL_BYTE_CNT:
243 result = GetAcEntry(&args, method);
244 printf("Count=%lld\n",args.cnt);
245 break;
246 default:
247 result = AC_FAIL;
248 }
249
250 if(result == AC_SUCCESS) {
251 printf("done\n");
252 }else if (result == AC_TBL_FULL) {
253 printf("table full\n");
254 } else {
255 printf("fail\n");
256 }
257
258 close(fd);
259 return 0;
260}