/* * Copyright (C) 2012 Realtek Semiconductor Corp. * All Rights Reserved. * * This program is the proprietary software of Realtek Semiconductor * Corporation and/or its licensors, and only be used, duplicated, * modified or distributed under the authorized license from Realtek. * * ANY USE OF THE SOFTWARE OTHER THAN AS AUTHORIZED UNDER * THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. * * $Revision: 66863 $ * $Date: 2016-03-18 14:30:57 +0800 (Fri, 18 Mar 2016) $ * * Purpose : Definition those XXX command and APIs in the SDK diagnostic shell. * * Feature : The file have include the following module and sub-modules * */ /* * Include Files */ #include <stdio.h> #include <string.h> #include <common/rt_type.h> #include <common/rt_error.h> #include <hal/common/halctrl.h> #include <common/util/rt_util.h> #include <diag_util.h> #include <parser/cparser_priv.h> #include <diag_str.h> #include <rtk_rg_struct.h> //#include "../../../../uClinux-dist/linux-2.6.33.2/drivers/net/apollo/romeDriver/rtk_rg_define.h" //#include "../../../../uClinux-dist/linux-2.6.33.2/drivers/net/apollo/romeDriver/rtk_rg_struct.h" /* variable */ static rtk_rg_aclFilterAndQos_t acl_parameter; static rtk_rg_classifyEntry_t classifyFilter; /* local function */ static uint32 _diag_rg_aclFilter_show_field(rtk_rg_aclFilterAndQos_t *aclPara) { diag_util_printf("Current Temp ACL-filter entry:\n"); diag_util_printf("Patterns: \n"); diag_util_printf("filter_fields:0x%llx\n", aclPara->filter_fields); diag_util_printf("ingress_port_mask:0x%x\n", aclPara->ingress_port_mask); diag_util_printf("ingress_dscp: %d\n", aclPara->ingress_dscp); diag_util_printf("ingress_ipv6_dscp: %d\n", aclPara->ingress_ipv6_dscp); diag_util_printf("ingress_intf_idx: %d\n", aclPara->ingress_intf_idx); diag_util_printf("egress_intf_idx: %d\n", aclPara->egress_intf_idx); diag_util_printf("ingress_stream_id: %d\n", aclPara->ingress_stream_id); diag_util_printf("ingress_ethertype:0x%x\n", aclPara->ingress_ethertype); diag_util_printf("ingress_ctag_vid: %d\n", aclPara->ingress_ctag_vid); diag_util_printf("ingress_ctag_pri: %d\n", aclPara->ingress_ctag_pri); diag_util_printf("egress_ctag_vid: %d\n", aclPara->egress_ctag_vid); diag_util_printf("egress_ctag_vid_mask: %d\n", aclPara->egress_ctag_vid_mask); diag_util_printf("egress_ctag_pri: %d\n", aclPara->egress_ctag_pri); diag_util_printf("egress_ip4mc_if: %d\n", aclPara->egress_ip4mc_if); diag_util_printf("egress_ip6mc_if: %d\n", aclPara->egress_ip6mc_if); diag_util_printf("ingress_smac: %02X:%02X:%02X:%02X:%02X:%02X\n", aclPara->ingress_smac.octet[0], aclPara->ingress_smac.octet[1], aclPara->ingress_smac.octet[2], aclPara->ingress_smac.octet[3], aclPara->ingress_smac.octet[4], aclPara->ingress_smac.octet[5]); diag_util_printf("ingress_dmac: %02X:%02X:%02X:%02X:%02X:%02X\n", aclPara->ingress_dmac.octet[0], aclPara->ingress_dmac.octet[1], aclPara->ingress_dmac.octet[2], aclPara->ingress_dmac.octet[3], aclPara->ingress_dmac.octet[4], aclPara->ingress_dmac.octet[5]); diag_util_printf("ingress_sip_low_bound: %s ", diag_util_inet_ntoa(acl_parameter.ingress_src_ipv4_addr_start)); diag_util_printf("ingress_sip_up_bound: %s \n", diag_util_inet_ntoa(acl_parameter.ingress_src_ipv4_addr_end)); diag_util_printf("ingress_dip_low_bound: %s ", diag_util_inet_ntoa(acl_parameter.ingress_dest_ipv4_addr_start)); diag_util_printf("ingress_dip_up_bound: %s \n", diag_util_inet_ntoa(acl_parameter.ingress_dest_ipv4_addr_end)); diag_util_printf("ingress_src_ipv6_addr_start: %02X%02X:",acl_parameter.ingress_src_ipv6_addr_start[0],acl_parameter.ingress_src_ipv6_addr_start[1]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_start[2],acl_parameter.ingress_src_ipv6_addr_start[3]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_start[4],acl_parameter.ingress_src_ipv6_addr_start[5]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_start[6],acl_parameter.ingress_src_ipv6_addr_start[7]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_start[8],acl_parameter.ingress_src_ipv6_addr_start[9]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_start[10],acl_parameter.ingress_src_ipv6_addr_start[11]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_start[12],acl_parameter.ingress_src_ipv6_addr_start[13]); diag_util_printf(":%02X%02X: \n",acl_parameter.ingress_src_ipv6_addr_start[14],acl_parameter.ingress_src_ipv6_addr_start[15]); diag_util_printf("ingress_src_ipv6_addr_end: %02X%02X:",acl_parameter.ingress_src_ipv6_addr_end[0],acl_parameter.ingress_src_ipv6_addr_end[1]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_end[2],acl_parameter.ingress_src_ipv6_addr_end[3]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_end[4],acl_parameter.ingress_src_ipv6_addr_end[5]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_end[6],acl_parameter.ingress_src_ipv6_addr_end[7]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_end[8],acl_parameter.ingress_src_ipv6_addr_end[9]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_end[10],acl_parameter.ingress_src_ipv6_addr_end[11]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_src_ipv6_addr_end[12],acl_parameter.ingress_src_ipv6_addr_end[13]); diag_util_printf(":%02X%02X: \n",acl_parameter.ingress_src_ipv6_addr_end[14],acl_parameter.ingress_src_ipv6_addr_end[15]); diag_util_printf("ingress_dest_ipv6_addr_start: %02X%02X:",acl_parameter.ingress_dest_ipv6_addr_start[0],acl_parameter.ingress_dest_ipv6_addr_start[1]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_start[2],acl_parameter.ingress_dest_ipv6_addr_start[3]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_start[4],acl_parameter.ingress_dest_ipv6_addr_start[5]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_start[6],acl_parameter.ingress_dest_ipv6_addr_start[7]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_start[8],acl_parameter.ingress_dest_ipv6_addr_start[9]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_start[10],acl_parameter.ingress_dest_ipv6_addr_start[11]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_start[12],acl_parameter.ingress_dest_ipv6_addr_start[13]); diag_util_printf(":%02X%02X: \n",acl_parameter.ingress_dest_ipv6_addr_start[14],acl_parameter.ingress_dest_ipv6_addr_start[15]); diag_util_printf("ingress_dest_ipv6_addr_end: %02X%02X:",acl_parameter.ingress_dest_ipv6_addr_end[0],acl_parameter.ingress_dest_ipv6_addr_end[1]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_end[2],acl_parameter.ingress_dest_ipv6_addr_end[3]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_end[4],acl_parameter.ingress_dest_ipv6_addr_end[5]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_end[6],acl_parameter.ingress_dest_ipv6_addr_end[7]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_end[8],acl_parameter.ingress_dest_ipv6_addr_end[9]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_end[10],acl_parameter.ingress_dest_ipv6_addr_end[11]); diag_util_printf(":%02X%02X:",acl_parameter.ingress_dest_ipv6_addr_end[12],acl_parameter.ingress_dest_ipv6_addr_end[13]); diag_util_printf(":%02X%02X: \n",acl_parameter.ingress_dest_ipv6_addr_end[14],acl_parameter.ingress_dest_ipv6_addr_end[15]); diag_util_printf("ingress_src_l4_port_low_bound: %d ", acl_parameter.ingress_src_l4_port_start); diag_util_printf("ingress_src_l4_port_up_bound: %d \n", acl_parameter.ingress_src_l4_port_end); diag_util_printf("ingress_dest_l4_port_low_bound: %d ", acl_parameter.ingress_dest_l4_port_start); diag_util_printf("ingress_dest_l4_port_up_bound: %d \n", acl_parameter.ingress_dest_l4_port_end); diag_util_printf("egress_sip_low_bound: %s ", diag_util_inet_ntoa(acl_parameter.egress_src_ipv4_addr_start)); diag_util_printf("egress_sip_up_bound: %s \n", diag_util_inet_ntoa(acl_parameter.egress_src_ipv4_addr_end)); diag_util_printf("egress_dip_low_bound: %s ", diag_util_inet_ntoa(acl_parameter.egress_dest_ipv4_addr_start)); diag_util_printf("egress_dip_up_bound: %s \n", diag_util_inet_ntoa(acl_parameter.egress_dest_ipv4_addr_end)); diag_util_printf("egress_src_l4_port_low_bound: %d ", acl_parameter.egress_src_l4_port_start); diag_util_printf("egress_src_l4_port_up_bound: %d \n", acl_parameter.egress_src_l4_port_end); diag_util_printf("egress_dest_l4_port_low_bound: %d ", acl_parameter.egress_dest_l4_port_start); diag_util_printf("egress_dest_l4_port_up_bound: %d \n", acl_parameter.egress_dest_l4_port_end); if(acl_parameter.filter_fields & INGRESS_L4_TCP_BIT){ diag_util_printf("l4-protocal: tcp \n"); }else if(acl_parameter.filter_fields & INGRESS_L4_UDP_BIT){ diag_util_printf("l4-protocal: udp \n"); }else if(acl_parameter.filter_fields & INGRESS_L4_ICMP_BIT){ diag_util_printf("l4-protocal: icmp \n"); }else{ diag_util_printf("l4-protocal: not care \n"); } diag_util_printf("ingress_wlanDevIdx: %d \n", acl_parameter.ingress_wlanDevMask); diag_util_printf("\n"); diag_util_printf("Actions: \n"); switch(acl_parameter.action_type){ case ACL_ACTION_TYPE_DROP: diag_util_printf("action_type: ACL_ACTION_TYPE_DROP \n"); break; case ACL_ACTION_TYPE_PERMIT: diag_util_printf("action type: ACL_ACTION_TYPE_PERMIT \n"); break; case ACL_ACTION_TYPE_TRAP: diag_util_printf("action type: ACL_ACTION_TYPE_TRAP \n"); break; case ACL_ACTION_TYPE_TRAP_TO_PS: diag_util_printf("action type: ACL_ACTION_TYPE_TRAP_TO_PS \n"); break; case ACL_ACTION_TYPE_QOS: diag_util_printf("action type: ACL_ACTION_TYPE_QOS \n"); diag_util_printf("qos_actions_bits: 0x%x\n",acl_parameter.qos_actions); diag_util_printf("dot1p_remarking_pri: %d \n",acl_parameter.action_dot1p_remarking_pri); diag_util_printf("ip_precedence_remarking_pri: %d\n",acl_parameter.action_ip_precedence_remarking_pri); diag_util_printf("dot1p_remarking_pri: %d\n",acl_parameter.action_dscp_remarking_pri); diag_util_printf("queue_id: %d\n",acl_parameter.action_queue_id); diag_util_printf("share_meter: %d\n",acl_parameter.action_share_meter); diag_util_printf("acl_priority: %d\n",acl_parameter.action_acl_priority); diag_util_printf("ingress_cvid: %d\n",acl_parameter.action_acl_ingress_vid); diag_util_mprintf("downstream_uni_portmask: 0x%x\n",acl_parameter.downstream_uni_portmask); diag_util_mprintf("redirect_portmask: 0x%x\n",acl_parameter.redirect_portmask); diag_util_mprintf("egress_internal_priority: 0x%x\n",acl_parameter.egress_internal_priority); break; case ACL_ACTION_TYPE_POLICY_ROUTE: diag_util_printf("action type: ACL_ACTION_TYPE_POLICY_ROUTE \n"); diag_util_printf("policy_route_wan: 0x%x\n",acl_parameter.action_policy_route_wan); } return CPARSER_OK; } static uint32 _diag_rg_classifyFilter_show_field(rtk_rg_classifyEntry_t *classifyFilter){ #if defined(CONFIG_RTL9602C_SERIES) #else diag_util_printf("Current Temp classify-filter entry:\n"); diag_util_printf("Index: %d \n",classifyFilter->index); diag_util_printf("Direction: %s \n",classifyFilter->direction?"downstream":"upstream"); diag_util_printf("Patterns: \n"); if(classifyFilter->filter_fields & EGRESS_ETHERTYPR_BIT) diag_util_printf("etherType:0x%x\n", classifyFilter->etherType); if(classifyFilter->filter_fields & EGRESS_GEMIDX_BIT) diag_util_printf("gemidx:%d\n", classifyFilter->gemidx); if(classifyFilter->filter_fields & EGRESS_LLID_BIT) diag_util_printf("llid:%d\n", classifyFilter->llid); if(classifyFilter->filter_fields & EGRESS_TAGVID_BIT) diag_util_printf("outterTagVid:%d\n", classifyFilter->outterTagVid); if(classifyFilter->filter_fields & EGRESS_TAGPRI_BIT) diag_util_printf("outterTagPri:%d\n", classifyFilter->outterTagPri); if(classifyFilter->filter_fields & EGRESS_INTERNALPRI_BIT) diag_util_printf("internalPri:%d\n", classifyFilter->internalPri); if(classifyFilter->filter_fields & EGRESS_STAGIF_BIT) diag_util_printf("stagIf:%s\n", classifyFilter->stagIf?"Must Tag":"Must unTag"); if(classifyFilter->filter_fields & EGRESS_CTAGIF_BIT) diag_util_printf("ctagIf:%s\n", classifyFilter->ctagIf?"Must Tag":"Must unTag"); if(classifyFilter->filter_fields & EGRESS_UNI_BIT) diag_util_printf("uni:%d\n", classifyFilter->uni); diag_util_printf("Action: \n"); if(classifyFilter->direction==RTK_RG_CLASSIFY_DIRECTION_UPSTREAM){ diag_util_printf("US_ACTION_MASKBIT=0x%x \n",classifyFilter->us_action_field); if(classifyFilter->us_action_field&CF_US_ACTION_DROP_BIT) diag_util_printf("US_ACTION_DROP \n"); if(classifyFilter->us_action_field&CF_US_ACTION_SID_BIT) diag_util_printf("US_ACTION_ASSIGN_SID: sid=%d \n",classifyFilter->action_sid_or_llid.assignedSid_or_llid); }else if(classifyFilter->direction==RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM){ diag_util_printf("DS_ACTION_MASKBIT=0x%x \n",classifyFilter->ds_action_field); if(classifyFilter->ds_action_field&CF_DS_ACTION_DROP_BIT) diag_util_printf("DS_ACTION_DROP \n"); } #endif return CPARSER_OK; } /* * rg show acl-filter */ cparser_result_t cparser_cmd_rg_show_acl_filter( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); _diag_rg_aclFilter_show_field(&acl_parameter); return CPARSER_OK; } /* end of cparser_cmd_rg_show_acl_filter */ /* * rg clear acl-filter */ cparser_result_t cparser_cmd_rg_clear_acl_filter( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); osal_memset(&acl_parameter, 0x0, sizeof(rtk_rg_aclFilterAndQos_t)); diag_util_mprintf("acl-filter entry clear!\n"); return CPARSER_OK; } /* end of cparser_cmd_rg_clear_acl_filter */ /* * rg add acl-filter entry */ cparser_result_t cparser_cmd_rg_add_acl_filter_entry( cparser_context_t *context) { int ret=0; int acl_filter_idx=0; DIAG_UTIL_PARAM_CHK(); ret = rtk_rg_aclFilterAndQos_add(&acl_parameter, &acl_filter_idx); if(ret == RT_ERR_RG_OK ) diag_util_mprintf("add acl-filter entry[%d] success!\n",acl_filter_idx); else diag_util_mprintf("add acl-filter entry failed! (ret=%d) \n",ret); return CPARSER_OK; } /* end of cparser_cmd_rg_add_acl_filter_entry */ /* * rg get acl-filter entry <UINT:entry_index> */ cparser_result_t cparser_cmd_rg_get_acl_filter_entry_entry_index( cparser_context_t *context, uint32_t *entry_index_ptr) { int ret=0; int search_start_idx = *entry_index_ptr; DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_OUTPUT_INIT(); osal_memset(&acl_parameter, 0x0, sizeof(rtk_rg_aclFilterAndQos_t)); ret = rtk_rg_aclFilterAndQos_find(&acl_parameter,&search_start_idx); if(ret == RT_ERR_RG_OK){ if(search_start_idx == (*entry_index_ptr)){ _diag_rg_aclFilter_show_field(&acl_parameter); diag_util_mprintf("get acl-filter entry[%d] success!\n",*entry_index_ptr); }else{ diag_util_mprintf("get acl-filter entry[%d] failed! acl-filter entry[%d] is empty!\n",*entry_index_ptr); } }else{ diag_util_mprintf("find acl-filter entry[%d] failed!\n",*entry_index_ptr); } diag_util_mprintf(""); return CPARSER_OK; } /* end of cparser_cmd_rg_get_acl_filter_entry_entry_index */ /* * rg del acl-filter entry <UINT:entry_index> */ cparser_result_t cparser_cmd_rg_del_acl_filter_entry_entry_index( cparser_context_t *context, uint32_t *entry_index_ptr) { int ret; DIAG_UTIL_PARAM_CHK(); ret = rtk_rg_aclFilterAndQos_del(*entry_index_ptr); if(ret == RT_ERR_RG_OK){ diag_util_mprintf("del acl-filter entry[%d] success!\n",*entry_index_ptr); }else{ diag_util_mprintf("del acl-filter entry[%d] failed!\n",*entry_index_ptr); } return CPARSER_OK; } /* end of cparser_cmd_rg_del_acl_filter_entry_entry_index */ /* * rg set acl-filter fwding_type_and_direction <UINT:fwding_type_and_direction> */ cparser_result_t cparser_cmd_rg_set_acl_filter_fwding_type_and_direction_fwding_type_and_direction( cparser_context_t *context, uint32_t *fwding_type_and_direction_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.fwding_type_and_direction=*fwding_type_and_direction_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_fwding_type_and_direction_fwding_type_and_direction */ /* * rg set acl-filter acl_weight <UINT:acl_weight> */ cparser_result_t cparser_cmd_rg_set_acl_filter_acl_weight_acl_weight( cparser_context_t *context, uint32_t *acl_weight_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.acl_weight= *acl_weight_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_acl_weight_acl_weight */ /* * rg set acl-filter pattern ingress_port_mask <HEX:portmask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_port_mask_portmask( cparser_context_t *context, uint32_t *portmask_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_PORT_BIT; acl_parameter.ingress_port_mask.portmask= *portmask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_port_mask_portmask */ /* * rg set acl-filter pattern ingress_dscp <UINT:dscp> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_dscp_dscp( cparser_context_t *context, uint32_t *dscp_ptr) { DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_PARAM_RANGE_CHK((*dscp_ptr > RTK_VALUE_OF_DSCP_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.filter_fields |= INGRESS_DSCP_BIT; acl_parameter.ingress_dscp= *dscp_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_dscp_dscp */ /* * rg set acl-filter pattern ingress_ipv6_dscp <UINT:dscp> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_ipv6_dscp_dscp( cparser_context_t *context, uint32_t *dscp_ptr) { DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_PARAM_RANGE_CHK((*dscp_ptr > RTK_VALUE_OF_DSCP_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.filter_fields |= INGRESS_IPV6_DSCP_BIT; acl_parameter.ingress_ipv6_dscp= *dscp_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_ipv6_dscp_dscp */ /* * rg set acl-filter pattern ingress_intf_idx <UINT:igr_intf> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_intf_idx_igr_intf( cparser_context_t *context, uint32_t *igr_intf_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_INTF_BIT; acl_parameter.ingress_intf_idx= *igr_intf_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_intf_idx_igr_intf */ /* * rg set acl-filter pattern egress_intf_idx <UINT:egr_intf> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_intf_idx_egr_intf( cparser_context_t *context, uint32_t *egr_intf_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.egress_intf_idx= *egr_intf_ptr; acl_parameter.filter_fields |= EGRESS_INTF_BIT; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_intf_idx_egr_intf */ /* * rg set acl-filter pattern ingress_stream_id <UINT:stream_id> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_stream_id_stream_id( cparser_context_t *context, uint32_t *stream_id_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.ingress_stream_id= *stream_id_ptr; acl_parameter.filter_fields |= INGRESS_STREAM_ID_BIT; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_stream_id_stream_id */ /* * rg set acl-filter pattern ingress_ipv4_tagif <UINT:ingress_ipv4_tagif> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_ipv4_tagif_ingress_ipv4_tagif( cparser_context_t *context, uint32_t *ingress_ipv4_tagif_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.ingress_ipv4_tagif= *ingress_ipv4_tagif_ptr; acl_parameter.filter_fields |= INGRESS_IPV4_TAGIF_BIT; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_ipv4_tagif_ingress_ipv4_tagif */ /* * rg set acl-filter pattern ingress_ipv6_tagif <UINT:ingress_ipv6_tagif> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_ipv6_tagif_ingress_ipv6_tagif( cparser_context_t *context, uint32_t *ingress_ipv6_tagif_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.ingress_ipv6_tagif= *ingress_ipv6_tagif_ptr; acl_parameter.filter_fields |= INGRESS_IPV6_TAGIF_BIT; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_ipv6_tagif_ingress_ipv6_tagif */ /* * rg set acl-filter pattern ingress_ethertype <HEX:ethtype> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_ethertype_ethtype( cparser_context_t *context, uint32_t *ethtype_ptr) { DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_PARAM_RANGE_CHK((*ethtype_ptr > RTK_ETHERTYPE_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.filter_fields |= INGRESS_ETHERTYPE_BIT; acl_parameter.ingress_ethertype= *ethtype_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_ethertype_ethtype */ /* * rg set acl-filter pattern ingress_ctag_vid <UINT:vid> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_ctag_vid_vid( cparser_context_t *context, uint32_t *vid_ptr) { DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_PARAM_RANGE_CHK((*vid_ptr > RTK_VLAN_ID_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.filter_fields |= INGRESS_CTAG_VID_BIT; acl_parameter.ingress_ctag_vid= *vid_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_ctag_vid_vid */ /* * rg set acl-filter pattern ingress_ctag_pri <UINT:pri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_ctag_pri_pri( cparser_context_t *context, uint32_t *pri_ptr) { DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_PARAM_RANGE_CHK((*pri_ptr > RTK_DOT1P_PRIORITY_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.filter_fields |= INGRESS_CTAG_PRI_BIT; acl_parameter.ingress_ctag_pri= *pri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_ctag_pri_pri */ /* * rg set acl-filter pattern ingress_ctag_cfi <UINT:cfi> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_ctag_cfi_cfi( cparser_context_t *context, uint32_t *cfi_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_CTAG_CFI_BIT; acl_parameter.ingress_ctag_cfi= *cfi_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_ctag_cfi_cfi */ /* * rg set acl-filter pattern egress_ctag_vid <UINT:vid> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_ctag_vid_vid( cparser_context_t *context, uint32_t *vid_ptr) { DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_PARAM_RANGE_CHK((*vid_ptr > RTK_VLAN_ID_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.filter_fields |= EGRESS_CTAG_VID_BIT; acl_parameter.egress_ctag_vid= *vid_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_ctag_vid_vid */ /* * rg set acl-filter pattern egress_ctag_vid_mask <HEX:vid_mask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_ctag_vid_mask_vid_mask( cparser_context_t *context, uint32_t *vid_mask_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.egress_ctag_vid_mask= *vid_mask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_ctag_vid_mask_vid_mask */ /* * rg set acl-filter pattern egress_ctag_pri <UINT:pri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_ctag_pri_pri( cparser_context_t *context, uint32_t *pri_ptr) { DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_PARAM_RANGE_CHK((*pri_ptr > RTK_DOT1P_PRIORITY_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.filter_fields |= EGRESS_CTAG_PRI_BIT; acl_parameter.egress_ctag_pri= *pri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_ctag_pri_pri */ /* * rg set acl-filter pattern egress_ip4mc_if <UINT:egress_ip4mc_if> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_ip4mc_if_egress_ip4mc_if( cparser_context_t *context, uint32_t *egress_ip4mc_if_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= EGRESS_IP4MC_IF; acl_parameter.egress_ip4mc_if= *egress_ip4mc_if_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_ip4mc_if_egress_ip4mc_if */ /* * rg set acl-filter pattern egress_ip6mc_if <UINT:egress_ip6mc_if> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_ip6mc_if_egress_ip6mc_if( cparser_context_t *context, uint32_t *egress_ip6mc_if_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= EGRESS_IP6MC_IF; acl_parameter.egress_ip6mc_if= *egress_ip6mc_if_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_ip6mc_if_egress_ip6mc_if */ /* * rg set acl-filter pattern ingress_smac <MACADDR:smac> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_smac_smac( cparser_context_t *context, cparser_macaddr_t *smac_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_SMAC_BIT; osal_memcpy(&acl_parameter.ingress_smac.octet, smac_ptr->octet, ETHER_ADDR_LEN); return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_smac_smac */ /* * rg set acl-filter pattern ingress_dmac <MACADDR:dmac> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_dmac_dmac( cparser_context_t *context, cparser_macaddr_t *dmac_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_DMAC_BIT; osal_memcpy(&acl_parameter.ingress_dmac.octet, dmac_ptr->octet, ETHER_ADDR_LEN); return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_dmac_dmac */ /* * rg set acl-filter pattern ingress_src_ipv4_addr_start <IPV4ADDR:igr_sip_low_bound> ingress_src_ipv4_addr_end <IPV4ADDR:igr_sip_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_src_ipv4_addr_start_igr_sip_low_bound_ingress_src_ipv4_addr_end_igr_sip_up_bound( cparser_context_t *context, uint32_t *igr_sip_low_bound_ptr, uint32_t *igr_sip_up_bound_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_IPV4_SIP_RANGE_BIT; acl_parameter.ingress_src_ipv4_addr_start = (ipaddr_t)*igr_sip_low_bound_ptr; acl_parameter.ingress_src_ipv4_addr_end = (ipaddr_t)*igr_sip_up_bound_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_src_ipv4_addr_start_igr_sip_low_bound_ingress_src_ipv4_addr_end_igr_sip_up_bound */ /* * rg set acl-filter pattern ingress_dest_ipv4_addr_start <IPV4ADDR:igr_dip_low_bound> ingress_dest_ipv4_addr_end <IPV4ADDR:igr_dip_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_ipv4_addr_start_igr_dip_low_bound_ingress_dest_ipv4_addr_end_igr_dip_up_bound( cparser_context_t *context, uint32_t *igr_dip_low_bound_ptr, uint32_t *igr_dip_up_bound_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_IPV4_DIP_RANGE_BIT; acl_parameter.ingress_dest_ipv4_addr_start = (ipaddr_t)*igr_dip_low_bound_ptr; acl_parameter.ingress_dest_ipv4_addr_end = (ipaddr_t)*igr_dip_up_bound_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_ipv4_addr_start_igr_dip_low_bound_ingress_dest_ipv4_addr_end_igr_dip_up_bound */ /* * rg set acl-filter pattern ingress_src_ipv6_addr_start <IPV6ADDR:igr_sip6_low_bound> ingress_src_ipv6_addr_end <IPV6ADDR:igr_sip6_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_src_ipv6_addr_start_igr_sip6_low_bound_ingress_src_ipv6_addr_end_igr_sip6_up_bound( cparser_context_t *context, char * *igr_sip6_low_bound_ptr, char * *igr_sip6_up_bound_ptr) { int32 ret = RT_ERR_FAILED; DIAG_UTIL_PARAM_CHK(); //FIX ME acl_parameter.filter_fields |= INGRESS_IPV6_SIP_RANGE_BIT; DIAG_UTIL_ERR_CHK(diag_util_str2ipv6(&acl_parameter.ingress_src_ipv6_addr_start[0], TOKEN_STR(5)), ret); DIAG_UTIL_ERR_CHK(diag_util_str2ipv6(&acl_parameter.ingress_src_ipv6_addr_end[0], TOKEN_STR(7)), ret); //osal_memcpy(&acl_parameter.ingress_src_ipv6_addr_start, *igr_sip6_low_bound_ptr, sizeof(uint8)*16); //osal_memcpy(&acl_parameter.ingress_src_ipv6_addr_end, *igr_sip6_up_bound_ptr, sizeof(uint8)*16); //diag_util_printf("[fix me]ipv6 address parse error in ipv6. \n"); //return CPARSER_ERR_INVALID_PARAMS; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_src_ipv6_addr_start_igr_sip6_low_bound_ingress_src_ipv6_addr_end_igr_sip6_up_bound */ /* * rg set acl-filter pattern ingress_src_ipv6_addr <IPV6ADDR:ingress_src_ipv6_addr> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_src_ipv6_addr_ingress_src_ipv6_addr( cparser_context_t *context, char * *ingress_src_ipv6_addr_ptr) { int32 ret = RT_ERR_FAILED; DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_IPV6_SIP_BIT; DIAG_UTIL_ERR_CHK(diag_util_str2ipv6(&acl_parameter.ingress_src_ipv6_addr[0], TOKEN_STR(5)), ret); return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_src_ipv6_addr_ingress_src_ipv6_addr */ /* * rg set acl-filter pattern ingress_src_ipv6_addr_mask <IPV6ADDR:ingress_src_ipv6_addr_mask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_src_ipv6_addr_mask_ingress_src_ipv6_addr_mask( cparser_context_t *context, char * *ingress_src_ipv6_addr_mask_ptr) { int32 ret = RT_ERR_FAILED; DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_ERR_CHK(diag_util_str2ipv6(&acl_parameter.ingress_src_ipv6_addr_mask[0], TOKEN_STR(5)), ret); return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_src_ipv6_addr_mask_ingress_src_ipv6_addr_mask */ /* * rg set acl-filter pattern ingress_dest_ipv6_addr_start <IPV6ADDR:igr_dip6_low_bound> ingress_dest_ipv6_addr_end <IPV6ADDR:igr_sip6_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_ipv6_addr_start_igr_dip6_low_bound_ingress_dest_ipv6_addr_end_igr_sip6_up_bound( cparser_context_t *context, char * *igr_dip6_low_bound_ptr, char * *igr_sip6_up_bound_ptr) { int32 ret = RT_ERR_FAILED; DIAG_UTIL_PARAM_CHK(); //FIX ME acl_parameter.filter_fields |= INGRESS_IPV6_DIP_RANGE_BIT; DIAG_UTIL_ERR_CHK(diag_util_str2ipv6(&acl_parameter.ingress_dest_ipv6_addr_start[0], TOKEN_STR(5)), ret); DIAG_UTIL_ERR_CHK(diag_util_str2ipv6(&acl_parameter.ingress_dest_ipv6_addr_end[0], TOKEN_STR(7)), ret); //osal_memcpy(&acl_parameter.ingress_dest_ipv6_addr_start, *igr_dip6_low_bound_ptr, sizeof(uint8)*16); //osal_memcpy(&acl_parameter.ingress_dest_ipv6_addr_end, *igr_sip6_up_bound_ptr, sizeof(uint8)*16); //diag_util_printf("[fix me]ipv6 address parse error in ipv6. \n"); //return CPARSER_ERR_INVALID_PARAMS; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_ipv6_addr_start_igr_dip6_low_bound_ingress_dest_ipv6_addr_end_igr_sip6_up_bound */ /* * rg set acl-filter pattern ingress_dest_ipv6_addr <IPV6ADDR:ingress_dest_ipv6_addr> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_ipv6_addr_ingress_dest_ipv6_addr( cparser_context_t *context, char * *ingress_dest_ipv6_addr_ptr) { int32 ret = RT_ERR_FAILED; DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_IPV6_DIP_BIT; DIAG_UTIL_ERR_CHK(diag_util_str2ipv6(&acl_parameter.ingress_dest_ipv6_addr[0], TOKEN_STR(5)), ret); return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_ipv6_addr_ingress_dest_ipv6_addr */ /* * rg set acl-filter pattern ingress_dest_ipv6_addr_mask <IPV6ADDR:ingress_dest_ipv6_addr_mask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_ipv6_addr_mask_ingress_dest_ipv6_addr_mask( cparser_context_t *context, char * *ingress_dest_ipv6_addr_mask_ptr) { int32 ret = RT_ERR_FAILED; DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_ERR_CHK(diag_util_str2ipv6(&acl_parameter.ingress_dest_ipv6_addr_mask[0], TOKEN_STR(5)), ret); return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_ipv6_addr_mask_ingress_dest_ipv6_addr_mask */ /* * rg set acl-filter pattern ingress_src_l4_port_start <UINT:igr_l4sport_low_bound> ingress_src_l4_port_end <UINT:igr_l4sport_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_src_l4_port_start_igr_l4sport_low_bound_ingress_src_l4_port_end_igr_l4sport_up_bound( cparser_context_t *context, uint32_t *igr_l4sport_low_bound_ptr, uint32_t *igr_l4sport_up_bound_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_L4_SPORT_RANGE_BIT; acl_parameter.ingress_src_l4_port_start = *igr_l4sport_low_bound_ptr; acl_parameter.ingress_src_l4_port_end = *igr_l4sport_up_bound_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_src_l4_port_start_igr_l4sport_low_bound_ingress_src_l4_port_end_igr_l4sport_up_bound */ /* * rg set acl-filter pattern ingress_dest_l4_port_start <UINT:igr_l4dport_low_bound> ingress_dest_l4_port_end <UINT:igr_l4dport_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_l4_port_start_igr_l4dport_low_bound_ingress_dest_l4_port_end_igr_l4dport_up_bound( cparser_context_t *context, uint32_t *igr_l4dport_low_bound_ptr, uint32_t *igr_l4dport_up_bound_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_L4_DPORT_RANGE_BIT; acl_parameter.ingress_dest_l4_port_start = *igr_l4dport_low_bound_ptr; acl_parameter.ingress_dest_l4_port_end = *igr_l4dport_up_bound_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_dest_l4_port_start_igr_l4dport_low_bound_ingress_dest_l4_port_end_igr_l4dport_up_bound */ /* * rg set acl-filter pattern egress_src_ipv4_addr_start <IPV4ADDR:egr_sip_low_bound> egress_src_ipv4_addr_end <IPV4ADDR:egr_sip_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_src_ipv4_addr_start_egr_sip_low_bound_egress_src_ipv4_addr_end_egr_sip_up_bound( cparser_context_t *context, uint32_t *egr_sip_low_bound_ptr, uint32_t *egr_sip_up_bound_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= EGRESS_IPV4_SIP_RANGE_BIT; acl_parameter.egress_src_ipv4_addr_start = (ipaddr_t)*egr_sip_low_bound_ptr; acl_parameter.egress_src_ipv4_addr_end = (ipaddr_t)*egr_sip_up_bound_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_src_ipv4_addr_start_egr_sip_low_bound_egress_src_ipv4_addr_end_egr_sip_up_bound */ /* * rg set acl-filter pattern egress_dest_ipv4_addr_start <IPV4ADDR:egr_dip_low_bound> egress_dest_ipv4_addr_end <IPV4ADDR:egr_dip_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_dest_ipv4_addr_start_egr_dip_low_bound_egress_dest_ipv4_addr_end_egr_dip_up_bound( cparser_context_t *context, uint32_t *egr_dip_low_bound_ptr, uint32_t *egr_dip_up_bound_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= EGRESS_IPV4_DIP_RANGE_BIT; acl_parameter.egress_dest_ipv4_addr_start = (ipaddr_t)*egr_dip_low_bound_ptr; acl_parameter.egress_dest_ipv4_addr_end = (ipaddr_t)*egr_dip_up_bound_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_dest_ipv4_addr_start_egr_dip_low_bound_egress_dest_ipv4_addr_end_egr_dip_up_bound */ /* * rg set acl-filter pattern egress_src_l4_port_start <UINT:egr_l4sport_low_bound> egress_src_l4_port_end <UINT:egr_l4sport_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_src_l4_port_start_egr_l4sport_low_bound_egress_src_l4_port_end_egr_l4sport_up_bound( cparser_context_t *context, uint32_t *egr_l4sport_low_bound_ptr, uint32_t *egr_l4sport_up_bound_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= EGRESS_L4_SPORT_RANGE_BIT; acl_parameter.egress_src_l4_port_start = *egr_l4sport_low_bound_ptr; acl_parameter.egress_src_l4_port_end = *egr_l4sport_up_bound_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_src_l4_port_start_egr_l4sport_low_bound_egress_src_l4_port_end_egr_l4sport_up_bound */ /* * rg set acl-filter pattern egress_dest_l4_port_start <UINT:egr_l4dport_low_bound> egress_dest_l4_port_end <UINT:igr_l4dport_up_bound> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_dest_l4_port_start_egr_l4dport_low_bound_egress_dest_l4_port_end_igr_l4dport_up_bound( cparser_context_t *context, uint32_t *egr_l4dport_low_bound_ptr, uint32_t *igr_l4dport_up_bound_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= EGRESS_L4_DPORT_RANGE_BIT; acl_parameter.egress_dest_l4_port_start = *egr_l4dport_low_bound_ptr; acl_parameter.egress_dest_l4_port_end = *igr_l4dport_up_bound_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_dest_l4_port_start_egr_l4dport_low_bound_egress_dest_l4_port_end_igr_l4dport_up_bound */ /* * rg set acl-filter pattern ingress_l4_protocal <UINT:protocal> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_l4_protocal_protocal( cparser_context_t *context, uint32_t *protocal_ptr) { DIAG_UTIL_PARAM_CHK(); if(*protocal_ptr==0){ acl_parameter.filter_fields |= INGRESS_L4_UDP_BIT; }else if(*protocal_ptr==1){ acl_parameter.filter_fields |= INGRESS_L4_TCP_BIT; }else if(*protocal_ptr==2){ acl_parameter.filter_fields |= INGRESS_L4_ICMP_BIT; }else{ diag_util_printf("no such l4-protocal type!"); return CPARSER_ERR_INVALID_PARAMS; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_l4_protocal_protocal */ /* * rg set acl-filter pattern ingress_l4_protocal_value <HEX:protocal> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_l4_protocal_value_protocal( cparser_context_t *context, uint32_t *protocal_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_L4_POROTCAL_VALUE_BIT; acl_parameter.ingress_l4_protocal = *protocal_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_l4_protocal_value_protocal */ /* * rg set acl-filter pattern ingress_port_idx <UINT:ingress_port_idx> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_port_idx_ingress_port_idx( cparser_context_t *context, uint32_t *ingress_port_idx_ptr) { DIAG_UTIL_PARAM_CHK(); if( acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_ALL_PACKET || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_DOWN_DROP || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_DOWN_CVLAN_SVLAN || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_DOWN_TRAP || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_DOWN_PERMIT ) { diag_util_printf("[ERROR!]acl fwding_type_and_direction type must be ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_UP_XXX! \n"); return CPARSER_ERR_INVALID_PARAMS; } acl_parameter.filter_fields |= INGRESS_EGRESS_PORTIDX_BIT; acl_parameter.ingress_port_idx= *ingress_port_idx_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_port_idx_ingress_port_idx */ /* * rg set acl-filter pattern egress_port_idx <UINT:egress_port_idx> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_port_idx_egress_port_idx( cparser_context_t *context, uint32_t *egress_port_idx_ptr) { DIAG_UTIL_PARAM_CHK(); if( acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_ALL_PACKET || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_UP_DROP || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_UP_STREAMID_CVLAN_SVLAN || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_UP_TRAP || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_UP_PERMIT ) { diag_util_printf("[ERROR!]acl fwding_type_and_direction type must be ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_DOWN_XXX! \n"); return CPARSER_ERR_INVALID_PARAMS; } acl_parameter.filter_fields |= INGRESS_EGRESS_PORTIDX_BIT; acl_parameter.egress_port_idx= *egress_port_idx_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_port_idx_egress_port_idx */ /* * rg set acl-filter pattern internal_pri <UINT:internal_pri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_internal_pri_internal_pri( cparser_context_t *context, uint32_t *internal_pri_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INTERNAL_PRI_BIT; acl_parameter.internal_pri= *internal_pri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_internal_pri_internal_pri */ /* * rg set acl-filter pattern ingress_stag_vid <UINT:ingress_stag_vid> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_stag_vid_ingress_stag_vid( cparser_context_t *context, uint32_t *ingress_stag_vid_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_STAG_VID_BIT; acl_parameter.ingress_stag_vid= *ingress_stag_vid_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_stag_vid_ingress_stag_vid */ /* * rg set acl-filter pattern ingress_stag_pri <UINT:ingress_stag_pri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_stag_pri_ingress_stag_pri( cparser_context_t *context, uint32_t *ingress_stag_pri_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_STAG_PRI_BIT; acl_parameter.ingress_stag_pri= *ingress_stag_pri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_stag_pri_ingress_stag_pri */ /* * rg set acl-filter pattern ingress_stag_dei <UINT:ingress_stag_dei> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_stag_dei_ingress_stag_dei( cparser_context_t *context, uint32_t *ingress_stag_dei_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_STAG_DEI_BIT; acl_parameter.ingress_stag_dei= *ingress_stag_dei_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_stag_dei_ingress_stag_dei */ /* * rg set acl-filter pattern ingress_stagIf <UINT:ingress_stagIf> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_stagIf_ingress_stagIf( cparser_context_t *context, uint32_t *ingress_stagIf_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_STAGIF_BIT; acl_parameter.ingress_stagIf= *ingress_stagIf_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_stagif_ingress_stagif */ /* * rg set acl-filter pattern ingress_ctagIf <UINT:ingress_ctagIf> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_ctagIf_ingress_ctagIf( cparser_context_t *context, uint32_t *ingress_ctagIf_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_CTAGIF_BIT; acl_parameter.ingress_ctagIf= *ingress_ctagIf_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_ctagif_ingress_ctagif */ /* * rg set acl-filter pattern ingress_wlanDevMask <UINT:ingress_wlanDevMask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_wlanDevMask_ingress_wlanDevMask( cparser_context_t *context, uint32_t *ingress_wlanDevMask_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.filter_fields |= INGRESS_WLANDEV_BIT; acl_parameter.ingress_wlanDevMask= *ingress_wlanDevMask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_wlandevmask_ingress_wlandevmask */ /* * rg set acl-filter pattern ingress_smac_mask <MACADDR:smac_mask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_smac_mask_smac_mask( cparser_context_t *context, cparser_macaddr_t *smac_mask_ptr) { DIAG_UTIL_PARAM_CHK(); osal_memcpy(&acl_parameter.ingress_smac_mask.octet, smac_mask_ptr->octet, ETHER_ADDR_LEN); return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_smac_mask_smac_mask */ /* * rg set acl-filter pattern ingress_dmac_mask <MACADDR:dmac_mask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_dmac_mask_dmac_mask( cparser_context_t *context, cparser_macaddr_t *dmac_mask_ptr) { DIAG_UTIL_PARAM_CHK(); osal_memcpy(&acl_parameter.ingress_dmac_mask.octet, dmac_mask_ptr->octet, ETHER_ADDR_LEN); return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_dmac_mask_dmac_mask */ /* * rg set acl-filter pattern ingress_ethertype_mask <HEX:ethtype_mask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_ethertype_mask_ethtype_mask( cparser_context_t *context, uint32_t *ethtype_mask_ptr) { DIAG_UTIL_PARAM_CHK(); if(*ethtype_mask_ptr > 0xffff) diag_util_printf("ingress_ethertype_mask have 16-bits only \n"); acl_parameter.ingress_ethertype_mask = *ethtype_mask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_ethertype_mask_ethtype */ /* * rg set acl-filter pattern ingress_stream_id_mask <HEX:stream_id_mask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_stream_id_mask_stream_id_mask( cparser_context_t *context, uint32_t *stream_id_mask_ptr) { DIAG_UTIL_PARAM_CHK(); if(*stream_id_mask_ptr > 0xffff) diag_util_printf("egress_stream_id_mask have 16-bits only \n"); acl_parameter.ingress_stream_id_mask = *stream_id_mask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_stream_id_mask_stream__id_mask */ /* * rg set acl-filter pattern ingress_port_idx_mask <HEX:ingress_port_idx_mask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_ingress_port_idx_mask_ingress_port_idx_mask( cparser_context_t *context, uint32_t *ingress_port_idx_mask_ptr) { DIAG_UTIL_PARAM_CHK(); if( acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_ALL_PACKET || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_DOWN_DROP || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_DOWN_CVLAN_SVLAN ) { diag_util_printf("[ERROR!]acl fwding_type_and_direction type must be ACL_ACTION_TYPE_L34_UP! \n"); return CPARSER_ERR_INVALID_PARAMS; } if(*ingress_port_idx_mask_ptr > 0x7) diag_util_printf("ingress_port_idx_mask have 3-bits only \n"); acl_parameter.ingress_port_idx_mask= *ingress_port_idx_mask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_ingress_port_idx_mask_ingress_port_idx_mask */ /* * rg set acl-filter pattern egress_port_idx_mask <HEX:egress_port_idx_mask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_pattern_egress_port_idx_mask_egress_port_idx_mask( cparser_context_t *context, uint32_t *egress_port_idx_mask_ptr) { DIAG_UTIL_PARAM_CHK(); if( acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_ALL_PACKET || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_UP_DROP || acl_parameter.fwding_type_and_direction == ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_UP_STREAMID_CVLAN_SVLAN ) { diag_util_printf("[ERROR!]acl fwding_type_and_direction type must be ACL_ACTION_TYPE_L34_DOWN! \n"); return CPARSER_ERR_INVALID_PARAMS; } if(*egress_port_idx_mask_ptr > 0x7) diag_util_printf("egress_port_idx_mask have 3-bits only \n"); acl_parameter.ingress_port_idx_mask= *egress_port_idx_mask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_pattern_egress_port_idx_mask_egress_port_idx_mask */ /* * rg set acl-filter action action_type <UINT:actiontype> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_action_type_actiontype( cparser_context_t *context, uint32_t *actiontype_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.action_type = *actiontype_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_action_type_actiontype */ /* * rg set acl-filter action policy-route egress_intf_idx <UINT:egr_intf> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_policy_route_egress_intf_idx_egr_intf( cparser_context_t *context, uint32_t *egr_intf_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_POLICY_ROUTE) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_POLICY_ROUTE! \n"); return CPARSER_ERR_INVALID_PARAMS; } else acl_parameter.action_policy_route_wan = *egr_intf_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_policy_route_egress_intf_idx_egr_intf */ /* * rg set acl-filter action qos action_dot1p_remarking_pri <UINT:dot1p_remarking_pri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_dot1p_remarking_pri_dot1p_remarking_pri( cparser_context_t *context, uint32_t *dot1p_remarking_pri_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { DIAG_UTIL_PARAM_RANGE_CHK((*dot1p_remarking_pri_ptr > RTK_DOT1P_PRIORITY_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.qos_actions |= ACL_ACTION_1P_REMARKING_BIT; acl_parameter.action_dot1p_remarking_pri = *dot1p_remarking_pri_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_dot1p_remarking_pri_dot1p_remarking_pri */ /* * rg set acl-filter action qos action_ip_precedence_remarking_pri <UINT:ip_precedence_remarking_pri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_ip_precedence_remarking_pri_ip_precedence_remarking_pri( cparser_context_t *context, uint32_t *ip_precedence_remarking_pri_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { DIAG_UTIL_PARAM_RANGE_CHK((*ip_precedence_remarking_pri_ptr > (RTK_VALUE_OF_DSCP_MAX>>3)), CPARSER_ERR_INVALID_PARAMS); acl_parameter.qos_actions |= ACL_ACTION_IP_PRECEDENCE_REMARKING_BIT; acl_parameter.action_ip_precedence_remarking_pri = *ip_precedence_remarking_pri_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_ip_precedence_remarking_pri_ip_precedence_remarking_pri */ /* * rg set acl-filter action qos action_dscp_remarking_pri <UINT:dscp_remarking_pri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_dscp_remarking_pri_dscp_remarking_pri( cparser_context_t *context, uint32_t *dscp_remarking_pri_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { DIAG_UTIL_PARAM_RANGE_CHK((*dscp_remarking_pri_ptr > RTK_VALUE_OF_DSCP_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.qos_actions |= ACL_ACTION_DSCP_REMARKING_BIT; acl_parameter.action_dscp_remarking_pri = *dscp_remarking_pri_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_dscp_remarking_pri_dscp_remarking_pri */ /* * rg set acl-filter action qos action_queue_id <UINT:queue_id> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_queue_id_queue_id( cparser_context_t *context, uint32_t *queue_id_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { DIAG_UTIL_PARAM_RANGE_CHK((*queue_id_ptr > 7), CPARSER_ERR_INVALID_PARAMS); acl_parameter.qos_actions |= ACL_ACTION_QUEUE_ID_BIT; acl_parameter.action_queue_id = *queue_id_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_queue_id_queue_id */ /* * rg set acl-filter action qos action_share_meter <UINT:share_meter> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_share_meter_share_meter( cparser_context_t *context, uint32_t *share_meter_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { DIAG_UTIL_PARAM_RANGE_CHK((*share_meter_ptr >= HAL_MAX_NUM_OF_METERING()), CPARSER_ERR_INVALID_PARAMS); acl_parameter.qos_actions |= ACL_ACTION_SHARE_METER_BIT; acl_parameter.action_share_meter = *share_meter_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_share_meter_share_meter */ /* * rg set acl-filter action qos action_log_counter <UINT:log_counter> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_log_counter_log_counter( cparser_context_t *context, uint32_t *log_couner_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { DIAG_UTIL_PARAM_RANGE_CHK((*log_couner_ptr >= HAL_MAX_NUM_OF_METERING()), CPARSER_ERR_INVALID_PARAMS); acl_parameter.qos_actions |= ACL_ACTION_LOG_COUNTER_BIT; acl_parameter.action_log_counter = *log_couner_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_log_couner_log_couner */ /* * rg set acl-filter action qos action_egress_internal_priority <UINT:egress_internal_priority> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_egress_internal_priority_egress_internal_priority( cparser_context_t *context, uint32_t *egress_internal_priority_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_EGRESS_INTERNAL_PRIORITY_BIT; acl_parameter.egress_internal_priority = *egress_internal_priority_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_egress_internal_priority_egress_internal_priority */ /* * rg set acl-filter action qos action_stream_id <UINT:stream_id> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_stream_id_stream_id( cparser_context_t *context, uint32_t *stream_id_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { DIAG_UTIL_PARAM_RANGE_CHK((*stream_id_ptr >= HAL_CLASSIFY_SID_NUM()), CPARSER_ERR_INVALID_PARAMS); acl_parameter.qos_actions |= ACL_ACTION_STREAM_ID_OR_LLID_BIT; acl_parameter.action_stream_id_or_llid = *stream_id_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_stream_id_stream_id */ /* * rg set acl-filter action qos action_acl_priority <UINT:priority> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_acl_priority_priority( cparser_context_t *context, uint32_t *priority_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { DIAG_UTIL_PARAM_RANGE_CHK((*priority_ptr > RTK_DOT1P_PRIORITY_MAX), CPARSER_ERR_INVALID_PARAMS); acl_parameter.qos_actions |= ACL_ACTION_ACL_PRIORITY_BIT; acl_parameter.action_acl_priority = *priority_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_acl_priority_priority */ /* * rg set acl-filter action qos action_redirect <UINT:redirect_portmask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_redirect_redirect_portmask( cparser_context_t *context, uint32_t *redirect_portmask_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_REDIRECT_BIT; acl_parameter.redirect_portmask = *redirect_portmask_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_redirect_redirect_portmask */ #if 1 //RTL9602C SERIES CF ACTIONS /* * rg set acl-filter action qos action_stag tagDecision <UINT:tagDecision> svidDecision <UINT:svidDecision> spriDecision <UINT:spriDecision> svid <UINT:svid> spri <UINT:spri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_stag_tagDecision_tagDecision_svidDecision_svidDecision_spriDecision_spriDecision_svid_svid_spri_spri( cparser_context_t *context, uint32_t *tagDecision_ptr, uint32_t *svidDecision_ptr, uint32_t *spriDecision_ptr, uint32_t *svid_ptr, uint32_t *spri_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_SVLANTAG_BIT; switch(*tagDecision_ptr){ case 0: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_NOP; break; case 1: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_VSTPID; break; case 2: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_VSTPID2; break; case 3: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_UNTAG; break; case 4: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TRANSPARENT; break; case 5: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_ORIGINAL_STAG_TPID; break; default: diag_util_printf("[ERROR!]invalid tagDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*svidDecision_ptr){ case 0: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_NOP; break; case 1: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_ASSIGN; break; case 2: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_COPY_FROM_2ND_TAG; break; default: diag_util_printf("[ERROR!]invalid svidDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*spriDecision_ptr){ case 0: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_NOP; break; case 1: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_ASSIGN; break; case 2: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_COPY_FROM_2ND_TAG; break; case 4: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_COPY_FROM_INTERNAL_PRI; break; default: diag_util_printf("[ERROR!]invalid spriDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } acl_parameter.action_acl_svlan.assignedSvid = *svid_ptr; acl_parameter.action_acl_svlan.assignedSpri = *spri_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_stag_tagdecision_tagdecision_sviddecision_sviddecision_spridecision_spridecision_svid_svid_spri_spri */ /* * rg set acl-filter action qos action_ctag tagDecision <UINT:tagDecision> cvidDecision <UINT:cvidDecision> cpriDecision <UINT:cpriDecision> cvid <UINT:cvid> cpri <UINT:cpri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_tagDecision_tagDecision_cvidDecision_cvidDecision_cpriDecision_cpriDecision_cvid_cvid_cpri_cpri( cparser_context_t *context, uint32_t *tagDecision_ptr, uint32_t *cvidDecision_ptr, uint32_t *cpriDecision_ptr, uint32_t *cvid_ptr, uint32_t *cpri_ptr) { DIAG_UTIL_PARAM_CHK(); acl_parameter.qos_actions |= ACL_ACTION_ACL_CVLANTAG_BIT; switch(*tagDecision_ptr){ case 0: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_NOP; break; case 1: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TAGGING; break; case 2: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_UNTAG; break; case 3: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TRANSPARENT; break; default: diag_util_printf("[ERROR!]invalid tagDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*cvidDecision_ptr){ case 0: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_NOP; break; case 1: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_ASSIGN; break; case 2: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_COPY_FROM_2ND_TAG; break; case 4: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_COPY_FROM_INTERNAL_VID; break; default: diag_util_printf("[ERROR!]invalid cvidDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*cpriDecision_ptr){ case 0: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_NOP; break; case 1: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_ASSIGN; break; case 2: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_COPY_FROM_2ND_TAG; break; case 4: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_COPY_FROM_INTERNAL_PRI; break; default: diag_util_printf("[ERROR!]invalid cvidDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } acl_parameter.action_acl_cvlan.assignedCvid = *cvid_ptr; acl_parameter.action_acl_cvlan.assignedCpri = *cpri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_tagdecision_tagdecision_cviddecision_cviddecision_cpridecision_cpridecision_cvid_cvid_cpri_cpri */ #endif #if 1 //RTL9600 SERIES CF ACTIONS /* * rg set acl-filter action qos action_stag tagWithTPID svidDecision <UINT:svidDecision> spriDecision <UINT:spriDecision> svid <UINT:svid> spri <UINT:spri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_stag_tagWithTPID_svidDecision_svidDecision_spriDecision_spriDecision_svid_svid_spri_spri( cparser_context_t *context, uint32_t *svidDecision_ptr, uint32_t *spriDecision_ptr, uint32_t *svid_ptr, uint32_t *spri_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_SVLANTAG_BIT; acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_VSTPID; acl_parameter.action_acl_svlan.svlanSvidDecision = *svidDecision_ptr; acl_parameter.action_acl_svlan.svlanSpriDecision = *spriDecision_ptr; acl_parameter.action_acl_svlan.assignedSvid = *svid_ptr; acl_parameter.action_acl_svlan.assignedSpri = *spri_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_stag_tagwithtpid_sviddecision_sviddecision_spridecision_spridecision_svid_svid_spri_spri */ /* * rg set acl-filter action qos action_stag tagWith8100 svidDecision <UINT:svidDecision> spriDecision <UINT:spriDecision> svid <UINT:svid> spri <UINT:spri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_stag_tagWith8100_svidDecision_svidDecision_spriDecision_spriDecision_svid_svid_spri_spri( cparser_context_t *context, uint32_t *svidDecision_ptr, uint32_t *spriDecision_ptr, uint32_t *svid_ptr, uint32_t *spri_ptr) { #if defined(CONFIG_RTL9602C_SERIES) diag_util_printf("[NOT SUPPORT] please use: rg set acl-filter action qos action_stag tagDecision XXX \n"); #else DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_SVLANTAG_BIT; acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_8100; acl_parameter.action_acl_svlan.svlanSvidDecision = *svidDecision_ptr; acl_parameter.action_acl_svlan.svlanSpriDecision = *spriDecision_ptr; acl_parameter.action_acl_svlan.assignedSvid = *svid_ptr; acl_parameter.action_acl_svlan.assignedSpri = *spri_ptr; } #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_stag_tagwith8100_sviddecision_sviddecision_spridecision_spridecision_svid_svid_spri_spri */ /* * rg set acl-filter action qos action_stag tagWithSP2C */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_stag_tagWithSP2C( cparser_context_t *context) { #if defined(CONFIG_RTL9602C_SERIES) diag_util_printf("[WARNING!] please use: rg set acl-filter action qos action_stag tagDecision XXX \n"); #else DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_SVLANTAG_BIT; acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_SP2C; } #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_stag_tagwithsp2c */ /* * rg set acl-filter action qos action_stag untag */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_stag_untag( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_SVLANTAG_BIT; acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_UNTAG; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_stag_untag */ /* * rg set acl-filter action qos action_stag transparent */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_stag_transparent( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_SVLANTAG_BIT; acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TRANSPARENT; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_stag_transparent */ /* * rg set acl-filter action qos action_stag nop */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_stag_nop( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_SVLANTAG_BIT; acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_NOP; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_stag_nop */ /* * rg set acl-filter action qos action_ctag tagging cvidDecision <UINT:cvidDecision> cpriDecision <UINT:cpriDecision> cvid <UINT:cvid> cpri <UINT:cpri> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_tagging_cvidDecision_cvidDecision_cpriDecision_cpriDecision_cvid_cvid_cpri_cpri( cparser_context_t *context, uint32_t *cvidDecision_ptr, uint32_t *cpriDecision_ptr, uint32_t *cvid_ptr, uint32_t *cpri_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_CVLANTAG_BIT; acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TAGGING; acl_parameter.action_acl_cvlan.cvlanCvidDecision = *cvidDecision_ptr; acl_parameter.action_acl_cvlan.cvlanCpriDecision = *cpriDecision_ptr; acl_parameter.action_acl_cvlan.assignedCvid = *cvid_ptr; acl_parameter.action_acl_cvlan.assignedCpri = *cpri_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_tagging_cviddecision_cviddecision_cpridecision_cpridecision_cvid_cvid_cpri_cpri */ /* * rg set acl-filter action qos action_ctag tagWithC2S */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_tagWithC2S( cparser_context_t *context) { #if defined(CONFIG_RTL9602C_SERIES) diag_util_printf("[NOT SUPPORT!] please use: rg set acl-filter action qos action_ctag tagDecision XXX \n"); #else DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_CVLANTAG_BIT; acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TAGGING_WITH_C2S; } #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_tagwithc2s */ /* * rg set acl-filter action qos action_ctag tagWithSP2C */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_tagWithSP2C( cparser_context_t *context) { #if defined(CONFIG_RTL9602C_SERIES) diag_util_printf("[NOT SUPPORT!] please use: rg set acl-filter action qos action_ctag tagDecision XXX \n"); #else DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_CVLANTAG_BIT; acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TAGGING_WITH_SP2C; } #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_tagwithsp2c */ /* * rg set acl-filter action qos action_ctag untag */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_untag( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_CVLANTAG_BIT; acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_UNTAG; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_untag */ /* * rg set acl-filter action qos action_ctag transparent */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_transparent( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_CVLANTAG_BIT; acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TRANSPARENT; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_transparent */ /* * rg set acl-filter action qos action_ctag nop */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_nop( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_CVLANTAG_BIT; acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_NOP; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_ctag_nop */ #endif /* * rg set acl-filter action qos action_ingress_vid <UINT:ingress_vid> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_ingress_vid_ingress_vid( cparser_context_t *context, uint32_t *ingress_vid_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.action_type != ACL_ACTION_TYPE_QOS) { diag_util_printf("[ERROR!]acl action type must be ACL_ACTION_TYPE_QOS! \n"); return CPARSER_ERR_INVALID_PARAMS; } else { acl_parameter.qos_actions |= ACL_ACTION_ACL_INGRESS_VID_BIT; acl_parameter.action_acl_ingress_vid=*ingress_vid_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_action_ingress_vid_ingress_vid */ /* * rg set acl-filter action qos action_downstream_uni_portmask portmask <HEX:portmask> */ cparser_result_t cparser_cmd_rg_set_acl_filter_action_qos_action_downstream_uni_portmask_portmask_portmask( cparser_context_t *context, uint32_t *portmask_ptr) { DIAG_UTIL_PARAM_CHK(); if(acl_parameter.fwding_type_and_direction != ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_DOWN_CVLAN_SVLAN) { diag_util_printf("[ERROR!]acl action type must be ACL_FWD_TYPE_DIR_INGRESS_OR_EGRESS_L34_DOWN_CVLAN_SVLAN! \n"); return CPARSER_ERR_INVALID_PARAMS; } if(*portmask_ptr!=0) { acl_parameter.qos_actions |= ACL_ACTION_DS_UNIMASK_BIT; //acl_parameter.downstream_uni_portmask=(*portmask_ptr & 0xf); //only allow in LAN acl_parameter.downstream_uni_portmask=*portmask_ptr; } return CPARSER_OK; } /* end of cparser_cmd_rg_set_acl_filter_action_qos_downstream_uni_portmask_portmask_portmask */ // //classify-filter // /* * rg show classify-filter */ cparser_result_t cparser_cmd_rg_show_classify_filter( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); _diag_rg_classifyFilter_show_field(&classifyFilter); return CPARSER_OK; } /* end of cparser_cmd_rg_show_classify_filter */ /* * rg clear classify-filter */ cparser_result_t cparser_cmd_rg_clear_classify_filter( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); osal_memset(&classifyFilter, 0x0, sizeof(rtk_rg_classifyEntry_t)); diag_util_mprintf("classify-filter entry clear!\n"); return CPARSER_OK; } /* end of cparser_cmd_rg_clear_classify_filter */ /* * rg add classify-filter entry */ cparser_result_t cparser_cmd_rg_add_classify_filter_entry( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); int ret=0; int classify_filter_idx=0; DIAG_UTIL_PARAM_CHK(); ret = rtk_rg_classifyEntry_add(&classifyFilter); if(ret == RT_ERR_RG_OK ) diag_util_mprintf("add classify-filter entry[%d] success!\n",classifyFilter.index); else diag_util_mprintf("add classify-filter entry failed! (ret=%d) \n",ret); return CPARSER_OK; } /* end of cparser_cmd_rg_add_classify_filter_entry */ /* * rg get classify-filter entry <UINT:index> */ cparser_result_t cparser_cmd_rg_get_classify_filter_entry_index( cparser_context_t *context, uint32_t *index_ptr) { int ret=0; int search_start_idx = *index_ptr; DIAG_UTIL_PARAM_CHK(); DIAG_UTIL_OUTPUT_INIT(); osal_memset(&classifyFilter, 0x0, sizeof(rtk_rg_classifyEntry_t)); ret = rtk_rg_classifyEntry_find(search_start_idx,&classifyFilter); if(ret == RT_ERR_RG_OK){ if(search_start_idx == (*index_ptr)){ _diag_rg_classifyFilter_show_field(&classifyFilter); diag_util_mprintf("get classify-filter entry[%d] success!\n",*index_ptr); }else{ diag_util_mprintf("get classify-filter entry[%d] failed! acl-filter entry[%d] is empty!\n",*index_ptr); } }else{ diag_util_mprintf("find classify-filter entry[%d] failed!\n",*index_ptr); } diag_util_mprintf(""); return CPARSER_OK; } /* end of cparser_cmd_rg_get_classify_filter_entry_index */ /* * rg del classify-filter entry <UINT:index> */ cparser_result_t cparser_cmd_rg_del_classify_filter_entry_index( cparser_context_t *context, uint32_t *index_ptr) { int ret; DIAG_UTIL_PARAM_CHK(); ret = rtk_rg_classifyEntry_del(*index_ptr); if(ret == RT_ERR_RG_OK){ diag_util_mprintf("del classify-filter entry[%d] success!\n",*index_ptr); }else{ diag_util_mprintf("del classify-filter entry[%d] failed!\n",*index_ptr); } return CPARSER_OK; } /* end of cparser_cmd_rg_del_classify_filter_entry_index */ /* * rg set classify-filter entry <UINT:index> */ cparser_result_t cparser_cmd_rg_set_classify_filter_entry_index( cparser_context_t *context, uint32_t *index_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.index=*index_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_entry_index */ /* * rg set classify-filter pattern etherType <HEX:etherType> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_etherType_etherType( cparser_context_t *context, uint32_t *etherType_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.filter_fields |= EGRESS_ETHERTYPR_BIT; classifyFilter.etherType=*etherType_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_ethertype_ethertype */ /* * rg set classify-filter pattern gemidx <UINT:gemidx> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_gemidx_gemidx( cparser_context_t *context, uint32_t *gemidx_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.filter_fields |= EGRESS_GEMIDX_BIT; classifyFilter.gemidx=*gemidx_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_gemidx_gemidx */ /* * rg set classify-filter pattern llid <UINT:llid> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_llid_llid( cparser_context_t *context, uint32_t *llid_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.filter_fields |= EGRESS_LLID_BIT; classifyFilter.llid=*llid_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_llid_llid */ /* * rg set classify-filter pattern outterTagVid <UINT:outterTagVid> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_outterTagVid_outterTagVid( cparser_context_t *context, uint32_t *outterTagVid_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.filter_fields |= EGRESS_TAGVID_BIT; classifyFilter.outterTagVid=*outterTagVid_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_outtertagvid_outtertagvid */ /* * rg set classify-filter pattern outterTagPri <UINT:outterTagPri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_outterTagPri_outterTagPri( cparser_context_t *context, uint32_t *outterTagPri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.filter_fields |= EGRESS_TAGPRI_BIT; classifyFilter.outterTagPri=*outterTagPri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_outtertagpri_outtertagpri */ /* * rg set classify-filter pattern internalPri <UINT:internalPri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_internalPri_internalPri( cparser_context_t *context, uint32_t *internalPri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.filter_fields |= EGRESS_INTERNALPRI_BIT; classifyFilter.internalPri=*internalPri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_internalpri_internalpri */ /* * rg set classify-filter pattern stagIf <UINT:stagIf> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_stagIf_stagIf( cparser_context_t *context, uint32_t *stagIf_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.filter_fields |= EGRESS_STAGIF_BIT; classifyFilter.stagIf=*stagIf_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_stagif_stagif */ /* * rg set classify-filter pattern ctagIf <UINT:ctagIf> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_ctagIf_ctagIf( cparser_context_t *context, uint32_t *ctagIf_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.filter_fields |= EGRESS_CTAGIF_BIT; classifyFilter.ctagIf=*ctagIf_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_ctagif_ctagif */ /* * rg set classify-filter pattern uni <UINT:uni> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_uni_uni( cparser_context_t *context, uint32_t *uni_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.filter_fields |= EGRESS_UNI_BIT; classifyFilter.uni=*uni_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_uni_uni */ /* * rg set classify-filter pattern etherType_mask <HEX:etherType_mask> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_etherType_mask_etherType_mask( cparser_context_t *context, uint32_t *etherType_mask_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.etherType_mask=*etherType_mask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_ethertype_mask_ethertype_mask */ /* * rg set classify-filter pattern gemidx_mask <HEX:gemidx_mask> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_gemidx_mask_gemidx_mask( cparser_context_t *context, uint32_t *gemidx_mask_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.gemidx_mask=*gemidx_mask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_gemidx_mask_gemidx_mask */ /* * rg set classify-filter pattern uni_mask <UINT:uni_mask> */ cparser_result_t cparser_cmd_rg_set_classify_filter_pattern_uni_mask_uni_mask( cparser_context_t *context, uint32_t *uni_mask_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.uni_mask=*uni_mask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_pattern_uni_mask_uni_mask */ #if 1 //RTL9602C SERIES CF ACTIONS /* * rg set classify-filter action direction upstream action_stag tagDecision <UINT:ta gDecision> svidDecision <UINT:svidDecision> spriDecision <UINT:spriDecision> svid <UINT:svid> spri <UINT:spri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_tagDecision_tagDecision_svidDecision_svidDecision_spriDecision_spriDecision_svid_svid_spri_spri( cparser_context_t *context, uint32_t *tagDecision_ptr, uint32_t *svidDecision_ptr, uint32_t *spriDecision_ptr, uint32_t *svid_ptr, uint32_t *spri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_STAG_BIT; switch(*tagDecision_ptr){ case 0: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_NOP; break; case 1: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_VSTPID; break; case 2: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_VSTPID2; break; case 3: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_UNTAG; break; case 4: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TRANSPARENT; break; case 5: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_ORIGINAL_STAG_TPID; break; default: diag_util_printf("[ERROR!]invalid tagDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*svidDecision_ptr){ case 0: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_NOP; break; case 1: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_ASSIGN; break; case 2: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_COPY_FROM_2ND_TAG; break; default: diag_util_printf("[ERROR!]invalid svidDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*spriDecision_ptr){ case 0: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_NOP; break; case 1: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_ASSIGN; break; case 2: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_COPY_FROM_2ND_TAG; break; case 4: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_COPY_FROM_INTERNAL_PRI; break; default: diag_util_printf("[ERROR!]invalid spriDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } classifyFilter.action_svlan.assignedSvid = *svid_ptr; classifyFilter.action_svlan.assignedSpri = *spri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_tagdecision_tagdecision_sviddecision_sviddecision_spridecision_spridecision_svid_svid_spri_spri */ /* * rg set classify-filter action direction upstream action_ctag tagDecision <UINT:tagDecision> cvidDecision <UINT:cvidDecision> cpriDecision <UINT:cpriDecision> cvid <UINT:cvid> cpri <UINT:cpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_tagDecision_tagDecision_cvidDecision_cvidDecision_cpriDecision_cpriDecision_cvid_cvid_cpri_cpri( cparser_context_t *context, uint32_t *tagDecision_ptr, uint32_t *cvidDecision_ptr, uint32_t *cpriDecision_ptr, uint32_t *cvid_ptr, uint32_t *cpri_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_CTAG_BIT; switch(*tagDecision_ptr){ case 0: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_NOP; break; case 1: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TAGGING; break; case 2: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_UNTAG; break; case 3: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TRANSPARENT; break; default: diag_util_printf("[ERROR!]invalid tagDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*cvidDecision_ptr){ case 0: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_NOP; break; case 1: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_ASSIGN; break; case 2: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_COPY_FROM_2ND_TAG; break; case 4: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_COPY_FROM_INTERNAL_VID; break; default: diag_util_printf("[ERROR!]invalid cvidDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*cpriDecision_ptr){ case 0: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_NOP; break; case 1: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_ASSIGN; break; case 2: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_COPY_FROM_2ND_TAG; break; case 4: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_COPY_FROM_INTERNAL_PRI; break; default: diag_util_printf("[ERROR!]invalid cvidDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } classifyFilter.action_cvlan.assignedCvid = *cvid_ptr; classifyFilter.action_cvlan.assignedCpri = *cpri_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_tagdecision_tagdecision_cviddecision_cviddecision_cpridecision_cpridecision_cvid_cvid_cpri_cpri */ #if 0 /* * rg set classify-filter action direction upstream action_fwd <UINT:fwdDecision> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_fwd_fwdDecision( cparser_context_t *context, uint32_t *fwdDecision_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_FWD_BIT; classifyFilter.action_fwd.fwdDecision= *fwdDecision_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_fwd_fwddecision */ /* * rg set classify-filter action direction upstream action_cfpri <UINT:cfpriDecision> cfpri <UINT:cfpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_cfpri_cfpriDecision_cfpri_cfpri( cparser_context_t *context, uint32_t *cfpriDecision_ptr, uint32_t *cfpri_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_CFPRI_BIT; classifyFilter.action_cfpri.cfPriDecision = *cfpriDecision_ptr; classifyFilter.action_cfpri.assignedCfPri = *cfpri_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_cfpri_cfpridecision_cfpri_cfpri */ /* * rg set classify-filter action direction upstream action_dscp <UINT:dscpDecision> dscp <UINT:dscp> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_dscp_dscpDecision_dscp_dscp( cparser_context_t *context, uint32_t *dscpDecision_ptr, uint32_t *dscp_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.ds_action_field |= CF_US_ACTION_DSCP_BIT; classifyFilter.action_dscp.dscpDecision = *dscpDecision_ptr; classifyFilter.action_dscp.assignedDscp = *dscp_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_dscp_dscpdecision_dscp_dscp */ /* * rg set classify-filter action direction upstream action_sid <UINT:sidDecision> sid <UINT:sid> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_sid_sidDecision_sid_sid( cparser_context_t *context, uint32_t *sidDecision_ptr, uint32_t *sid_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_SID_BIT; classifyFilter.action_sid_or_llid.sidDecision = *sidDecision_ptr; classifyFilter.action_sid_or_llid.assignedSid_or_llid= *sid_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_sid_siddecision_sid_sid */ #endif /* * rg set classify-filter action direction upstream action_fwd fwdDecision <UINT:fwdDecision> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_fwd_fwdDecision_fwdDecision( cparser_context_t *context, uint32_t *fwdDecision_ptr) { DIAG_UTIL_PARAM_CHK(); #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_FWD_BIT; classifyFilter.action_fwd.fwdDecision= *fwdDecision_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_fwd_fwddecision_fwddecision */ /* * rg set classify-filter action direction upstream action_cfpri cfpriDecision <UINT:cfpriDecision> cfpri <UINT:cfpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_cfpri_cfpriDecision_cfpriDecision_cfpri_cfpri( cparser_context_t *context, uint32_t *cfpriDecision_ptr, uint32_t *cfpri_ptr) { DIAG_UTIL_PARAM_CHK(); #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_CFPRI_BIT; classifyFilter.action_cfpri.cfPriDecision = *cfpriDecision_ptr; classifyFilter.action_cfpri.assignedCfPri = *cfpri_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_cfpri_cfpridecision_cfpridecision_cfpri_cfpri */ /* * rg set classify-filter action direction upstream action_dscp dscpDecision <UINT:dscpDecision> dscp <UINT:dscp> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_dscp_dscpDecision_dscpDecision_dscp_dscp( cparser_context_t *context, uint32_t *dscpDecision_ptr, uint32_t *dscp_ptr) { DIAG_UTIL_PARAM_CHK(); #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.ds_action_field |= CF_US_ACTION_DSCP_BIT; classifyFilter.action_dscp.dscpDecision = *dscpDecision_ptr; classifyFilter.action_dscp.assignedDscp = *dscp_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_dscp_dscpdecision_dscpdecision_dscp_dscp */ /* * rg set classify-filter action direction upstream action_sid sidDecision <UINT:sidDecision> sid <UINT:sid> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_sid_sidDecision_sidDecision_sid_sid( cparser_context_t *context, uint32_t *sidDecision_ptr, uint32_t *sid_ptr) { DIAG_UTIL_PARAM_CHK(); #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_SID_BIT; classifyFilter.action_sid_or_llid.sidDecision = *sidDecision_ptr; classifyFilter.action_sid_or_llid.assignedSid_or_llid= *sid_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_sid_siddecision_siddecision_sid_sid */ /* * rg set classify-filter action direction downstream action_stag tagDecision <UINT:tagDecision> svidDecision <UINT:svidDecision> spriDecision <UINT:spriDecision> svid <UINT:svid> spri <UINT:spri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_tagDecision_tagDecision_svidDecision_svidDecision_spriDecision_spriDecision_svid_svid_spri_spri( cparser_context_t *context, uint32_t *tagDecision_ptr, uint32_t *svidDecision_ptr, uint32_t *spriDecision_ptr, uint32_t *svid_ptr, uint32_t *spri_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_STAG_BIT; switch(*tagDecision_ptr){ case 0: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_NOP; break; case 1: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_VSTPID; break; case 2: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_VSTPID2; break; case 3: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_UNTAG; break; case 4: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TRANSPARENT; break; case 5: acl_parameter.action_acl_svlan.svlanTagIfDecision=ACL_SVLAN_TAGIF_TAGGING_WITH_ORIGINAL_STAG_TPID; break; default: diag_util_printf("[ERROR!]invalid tagDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*svidDecision_ptr){ case 0: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_NOP; break; case 1: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_ASSIGN; break; case 2: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_svlan.svlanSvidDecision=ACL_SVLAN_SVID_COPY_FROM_2ND_TAG; break; default: diag_util_printf("[ERROR!]invalid svidDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*spriDecision_ptr){ case 0: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_NOP; break; case 1: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_ASSIGN; break; case 2: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_COPY_FROM_2ND_TAG; break; case 4: acl_parameter.action_acl_svlan.svlanSpriDecision=ACL_SVLAN_SPRI_COPY_FROM_INTERNAL_PRI; break; default: diag_util_printf("[ERROR!]invalid spriDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } classifyFilter.action_svlan.assignedSvid = *svid_ptr; classifyFilter.action_svlan.assignedSpri = *spri_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_tagdecision_tagdecision_sviddecision_sviddecision_spridecision_spridecision_svid_svid_spri_spri */ /* * rg set classify-filter action direction downstream action_ctag tagDecision <UINT:tagDecision> cvidDecision <UINT:cvidDecision> cpriDecision <UINT:cpriDecision> cvid <UINT:cvid> cpri <UINT:cpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_tagDecision_tagDecision_cvidDecision_cvidDecision_cpriDecision_cpriDecision_cvid_cvid_cpri_cpri( cparser_context_t *context, uint32_t *tagDecision_ptr, uint32_t *cvidDecision_ptr, uint32_t *cpriDecision_ptr, uint32_t *cvid_ptr, uint32_t *cpri_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_CTAG_BIT; switch(*tagDecision_ptr){ case 0: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_NOP; break; case 1: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TAGGING; break; case 2: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_UNTAG; break; case 3: acl_parameter.action_acl_cvlan.cvlanTagIfDecision=ACL_CVLAN_TAGIF_TRANSPARENT; break; default: diag_util_printf("[ERROR!]invalid tagDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*cvidDecision_ptr){ case 0: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_NOP; break; case 1: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_ASSIGN; break; case 2: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_cvlan.cvlanCvidDecision=ACL_CVLAN_CVID_COPY_FROM_2ND_TAG; break; default: diag_util_printf("[ERROR!]invalid cvidDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } switch(*cpriDecision_ptr){ case 0: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_NOP; break; case 1: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_ASSIGN; break; case 2: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_COPY_FROM_1ST_TAG; break; case 3: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_COPY_FROM_2ND_TAG; break; case 4: acl_parameter.action_acl_cvlan.cvlanCpriDecision=ACL_CVLAN_CPRI_COPY_FROM_INTERNAL_PRI; break; default: diag_util_printf("[ERROR!]invalid cvidDecision parameter.\n"); return CPARSER_ERR_INVALID_PARAMS; break; } classifyFilter.action_cvlan.assignedCvid = *cvid_ptr; classifyFilter.action_cvlan.assignedCpri = *cpri_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_tagdecision_tagdecision_cviddecision_cviddecision_cpridecision_cpridecision_cvid_cvid_cpri_cpri */ #if 0 /* * rg set classify-filter action direction downstream action_fwd <UINT:fwdDecision> fwdportmask <HEX:fwdportmask> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_fwd_fwdDecision_fwdportmask_fwdportmask( cparser_context_t *context, uint32_t *fwdDecision_ptr, uint32_t *fwdportmask_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_UNI_MASK_BIT; classifyFilter.action_uni.uniActionDecision = *fwdDecision_ptr; classifyFilter.action_uni.assignedUniPortMask = *fwdportmask_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_fwd_fwddecision_fwdportmask_fwdportmask */ /* * rg set classify-filter action direction downstream action_cfpri <UINT:cfpriDecision> cfpri <UINT:cfpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_cfpri_cfpriDecision_cfpri_cfpri( cparser_context_t *context, uint32_t *cfpriDecision_ptr, uint32_t *cfpri_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_CFPRI_BIT; classifyFilter.action_cfpri.cfPriDecision = *cfpriDecision_ptr; classifyFilter.action_cfpri.assignedCfPri = *cfpri_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_cfpri_cfpridecision_cfpri_cfpri */ /* * rg set classify-filter action direction downstream action_dscp <UINT:dscpDecision> dscp <UINT:dscp> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_dscp_dscpDecision_dscp_dscp( cparser_context_t *context, uint32_t *dscpDecision_ptr, uint32_t *dscp_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_DSCP_BIT; classifyFilter.action_dscp.dscpDecision = *dscpDecision_ptr; classifyFilter.action_dscp.assignedDscp = *dscp_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_dscp_dscpdecision_dscp_dscp */ #endif /* * rg set classify-filter action direction downstream action_fwd fwdDecision <UINT:fwdDecision> fwdportmask <HEX:fwdportmask> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_fwd_fwdDecision_fwdDecision_fwdportmask_fwdportmask( cparser_context_t *context, uint32_t *fwdDecision_ptr, uint32_t *fwdportmask_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_UNI_MASK_BIT; classifyFilter.action_uni.uniActionDecision = *fwdDecision_ptr; classifyFilter.action_uni.assignedUniPortMask = *fwdportmask_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_fwd_fwddecision_fwddecision_fwdportmask_fwdportmask */ /* * rg set classify-filter action direction downstream action_cfpri cfpriDecision <UINT:cfpriDecision> cfpri <UINT:cfpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_cfpri_cfpriDecision_cfpriDecision_cfpri_cfpri( cparser_context_t *context, uint32_t *cfpriDecision_ptr, uint32_t *cfpri_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_CFPRI_BIT; classifyFilter.action_cfpri.cfPriDecision = *cfpriDecision_ptr; classifyFilter.action_cfpri.assignedCfPri = *cfpri_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_cfpri_cfpridecision_cfpridecision_cfpri_cfpri */ /* * rg set classify-filter action direction downstream action_dscp dscpDecision <UINT:dscpDecision> dscp <UINT:dscp> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_dscp_dscpDecision_dscpDecision_dscp_dscp( cparser_context_t *context, uint32_t *dscpDecision_ptr, uint32_t *dscp_ptr) { #if defined(CONFIG_RTL9602C_SERIES) DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_DSCP_BIT; classifyFilter.action_dscp.dscpDecision = *dscpDecision_ptr; classifyFilter.action_dscp.assignedDscp = *dscp_ptr; #else diag_util_printf("[NOT SUPPORT!]\n"); #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_dscp_dscpdecision_dscpdecision_dscp_dscp */ #endif #if 1 //RTL9600 SERIES CF ACTIONS /* * rg set classify-filter action direction upstream action_drop */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_drop( cparser_context_t *context) { #if defined(CONFIG_RTL9602C_SERIES) diag_util_printf("[NOT SUPPORT!] please use: rg set classify-filter action direction upstream action_fwd\n"); #else DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_DROP_BIT; #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_drop */ /* * rg set classify-filter action direction upstream action_sid <UINT:sid> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_sid_sid( cparser_context_t *context, uint32_t *sid_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_SID_BIT; classifyFilter.action_sid_or_llid.assignedSid_or_llid= *sid_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_sid_sid */ /* * rg set classify-filter action direction downstream action_drop */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_drop( cparser_context_t *context) { #if defined(CONFIG_RTL9602C_SERIES) diag_util_printf("[NOT SUPPORT!] please use: rg set classify-filter action direction downstream action_fwd\n"); #else DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_DROP_BIT; #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_drop */ /* * rg set classify-filter action direction upstream action_stag tagWithTPID svidDecision <UINT:svidDecision> spriDecision <UINT:spriDecision> svid <UINT:svid> spri <UINT:spri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_tagWithTPID_svidDecision_svidDecision_spriDecision_spriDecision_svid_svid_spri_spri( cparser_context_t *context, uint32_t *svidDecision_ptr, uint32_t *spriDecision_ptr, uint32_t *svid_ptr, uint32_t *spri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_STAG_BIT; classifyFilter.action_svlan.svlanTagIfDecision = ACL_SVLAN_TAGIF_TAGGING_WITH_VSTPID; classifyFilter.action_svlan.svlanSvidDecision = *svidDecision_ptr; classifyFilter.action_svlan.svlanSpriDecision = *spriDecision_ptr; classifyFilter.action_svlan.assignedSvid = *svid_ptr; classifyFilter.action_svlan.assignedSpri = *spri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_tagwithtpid_sviddecision_sviddecision_spridecision_spridecision_svid_svid_spri_spri */ /* * rg set classify-filter action direction upstream action_stag tagWith8100 svidDecision <UINT:svidDecision> spriDecision <UINT:spriDecision> svid <UINT:svid> spri <UINT:spri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_tagWith8100_svidDecision_svidDecision_spriDecision_spriDecision_svid_svid_spri_spri( cparser_context_t *context, uint32_t *svidDecision_ptr, uint32_t *spriDecision_ptr, uint32_t *svid_ptr, uint32_t *spri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_STAG_BIT; classifyFilter.action_svlan.svlanTagIfDecision = ACL_SVLAN_TAGIF_TAGGING_WITH_8100; classifyFilter.action_svlan.svlanSvidDecision = *svidDecision_ptr; classifyFilter.action_svlan.svlanSpriDecision = *spriDecision_ptr; classifyFilter.action_svlan.assignedSvid = *svid_ptr; classifyFilter.action_svlan.assignedSpri = *spri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_tagwith8100_sviddecision_sviddecision_spridecision_spridecision_svid_svid_spri_spri */ /* * rg set classify-filter action direction upstream action_stag unTag */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_unTag( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_STAG_BIT; classifyFilter.action_svlan.svlanTagIfDecision = ACL_SVLAN_TAGIF_UNTAG; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_untag */ /* * rg set classify-filter action direction upstream action_stag transparent */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_transparent( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_STAG_BIT; classifyFilter.action_svlan.svlanTagIfDecision = ACL_SVLAN_TAGIF_TRANSPARENT; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_stag_transparent */ /* * rg set classify-filter action direction upstream action_ctag tagging cvidDecision <UINT:cvidDecision> cpriDecision <UINT:cpriDecision> cvid <UINT:cvid> cpri <UINT:cpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_tagging_cvidDecision_cvidDecision_cpriDecision_cpriDecision_cvid_cvid_cpri_cpri( cparser_context_t *context, uint32_t *cvidDecision_ptr, uint32_t *cpriDecision_ptr, uint32_t *cvid_ptr, uint32_t *cpri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_CTAG_BIT; classifyFilter.action_cvlan.cvlanTagIfDecision = ACL_CVLAN_TAGIF_TAGGING; classifyFilter.action_cvlan.cvlanCvidDecision = *cvidDecision_ptr; classifyFilter.action_cvlan.cvlanCpriDecision = *cpriDecision_ptr; classifyFilter.action_cvlan.assignedCvid = *cvid_ptr; classifyFilter.action_cvlan.assignedCpri = *cpri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_tagging_cviddecision_cviddecision_cpridecision_cpridecision_cvid_cvid_cpri_cpri */ /* * rg set classify-filter action direction upstream action_ctag tagWithC2S */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_tagWithC2S( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_CTAG_BIT; classifyFilter.action_cvlan.cvlanTagIfDecision = ACL_CVLAN_TAGIF_TAGGING_WITH_C2S; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_tagwithc2s */ /* * rg set classify-filter action direction upstream action_ctag unTag */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_unTag( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_CTAG_BIT; classifyFilter.action_cvlan.cvlanTagIfDecision = ACL_CVLAN_TAGIF_UNTAG; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_untag */ /* * rg set classify-filter action direction upstream action_ctag transparent */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_transparent( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_CTAG_BIT; classifyFilter.action_cvlan.cvlanTagIfDecision = ACL_CVLAN_TAGIF_TRANSPARENT; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_ctag_transparent */ /* * rg set classify-filter action direction upstream action_cfpri <UINT:cfpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_cfpri_cfpri( cparser_context_t *context, uint32_t *cfpri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_CFPRI_BIT; classifyFilter.action_cfpri.assignedCfPri= *cfpri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_cfpri_cfpri */ /* * rg set classify-filter action direction upstream action_dscp <UINT:dscp> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_dscp_dscp( cparser_context_t *context, uint32_t *dscp_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_DSCP_BIT; classifyFilter.action_dscp.assignedDscp= *dscp_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_dscp_dscp */ /* * rg set classify-filter action direction upstream action_log <UINT:cntIdx> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_log_cntIdx( cparser_context_t *context, uint32_t *cntIdx_ptr) { #if defined(CONFIG_RTL9602C_SERIES) diag_util_printf("[NOT SUPPORT!] apolloFE does not have this action."); #else DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_UPSTREAM; classifyFilter.us_action_field |= CF_US_ACTION_LOG_BIT; classifyFilter.action_log.assignedCounterIdx= *cntIdx_ptr; #endif return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_upstream_action_log_cntidx */ /* * rg set classify-filter action direction downstream action_stag tagWithTPID svidDecision <UINT:svidDecision> spriDecision <UINT:spriDecision> svid <UINT:svid> spri <UINT:spri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_tagWithTPID_svidDecision_svidDecision_spriDecision_spriDecision_svid_svid_spri_spri( cparser_context_t *context, uint32_t *svidDecision_ptr, uint32_t *spriDecision_ptr, uint32_t *svid_ptr, uint32_t *spri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_STAG_BIT; classifyFilter.action_svlan.svlanTagIfDecision = ACL_SVLAN_TAGIF_TAGGING_WITH_VSTPID; classifyFilter.action_svlan.svlanSvidDecision = *svidDecision_ptr; classifyFilter.action_svlan.svlanSpriDecision = *spriDecision_ptr; classifyFilter.action_svlan.assignedSvid = *svid_ptr; classifyFilter.action_svlan.assignedSpri = *spri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_tagwithtpid_sviddecision_sviddecision_spridecision_spridecision_svid_svid_spri_spri */ /* * rg set classify-filter action direction downstream action_stag tagWith8100 svidDecision <UINT:svidDecision> spriDecision <UINT:spriDecision> svid <UINT:svid> spri <UINT:spri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_tagWith8100_svidDecision_svidDecision_spriDecision_spriDecision_svid_svid_spri_spri( cparser_context_t *context, uint32_t *svidDecision_ptr, uint32_t *spriDecision_ptr, uint32_t *svid_ptr, uint32_t *spri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_STAG_BIT; classifyFilter.action_svlan.svlanTagIfDecision = ACL_SVLAN_TAGIF_TAGGING_WITH_8100; classifyFilter.action_svlan.svlanSvidDecision = *svidDecision_ptr; classifyFilter.action_svlan.svlanSpriDecision = *spriDecision_ptr; classifyFilter.action_svlan.assignedSvid = *svid_ptr; classifyFilter.action_svlan.assignedSpri = *spri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_tagwith8100_sviddecision_sviddecision_spridecision_spridecision_svid_svid_spri_spri */ /* * rg set classify-filter action direction downstream action_stag tagWithSP2C */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_tagWithSP2C( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_STAG_BIT; classifyFilter.action_svlan.svlanTagIfDecision = ACL_SVLAN_TAGIF_TAGGING_WITH_SP2C; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_tagwithsp2c */ /* * rg set classify-filter action direction downstream action_stag unTag */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_unTag( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_STAG_BIT; classifyFilter.action_svlan.svlanTagIfDecision = ACL_SVLAN_TAGIF_UNTAG; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_untag */ /* * rg set classify-filter action direction downstream action_stag transparent */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_transparent( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_STAG_BIT; classifyFilter.action_svlan.svlanTagIfDecision = ACL_SVLAN_TAGIF_TRANSPARENT; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_stag_transparent */ /* * rg set classify-filter action direction downstream action_ctag tagging cvidDecision <UINT:cvidDecision> cpriDecision <UINT:cpriDecision> cvid <UINT:cvid> cpri <UINT:cpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_tagging_cvidDecision_cvidDecision_cpriDecision_cpriDecision_cvid_cvid_cpri_cpri( cparser_context_t *context, uint32_t *cvidDecision_ptr, uint32_t *cpriDecision_ptr, uint32_t *cvid_ptr, uint32_t *cpri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_CTAG_BIT; classifyFilter.action_cvlan.cvlanTagIfDecision = ACL_CVLAN_TAGIF_TAGGING; classifyFilter.action_cvlan.cvlanCvidDecision = *cvidDecision_ptr; classifyFilter.action_cvlan.cvlanCpriDecision = *cpriDecision_ptr; classifyFilter.action_cvlan.assignedCvid = *cvid_ptr; classifyFilter.action_cvlan.assignedCpri = *cpri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_tagging_cviddecision_cviddecision_cpridecision_cpridecision_cvid_cvid_cpri_cpri */ /* * rg set classify-filter action direction downstream action_ctag tagWithSP2C */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_tagWithSP2C( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_CTAG_BIT; classifyFilter.action_cvlan.cvlanTagIfDecision = ACL_CVLAN_TAGIF_TAGGING_WITH_SP2C; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_tagwithsp2c */ /* * rg set classify-filter action direction downstream action_ctag unTag */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_unTag( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_CTAG_BIT; classifyFilter.action_cvlan.cvlanTagIfDecision = ACL_CVLAN_TAGIF_UNTAG; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_untag */ /* * rg set classify-filter action direction downstream action_ctag transparent */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_transparent( cparser_context_t *context) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_CTAG_BIT; classifyFilter.action_cvlan.cvlanTagIfDecision = ACL_CVLAN_TAGIF_TRANSPARENT; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_ctag_transparent */ /* * rg set classify-filter action direction downstream action_cfpri <UINT:cfpri> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_cfpri_cfpri( cparser_context_t *context, uint32_t *cfpri_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_CFPRI_BIT; classifyFilter.action_cfpri.assignedCfPri= *cfpri_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_cfpri_cfpri */ /* * rg set classify-filter action direction downstream action_dscp <UINT:dscp> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_dscp_dscp( cparser_context_t *context, uint32_t *dscp_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_DSCP_BIT; classifyFilter.action_dscp.assignedDscp= *dscp_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_dscp_dscp */ /* * rg set classify-filter action direction downstream action_uni uniDecision <UINT:uniDecision> portmask <HEX:portmask> */ cparser_result_t cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_uni_uniDecision_uniDecision_portmask_portmask( cparser_context_t *context, uint32_t *uniDecision_ptr, uint32_t *portmask_ptr) { DIAG_UTIL_PARAM_CHK(); classifyFilter.direction = RTK_RG_CLASSIFY_DIRECTION_DOWNSTREAM; classifyFilter.ds_action_field |= CF_DS_ACTION_UNI_MASK_BIT; classifyFilter.action_uni.uniActionDecision = *uniDecision_ptr; classifyFilter.action_uni.assignedUniPortMask = *portmask_ptr; return CPARSER_OK; } /* end of cparser_cmd_rg_set_classify_filter_action_direction_downstream_action_uni_unidecision_unidecision_portmask_portmask */ #endif