blob: 607ccfe62e5837f20a3ae7911737170d60f5e34f [file] [log] [blame]
#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;
}