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; }
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; }
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; } }
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; }
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; }
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; }
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; }
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); }
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(); } }
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; }
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; }
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; } }