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