| #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; |
| } |