void NanodeUIP::get_gateway_str(char *buf) { format_ipaddr(buf, &uip_draddr); }
void NanodeUIP::get_netmask_str(char *buf) { format_ipaddr(buf, &uip_netmask); }
void NanodeUIP::get_ip_addr_str(char *buf) { format_ipaddr(buf, &uip_hostaddr); }
cmd_result_t cmd_ipfix(int unit, args_t *arg) { char *subcmd; parse_table_t pt; bcm_ipfix_config_t config; int rv, i; int port = 0; bcm_ip_t src_ip4_mask = 0, dst_ip4_mask = 0; bcm_ip_t tunnel_src_ip4_mask = 0, tunnel_dst_ip4_mask = 0; bcm_ip6_t src_ip6_mask, dst_ip6_mask; bcm_ip6_t tunnel_src_ip6_mask, tunnel_dst_ip6_mask; int enable_l2 = 0, enable_ip4 = 0, enable_ip6 = 0; int record_non_discard = 1, record_discard = 0, check_flow_end = 0; int use_l2_for_ip4 = 0, use_l2_for_ip6 = 0; int key_src_ip = 0, key_dst_ip = 0; int key_ip_prot = 0, key_ip_dscp = 0, key_ip_ecn = 0; int key_l4_src_port = 0, key_l4_dst_port = 0, key_ip6_flow = 0; int key_icmp_type = 0, key_icmp_code = 0, key_macda = 0, key_macsa = 0; int key_vlan_id = 0, key_vlan_pri = 0, key_ether_type = 0; int key_vlan_tagged = 0, key_source_port = 0; int stage = 0, dscp_idx = 0, entry_limit = 8191; int min_time = 0, max_time = 0; int max_idle_time = 32767, sample_rate = 1; char str[IP6ADDR_STR_LEN]; if (!ARG_CNT(arg)) { /* Nothing passed */ cli_out("IPFIX Deamon Status: %s.\n", (ipfix_is_running[unit]) ? "Running" : "Not Running"); cli_out("Reporting is enabled for: "); parse_mask_format(80, ipfix_report_table, ipfix_report[unit]); cli_out("Reporting is disabled for: "); parse_mask_format(80, ipfix_report_table, ipfix_report[unit] ^ ~0); cli_out("Number of records received: %d\n", ipfix_report_count[unit]); return(CMD_OK); } subcmd = ARG_GET(arg); if (subcmd == NULL) { return CMD_USAGE; } rv = BCM_E_NONE; sal_memset(src_ip6_mask, 0, sizeof(bcm_ip6_t)); sal_memset(dst_ip6_mask, 0, sizeof(bcm_ip6_t)); sal_memset(tunnel_src_ip6_mask, 0, sizeof(bcm_ip6_t)); sal_memset(tunnel_dst_ip6_mask, 0, sizeof(bcm_ip6_t)); if (!sal_strcasecmp(subcmd, "start")) { if (ipfix_is_running[unit]) { cli_out("%s: IPFIX thread already running.\n", ARG_CMD(arg)); return CMD_OK; } ipfix_report_count[unit] = 0; ipfix_is_running[unit] = 1; rv = bcm_ipfix_export_fifo_control(unit, 1000000); if (rv < 0) { cli_out("%s: ERROR: %s\n", ARG_CMD(arg), bcm_errmsg(rv)); return CMD_FAIL; } rv = bcm_ipfix_register(unit, _ipfix_callback, NULL); } else if (!sal_strcasecmp(subcmd, "stop")) { if (!ipfix_is_running[unit]) { cli_out("%s: ERROR: IPFIX thread already stopped.\n", ARG_CMD(arg)); return CMD_FAIL; } ipfix_is_running[unit] = 0; rv = bcm_ipfix_export_fifo_control(unit, 0); if (rv < 0) { cli_out("%s: ERROR: %s\n", ARG_CMD(arg), bcm_errmsg(rv)); return CMD_FAIL; } rv = bcm_ipfix_unregister(unit, _ipfix_callback, NULL); } else if (!sal_strcasecmp(subcmd, "set")) { parse_table_init(unit, &pt); parse_table_add(&pt, "Port", PQ_DFL | PQ_INT, (void *)-1, &port, 0); parse_table_add(&pt, "Stage", PQ_DFL | PQ_INT, (void *)0, &stage, 0); parse_table_add(&pt, "EnableL2", PQ_DFL | PQ_INT, (void *)0, &enable_l2, 0); parse_table_add(&pt, "EnableIp4", PQ_DFL | PQ_INT, (void *)0, &enable_ip4, 0); parse_table_add(&pt, "EnableIp6", PQ_DFL | PQ_INT, (void *)0, &enable_ip6, 0); parse_table_add(&pt, "RecordNonDiscard", PQ_DFL | PQ_INT, (void *)0, &record_non_discard, 0); parse_table_add(&pt, "RecordDiscard", PQ_DFL | PQ_INT, (void *)0, &record_discard, 0); parse_table_add(&pt, "CheckFlowEnd", PQ_DFL | PQ_INT, (void *)0, &check_flow_end, 0); parse_table_add(&pt, "UseL2ForIp4", PQ_DFL | PQ_INT, (void *)0, &use_l2_for_ip4, 0); parse_table_add(&pt, "UseL2ForIp6", PQ_DFL | PQ_INT, (void *)0, &use_l2_for_ip6, 0); parse_table_add(&pt, "KeySrcIp", PQ_DFL | PQ_INT, (void *)0, &key_src_ip, 0); parse_table_add(&pt, "KeyIpProt", PQ_DFL | PQ_INT, (void *)0, &key_ip_prot, 0); parse_table_add(&pt, "KeyIpDscp", PQ_DFL | PQ_INT, (void *)0, &key_ip_dscp, 0); parse_table_add(&pt, "KeyIpEcn", PQ_DFL | PQ_INT, (void *)0, &key_ip_ecn, 0); parse_table_add(&pt, "KeyDstIp", PQ_DFL | PQ_INT, (void *)0, &key_dst_ip, 0); parse_table_add(&pt, "KeyIpEcn", PQ_DFL | PQ_INT, (void *)0, &key_ip_ecn, 0); parse_table_add(&pt, "KeyL4SrcPort", PQ_DFL | PQ_INT, (void *)0, &key_l4_src_port, 0); parse_table_add(&pt, "KeyL4DstPort", PQ_DFL | PQ_INT, (void *)0, &key_l4_dst_port, 0); parse_table_add(&pt, "KeyIp6Flow", PQ_DFL | PQ_INT, (void *)0, &key_ip6_flow, 0); parse_table_add(&pt, "KeyIcmpType", PQ_DFL | PQ_INT, (void *)0, &key_icmp_type, 0); parse_table_add(&pt, "KeyIcmpCode", PQ_DFL | PQ_INT, (void *)0, &key_icmp_code, 0); parse_table_add(&pt, "KeyMacDa", PQ_DFL | PQ_INT, (void *)0, &key_macda, 0); parse_table_add(&pt, "KeyMacSa", PQ_DFL | PQ_INT, (void *)0, &key_macsa, 0); parse_table_add(&pt, "KeyVlanId", PQ_DFL | PQ_INT, (void *)0, &key_vlan_id, 0); parse_table_add(&pt, "KeyVlanPri", PQ_DFL | PQ_INT, (void *)0, &key_vlan_pri, 0); parse_table_add(&pt, "KeyEtherType", PQ_DFL | PQ_INT, (void *)0, &key_ether_type, 0); parse_table_add(&pt, "KeyVlanTagged", PQ_DFL | PQ_INT, (void *)0, &key_vlan_tagged, 0); parse_table_add(&pt, "KeySourcePort", PQ_DFL | PQ_INT, (void *)0, &key_source_port, 0); parse_table_add(&pt, "Ip4SrcMask", PQ_DFL | PQ_IP, 0, &src_ip4_mask, 0); parse_table_add(&pt, "Ip4DstMask", PQ_DFL | PQ_IP, 0, &dst_ip4_mask, 0); parse_table_add(&pt, "TunnelIp4SrcMask", PQ_DFL | PQ_IP, 0, &tunnel_src_ip4_mask, 0); parse_table_add(&pt, "TunnelIp4DstMask", PQ_DFL | PQ_IP, 0, &tunnel_dst_ip4_mask, 0); parse_table_add(&pt, "Ip6SrcMask", PQ_DFL | PQ_IP6, 0, &src_ip6_mask, 0); parse_table_add(&pt, "Ip6DstMask", PQ_DFL | PQ_IP6, 0, &dst_ip6_mask, 0); parse_table_add(&pt, "TunnelIp6SrcMask", PQ_DFL | PQ_IP6, 0, &tunnel_src_ip6_mask, 0); parse_table_add(&pt, "TunnelIp6DstMask", PQ_DFL | PQ_IP6, 0, &tunnel_dst_ip6_mask, 0); parse_table_add(&pt, "DscpMap", PQ_DFL | PQ_MULTI, 0, &dscp_idx, dscp_names); parse_table_add(&pt, "Limit", PQ_DFL | PQ_INT, (void *)0, &entry_limit, 0); parse_table_add(&pt, "MinTime", PQ_DFL | PQ_INT, (void *)0, &min_time, 0); parse_table_add(&pt, "MaxTime", PQ_DFL | PQ_INT, (void *)0, &max_time, 0); parse_table_add(&pt, "MaxIdleTime", PQ_DFL | PQ_INT, (void *)0, &max_idle_time, 0); parse_table_add(&pt, "SampleRate", PQ_DFL | PQ_INT, (void *)0, &sample_rate, 0); if (parse_arg_eq(arg, &pt) < 0) { parse_arg_eq_done(&pt); return CMD_USAGE; } parse_arg_eq_done(&pt); sal_memset(&config, 0, sizeof(config)); config.flags |= enable_l2 ? BCM_IPFIX_CONFIG_ENABLE_NON_IP : 0; config.flags |= enable_ip4 ? BCM_IPFIX_CONFIG_ENABLE_IP4 : 0; config.flags |= enable_ip6 ? BCM_IPFIX_CONFIG_ENABLE_IP6 : 0; config.flags |= check_flow_end ? BCM_IPFIX_CONFIG_TCP_END_DETECT : 0; config.flags |= record_non_discard ? BCM_IPFIX_CONFIG_RECORD_NON_DISCARD_PKT : 0; config.flags |= record_discard ? BCM_IPFIX_CONFIG_RECORD_DISCARD_PKT : 0; config.flags |= use_l2_for_ip4 ? BCM_IPFIX_CONFIG_KEY_IP4_USE_L2 : 0; config.flags |= use_l2_for_ip6 ? BCM_IPFIX_CONFIG_KEY_IP6_USE_L2 : 0; config.flags |= key_src_ip ? BCM_IPFIX_CONFIG_KEY_SRC_IP : 0; config.flags |= key_dst_ip ? BCM_IPFIX_CONFIG_KEY_DST_IP : 0; config.flags |= key_ip_prot ? BCM_IPFIX_CONFIG_KEY_IP_PROT : 0; config.flags |= key_ip_dscp ? BCM_IPFIX_CONFIG_KEY_IP_DSCP : 0; config.flags |= key_ip_ecn ? BCM_IPFIX_CONFIG_KEY_IP_ECN : 0; config.flags |= key_l4_src_port ? BCM_IPFIX_CONFIG_KEY_L4_SRC_PORT : 0; config.flags |= key_l4_dst_port ? BCM_IPFIX_CONFIG_KEY_L4_DST_PORT : 0; config.flags |= key_ip6_flow ? BCM_IPFIX_CONFIG_KEY_IP6_FLOW : 0; config.flags |= key_icmp_type ? BCM_IPFIX_CONFIG_KEY_ICMP_TYPE : 0; config.flags |= key_icmp_code ? BCM_IPFIX_CONFIG_KEY_ICMP_CODE : 0; config.flags |= key_macda ? BCM_IPFIX_CONFIG_KEY_MACDA : 0; config.flags |= key_macsa ? BCM_IPFIX_CONFIG_KEY_MACSA : 0; config.flags |= key_vlan_id ? BCM_IPFIX_CONFIG_KEY_VLAN_ID : 0; config.flags |= key_vlan_pri ? BCM_IPFIX_CONFIG_KEY_VLAN_PRI : 0; config.flags |= key_ether_type ? BCM_IPFIX_CONFIG_KEY_ETHER_TYPE : 0; config.flags |= key_vlan_tagged ? BCM_IPFIX_CONFIG_KEY_VLAN_TAGGED : 0; config.flags |= key_source_port ? BCM_IPFIX_CONFIG_KEY_SOURCE_PORT_OR_INTERFACE : 0; if (dscp_idx == 0) { for (i = 0; i < 64; i++) { config.dscp_mask[i] = i; } } else { for (i = 0; i < 64; i++) { config.dscp_mask[i] = 0; } } config.src_ip4_mask = src_ip4_mask; config.dst_ip4_mask = dst_ip4_mask; config.tunnel_src_ip4_mask = tunnel_src_ip4_mask; config.tunnel_dst_ip4_mask = tunnel_dst_ip4_mask; SAL_IP6_ADDR_TO_UINT32(src_ip6_mask, (uint32 *)config.src_ip6_mask); SAL_IP6_ADDR_TO_UINT32(dst_ip6_mask, (uint32 *)config.dst_ip6_mask); SAL_IP6_ADDR_TO_UINT32(tunnel_src_ip6_mask, (uint32 *)config.tunnel_src_ip6_mask); SAL_IP6_ADDR_TO_UINT32(tunnel_dst_ip6_mask, (uint32 *)config.tunnel_dst_ip6_mask); config.entry_limit = entry_limit; config.min_time = min_time; config.max_time = max_time; config.max_idle_time = max_idle_time; config.sample_rate = sample_rate; rv = bcm_ipfix_config_set(unit, stage, port, &config); } else if (!sal_strcasecmp(subcmd, "get")) { parse_table_init(unit, &pt); parse_table_add(&pt, "Port", PQ_DFL | PQ_INT, (void *)-1, &port, 0); parse_table_add(&pt, "Stage", PQ_DFL | PQ_INT, (void *)0, &stage, 0); if (parse_arg_eq(arg, &pt) < 0) { parse_arg_eq_done(&pt); return CMD_USAGE; } parse_arg_eq_done(&pt); rv = bcm_ipfix_config_get(unit, stage, port, &config); if (rv >= 0) { if (config.flags & BCM_IPFIX_CONFIG_ENABLE_NON_IP) { cli_out("BCM_IPFIX_CONFIG_ENABLE_NON_IP\n"); } if (config.flags & BCM_IPFIX_CONFIG_ENABLE_IP4) { cli_out("BCM_IPFIX_CONFIG_ENABLE_IP4\n"); } if (config.flags & BCM_IPFIX_CONFIG_ENABLE_IP6) { cli_out("BCM_IPFIX_CONFIG_ENABLE_IP6\n"); } if (config.flags & BCM_IPFIX_CONFIG_TCP_END_DETECT) { cli_out("BCM_IPFIX_CONFIG_TCP_END_DETECT\n"); } if (config.flags & BCM_IPFIX_CONFIG_RECORD_NON_DISCARD_PKT) { cli_out("BCM_IPFIX_CONFIG_RECORD_NON_DISCARD_PKT\n"); } if (config.flags & BCM_IPFIX_CONFIG_RECORD_DISCARD_PKT) { cli_out("BCM_IPFIX_CONFIG_RECORD_DISCARD_PKT\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_IP4_USE_L2) { cli_out("BCM_IPFIX_CONFIG_KEY_IP4_USE_L2\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_IP6_USE_L2) { cli_out("BCM_IPFIX_CONFIG_KEY_IP6_USE_L2\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_SRC_IP) { cli_out("BCM_IPFIX_CONFIG_KEY_SRC_IP\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_DST_IP) { cli_out("BCM_IPFIX_CONFIG_KEY_DST_IP\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_IP_PROT) { cli_out("BCM_IPFIX_CONFIG_KEY_IP_PROT\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_IP_DSCP) { cli_out("BCM_IPFIX_CONFIG_KEY_IP_DSCP\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_IP_ECN) { cli_out("BCM_IPFIX_CONFIG_KEY_IP_ECN\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_L4_SRC_PORT) { cli_out("BCM_IPFIX_CONFIG_KEY_L4_SRC_PORT\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_L4_DST_PORT) { cli_out("BCM_IPFIX_CONFIG_KEY_L4_DST_PORT\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_IP6_FLOW) { cli_out("BCM_IPFIX_CONFIG_KEY_IP6_FLOW\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_ICMP_TYPE) { cli_out("BCM_IPFIX_CONFIG_KEY_ICMP_TYPE\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_ICMP_CODE) { cli_out("BCM_IPFIX_CONFIG_KEY_ICMP_CODE\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_MACDA) { cli_out("BCM_IPFIX_CONFIG_KEY_MACDA\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_MACSA) { cli_out("BCM_IPFIX_CONFIG_KEY_MACSA\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_VLAN_ID) { cli_out("BCM_IPFIX_CONFIG_KEY_VLAN_ID\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_VLAN_PRI) { cli_out("BCM_IPFIX_CONFIG_KEY_VLAN_PRI\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_ETHER_TYPE) { cli_out("BCM_IPFIX_CONFIG_KEY_ETHER_TYPE\n"); } if (config.flags & BCM_IPFIX_CONFIG_KEY_VLAN_TAGGED) { cli_out("BCM_IPFIX_CONFIG_KEY_VLAN_TAGGED\n"); } if (config.flags & BCM_IPFIX_CONFIG_TCP_FLAGS_LAST) { cli_out("BCM_IPFIX_CONFIG_TCP_FLAGS_LAST\n"); } cli_out("entry_limit=%d min_time=%d max_time=%d\n", config.entry_limit, config.min_time, config.max_time); cli_out("max_idle_time=%d sample_rate=%d\n", config.max_idle_time, config.sample_rate); format_ipaddr(str, config.src_ip4_mask); cli_out("src_ip4_mask %s\n", str); format_ipaddr(str, config.dst_ip4_mask); cli_out("dst_ip4_mask %s\n", str); format_ip6addr(str, config.src_ip6_mask); cli_out("src_ip6_mask %s\n", str); format_ip6addr(str, config.dst_ip6_mask); cli_out("dst_ip6_mask %s\n", str); } } else if (!sal_strcasecmp(subcmd, "report")) { if (ARG_CNT(arg)) { while ((subcmd = ARG_CUR(arg)) != NULL && !parse_mask(subcmd, ipfix_report_table, &ipfix_report[unit])) { ARG_NEXT(arg); /* Bump arg if matched report */ } } else { /* Print values */ cli_out("IPFIX Reporting on for: "); parse_mask_format(50, ipfix_report_table, ipfix_report[unit]); cli_out("IPFIX Reporting off for: "); parse_mask_format(50, ipfix_report_table, ~ipfix_report[unit]); } } else { return CMD_USAGE; } if (rv < 0) { cli_out("%s: ERROR: %s\n", ARG_CMD(arg), bcm_errmsg(rv)); return CMD_FAIL; } return CMD_OK; }
cmd_result_t cmd_if_config(int u, args_t *a) /* * Function: if_config * Purpose: Perform a variety of configuration functions on an interface. * Parameters: u - unit number to act on. * a - Parameters. * Returns: CMD_USAGE/CMD_FAIL/CMD_OK. */ { if_soc_t *ifs; int interface; cmd_result_t rv; if_soc_t newif; #if VX_VERSION == 66 || VX_VERSION == 68 char gw_cfg_str[32]; #endif /* * Just dump all of our information. */ if (0 == ARG_CNT(a)) { if_dump_table(u, -1, FALSE); return(CMD_OK); } /* Pick up interface number */ if (!isint(ARG_CUR(a))) { cli_out("%s: Invalid interface number: %s\n", ARG_CMD(a), ARG_CUR(a)); return(CMD_FAIL); } interface = parse_integer(ARG_GET(a)); if (interface >= MAX_INTERFACE) { cli_out("%s: ERROR: Interface # too high, only permitted %d\n", ARG_CMD(a), MAX_INTERFACE); return(CMD_FAIL); } /* If no parameters left now, display information on the port */ if (0 == ARG_CNT(a)) { if_dump_table(u, interface, TRUE); return(CMD_OK); } if (if_table[u] == NULL) { sal_memset(&newif, 0, sizeof(newif)); ifs = &newif; } else { ifs = &if_table[u][interface]; } ifs->ifs_net_name = SOC_END_NAME; ifs->ifs_net_interface = interface; /* Check for UP/DOWN */ if (sal_strcasecmp("up", _ARG_CUR(a)) == 0) { ARG_NEXT(a); /* Passed UP */ if (ifs->ifs_sal) { cli_out("%s: ERROR: Interface %d already running\n", ARG_CMD(a), interface); return(CMD_FAIL); } /* Parse the Parameters and try to configure the device */ if (CMD_OK != (rv = if_config_parse(u, ifs, a))) { return(rv); } if (ARG_CNT(a)) { return(CMD_USAGE); } ifs->ifs_sal = sal_if_config(ARG_CMD(a), u, ifs->ifs_net_name, ifs->ifs_net_interface, ifs->ifs_net_host, ifs->ifs_net_mac, ifs->ifs_net_vlan, ifs->ifs_net_ip, ifs->ifs_net_mask); if (ifs->ifs_sal == NULL) { return CMD_FAIL; } if (if_table[u] == NULL) { if_table[u] = sal_alloc(sizeof(*ifs) * MAX_INTERFACE, "if_table"); if (if_table[u] == NULL) { cli_out("%s: ERROR: cannot allocate interface table\n", ARG_CMD(a)); return CMD_FAIL; } sal_memset(if_table[u], 0, sizeof(*ifs) * MAX_INTERFACE); if_table[u][interface] = *ifs; } /* Add default gateway */ if (ifs->ifs_gateway != 0) { char gateway_str[SAL_IPADDR_STR_LEN]; format_ipaddr(gateway_str, ifs->ifs_gateway); #if VX_VERSION == 66 || VX_VERSION == 68 sprintf(gw_cfg_str, "add default %s", gateway_str); LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "Default gateway: %s\n"), gw_cfg_str)); if (ERROR == routec(gw_cfg_str)) { cli_out("Warning: Failed to add default route gatway = %s\n", gateway_str); } #else #ifdef VXWORKS_NETWORK_STACK_6_5 #ifdef VXWORKS_NETWORK_STACK_FIXME_SHOW #error VXWORKS_NETWORK_STACK_FIXME_SHOW #endif #else if (OK != routeAdd("0.0.0.0", gateway_str)) { cli_out("Warning: Failed to add default route gatway = %s\n", gateway_str); } #endif /* VXWORKS_NETWORK_STACK_6_5 */ #endif } return CMD_OK; } else if (sal_strcasecmp("down", _ARG_CUR(a)) == 0) { ARG_NEXT(a); #if VX_VERSION == 66 || VX_VERSION == 68 if (ifs->ifs_gateway != 0) { char gateway_str[SAL_IPADDR_STR_LEN]; format_ipaddr(gateway_str, ifs->ifs_gateway); sprintf(gw_cfg_str, "delete default %s", gateway_str); if (OK != routec(gw_cfg_str)) { cli_out("Warning: Failed to delete default route gatway = %s\n", gateway_str); } } #endif /* VX_VERSION == 66 || VX_VERSION == 68 */ if (!ifs->ifs_sal) { cli_out("%s: Interface %d not running\n", ARG_CMD(a), interface); return(CMD_FAIL); } if (sal_if_deconfig(ARG_CMD(a), ifs->ifs_sal, ifs->ifs_net_name, ifs->ifs_net_interface)) { ifs->ifs_sal = NULL; return CMD_FAIL; } ifs->ifs_sal = NULL; return CMD_OK; } cli_out("%s: ERROR: Invalid option %s: [up|down] expected\n", ARG_CMD(a), ARG_CUR(a)); return(CMD_USAGE); }
static void * sal_if_config(char *pfx, int u, char *if_name, int if_unit, char *if_host, sal_mac_addr_t if_mac, int if_vlan, sal_ip_addr_t if_ip, sal_ip_addr_t if_netmask) /* * Function: sal_if_config * Purpose: Configure a network device (load driver and start) * Parameters: pfx - string printed for error messages. * name - device name ("sn" for "sn0") * unit - unint number (0 for "sn0") * Returns: NULL - failed * !NULL - opaque pointer. */ { #ifdef INCLUDE_DRIVERS extern END_OBJ *socend_load(char *is, void *); char if_name_str[END_NAME_MAX]; char if_init_str[64]; char if_ip_str[SAL_IPADDR_STR_LEN]; char if_mac_str[SAL_MACADDR_STR_LEN]; END_OBJ *eo; /* END object */ #if VX_VERSION == 64 || VX_VERSION == 65 || VX_VERSION == 66 || VX_VERSION == 68 #else M2_INTERFACETBL m2; #endif #if VX_VERSION == 66 || VX_VERSION == 68 char if_cfg_str[256]; char if_mask_str[SAL_IPADDR_STR_LEN]; #endif SAL_MAP_NETUNIT(if_unit); LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "%s: sal_if_config *** if_name=%s if_unit=%d\n"), pfx, if_name, if_unit)); /* Build vxWorks device name */ sprintf(if_name_str, "%s%d", if_name, if_unit); /* Check to see if end device already loaded */ if (NULL == (eo = endFindByName(if_name, if_unit))) { LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "%s: End device not loaded: if %s if_unit %d\n"), pfx, if_name, if_unit)); format_macaddr(if_mac_str, if_mac); sprintf(if_init_str, "%d:%s:%d", u, if_mac_str, if_vlan); if (NULL == (eo = muxDevLoad(if_unit, socend_load, if_init_str, 0, NULL))) { cli_out("%s: muxDevLoad failed: Unit %d\n", pfx, u); return(NULL); } LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "%s: muxDevLoad successful: 0x%x\n"), pfx, (int)eo)); if (ERROR == muxDevStart(eo)) { cli_out("%s: muxDevStart failed: Unit %d\n", pfx, u); (void)muxDevUnload(if_name, if_unit); return(NULL); } LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "%s: muxDevStart successful: 0x%x\n"), pfx, (int)eo)); } #if VX_VERSION == 64 || VX_VERSION == 65 || VX_VERSION == 66 || VX_VERSION == 68 #else /* * Configure device.... */ if (OK != muxIoctl(eo, EIOCGMIB2, (caddr_t)&m2)) { cli_out("%s: muxIoctl failed: Unit %d\n", pfx, u); (void)sal_if_do_deconfig(pfx, eo, if_name, if_unit); return(NULL); } LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "%s: muxIOCTL successful: Unit %d\n"), pfx, u)); #endif /* VX_VERSION */ /* * Setup interface in following order: * [1] Attach TCP/IP to END device * [2] Set Netmask (if non-0) * [3] Set IP address * [4] Set host name associated with interface (if given). */ if (OK != ipAttach(if_unit, if_name)) { /* [1] */ cli_out("%s: ipAttach failed: Unit %d (interface %s)\n", pfx, u, if_name_str); (void)sal_if_do_deconfig(pfx, eo, if_name, if_unit); return(NULL); } LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "%s: ipAttach successful: if_name %s if_unit %d\n"), pfx, if_name, if_unit)); #if VX_VERSION == 66 || VX_VERSION == 68 format_ipaddr(if_ip_str, if_ip); /* [3] */ if (0 != if_netmask) { /* [2] */ format_ipaddr(if_mask_str, if_netmask); /* [3] */ } sprintf(if_cfg_str, "%s up inet add %s netmask %s", if_name_str, if_ip_str, if_mask_str); if (ERROR == ifconfig(if_cfg_str)) { cli_out("%s: ifconfig failed: %s%d: %s\n", pfx, if_name, if_unit, if_cfg_str); (void)sal_if_do_deconfig(pfx, eo, if_name, if_unit); return(NULL); } LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "%s: ifconfig: if %s, cfg str %s\n"), pfx, if_name_str, if_cfg_str)); #else if (0 != if_netmask) { /* [2] */ #ifdef VXWORKS_NETWORK_STACK_6_5 #ifdef VXWORKS_NETWORK_STACK_FIXME_SHOW #error VXWORKS_NETWORK_STACK_FIXME #endif #else if (ERROR == ifMaskSet(if_name_str, if_netmask)) { cli_out("%s: ifMaskSet failed: %s 0x%x\n", pfx, if_name_str, if_netmask); (void)sal_if_do_deconfig(pfx, eo, if_name, if_unit); return(NULL); } #endif } format_ipaddr(if_ip_str, if_ip); /* [3] */ #ifdef VXWORKS_NETWORK_STACK_6_5 #ifdef VXWORKS_NETWORK_STACK_FIXME_SHOW #error VXWORKS_NETWORK_STACK_FIXME #endif #else if (OK != ifAddrSet(if_name_str, (char *)if_ip_str)) { cli_out("%s: ifAddrSet failed: %s <-- %s\n", pfx, if_name, if_ip_str); (void)sal_if_do_deconfig(pfx, eo, if_name, if_unit); return(NULL); } #endif LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "%s: ifAddrSet successful: if %s\n"), pfx, if_name_str)); #endif if (if_host && *if_host) { /* [4] */ LOG_INFO(BSL_LS_APPL_END, (BSL_META_U(u, "%s: Setting hostname: %s\n"), pfx, if_host)); if (OK != hostAdd (if_host, if_ip_str)) { cli_out("%s: Warning: Failed to set hostname %s for device %s\n", pfx, if_host, if_name_str); } } return((void *)eo); /* This is our opaque value */ #else /* !defined(INCLUDE_DRIVERS) */ cli_out("sal_if_config: Interface configuration not compiled in\n"); return(NULL); #endif /* !defined(INCLUDE_DRIVERS) */ }