示例#1
0
文件: ac.c 项目: awaysoft/openwrt_cc
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;
}
示例#2
0
文件: ac.c 项目: withwave/RT5350
int main(int argc, char *argv[])
{
    int opt;
    char options[] = "abcdefghpqrstuvwz?m:i:j:";
    int fd;
    int method=-1;
    struct ac_args args;


    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();
	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 '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 '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 '?': /* Help */
	    show_usage();
	    break;
	}
    } 


    switch(method) {
    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);
	    if(args.result == AC_TBL_FULL) {
		    printf("Accounting Table Full!!\n");
	    }else {
		    printf("Accounting command ok!\n");
	    }
	    break;
    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);
	    if(args.result == AC_SUCCESS) {
		    printf("Delete Entry ok!\n");
	    }else{
		    printf("Delete Entry fail!\n");
	    }
	    break;
    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_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:  
	    GetAcEntry(&args, method);
	    printf("Count=%d\n",args.cnt);
	    break;
    }

    return 0;
}