| /* |
| * Copyright (c) 2013, 2015-2017, 2019, The Linux Foundation. All rights reserved. |
| * |
| * Permission to use, copy, modify, and/or distribute this software for any |
| * purpose with or without fee is hereby granted, provided that the above |
| * copyright notice and this permission notice appear in all copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| //#include <stdio.h> |
| #include "shell_io.h" |
| #include "shell.h" |
| |
| #define SW_RTN_ON_NULL_PARAM(rtn) \ |
| do { if ((rtn) == NULL) return SW_BAD_PARAM; } while(0); |
| |
| #define DEFAULT_FLAG "default" |
| static char **full_cmdstrp; |
| static int talk_mode = 1; |
| |
| #define cmd_data_check_element(info, defval, usage, chk_func, param) \ |
| {\ |
| sw_error_t ret;\ |
| do {\ |
| cmd = get_sub_cmd(info, defval);\ |
| SW_RTN_ON_NULL_PARAM(cmd);\ |
| \ |
| if (!strncasecmp(cmd, "quit", 4)) {\ |
| return SW_BAD_VALUE;\ |
| } else if (!strncasecmp(cmd, "help", 4)) {\ |
| ret = SW_BAD_VALUE;\ |
| } else {\ |
| ret = chk_func param; \ |
| }\ |
| } while (talk_mode && (SW_OK != ret));\ |
| } |
| |
| int |
| get_talk_mode(void) |
| { |
| return talk_mode ; |
| } |
| |
| void |
| set_talk_mode(int mode) |
| { |
| talk_mode = mode; |
| } |
| |
| char ** full_cmdstrp_bak; |
| |
| void |
| set_full_cmdstrp(char **cmdstrp) |
| { |
| full_cmdstrp = cmdstrp; |
| full_cmdstrp_bak = cmdstrp; |
| } |
| |
| int |
| get_jump(void) |
| { |
| return (full_cmdstrp-full_cmdstrp_bak); |
| } |
| |
| static char * |
| get_cmd_buf(char *tag, char *defval) |
| { |
| if(!full_cmdstrp || !(*full_cmdstrp)) |
| { |
| return NULL; |
| } |
| |
| if (!strcasecmp(*(full_cmdstrp), DEFAULT_FLAG)) |
| { |
| full_cmdstrp++; |
| return defval; |
| } |
| else |
| { |
| return *(full_cmdstrp++); |
| } |
| } |
| |
| static char * |
| get_sub_cmd(char *tag, char *defval) |
| { |
| return get_cmd_buf(tag, defval); |
| } |
| |
| |
| static inline a_bool_t |
| is_hex(char c) |
| { |
| if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') |
| || (c >= 'A' && c <= 'F')) |
| return A_TRUE; |
| |
| return A_FALSE; |
| } |
| |
| static inline a_bool_t |
| is_dec(char c) |
| { |
| if ((c >= '0') && (c <= '9')) |
| return A_TRUE; |
| |
| return A_FALSE; |
| } |
| |
| static sw_data_type_t sw_data_type[] = |
| { |
| SW_TYPE_DEF(SW_UINT8, (param_check_t)cmd_data_check_uint8, NULL), |
| SW_TYPE_DEF(SW_INT8, NULL, NULL), |
| SW_TYPE_DEF(SW_UINT16, (param_check_t)cmd_data_check_uint16, NULL), |
| SW_TYPE_DEF(SW_INT16, NULL, NULL), |
| SW_TYPE_DEF(SW_UINT32, cmd_data_check_uint32, NULL), |
| SW_TYPE_DEF(SW_INT32, NULL, NULL), |
| SW_TYPE_DEF(SW_UINT64, NULL, NULL), |
| SW_TYPE_DEF(SW_INT64, NULL, NULL), |
| #ifdef IN_PORTCONTROL |
| SW_TYPE_DEF(SW_DUPLEX, cmd_data_check_duplex, NULL), |
| SW_TYPE_DEF(SW_SPEED, cmd_data_check_speed, NULL), |
| SW_TYPE_DEF(SW_CAP, cmd_data_check_capable, NULL), |
| #ifndef IN_PORTCONTROL_MINI |
| SW_TYPE_DEF(SW_PORT_EEE_CONFIG, (param_check_t)cmd_data_check_port_eee_config, NULL), |
| SW_TYPE_DEF(SW_PORT_LOOPBACK_CONFIG, (param_check_t)cmd_data_check_switch_port_loopback_config, NULL), |
| #endif |
| #endif |
| #ifdef IN_PORTVLAN |
| SW_TYPE_DEF(SW_1QMODE, cmd_data_check_1qmode, NULL), |
| SW_TYPE_DEF(SW_EGMODE, cmd_data_check_egmode, NULL), |
| #endif |
| #ifdef IN_MIB |
| SW_TYPE_DEF(SW_MIB, NULL, NULL), |
| SW_TYPE_DEF(SW_MIB_CNTR, NULL, NULL), |
| SW_TYPE_DEF(SW_XGMIB, NULL, NULL), |
| #endif |
| #ifdef IN_VLAN |
| SW_TYPE_DEF(SW_VLAN, (param_check_t)cmd_data_check_vlan, NULL), |
| #endif |
| SW_TYPE_DEF(SW_PBMP, cmd_data_check_pbmp, NULL), |
| SW_TYPE_DEF(SW_ENABLE, cmd_data_check_enable, NULL), |
| SW_TYPE_DEF(SW_MACADDR, (param_check_t)cmd_data_check_macaddr, NULL), |
| #ifdef IN_FDB |
| SW_TYPE_DEF(SW_FDBENTRY, (param_check_t)cmd_data_check_fdbentry, NULL), |
| #ifndef IN_FDB_MINI |
| SW_TYPE_DEF(SW_MACLIMIT_CTRL, (param_check_t)cmd_data_check_maclimit_ctrl, NULL), |
| #endif |
| #endif |
| #ifdef IN_QOS |
| #ifndef IN_QOS_MINI |
| SW_TYPE_DEF(SW_SCH, cmd_data_check_qos_sch, NULL), |
| SW_TYPE_DEF(SW_QOS, cmd_data_check_qos_pt, NULL), |
| #endif |
| #ifndef IN_QOS_MINI |
| SW_TYPE_DEF(SW_PORTGROUP, (param_check_t)cmd_data_check_port_group, NULL), |
| SW_TYPE_DEF(SW_PORTPRI, (param_check_t)cmd_data_check_port_pri, NULL), |
| SW_TYPE_DEF(SW_PORTREMARK, (param_check_t)cmd_data_check_port_remark, NULL), |
| SW_TYPE_DEF(SW_COSMAP, (param_check_t)cmd_data_check_cosmap, NULL), |
| SW_TYPE_DEF(SW_SCHEDULER, (param_check_t)cmd_data_check_queue_scheduler, NULL), |
| SW_TYPE_DEF(SW_QUEUEBMP, (param_check_t)cmd_data_check_ring_queue, NULL), |
| #endif |
| #endif |
| #ifdef IN_RATE |
| SW_TYPE_DEF(SW_STORM, cmd_data_check_storm, NULL), |
| #endif |
| #ifdef IN_STP |
| SW_TYPE_DEF(SW_STP, cmd_data_check_stp_state, NULL), |
| #endif |
| #ifdef IN_LEAKY |
| SW_TYPE_DEF(SW_LEAKY, cmd_data_check_leaky, NULL), |
| #endif |
| SW_TYPE_DEF(SW_MACCMD, cmd_data_check_maccmd, NULL), |
| #ifdef IN_IP |
| #ifndef IN_IP_MINI |
| SW_TYPE_DEF(SW_FLOWCMD, cmd_data_check_flowcmd, NULL), |
| SW_TYPE_DEF(SW_FLOWTYPE, cmd_data_check_flowtype, NULL), |
| #endif |
| #endif |
| SW_TYPE_DEF(SW_UINT_A, cmd_data_check_uinta, NULL), |
| #ifdef IN_ACL |
| SW_TYPE_DEF(SW_ACLRULE, NULL, NULL), |
| SW_TYPE_DEF(SW_ACL_UDF_PKT_TYPE, cmd_data_check_udf_pkt_type, NULL), |
| SW_TYPE_DEF(SW_ACL_UDF_TYPE, cmd_data_check_udf_type, NULL), |
| #endif |
| #ifdef IN_LED |
| SW_TYPE_DEF(SW_LEDPATTERN, (param_check_t)cmd_data_check_ledpattern, NULL), |
| #endif |
| #ifdef IN_PORTVLAN |
| SW_TYPE_DEF(SW_INVLAN, cmd_data_check_invlan_mode, NULL), |
| #ifdef HPPE |
| SW_TYPE_DEF(SW_GLOBAL_QINQMODE, (param_check_t)cmd_data_check_global_qinqmode, NULL), |
| SW_TYPE_DEF(SW_PT_QINQMODE, (param_check_t)cmd_data_check_port_qinqmode, NULL), |
| SW_TYPE_DEF(SW_TPID, (param_check_t)cmd_data_check_tpid, NULL), |
| SW_TYPE_DEF(SW_INGRESS_FILTER, (param_check_t)cmd_data_check_ingress_filter, NULL), |
| SW_TYPE_DEF(SW_PT_VLAN_DIRECTION, cmd_data_check_port_vlan_direction, NULL), |
| SW_TYPE_DEF(SW_PT_DEF_VID_EN, (param_check_t)cmd_data_check_port_default_vid_en, NULL), |
| SW_TYPE_DEF(SW_PT_VLAN_TAG, (param_check_t)cmd_data_check_port_vlan_tag, NULL), |
| SW_TYPE_DEF(SW_TAG_PROPAGATION, (param_check_t)cmd_data_check_tag_propagation, NULL), |
| SW_TYPE_DEF(SW_EGRESS_MODE, (param_check_t)cmd_data_check_egress_mode, NULL), |
| SW_TYPE_DEF(SW_PT_VLAN_TRANS_ADV_RULE, |
| (param_check_t)cmd_data_check_port_vlan_translation_adv_rule, NULL), |
| SW_TYPE_DEF(SW_PT_VLAN_TRANS_ADV_ACTION, |
| (param_check_t)cmd_data_check_port_vlan_translation_adv_action, NULL), |
| #endif |
| #ifndef IN_PORTVLAN_MINI |
| SW_TYPE_DEF(SW_VLANPROPAGATION, cmd_data_check_vlan_propagation, NULL), |
| SW_TYPE_DEF(SW_VLANTRANSLATION, (param_check_t)cmd_data_check_vlan_translation, NULL), |
| SW_TYPE_DEF(SW_QINQMODE, cmd_data_check_qinq_mode, NULL), |
| SW_TYPE_DEF(SW_QINQROLE, cmd_data_check_qinq_role, NULL), |
| #endif |
| #endif |
| SW_TYPE_DEF(SW_CABLESTATUS, NULL, NULL), |
| SW_TYPE_DEF(SW_CABLELEN, NULL, NULL), |
| SW_TYPE_DEF(SW_SSDK_CFG, NULL, NULL), |
| SW_TYPE_DEF(SW_MODULE, (param_check_t)cmd_data_check_module, NULL), |
| SW_TYPE_DEF(SW_FUNC_CTRL, (param_check_t)cmd_data_check_func_ctrl, NULL), |
| #ifdef IN_PORTCONTROL |
| SW_TYPE_DEF(SW_HDRMODE, cmd_data_check_hdrmode, NULL), |
| #endif |
| #ifdef IN_FDB |
| SW_TYPE_DEF(SW_FDBOPRATION, (param_check_t)cmd_data_check_fdboperation, NULL), |
| #endif |
| #ifdef IN_PPPOE |
| SW_TYPE_DEF(SW_PPPOE, (param_check_t)cmd_data_check_pppoe, NULL), |
| SW_TYPE_DEF(SW_PPPOE_LESS, (param_check_t)cmd_data_check_pppoe_less, NULL), |
| #endif |
| #if defined(IN_IP) || defined(IN_NAT) |
| SW_TYPE_DEF(SW_IP_HOSTENTRY, (param_check_t)cmd_data_check_host_entry, NULL), |
| SW_TYPE_DEF(SW_ARP_LEARNMODE, cmd_data_check_arp_learn_mode, NULL), |
| SW_TYPE_DEF(SW_IP_GUARDMODE, cmd_data_check_ip_guard_mode, NULL), |
| SW_TYPE_DEF(SW_NATENTRY, (param_check_t)cmd_data_check_nat_entry, NULL), |
| SW_TYPE_DEF(SW_NAPTENTRY, (param_check_t)cmd_data_check_napt_entry, NULL), |
| SW_TYPE_DEF(SW_FLOWENTRY, (param_check_t)cmd_data_check_flow_entry, NULL), |
| SW_TYPE_DEF(SW_FLOWCOOKIE, (param_check_t)cmd_data_check_flow_cookie, NULL), |
| SW_TYPE_DEF(SW_FLOWRFS, (param_check_t)cmd_data_check_flow_rfs, NULL), |
| SW_TYPE_DEF(SW_NAPTMODE, cmd_data_check_napt_mode, NULL), |
| SW_TYPE_DEF(SW_IP4ADDR, (param_check_t)cmd_data_check_ip4addr, NULL), |
| SW_TYPE_DEF(SW_IP6ADDR, (param_check_t)cmd_data_check_ip6addr, NULL), |
| SW_TYPE_DEF(SW_INTFMACENTRY, (param_check_t)cmd_data_check_intf_mac_entry, NULL), |
| SW_TYPE_DEF(SW_PUBADDRENTRY, (param_check_t)cmd_data_check_pub_addr_entry, NULL), |
| #endif |
| #ifdef IN_RATE |
| SW_TYPE_DEF(SW_INGPOLICER, (param_check_t)cmd_data_check_port_policer, NULL), |
| SW_TYPE_DEF(SW_EGSHAPER, (param_check_t)cmd_data_check_egress_shaper, NULL), |
| SW_TYPE_DEF(SW_ACLPOLICER, (param_check_t)cmd_data_check_acl_policer, NULL), |
| #endif |
| SW_TYPE_DEF(SW_MACCONFIG, NULL, NULL), |
| SW_TYPE_DEF(SW_PHYCONFIG, NULL, NULL), |
| #ifdef IN_FDB |
| #ifndef IN_FDB_MINI |
| SW_TYPE_DEF(SW_FDBSMODE, cmd_data_check_fdb_smode, NULL), |
| #endif |
| #endif |
| SW_TYPE_DEF(SW_FX100CONFIG, NULL, NULL), |
| #ifdef IN_IGMP |
| SW_TYPE_DEF(SW_SGENTRY, (param_check_t)cmd_data_check_multi, NULL), |
| #endif |
| #ifdef IN_SEC |
| SW_TYPE_DEF(SW_SEC_MAC, cmd_data_check_sec_mac, NULL), |
| SW_TYPE_DEF(SW_SEC_IP, cmd_data_check_sec_ip, NULL), |
| SW_TYPE_DEF(SW_SEC_IP4, cmd_data_check_sec_ip4, NULL), |
| SW_TYPE_DEF(SW_SEC_IP6, cmd_data_check_sec_ip6, NULL), |
| SW_TYPE_DEF(SW_SEC_TCP, cmd_data_check_sec_tcp, NULL), |
| SW_TYPE_DEF(SW_SEC_UDP, cmd_data_check_sec_udp, NULL), |
| SW_TYPE_DEF(SW_SEC_ICMP4, cmd_data_check_sec_icmp4, NULL), |
| SW_TYPE_DEF(SW_SEC_ICMP6, cmd_data_check_sec_icmp6, NULL), |
| #ifdef HPPE |
| SW_TYPE_DEF(SW_L3_PARSER, (param_check_t)cmd_data_check_l3_parser, NULL), |
| SW_TYPE_DEF(SW_L4_PARSER, (param_check_t)cmd_data_check_l4_parser, NULL), |
| SW_TYPE_DEF(SW_EXP_CTRL, (param_check_t)cmd_data_check_exp_ctrl, NULL), |
| #endif |
| #endif |
| #ifdef IN_COSMAP |
| #ifndef IN_COSMAP_MINI |
| SW_TYPE_DEF(SW_REMARKENTRY, (param_check_t)cmd_data_check_remark_entry, NULL), |
| #endif |
| #endif |
| #ifdef IN_IP |
| #ifndef IN_IP_MINI |
| SW_TYPE_DEF(SW_DEFAULT_ROUTE_ENTRY, (param_check_t)cmd_data_check_default_route_entry, NULL), |
| SW_TYPE_DEF(SW_HOST_ROUTE_ENTRY, (param_check_t)cmd_data_check_host_route_entry, NULL), |
| SW_TYPE_DEF(SW_IP_RFS_IP4, (param_check_t)cmd_data_check_ip4_rfs_entry, NULL), |
| SW_TYPE_DEF(SW_IP_RFS_IP6, (param_check_t)cmd_data_check_ip6_rfs_entry, NULL), |
| SW_TYPE_DEF(SW_ARP_SG_CFG, (param_check_t)cmd_data_check_arp_sg, NULL), |
| SW_TYPE_DEF(SW_IP_NETWORK_ROUTE, (param_check_t)cmd_data_check_network_route, NULL), |
| SW_TYPE_DEF(SW_IP_INTF, (param_check_t)cmd_data_check_intf, NULL), |
| SW_TYPE_DEF(SW_IP_VSI_INTF, (param_check_t)cmd_data_check_vsi_intf, NULL), |
| SW_TYPE_DEF(SW_IP_NEXTHOP, (param_check_t)cmd_data_check_nexthop, NULL), |
| SW_TYPE_DEF(SW_IP_SG, (param_check_t)cmd_data_check_ip_sg, NULL), |
| SW_TYPE_DEF(SW_IP_PUB, (param_check_t)cmd_data_check_ip_pub, NULL), |
| SW_TYPE_DEF(SW_IP_PORTMAC, (param_check_t)cmd_data_check_ip_portmac, NULL), |
| SW_TYPE_DEF(SW_IP_MCMODE, (param_check_t)cmd_data_check_ip_mcmode, NULL), |
| SW_TYPE_DEF(SW_IP_GLOBAL, (param_check_t)cmd_data_check_ip_global, NULL), |
| #endif |
| #endif |
| #ifdef IN_PORTCONTROL |
| #ifndef IN_PORTCONTROL_MINI |
| SW_TYPE_DEF(SW_CROSSOVER_MODE, cmd_data_check_crossover_mode, NULL), |
| SW_TYPE_DEF(SW_CROSSOVER_STATUS, cmd_data_check_crossover_status, NULL), |
| SW_TYPE_DEF(SW_PREFER_MEDIUM, cmd_data_check_prefer_medium, NULL), |
| SW_TYPE_DEF(SW_FIBER_MODE, cmd_data_check_fiber_mode, NULL), |
| SW_TYPE_DEF(SW_SRC_FILTER_CONFIG, cmd_data_check_src_filter_config, NULL), |
| SW_TYPE_DEF(SW_MTU_ENTRY, (param_check_t)cmd_data_check_mtu_entry, NULL), |
| SW_TYPE_DEF(SW_MRU_ENTRY, (param_check_t)cmd_data_check_mru_entry, NULL), |
| #endif |
| #endif |
| #ifdef IN_INTERFACECONTROL |
| SW_TYPE_DEF(SW_INTERFACE_MODE, cmd_data_check_interface_mode, NULL), |
| #endif |
| SW_TYPE_DEF(SW_COUNTER_INFO, NULL, NULL), |
| #ifdef IN_VSI |
| SW_TYPE_DEF(SW_VSI_NEWADDR_LRN, (param_check_t)cmd_data_check_newadr_lrn, NULL), |
| SW_TYPE_DEF(SW_VSI_STAMOVE, (param_check_t)cmd_data_check_stamove, NULL), |
| SW_TYPE_DEF(SW_VSI_MEMBER, (param_check_t)cmd_data_check_vsi_member, NULL), |
| SW_TYPE_DEF(SW_VSI_COUNTER, NULL, NULL), |
| #endif |
| #ifdef IN_QM |
| SW_TYPE_DEF(SW_STATIC_THRESH, (param_check_t)cmd_data_check_ac_static_thresh, NULL), |
| SW_TYPE_DEF(SW_DYNAMIC_THRESH, (param_check_t)cmd_data_check_ac_dynamic_thresh, NULL), |
| SW_TYPE_DEF(SW_GROUP_BUFFER, (param_check_t)cmd_data_check_ac_group_buff, NULL), |
| SW_TYPE_DEF(SW_AC_CTRL, (param_check_t)cmd_data_check_ac_ctrl, NULL), |
| SW_TYPE_DEF(SW_AC_OBJ, (param_check_t)cmd_data_check_ac_obj, NULL), |
| SW_TYPE_DEF(SW_UCAST_QUEUE_MAP, (param_check_t)cmd_data_check_u_qmap, NULL), |
| #endif |
| #ifdef IN_BM |
| SW_TYPE_DEF(SW_BMSTHRESH, (param_check_t)cmd_data_check_bm_static_thresh, NULL), |
| SW_TYPE_DEF(SW_BMDTHRESH, (param_check_t)cmd_data_check_bm_dynamic_thresh, NULL), |
| #endif |
| #ifdef IN_FLOW |
| SW_TYPE_DEF(SW_FLOW_AGE, (param_check_t)cmd_data_check_flow_age, NULL), |
| SW_TYPE_DEF(SW_FLOW_CTRL, (param_check_t)cmd_data_check_flow_ctrl, NULL), |
| SW_TYPE_DEF(SW_FLOW_ENTRY, (param_check_t)cmd_data_check_flow, NULL), |
| SW_TYPE_DEF(SW_FLOW_GLOBAL, (param_check_t)cmd_data_check_flow_global, NULL), |
| SW_TYPE_DEF(SW_FLOW_HOST, (param_check_t)cmd_data_check_flow_host, NULL), |
| #endif |
| #ifdef IN_PORTCONTROL |
| #ifndef IN_PORTCONTROL_MINI |
| SW_TYPE_DEF(SW_MTU_INFO, NULL, NULL), |
| SW_TYPE_DEF(SW_MRU_INFO, NULL, NULL), |
| SW_TYPE_DEF(SW_MTU_ENTRY, (param_check_t)cmd_data_check_mtu_entry, NULL), |
| SW_TYPE_DEF(SW_MRU_ENTRY, (param_check_t)cmd_data_check_mru_entry, NULL), |
| #endif |
| #endif |
| #ifdef IN_SHAPER |
| SW_TYPE_DEF(SW_PORT_SHAPER_TOKEN_CONFIG, |
| (param_check_t)cmd_data_check_port_shaper_token_config, NULL), |
| SW_TYPE_DEF(SW_SHAPER_TOKEN_CONFIG, (param_check_t)cmd_data_check_shaper_token_config, NULL), |
| SW_TYPE_DEF(SW_PORT_SHAPER_CONFIG, (param_check_t)cmd_data_check_port_shaper_config, NULL), |
| SW_TYPE_DEF(SW_SHAPER_CONFIG, (param_check_t)cmd_data_check_shaper_config, NULL), |
| #endif |
| |
| #ifdef IN_POLICER |
| SW_TYPE_DEF(SW_POLICER_ACL_CONFIG, (param_check_t)cmd_data_check_acl_policer_config, NULL), |
| SW_TYPE_DEF(SW_POLICER_PORT_CONFIG, (param_check_t)cmd_data_check_port_policer_config, NULL), |
| SW_TYPE_DEF(SW_POLICER_CMD_CONFIG, (param_check_t)cmd_data_check_policer_cmd_config, NULL), |
| #endif |
| #ifdef IN_SERVCODE |
| SW_TYPE_DEF(SW_SERVCODE_CONFIG, (param_check_t)cmd_data_check_servcode_config, NULL), |
| #endif |
| #ifdef IN_RSS_HASH |
| SW_TYPE_DEF(SW_RSS_HASH_MODE, (param_check_t)cmd_data_check_rss_hash_mode, NULL), |
| SW_TYPE_DEF(SW_RSS_HASH_CONFIG, (param_check_t)cmd_data_check_rss_hash_config, NULL), |
| #endif |
| #ifdef IN_MIRROR |
| SW_TYPE_DEF(SW_MIRR_DIRECTION, cmd_data_check_mirr_direction, NULL), |
| SW_TYPE_DEF(SW_MIRR_ANALYSIS_CONFIG, (param_check_t)cmd_data_check_mirr_analy_cfg, NULL), |
| #endif |
| #ifdef IN_CTRLPKT |
| SW_TYPE_DEF(SW_CTRLPKT_PROFILE, (param_check_t)cmd_data_check_ctrlpkt_appprofile, NULL), |
| #endif |
| }; |
| |
| sw_data_type_t * |
| cmd_data_type_find(sw_data_type_e type) |
| { |
| a_uint16_t i = 0; |
| |
| do |
| { |
| if (type == sw_data_type[i].data_type) |
| return &sw_data_type[i]; |
| } |
| while ( ++i < sizeof(sw_data_type)/sizeof(sw_data_type[0])); |
| |
| return NULL; |
| } |
| |
| sw_error_t __cmd_data_check_quit_help(char *cmd, char *usage) |
| { |
| sw_error_t ret = SW_OK; |
| |
| if (!strncasecmp(cmd, "quit", 4)) { |
| return SW_ABORTED; |
| } else if (!strncasecmp(cmd, "help", 4)) { |
| ret = SW_BAD_VALUE; |
| } |
| |
| return ret; |
| } |
| |
| sw_error_t __cmd_data_check_complex(char *info, char *defval, char *usage, |
| param_check_t chk_func, void *arg_val, |
| a_uint32_t size) |
| { |
| sw_error_t ret; |
| char *cmd; |
| |
| do { |
| cmd = get_sub_cmd(info, defval); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| ret = __cmd_data_check_quit_help(cmd, usage); |
| if (ret == SW_ABORTED) |
| return ret; |
| else if (ret == SW_OK) { |
| ret = chk_func(cmd, arg_val, size); |
| } |
| } while (talk_mode && (SW_OK != ret)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t __cmd_data_check_range(char *info, char *defval, char *usage, |
| param_check_range_t chk_func, void *arg_val, |
| a_uint32_t max_val, a_uint32_t min_val) |
| { |
| sw_error_t ret; |
| char *cmd; |
| |
| do { |
| cmd = get_sub_cmd(info, defval); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| ret = __cmd_data_check_quit_help(cmd, usage); |
| if (ret == SW_ABORTED) |
| return ret; |
| else if (ret == SW_OK) { |
| ret = chk_func(cmd, arg_val, max_val, min_val); |
| } |
| } while (talk_mode && (SW_OK != ret)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t __cmd_data_check_boolean(char *info, char *defval, char *usage, |
| param_check_boolean_t chk_func, a_bool_t def, a_bool_t *val, |
| a_uint32_t size) |
| { |
| sw_error_t ret; |
| char *cmd; |
| |
| do { |
| cmd = get_sub_cmd(info, defval); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| ret = __cmd_data_check_quit_help(cmd, usage); |
| if (ret == SW_ABORTED) |
| return ret; |
| else if (ret == SW_OK) { |
| ret = chk_func(cmd, def, val, size); |
| } |
| } while (talk_mode && (SW_OK != ret)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_uint8(char *cmd_str, a_uint32_t *arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (0 == cmd_str[0]) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (cmd_str[0] == '0' && (cmd_str[1] == 'x' || cmd_str[1] == 'X')) |
| sscanf(cmd_str, "%x", arg_val); |
| else |
| sscanf(cmd_str, "%d", arg_val); |
| |
| if (255 < *arg_val) |
| { |
| return SW_BAD_PARAM; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_uint32(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (0 == cmd_str[0]) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (strspn(cmd_str, "1234567890abcdefABCDEFXx") != strlen(cmd_str)){ |
| return SW_BAD_VALUE; |
| } |
| |
| if (cmd_str[0] == '0' && (cmd_str[1] == 'x' || cmd_str[1] == 'X')) |
| sscanf(cmd_str, "%x", arg_val); |
| else |
| sscanf(cmd_str, "%d", arg_val); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_uint16(char *cmd_str, a_uint32_t *arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (0 == cmd_str[0]) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (cmd_str[0] == '0' && (cmd_str[1] == 'x' || cmd_str[1] == 'X')) |
| sscanf(cmd_str, "%x", arg_val); |
| else |
| sscanf(cmd_str, "%d", arg_val); |
| |
| if (65535 < *arg_val) |
| { |
| return SW_BAD_PARAM; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_pbmp(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (cmd_str[0] == '0' && (cmd_str[1] == 'x' || cmd_str[1] == 'X')) |
| sscanf(cmd_str, "%x", arg_val); |
| else |
| sscanf(cmd_str, "%d", arg_val); |
| |
| return SW_OK; |
| |
| } |
| |
| sw_error_t |
| cmd_data_check_enable(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "disable")) |
| *arg_val = FAL_DISABLE; |
| else if (!strcasecmp(cmd_str, "enable")) |
| *arg_val = FAL_ENABLE; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #ifdef IN_PORTCONTROL |
| /*port ctrl*/ |
| sw_error_t |
| cmd_data_check_duplex(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "half")) |
| *arg_val = FAL_HALF_DUPLEX; |
| else if (!strcasecmp(cmd_str, "full")) |
| *arg_val = FAL_FULL_DUPLEX; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_speed(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strncasecmp(cmd_str, "10", 3)) |
| *arg_val = FAL_SPEED_10; |
| else if (!strncasecmp(cmd_str, "100", 4)) |
| *arg_val = FAL_SPEED_100; |
| else if (!strncasecmp(cmd_str, "1000", 5)) |
| *arg_val = FAL_SPEED_1000; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_capable(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| cmd_strtol(cmd_str, arg_val); |
| if (*arg_val & (~FAL_PHY_COMBO_ADV_ALL)) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #ifndef IN_PORTCONTROL_MINI |
| sw_error_t |
| cmd_data_check_port_eee_config(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_port_eee_cfg_t cfg; |
| |
| aos_mem_zero(&cfg, sizeof (fal_port_eee_cfg_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("eee_enable", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(cfg.enable), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| do |
| { |
| cmd = get_sub_cmd("eee_capability", "0xffff"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(cfg.capability), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("lpi_sleep_timer", "256"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(cfg.lpi_sleep_timer), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("advertisement", "0xffff"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(cfg.advertisement), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| do |
| { |
| cmd = get_sub_cmd("lpi_tx_enable", "1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(cfg.lpi_tx_enable), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("eee_status", "0xffff"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(cfg.eee_status), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("lpi_wakeup_timer", "32"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(cfg.lpi_wakeup_timer), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("link_partner_advertisement", "0xffff"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(cfg.link_partner_advertisement), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_port_eee_cfg_t *)val = cfg; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_switch_port_loopback_config(char *cmd_str, void * val, |
| a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_loopback_config_t cfg; |
| |
| aos_mem_zero(&cfg, sizeof (fal_loopback_config_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("loopback_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(cfg.enable), |
| sizeof (a_bool_t)); |
| SW_RTN_ON_ERROR(rv); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("crc_stripped_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(cfg.crc_stripped), |
| sizeof (a_bool_t)); |
| SW_RTN_ON_ERROR(rv); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("loopback_rate", "1-0x12c"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(cfg.loopback_rate), sizeof (a_uint32_t)); |
| SW_RTN_ON_ERROR(rv); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_loopback_config_t *)val = cfg; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_crossover_mode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strncasecmp(cmd_str, "auto", 5)) |
| *arg_val = PHY_MDIX_AUTO; |
| else if (!strncasecmp(cmd_str, "mdi", 4)) |
| *arg_val = PHY_MDIX_MDI; |
| else if (!strncasecmp(cmd_str, "mdix", 5)) |
| *arg_val = PHY_MDIX_MDIX; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_crossover_status(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| if (!strncasecmp(cmd_str, "mdi", 4)) |
| *arg_val = PHY_MDIX_STATUS_MDI; |
| else if (!strncasecmp(cmd_str, "mdix", 5)) |
| *arg_val = PHY_MDIX_STATUS_MDIX; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_prefer_medium(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| if (!strncasecmp(cmd_str, "copper", 7)) |
| *arg_val = PHY_MEDIUM_COPPER; |
| else if (!strncasecmp(cmd_str, "fiber", 6)) |
| *arg_val = PHY_MEDIUM_FIBER; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_fiber_mode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| if (!strncasecmp(cmd_str, "100fx", 6)) |
| { |
| *arg_val = PHY_FIBER_100FX; |
| } |
| else if (!strncasecmp(cmd_str, "1000bx", 7)) |
| { |
| *arg_val = PHY_FIBER_1000BX; |
| } |
| else if (!strncasecmp(cmd_str, "10g_r", 7)) |
| { |
| *arg_val = PHY_FIBER_10G_R; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_source_filter_mode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| { |
| return SW_BAD_PARAM; |
| } |
| if (!strncasecmp(cmd_str, "virtual_port", 15)) |
| { |
| *arg_val = FAL_SRC_FILTER_MODE_VP; |
| } |
| else if (!strncasecmp(cmd_str, "physical_port", 15)) |
| { |
| *arg_val = FAL_SRC_FILTER_MODE_PHYSICAL; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_src_filter_config(char *cmd_str, a_uint32_t *arg_val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_src_filter_config_t src_filter_config; |
| |
| aos_mem_zero(&src_filter_config, sizeof (fal_src_filter_config_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("src_filter_enable", "enable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_enable(cmd, &(src_filter_config.src_filter_enable), |
| sizeof (a_bool_t)); |
| SW_RTN_ON_ERROR(rv); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("srcfilter_mode", "virtual_port"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| cmd_data_check_source_filter_mode(cmd, &(src_filter_config.src_filter_mode), |
| sizeof(a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_src_filter_config_t *)arg_val = src_filter_config; |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_mtu_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_mtu_ctrl_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_mtu_ctrl_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mtu_size", "1514"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.mtu_size), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mtu_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.action), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_mtu_ctrl_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_mru_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_mru_ctrl_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_mru_ctrl_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mru_size", "1514"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.mru_size), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mru_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.action), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_mru_ctrl_t *)val = entry; |
| return SW_OK; |
| } |
| |
| #endif |
| #endif |
| #ifdef IN_INTERFACECONTROL |
| sw_error_t |
| cmd_data_check_interface_mode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strncasecmp(cmd_str, "psgmii_baset", 13)) |
| { |
| *arg_val = PHY_PSGMII_BASET; |
| } |
| else if (!strncasecmp(cmd_str, "psgmii_bx1000", 14)) |
| { |
| *arg_val = PHY_PSGMII_BX1000; |
| } |
| else if (!strncasecmp(cmd_str, "psgmii_fx100", 13)) |
| { |
| *arg_val = PHY_PSGMII_FX100; |
| } |
| else if (!strncasecmp(cmd_str, "psgmii_amdet", 13)) |
| { |
| *arg_val = PHY_PSGMII_AMDET; |
| } |
| else if (!strncasecmp(cmd_str, "rgmii_amdet", 13)) |
| { |
| *arg_val = PORT_RGMII_AMDET; |
| } |
| else if (!strncasecmp(cmd_str, "rgmii_baset", 13)) |
| { |
| *arg_val = PORT_RGMII_BASET; |
| } |
| else if (!strncasecmp(cmd_str, "rgmii_bx1000", 13)) |
| { |
| *arg_val = PORT_RGMII_BX1000; |
| } |
| else if (!strncasecmp(cmd_str, "rgmii_fx100", 13)) |
| { |
| *arg_val = PORT_RGMII_FX100; |
| } |
| else if (!strncasecmp(cmd_str, "sgmii_baset", 13)) |
| { |
| *arg_val = PHY_SGMII_BASET; |
| } |
| else if (!strncasecmp(cmd_str, "qsgmii", 13)) |
| { |
| *arg_val = PORT_QSGMII; |
| } |
| else if (!strncasecmp(cmd_str, "sgmii_plus", 13)) |
| { |
| *arg_val = PORT_SGMII_PLUS; |
| } |
| else if (!strncasecmp(cmd_str, "usxgmii", 13)) |
| { |
| *arg_val = PORT_USXGMII; |
| } |
| else if (!strncasecmp(cmd_str, "10gbase_r", 13)) |
| { |
| *arg_val = PORT_10GBASE_R; |
| } |
| else if (!strncasecmp(cmd_str, "interfacemode_max", 20)) |
| { |
| *arg_val = PORT_INTERFACE_MODE_MAX; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| /*portvlan*/ |
| #ifdef IN_PORTVLAN |
| sw_error_t |
| cmd_data_check_1qmode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "disable")) |
| { |
| *arg_val = FAL_1Q_DISABLE; |
| } |
| else if (!strcasecmp(cmd_str, "secure")) |
| { |
| *arg_val = FAL_1Q_SECURE; |
| } |
| else if (!strcasecmp(cmd_str, "check")) |
| { |
| *arg_val = FAL_1Q_CHECK; |
| } |
| else if (!strcasecmp(cmd_str, "fallback")) |
| { |
| *arg_val = FAL_1Q_FALLBACK; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| |
| sw_error_t |
| cmd_data_check_egmode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "unmodified")) |
| { |
| *arg_val = FAL_EG_UNMODIFIED; |
| } |
| else if (!strcasecmp(cmd_str, "untagged")) |
| { |
| *arg_val = FAL_EG_UNTAGGED; |
| } |
| else if (!strcasecmp(cmd_str, "tagged")) |
| { |
| *arg_val = FAL_EG_TAGGED; |
| } |
| else if (!strcasecmp(cmd_str, "hybrid")) |
| { |
| *arg_val = FAL_EG_HYBRID; |
| } |
| else if (!strcasecmp(cmd_str, "untouched")) |
| { |
| *arg_val = FAL_EG_UNTOUCHED; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| /*vlan*/ |
| #ifdef IN_VLAN |
| sw_error_t |
| cmd_data_check_vlan(char *cmdstr, fal_vlan_t * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_vlan_t entry; |
| a_uint32_t tmp = 0; |
| |
| memset(&entry, 0, sizeof (fal_vlan_t)); |
| |
| rv = __cmd_data_check_complex("vlanid", NULL, |
| "usage: the range is 0 -- 4095\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.vid = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("fid", NULL, |
| "usage: the range is 0 -- 4095 or 65535\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.fid = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("port member", "null", |
| "usage: input port number such as 1,3\n", |
| (param_check_t)cmd_data_check_portmap, &entry.mem_ports, |
| sizeof (fal_pbmp_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("tagged member", "null", |
| "usage: input port number such as 1,3\n", |
| (param_check_t)cmd_data_check_portmap, &entry.tagged_ports, |
| sizeof (fal_pbmp_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("untagged member", "null", |
| "usage: input port number such as 1,3\n", |
| (param_check_t)cmd_data_check_portmap, &entry.untagged_ports, |
| sizeof (fal_pbmp_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("unmodify member", "null", |
| "usage: input port number such as 1,3\n", |
| (param_check_t)cmd_data_check_portmap, &entry.unmodify_ports, |
| sizeof (fal_pbmp_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("unmodify member", "null", |
| "usage: input port number such as 1,3\n", |
| (param_check_t)cmd_data_check_portmap, &entry.unmodify_ports, |
| sizeof (fal_pbmp_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("learn disable", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.learn_dis, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("queue override", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.vid_pri_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == entry.vid_pri_en) |
| { |
| rv = __cmd_data_check_complex("queue", NULL, |
| "usage: input number such as <0/1/2/3>\n", |
| (param_check_t)cmd_data_check_uint32, &tmp, sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| entry.vid_pri = tmp; |
| } |
| |
| *val = entry; |
| return SW_OK; |
| } |
| #endif |
| /*qos*/ |
| #ifdef IN_QOS |
| #ifndef IN_QOS_MINI |
| sw_error_t |
| cmd_data_check_port_group(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_qos_group_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_qos_group_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("pcp_group", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.pcp_group), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dscp_group", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.dscp_group), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("flow_group", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.flow_group), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_qos_group_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_port_pri(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_qos_pri_precedence_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_qos_pri_precedence_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("pcp_pri_prece", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.pcp_pri), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dscp_pri_prece", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.dscp_pri), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("preheader_pri_prece", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.preheader_pri), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("flow_pri_prece", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.flow_pri), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("acl_pri_prece", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.acl_pri), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("post_acl_pri_prece", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.post_acl_pri), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("pcp_pri_force", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.pcp_pri_force), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dscp_pri_force", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.dscp_pri_force), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_qos_pri_precedence_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_port_remark(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_qos_remark_enable_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_qos_remark_enable_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("pcp_change_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.pcp_change_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dei_change_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.dei_chage_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dscp_change_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.dscp_change_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_qos_remark_enable_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_cosmap(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_qos_cosmap_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_qos_cosmap_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("internal_pcp", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.internal_pcp), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("internal_dei", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.internal_dei), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("internal_pri", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.internal_pri), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("internal_dscp", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.internal_dscp), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("internal_dp", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.internal_dp), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dscp_mask", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.dscp_mask), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dscp_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.dscp_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("pcp_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.pcp_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dei_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.dei_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("pri_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.pri_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dp_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.dp_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("qos_prec", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.qos_prec), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_qos_cosmap_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_queue_scheduler(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_qos_scheduler_cfg_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_qos_scheduler_cfg_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("sp_id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.sp_id), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("e_pri", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.e_pri), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("c_pri", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.c_pri), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("e_drr_id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.e_drr_id), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("c_drr_id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.c_drr_id), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("e_drr_wt", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.e_drr_wt), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("c_drr_wt", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.c_drr_wt), |
| sizeof (a_uint16_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("c_drr_ut", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.c_drr_unit), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("e_drr_ut", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.e_drr_unit), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("drr_frame_mode", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.drr_frame_mode), |
| sizeof (a_uint32_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_qos_scheduler_cfg_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ring_queue(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| a_uint32_t i = 0; |
| sw_error_t rv; |
| fal_queue_bmp_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_queue_bmp_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("bmp", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.bmp[i]), |
| sizeof (a_uint32_t)); |
| } |
| |
| } |
| while ((talk_mode && (SW_OK != rv)) || (++i < 10)); |
| |
| *(fal_queue_bmp_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_qos_sch(char *cmdstr, fal_sch_mode_t * val, a_uint32_t size) |
| { |
| if (cmdstr == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmdstr, "sp")) |
| { |
| *val = FAL_SCH_SP_MODE; |
| } |
| else if (!strcasecmp(cmdstr, "wrr")) |
| { |
| *val = FAL_SCH_WRR_MODE; |
| } |
| else if (!strcasecmp(cmdstr, "mixplus")) |
| { |
| *val = FAL_SCH_MIX_PLUS_MODE; |
| } |
| else if (!strcasecmp(cmdstr, "mix")) |
| { |
| *val = FAL_SCH_MIX_MODE; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_qos_pt(char *cmdstr, fal_qos_mode_t * val, a_uint32_t size) |
| { |
| if (cmdstr == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmdstr, "da")) |
| { |
| *val = FAL_QOS_DA_MODE; |
| } |
| else if (!strcasecmp(cmdstr, "up")) |
| { |
| *val = FAL_QOS_UP_MODE; |
| } |
| else if (!strcasecmp(cmdstr, "dscp")) |
| { |
| *val = FAL_QOS_DSCP_MODE; |
| } |
| else if (!strcasecmp(cmdstr, "port")) |
| { |
| *val = FAL_QOS_PORT_MODE; |
| } |
| else if (!strcasecmp(cmdstr, "flow")) |
| { |
| *val = FAL_QOS_FLOW_MODE; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| #endif |
| |
| /*rate*/ |
| #ifdef IN_RATE |
| sw_error_t |
| cmd_data_check_storm(char *cmdstr, fal_storm_type_t * val, a_uint32_t size) |
| { |
| if (cmdstr == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmdstr, "unicast")) |
| { |
| *val = FAL_UNICAST_STORM; |
| } |
| else if (!strcasecmp(cmdstr, "multicast")) |
| { |
| *val = FAL_MULTICAST_STORM; |
| } |
| else if (!strcasecmp(cmdstr, "broadcast")) |
| { |
| *val = FAL_BROADCAST_STORM; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| |
| /*stp*/ |
| #ifdef IN_STP |
| sw_error_t |
| cmd_data_check_stp_state(char *cmdstr, fal_stp_state_t * val, a_uint32_t size) |
| { |
| if (cmdstr == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmdstr, "disable")) |
| { |
| *val = FAL_STP_DISABLED; |
| } |
| else if (!strcasecmp(cmdstr, "block")) |
| { |
| *val = FAL_STP_BLOKING; |
| } |
| else if (!strcasecmp(cmdstr, "listen")) |
| { |
| *val = FAL_STP_LISTENING; |
| } |
| else if (!strcasecmp(cmdstr, "learn")) |
| { |
| *val = FAL_STP_LEARNING; |
| } |
| else if (!strcasecmp(cmdstr, "forward")) |
| { |
| *val = FAL_STP_FARWARDING; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| |
| #ifdef IN_LEAKY |
| /*general*/ |
| sw_error_t |
| cmd_data_check_leaky(char *cmdstr, fal_leaky_ctrl_mode_t * val, a_uint32_t size) |
| { |
| if (cmdstr == NULL) |
| return SW_BAD_VALUE; |
| |
| if (!strcasecmp(cmdstr, "port")) |
| { |
| *val = FAL_LEAKY_PORT_CTRL; |
| } |
| else if (!strcasecmp(cmdstr, "fdb")) |
| { |
| *val = FAL_LEAKY_FDB_CTRL; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| |
| sw_error_t |
| cmd_data_check_uinta(char *cmdstr, a_uint32_t * val, a_uint32_t size) |
| { |
| char *tmp_str = NULL; |
| a_uint32_t *tmp_ptr = val; |
| a_uint32_t i = 0; |
| |
| tmp_str = (void *) strsep(&cmdstr, ","); |
| |
| while (tmp_str) |
| { |
| if (i >= (size / 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| sscanf(tmp_str, "%d", tmp_ptr); |
| tmp_ptr++; |
| |
| i++; |
| tmp_str = (void *) strsep(&cmdstr, ","); |
| } |
| |
| if (i != (size / 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| /*fdb*/ |
| sw_error_t |
| cmd_data_check_maccmd(char *cmdstr, fal_fwd_cmd_t * val, a_uint32_t size) |
| { |
| if (NULL == cmdstr) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (0 == cmdstr[0]) |
| { |
| *val = FAL_MAC_FRWRD; //defualt |
| } |
| else if (!strcasecmp(cmdstr, "forward")) |
| { |
| *val = FAL_MAC_FRWRD; |
| } |
| else if (!strcasecmp(cmdstr, "drop")) |
| { |
| *val = FAL_MAC_DROP; |
| } |
| else if (!strcasecmp(cmdstr, "cpycpu")) |
| { |
| *val = FAL_MAC_CPY_TO_CPU; |
| } |
| else if (!strcasecmp(cmdstr, "rdtcpu")) |
| { |
| *val = FAL_MAC_RDT_TO_CPU; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| /*flow*/ |
| #ifdef IN_IP |
| #ifndef IN_IP_MINI |
| sw_error_t |
| cmd_data_check_flowcmd(char *cmdstr, fal_default_flow_cmd_t * val, a_uint32_t size) |
| { |
| if (NULL == cmdstr) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (0 == cmdstr[0]) |
| { |
| *val = FAL_DEFAULT_FLOW_FORWARD; //default |
| } |
| else if (!strcasecmp(cmdstr, "forward")) |
| { |
| *val = FAL_DEFAULT_FLOW_FORWARD; |
| } |
| else if (!strcasecmp(cmdstr, "drop")) |
| { |
| *val = FAL_DEFAULT_FLOW_DROP; |
| } |
| else if (!strcasecmp(cmdstr, "rdtcpu")) |
| { |
| *val = FAL_DEFAULT_FLOW_RDT_TO_CPU; |
| } |
| else if (!strcasecmp(cmdstr, "admit_all")) |
| { |
| *val = FAL_DEFAULT_FLOW_ADMIT_ALL; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_flowtype(char *cmd_str, fal_flow_type_t * arg_val, |
| a_uint32_t size) |
| { |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcasecmp(cmd_str, "lan2lan")) |
| { |
| *arg_val = FAL_FLOW_LAN_TO_LAN; |
| } |
| else if (!strcasecmp(cmd_str, "wan2lan")) |
| { |
| *arg_val = FAL_FLOW_WAN_TO_LAN; |
| } |
| else if (!strcasecmp(cmd_str, "lan2wan")) |
| { |
| *arg_val = FAL_FLOW_LAN_TO_WAN; |
| } |
| else if (!strcasecmp(cmd_str, "wan2wan")) |
| { |
| *arg_val = FAL_FLOW_WAN_TO_WAN; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| #endif |
| sw_error_t |
| cmd_data_check_confirm(char *cmdstr, a_bool_t def, a_bool_t * val, |
| a_uint32_t size) |
| { |
| if (0 == cmdstr[0]) |
| { |
| *val = def; |
| } |
| else if ((!strcasecmp(cmdstr, "yes")) || (!strcasecmp(cmdstr, "y"))) |
| { |
| *val = A_TRUE; |
| } |
| else if ((!strcasecmp(cmdstr, "no")) || (!strcasecmp(cmdstr, "n"))) |
| { |
| *val = A_FALSE; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_portmap(char *cmdstr, fal_pbmp_t * val, a_uint32_t size) |
| { |
| char *tmp = NULL; |
| a_uint32_t i = 0; |
| a_uint32_t port; |
| |
| *val = 0; |
| //default input null |
| if(!strcasecmp(cmdstr, "null")) |
| { |
| return SW_OK; |
| } |
| |
| tmp = (void *) strsep(&cmdstr, ","); |
| while (tmp) |
| { |
| if (SW_MAX_NR_PORT <= i) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| sscanf(tmp, "%d", &port); |
| if (SW_MAX_NR_PORT <= port) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| *val |= (0x1 << port); |
| tmp = (void *) strsep(&cmdstr, ","); |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_macaddr(char *cmdstr, void *val, a_uint32_t size) |
| { |
| char *tmp = NULL; |
| a_uint32_t i = 0, j; |
| a_uint32_t addr; |
| fal_mac_addr_t mac; |
| |
| memset(&mac, 0, sizeof (fal_mac_addr_t)); |
| if (NULL == cmdstr) |
| { |
| *(fal_mac_addr_t *) val = mac; |
| return SW_BAD_VALUE; /*was: SW_OK;*/ |
| } |
| |
| if (0 == cmdstr[0]) |
| { |
| *(fal_mac_addr_t *) val = mac; |
| return SW_OK; |
| } |
| |
| tmp = (void *) strsep(&cmdstr, "-"); |
| while (tmp) |
| { |
| if (6 <= i) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if ((2 < strlen(tmp)) || (0 == strlen(tmp))) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| for (j = 0; j < strlen(tmp); j++) |
| { |
| if (A_FALSE == is_hex(tmp[j])) |
| return SW_BAD_VALUE; |
| } |
| |
| sscanf(tmp, "%x", &addr); |
| if (0xff < addr) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| mac.uc[i++] = addr; |
| tmp = (void *) strsep(&cmdstr, "-"); |
| } |
| |
| if (6 != i) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| *(fal_mac_addr_t *) val = mac; |
| return SW_OK; |
| } |
| #ifdef IN_FDB |
| sw_error_t |
| cmd_data_check_fdbentry(char *info, void *val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_fdb_entry_t entry; |
| a_uint32_t tmp = 0; |
| |
| memset(&entry, 0, sizeof (fal_fdb_entry_t)); |
| |
| rv = __cmd_data_check_complex("addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_macaddr, &entry.addr, |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("fid", "65535", |
| "usage: the range is 1 -- 4095 or 65535\n", |
| (param_check_t)cmd_data_check_uint32, &tmp, sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.fid = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("dacmd", "forward", |
| "usage: <forward/drop/cpycpu/rdtcpu>\n", |
| (param_check_t)cmd_data_check_maccmd, &entry.dacmd, |
| sizeof (fal_fwd_cmd_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("sacmd", "forward", |
| "usage: <forward/drop/cpycpu/rdtcpu>\n", |
| (param_check_t)cmd_data_check_maccmd, &entry.sacmd, |
| sizeof (fal_fwd_cmd_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("dest port", "null", |
| "usage: input port number such as 1,3\n", |
| (param_check_t)cmd_data_check_portmap, &entry.port.map, |
| sizeof (fal_pbmp_t)); |
| if (rv) |
| return rv; |
| |
| entry.portmap_en = A_TRUE; |
| |
| rv = __cmd_data_check_boolean("static", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &entry.static_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("leaky", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.leaky_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("mirror", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.mirror_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("clone", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.clone_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("queue override", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, |
| &entry.da_pri_en, sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == entry.da_pri_en) |
| { |
| rv = __cmd_data_check_complex("queue", NULL, |
| "usage: input number such as <0/1/2/3>\n", |
| (param_check_t)cmd_data_check_uint32, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.da_queue = tmp; |
| } |
| |
| rv = __cmd_data_check_boolean("cross_pt_state", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, |
| &entry.cross_pt_state, sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("white_list_en", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, |
| &entry.white_list_en, sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("load_balance_en", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.load_balance_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == entry.load_balance_en) |
| { |
| rv = __cmd_data_check_complex("load_balance", NULL, |
| "usage: input number such as <0/1/2/3>\n", |
| (param_check_t)cmd_data_check_uint32, &tmp, sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.load_balance = tmp; |
| } |
| |
| *(fal_fdb_entry_t *) val = entry; |
| |
| return SW_OK; |
| } |
| #ifndef IN_FDB_MINI |
| sw_error_t |
| cmd_data_check_maclimit_ctrl(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_maclimit_ctrl_t maclimit_ctrl; |
| |
| memset(&maclimit_ctrl, 0, sizeof (fal_maclimit_ctrl_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("enable", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &maclimit_ctrl.enable, |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("limit num", "2048"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &maclimit_ctrl.limit_num, |
| sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &maclimit_ctrl.action, |
| sizeof (fal_fwd_cmd_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_maclimit_ctrl_t *) val = maclimit_ctrl; |
| |
| return SW_OK; |
| } |
| #endif |
| #endif |
| sw_error_t |
| cmd_data_check_integer(char *cmd_str, a_uint32_t * arg_val, a_uint32_t max_val, |
| a_uint32_t min_val) |
| { |
| a_uint32_t tmp; |
| a_uint32_t i; |
| |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_PARAM; |
| } |
| |
| if (0 == cmd_str[0]) |
| { |
| return SW_BAD_PARAM; |
| } |
| |
| if ((cmd_str[0] == '0') && ((cmd_str[1] == 'x') || (cmd_str[1] == 'X'))) |
| { |
| for (i = 2; i < strlen(cmd_str); i++) |
| { |
| if (A_FALSE == is_hex(cmd_str[i])) |
| { |
| return SW_BAD_VALUE; |
| } |
| } |
| sscanf(cmd_str, "%x", &tmp); |
| } |
| else |
| { |
| for (i = 0; i < strlen(cmd_str); i++) |
| { |
| if (A_FALSE == is_dec(cmd_str[i])) |
| { |
| return SW_BAD_VALUE; |
| } |
| } |
| sscanf(cmd_str, "%d", &tmp); |
| } |
| |
| if ((tmp > max_val) || (tmp < min_val)) |
| return SW_BAD_PARAM; |
| |
| *arg_val = tmp; |
| return SW_OK; |
| } |
| #ifdef IN_ACL |
| sw_error_t |
| cmd_data_check_ruletype(char *cmd_str, fal_acl_rule_type_t * arg_val, |
| a_uint32_t size) |
| { |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcasecmp(cmd_str, "mac")) |
| { |
| *arg_val = FAL_ACL_RULE_MAC; |
| } |
| else if (!strcasecmp(cmd_str, "ip4")) |
| { |
| *arg_val = FAL_ACL_RULE_IP4; |
| } |
| else if (!strcasecmp(cmd_str, "ip6")) |
| { |
| *arg_val = FAL_ACL_RULE_IP6; |
| } |
| else if (!strcasecmp(cmd_str, "udf")) |
| { |
| *arg_val = FAL_ACL_RULE_UDF; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_udf_pkt_type(char *cmdstr, fal_acl_udf_pkt_type_t * arg_val, a_uint32_t size) |
| { |
| if (NULL == cmdstr) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcasecmp(cmdstr, "non-ip")) |
| { |
| *arg_val = FAL_ACL_UDF_NON_IP; |
| } |
| else if (!strcasecmp(cmdstr, "ipv4")) |
| { |
| *arg_val = FAL_ACL_UDF_IP4; |
| } |
| else if (!strcasecmp(cmdstr, "ipv6")) |
| { |
| *arg_val = FAL_ACL_UDF_IP6; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_udf_type(char *cmdstr, fal_acl_udf_type_t * arg_val, a_uint32_t size) |
| { |
| if (NULL == cmdstr) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcasecmp(cmdstr, "l2")) |
| { |
| *arg_val = FAL_ACL_UDF_TYPE_L2; |
| } |
| else if (!strcasecmp(cmdstr, "l2snap")) |
| { |
| *arg_val = FAL_ACL_UDF_TYPE_L2_SNAP; |
| } |
| else if (!strcasecmp(cmdstr, "l3")) |
| { |
| *arg_val = FAL_ACL_UDF_TYPE_L3; |
| } |
| else if (!strcasecmp(cmdstr, "l3plus")) |
| { |
| *arg_val = FAL_ACL_UDF_TYPE_L3_PLUS; |
| } |
| else if (!strcasecmp(cmdstr, "l4")) |
| { |
| *arg_val = FAL_ACL_UDF_TYPE_L4; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_udf_element(char *cmdstr, a_uint8_t * val, a_uint32_t * len) |
| { |
| char *tmp = NULL; |
| a_uint32_t i = 0, j; |
| a_uint32_t data; |
| |
| memset(val, 0, 16); |
| if (NULL == cmdstr) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (0 == cmdstr[0]) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| tmp = (void *) strsep(&cmdstr, "-"); |
| while (tmp) |
| { |
| if (16 <= i) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if ((2 < strlen(tmp)) || (0 == strlen(tmp))) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| for (j = 0; j < strlen(tmp); j++) |
| { |
| if (A_FALSE == is_hex(tmp[j])) |
| { |
| return SW_BAD_VALUE; |
| } |
| } |
| |
| sscanf(tmp, "%x", &data); |
| |
| val[i++] = data & 0xff; |
| tmp = (void *) strsep(&cmdstr, "-"); |
| } |
| |
| if (0 == i) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| *len = i; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_fieldop(char *cmdstr, fal_acl_field_op_t def, |
| fal_acl_field_op_t * val) |
| { |
| if ('\0' == cmdstr[0]) |
| { |
| *val = def; |
| } |
| else if ((!strcasecmp(cmdstr, "mask")) || (!strcasecmp(cmdstr, "m"))) |
| { |
| *val = FAL_ACL_FIELD_MASK; |
| } |
| else if ((!strcasecmp(cmdstr, "range")) || (!strcasecmp(cmdstr, "r"))) |
| { |
| *val = FAL_ACL_FIELD_RANGE; |
| } |
| else if ((!strcasecmp(cmdstr, "le")) || (!strcasecmp(cmdstr, "l"))) |
| { |
| *val = FAL_ACL_FIELD_LE; |
| } |
| else if ((!strcasecmp(cmdstr, "ge")) || (!strcasecmp(cmdstr, "g"))) |
| { |
| *val = FAL_ACL_FIELD_GE; |
| } |
| else if ((!strcasecmp(cmdstr, "ne")) || (!strcasecmp(cmdstr, "n"))) |
| { |
| *val = FAL_ACL_FIELD_NE; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| #endif |
| sw_error_t |
| cmd_data_check_ip4addr(char *cmdstr, void * val, a_uint32_t size) |
| { |
| char *tmp = NULL; |
| a_uint32_t i = 0, j; |
| a_uint32_t addr; |
| fal_ip4_addr_t ip4; |
| char cmd[128] = { 0 }; |
| char *str; |
| |
| memset(&ip4, 0, sizeof (fal_ip4_addr_t)); |
| if (NULL == cmdstr) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (0 == cmdstr[0]) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| for (i = 0; i < 128; i++) |
| { |
| if (0 == cmdstr[i]) |
| { |
| break; |
| } |
| } |
| |
| i++; |
| if (128 < i) |
| { |
| i = 128; |
| } |
| |
| memcpy(cmd, cmdstr, i); |
| str = cmd; |
| tmp = (void *) strsep(&str, "."); |
| i = 0; |
| while (tmp) |
| { |
| if (4 <= i) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if ((3 < strlen(tmp)) || (0 == strlen(tmp))) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| for (j = 0; j < strlen(tmp); j++) |
| { |
| if (A_FALSE == is_dec(tmp[j])) |
| { |
| return SW_BAD_VALUE; |
| } |
| } |
| |
| sscanf(tmp, "%d", &addr); |
| if (255 < addr) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| ip4 |= ((addr & 0xff) << (24 - i * 8)); |
| i++; |
| tmp = (void *) strsep(&str, "."); |
| } |
| |
| if (4 != i) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| *(fal_ip4_addr_t*)val = ip4; |
| return SW_OK; |
| } |
| |
| #ifdef IN_IGMP |
| sw_error_t |
| cmd_data_check_multi(char *info, void *val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_igmp_sg_entry_t entry; |
| |
| memset(&entry, 0, sizeof (fal_igmp_sg_entry_t)); |
| |
| rv = __cmd_data_check_complex("group type", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.group.type), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| if(entry.group.type == 0) |
| { |
| rv = __cmd_data_check_complex("group ip4 addr", "0.0.0.0", |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.group.u.ip4_addr), |
| 4); |
| if (rv) |
| return rv; |
| } |
| else |
| { |
| rv = __cmd_data_check_complex("group ip6 addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip6addr, &(entry.group.u.ip6_addr), |
| 16); |
| if (rv) |
| return rv; |
| |
| } |
| |
| rv = __cmd_data_check_complex("source type", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.source.type), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| if(entry.source.type == 0) |
| { |
| rv = __cmd_data_check_complex("source ip4 addr", "0.0.0.0", |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.source.u.ip4_addr), |
| 4); |
| if (rv) |
| return rv; |
| } |
| else |
| { |
| rv = __cmd_data_check_complex("source ip6 addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip6addr, &(entry.source.u.ip6_addr), |
| 16); |
| if (rv) |
| return rv; |
| } |
| |
| rv = __cmd_data_check_complex("portmap", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.port_map), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vlanid", "0xffff", |
| "usage: the range is 0 -- 4095 or 65535\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.vlan_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_igmp_sg_entry_t *)val = entry; |
| |
| return SW_OK; |
| } |
| #endif |
| |
| sw_error_t |
| cmd_data_check_ip6addr(char *cmdstr, void * val, a_uint32_t size) |
| { |
| char *tmp = NULL; |
| a_uint32_t j; |
| a_uint32_t i = 0, cnt = 0, rep = 0, loc = 0; |
| a_uint32_t data; |
| a_uint32_t addr[8]; |
| fal_ip6_addr_t ip6; |
| |
| if (NULL == cmdstr) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (0 == cmdstr[0]) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| for (i = 0; i < 8; i++) |
| { |
| addr[i] = 0; |
| } |
| |
| for (i = 0; i < strlen(cmdstr); i++) |
| { |
| if (':' == cmdstr[i]) |
| { |
| if ((i == (strlen(cmdstr) - 1)) |
| || (0 == i)) |
| { |
| return SW_BAD_VALUE; |
| } |
| cnt++; |
| |
| if (':' == cmdstr[i - 1]) |
| { |
| rep++; |
| loc = cnt - 1; |
| } |
| } |
| } |
| |
| if (1 < rep) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| tmp = (void *) strsep(&cmdstr, ":"); |
| i = 0; |
| while (tmp) |
| { |
| if (8 <= i) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcmp(tmp, "")) { |
| tmp = (void *)strsep(&cmdstr, ":"); |
| continue; |
| } |
| |
| if ((4 < strlen(tmp)) || (0 == strlen(tmp))) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| for (j = 0; j < strlen(tmp); j++) |
| { |
| if (A_FALSE == is_hex(tmp[j])) |
| { |
| return SW_BAD_VALUE; |
| } |
| } |
| |
| sscanf(tmp, "%x", &data); |
| if (65535 < data) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| addr[i++] = data; |
| tmp = (void *) strsep(&cmdstr, ":"); |
| } |
| |
| if (0 == rep) |
| { |
| if (8 != i) |
| { |
| return SW_BAD_VALUE; |
| } |
| } |
| else |
| { |
| if (8 <= i) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| for (j = i - 1; j >= loc; j--) |
| { |
| addr[8 - i + j] = addr[j]; |
| addr[j] = 0; |
| } |
| } |
| |
| for (i = 0; i < 4; i++) |
| { |
| ip6.ul[i] = (addr[i * 2] << 16) | addr[i * 2 + 1]; |
| } |
| |
| *(fal_ip6_addr_t*)val = ip6; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_patternmode(char *cmd_str, led_pattern_mode_t * arg_val, |
| a_uint32_t size) |
| { |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcasecmp(cmd_str, "always_off")) |
| { |
| *arg_val = LED_ALWAYS_OFF; |
| } |
| else if (!strcasecmp(cmd_str, "always_blink")) |
| { |
| *arg_val = LED_ALWAYS_BLINK; |
| } |
| else if (!strcasecmp(cmd_str, "always_on")) |
| { |
| *arg_val = LED_ALWAYS_ON; |
| } |
| else if (!strcasecmp(cmd_str, "map")) |
| { |
| *arg_val = LED_PATTERN_MAP_EN; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #ifdef IN_LED |
| sw_error_t |
| cmd_data_check_blinkfreq(char *cmd_str, led_blink_freq_t * arg_val, |
| a_uint32_t size) |
| { |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcasecmp(cmd_str, "2HZ")) |
| { |
| *arg_val = LED_BLINK_2HZ; |
| } |
| else if (!strcasecmp(cmd_str, "4HZ")) |
| { |
| *arg_val = LED_BLINK_4HZ; |
| } |
| else if (!strcasecmp(cmd_str, "8HZ")) |
| { |
| *arg_val = LED_BLINK_8HZ; |
| } |
| else if (!strcasecmp(cmd_str, "TXRX")) |
| { |
| *arg_val = LED_BLINK_TXRX; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ledpattern(char *info, void * val, a_uint32_t size) |
| { |
| led_ctrl_pattern_t pattern; |
| a_uint32_t tmpdata; |
| sw_error_t rv; |
| |
| memset(&pattern, 0, sizeof (led_ctrl_pattern_t)); |
| |
| /* get pattern mode configuration */ |
| rv = __cmd_data_check_complex("pattern_mode", NULL, |
| "usage: <always_off/always_blink/always_on/map>\n", |
| (param_check_t)cmd_data_check_patternmode, &pattern.mode, |
| sizeof (led_pattern_mode_t)); |
| if (rv) |
| return rv; |
| |
| if (LED_PATTERN_MAP_EN == pattern.mode) |
| { |
| rv = __cmd_data_check_boolean("full_duplex_light", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << FULL_DUPLEX_LIGHT_EN); |
| } |
| |
| rv = __cmd_data_check_boolean("half_duplex_light", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << HALF_DUPLEX_LIGHT_EN); |
| } |
| |
| rv = __cmd_data_check_boolean("power_on_light", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << POWER_ON_LIGHT_EN); |
| } |
| |
| rv = __cmd_data_check_boolean("link_1000m_light", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << LINK_1000M_LIGHT_EN); |
| } |
| |
| rv = __cmd_data_check_boolean("link_100m_light", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << LINK_100M_LIGHT_EN); |
| } |
| |
| rv = __cmd_data_check_boolean("link_10m_light", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << LINK_10M_LIGHT_EN); |
| } |
| |
| rv = __cmd_data_check_boolean("conllision_light", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << COLLISION_BLINK_EN); |
| } |
| |
| rv = __cmd_data_check_boolean("rx_traffic_blink", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << RX_TRAFFIC_BLINK_EN); |
| } |
| |
| rv = __cmd_data_check_boolean("tx_traffic_blink", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << TX_TRAFFIC_BLINK_EN); |
| } |
| |
| rv = __cmd_data_check_boolean("linkup_override_light", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &tmpdata, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (1 == tmpdata) |
| { |
| pattern.map |= (1 << LINKUP_OVERRIDE_EN); |
| } |
| |
| rv = __cmd_data_check_complex("blink freq", NULL, |
| "usage: <2HZ/4HZ/8HZ/TXRX> \n", |
| (param_check_t)cmd_data_check_blinkfreq, &pattern.freq, |
| sizeof (led_blink_freq_t)); |
| if (rv) |
| return rv; |
| } |
| |
| *(led_ctrl_pattern_t *)val = pattern; |
| |
| return SW_OK; |
| } |
| #endif |
| |
| /*Shiva*/ |
| #ifdef IN_PORTVLAN |
| sw_error_t |
| cmd_data_check_invlan_mode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "admit_all")) |
| { |
| *arg_val = FAL_INVLAN_ADMIT_ALL; |
| } |
| else if (!strcasecmp(cmd_str, "admit_tagged")) |
| { |
| *arg_val = FAL_INVLAN_ADMIT_TAGGED; |
| } |
| else if (!strcasecmp(cmd_str, "admit_untagged")) |
| { |
| *arg_val = FAL_INVLAN_ADMIT_UNTAGGED; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #ifdef HPPE |
| sw_error_t |
| cmd_data_check_global_qinqmode(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_global_qinq_mode_t *pEntry = (fal_global_qinq_mode_t *)val; |
| |
| memset(pEntry, 0, sizeof(fal_global_qinq_mode_t)); |
| |
| /* get mask */ |
| do |
| { |
| cmd = get_sub_cmd("mask", "0x0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->mask), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get ingress mode */ |
| do |
| { |
| cmd = get_sub_cmd("ingress_qinq_mode", "ctag"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_qinq_mode(cmd, &(pEntry->ingress_mode), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get egress mode */ |
| do |
| { |
| cmd = get_sub_cmd("egress_qinq_mode", "ctag"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_qinq_mode(cmd, &(pEntry->egress_mode), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_port_qinqmode(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_port_qinq_role_t *pEntry = (fal_port_qinq_role_t *)val; |
| |
| memset(pEntry, 0, sizeof(fal_port_qinq_role_t)); |
| |
| /* get mask */ |
| do |
| { |
| cmd = get_sub_cmd("mask", "0x0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->mask), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get ingress mode */ |
| do |
| { |
| cmd = get_sub_cmd("ingress_qinq_role", "edge"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_qinq_role(cmd, &(pEntry->ingress_port_role), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get egress mode */ |
| do |
| { |
| cmd = get_sub_cmd("egress_qinq_role", "edge"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_qinq_role(cmd, &(pEntry->egress_port_role), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_tpid(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_tpid_t *pEntry = (fal_tpid_t *)val; |
| a_uint32_t tmp = 0; |
| |
| memset(pEntry, 0, sizeof(fal_tpid_t)); |
| |
| /* get mask */ |
| do |
| { |
| cmd = get_sub_cmd("mask", "0x0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->mask), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get ctpid */ |
| do |
| { |
| cmd = get_sub_cmd("ctagtpid", "0x8100"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->ctpid = (a_uint16_t)tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get stpid */ |
| do |
| { |
| cmd = get_sub_cmd("stagtpid", "0x88a8"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->stpid = (a_uint16_t)tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ingress_filter(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_ingress_vlan_filter_t *pEntry = (fal_ingress_vlan_filter_t *)val; |
| |
| memset(pEntry, 0, sizeof(fal_ingress_vlan_filter_t)); |
| |
| /* get in vlan filter */ |
| do |
| { |
| cmd = get_sub_cmd("membership_filter_en", "disable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_enable(cmd, &(pEntry->membership_filter), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get tag filter */ |
| do |
| { |
| cmd = get_sub_cmd("tagged_filter_en", "disable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_enable(cmd, &(pEntry->tagged_filter), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get untag filter */ |
| do |
| { |
| cmd = get_sub_cmd("untagged_filter_en", "disable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_enable(cmd, &(pEntry->untagged_filter), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get priority tag filter */ |
| do |
| { |
| cmd = get_sub_cmd("priority_tagged_filter_en", "disable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_enable(cmd, &(pEntry->priority_filter), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_port_vlan_direction(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "all")) |
| { |
| *arg_val = FAL_PORT_VLAN_ALL; |
| } |
| else if (!strcasecmp(cmd_str, "ingress")) |
| { |
| *arg_val = FAL_PORT_VLAN_INGRESS; |
| } |
| else if (!strcasecmp(cmd_str, "egress")) |
| { |
| *arg_val = FAL_PORT_VLAN_EGRESS; |
| } |
| else |
| { |
| //dprintf("input error \n"); |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_port_default_vid_en(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_port_default_vid_enable_t *pEntry = (fal_port_default_vid_enable_t *)val; |
| |
| memset(pEntry, 0, sizeof(fal_port_default_vid_enable_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("default_ctag_vid_en", "disable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_enable(cmd, &(pEntry->default_cvid_en), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("default_stag_vid_en", "disable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_enable(cmd, &(pEntry->default_svid_en), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_port_vlan_tag(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_port_vlan_tag_t *pEntry = (fal_port_vlan_tag_t *)val; |
| a_uint32_t tmp = 0; |
| |
| memset(pEntry, 0, sizeof(fal_port_vlan_tag_t)); |
| |
| /* get mask */ |
| do |
| { |
| cmd = get_sub_cmd("mask", "0x0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->mask), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get cvid */ |
| do |
| { |
| cmd = get_sub_cmd("default_ctag_vid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->cvid = (a_uint16_t)tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get svid */ |
| do |
| { |
| cmd = get_sub_cmd("default_stag_vid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->svid = (a_uint16_t)tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get cpri */ |
| do |
| { |
| cmd = get_sub_cmd("default_ctag_pri", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->cpri = (a_uint16_t)tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get spri */ |
| do |
| { |
| cmd = get_sub_cmd("default_stag_pri", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->spri = (a_uint16_t)tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get cdei */ |
| do |
| { |
| cmd = get_sub_cmd("default_ctag_dei", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->cdei = (a_uint16_t)tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get sdei */ |
| do |
| { |
| cmd = get_sub_cmd("default_stag_dei", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->sdei = (a_uint16_t)tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_tag_propagation(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_vlantag_propagation_t *pEntry = (fal_vlantag_propagation_t *)val; |
| |
| memset(pEntry, 0, sizeof(fal_vlantag_propagation_t)); |
| |
| /* get mask */ |
| do |
| { |
| cmd = get_sub_cmd("mask", "0x0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->mask), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get vid propagation */ |
| do |
| { |
| cmd = get_sub_cmd("vid_propagation_en", "disable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_vlan_propagation(cmd, (a_uint32_t *) & (pEntry->vid_propagation), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get pri propagation */ |
| do |
| { |
| cmd = get_sub_cmd("pri_propagation_en", "disable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_vlan_propagation(cmd, (a_uint32_t *) & (pEntry->pri_propagation), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get dei propagation */ |
| do |
| { |
| cmd = get_sub_cmd("dei_propagation_en", "disable"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_vlan_propagation(cmd, (a_uint32_t *) & (pEntry->dei_propagation), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_egress_mode(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_vlantag_egress_mode_t *pEntry = (fal_vlantag_egress_mode_t *)val; |
| |
| memset(pEntry, 0, sizeof(fal_vlantag_egress_mode_t)); |
| |
| /* get mask */ |
| do |
| { |
| cmd = get_sub_cmd("mask", "0x0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->mask), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get ctag mode */ |
| do |
| { |
| cmd = get_sub_cmd("ctag_egress_vlan_mode", "unmodified"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_egmode(cmd, (a_uint32_t *) & (pEntry->ctag_mode), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get stag mode */ |
| do |
| { |
| cmd = get_sub_cmd("stag_egress_vlan_mode", "unmodified"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_egmode(cmd, (a_uint32_t *) & (pEntry->stag_mode), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_port_vlan_translation_adv_rule(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd = NULL; |
| sw_error_t rv; |
| fal_vlan_trans_adv_rule_t *pEntry = (fal_vlan_trans_adv_rule_t *)val; |
| |
| memset(pEntry, 0, sizeof(fal_vlan_trans_adv_rule_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("stagformat", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->s_tagged), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("svid_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->s_vid_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("svid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->s_vid), sizeof (a_uint32_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("spcp_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->s_pcp_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("spcp", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->s_pcp), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("sdei_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->s_dei_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("sdei", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->s_dei), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ctagformat", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->c_tagged), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cvid_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->c_vid_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cvid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->c_vid), sizeof (a_uint32_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cpcp_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->c_pcp_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cpcp", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->c_pcp), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cdei_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->c_dei_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cdei", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->c_dei), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("frame_type_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->frmtype_enable), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("frametype", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->frmtype), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("protocol_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_enable), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("protocol", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->protocol), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("vsivalid", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->vsi_valid), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("vsi_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->vsi_enable), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("vsi", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->vsi), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_port_vlan_translation_adv_action(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd = NULL; |
| sw_error_t rv; |
| fal_vlan_trans_adv_action_t *pEntry = (fal_vlan_trans_adv_action_t *)val; |
| |
| memset(pEntry, 0, sizeof(fal_vlan_trans_adv_action_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("swap_svid_cvid", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->swap_svid_cvid), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("svid_translation_cmd", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->svid_xlt_cmd), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("svidtranslation", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->svid_xlt), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cvid_translation_cmd", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->cvid_xlt_cmd), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cvidtranslation", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->cvid_xlt), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("swap_spcp_cpcp", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->swap_spcp_cpcp), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("spcp_translation_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->spcp_xlt_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("spcptranslation", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->spcp_xlt), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cpcp_translation_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->cpcp_xlt_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cpcptranslation", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->cpcp_xlt), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("swap_sdei_cdei", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->swap_sdei_cdei), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("sdei_translation_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->sdei_xlt_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("sdeitranslation", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->sdei_xlt), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cdei_translation_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->cdei_xlt_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cdeitranslation", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->cdei_xlt), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("counter_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->counter_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("counter_id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(pEntry->counter_id), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("vsi_translation_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(pEntry->vsi_xlt_enable), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("vsitranslation", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, |
| (a_uint32_t *)&(pEntry->vsi_xlt), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| #endif |
| |
| sw_error_t |
| cmd_data_check_vlan_propagation(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "disable")) |
| { |
| *arg_val = FAL_VLAN_PROPAGATION_DISABLE; |
| } |
| else if (!strcasecmp(cmd_str, "clone")) |
| { |
| *arg_val = FAL_VLAN_PROPAGATION_CLONE; |
| } |
| else if (!strcasecmp(cmd_str, "replace")) |
| { |
| *arg_val = FAL_VLAN_PROPAGATION_REPLACE; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| #ifndef IN_PORTVLAN_MINI |
| sw_error_t |
| cmd_data_check_vlan_translation(char *info, fal_vlan_trans_entry_t *val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_vlan_trans_entry_t entry; |
| |
| memset(&entry, 0, sizeof (fal_vlan_trans_entry_t)); |
| |
| rv = __cmd_data_check_complex("ovid", "1", |
| "usage: the range is 0 -- 4095\n", |
| (param_check_t)cmd_data_check_uint32, &entry.o_vid, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("bi direction", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &entry.bi_dir, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("forward direction", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &entry.forward_dir, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("reverse direction", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &entry.reverse_dir, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("svid ", "1", |
| "usage: the range is 0 -- 4095\n", |
| (param_check_t)cmd_data_check_uint32, &entry.s_vid, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("cvid ", "1", |
| "usage: the range is 0 -- 4095\n", |
| (param_check_t)cmd_data_check_uint32, &entry.c_vid, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("ovid_is_cvid", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &entry.o_vid_is_cvid, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("svid_enable", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &entry.s_vid_enable, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("cvid_enable", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &entry.c_vid_enable, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("one_2_one_vlan", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.one_2_one_vlan, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| *val = entry; |
| return SW_OK; |
| } |
| #endif |
| |
| |
| sw_error_t |
| cmd_data_check_qinq_mode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "ctag")) |
| { |
| *arg_val = FAL_QINQ_CTAG_MODE; |
| } |
| else if (!strcasecmp(cmd_str, "stag")) |
| { |
| *arg_val = FAL_QINQ_STAG_MODE; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_qinq_role(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "edge")) |
| { |
| *arg_val = FAL_QINQ_EDGE_PORT; |
| } |
| else if (!strcasecmp(cmd_str, "core")) |
| { |
| *arg_val = FAL_QINQ_CORE_PORT; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| |
| #ifdef IN_PORTCONTROL |
| sw_error_t |
| cmd_data_check_hdrmode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "noheader")) |
| { |
| *arg_val = FAL_NO_HEADER_EN; |
| } |
| else if (!strcasecmp(cmd_str, "onlymanagement")) |
| { |
| *arg_val = FAL_ONLY_MANAGE_FRAME_EN; |
| } |
| else if (!strcasecmp(cmd_str, "allframe")) |
| { |
| *arg_val = FAL_ALL_TYPE_FRAME_EN; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| #ifdef IN_FDB |
| sw_error_t |
| cmd_data_check_fdboperation(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_fdb_op_t entry; |
| |
| memset(&entry, 0, sizeof (fal_fdb_op_t)); |
| |
| rv = __cmd_data_check_boolean("port_en", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.port_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("fid_en", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.fid_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("multi_en", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.multicast_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_fdb_op_t *) val = entry; |
| return SW_OK; |
| } |
| #endif |
| #ifdef IN_PPPOE |
| sw_error_t |
| cmd_data_check_pppoe(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_pppoe_session_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_pppoe_session_t)); |
| |
| rv = __cmd_data_check_complex("entryid", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.entry_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("sessionid", "0", |
| "usage: the range is 0 -- 65535\n", |
| (param_check_t)cmd_data_check_uint32, &entry.session_id, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("multi_session", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.multi_session, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("uni_session", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.uni_session, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vrf_id", "0", |
| "usage: the range is 0 -- 7\n", |
| (param_check_t)cmd_data_check_uint32, &entry.vrf_id, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("port", "null", |
| "usage: input port number such as 1,3\n", |
| cmd_data_check_portmap, &entry.port_bitmap, |
| sizeof (fal_pbmp_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("l3_interface_index", "0", |
| "usage: the range is 0 -- 255\n", |
| cmd_data_check_uint32, &entry.l3_if_index, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("l3_interface_index_valid", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.l3_if_valid, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("smac_addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_macaddr, &(entry.smac_addr), |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("smac_valid", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.smac_valid, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_pppoe_session_t*)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_pppoe_less(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_pppoe_session_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_pppoe_session_t)); |
| |
| rv = __cmd_data_check_complex("sessionid", "0", |
| "usage: the range is 0 -- 65535\n", |
| cmd_data_check_uint32, &entry.session_id, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_pppoe_session_t*)val = entry; |
| return SW_OK; |
| } |
| #endif |
| |
| #if defined(IN_IP) || defined(IN_NAT) |
| sw_error_t |
| cmd_data_check_host_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_host_entry_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_host_entry_t)); |
| |
| rv = __cmd_data_check_complex("entryid", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.entry_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("entryflags", "0x1", |
| "usage: bitmap for host entry\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.flags), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("entrystatus", "0", |
| "usage: bitmap for host entry\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.status), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| if ((FAL_IP_IP4_ADDR & (entry.flags)) == FAL_IP_IP4_ADDR|| |
| (FAL_IP_IP4_ADDR_MCAST & (entry.flags)) == FAL_IP_IP4_ADDR_MCAST) |
| { |
| rv = __cmd_data_check_complex("ip4 addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.ip4_addr), |
| 4); |
| if (rv) |
| return rv; |
| } |
| else if ((FAL_IP_IP6_ADDR & (entry.flags)) == FAL_IP_IP6_ADDR || |
| (FAL_IP_IP6_ADDR_MCAST& (entry.flags)) == FAL_IP_IP6_ADDR_MCAST) |
| { |
| rv = __cmd_data_check_complex("ip6 addr", NULL, |
| "usage: the format is xxxx::xxxx \n", |
| (param_check_t)cmd_data_check_ip6addr, &(entry.ip6_addr), |
| 16); |
| if (rv) |
| return rv; |
| } |
| |
| rv = __cmd_data_check_complex("mac addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_macaddr, &(entry.mac_addr), |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("interface id", "0", |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_uint32, &(entry.intf_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("load_balance num", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.lb_num), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vrf id", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.vrf_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("port id", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.port_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("action", "forward", |
| "usage: <forward/drop/cpycpu/rdtcpu>\n", |
| (param_check_t)cmd_data_check_maccmd, &(entry.action), |
| sizeof (fal_fwd_cmd_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("mirror", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.mirror_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("counter", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.counter_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == entry.counter_en) |
| { |
| rv = __cmd_data_check_complex("counter id", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.counter_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| } |
| |
| rv = __cmd_data_check_complex("dst info", "0", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.dst_info), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("sync_toggle", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint8, &(entry.syn_toggle), |
| sizeof (a_uint8_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("lan_wan", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint8, &(entry.lan_wan), |
| sizeof (a_uint8_t)); |
| if (rv) |
| return rv; |
| |
| if ((FAL_IP_IP4_ADDR_MCAST & (entry.flags)) == FAL_IP_IP4_ADDR_MCAST || |
| (FAL_IP_IP6_ADDR_MCAST& (entry.flags)) == FAL_IP_IP6_ADDR_MCAST) { |
| rv = __cmd_data_check_complex("vsi", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint8, &(entry.mcast_info.vsi), |
| sizeof (a_uint8_t)); |
| if (rv) |
| return rv; |
| if ((FAL_IP_IP4_ADDR_MCAST & (entry.flags)) == FAL_IP_IP4_ADDR_MCAST) { |
| rv = __cmd_data_check_complex("ip4 addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.mcast_info.sip4_addr), |
| 4); |
| if (rv) |
| return rv; |
| } else { |
| rv = __cmd_data_check_complex("ip6 addr", NULL, |
| "usage: the format is xxxx::xxxx \n", |
| (param_check_t)cmd_data_check_ip6addr, &(entry.mcast_info.sip6_addr), |
| 16); |
| if (rv) |
| return rv; |
| } |
| } |
| |
| |
| |
| *(fal_host_entry_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_arp_learn_mode(char *cmd_str, fal_arp_learn_mode_t * arg_val, |
| a_uint32_t size) |
| { |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcasecmp(cmd_str, "learnlocal")) |
| { |
| *arg_val = FAL_ARP_LEARN_LOCAL; |
| } |
| else if (!strcasecmp(cmd_str, "learnall")) |
| { |
| *arg_val = FAL_ARP_LEARN_ALL; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_ip_guard_mode(char *cmd_str, fal_source_guard_mode_t * arg_val, a_uint32_t size) |
| { |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcasecmp(cmd_str, "mac_ip")) |
| { |
| *arg_val = FAL_MAC_IP_GUARD; |
| } |
| else if (!strcasecmp(cmd_str, "mac_ip_port")) |
| { |
| *arg_val = FAL_MAC_IP_PORT_GUARD; |
| } |
| else if (!strcasecmp(cmd_str, "mac_ip_vlan")) |
| { |
| *arg_val = FAL_MAC_IP_VLAN_GUARD; |
| } |
| else if (!strcasecmp(cmd_str, "mac_ip_port_vlan")) |
| { |
| *arg_val = FAL_MAC_IP_PORT_VLAN_GUARD; |
| } |
| else if (!strcasecmp(cmd_str, "no_guard")) |
| { |
| *arg_val = FAL_NO_SOURCE_GUARD; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| |
| sw_error_t |
| cmd_data_check_nat_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| a_uint32_t tmp = 0; |
| fal_nat_entry_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_nat_entry_t)); |
| |
| rv = __cmd_data_check_complex("entryid", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.entry_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("entryflags", "0", |
| "usage: bitmap for host entry\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.flags), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("entrystatus", "0xf", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.status), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("select_idx", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.slct_idx), |
| sizeof (a_uint32_t)); |
| |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vrf_id", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.vrf_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("src addr", "0.0.0.0", |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.src_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("trans addr", "0.0.0.0", |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.trans_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("port num", "0", |
| "usage: 0- 65535\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.port_num = tmp & 0xffff; |
| |
| |
| rv = __cmd_data_check_complex("port range", "0", |
| "usage: 0- 65535\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.port_range = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("action", "forward", |
| "usage: <forward/drop/cpycpu/rdtcpu>\n", |
| (param_check_t)cmd_data_check_maccmd, &entry.action, |
| sizeof (fal_fwd_cmd_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("mirror", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.mirror_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("counter", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.counter_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == entry.counter_en) |
| { |
| rv = __cmd_data_check_complex("counter id", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.counter_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| } |
| |
| *(fal_nat_entry_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| |
| sw_error_t |
| cmd_data_check_napt_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| a_uint32_t tmp = 0; |
| fal_napt_entry_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_napt_entry_t)); |
| |
| rv = __cmd_data_check_complex("entryid", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &entry.entry_id, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("entryflags", "0", |
| "usage: bitmap for host entry\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.flags), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("entrystatus", "0xf", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.status), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vrf_id", "0x0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.vrf_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("flow_cookie", "0x0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.flow_cookie), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("load_balance", "0x0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.load_balance), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("src addr", "0.0.0.0", |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.src_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("dst addr", "0.0.0.0", |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.dst_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| if (FAL_NAT_ENTRY_TRANS_IPADDR_INDEX & (entry.flags)) |
| { |
| rv = __cmd_data_check_complex("trans addr index", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.trans_addr), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| } |
| else |
| { |
| rv = __cmd_data_check_complex("trans addr", "0.0.0.0", |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.trans_addr), |
| 4); |
| if (rv) |
| return rv; |
| } |
| |
| rv = __cmd_data_check_complex("src port", "0", |
| "usage: 0- 65535\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.src_port = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("dst port", "0", |
| "usage: 0- 65535\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.dst_port = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("trans port", "0", |
| "usage: 0- 65535\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.trans_port = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("action", "forward", |
| "usage: <forward/drop/cpycpu/rdtcpu>\n", |
| (param_check_t)cmd_data_check_maccmd, &(entry.action), |
| sizeof (fal_fwd_cmd_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("mirror", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.mirror_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| |
| rv = __cmd_data_check_boolean("counter", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.counter_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| |
| if (A_TRUE == entry.counter_en) |
| { |
| rv = __cmd_data_check_complex("counter id", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.counter_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| } |
| |
| rv = __cmd_data_check_boolean("priority", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.priority_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == entry.priority_en) |
| { |
| rv = __cmd_data_check_complex("priority value", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.priority_val), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| } |
| |
| *(fal_napt_entry_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_flow_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| a_uint32_t tmp = 0; |
| fal_napt_entry_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_napt_entry_t)); |
| |
| rv = __cmd_data_check_complex("entryid", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &entry.entry_id, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("entryflags", "0", |
| "usage: bitmap for host entry\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.flags), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("entrystatus", "0xf", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.status), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vrf_id", "0x0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.vrf_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("flow_cookie", "0x0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.flow_cookie), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("load_balance", "0x0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.load_balance), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("src addr", "0.0.0.0", |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.src_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("dst addr", "0.0.0.0", |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.dst_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| |
| rv = __cmd_data_check_complex("src port", "0", |
| "usage: 0- 65535\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.src_port = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("dst port", "0", |
| "usage: 0- 65535\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.dst_port = tmp & 0xffff; |
| |
| |
| rv = __cmd_data_check_complex("action", "forward", |
| "usage: <forward/drop/cpycpu/rdtcpu>\n", |
| (param_check_t)cmd_data_check_maccmd, &(entry.action), |
| sizeof (fal_fwd_cmd_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("mirror", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.mirror_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| |
| rv = __cmd_data_check_boolean("counter", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.counter_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| |
| if (A_TRUE == entry.counter_en) |
| { |
| rv = __cmd_data_check_complex("counter id", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.counter_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| } |
| |
| rv = __cmd_data_check_boolean("priority", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &entry.priority_en, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == entry.priority_en) |
| { |
| rv = __cmd_data_check_complex("priority value", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.priority_val), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| } |
| |
| *(fal_napt_entry_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_napt_mode(char *cmd_str, fal_napt_mode_t * arg_val, |
| a_uint32_t size) |
| { |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (!strcasecmp(cmd_str, "fullcone")) |
| { |
| *arg_val = FAL_NAPT_FULL_CONE; |
| } |
| else if (!strcasecmp(cmd_str, "strictcone")) |
| { |
| *arg_val = FAL_NAPT_STRICT_CONE; |
| } |
| else if (!strcasecmp(cmd_str, "portstrict")) |
| { |
| *arg_val = FAL_NAPT_PORT_STRICT; |
| } |
| else if (!strcasecmp(cmd_str, "synmatric")) |
| { |
| *arg_val = FAL_NAPT_SYNMETRIC; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_intf_mac_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| a_uint32_t tmp = 0; |
| sw_error_t rv; |
| fal_intf_mac_entry_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_intf_mac_entry_t)); |
| |
| rv = __cmd_data_check_complex("entryid", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.entry_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vrf id", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.vrf_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vid low", NULL, |
| "usage: low vlan id\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.vid_low = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("vid high", NULL, |
| "usage: high vlan id\n", |
| (param_check_t)cmd_data_check_uint16, &tmp, sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.vid_high = tmp & 0xffff; |
| |
| rv = __cmd_data_check_complex("mac addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_macaddr, &(entry.mac_addr), |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("ip4_route", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &entry.ip4_route, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("ip6_route", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &entry.ip6_route, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_intf_mac_entry_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_pub_addr_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_nat_pub_addr_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_nat_pub_addr_t)); |
| |
| rv = __cmd_data_check_complex("entryid", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.entry_id), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("pub addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.pub_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| *(fal_nat_pub_addr_t *)val = entry; |
| return SW_OK; |
| } |
| #endif |
| |
| #ifdef IN_RATE |
| sw_error_t |
| cmd_data_check_egress_shaper(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| a_bool_t bool = 0; |
| fal_egress_shaper_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_egress_shaper_t)); |
| |
| rv = __cmd_data_check_boolean("bytebased", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &bool, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == bool) |
| { |
| entry.meter_unit = FAL_BYTE_BASED; |
| } |
| else |
| { |
| entry.meter_unit = FAL_FRAME_BASED; |
| } |
| |
| rv = __cmd_data_check_complex("cir", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.cir), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("cbs", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.cbs), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("eir", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.eir), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("ebs", "0", |
| "usage: integer\n", |
| (param_check_t)cmd_data_check_uint32, &(entry.ebs), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_egress_shaper_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_acl_policer(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| a_bool_t bool = A_FALSE; |
| fal_acl_policer_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_acl_policer_t)); |
| |
| rv = __cmd_data_check_boolean("counter_mode", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.counter_mode), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("bytebased", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &bool, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == bool) |
| { |
| entry.meter_unit = FAL_BYTE_BASED; |
| } |
| else |
| { |
| entry.meter_unit = FAL_FRAME_BASED; |
| } |
| |
| if (A_TRUE == entry.counter_mode) |
| { |
| *(fal_acl_policer_t *)val = entry; |
| return SW_OK; |
| } |
| |
| rv = __cmd_data_check_boolean("couple_flag", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.couple_flag), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("color_aware", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.color_mode), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("deficit_flag", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.deficit_en), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("cir", "0", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.cir), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("cbs", "0", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.cbs), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("eir", "0", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.eir), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("ebs", "0", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.ebs), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("meter_interval", "1ms", |
| "usage: the format <100us/1ms/10ms/100ms>\n", |
| (param_check_t)cmd_data_check_policer_timesslot, &(entry.meter_interval), |
| sizeof (fal_rate_mt_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_acl_policer_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_policer_timesslot(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strncasecmp(cmd_str, "100us", 5)) |
| *arg_val = FAL_RATE_MI_100US; |
| else if (!strncasecmp(cmd_str, "1ms", 3)) |
| *arg_val = FAL_RATE_MI_1MS; |
| else if (!strncasecmp(cmd_str, "10ms", 4)) |
| *arg_val = FAL_RATE_MI_10MS; |
| else if (!strncasecmp(cmd_str, "100ms", 5)) |
| *arg_val = FAL_RATE_MI_100MS; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_port_policer(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| a_bool_t bool = 0; |
| fal_port_policer_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_port_policer_t)); |
| |
| rv = __cmd_data_check_boolean("combine_enable", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.combine_mode), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("bytebased", "yes", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_TRUE, &bool, |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| if (A_TRUE == bool) |
| { |
| entry.meter_unit = FAL_BYTE_BASED; |
| } |
| else |
| { |
| entry.meter_unit = FAL_FRAME_BASED; |
| } |
| |
| rv = __cmd_data_check_boolean("couple_flag", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.couple_flag), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("color_aware", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.color_mode), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("deficit_flag", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.deficit_en), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("c_enable", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.c_enable), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("cir", "0", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.cir), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("cbs", "0", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.cbs), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("c_rate_flag", "0xfe", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.c_rate_flag), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("c_meter_interval", "1ms", |
| "usage: the format <100us/1ms/10ms/100ms>\n", |
| (param_check_t)cmd_data_check_policer_timesslot, &(entry.c_meter_interval), |
| sizeof (fal_rate_mt_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_boolean("e_enable", "no", |
| "usage: <yes/no/y/n>\n", |
| cmd_data_check_confirm, A_FALSE, &(entry.e_enable), |
| sizeof (a_bool_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("eir", "0", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.eir), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("ebs", "0", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.ebs), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("e_rate_flag", "0xfe", |
| "usage: integer\n", |
| cmd_data_check_uint32, &(entry.e_rate_flag), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("e_meter_interval", "1ms", |
| "usage: the format <100us/1ms/10ms/100ms>\n", |
| (param_check_t)cmd_data_check_policer_timesslot, &(entry.e_meter_interval), |
| sizeof (fal_rate_mt_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_port_policer_t *)val = entry; |
| return SW_OK; |
| } |
| #endif |
| #if 0 |
| sw_error_t |
| cmd_data_check_mac_mode(char *cmd_str, fal_interface_mac_mode_t * arg_val, |
| a_uint32_t size) |
| { |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (0 == cmd_str[0]) |
| { |
| *arg_val = FAL_MAC_MODE_RGMII; |
| } |
| else if (!strcasecmp(cmd_str, "rgmii")) |
| { |
| *arg_val = FAL_MAC_MODE_RGMII; |
| } |
| else if (!strcasecmp(cmd_str, "rmii")) |
| { |
| *arg_val = FAL_MAC_MODE_RMII; |
| } |
| else if (!strcasecmp(cmd_str, "gmii")) |
| { |
| *arg_val = FAL_MAC_MODE_GMII; |
| } |
| else if (!strcasecmp(cmd_str, "mii")) |
| { |
| *arg_val = FAL_MAC_MODE_MII; |
| } |
| else if (!strcasecmp(cmd_str, "sgmii")) |
| { |
| *arg_val = FAL_MAC_MODE_SGMII; |
| } |
| else if (!strcasecmp(cmd_str, "fiber")) |
| { |
| *arg_val = FAL_MAC_MODE_FIBER; |
| } |
| else if (!strcasecmp(cmd_str, "default")) |
| { |
| *arg_val = FAL_MAC_MODE_DEFAULT; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_clock_mode(char *cmd_str, fal_interface_clock_mode_t * arg_val, |
| a_uint32_t size) |
| { |
| if (NULL == cmd_str) |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (0 == cmd_str[0]) |
| { |
| *arg_val = FAL_INTERFACE_CLOCK_MAC_MODE; |
| } |
| if (!strcasecmp(cmd_str, "mac")) |
| { |
| *arg_val = FAL_INTERFACE_CLOCK_MAC_MODE; |
| } |
| else if (!strcasecmp(cmd_str, "phy")) |
| { |
| *arg_val = FAL_INTERFACE_CLOCK_PHY_MODE; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| #ifdef IN_FDB |
| #ifndef IN_FDB_MINI |
| sw_error_t |
| cmd_data_check_fdb_smode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "ivl")) |
| *arg_val = INVALID_VLAN_IVL; |
| else if (!strcasecmp(cmd_str, "svl")) |
| *arg_val = INVALID_VLAN_SVL; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| #endif |
| #ifdef IN_SEC |
| sw_error_t |
| cmd_data_check_sec_mac(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "resv_vid")) |
| *arg_val = FAL_NORM_MAC_RESV_VID_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_src_addr")) |
| *arg_val = FAL_NORM_MAC_INVALID_SRC_ADDR_CMD; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_sec_ip(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "invalid_ver")) |
| *arg_val = FAL_NORM_IP_INVALID_VER_CMD; |
| else if (!strcasecmp(cmd_str, "same_addr")) |
| *arg_val = FAL_NROM_IP_SAME_ADDR_CMD; |
| else if (!strcasecmp(cmd_str, "ttl_change_status")) |
| *arg_val = FAL_NROM_IP_TTL_CHANGE_STATUS; |
| else if (!strcasecmp(cmd_str, "ttl_val")) |
| *arg_val = FAL_NROM_IP_TTL_VALUE; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_sec_ip4(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "invalid_hl")) |
| *arg_val = FAL_NROM_IP4_INVALID_HL_CMD; |
| else if (!strcasecmp(cmd_str, "hdr_opts")) |
| *arg_val = FAL_NROM_IP4_HDR_OPTIONS_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_df")) |
| *arg_val = FAL_NROM_IP4_INVALID_DF_CMD; |
| else if (!strcasecmp(cmd_str, "frag_offset_min_len")) |
| *arg_val = FAL_NROM_IP4_FRAG_OFFSET_MIN_LEN_CMD; |
| else if (!strcasecmp(cmd_str, "frag_offset_min_size")) |
| *arg_val = FAL_NROM_IP4_FRAG_OFFSET_MIN_SIZE; |
| else if (!strcasecmp(cmd_str, "frag_offset_max_len")) |
| *arg_val = FAL_NROM_IP4_FRAG_OFFSET_MAX_LEN_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_frag_offset")) |
| *arg_val = FAL_NROM_IP4_INVALID_FRAG_OFFSET_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_sip")) |
| *arg_val = FAL_NROM_IP4_INVALID_SIP_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_dip")) |
| *arg_val = FAL_NROM_IP4_INVALID_DIP_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_chksum")) |
| *arg_val = FAL_NROM_IP4_INVALID_CHKSUM_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_pl")) |
| *arg_val = FAL_NROM_IP4_INVALID_PL_CMD; |
| else if (!strcasecmp(cmd_str, "df_clear_status")) |
| *arg_val = FAL_NROM_IP4_DF_CLEAR_STATUS; |
| else if (!strcasecmp(cmd_str, "ipid_random_status")) |
| *arg_val = FAL_NROM_IP4_IPID_RANDOM_STATUS; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_sec_ip6(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "invalid_dip")) |
| *arg_val = FAL_NROM_IP6_INVALID_DIP_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_sip")) |
| *arg_val = FAL_NROM_IP6_INVALID_SIP_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_pl")) |
| *arg_val = FAL_NROM_IP6_INVALID_PL_CMD; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_sec_tcp(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "blat")) |
| *arg_val = FAL_NROM_TCP_BLAT_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_hl")) |
| *arg_val = FAL_NROM_TCP_INVALID_HL_CMD; |
| else if (!strcasecmp(cmd_str, "min_hdr_size")) |
| *arg_val = FAL_NROM_TCP_MIN_HDR_SIZE; |
| else if (!strcasecmp(cmd_str, "invalid_syn")) |
| *arg_val = FAL_NROM_TCP_INVALID_SYN_CMD; |
| else if (!strcasecmp(cmd_str, "su_block")) |
| *arg_val = FAL_NROM_TCP_SU_BLOCK_CMD; |
| else if (!strcasecmp(cmd_str, "sp_block")) |
| *arg_val = FAL_NROM_TCP_SP_BLOCK_CMD; |
| else if (!strcasecmp(cmd_str, "sap_block")) |
| *arg_val = FAL_NROM_TCP_SAP_BLOCK_CMD; |
| else if (!strcasecmp(cmd_str, "xmas_scan")) |
| *arg_val = FAL_NROM_TCP_XMAS_SCAN_CMD; |
| else if (!strcasecmp(cmd_str, "null_scan")) |
| *arg_val = FAL_NROM_TCP_NULL_SCAN_CMD; |
| else if (!strcasecmp(cmd_str, "sr_block")) |
| *arg_val = FAL_NROM_TCP_SR_BLOCK_CMD; |
| else if (!strcasecmp(cmd_str, "sf_block")) |
| *arg_val = FAL_NROM_TCP_SF_BLOCK_CMD; |
| else if (!strcasecmp(cmd_str, "sar_block")) |
| *arg_val = FAL_NROM_TCP_SAR_BLOCK_CMD; |
| else if (!strcasecmp(cmd_str, "rst_scan")) |
| *arg_val = FAL_NROM_TCP_RST_SCAN_CMD; |
| else if (!strcasecmp(cmd_str, "rst_with_data")) |
| *arg_val = FAL_NROM_TCP_RST_WITH_DATA_CMD; |
| else if (!strcasecmp(cmd_str, "fa_block")) |
| *arg_val = FAL_NROM_TCP_FA_BLOCK_CMD; |
| else if (!strcasecmp(cmd_str, "pa_block")) |
| *arg_val = FAL_NROM_TCP_PA_BLOCK_CMD; |
| else if (!strcasecmp(cmd_str, "ua_block")) |
| *arg_val = FAL_NROM_TCP_UA_BLOCK_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_chksum")) |
| *arg_val = FAL_NROM_TCP_INVALID_CHKSUM_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_urgptr")) |
| *arg_val = FAL_NROM_TCP_INVALID_URGPTR_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_opts")) |
| *arg_val = FAL_NROM_TCP_INVALID_OPTIONS_CMD; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_sec_udp(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "blat")) |
| *arg_val = FAL_NROM_UDP_BLAT_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_len")) |
| *arg_val = FAL_NROM_UDP_INVALID_LEN_CMD; |
| else if (!strcasecmp(cmd_str, "invalid_chksum")) |
| *arg_val = FAL_NROM_UDP_INVALID_CHKSUM_CMD; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_sec_icmp4(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "ping_pl_exceed")) |
| *arg_val = FAL_NROM_ICMP4_PING_PL_EXCEED_CMD; |
| else if (!strcasecmp(cmd_str, "ping_frag")) |
| *arg_val = FAL_NROM_ICMP4_PING_FRAG_CMD; |
| else if (!strcasecmp(cmd_str, "ping_max_pl")) |
| *arg_val = FAL_NROM_ICMP4_PING_MAX_PL_VALUE; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_sec_icmp6(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "ping_pl_exceed")) |
| *arg_val = FAL_NROM_ICMP6_PING_PL_EXCEED_CMD; |
| else if (!strcasecmp(cmd_str, "ping_frag")) |
| *arg_val = FAL_NROM_ICMP6_PING_FRAG_CMD; |
| else if (!strcasecmp(cmd_str, "ping_max_pl")) |
| *arg_val = FAL_NROM_ICMP6_PING_MAX_PL_VALUE; |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #ifdef HPPE |
| sw_error_t |
| cmd_data_check_l3_parser(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| a_uint32_t tmp; |
| sw_error_t rv; |
| fal_l3_excep_parser_ctrl entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_l3_excep_parser_ctrl)); |
| |
| do |
| { |
| cmd = get_sub_cmd("small_ip4ttl", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (a_uint32_t)); |
| if (!rv) |
| entry.small_ip4ttl = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("small_ip6hoplimit", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (a_uint32_t)); |
| if (!rv) |
| entry.small_ip6hoplimit = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_l3_excep_parser_ctrl *)val = entry; |
| return SW_OK; |
| |
| } |
| |
| sw_error_t |
| cmd_data_check_l4_parser(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| a_uint32_t tmp; |
| sw_error_t rv; |
| fal_l4_excep_parser_ctrl entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_l4_excep_parser_ctrl)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags0", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags[0] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags_mask0", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags_mask[0] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags1", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags[1] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags_mask1", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags_mask[1] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags2", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags[2] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags_mask2", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags_mask[2] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags3", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags[3] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags_mask3", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags_mask[3] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags4", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags[4] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags_mask4", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags_mask[4] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags5", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags[5] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags_mask5", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags_mask[5]= tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags6", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags[6] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags_mask6", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags_mask[6] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags7", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags[7] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcp_flags_mask7", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (tmp)); |
| entry.tcp_flags_mask[7] = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| *(fal_l4_excep_parser_ctrl *)val = entry; |
| return SW_OK; |
| |
| } |
| |
| sw_error_t |
| cmd_data_check_exp_ctrl(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_l3_excep_ctrl_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_l3_excep_ctrl_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("excep_cmd", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.cmd), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("deacclr_en", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.deacclr_en), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("l3route_only_en", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.l3route_only_en), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("l2fwd_only_en", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.l2fwd_only_en), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("l2flow_en", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.l2flow_en), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("l3flow_en", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.l3flow_en), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("multicast_en", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.multicast_en), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_l3_excep_ctrl_t *)val = entry; |
| return SW_OK; |
| } |
| #endif |
| #endif |
| #ifdef IN_COSMAP |
| #ifndef IN_COSMAP_MINI |
| sw_error_t |
| cmd_data_check_remark_entry(char *info, void *val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_egress_remark_table_t *pEntry = (fal_egress_remark_table_t *)val; |
| a_uint32_t tmp = 0; |
| |
| memset(pEntry, 0, sizeof(fal_egress_remark_table_t)); |
| |
| /* get remark_dscp */ |
| rv = __cmd_data_check_complex("remark dscp", "enable", |
| "usage: <enable/disable>\n", |
| (param_check_t)cmd_data_check_enable, &(pEntry->remark_dscp), |
| sizeof(a_bool_t)); |
| if (rv) |
| return rv; |
| |
| /* get remark_up */ |
| rv = __cmd_data_check_complex("remark up", "enable", |
| "usage: <enable/disable>\n", |
| (param_check_t)cmd_data_check_enable, &(pEntry->remark_up), |
| sizeof(a_bool_t)); |
| if (rv) |
| return rv; |
| |
| /* get remark_dei */ |
| rv = __cmd_data_check_complex("remark dei", "enable", |
| "usage: <enable/disable>\n", |
| (param_check_t)cmd_data_check_enable, &(pEntry->remark_dei), |
| sizeof(a_bool_t)); |
| if (rv) |
| return rv; |
| |
| /* get g_dscp */ |
| rv = __cmd_data_check_range("green dscp", NULL, |
| "usage: the range is 0 -- 63\n", |
| cmd_data_check_integer, &tmp, 63, 0); |
| if (rv) |
| return rv; |
| pEntry->g_dscp = tmp; |
| |
| /* get y_dscp */ |
| rv = __cmd_data_check_range("yellow dscp", NULL, |
| "usage: the range is 0 -- 63\n", |
| cmd_data_check_integer, &tmp, 63, 0); |
| if (rv) |
| return rv; |
| pEntry->y_dscp = tmp; |
| |
| /* get g_up */ |
| rv = __cmd_data_check_range("green up", NULL, |
| "usage: the range is 0 -- 63\n", |
| cmd_data_check_integer, &tmp, 7, 0); |
| if (rv) |
| return rv; |
| pEntry->g_up = tmp; |
| |
| /* get y_up */ |
| rv = __cmd_data_check_range("yellow up", NULL, |
| "usage: the range is 0 -- 63\n", |
| cmd_data_check_integer, &tmp, 7, 0); |
| if (rv) |
| return rv; |
| pEntry->y_up = tmp; |
| |
| /* get g_dei */ |
| rv = __cmd_data_check_range("green dei", NULL, |
| "usage: the range is 0 -- 1\n", |
| cmd_data_check_integer, &tmp, 1, 0); |
| if (rv) |
| return rv; |
| pEntry->g_dei = tmp; |
| |
| /* get y_dei */ |
| rv = __cmd_data_check_range("yellow dei", NULL, |
| "usage: the range is 0 -- 1\n", |
| cmd_data_check_integer, &tmp, 1, 0); |
| if (rv) |
| return rv; |
| pEntry->y_dei = tmp; |
| |
| /* |
| dprintf("remark_dscp=%d, remark_up=%d, g_dscp=%d, y_dscp=%d\n", |
| pEntry->remark_dscp, |
| pEntry->remark_up, |
| pEntry->g_dscp, |
| pEntry->y_dscp); |
| |
| *(fal_egress_remark_table_t *) val = entry; |
| */ |
| return SW_OK; |
| } |
| #endif |
| #endif |
| #ifdef IN_IP |
| #ifndef IN_IP_MINI |
| sw_error_t |
| cmd_data_check_default_route_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_default_route_t entry; |
| |
| aos_mem_zero(&entry, sizeof(entry)); |
| |
| do |
| { |
| cmd = get_sub_cmd("entry valid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.valid), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("vrf id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &(entry.vrf_id), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ip version", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &(entry.ip_version), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("route type", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &(entry.droute_type), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("index", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &(entry.index), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_default_route_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_host_route_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_host_route_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_intf_mac_entry_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("entry valid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.valid), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("vrf id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &(entry.vrf_id), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ip version", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &(entry.ip_version), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| if (entry.ip_version == 0) /*IPv4*/ |
| { |
| rv = __cmd_data_check_complex("ip4 addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.route_addr.ip4_addr), |
| 4); |
| if (rv) |
| return rv; |
| } |
| else if (entry.ip_version == 1) /*IPv6*/ |
| { |
| rv = __cmd_data_check_complex("ip6 addr", NULL, |
| "usage: the format is xxxx::xxxx \n", |
| (param_check_t)cmd_data_check_ip6addr, &(entry.route_addr.ip6_addr), |
| 16); |
| if (rv) |
| return rv; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| do |
| { |
| cmd = get_sub_cmd("prefix_length", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &(entry.prefix_length), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_host_route_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ip4_rfs_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| a_uint32_t tmp = 0; |
| sw_error_t rv; |
| fal_ip4_rfs_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_ip4_rfs_t)); |
| |
| rv = __cmd_data_check_complex("mac addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_macaddr, &(entry.mac_addr), |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("ip4 addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.ip4_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vid", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &(entry.vid), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("loadbalance", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| entry.load_balance = tmp; |
| *(fal_ip4_rfs_t *)val = entry; |
| |
| return SW_OK; |
| } |
| #endif |
| #endif |
| #if 0 |
| sw_error_t |
| cmd_data_check_fdb_rfs(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| a_uint32_t tmp; |
| sw_error_t rv; |
| fal_fdb_rfs_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_fdb_rfs_t)); |
| |
| rv = __cmd_data_check_complex("mac addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| cmd_data_check_macaddr, &(entry.addr), |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("fid", NULL, |
| "usage: the format is xx\n", |
| cmd_data_check_uint32, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| entry.fid = tmp; |
| |
| rv = __cmd_data_check_complex("loadbalance", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| entry.load_balance = tmp; |
| |
| *(fal_fdb_rfs_t *)val = entry; |
| return SW_OK; |
| } |
| #endif |
| #if defined(IN_IP) || defined(IN_NAT) |
| sw_error_t |
| cmd_data_check_flow_cookie(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_flow_cookie_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_flow_cookie_t)); |
| |
| rv = __cmd_data_check_complex("proto", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &(entry.proto), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("src addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.src_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("dst addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.dst_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("src port", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &(entry.src_port), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("dst port", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &(entry.dst_port), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("flow cookie", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &(entry.flow_cookie), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| |
| *(fal_flow_cookie_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_flow_rfs(char *cmd_str, void * val, a_uint32_t size) |
| { |
| a_uint32_t tmp = 0; |
| sw_error_t rv; |
| fal_flow_rfs_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_flow_cookie_t)); |
| |
| rv = __cmd_data_check_complex("proto", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &(entry.proto), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("src addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.src_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("dst addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.dst_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("src port", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &(entry.src_port), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("dst port", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &(entry.dst_port), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("flow rfs", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| entry.load_balance = tmp; |
| |
| |
| *(fal_flow_rfs_t *)val = entry; |
| return SW_OK; |
| } |
| #endif |
| #ifdef IN_IP |
| #ifndef IN_IP_MINI |
| sw_error_t |
| cmd_data_check_ip_global(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| a_uint32_t tmp; |
| sw_error_t rv; |
| fal_ip_global_cfg_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_ip_global_cfg_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mru_fail_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.mru_fail_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mru_deacclr_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.mru_deacclr_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mtu_fail_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.mtu_fail_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mtu_deacclr_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.mtu_deacclr_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mtu_nonfrag_fail_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.mtu_nonfrag_fail_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mtu_nonfrag_deacclr_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.mtu_df_deacclr_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("prefix_bc_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.prefix_bc_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("prefix_bc_deacclr_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.prefix_deacclr_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("icmp_rdt_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.icmp_rdt_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("icmp_rdt_deacclr_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.icmp_rdt_deacclr_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_mode_0", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (a_uint32_t)); |
| if (!rv) |
| entry.hash_mode_0 = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_mode_1", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (a_uint32_t)); |
| if (!rv) |
| entry.hash_mode_1 = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_ip_global_cfg_t *)val = entry; |
| return SW_OK; |
| |
| } |
| |
| sw_error_t |
| cmd_data_check_ip_mcmode(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_mc_mode_cfg_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_mc_mode_cfg_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv4_mc_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.l2_ipv4_mc_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv4_igmpv3_mode", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.l2_ipv4_mc_mode), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv6_mc_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.l2_ipv6_mc_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv6_mldv2_mode", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.l2_ipv6_mc_mode), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_mc_mode_cfg_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ip_portmac(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_macaddr_entry_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_macaddr_entry_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("entry_valid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.valid), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| rv = __cmd_data_check_complex("mac_addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_macaddr, &(entry.mac_addr), |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_macaddr_entry_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ip_pub(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_ip_pub_addr_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_ip_pub_addr_t)); |
| |
| rv = __cmd_data_check_complex(" pub_ip_addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.pub_ip_addr), |
| 4); |
| if (rv) |
| return rv; |
| |
| *(fal_ip_pub_addr_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ip_sg(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_sg_cfg_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_sg_cfg_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv4_sg_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv4_sg_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv4_sg_violation_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.ipv4_sg_vio_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv4_sg_port_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv4_sg_port_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv4_sg_svlan_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv4_sg_svlan_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv4_sg_cvlan_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv4_sg_cvlan_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv4_src_unk_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.ipv4_src_unk_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv6_sg_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv6_sg_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv6_sg_violation_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.ipv6_sg_vio_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv6_sg_port_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv6_sg_port_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv6_sg_svlan_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv6_sg_svlan_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv6_sg_cvlan_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv6_sg_cvlan_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv6_src_unk_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.ipv6_src_unk_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_sg_cfg_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_nexthop(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_ip_nexthop_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_ip_nexthop_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("type", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.type), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| if (entry.type == 0) { |
| do |
| { |
| cmd = get_sub_cmd("vsi", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.vsi), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| } else { |
| do |
| { |
| cmd = get_sub_cmd("port", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.port), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| } |
| |
| do |
| { |
| cmd = get_sub_cmd("if_index", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.if_index), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ip_to_me_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.ip_to_me_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("pub_ip_index", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.pub_ip_index), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("stag_fmt", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.stag_fmt), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("svid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.svid), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ctag_fmt", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.ctag_fmt), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cvid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.cvid), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| rv = __cmd_data_check_complex("mac_addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_macaddr, &(entry.mac_addr), |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex(" dnat_ip", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.dnat_ip), |
| 4); |
| if (rv) |
| return rv; |
| |
| |
| *(fal_ip_nexthop_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_vsi_intf(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_intf_id_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_intf_id_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("l3_if_valid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.l3_if_valid), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("l3_if_index", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.l3_if_index), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_intf_id_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_intf(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_intf_entry_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_intf_entry_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mru", "0x5dc"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.mru), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mtu", "0x5dc"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.mtu), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ttl_dec_bypass_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.ttl_dec_bypass_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv4_uc_route_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv4_uc_route_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ipv6_uc_route_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv6_uc_route_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("icmp_trigger_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.icmp_trigger_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ttl_exceed_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.ttl_exceed_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ttl_exceed_deacclr_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.ttl_exceed_deacclr_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("mac_addr_bitmap", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.mac_addr_bitmap), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| rv = __cmd_data_check_complex("mac_addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_macaddr, &(entry.mac_addr), |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_intf_entry_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_network_route(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_network_route_entry_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_network_route_entry_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("type", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.type), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| if (entry.type == 0) /*IPv4*/ |
| { |
| rv = __cmd_data_check_complex("ip4_addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.route_addr.ip4_addr), |
| 4); |
| if (rv) |
| return rv; |
| } |
| else if (entry.type == 1) /*IPv6*/ |
| { |
| rv = __cmd_data_check_complex("ip6_addr", NULL, |
| "usage: the format is xxxx::xxxx \n", |
| (param_check_t)cmd_data_check_ip6addr, &(entry.route_addr.ip6_addr), |
| 16); |
| if (rv) |
| return rv; |
| |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| if (entry.type == 0) /*IPv4*/ |
| { |
| rv = __cmd_data_check_complex("ip4_addr_mask", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.route_addr_mask.ip4_addr_mask), |
| 4); |
| if (rv) |
| return rv; |
| } |
| else if (entry.type == 1) /*IPv6*/ |
| { |
| rv = __cmd_data_check_complex("ip6_addr_mask", NULL, |
| "usage: the format is xxxx::xxxx \n", |
| (param_check_t)cmd_data_check_ip6addr, &(entry.route_addr_mask.ip6_addr_mask), |
| 16); |
| if (rv) |
| return rv; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| do |
| { |
| cmd = get_sub_cmd("action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dst_info", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.dst_info), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("lan_wan", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.lan_wan), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_network_route_entry_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| |
| sw_error_t |
| cmd_data_check_arp_sg(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_arp_sg_cfg_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_arp_sg_cfg_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("arp_sg_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv4_arp_sg_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("arp_sg_violation_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.ipv4_arp_sg_vio_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("arp_sg_port_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv4_arp_sg_port_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("arp_sg_svlan_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv4_arp_sg_svlan_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("arp_sg_cvlan_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ipv4_arp_sg_cvlan_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("arp_sg_unk_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.ipv4_arp_src_unk_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("nd_sg_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ip_nd_sg_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("nd_sg_violation_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.ip_nd_sg_vio_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("nd_sg_port_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ip_nd_sg_port_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("nd_sg_svlan_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ip_nd_sg_svlan_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("nd_sg_cvlan_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ip_nd_sg_cvlan_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("nd_sg_unk_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.ip_nd_src_unk_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_arp_sg_cfg_t *)val = entry; |
| return SW_OK; |
| } |
| sw_error_t |
| cmd_data_check_ip6_rfs_entry(char *cmd_str, void * val, a_uint32_t size) |
| { |
| a_uint32_t tmp = 0; |
| sw_error_t rv; |
| fal_ip6_rfs_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_ip4_rfs_t)); |
| |
| rv = __cmd_data_check_complex("mac addr", NULL, |
| "usage: the format is xx-xx-xx-xx-xx-xx \n", |
| (param_check_t)cmd_data_check_macaddr, &(entry.mac_addr), |
| sizeof (fal_mac_addr_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("ip6 addr", NULL, |
| "usage: the format is xxxx::xxxx \n", |
| (param_check_t)cmd_data_check_ip6addr, &(entry.ip6_addr), |
| 16); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("vid", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &(entry.vid), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("loadbalance", "0", |
| "usage: the format is xx \n", |
| cmd_data_check_uint32, &tmp, |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| entry.load_balance = tmp; |
| *(fal_ip6_rfs_t *)val = entry; |
| |
| return SW_OK; |
| } |
| #endif |
| #endif |
| #ifdef IN_VSI |
| sw_error_t |
| cmd_data_check_newadr_lrn(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| fal_vsi_newaddr_lrn_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_vsi_newaddr_lrn_t)); |
| |
| cmd_data_check_element("learnstatus_en", "enable", "usage: enable/disable\n", |
| cmd_data_check_enable, (cmd, &(entry.lrn_en), sizeof(entry.lrn_en))); |
| |
| cmd_data_check_element("learnaction", "forward", "usage: forward/drop/cpycpu/rdtcpu\n", |
| cmd_data_check_maccmd, (cmd, &(entry.action), sizeof(entry.action))); |
| |
| *(fal_vsi_newaddr_lrn_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_stamove(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| fal_vsi_stamove_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_vsi_stamove_t)); |
| |
| cmd_data_check_element("stationmove_en", "enable", "usage: enable/disable\n", |
| cmd_data_check_enable, (cmd, &(entry.stamove_en), sizeof(entry.stamove_en))); |
| |
| cmd_data_check_element("stationmove_action", "forward", "usage: forward/drop/cpycpu/rdtcpu\n", |
| cmd_data_check_maccmd, (cmd, &(entry.action), sizeof(entry.action))); |
| |
| *(fal_vsi_stamove_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_vsi_member(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_vsi_member_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_vsi_member_t)); |
| |
| rv = __cmd_data_check_complex("membership", 0, |
| "usage: Bit0-port0 Bit1-port1 ....\n", |
| cmd_data_check_pbmp, &(entry.member_ports), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("unknown_unicast_membership", 0, |
| "usage: Bit0-port0 Bit1-port1 ....\n", |
| cmd_data_check_pbmp, &(entry.uuc_ports), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("unknown_multicast_membership", 0, |
| "usage: Bit0-port0 Bit1-port1 ....\n", |
| cmd_data_check_pbmp, &(entry.umc_ports), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("broadcast_membership", 0, |
| "usage: Bit0-port0 Bit1-port1 ....\n", |
| cmd_data_check_pbmp, &(entry.bc_ports), |
| sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_vsi_member_t *)val = entry; |
| return SW_OK; |
| } |
| #endif |
| |
| #ifdef IN_FLOW |
| sw_error_t |
| cmd_data_check_flow_global(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| a_uint32_t tmp; |
| sw_error_t rv; |
| fal_flow_global_cfg_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_flow_global_cfg_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("src_intf_check_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.src_if_check_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("src_intf_deacclr_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.src_if_check_deacclr_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("service_loop_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.service_loop_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("service_loop_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.service_loop_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("service_loop_deacclr_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.service_loop_deacclr_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("flow_deacclr_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.flow_deacclr_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("sync_mismatch_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.sync_mismatch_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("sync_mismatch_deacclr_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.sync_mismatch_deacclr_en), |
| sizeof (a_bool_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_mode_0", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (a_uint32_t)); |
| if (!rv) |
| entry.hash_mode_0 = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_mode_1", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, |
| sizeof (a_uint32_t)); |
| if (!rv) |
| entry.hash_mode_1 = tmp; |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_flow_global_cfg_t *)val = entry; |
| return SW_OK; |
| |
| } |
| |
| sw_error_t |
| cmd_data_check_flow(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_flow_entry_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_flow_entry_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("entry_id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.entry_id), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("entry_type", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.entry_type), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("host_addr_type", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.host_addr_type), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("host_addr_index", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.host_addr_index), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("protocol", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.protocol), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("age", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.age), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("src_intf_valid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.src_intf_valid), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("src_intf_index", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.src_intf_index), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("fwd_type", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.fwd_type), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| do |
| { |
| cmd = get_sub_cmd("snat_nexthop", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.snat_nexthop), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("snat_srcport", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.snat_srcport), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dnat_nexthop", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.dnat_nexthop), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dnat_dstport", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.dnat_dstport), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("route_nexthop", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.route_nexthop), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("port_valid", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &(entry.port_valid), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("route_port", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.route_port), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("bridge_port", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.bridge_port), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("deacclr", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.deacclr_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("copy tocpu", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.copy_tocpu_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("syn toggle", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.syn_toggle), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("pri profile", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.pri_profile), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("sevice code", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.sevice_code), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ip type", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.ip_type), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("src port", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.src_port), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dst port", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.dst_port), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| if (entry.entry_type & FAL_FLOW_IP4_5TUPLE_ADDR || entry.entry_type & FAL_FLOW_IP4_3TUPLE_ADDR) { |
| rv = __cmd_data_check_complex("ip addr", NULL, |
| "usage: the format is xx.xx.xx.xx \n", |
| (param_check_t)cmd_data_check_ip4addr, &(entry.flow_ip.ipv4), |
| 4); |
| if (rv) |
| return rv; |
| |
| } else if (entry.entry_type & FAL_FLOW_IP6_5TUPLE_ADDR || entry.entry_type & FAL_FLOW_IP6_3TUPLE_ADDR) { |
| rv = __cmd_data_check_complex("ip addr", NULL, |
| "usage: the format is xxxx::xxxx \n", |
| (param_check_t)cmd_data_check_ip6addr, &(entry.flow_ip.ipv6), |
| 16); |
| if (rv) |
| return rv; |
| } |
| |
| do |
| { |
| cmd = get_sub_cmd("tree id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.tree_id), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_flow_entry_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_flow_ctrl(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| a_uint32_t tmp; |
| sw_error_t rv; |
| fal_flow_mgmt_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_flow_mgmt_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("miss_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, (fal_fwd_cmd_t *)&(entry.miss_action), |
| sizeof (fal_fwd_cmd_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("frag_bypass_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.frag_bypass_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("tcpspec_bypass_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.tcp_spec_bypass_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("all_bypass_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.all_bypass_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("key_sel", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, &tmp, sizeof (a_uint32_t)); |
| if (!rv) |
| entry.key_sel = tmp; |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_flow_mgmt_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_flow_age(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| a_uint32_t tmp; |
| sw_error_t rv; |
| fal_flow_age_timer_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_flow_age_timer_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("age_time", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof (a_uint32_t)); |
| if (!rv) |
| entry.age_time = tmp; |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("age_unit", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof (a_uint32_t)); |
| if (!rv) |
| entry.unit = tmp; |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_flow_age_timer_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_flow_host(char *cmd_str, void * val, a_uint32_t size) |
| { |
| fal_flow_host_entry_t *flow_host = (fal_flow_host_entry_t *)val; |
| fal_flow_entry_t *flow_entry = &(flow_host->flow_entry); |
| #ifdef IN_IP |
| fal_host_entry_t *host_entry = &(flow_host->host_entry); |
| #endif |
| |
| cmd_data_check_flow(cmd_str, flow_entry, size); |
| #ifdef IN_IP |
| cmd_data_check_host_entry(cmd_str, host_entry, size); |
| #endif |
| return SW_OK; |
| } |
| #endif |
| |
| #ifdef IN_BM |
| sw_error_t |
| cmd_data_check_bm_static_thresh(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_bm_static_cfg_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_bm_static_cfg_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("max_thresh", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.max_thresh), |
| sizeof (a_uint16_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("resume_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.resume_off), |
| sizeof (a_uint16_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_bm_static_cfg_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_bm_dynamic_thresh(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_bm_dynamic_cfg_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_bm_dynamic_cfg_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("weight", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.weight), |
| sizeof (a_uint8_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("shared_ceiling", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.shared_ceiling), |
| sizeof (a_uint16_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("resume_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.resume_off), |
| sizeof (a_uint16_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("resume_min_thresh", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.resume_min_thresh), |
| sizeof (a_uint16_t)); |
| } |
| |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_bm_dynamic_cfg_t *)val = entry; |
| return SW_OK; |
| } |
| #endif |
| |
| #ifdef IN_QM |
| sw_error_t |
| cmd_data_check_u_qmap(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_ucast_queue_dest_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_ucast_queue_dest_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("src_profile", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.src_profile), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("service_code_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.service_code_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("service_code", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.service_code), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cpu_code_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.cpu_code_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cpu_code", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.cpu_code), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dst_port", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.dst_port), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_ucast_queue_dest_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ac_static_thresh(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_ac_static_threshold_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_ac_static_threshold_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("color_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.color_enable), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| do |
| { |
| cmd = get_sub_cmd("wred_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.wred_enable), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("green_max", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.green_max), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("green_min_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.green_min_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yel_max_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.yel_max_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yel_min_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.yel_min_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_max_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.red_max_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_min_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.red_min_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("green_resume_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.green_resume_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yel_resume_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.yel_resume_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_resume_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.red_resume_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_ac_static_threshold_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ac_dynamic_thresh(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| a_uint32_t tmp; |
| sw_error_t rv; |
| fal_ac_dynamic_threshold_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_ac_dynamic_threshold_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("color_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.color_enable), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| do |
| { |
| cmd = get_sub_cmd("wred_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.wred_enable), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("shared_weight", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint8(cmd, (a_uint32_t *)&(entry.shared_weight), sizeof (a_uint8_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("green_min_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.green_min_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yel_max_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.yel_max_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yel_min_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.yel_min_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_max_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.red_max_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_min_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.red_min_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("green_resume_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.green_resume_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yel_resume_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.yel_resume_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_resume_off", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.red_resume_off), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ceiling", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, &tmp, sizeof (a_uint32_t)); |
| if (!rv) |
| entry.ceiling = tmp; |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_ac_dynamic_threshold_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ac_group_buff(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_ac_group_buffer_t entry; |
| |
| do |
| { |
| cmd = get_sub_cmd("prealloc_buffer", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.prealloc_buffer), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("total_buffer", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint16(cmd, (a_uint32_t *)&(entry.total_buffer), sizeof (a_uint16_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_ac_group_buffer_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ac_ctrl(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_ac_ctrl_t entry; |
| |
| do |
| { |
| cmd = get_sub_cmd("ac_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ac_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ac_fc_en", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &(entry.ac_fc_en), sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_ac_ctrl_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_ac_obj(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_ac_obj_t entry; |
| |
| do |
| { |
| cmd = get_sub_cmd("obj_type", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.type), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("obj_id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.obj_id), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_ac_obj_t *)val = entry; |
| return SW_OK; |
| } |
| |
| #endif |
| |
| #ifdef IN_SHAPER |
| |
| sw_error_t |
| cmd_data_check_port_shaper_token_config(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_shaper_token_number_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_shaper_token_number_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ctoken_negative_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.c_token_number_negative_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ctoken_number", "0-0x3FFFFFFF"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.c_token_number), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_shaper_token_number_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_shaper_token_config(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_shaper_token_number_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_shaper_token_number_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ctoken_negative_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.c_token_number_negative_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ctoken_number", "0-0x3FFFFFFF"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.c_token_number), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("etoken_negative_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.e_token_number_negative_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| do |
| { |
| cmd = get_sub_cmd("etoken_number", "0-0x3FFFFFFF"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.e_token_number), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_shaper_token_number_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_port_shaper_config(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_shaper_config_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_shaper_config_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("meter_unit", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.meter_unit), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cshaper_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.c_shaper_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cir", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.cir), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cbs", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.cbs), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("shaper_frame_mode", "0-2"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.shaper_frame_mode), sizeof (fal_shaper_frame_mode_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_shaper_config_t *)val = entry; |
| return SW_OK; |
| } |
| |
| |
| sw_error_t |
| cmd_data_check_shaper_config(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_shaper_config_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_shaper_config_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("couple_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.couple_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("meter_unit", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.meter_unit), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cshaper_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.c_shaper_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cir", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.cir), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cbs", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.cbs), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("eshaper_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.e_shaper_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("eir", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.eir), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ebs", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.ebs), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("shaper_frame_mode", "0-2"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.shaper_frame_mode), sizeof (fal_shaper_frame_mode_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_shaper_config_t *)val = entry; |
| return SW_OK; |
| } |
| |
| #endif |
| |
| #ifdef IN_POLICER |
| sw_error_t |
| cmd_data_check_port_policer_config(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_policer_config_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_policer_config_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("meter_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.meter_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("couple_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.couple_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("color_mode", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.color_mode), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("frame_type", "0-0x1f"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.frame_type), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("meter_mode", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.meter_mode), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| do |
| { |
| cmd = get_sub_cmd("meter_unit", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.meter_unit), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cir", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.cir), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cbs", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.cbs), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("eir", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.eir), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ebs", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.ebs), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_policer_config_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_acl_policer_config(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_policer_config_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_policer_config_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("meter_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.meter_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("couple_enable", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.couple_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("color_mode", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.color_mode), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("meter_mode", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.meter_mode), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| do |
| { |
| cmd = get_sub_cmd("meter_unit", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.meter_unit), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cir", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.cir), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("cbs", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.cbs), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("eir", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.eir), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("ebs", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.ebs), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_policer_config_t *)val = entry; |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_policer_cmd_config(char *cmd_str, void * val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_policer_action_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_policer_action_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yellow_priority_remark", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.yellow_priority_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yellow_drop_priority_remark", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.yellow_drop_priority_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| do |
| { |
| cmd = get_sub_cmd("yellow_pcp_remark", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.yellow_pcp_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yellow_dei_remark", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.yellow_dei_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yellow_priority", "0-15"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.yellow_priority), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yellow_drop_priority", "0-3"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.yellow_drop_priority), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yellow_pcp", "0-7"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.yellow_pcp), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("yellow_dei", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.yellow_dei), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_action", "drop"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(entry.red_action), sizeof(a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| do |
| { |
| cmd = get_sub_cmd("red_priority_remark", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.red_priority_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_drop_priority_remark", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.red_drop_priority_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_pcp_remark", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.red_pcp_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_dei_remark", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(entry.red_dei_en), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_priority", "0-15"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.red_priority), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_drop_priority", "0-3"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.red_drop_priority), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_pcp", "0-7"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.red_pcp), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("red_dei", "0-1"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(entry.red_dei), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *(fal_policer_action_t *)val = entry; |
| return SW_OK; |
| } |
| |
| #endif |
| |
| #ifdef IN_SERVCODE |
| sw_error_t |
| cmd_data_check_servcode_config(char *info, fal_servcode_config_t *val, a_uint32_t size) |
| { |
| char *cmd = NULL; |
| sw_error_t rv; |
| fal_servcode_config_t entry; |
| |
| memset(&entry, 0, sizeof (fal_servcode_config_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dest_port_valid", "yes"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_TRUE, &entry.dest_port_valid, |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("dest_port_id", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.dest_port_id, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("bypass_bitmap[0]", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.bypass_bitmap[0], sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("bypass_bitmap[1]", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.bypass_bitmap[1], sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("bypass_bitmap[2]", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.bypass_bitmap[2], sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("direction", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.direction, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("field_update_bitmap", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.field_update_bitmap, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("next_service_code", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.next_service_code, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hw_services", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.hw_services, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("offset_sel", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.offset_sel, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *val = entry; |
| return SW_OK; |
| } |
| #endif |
| |
| #ifdef IN_RSS_HASH |
| sw_error_t |
| cmd_data_check_rss_hash_mode(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "ipv4v6")) |
| { |
| *arg_val = FAL_RSS_HASH_IPV4V6; |
| } |
| else if (!strcasecmp(cmd_str, "ipv4")) |
| { |
| *arg_val = FAL_RSS_HASH_IPV4ONLY; |
| } |
| else if (!strcasecmp(cmd_str, "ipv6")) |
| { |
| *arg_val = FAL_RSS_HASH_IPV6ONLY; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_rss_hash_config(char *info, fal_rss_hash_config_t *val, a_uint32_t size) |
| { |
| char *cmd = NULL; |
| sw_error_t rv; |
| fal_rss_hash_config_t entry; |
| |
| memset(&entry, 0, sizeof (fal_rss_hash_config_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_mask", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.hash_mask, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_fragment_mode", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &entry.hash_fragment_mode, |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_seed", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.hash_seed, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_sip_mix", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.hash_sip_mix, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_dip_mix", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.hash_dip_mix, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_protocol_mix", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(entry.hash_protocol_mix), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_sport_mix", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(entry.hash_sport_mix), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_dport_mix", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, (a_uint32_t *)&(entry.hash_dport_mix), sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_fin_inner", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.hash_fin_inner, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("hash_fin_outer", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &entry.hash_fin_outer, sizeof (a_uint32_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| *val = entry; |
| return SW_OK; |
| } |
| #endif |
| |
| #ifdef IN_MIRROR |
| sw_error_t |
| cmd_data_check_mirr_analy_cfg(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_mirr_analysis_config_t *pEntry = (fal_mirr_analysis_config_t *)val; |
| |
| memset(pEntry, 0, sizeof(fal_mirr_analysis_config_t)); |
| |
| do |
| { |
| cmd = get_sub_cmd("analysis_port", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->port_id), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| do |
| { |
| cmd = get_sub_cmd("analysis_priority", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &(pEntry->priority), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_mirr_direction(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "both")) |
| { |
| *arg_val = FAL_MIRR_BOTH; |
| } |
| else if (!strcasecmp(cmd_str, "ingress")) |
| { |
| *arg_val = FAL_MIRR_INGRESS; |
| } |
| else if (!strcasecmp(cmd_str, "egress")) |
| { |
| *arg_val = FAL_MIRR_EGRESS; |
| } |
| else |
| { |
| //dprintf("input error \n"); |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| #endif |
| |
| #ifdef IN_CTRLPKT |
| sw_error_t |
| cmd_data_check_ctrlpkt_appprofile(char *info, void *val, a_uint32_t size) |
| { |
| char *cmd; |
| sw_error_t rv; |
| fal_ctrlpkt_profile_t *pEntry = (fal_ctrlpkt_profile_t *)val; |
| a_uint32_t tmp = 0; |
| |
| memset(pEntry, 0, sizeof(fal_ctrlpkt_profile_t)); |
| |
| /* get port bitmap */ |
| do |
| { |
| cmd = get_sub_cmd("port_bitmap", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->port_map = tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get ethernet type profile */ |
| do |
| { |
| cmd = get_sub_cmd("ethtype_profile_bitmap", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->ethtype_profile_bitmap = tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get rfdb profile */ |
| do |
| { |
| cmd = get_sub_cmd("rfdb_profile_bitmap", "0"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_uint32(cmd, &tmp, sizeof(a_uint32_t)); |
| |
| pEntry->rfdb_profile_bitmap= tmp; |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get mgt_eapol */ |
| do |
| { |
| cmd = get_sub_cmd("eapol_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_eapol), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get mgt_eapol */ |
| do |
| { |
| cmd = get_sub_cmd("pppoe_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_pppoe), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get mgt_igmp */ |
| do |
| { |
| cmd = get_sub_cmd("igmp_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_igmp), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get mgt_arp_req */ |
| do |
| { |
| cmd = get_sub_cmd("arp_request_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_arp_req), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get mgt_arp_rep */ |
| do |
| { |
| cmd = get_sub_cmd("arp_response_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_arp_rep), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get mgt_dhcp4 */ |
| do |
| { |
| cmd = get_sub_cmd("dhcp4_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_dhcp4), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get mgt_dhcp6 */ |
| do |
| { |
| cmd = get_sub_cmd("dhcp6_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_dhcp6), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get mgt_mld */ |
| do |
| { |
| cmd = get_sub_cmd("mld_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_mld), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| |
| /* get mgt_ns */ |
| do |
| { |
| cmd = get_sub_cmd("ip6ns_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_ns), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get mgt_na */ |
| do |
| { |
| cmd = get_sub_cmd("ip6na_en", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->protocol_types.mgt_na), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get forward command */ |
| do |
| { |
| cmd = get_sub_cmd("ctrlpkt_profile_action", "forward"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_maccmd(cmd, &(pEntry->action.action), sizeof(a_uint32_t)); |
| } |
| }while (talk_mode && (SW_OK != rv)); |
| |
| /* get sg_byp */ |
| do |
| { |
| cmd = get_sub_cmd("sourceguard_bypass", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->action.sg_bypass), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get l2_filter_byp */ |
| do |
| { |
| cmd = get_sub_cmd("l2filter_bypass", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->action.l2_filter_bypass), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get in_stp_byp */ |
| do |
| { |
| cmd = get_sub_cmd("ingress_stp_bypass", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->action.in_stp_bypass), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| /* get in_vlan_fltr_byp */ |
| do |
| { |
| cmd = get_sub_cmd("ingress_vlan_filter_bypass", "no"); |
| SW_RTN_ON_NULL_PARAM(cmd); |
| |
| if (!strncasecmp(cmd, "quit", 4)) |
| { |
| return SW_BAD_VALUE; |
| } |
| else if (!strncasecmp(cmd, "help", 4)) |
| { |
| rv = SW_BAD_VALUE; |
| } |
| else |
| { |
| rv = cmd_data_check_confirm(cmd, A_FALSE, &(pEntry->action.in_vlan_fltr_bypass), |
| sizeof (a_bool_t)); |
| } |
| } |
| while (talk_mode && (SW_OK != rv)); |
| |
| return SW_OK; |
| } |
| #endif |
| |
| sw_error_t |
| cmd_data_check_module(char *cmd_str, a_uint32_t * arg_val, a_uint32_t size) |
| { |
| if (cmd_str == NULL) |
| return SW_BAD_PARAM; |
| |
| if (!strcasecmp(cmd_str, "acl")) { |
| *arg_val = FAL_MODULE_ACL; |
| } else if (!strcasecmp(cmd_str, "vsi")) { |
| *arg_val = FAL_MODULE_VSI; |
| } else if (!strcasecmp(cmd_str, "ip")) { |
| *arg_val = FAL_MODULE_IP; |
| } else if (!strcasecmp(cmd_str, "flow")) { |
| *arg_val = FAL_MODULE_FLOW; |
| } else if (!strcasecmp(cmd_str, "qm")) { |
| *arg_val = FAL_MODULE_QM; |
| } else if (!strcasecmp(cmd_str, "qos")) { |
| *arg_val = FAL_MODULE_QOS; |
| } else if (!strcasecmp(cmd_str, "bm")) { |
| *arg_val = FAL_MODULE_BM; |
| } else if (!strcasecmp(cmd_str, "servcode")) { |
| *arg_val = FAL_MODULE_SERVCODE; |
| } else if (!strcasecmp(cmd_str, "rsshash")) { |
| *arg_val = FAL_MODULE_RSS_HASH; |
| } else if (!strcasecmp(cmd_str, "pppoe")) { |
| *arg_val = FAL_MODULE_PPPOE; |
| } else if (!strcasecmp(cmd_str, "portctrl")) { |
| *arg_val = FAL_MODULE_PORTCTRL; |
| } else if (!strcasecmp(cmd_str, "shaper")) { |
| *arg_val = FAL_MODULE_SHAPER; |
| } else if (!strcasecmp(cmd_str, "mib")) { |
| *arg_val = FAL_MODULE_MIB; |
| } else if (!strcasecmp(cmd_str, "mirror")) { |
| *arg_val = FAL_MODULE_MIRROR; |
| } else if (!strcasecmp(cmd_str, "fdb")) { |
| *arg_val = FAL_MODULE_FDB; |
| } else if (!strcasecmp(cmd_str, "stp")) { |
| *arg_val = FAL_MODULE_STP; |
| } else if (!strcasecmp(cmd_str, "sec")) { |
| *arg_val = FAL_MODULE_SEC; |
| } else if (!strcasecmp(cmd_str, "trunk")) { |
| *arg_val = FAL_MODULE_TRUNK; |
| } else if (!strcasecmp(cmd_str, "portvlan")) { |
| *arg_val = FAL_MODULE_PORTVLAN; |
| } else if (!strcasecmp(cmd_str, "ctrlpkt")) { |
| *arg_val = FAL_MODULE_CTRLPKT; |
| } else if (!strcasecmp(cmd_str, "policer")) { |
| *arg_val = FAL_MODULE_POLICER; |
| } |
| else |
| { |
| return SW_BAD_VALUE; |
| } |
| |
| return SW_OK; |
| } |
| |
| sw_error_t |
| cmd_data_check_func_ctrl(char *cmd_str, void * val, a_uint32_t size) |
| { |
| sw_error_t rv; |
| fal_func_ctrl_t entry; |
| |
| aos_mem_zero(&entry, sizeof (fal_func_ctrl_t)); |
| |
| rv = __cmd_data_check_complex("bitmap0", "0", |
| "usage: the format is HEX \n", cmd_data_check_uint32, |
| &(entry.bitmap[0]), sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("bitmap1", "0", |
| "usage: the format is HEX \n", cmd_data_check_uint32, |
| &(entry.bitmap[1]), sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| rv = __cmd_data_check_complex("bitmap2", "0", |
| "usage: the format is HEX \n", cmd_data_check_uint32, |
| &(entry.bitmap[2]), sizeof (a_uint32_t)); |
| if (rv) |
| return rv; |
| |
| *(fal_func_ctrl_t *)val = entry; |
| |
| return SW_OK; |
| } |