Beispiel #1
0
static int acl_cfg_add(int argc, char *argv[]){
	int rv;
	rtk_filter_id_t filter_id = 0;
	rtk_filter_cfg_t pFilter_cfg;
	rtk_filter_action_t pFilter_action;
	rtk_filter_number_t ruleNum;
	
	rv = rtk_filter_igrAcl_cfg_add(filter_id, &pFilter_cfg, &pFilter_action, &ruleNum);
	if(rv){	
		printf("acl field add error!");	
		return 1;
	}
	return 0;
}
Beispiel #2
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;

}