static int acl_field_add(int argc, char *argv[]){ int rv; rtk_filter_cfg_t pFilter_cfg; rtk_filter_field_t pFilter_field; rv = rtk_filter_igrAcl_field_add(&pFilter_cfg, &pFilter_field); if(rv){ printf("acl field add error!"); return 1; } return 0; }
cs_status epon_request_onu_ptp_jitter_test ( CS_IN cs_callback_context_t context, CS_IN cs_int32 device_id, CS_IN cs_int32 llidport, CS_IN cs_uint8 enable ) { cs_status rt = CS_E_OK; #ifdef HAVE_MPORTS rtk_filter_cfg_t cfg; rtk_filter_action_t act; cs_uint32 ruleNum; rtk_filter_field_t field; cs_aal_cl_rule_cfg_t ce_entry; cs_aal_cl_fib_data_t fibdata; memset(&cfg, 0, sizeof(rtk_filter_cfg_t)); memset(&act, 0, sizeof(rtk_filter_action_t)); memset(&field, 0, sizeof(rtk_filter_field_t)); memset(&ce_entry, 0, sizeof(cs_aal_cl_rule_cfg_t)); memset(&fibdata, 0, sizeof(cs_aal_cl_fib_data_t)); if(g_ptp_jitter_test_enable == enable) return CS_E_OK; if(enable == 1) { // PTP message: downstream traffic, redirect to port 0, with highest priority field.fieldType = FILTER_FIELD_ETHERTYPE; field.filter_pattern_union.etherType.dataType = FILTER_FIELD_DATA_MASK; field.filter_pattern_union.etherType.value = __PTP_ETHTYPE; field.filter_pattern_union.etherType.mask = 0xFFFF; rt = rtk_filter_igrAcl_field_add(&cfg, &field); if(rt){ cs_printf("rtk_filter_igrAcl_field_add failed, rt %d\r\n", rt); return rt; } cfg.activeport.dataType = FILTER_FIELD_DATA_MASK; cfg.activeport.value = 0x40; cfg.activeport.mask = 0xFF; cfg.invert = FALSE; act.actEnable[FILTER_ENACT_REDIRECT] = TRUE; act.filterRedirectPortmask = 0x01; act.actEnable[FILTER_ENACT_PRIORITY] = TRUE; act.filterPriority = 7; rt = rtk_filter_igrAcl_cfg_add(__PKT_PTP_DN_RULE, &cfg, &act, &ruleNum); if(rt){ cs_printf("rtk_filter_igrAcl_cfg_add downstream rule failed, rt %d\r\n", rt); return rt; } // PTP message: upstream traffic, highest priority memset(&cfg, 0, sizeof(rtk_filter_cfg_t)); memset(&act, 0, sizeof(rtk_filter_action_t)); field.fieldType = FILTER_FIELD_ETHERTYPE; field.filter_pattern_union.etherType.dataType = FILTER_FIELD_DATA_MASK; field.filter_pattern_union.etherType.value = __PTP_ETHTYPE; field.filter_pattern_union.etherType.mask = 0xFFFF; rt = rtk_filter_igrAcl_field_add(&cfg, &field); if(rt){ cs_printf("rtk_filter_igrAcl_field_add failed, rt %d\r\n", rt); return rt; } cfg.activeport.dataType = FILTER_FIELD_DATA_MASK; cfg.activeport.value = 0x01; cfg.activeport.mask = 0xFF; cfg.invert = FALSE; act.actEnable[FILTER_ENACT_PRIORITY] = TRUE; act.filterPriority = 7; rt = rtk_filter_igrAcl_cfg_add(__PKT_PTP_UP_RULE, &cfg, &act, &ruleNum); if(rt){ cs_printf("rtk_filter_igrAcl_cfg_add upstream rule failed, rt %d\r\n", rt); return rt; } // PTP message, highest priority for both upstream and downstream traffic ce_entry.valid = 1; ce_entry.key_type = AAL_CL_MAC_ETYPE_KEY; ce_entry.cl_key.mac_etype_key[0].mask.s.ev2pt = 1; ce_entry.cl_key.mac_etype_key[0].ev2pt = 0x88f7; fibdata.valid = 1; fibdata.permit = 1; fibdata.mask.u32 = 0; fibdata.mask.s.cos = 1; fibdata.cos_sel = AAL_CL_COS_SEL_CL; fibdata.cos = 7; rt = aal_cl_rule_set(AAL_PORT_ID_GE, DOMAIN_ID_MAC_ETYPE, 0, &ce_entry) ; if(rt){ cs_printf("aal_cl_rule_set upstream rule failed, rt %d\r\n", rt); return rt; } rt = aal_cl_fib_set(AAL_PORT_ID_GE, DOMAIN_ID_MAC_ETYPE, 0, &fibdata) ; if(rt){ cs_printf("aal_cl_fib_set upstream fib failed, rt %d\r\n", rt); return rt; } rt = aal_cl_rule_set(AAL_PORT_ID_PON, DOMAIN_ID_MAC_ETYPE, 0, &ce_entry) ; if(rt){ cs_printf("aal_cl_rule_set downstream rule failed, rt %d\r\n", rt); return rt; } rt = aal_cl_fib_set(AAL_PORT_ID_PON, DOMAIN_ID_MAC_ETYPE, 0, &fibdata) ; if(rt){ cs_printf("aal_cl_fib_set downstream fib failed, rt %d\r\n", rt); return rt; } } else { rt = rtk_filter_igrAcl_cfg_del(__PKT_PTP_UP_RULE); if(rt){ cs_printf("rtk_filter_igrAcl_cfg_del upstream rule failed, rt %d\r\n", rt); return rt; } rt = rtk_filter_igrAcl_cfg_del(__PKT_PTP_DN_RULE); if(rt){ cs_printf("rtk_filter_igrAcl_cfg_del downstream rule failed, rt %d\r\n", rt); return rt; } memset(&ce_entry, 0, sizeof(cs_aal_cl_rule_cfg_t)); ce_entry.key_type = AAL_CL_MAC_ETYPE_KEY; rt = aal_cl_rule_set(AAL_PORT_ID_GE, DOMAIN_ID_MAC_ETYPE, 0, &ce_entry) ; if(rt){ cs_printf("aal_cl_rule_set upstream rule failed, rt %d\r\n", rt); return rt; } memset(&fibdata, 0, sizeof(cs_aal_cl_fib_data_t)); rt = aal_cl_fib_set(AAL_PORT_ID_GE, DOMAIN_ID_MAC_ETYPE, 0, &fibdata) ; if(rt){ cs_printf("aal_cl_fib_set upstream fib failed, rt %d\r\n", rt); return rt; } memset(&ce_entry, 0, sizeof(cs_aal_cl_rule_cfg_t)); ce_entry.key_type = AAL_CL_MAC_ETYPE_KEY; rt = aal_cl_rule_set(AAL_PORT_ID_PON, DOMAIN_ID_MAC_ETYPE, 0, &ce_entry) ; if(rt){ cs_printf("aal_cl_rule_set downstream rule failed, rt %d\r\n", rt); return rt; } memset(&fibdata, 0, sizeof(cs_aal_cl_fib_data_t)); rt = aal_cl_fib_set(AAL_PORT_ID_PON, DOMAIN_ID_MAC_ETYPE, 0, &fibdata) ; if(rt){ cs_printf("aal_cl_fib_set downstream fib failed, rt %d\r\n", rt); return rt; } } #endif if(rt == CS_E_OK) g_ptp_jitter_test_enable = enable; return rt; }