summaryrefslogtreecommitdiff
path: root/package/ramips/applications/hwnat/src/ac.c
diff options
context:
space:
mode:
Diffstat (limited to 'package/ramips/applications/hwnat/src/ac.c')
-rwxr-xr-xpackage/ramips/applications/hwnat/src/ac.c269
1 files changed, 269 insertions, 0 deletions
diff --git a/package/ramips/applications/hwnat/src/ac.c b/package/ramips/applications/hwnat/src/ac.c
new file mode 100755
index 0000000..ed8acdc
--- /dev/null
+++ b/package/ramips/applications/hwnat/src/ac.c
@@ -0,0 +1,269 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <getopt.h>
+
+#include "ac_ioctl.h"
+#include "ac_api.h"
+
+void show_usage(void)
+{
+
+ printf("Add Mac Upload Accounting Rule\n");
+ printf("ac -a -m [Mac] \n");
+
+ printf("Add Mac Download Accounting Rule\n");
+ printf("ac -b -m [Mac] \n");
+
+ printf("Del Mac Upload Accounting Rule\n");
+ printf("ac -c -m [Mac]\n");
+
+ printf("Del Mac download Accounting Rule\n");
+ printf("ac -d -m [Mac]\n");
+
+ printf("Add Vlan Upload Accounting Rule\n");
+ printf("ac -A -k [Vlan] \n");
+
+ printf("Add Vlan Download Accounting Rule\n");
+ printf("ac -B -k [Vlan] \n");
+
+ printf("Del Vlan Upload Accounting Rule\n");
+ printf("ac -C -k [Vlan]\n");
+
+ printf("Del Vlan download Accounting Rule\n");
+ printf("ac -D -k [Vlan]\n");
+
+ printf("Add IP Upload Accounting Rule\n");
+ printf("ac -e -i [IpS] -j [IpE]\n");
+
+ printf("Add IP Download Accounting Rule\n");
+ printf("ac -f -i [IpS] -j [IpE] \n");
+
+ printf("Del IP Upload Accounting Rule\n");
+ printf("ac -g -i [IpS] -j [IpE] \n");
+
+ printf("Del IP Download Accounting Rule\n");
+ printf("ac -h -i [IpS] -j [IpE]\n");
+
+ printf("Show Upload Packet Count of the Mac\n");
+ printf("ac -p -m [Mac] \n");
+
+ printf("Show Download Packet Count of the Mac\n");
+ printf("ac -q -m [Mac]\n");
+
+ printf("Show Upload Byte Count of the Mac\n");
+ printf("ac -r -m [Mac]\n");
+
+ printf("Show Download Byte Count of the Mac\n");
+ printf("ac -s -m [Mac]\n");
+
+ printf("Show Upload Packet Count of the Vlan\n");
+ printf("ac -P -k [Vlan] \n");
+
+ printf("Show Download Packet Count of the Vlan\n");
+ printf("ac -Q -k [Vlan]\n");
+
+ printf("Show Upload Byte Count of the Vlan\n");
+ printf("ac -R -k [Vlan]\n");
+
+ printf("Show Download Byte Count of the Vlan\n");
+ printf("ac -S -k [Vlan]\n");
+
+ printf("Show Upload Packet Count of the IP\n");
+ printf("ac -t -i [IpS] -j [IpE]\n");
+
+ printf("Show Download Packet Count of the IP\n");
+ printf("ac -u -i [IpS] -j [IpE]\n");
+
+ printf("Show Upload Byte Count of the IP\n");
+ printf("ac -v -i [IpS] -j [IpE]\n");
+
+ printf("Show Download Byte Count of the IP\n");
+ printf("ac -w -i [IpS] -j [IpE]\n");
+
+ printf("Clear Ac Table\n");
+ printf("ac -z\n");
+
+}
+
+int main(int argc, char *argv[])
+{
+ int opt;
+ char options[] = "ABCDabcdefghPQRSpqrstuvwz?m:i:j:k:";
+ int fd;
+ int method=-1;
+ struct ac_args args;
+ int result;
+
+
+ fd = open("/dev/"AC_DEVNAME, O_RDONLY);
+ if (fd < 0)
+ {
+ printf("Open %s pseudo device failed\n","/dev/"AC_DEVNAME);
+ return 0;
+ }
+
+ if(argc < 2)
+ {
+ show_usage();
+ close(fd);
+ return 0;
+ }
+
+ while ((opt = getopt (argc, argv, options)) != -1)
+ {
+ switch (opt)
+ {
+ case 'a':
+ method=AC_ADD_MAC_UL_ENTRY;
+ break;
+ case 'b':
+ method=AC_ADD_MAC_DL_ENTRY;
+ break;
+ case 'c':
+ method=AC_DEL_MAC_UL_ENTRY;
+ break;
+ case 'd':
+ method=AC_DEL_MAC_DL_ENTRY;
+ break;
+ case 'e':
+ method=AC_ADD_IP_UL_ENTRY;
+ break;
+ case 'f':
+ method=AC_ADD_IP_DL_ENTRY;
+ break;
+ case 'g':
+ method=AC_DEL_IP_UL_ENTRY;
+ break;
+ case 'h':
+ method=AC_DEL_IP_DL_ENTRY;
+ break;
+ case 'A':
+ method=AC_ADD_VLAN_UL_ENTRY;
+ break;
+ case 'B':
+ method=AC_ADD_VLAN_DL_ENTRY;
+ break;
+ case 'C':
+ method=AC_DEL_VLAN_UL_ENTRY;
+ break;
+ case 'D':
+ method=AC_DEL_VLAN_DL_ENTRY;
+ break;
+ case 'p':
+ method=AC_GET_MAC_UL_PKT_CNT;
+ break;
+ case 'q':
+ method=AC_GET_MAC_DL_PKT_CNT;
+ break;
+ case 'r':
+ method=AC_GET_MAC_UL_BYTE_CNT;
+ break;
+ case 's':
+ method=AC_GET_MAC_DL_BYTE_CNT;
+ break;
+ case 't':
+ method=AC_GET_IP_UL_PKT_CNT;
+ break;
+ case 'u':
+ method=AC_GET_IP_DL_PKT_CNT;
+ break;
+ case 'v':
+ method=AC_GET_IP_UL_BYTE_CNT;
+ break;
+ case 'w':
+ method=AC_GET_IP_DL_BYTE_CNT;
+ break;
+ case 'P':
+ method=AC_GET_VLAN_UL_PKT_CNT;
+ break;
+ case 'Q':
+ method=AC_GET_VLAN_DL_PKT_CNT;
+ break;
+ case 'R':
+ method=AC_GET_VLAN_UL_BYTE_CNT;
+ break;
+ case 'S':
+ method=AC_GET_VLAN_DL_BYTE_CNT;
+ break;
+ case 'z': /* CleanTbl */
+ method=AC_CLEAN_TBL;
+ break;
+ case 'm': /* Mac */
+ str_to_mac(args.mac, optarg);
+ break;
+ case 'i': /* IP */
+ str_to_ip(&args.ip_s, optarg);
+ break;
+ case 'j':
+ str_to_ip(&args.ip_e, optarg);
+ break;
+ case 'k':
+ args.vid = strtoll(optarg, NULL, 10);
+ break;
+
+ case '?': /* Help */
+ show_usage();
+ break;
+ }
+ }
+
+
+ switch(method)
+ {
+ case AC_ADD_VLAN_UL_ENTRY:
+ case AC_ADD_VLAN_DL_ENTRY:
+ case AC_ADD_MAC_UL_ENTRY:
+ case AC_ADD_MAC_DL_ENTRY:
+ case AC_ADD_IP_UL_ENTRY:
+ case AC_ADD_IP_DL_ENTRY:
+ case AC_CLEAN_TBL:
+ SetAcEntry(&args, method);
+ result = args.result;
+ break;
+ case AC_DEL_VLAN_UL_ENTRY:
+ case AC_DEL_VLAN_DL_ENTRY:
+ case AC_DEL_MAC_UL_ENTRY:
+ case AC_DEL_MAC_DL_ENTRY:
+ case AC_DEL_IP_UL_ENTRY:
+ case AC_DEL_IP_DL_ENTRY:
+ SetAcEntry(&args, method);
+ result = args.result;
+ break;
+ case AC_GET_VLAN_UL_PKT_CNT:
+ case AC_GET_VLAN_DL_PKT_CNT:
+ case AC_GET_MAC_UL_PKT_CNT:
+ case AC_GET_MAC_DL_PKT_CNT:
+ case AC_GET_IP_UL_PKT_CNT:
+ case AC_GET_IP_DL_PKT_CNT:
+ case AC_GET_VLAN_UL_BYTE_CNT:
+ case AC_GET_VLAN_DL_BYTE_CNT:
+ case AC_GET_MAC_UL_BYTE_CNT:
+ case AC_GET_MAC_DL_BYTE_CNT:
+ case AC_GET_IP_UL_BYTE_CNT:
+ case AC_GET_IP_DL_BYTE_CNT:
+ result = GetAcEntry(&args, method);
+ printf("Count=%lld\n",args.cnt);
+ break;
+ default:
+ result = AC_FAIL;
+ }
+
+ if(result == AC_SUCCESS)
+ {
+ printf("done\n");
+ }
+ else if (result == AC_TBL_FULL)
+ {
+ printf("table full\n");
+ }
+ else
+ {
+ printf("fail\n");
+ }
+
+ close(fd);
+ return 0;
+}