int main(int argc, char **argv)
{
	CLIENT *clnt;
	struct qcsapi_output output;
	uint8_t dst_mac[ETH_HLEN];
	int ret;

	if (geteuid()) {
		printf("QRPC: only root can do that\n");
		exit(1);
	}

	if (argc < 3) {
		printf("QRPC: <src_ifname> <dst_mac_addr>\n");
		exit(1);
	}

	if (str_to_mac(argv[2], dst_mac) < 0) {
		printf("QRPC: Wrong destination MAC address format. "
				"Use the following format: XX:XX:XX:XX:XX:XX\n");
		exit(1);
	}

	output = qcsapi_output_stdio_adapter();

	clnt = qrpc_clnt_raw_create(QCSAPI_PROG, QCSAPI_VERS, argv[1], dst_mac, QRPC_QCSAPI_RPCD_SID);
	if (clnt == NULL) {
		clnt_pcreateerror("QRPC: ");
		exit (1);
	}

	client_qcsapi_set_rpcclient(clnt);
	argv[2] = argv[0];
	ret = qcsapi_main(&output, argc - 2, &argv[2]);
	clnt_destroy(clnt);

	if (!ret && !strcmp(argv[3], "send_file")) {
		if (qftc_start(argv[4], argv[1], dst_mac) < 0) {
			printf("send_file command failed\n");
		} else {
			printf("complete\n");
		}
	}

	return ret;
}
Example #2
0
int setup_firewall(firewall_t* fwall, char* in, char* out, char* errbuf) {
	FILE *settings;
	settings = fopen("settings.config", "r");

	if (settings == NULL) {
		return 0;
	}
	
	int read = 0;
	char buff[1024];
	while (fgets(buff, 1024, settings) != NULL) {
		int str_tam = strlen(buff);
  	if (read == 0) {
  		str_to_mac(buff, fwall->virtual_mac); 	
  	} else if (read == 1) {
  		str_to_mac(buff, fwall->firewall_mac);
  	} else if (read == 2) {
  		str_to_mac(buff, fwall->switch_mac);
  	} else if (read == 3) {
  		str_to_mac(buff, fwall->router_mac);
  	} else if (read == 4) {
  		fwall->virtual_ip_str = (char*) malloc(str_tam+1);
  		memcpy(fwall->virtual_ip_str, buff, str_tam);
  		fwall->virtual_ip_str[str_tam] = 0;
  		str_to_ip(fwall->virtual_ip_str, fwall->virtual_ip_bin);		
  	} else if (read == 5) {
  		fwall->firewall_ip_str = (char*) malloc(str_tam+1);
  		memcpy(fwall->firewall_ip_str, buff, str_tam);
  		fwall->firewall_ip_str[str_tam] = 0;
  		str_to_ip(fwall->firewall_ip_str, fwall->firewall_ip_bin);
  	} else if (read == 6) {
  		fwall->switch_ip_str = (char*) malloc(str_tam+1);
  		memcpy(fwall->switch_ip_str, buff, str_tam);
  		fwall->switch_ip_str[str_tam] = 0;
  		str_to_ip(fwall->switch_ip_str, fwall->switch_ip_bin);
  	}
  	read++;
		if (read == MAX_INPUT_LINES)
			break;
	}
	
	if (read != MAX_INPUT_LINES) {
		fclose(settings);
		return 0;
	}
	
	int sz = strlen(in);
	fwall->dev_name_in = (char*) malloc(sz);
	memcpy(fwall->dev_name_in, in, sz);
	sz = strlen(out);
	fwall->dev_name_out = (char*) malloc(sz);
	memcpy(fwall->dev_name_out, out, sz);
	
	fwall->pcap_in_timeout = IN_TIMEOUT;
	fwall->pcap_out_timeout = OUT_TIMEOUT;
	
	NEXT_TCP_PORT = HIGH_PORT;
  NEXT_UDP_PORT = HIGH_PORT;
	
	ONLINE = 1;
	int i;
	for (i=0;i<strlen(fwall->dev_name_in);i++)
		if (fwall->dev_name_in[i] == '.') ONLINE = 0;
	
	if (ONLINE) {	
		if (device_not_found(in, errbuf)) {
			printf("Device %s not found!\n",in);
			return 0;
		}	
		if (device_not_found(out, errbuf)) {
			printf("Device %s not found!\n",out);
			return 0;
		}	
		
		fwall->pcap_in = pcap_open_live(fwall->dev_name_in, BUFSIZ, 0, fwall->pcap_in_timeout, errbuf);	
		if (fwall->pcap_in == NULL) {
			printf("Error pcap in: %s\n", errbuf);
			return 0;
		}
		if (pcap_datalink(fwall->pcap_in) != 1) {
			printf("Not ethernet data-link pcap in!\n");
			return 0;
		}
	
		fwall->pcap_out = pcap_open_live(fwall->dev_name_out, BUFSIZ, 0, fwall->pcap_out_timeout, errbuf);	
		if (fwall->pcap_out == NULL) {
			printf("Error pcap out: %s\n", errbuf);
			return 0;
		}
		if (pcap_datalink(fwall->pcap_out) != 1) {
			printf("Not ethernet data-link pcap out!\n");
			return 0;
		}
	} else {
		fwall->pcap_in = pcap_open_offline(fwall->dev_name_in, errbuf);	
		if (fwall->pcap_in == NULL) {
			printf("Error pcap in: %s\n", errbuf);
			return 0;
		}
		if (pcap_datalink(fwall->pcap_in) != 1) {
			printf("Not ethernet data-link pcap in!\n");
			return 0;
		}
	
		fwall->pcap_out = pcap_open_offline(fwall->dev_name_out, errbuf);	
		if (fwall->pcap_out == NULL) {
			printf("Error pcap out: %s\n", errbuf);
			return 0;
		}
		if (pcap_datalink(fwall->pcap_out) != 1) {
			printf("Not ethernet data-link pcap out!\n");
			return 0;
		}
	}
	
	fclose(settings);
	return 1;
}
Example #3
0
static void
parse_named_action(enum ofputil_action_code code,
                   char *arg, struct ofpbuf *ofpacts)
{
    struct ofpact_tunnel *tunnel;
    uint16_t vid;
    uint16_t ethertype;
    ovs_be32 ip;
    uint8_t pcp;
    uint8_t tos;

    switch (code) {
    case OFPUTIL_ACTION_INVALID:
        NOT_REACHED();

    case OFPUTIL_OFPAT10_OUTPUT:
    case OFPUTIL_OFPAT11_OUTPUT:
        parse_output(arg, ofpacts);
        break;

    case OFPUTIL_OFPAT10_SET_VLAN_VID:
    case OFPUTIL_OFPAT11_SET_VLAN_VID:
        vid = str_to_u32(arg);
        if (vid & ~VLAN_VID_MASK) {
            ovs_fatal(0, "%s: not a valid VLAN VID", arg);
        }
        ofpact_put_SET_VLAN_VID(ofpacts)->vlan_vid = vid;
        break;

    case OFPUTIL_OFPAT10_SET_VLAN_PCP:
    case OFPUTIL_OFPAT11_SET_VLAN_PCP:
        pcp = str_to_u32(arg);
        if (pcp & ~7) {
            ovs_fatal(0, "%s: not a valid VLAN PCP", arg);
        }
        ofpact_put_SET_VLAN_PCP(ofpacts)->vlan_pcp = pcp;
        break;

    case OFPUTIL_OFPAT12_SET_FIELD:
        set_field_parse(arg, ofpacts);
        break;

    case OFPUTIL_OFPAT10_STRIP_VLAN:
    case OFPUTIL_OFPAT11_POP_VLAN:
        ofpact_put_STRIP_VLAN(ofpacts);
        break;

    case OFPUTIL_OFPAT11_PUSH_VLAN:
        ethertype = str_to_u16(arg, "ethertype");
        if (ethertype != ETH_TYPE_VLAN_8021Q) {
            /* XXX ETH_TYPE_VLAN_8021AD case isn't supported */
            ovs_fatal(0, "%s: not a valid VLAN ethertype", arg);
        }
        ofpact_put_PUSH_VLAN(ofpacts);
        break;

    case OFPUTIL_OFPAT11_SET_QUEUE:
        ofpact_put_SET_QUEUE(ofpacts)->queue_id = str_to_u32(arg);
        break;


    case OFPUTIL_OFPAT10_SET_DL_SRC:
    case OFPUTIL_OFPAT11_SET_DL_SRC:
        str_to_mac(arg, ofpact_put_SET_ETH_SRC(ofpacts)->mac);
        break;

    case OFPUTIL_OFPAT10_SET_DL_DST:
    case OFPUTIL_OFPAT11_SET_DL_DST:
        str_to_mac(arg, ofpact_put_SET_ETH_DST(ofpacts)->mac);
        break;

    case OFPUTIL_OFPAT10_SET_NW_SRC:
    case OFPUTIL_OFPAT11_SET_NW_SRC:
        str_to_ip(arg, &ip);
        ofpact_put_SET_IPV4_SRC(ofpacts)->ipv4 = ip;
        break;

    case OFPUTIL_OFPAT10_SET_NW_DST:
    case OFPUTIL_OFPAT11_SET_NW_DST:
        str_to_ip(arg, &ip);
        ofpact_put_SET_IPV4_DST(ofpacts)->ipv4 = ip;
        break;

    case OFPUTIL_OFPAT10_SET_NW_TOS:
    case OFPUTIL_OFPAT11_SET_NW_TOS:
        tos = str_to_u32(arg);
        if (tos & ~IP_DSCP_MASK) {
            ovs_fatal(0, "%s: not a valid TOS", arg);
        }
        ofpact_put_SET_IPV4_DSCP(ofpacts)->dscp = tos;
        break;

    case OFPUTIL_OFPAT11_DEC_NW_TTL:
        NOT_REACHED();

    case OFPUTIL_OFPAT10_SET_TP_SRC:
    case OFPUTIL_OFPAT11_SET_TP_SRC:
        ofpact_put_SET_L4_SRC_PORT(ofpacts)->port = str_to_u32(arg);
        break;

    case OFPUTIL_OFPAT10_SET_TP_DST:
    case OFPUTIL_OFPAT11_SET_TP_DST:
        ofpact_put_SET_L4_DST_PORT(ofpacts)->port = str_to_u32(arg);
        break;

    case OFPUTIL_OFPAT10_ENQUEUE:
        parse_enqueue(arg, ofpacts);
        break;

    case OFPUTIL_NXAST_RESUBMIT:
        parse_resubmit(arg, ofpacts);
        break;

    case OFPUTIL_NXAST_SET_TUNNEL:
    case OFPUTIL_NXAST_SET_TUNNEL64:
        tunnel = ofpact_put_SET_TUNNEL(ofpacts);
        tunnel->ofpact.compat = code;
        tunnel->tun_id = str_to_u64(arg);
        break;

    case OFPUTIL_NXAST_WRITE_METADATA:
        parse_metadata(ofpacts, arg);
        break;

    case OFPUTIL_NXAST_SET_QUEUE:
        ofpact_put_SET_QUEUE(ofpacts)->queue_id = str_to_u32(arg);
        break;

    case OFPUTIL_NXAST_POP_QUEUE:
        ofpact_put_POP_QUEUE(ofpacts);
        break;

    case OFPUTIL_NXAST_REG_MOVE:
        nxm_parse_reg_move(ofpact_put_REG_MOVE(ofpacts), arg);
        break;

    case OFPUTIL_NXAST_REG_LOAD:
        nxm_parse_reg_load(ofpact_put_REG_LOAD(ofpacts), arg);
        break;

    case OFPUTIL_NXAST_NOTE:
        parse_note(arg, ofpacts);
        break;

    case OFPUTIL_NXAST_MULTIPATH:
        multipath_parse(ofpact_put_MULTIPATH(ofpacts), arg);
        break;

    case OFPUTIL_NXAST_BUNDLE:
        bundle_parse(arg, ofpacts);
        break;

    case OFPUTIL_NXAST_BUNDLE_LOAD:
        bundle_parse_load(arg, ofpacts);
        break;

    case OFPUTIL_NXAST_RESUBMIT_TABLE:
    case OFPUTIL_NXAST_OUTPUT_REG:
    case OFPUTIL_NXAST_DEC_TTL_CNT_IDS:
        NOT_REACHED();

    case OFPUTIL_NXAST_LEARN:
        learn_parse(arg, ofpacts);
        break;

    case OFPUTIL_NXAST_EXIT:
        ofpact_put_EXIT(ofpacts);
        break;

    case OFPUTIL_NXAST_DEC_TTL:
        parse_dec_ttl(ofpacts, arg);
        break;

    case OFPUTIL_NXAST_SET_MPLS_TTL:
    case OFPUTIL_OFPAT11_SET_MPLS_TTL:
        parse_set_mpls_ttl(ofpacts, arg);
        break;

    case OFPUTIL_OFPAT11_DEC_MPLS_TTL:
    case OFPUTIL_NXAST_DEC_MPLS_TTL:
        ofpact_put_DEC_MPLS_TTL(ofpacts);
        break;

    case OFPUTIL_NXAST_FIN_TIMEOUT:
        parse_fin_timeout(ofpacts, arg);
        break;

    case OFPUTIL_NXAST_CONTROLLER:
        parse_controller(ofpacts, arg);
        break;

    case OFPUTIL_OFPAT11_PUSH_MPLS:
    case OFPUTIL_NXAST_PUSH_MPLS:
        ofpact_put_PUSH_MPLS(ofpacts)->ethertype =
            htons(str_to_u16(arg, "push_mpls"));
        break;

    case OFPUTIL_OFPAT11_POP_MPLS:
    case OFPUTIL_NXAST_POP_MPLS:
        ofpact_put_POP_MPLS(ofpacts)->ethertype =
            htons(str_to_u16(arg, "pop_mpls"));
        break;

    case OFPUTIL_NXAST_STACK_PUSH:
        nxm_parse_stack_action(ofpact_put_STACK_PUSH(ofpacts), arg);
        break;
    case OFPUTIL_NXAST_STACK_POP:
        nxm_parse_stack_action(ofpact_put_STACK_POP(ofpacts), arg);
        break;

    case OFPUTIL_NXAST_SAMPLE:
        parse_sample(ofpacts, arg);
        break;
    }
}
Example #4
0
int main(int argc, char *argv[])
{
    int opt;
#if !defined (CONFIG_HNAT_V2)
    char options[] = "efg?c:x:d:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:T:U:V:Z:6:";
#else
    char options[] = "aefg?c:x:d:A:B:C:DN:O:P:Q:T:U:V:Z:6:";
#endif
    int method = -1;
    unsigned int entry_state = 0;
    unsigned int entry_num = 0;
    unsigned int debug = 0;
#if !defined (CONFIG_HNAT_V2)
    struct hwnat_qos_args args3;
#else
    struct hwnat_ac_args args3;
#endif
    struct hwnat_config_args args4;
    int result = 0;

#if defined (CONFIG_PPE_MCAST)
    struct hwnat_mcast_args args5;
    unsigned char mac[6];
#endif

    if(argc < 2) {
	show_usage();
	return 1;
    }

    while ((opt = getopt (argc, argv, options)) != -1) {
	switch (opt) {
	case 'c':
		method = HW_NAT_DUMP_ENTRY;
		entry_num = strtoll(optarg, NULL, 10);
		break;
	case 'x':
		method = HW_NAT_UNBIND_ENTRY;
		entry_num = strtoll(optarg, NULL, 10);
		break;
	case 'd':
		method = HW_NAT_DEBUG;
		debug = strtoll(optarg, NULL, 10);
		break;
	case 'e':
		method = HW_NAT_GET_ALL_ENTRIES;
		entry_state=0; /* invalid entry */
		break;
	case 'f':
		method = HW_NAT_GET_ALL_ENTRIES;
		entry_state=1; /* unbinded entry */
		break;
	case 'g':
		method = HW_NAT_GET_ALL_ENTRIES;
		entry_state=2; /* binded entry */
		break;
#if !defined (CONFIG_HNAT_V2)
	case 'A':
		method = HW_NAT_DSCP_REMARK;
		args3.enable = strtoll(optarg, NULL, 10);
		break;
	case 'B':
		method = HW_NAT_VPRI_REMARK;
		args3.enable = strtoll(optarg, NULL, 10);
		break;
	case 'C':
		method = HW_NAT_FOE_WEIGHT;
		args3.weight = strtoll(optarg, NULL, 10);
		break;
	case 'D':
		method = HW_NAT_ACL_WEIGHT;
		args3.weight = strtoll(optarg, NULL, 10);
		break;
	case 'E':
		method = HW_NAT_DSCP_WEIGHT;
		args3.weight = strtoll(optarg, NULL, 10);
		break;
	case 'F':
		method = HW_NAT_VPRI_WEIGHT;
		args3.weight = strtoll(optarg, NULL, 10);
		break;
	case 'G':
		method = HW_NAT_DSCP_UP;
		args3.dscp_set = strtoll(argv[2], NULL, 10);
		args3.up = strtoll(argv[3], NULL, 10);
		break;
	case 'H':
		method = HW_NAT_UP_IDSCP;
		args3.up = strtoll(argv[2], NULL, 10);
		args3.dscp = strtoll(argv[3], NULL, 10);
		break;
	case 'I':
		method = HW_NAT_UP_ODSCP;
		args3.up = strtoll(argv[2], NULL, 10);
		args3.dscp = strtoll(argv[3], NULL, 10);
		break;
	case 'J':
		method = HW_NAT_UP_VPRI;
		args3.up = strtoll(argv[2], NULL, 10);
		args3.vpri = strtoll(argv[3], NULL, 10);
		break;
	case 'K':
		method = HW_NAT_UP_AC;
		args3.up = strtoll(argv[2], NULL, 10);
		args3.ac = strtoll(argv[3], NULL, 10);
		break;
	case 'L':
		method = HW_NAT_SCH_MODE;
		args3.mode = strtoll(argv[2], NULL, 10);
		break;
	case 'M':
		method = HW_NAT_SCH_WEIGHT;
		args3.weight3 = strtoll(argv[2], NULL, 10);
		args3.weight2 = strtoll(argv[3], NULL, 10);
		args3.weight1 = strtoll(argv[4], NULL, 10);
		args3.weight0 = strtoll(argv[5], NULL, 10);
		break;
#else
	case 'a':
		method = HW_NAT_DUMP_CACHE_ENTRY;
		break;
	case 'A':
		method = HW_NAT_GET_AC_CNT;
		args3.ag_index = strtoll(optarg, NULL, 10);
		break;
#if defined (CONFIG_PPE_MCAST)
	case 'B':
		method = HW_NAT_MCAST_INS;
		args5.mc_vid = strtoll(argv[2], NULL, 10);
		str_to_mac(mac, argv[3]);
		memcpy(args5.dst_mac, mac, sizeof(mac));
		args5.mc_px_en = strtoll(argv[4], NULL, 10);
		args5.mc_px_qos_en = strtoll(argv[5], NULL, 10);
		args5.mc_qos_qid = strtoll(argv[6], NULL, 10);
		break;
	case 'C':
		method = HW_NAT_MCAST_DEL;
		args5.mc_vid = strtoll(argv[2], NULL, 10);
		str_to_mac(mac, argv[3]);
		memcpy(args5.dst_mac, mac, sizeof(mac));
		memcpy(args5.dst_mac, mac, sizeof(mac));
		args5.mc_px_en = strtoll(argv[4], NULL, 10);
		args5.mc_px_qos_en = strtoll(argv[5], NULL, 10);
		break;
	case 'D':
		method = HW_NAT_MCAST_DUMP;
		break;
#endif
#endif
	case 'N':
		method = HW_NAT_BIND_THRESHOLD;
		args4.bind_threshold = strtoll(argv[2], NULL, 10);
		break;
	case 'O':
		method = HW_NAT_MAX_ENTRY_LMT;
		args4.foe_qut_lmt = strtoll(argv[2], NULL, 10);
		args4.foe_half_lmt = strtoll(argv[3], NULL, 10);
		args4.foe_full_lmt  = strtoll(argv[4], NULL, 10);
		break;
	case 'P':
		method = HW_NAT_RULE_SIZE;
		args4.pre_acl    = strtoll(argv[2], NULL, 10);
		args4.pre_meter  = strtoll(argv[3], NULL, 10);
		args4.pre_ac     = strtoll(argv[4], NULL, 10);
		args4.post_meter = strtoll(argv[5], NULL, 10);
		args4.post_ac    = strtoll(argv[6], NULL, 10);
		break;
	case 'Q':
		method = HW_NAT_KA_INTERVAL;
		args4.foe_tcp_ka = strtoll(argv[2], NULL, 10);
		args4.foe_udp_ka = strtoll(argv[3], NULL, 10);
		break;
	case 'T':
		method = HW_NAT_UB_LIFETIME;
		args4.foe_unb_dlta = strtoll(argv[2], NULL, 10);
		break;
	case 'U':
		method = HW_NAT_BIND_LIFETIME;
		args4.foe_tcp_dlta = strtoll(argv[2], NULL, 10);
		args4.foe_udp_dlta = strtoll(argv[3], NULL, 10);
		args4.foe_fin_dlta = strtoll(argv[4], NULL, 10);
		break;
	case 'V':
		method = HW_NAT_VLAN_ID;
		args4.lan_vid = strtoll(argv[2], NULL, 10);
		args4.wan_vid = strtoll(argv[3], NULL, 10);
		break;
	case 'Z':
		method = HW_NAT_BIND_DIRECTION;
		args4.bind_dir = strtoll(optarg, NULL, 10);
		break;
	case '6':
		method = HW_NAT_ALLOW_IPV6;
		args4.foe_allow_ipv6 = strtoll(optarg, NULL, 10);
		break;
	case '?':
		show_usage();
	}
    }

    switch(method){
    case HW_NAT_GET_ALL_ENTRIES:
	    result = HwNatGetAllEntries(entry_state);
	    break;
    case HW_NAT_DUMP_ENTRY:
	    result = HwNatDumpEntry(entry_num);
	    break;
    case HW_NAT_UNBIND_ENTRY:
	    result = HwNatUnBindEntry(entry_num);
	    break;
    case HW_NAT_DEBUG:
	    result = HwNatDebug(debug);
	    break;
#if !defined (CONFIG_HNAT_V2)
    case HW_NAT_DSCP_REMARK:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_VPRI_REMARK:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_FOE_WEIGHT:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_ACL_WEIGHT:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_DSCP_WEIGHT:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_VPRI_WEIGHT:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_DSCP_UP:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_UP_IDSCP:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_UP_ODSCP:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_UP_VPRI:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_UP_AC:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_SCH_MODE:
	    result = HwNatSetQoS(&args3, method);
	    break;
    case HW_NAT_SCH_WEIGHT:
	    result = HwNatSetQoS(&args3, method);
	    break;
#else
    case HW_NAT_DUMP_CACHE_ENTRY:
	    result = HwNatCacheDumpEntry();
	    break;
    case HW_NAT_GET_AC_CNT:
	    result = HwNatGetAGCnt(&args3);
	    break;
#endif
    case HW_NAT_BIND_THRESHOLD:
	    result = HwNatSetConfig(&args4, method);
	    break;
    case HW_NAT_MAX_ENTRY_LMT:
	    result = HwNatSetConfig(&args4, method);
	    break;
    case HW_NAT_RULE_SIZE:
	    result = HwNatSetConfig(&args4, method);
	    break;
    case HW_NAT_KA_INTERVAL:
	    result = HwNatSetConfig(&args4, method);
	    break;
    case HW_NAT_UB_LIFETIME:
	    result = HwNatSetConfig(&args4, method);
	    break;
    case HW_NAT_BIND_LIFETIME:
	    result = HwNatSetConfig(&args4, method);
	    break;
    case HW_NAT_VLAN_ID:
	    result = HwNatSetConfig(&args4, method);
	    break;
    case HW_NAT_BIND_DIRECTION:
	    result = HwNatSetConfig(&args4, method);
	    break;
    case HW_NAT_ALLOW_IPV6:
	    result = HwNatSetConfig(&args4, method);
	    break;
#if defined (CONFIG_PPE_MCAST)
    case HW_NAT_MCAST_INS:
	    result = HwNatMcastIns(&args5);
	    break;
    case HW_NAT_MCAST_DEL:
	    result = HwNatMcastDel(&args5);
	    break;
    case HW_NAT_MCAST_DUMP:
	    result = HwNatMcastDump();
	    break;
#endif
    default:
	    result = HWNAT_FAIL;
	    break;
    }

    if (result == HWNAT_SUCCESS){
	printf("done\n");
    } else if(result == HWNAT_ENTRY_NOT_FOUND) {
	printf("entry not found\n");
    } else {
	return 1;
    }

    return 0;
}
Example #5
0
int main(int argc, char *argv[])
{
    int opt;
    char options[] = "AabcDdEefGgHhijklm?F:n:N:o:P:p:q:r:s:S:t:u:U:v:x:y:V:z:Z:";
    int fd;
    struct acl_args args;
    struct acl_list_args *args2;
    int method=-1;
    int result;
    int i;

    memset(&args, 0, sizeof(struct acl_args));
    args.pn = 7; /* Default do not care*/
    /* Max 511 acl entries */
    args2=malloc(sizeof(struct acl_list_args) + sizeof(struct acl_args)*511);
    if (NULL == args2)
    {
	    printf(" Allocate memory for acl_list_args and acl_args failed.\n");
	    return 0;
    }
    fd = open("/dev/"ACL_DEVNAME, O_RDONLY);

    if (fd < 0)
    {
	printf("Open %s pseudo device failed\n","/dev/"ACL_DEVNAME);
        free(args2);
	return 0;
    }

    if(argc < 2) {
	show_usage();
        free(args2);
        close(fd);
	return 0;
    }

    while ((opt = getopt (argc, argv, options)) != -1) {
	switch (opt) {
	case 'A': 
		method=ACL_ADD_SDMAC_ANY;
		break;
	case 'a': 
		method=ACL_ADD_SMAC_DIP_ANY;
		break;
	case 'b':
		method=ACL_ADD_SMAC_DIP_TCP;
		break;
	case 'c':
		method=ACL_ADD_SMAC_DIP_UDP;
		break;
	case 'D': 
		method=ACL_DEL_SDMAC_ANY;
		break;
	case 'd': 
		method=ACL_DEL_SMAC_DIP_ANY;
		break;
	case 'e':
		method=ACL_DEL_SMAC_DIP_TCP;
		break;
	case 'E':
		method=ACL_ADD_SMAC_DMAC_ETYPE_VID_SIP_DIP_TOS_PORT;
		break;
	case 'F':
                if(strcasecmp(optarg,"TCP")==0){
                            args.L4=ACL_PROTO_TCP;
	                }else if(strcasecmp(optarg,"UDP")==0){
	                        args.L4=ACL_PROTO_UDP;
	                    }else if(strcasecmp(optarg,"ANY")==0){
	                        args.L4=ACL_PROTO_ANY;
	                }else{
                            printf("Error: -t TCP or UDP or ANY\n");
			    free(args2);
			    close(fd);
			    return 0;
                }

		break;
	case 'G':
		method=ACL_DEL_SMAC_DMAC_ETYPE_VID_SIP_DIP_TOS_PORT;
		break;
	case 'f':
		method=ACL_DEL_SMAC_DIP_UDP;
		break;
	case 'H':
		method=ACL_ADD_SIP_DIP_ANY;
		break;
        case 'g':
                method = ACL_GET_ALL_ENTRIES;
		break;
	case 'h':
		method=ACL_ADD_SIP_DIP_TCP;
		break;
	case 'i':
		method=ACL_ADD_SIP_DIP_UDP;
		break;
	case 'j':
		method=ACL_DEL_SIP_DIP_ANY;
		break;
	case 'k':
		method=ACL_DEL_SIP_DIP_TCP;
		break;
	case 'l':
		method=ACL_DEL_SIP_DIP_UDP;
		break;
	case 'm':
		method=ACL_CLEAN_TBL;
		break;
	case 'n': /* source mac address */
		str_to_mac(args.mac, optarg);
		break;
	case 'N': /* destination mac address */
		str_to_mac(args.dmac, optarg);
		break;
	case 'o': /* start of sip */
		str_to_ip(&args.sip_s, optarg);
		break;
	case 'p': /* end of sip */
		str_to_ip(&args.sip_e, optarg);
		break;
	case 'P': /* Port Number */
		args.pn=strtoll(optarg, NULL, 10);
		break;
	case 'q': /* start of dip */
		str_to_ip(&args.dip_s, optarg);
		break;
	case 'r': /* end of dip */
		str_to_ip(&args.dip_e, optarg);
		break;
	case 's': /* start of dp */
		args.dp_s=strtoll(optarg, NULL, 10);
		break;
	case 't': /* end of dp */
		args.dp_e=strtoll(optarg, NULL, 10);
		break;
	case 'S': /* Protocol */
		args.protocol=strtoll(optarg, NULL, 10);
		break;

	case 'v': /* start of sp */
		args.sp_s=strtoll(optarg, NULL, 10);
		break;
	case 'x': /* end of sp */
		args.sp_e=strtoll(optarg, NULL, 10);
		break;
	case 'y': /* start of tos */
		args.tos_s=strtoll(optarg, NULL, 10);
		break;
	case 'z': /* end of tos */
		args.tos_e=strtoll(optarg, NULL, 10);
		break;
	case 'Z': /* ethertype */
		args.ethertype=strtoll(optarg, NULL, 16);
		break;
	case 'V': /* VID */
		args.vid=strtoll(optarg, NULL, 10);
		break;
	case 'u': /* Deny/Allow */
		if(strcasecmp(optarg,"Deny")==0){
			args.method=ACL_DENY_RULE;
		}else if(strcasecmp(optarg,"Allow")==0){
			args.method=ACL_ALLOW_RULE;
		}else if(strcasecmp(optarg,"FP")==0){
			args.method=ACL_PRIORITY_RULE;
		}else{
			printf("Error: -t Deny or Allow\n");
			free(args2);
			close(fd);
			return 0;
		}
		break;
	case 'U': /* User Priority */
		args.up=strtoll(optarg, NULL, 10);
		break;
	case '?':
	default:
	    show_usage();
	    free(args2);
	    close(fd);
            return 0;
	}
    } 
    switch(method) {
    case ACL_ADD_SDMAC_ANY:
    case ACL_ADD_ETYPE_ANY:	
    case ACL_ADD_SMAC_DIP_ANY:
    case ACL_ADD_SMAC_DIP_TCP:
    case ACL_ADD_SMAC_DIP_UDP:
    case ACL_DEL_SDMAC_ANY:
    case ACL_DEL_ETYPE_ANY:
    case ACL_DEL_SMAC_DIP_ANY:
    case ACL_DEL_SMAC_DIP_TCP:
    case ACL_DEL_SMAC_DIP_UDP:
    case ACL_ADD_SIP_DIP_ANY:
    case ACL_ADD_SIP_DIP_TCP:
    case ACL_ADD_SIP_DIP_UDP:
    case ACL_ADD_SMAC_DMAC_ETYPE_VID_SIP_DIP_TOS_PORT:	
    case ACL_DEL_SIP_DIP_ANY:
    case ACL_DEL_SIP_DIP_TCP:
    case ACL_DEL_SIP_DIP_UDP:
    case ACL_DEL_SMAC_DMAC_ETYPE_VID_SIP_DIP_TOS_PORT:
    case ACL_CLEAN_TBL:
	      SetAclEntry(&args, method);
	      result = args.result;
	      break;
    case ACL_GET_ALL_ENTRIES:
	      AclGetAllEntries(args2);
	      result = args2->result;

	      printf("Total Entry Count = %d\n",args2->num_of_entries);
	      for(i=0;i<args2->num_of_entries;i++){
		  printf("#%d :SMAC=%02X:%02X:%02X:%02X:%02X:%02X => DMAC=%02X:%02X:%02X:%02X:%02X:%02X PROTOCOL=0x%2x\n", \
			  i, args2->entries[i].mac[0], args2->entries[i].mac[1], args2->entries[i].mac[2], \
			  args2->entries[i].mac[3], args2->entries[i].mac[4], args2->entries[i].mac[5], \
			  args2->entries[i].dmac[0], args2->entries[i].dmac[1],args2->entries[i].dmac[2], \
			  args2->entries[i].dmac[3], args2->entries[i].dmac[4],args2->entries[i].dmac[5], \
			  args2->entries[i].protocol);

		  printf("   :SIP %u.%u.%u.%u->%u.%u.%u.%u=>DIP %u.%u.%u.%u->%u.%u.%u.%u  SP %d->%d=>DP %d->%d TOS:0x%2x->0x%2x VID:%d ETYPE=0x%4x TCP_UDP=0/TCP=1/UDP=2:%d PN:%d\n\r", \
			  NIPQUAD(args2->entries[i].sip_s), \
			  NIPQUAD(args2->entries[i].sip_e), \
			  NIPQUAD(args2->entries[i].dip_s), \
			  NIPQUAD(args2->entries[i].dip_e), \
			  args2->entries[i].sp_s, \
			  args2->entries[i].sp_e, \
			  args2->entries[i].dp_s, \
			  args2->entries[i].dp_e, \
			  args2->entries[i].tos_s, \
		    args2->entries[i].tos_e, \
		    args2->entries[i].vid, \
		    args2->entries[i].ethertype, \
		    args2->entries[i].L4, \
		    args2->entries[i].pn);
	      }
	      break;
    default:
	      result = ACL_FAIL;
    }


    if(result == ACL_SUCCESS) {
	printf("done\n");
    }else if (result ==  ACL_TBL_FULL) {
	printf("table full\n");
    } else {
	printf("fail\n");
    }
    
    free(args2);
    close(fd);
    return 0;
}
Example #6
0
int main(int argc, char *argv[])
{
    int opt;
#if !defined (CONFIG_HNAT_V2)
    char options[] = "efg?c:d:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:T:U:V:Z:";
#else
    char options[] = "aefg?c:d:A:B:C:DN:O:P:Q:T:U:V:Z:";
#endif
    int fd, method;
    int i=0;
    unsigned int entry_num;
    unsigned int debug;
    unsigned int dir;
    struct hwnat_args *args;
    struct hwnat_tuple args2;
#if !defined (CONFIG_HNAT_V2)
    struct hwnat_qos_args args3;
#else
    struct hwnat_ac_args args3;
#endif
    struct hwnat_config_args args4;

#if defined (CONFIG_PPE_MCAST)
    struct hwnat_mcast_args args5;
    unsigned char mac[6];
#endif

    int	   result;

    fd = open("/dev/"HW_NAT_DEVNAME, O_RDONLY);
    if (fd < 0)
    {
	printf("Open %s pseudo device failed\n","/dev/"HW_NAT_DEVNAME);
	return 0;
    }

    if(argc < 2) {
	show_usage();
	return 0;
    }

    /* Max table size is 16K */
    args=malloc(sizeof(struct hwnat_args)+sizeof(struct hwnat_tuple)*1024*16);

    while ((opt = getopt (argc, argv, options)) != -1) {
	switch (opt) {
#if defined (CONFIG_HNAT_V2)
	case 'a':
		method = HW_NAT_DUMP_CACHE_ENTRY;
		break;
#endif
	case 'c':
		method = HW_NAT_DUMP_ENTRY;
		entry_num = strtoll(optarg, NULL, 10);
		break;
	case 'd':
		method = HW_NAT_DEBUG;
		debug = strtoll(optarg, NULL, 10);
		break;
	case 'e':
		method = HW_NAT_GET_ALL_ENTRIES;
		args->entry_state=0; /* invalid entry */
		break;
	case 'f':
		method = HW_NAT_GET_ALL_ENTRIES;
		args->entry_state=1; /* unbinded entry */
		break;
	case 'g':
		method = HW_NAT_GET_ALL_ENTRIES;
		args->entry_state=2; /* binded entry */
		break;
#if !defined (CONFIG_HNAT_V2)
	case 'A':
		method = HW_NAT_DSCP_REMARK;
		args3.enable = strtoll(optarg, NULL, 10);
		break;
	case 'B':
		method = HW_NAT_VPRI_REMARK;
		args3.enable = strtoll(optarg, NULL, 10);
		break;
	case 'C':
		method = HW_NAT_FOE_WEIGHT;
		args3.weight = strtoll(optarg, NULL, 10);
		break;
	case 'D':
		method = HW_NAT_ACL_WEIGHT;
		args3.weight = strtoll(optarg, NULL, 10);
		break;
	case 'E':
		method = HW_NAT_DSCP_WEIGHT;
		args3.weight = strtoll(optarg, NULL, 10);
		break;
	case 'F':
		method = HW_NAT_VPRI_WEIGHT;
		args3.weight = strtoll(optarg, NULL, 10);
		break;
	case 'G':
		method = HW_NAT_DSCP_UP;
		args3.dscp_set = strtoll(argv[2], NULL, 10);
		args3.up = strtoll(argv[3], NULL, 10);
		break;
	case 'H':
		method = HW_NAT_UP_IDSCP;

		args3.up = strtoll(argv[2], NULL, 10);
		args3.dscp = strtoll(argv[3], NULL, 10);
		break;
	case 'I':
		method = HW_NAT_UP_ODSCP;
		args3.up = strtoll(argv[2], NULL, 10);
		args3.dscp = strtoll(argv[3], NULL, 10);
		break;
	case 'J':
		method = HW_NAT_UP_VPRI;
		args3.up = strtoll(argv[2], NULL, 10);
		args3.vpri = strtoll(argv[3], NULL, 10);
		break;
	case 'K':
		method = HW_NAT_UP_AC;
		args3.up = strtoll(argv[2], NULL, 10);
		args3.ac = strtoll(argv[3], NULL, 10);
		break;
	case 'L':
		method = HW_NAT_SCH_MODE;
		args3.mode = strtoll(argv[2], NULL, 10);
		break;
	case 'M':
		method = HW_NAT_SCH_WEIGHT;
		args3.weight3 = strtoll(argv[2], NULL, 10);
		args3.weight2 = strtoll(argv[3], NULL, 10);
		args3.weight1 = strtoll(argv[4], NULL, 10);
		args3.weight0 = strtoll(argv[5], NULL, 10);
		break;
#else
	case 'A':
		method = HW_NAT_GET_AC_CNT;
		args3.ag_index = strtoll(optarg, NULL, 10);
		break;
#if defined (CONFIG_PPE_MCAST)
	case 'B':
		method = HW_NAT_MCAST_INS;
		args5.mc_vid = strtoll(argv[2], NULL, 10);
		str_to_mac(mac, argv[3]);
		memcpy(args5.dst_mac, mac, sizeof(mac));
		args5.mc_px_en = strtoll(argv[4], NULL, 10);
		args5.mc_px_qos_en = strtoll(argv[5], NULL, 10);
		args5.mc_qos_qid = strtoll(argv[6], NULL, 10);
		break;
	case 'C':
		method = HW_NAT_MCAST_DEL;
		args5.mc_vid = strtoll(argv[2], NULL, 10);
		str_to_mac(mac, argv[3]);
		memcpy(args5.dst_mac, mac, sizeof(mac));
		memcpy(args5.dst_mac, mac, sizeof(mac));
		args5.mc_px_en = strtoll(argv[4], NULL, 10);
		args5.mc_px_qos_en = strtoll(argv[5], NULL, 10);
		args5.mc_qos_qid = strtoll(argv[6], NULL, 10);
		break;
	case 'D':
		method = HW_NAT_MCAST_DUMP;
		break;
#endif

#endif
	case 'N':
		method = HW_NAT_BIND_THRESHOLD;
		args4.bind_threshold = strtoll(argv[2], NULL, 10);
		break;
	case 'O':
		method = HW_NAT_MAX_ENTRY_LMT;
		args4.foe_qut_lmt = strtoll(argv[2], NULL, 10);
		args4.foe_half_lmt = strtoll(argv[3], NULL, 10);
		args4.foe_full_lmt  = strtoll(argv[4], NULL, 10);
		break;
	case 'P':
		method = HW_NAT_RULE_SIZE;
		args4.pre_acl    = strtoll(argv[2], NULL, 10);
		args4.pre_meter  = strtoll(argv[3], NULL, 10);
		args4.pre_ac     = strtoll(argv[4], NULL, 10);
		args4.post_meter = strtoll(argv[5], NULL, 10);
		args4.post_ac    = strtoll(argv[6], NULL, 10);
		break;
	case 'Q':
		method = HW_NAT_KA_INTERVAL;
		args4.foe_tcp_ka = strtoll(argv[2], NULL, 10);
		args4.foe_udp_ka = strtoll(argv[3], NULL, 10);
		break;
	case 'T':
		method = HW_NAT_UB_LIFETIME;
		args4.foe_unb_dlta = strtoll(argv[2], NULL, 10);
		break;
	case 'U':
		method = HW_NAT_BIND_LIFETIME;
		args4.foe_tcp_dlta = strtoll(argv[2], NULL, 10);
		args4.foe_udp_dlta = strtoll(argv[3], NULL, 10);
		args4.foe_fin_dlta = strtoll(argv[4], NULL, 10);
		break;
	case 'V':
		method = HW_NAT_VLAN_ID;
		args4.lan_vid = strtoll(argv[2], NULL, 10);
		args4.wan_vid = strtoll(argv[3], NULL, 10);
		break;
	case 'Z':
		method = HW_NAT_BIND_DIRECTION;
		args4.bind_dir = strtoll(optarg, NULL, 10);
		break;
	case '?':
		show_usage();

	}
    } 


    switch(method){
    case HW_NAT_GET_ALL_ENTRIES:
	    HwNatGetAllEntries(args);

	    printf("Total Entry Count = %d\n",args->num_of_entries);	
	    for(i=0;i<args->num_of_entries;i++){
		if(args->entries[i].pkt_type==0) { //IPV4_NAPT
		    printf("IPv4_NAPT=%d : %u.%u.%u.%u:%d->%u.%u.%u.%u:%d => %u.%u.%u.%u:%d->%u.%u.%u.%u:%d\n", \
			    args->entries[i].hash_index, \
			    NIPQUAD(args->entries[i].ing_sipv4), \
			    args->entries[i].ing_sp, \
			    NIPQUAD(args->entries[i].ing_dipv4), \
			    args->entries[i].ing_dp, \
			    NIPQUAD(args->entries[i].eg_sipv4), \
		            args->entries[i].eg_sp, \
		            NIPQUAD(args->entries[i].eg_dipv4), \
		            args->entries[i].eg_dp);
		} else if(args->entries[i].pkt_type==1) { //IPV4_NAT
		    printf("IPv4_NAT=%d : %u.%u.%u.%u->%u.%u.%u.%u => %u.%u.%u.%u->%u.%u.%u.%u\n", \
			    args->entries[i].hash_index, \
			    NIPQUAD(args->entries[i].ing_sipv4), \
			    NIPQUAD(args->entries[i].ing_dipv4), \
			    NIPQUAD(args->entries[i].eg_sipv4), \
			    NIPQUAD(args->entries[i].eg_dipv4)); 
		} else if(args->entries[i].pkt_type==2) { //IPV6_ROUTING
		    printf("IPv6_1T= %d /DIP: %x:%x:%x:%x:%x:%x:%x:%x\n", \
		    args->entries[i].hash_index, \
		    NIPHALF(args->entries[i].ing_dipv6_0), \
		    NIPHALF(args->entries[i].ing_dipv6_1), \
		    NIPHALF(args->entries[i].ing_dipv6_2), \
		    NIPHALF(args->entries[i].ing_dipv6_3));
		} else if(args->entries[i].pkt_type==3) { //IPV4_DSLITE
		    printf("DS-Lite= %d : %u.%u.%u.%u:%d->%u.%u.%u.%u:%d (%x:%x:%x:%x:%x:%x:%x:%x -> %x:%x:%x:%x:%x:%x:%x:%x) \n", \
			    args->entries[i].hash_index, \
			    NIPQUAD(args->entries[i].ing_sipv4),  \
			    args->entries[i].ing_sp,     \
			    NIPQUAD(args->entries[i].ing_dipv4),  \
			    args->entries[i].ing_dp, \
			    NIPHALF(args->entries[i].eg_sipv6_0), \
			    NIPHALF(args->entries[i].eg_sipv6_1), \
			    NIPHALF(args->entries[i].eg_sipv6_2), \
			    NIPHALF(args->entries[i].eg_sipv6_3), \
			    NIPHALF(args->entries[i].eg_dipv6_0), \
			    NIPHALF(args->entries[i].eg_dipv6_1), \
			    NIPHALF(args->entries[i].eg_dipv6_2), \
			    NIPHALF(args->entries[i].eg_dipv6_3));
		} else if(args->entries[i].pkt_type==4) { //IPV6_3T_ROUTE
		    printf("IPv6_3T= %d SIP: %x:%x:%x:%x:%x:%x:%x:%x DIP: %x:%x:%x:%x:%x:%x:%x:%x\n", \
		    args->entries[i].hash_index, \
		    NIPHALF(args->entries[i].ing_sipv6_0), \
		    NIPHALF(args->entries[i].ing_sipv6_1), \
		    NIPHALF(args->entries[i].ing_sipv6_2), \
		    NIPHALF(args->entries[i].ing_sipv6_3), \
		    NIPHALF(args->entries[i].ing_dipv6_0), \
		    NIPHALF(args->entries[i].ing_dipv6_1), \
		    NIPHALF(args->entries[i].ing_dipv6_2), \
		    NIPHALF(args->entries[i].ing_dipv6_3));
		} else if(args->entries[i].pkt_type==5) { //IPV6_5T_ROUTE
		    if(args->entries[i].ipv6_flowlabel==1) {
			printf("IPv6_5T= %d SIP: %x:%x:%x:%x:%x:%x:%x:%x DIP: %x:%x:%x:%x:%x:%x:%x:%x (Flow Label=%x)\n", \
				args->entries[i].hash_index, \
				NIPHALF(args->entries[i].ing_sipv6_0), \
				NIPHALF(args->entries[i].ing_sipv6_1), \
				NIPHALF(args->entries[i].ing_sipv6_2), \
				NIPHALF(args->entries[i].ing_sipv6_3), \
				NIPHALF(args->entries[i].ing_dipv6_0), \
				NIPHALF(args->entries[i].ing_dipv6_1), \
				NIPHALF(args->entries[i].ing_dipv6_2), \
				NIPHALF(args->entries[i].ing_dipv6_3), \
				((args->entries[i].ing_sp << 16) | (args->entries[i].ing_dp))&0xFFFFF);
		    }else {
			printf("IPv6_5T= %d SIP: %x:%x:%x:%x:%x:%x:%x:%x (SP:%d) DIP: %x:%x:%x:%x:%x:%x:%x:%x (DP=%d)\n", \
				args->entries[i].hash_index, \
				NIPHALF(args->entries[i].ing_sipv6_0), \
				NIPHALF(args->entries[i].ing_sipv6_1), \
				NIPHALF(args->entries[i].ing_sipv6_2), \
				NIPHALF(args->entries[i].ing_sipv6_3), \
				args->entries[i].ing_sp, \
				NIPHALF(args->entries[i].ing_dipv6_0), \
				NIPHALF(args->entries[i].ing_dipv6_1), \
				NIPHALF(args->entries[i].ing_dipv6_2), \
				NIPHALF(args->entries[i].ing_dipv6_3), \
				args->entries[i].ing_dp);
		    }

		} else if(args->entries[i].pkt_type==7) { //IPV6_6RD
		    if(args->entries[i].ipv6_flowlabel==1) {
			printf("6RD= %d %x:%x:%x:%x:%x:%x:%x:%x->%x:%x:%x:%x:%x:%x:%x:%x [Flow Label=%x]\n", \
				args->entries[i].hash_index, \
				NIPHALF(args->entries[i].ing_sipv6_0), \
				NIPHALF(args->entries[i].ing_sipv6_1), \
				NIPHALF(args->entries[i].ing_sipv6_2), \
				NIPHALF(args->entries[i].ing_sipv6_3), \
				NIPHALF(args->entries[i].ing_dipv6_0), \
				NIPHALF(args->entries[i].ing_dipv6_1), \
				NIPHALF(args->entries[i].ing_dipv6_2), \
				NIPHALF(args->entries[i].ing_dipv6_3), \
				((args->entries[i].ing_sp << 16) | (args->entries[i].ing_dp))&0xFFFFF);
				printf("(%u.%u.%u.%u->%u.%u.%u.%u)\n", NIPQUAD(args->entries[i].eg_sipv4), NIPQUAD(args->entries[i].eg_dipv4));
		    }else {
			printf("6RD= %d /SIP: %x:%x:%x:%x:%x:%x:%x:%x [SP:%d] /DIP: %x:%x:%x:%x:%x:%x:%x:%x [DP=%d]", \
				args->entries[i].hash_index, \
				NIPHALF(args->entries[i].ing_sipv6_0), \
				NIPHALF(args->entries[i].ing_sipv6_1), \
				NIPHALF(args->entries[i].ing_sipv6_2), \
				NIPHALF(args->entries[i].ing_sipv6_3), \
				args->entries[i].ing_sp, \
				NIPHALF(args->entries[i].ing_dipv6_0), \
				NIPHALF(args->entries[i].ing_dipv6_1), \
				NIPHALF(args->entries[i].ing_dipv6_2), \
				NIPHALF(args->entries[i].ing_dipv6_3), \
				args->entries[i].ing_dp); 
			printf("(%u.%u.%u.%u->%u.%u.%u.%u)\n", NIPQUAD(args->entries[i].eg_sipv4), NIPQUAD(args->entries[i].eg_dipv4));
		    }
		} else{
		    printf("unknown packet type! (pkt_type=%d) \n", args->entries[i].pkt_type);
		}
	    }
	    result = args->result;
	    break;
#if defined (CONFIG_HNAT_V2)
    case HW_NAT_DUMP_CACHE_ENTRY:
	    result = HwNatCacheDumpEntry();
	    break;
#endif
    case HW_NAT_DUMP_ENTRY:
	    result = HwNatDumpEntry(entry_num);
	    break;
    case HW_NAT_DEBUG:
	    result = HwNatDebug(debug);
	    break;
#if !defined (CONFIG_HNAT_V2)
    case HW_NAT_DSCP_REMARK:
            HwNatDscpRemarkEbl(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_VPRI_REMARK:
            HwNatVpriRemarkEbl(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_FOE_WEIGHT:
	    HwNatSetFoeWeight(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_ACL_WEIGHT:
	    HwNatSetAclWeight(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_DSCP_WEIGHT:
	    HwNatSetDscpWeight(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_VPRI_WEIGHT:
	    HwNatSetVpriWeight(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_DSCP_UP:
	    HwNatSetDscp_Up(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_UP_IDSCP:
	    HwNatSetUp_InDscp(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_UP_ODSCP:
	    HwNatSetUp_OutDscp(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_UP_VPRI:
	    HwNatSetUp_Vpri(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_UP_AC:
	    HwNatSetUp_Ac(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_SCH_MODE:
	    HwNatSetSchMode(&args3);
	    result = args3.result;
	    break;
    case HW_NAT_SCH_WEIGHT:
	    HwNatSetSchWeight(&args3);
	    result = args3.result;
	    break;
#else
    case HW_NAT_GET_AC_CNT:
	    HwNatGetAGCnt(&args3);
	    printf("Byte cnt=%d\n", args3.ag_byte_cnt);
	    printf("Pkt cnt=%d\n", args3.ag_pkt_cnt);
	    result = args3.result;
	    break;
#endif
    case HW_NAT_BIND_THRESHOLD:
	    HwNatSetBindThreshold(&args4);
	    result = args4.result;
	    break;
    case HW_NAT_MAX_ENTRY_LMT:
	    HwNatSetMaxEntryRateLimit(&args4);
	    result = args4.result;
	    break;
    case HW_NAT_RULE_SIZE:
	    HwNatSetRuleSize(&args4);
	    result = args4.result;
	    break;
    case HW_NAT_KA_INTERVAL:
	    HwNatSetKaInterval(&args4);
	    result = args4.result;
	    break;
    case HW_NAT_UB_LIFETIME:
	    HwNatSetUnbindLifeTime(&args4);
	    result = args4.result;
	    break;
    case HW_NAT_BIND_LIFETIME:
	    HwNatSetBindLifeTime(&args4);
	    result = args4.result;
	    break;
    case HW_NAT_VLAN_ID:
	    result = HwNatSetVID(&args4);
	    break;
    case HW_NAT_BIND_DIRECTION:
	    result = HwNatSetBindDir(&args4);
	    break;
#if defined (CONFIG_PPE_MCAST)
    case HW_NAT_MCAST_INS:
	    result = HwNatMcastIns(&args5);
	    break;
    case HW_NAT_MCAST_DEL:
	    result = HwNatMcastDel(&args5);
	    break;
    case HW_NAT_MCAST_DUMP:
	    result = HwNatMcastDump();
	    break;
#endif

    }

    if(result==HWNAT_SUCCESS){
	printf("done\n");
    }else if(result==HWNAT_ENTRY_NOT_FOUND) {
	printf("entry not found\n");
    }else {
	printf("fail\n");
    }

    free(args);
    return 0;
}
Example #7
0
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;
}
Example #8
0
static void
parse_options(int argc, char *argv[])
{
    char dpid_str[17];
    int dpid_len;

    enum {
        OPT_MFR_DESC = UCHAR_MAX + 1,
        OPT_HW_DESC,
        OPT_SW_DESC,
        OPT_DP_DESC,
        OPT_SERIAL_NUM,
        OPT_BOOTSTRAP_CA_CERT,
        OPT_NO_LOCAL_PORT,
        OPT_NO_SLICING,
        OPT_DP_MGMT,
        OPT_DP_MGMT_OOB,
        OPT_DP_MGMT_PORT,
        OPT_DP_MGMT_VID,
        OPT_PORT_ADD_STATE
    };

    static struct option long_options[] = {
        {"interfaces",  required_argument, 0, 'i'},
        {"local-port",  required_argument, 0, 'L'},
        {"no-local-port", no_argument, 0, OPT_NO_LOCAL_PORT},
        {"datapath-id", required_argument, 0, 'd'},
        {"mgmt-mac",    required_argument, 0, 'e'}, /* for ether addr */
        {"verbose",     optional_argument, 0, 'v'},
        {"help",        no_argument, 0, 'h'},
        {"version",     no_argument, 0, 'V'},
        {"no-slicing",  no_argument, 0, OPT_NO_SLICING},
        {"mfr-desc",    required_argument, 0, OPT_MFR_DESC},
        {"hw-desc",     required_argument, 0, OPT_HW_DESC},
        {"sw-desc",     required_argument, 0, OPT_SW_DESC},
        {"dp_desc",  required_argument, 0, OPT_DP_DESC},
        {"serial_num",  required_argument, 0, OPT_SERIAL_NUM},
        {"min-port",  required_argument, 0, 'm'},
        {"max-port",  required_argument, 0, 'M'},
        {"dp-mgmt",  no_argument, 0, OPT_DP_MGMT},
        {"dp-mgmt-oob",  no_argument, 0, OPT_DP_MGMT_OOB},
        {"dp-mgmt-port",  required_argument, 0, OPT_DP_MGMT_PORT},
        {"dp-mgmt-vid",  required_argument, 0, OPT_DP_MGMT_VID},
        {"add-port-state",  required_argument, 0, OPT_PORT_ADD_STATE},
        WATCHDOG_LONG_OPTIONS
        DAEMON_LONG_OPTIONS,
#ifdef HAVE_OPENSSL
        VCONN_SSL_LONG_OPTIONS
        {"bootstrap-ca-cert", required_argument, 0, OPT_BOOTSTRAP_CA_CERT},
#endif
        {0, 0, 0, 0},
    };
    char *short_options = long_options_to_short_options(long_options);

    for (;;) {
        int indexptr;
        int c;
        uint8_t *ea;

        c = getopt_long(argc, argv, short_options, long_options, &indexptr);
        if (c == -1) {
            break;
        }

        switch (c) {
        case 'e': /* Management mac address */
            if (str_to_mac(optarg, dp_mac) != 0) {
                printf("Warning:  Could not parse mac address %s\n", optarg);
            } else {
                got_mac = true;
            }
            ea = dp_mac;
            printf("Datapath MAC: %02x:%02x:%02x:%02x:%02x:%02x\n",
                   ea[0], ea[1], ea[2], ea[3], ea[4], ea[5]);
            break;
        case 'd':

            dpid_len = strlen(optarg);
            if (dpid_len > 16) {
                /* If leading 0, truncate left; else truncate right */
                if (optarg[0] == '0') {
                    strncpy(dpid_str, &optarg[dpid_len-16], sizeof(dpid_str));
                } else {
                    strncpy(dpid_str, optarg, sizeof(dpid_str));
                }
                dpid_str[17] = 0;
                printf("Warning:  Truncating dpid string to %s\n", dpid_str);
            } else {
                strncpy(dpid_str, optarg, sizeof(dpid_str));
            }

            if (strspn(dpid_str, "0123456789abcdefABCDEF") != 
                    strlen(dpid_str)) {
                printf("Warning:  Illegal DPID string %s. Will generate\n",
                       optarg);
            } else {
                dpid = strtoll(dpid_str, NULL, 16);
                if (dpid != 0) {
                    printf("Using dpid: %s\n", dpid_str);
                } else {
                    printf("DPID is 0.  Will generate\n");
                }
            }
            break;

        case 'h':
            usage();

        case 'V':
            printf("%s %s compiled "__DATE__" "__TIME__"\n",
                   program_name, VERSION BUILDNR);
            exit(EXIT_SUCCESS);

        case 'v':
            vlog_set_verbosity(optarg);
            break;

        case 'i':
            if (!port_list) {
                port_list = optarg;
            } else {
                port_list = xasprintf("%s,%s", port_list, optarg);
            }
            break;

        case 'L':
            local_port = optarg;
            break;

            /* Support specifying a range of ports */
        case 'm':
            min_port = strtoul(optarg, NULL, 10);
            break;
        case 'M':
            max_port = strtoul(optarg, NULL, 10);
            max_port_set = true;
            break;

#if defined(WATCHDOG_SUPPORT)
        case 'w':
            watchdog_active = 1;
            break;
#endif
        case OPT_NO_LOCAL_PORT:
            local_port = NULL;
            break;

        case OPT_MFR_DESC:
            strncpy(mfr_desc, optarg, sizeof mfr_desc);
            break;

        case OPT_HW_DESC:
            hw_desc_set = true;
            strncpy(hw_desc, optarg, sizeof hw_desc);
            break;

        case OPT_SW_DESC:
            strncpy(sw_desc, optarg, sizeof sw_desc);
            break;

        case OPT_DP_DESC:
            dp_desc_set = true;
            strncpy(dp_desc, optarg, sizeof dp_desc);
            break;

        case OPT_SERIAL_NUM:
            strncpy(serial_num, optarg, sizeof serial_num);
            break;

        case OPT_NO_SLICING:
            num_queues = 0;
            break;

        case OPT_DP_MGMT:
            dp_mgmt = true;
            break;

        case OPT_DP_MGMT_OOB:
            dp_mgmt_oob = true;
            dp_mgmt = true;
            break;

        case OPT_DP_MGMT_PORT:
            dp_mgmt_port = strtoul(optarg, NULL, 10);
            dp_mgmt_port_fixed = true;
            dp_mgmt = true;
            break;

        case OPT_DP_MGMT_VID:
            dp_mgmt_vid = strtoul(optarg, NULL, 10);
            dp_mgmt_vid_fixed = true;
            dp_mgmt = true;
            break;

        case OPT_PORT_ADD_STATE:
            port_add_state = strtoul(optarg, NULL, 10);
            if (port_add_state == PORT_ADD_STATE_DOWN) {
                printf("Warning:  Add port state is disabled\n");
            }
            break;

        DAEMON_OPTION_HANDLERS

#ifdef HAVE_OPENSSL
        VCONN_SSL_OPTION_HANDLERS

        case OPT_BOOTSTRAP_CA_CERT:
            vconn_ssl_set_ca_cert_file(optarg, true);
            break;
#endif

        case '?':
            exit(EXIT_FAILURE);

        default:
            abort();
        }
    }
    free(short_options);
}
Example #9
0
static void
parse_field_value(struct cls_rule *rule, enum field_index index,
                  const char *value)
{
    uint8_t mac[ETH_ADDR_LEN];
    ovs_be64 tun_id, tun_mask;
    ovs_be32 ip, mask;
    struct in6_addr ipv6, ipv6_mask;
    uint16_t port_no;

    switch (index) {
    case F_TUN_ID:
        str_to_tun_id(value, &tun_id, &tun_mask);
        cls_rule_set_tun_id_masked(rule, tun_id, tun_mask);
        break;

    case F_IN_PORT:
        if (!parse_port_name(value, &port_no)) {
            port_no = atoi(value);
        }
        if (port_no == OFPP_LOCAL) {
            port_no = ODPP_LOCAL;
        }
        cls_rule_set_in_port(rule, port_no);
        break;

    case F_DL_VLAN:
        cls_rule_set_dl_vlan(rule, htons(str_to_u32(value)));
        break;

    case F_DL_VLAN_PCP:
        cls_rule_set_dl_vlan_pcp(rule, str_to_u32(value));
        break;

    case F_DL_SRC:
        str_to_mac(value, mac);
        cls_rule_set_dl_src(rule, mac);
        break;

    case F_DL_DST:
        str_to_mac(value, mac);
        cls_rule_set_dl_dst(rule, mac);
        break;

    case F_DL_TYPE:
        cls_rule_set_dl_type(rule, htons(str_to_u32(value)));
        break;

    case F_NW_SRC:
        str_to_ip(value, &ip, &mask);
        cls_rule_set_nw_src_masked(rule, ip, mask);
        break;

    case F_NW_DST:
        str_to_ip(value, &ip, &mask);
        cls_rule_set_nw_dst_masked(rule, ip, mask);
        break;

    case F_NW_PROTO:
        cls_rule_set_nw_proto(rule, str_to_u32(value));
        break;

    case F_NW_TOS:
        cls_rule_set_nw_tos(rule, str_to_u32(value));
        break;

    case F_TP_SRC:
        cls_rule_set_tp_src(rule, htons(str_to_u32(value)));
        break;

    case F_TP_DST:
        cls_rule_set_tp_dst(rule, htons(str_to_u32(value)));
        break;

    case F_ICMP_TYPE:
        cls_rule_set_icmp_type(rule, str_to_u32(value));
        break;

    case F_ICMP_CODE:
        cls_rule_set_icmp_code(rule, str_to_u32(value));
        break;

    case F_ARP_SHA:
        str_to_mac(value, mac);
        cls_rule_set_arp_sha(rule, mac);
        break;

    case F_ARP_THA:
        str_to_mac(value, mac);
        cls_rule_set_arp_tha(rule, mac);
        break;

    case F_IPV6_SRC:
        str_to_ipv6(value, &ipv6, &ipv6_mask);
        cls_rule_set_ipv6_src_masked(rule, &ipv6, &ipv6_mask);
        break;

    case F_IPV6_DST:
        str_to_ipv6(value, &ipv6, &ipv6_mask);
        cls_rule_set_ipv6_dst_masked(rule, &ipv6, &ipv6_mask);
        break;

    case F_ND_TARGET:
        str_to_ipv6(value, &ipv6, NULL);
        cls_rule_set_nd_target(rule, ipv6);
        break;

    case F_ND_SLL:
        str_to_mac(value, mac);
        cls_rule_set_arp_sha(rule, mac);
        break;

    case F_ND_TLL:
        str_to_mac(value, mac);
        cls_rule_set_arp_tha(rule, mac);
        break;

    case N_FIELDS:
        NOT_REACHED();
    }
}
Example #10
0
int main(int argc, char *argv[])
{
    int opt;
    char options[] = "abcdefghklnopqryz?m:i:j:t:s:u:v:w";

    int method=-1;
    struct mtr_args args;
    struct mtr_list_args *args2;
    int result = 0;
    int i;

    if(argc < 2) {
	show_usage();
	return 0;
    }

    while ((opt = getopt (argc, argv, options)) != -1) {
	switch (opt) {
	case 'a':  
	    method=MTR_ADD_MAC_UL_ENTRY;
	    break;
	case 'b':  
	    method=MTR_ADD_MAC_DL_ENTRY;
	    break;
	case 'c': 
	    method=MTR_DEL_MAC_UL_ENTRY;
	    break;
	case 'd': 
	    method=MTR_DEL_MAC_DL_ENTRY;
	    break;
	case 'e': 
	    method=MTR_ADD_IP_UL_ENTRY;
	    break;
	case 'f': 
	    method=MTR_ADD_IP_DL_ENTRY;
	    break;
	case 'g': 
	    method=MTR_DEL_IP_UL_ENTRY;
	    break;
	case 'h': 
	    method=MTR_DEL_IP_DL_ENTRY;
	    break;
	case 'k': 
	    method=MTR_ADD_SYN_ENTRY;
	    break;
	case 'l': 
	    method=MTR_ADD_FIN_ENTRY;
	    break;
	case 'n': 
	    method=MTR_ADD_UDP_ENTRY;
	    break;
 	case 'o': 
	    method=MTR_ADD_ICMP_ENTRY;
	    break;
	case 'p': 
	    method=MTR_DEL_SYN_ENTRY;
	    break;
	case 'q': 
	    method=MTR_DEL_FIN_ENTRY;
	    break;
	case 'r': 
	    method=MTR_DEL_UDP_ENTRY;
	    break;
	case 'y': 
	    method=MTR_DEL_ICMP_ENTRY;
	    break;
	case 'z': /* CleanTbl */
	    method=MTR_CLEAN_TBL;
	    break;
	case 'm': /* Mac */
	    str_to_mac(args.mac, optarg);
	    break;
	case 'i': /* IpS */
	    str_to_ip(&args.ip_s, optarg);
	    break;
	case 'j': /* IpE */
	    str_to_ip(&args.ip_e, optarg);
	    break;
	case 't': /* TokenRate */
	    args.token_rate=strtoll(optarg, NULL, 10);
	    break;
	case 's': /* Bucket Size */
	    if(strcasecmp(optarg,"4K")==0){
		args.bk_size=0;
	    }else if(strcasecmp(optarg,"8K")==0){
		args.bk_size=1;
	    }else if(strcasecmp(optarg,"16K")==0){
		args.bk_size=2;
	    }else if(strcasecmp(optarg,"32K")==0){
		args.bk_size=3;
	    }else {
		args.bk_size=strtoll(optarg, NULL, 10);
	    }
	    break;
	case 'u':
	    if(strcasecmp(optarg,"1ms")==0){
		args.mtr_intval=_1MS;
	    }else if(strcasecmp(optarg,"10ms")==0){
		args.mtr_intval=_10MS;
	    }else if(strcasecmp(optarg,"50ms")==0){
		args.mtr_intval=_50MS;
	    }else if(strcasecmp(optarg,"100ms")==0){
		args.mtr_intval=_100MS;
	    }else if(strcasecmp(optarg,"500ms")==0){
		args.mtr_intval=_500MS;
	    }else if(strcasecmp(optarg,"1000ms")==0){
		args.mtr_intval=_1000MS;
	    }else if(strcasecmp(optarg,"5000ms")==0){
		args.mtr_intval=_5000MS;
	    }else if(strcasecmp(optarg,"10000ms")==0){
		args.mtr_intval=_10000MS;
	    }else {
		printf("Error: -u 10ms/50ms/100ms/500ms/1000ms/5000ms/10000ms\n");
		return 0;
	    }
	    break;
	case 'v':
	    if(strcasecmp(optarg,"Byte")==0){
		args.mtr_mode=0;
	    }else if(strcasecmp(optarg,"Pkt")==0){
		args.mtr_mode=1;
	    }else {
		printf("Error: -v Byte/Pkt\n");
		return 0;
	    }
	    break;
	case 'w':
	    method=MTR_GET_ALL_ENTRIES;
	    break;
	case '?': /* Help */
	    show_usage();
	    break;
	}
    } 

    switch(method) 
    {
    case MTR_ADD_MAC_UL_ENTRY:
    case MTR_ADD_MAC_DL_ENTRY:
    case MTR_DEL_MAC_UL_ENTRY:
    case MTR_DEL_MAC_DL_ENTRY:
    case MTR_ADD_IP_UL_ENTRY:
    case MTR_ADD_IP_DL_ENTRY:
    case MTR_DEL_IP_UL_ENTRY:
    case MTR_DEL_IP_DL_ENTRY:
    case MTR_CLEAN_TBL:
    case MTR_ADD_SYN_ENTRY:
    case MTR_ADD_FIN_ENTRY:
    case MTR_ADD_UDP_ENTRY:
    case MTR_ADD_ICMP_ENTRY:
    case MTR_DEL_SYN_ENTRY:
    case MTR_DEL_FIN_ENTRY:
    case MTR_DEL_UDP_ENTRY:
    case MTR_DEL_ICMP_ENTRY:
	    SetMtrEntry(&args, method);
	    result = args.result;
	    break;
    case MTR_GET_ALL_ENTRIES:
	    args2 = malloc(sizeof(struct mtr_list_args) + sizeof(struct mtr_args)*511);
	    MtrGetAllEntries(args2);
	    result = args2->result;
	    printf("Total Entry Count = %d\n", args2->num_of_entries);
	    for(i=0;i<args2->num_of_entries;i++){
		printf("#%d :MAC=%02X:%02X:%02X:%02X:%02X:%02X\n", \
			i, args2->entries[i].mac[0], args2->entries[i].mac[1], args2->entries[i].mac[2], \
			args2->entries[i].mac[3], args2->entries[i].mac[4], args2->entries[i].mac[5]);
		printf("   :SIP %u.%u.%u.%u->%u.%u.%u.%u\n\r", NIPQUAD(args2->entries[i].ip_s), NIPQUAD(args2->entries[i].ip_e));
		printf("   :BucketSize=%d Token_Rate:%d MtrInterval=%d\n", args2->entries[i].bk_size, args2->entries[i].token_rate, args2->entries[i].mtr_intval);
	    }
	    free(args2);
	    break;
    }

    if(result == MTR_TBL_FULL) {
	printf("table full\n");
    }else if(result == MTR_FAIL){
	printf("fail\n");
    }else{
	printf("done\n");
    }

    return 0;
}
Example #11
0
File: ac.c Project: 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;
}
Example #12
0
static void
parse_named_action(enum ofputil_action_code code, const struct flow *flow,
                   struct ofpbuf *b, char *arg)
{
    struct ofp_action_dl_addr *oada;
    struct ofp_action_vlan_pcp *oavp;
    struct ofp_action_vlan_vid *oavv;
    struct ofp_action_nw_addr *oana;
    struct ofp_action_tp_port *oata;

    switch (code) {
    case OFPUTIL_OFPAT_OUTPUT:
        parse_output(b, arg);
        break;

    case OFPUTIL_OFPAT_SET_VLAN_VID:
        oavv = ofputil_put_OFPAT_SET_VLAN_VID(b);
        oavv->vlan_vid = htons(str_to_u32(arg));
        break;

    case OFPUTIL_OFPAT_SET_VLAN_PCP:
        oavp = ofputil_put_OFPAT_SET_VLAN_PCP(b);
        oavp->vlan_pcp = str_to_u32(arg);
        break;

    case OFPUTIL_OFPAT_STRIP_VLAN:
        ofputil_put_OFPAT_STRIP_VLAN(b);
        break;

    case OFPUTIL_OFPAT_SET_DL_SRC:
    case OFPUTIL_OFPAT_SET_DL_DST:
        oada = ofputil_put_action(code, b);
        str_to_mac(arg, oada->dl_addr);
        break;

    case OFPUTIL_OFPAT_SET_NW_SRC:
    case OFPUTIL_OFPAT_SET_NW_DST:
        oana = ofputil_put_action(code, b);
        str_to_ip(arg, &oana->nw_addr);
        break;

    case OFPUTIL_OFPAT_SET_NW_TOS:
        ofputil_put_OFPAT_SET_NW_TOS(b)->nw_tos = str_to_u32(arg);
        break;

    case OFPUTIL_OFPAT_SET_TP_SRC:
    case OFPUTIL_OFPAT_SET_TP_DST:
        oata = ofputil_put_action(code, b);
        oata->tp_port = htons(str_to_u32(arg));
        break;

    case OFPUTIL_OFPAT_ENQUEUE:
        parse_enqueue(b, arg);
        break;

    case OFPUTIL_NXAST_RESUBMIT:
        parse_resubmit(b, arg);
        break;

    case OFPUTIL_NXAST_SET_TUNNEL:
        parse_set_tunnel(b, arg);
        break;

    case OFPUTIL_NXAST_SET_QUEUE:
        ofputil_put_NXAST_SET_QUEUE(b)->queue_id = htonl(str_to_u32(arg));
        break;

    case OFPUTIL_NXAST_POP_QUEUE:
        ofputil_put_NXAST_POP_QUEUE(b);
        break;

    case OFPUTIL_NXAST_REG_MOVE:
        nxm_parse_reg_move(ofputil_put_NXAST_REG_MOVE(b), arg);
        break;

    case OFPUTIL_NXAST_REG_LOAD:
        nxm_parse_reg_load(ofputil_put_NXAST_REG_LOAD(b), arg);
        break;

    case OFPUTIL_NXAST_NOTE:
        parse_note(b, arg);
        break;

    case OFPUTIL_NXAST_SET_TUNNEL64:
        ofputil_put_NXAST_SET_TUNNEL64(b)->tun_id = htonll(str_to_u64(arg));
        break;

    case OFPUTIL_NXAST_MULTIPATH:
        multipath_parse(ofputil_put_NXAST_MULTIPATH(b), arg);
        break;

    case OFPUTIL_NXAST_AUTOPATH:
        autopath_parse(ofputil_put_NXAST_AUTOPATH(b), arg);
        break;

    case OFPUTIL_NXAST_BUNDLE:
        bundle_parse(b, arg);
        break;

    case OFPUTIL_NXAST_BUNDLE_LOAD:
        bundle_parse_load(b, arg);
        break;

    case OFPUTIL_NXAST_RESUBMIT_TABLE:
    case OFPUTIL_NXAST_OUTPUT_REG:
        NOT_REACHED();

    case OFPUTIL_NXAST_LEARN:
        learn_parse(b, arg, flow);
        break;

    case OFPUTIL_NXAST_EXIT:
        ofputil_put_NXAST_EXIT(b);
        break;
    }
}