|
|
|
@ -22,6 +22,7 @@ enum dr_action_valid_state {
|
|
|
|
|
DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
DR_ACTION_STATE_NON_TERM,
|
|
|
|
|
DR_ACTION_STATE_TERM,
|
|
|
|
|
DR_ACTION_STATE_ASO,
|
|
|
|
|
DR_ACTION_STATE_MAX,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -42,6 +43,7 @@ static const char * const action_type_to_str[] = {
|
|
|
|
|
[DR_ACTION_TYP_SAMPLER] = "DR_ACTION_TYP_SAMPLER",
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = "DR_ACTION_TYP_INSERT_HDR",
|
|
|
|
|
[DR_ACTION_TYP_REMOVE_HDR] = "DR_ACTION_TYP_REMOVE_HDR",
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = "DR_ACTION_TYP_ASO_FLOW_METER",
|
|
|
|
|
[DR_ACTION_TYP_MAX] = "DR_ACTION_UNKNOWN",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -71,6 +73,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_DECAP] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -85,6 +88,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_ENCAP] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -93,6 +97,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_TAG] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_MODIFY_HDR] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -105,6 +110,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_POP_VLAN] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -118,6 +124,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_PUSH_VLAN] = {
|
|
|
|
|
[DR_ACTION_TYP_QP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -128,6 +135,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_NON_TERM] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -145,6 +153,13 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_ASO] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_QP] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_TERM] = {
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -163,18 +178,21 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_DECAP] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_DECAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_ENCAP] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_MODIFY_HDR] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -185,6 +203,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_POP_VLAN] = {
|
|
|
|
|
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -196,6 +215,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_PUSH_VLAN] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -206,6 +226,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_NON_TERM] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -219,6 +240,16 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_ASO] = {
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ASO,
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_TERM] = {
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -240,6 +271,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_DECAP] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -253,6 +285,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_ENCAP] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -261,6 +294,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_MODIFY_HDR] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -272,6 +306,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_POP_VLAN] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -284,6 +319,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_PUSH_VLAN] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -296,6 +332,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_NON_TERM] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -312,6 +349,13 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_ASO] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_TERM] = {
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -331,6 +375,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_DECAP] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -338,6 +383,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_DECAP,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_ENCAP] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -345,6 +391,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_SAMPLER] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_MODIFY_HDR] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -356,6 +403,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_POP_VLAN] = {
|
|
|
|
|
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -368,6 +416,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_PUSH_VLAN] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -379,6 +428,7 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_NON_TERM] = {
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -393,6 +443,17 @@ next_action_state[DR_ACTION_DOMAIN_MAX][DR_ACTION_STATE_MAX][DR_ACTION_TYP_MAX]
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_POP_VLAN] = DR_ACTION_STATE_POP_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_ASO] = {
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L2] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_L2_TO_TNL_L3] = DR_ACTION_STATE_ENCAP,
|
|
|
|
|
[DR_ACTION_TYP_MODIFY_HDR] = DR_ACTION_STATE_MODIFY_HDR,
|
|
|
|
|
[DR_ACTION_TYP_PUSH_VLAN] = DR_ACTION_STATE_PUSH_VLAN,
|
|
|
|
|
[DR_ACTION_TYP_DROP] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_FT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_VPORT] = DR_ACTION_STATE_TERM,
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_ASO,
|
|
|
|
|
},
|
|
|
|
|
[DR_ACTION_STATE_TERM] = {
|
|
|
|
|
[DR_ACTION_TYP_CTR] = DR_ACTION_STATE_TERM,
|
|
|
|
@ -738,6 +799,12 @@ int mlx5dr_actions_build_ste_arr(struct mlx5dr_matcher *matcher,
|
|
|
|
|
attr.reformat.param_0 = action->reformat->param_0;
|
|
|
|
|
attr.reformat.param_1 = action->reformat->param_1;
|
|
|
|
|
break;
|
|
|
|
|
case DR_ACTION_TYP_ASO_FLOW_METER:
|
|
|
|
|
attr.aso_flow_meter.obj_id = action->aso->obj_id;
|
|
|
|
|
attr.aso_flow_meter.offset = action->aso->offset;
|
|
|
|
|
attr.aso_flow_meter.dest_reg_id = action->aso->dest_reg_id;
|
|
|
|
|
attr.aso_flow_meter.init_color = action->aso->init_color;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
mlx5dr_err(dmn, "Unsupported action type %d\n", action_type);
|
|
|
|
|
return -EINVAL;
|
|
|
|
@ -798,6 +865,7 @@ static unsigned int action_size[DR_ACTION_TYP_MAX] = {
|
|
|
|
|
[DR_ACTION_TYP_INSERT_HDR] = sizeof(struct mlx5dr_action_reformat),
|
|
|
|
|
[DR_ACTION_TYP_REMOVE_HDR] = sizeof(struct mlx5dr_action_reformat),
|
|
|
|
|
[DR_ACTION_TYP_SAMPLER] = sizeof(struct mlx5dr_action_sampler),
|
|
|
|
|
[DR_ACTION_TYP_ASO_FLOW_METER] = sizeof(struct mlx5dr_action_aso_flow_meter),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct mlx5dr_action *
|
|
|
|
@ -1830,6 +1898,34 @@ mlx5dr_action_create_dest_vport(struct mlx5dr_domain *dmn,
|
|
|
|
|
return action;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct mlx5dr_action *
|
|
|
|
|
mlx5dr_action_create_aso(struct mlx5dr_domain *dmn, u32 obj_id,
|
|
|
|
|
u8 dest_reg_id, u8 aso_type,
|
|
|
|
|
u8 init_color, u8 meter_id)
|
|
|
|
|
{
|
|
|
|
|
struct mlx5dr_action *action;
|
|
|
|
|
|
|
|
|
|
if (aso_type != MLX5_EXE_ASO_FLOW_METER)
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
if (init_color > MLX5_FLOW_METER_COLOR_UNDEFINED)
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
action = dr_action_create_generic(DR_ACTION_TYP_ASO_FLOW_METER);
|
|
|
|
|
if (!action)
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
action->aso->obj_id = obj_id;
|
|
|
|
|
action->aso->offset = meter_id;
|
|
|
|
|
action->aso->dest_reg_id = dest_reg_id;
|
|
|
|
|
action->aso->init_color = init_color;
|
|
|
|
|
action->aso->dmn = dmn;
|
|
|
|
|
|
|
|
|
|
refcount_inc(&dmn->refcount);
|
|
|
|
|
|
|
|
|
|
return action;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int mlx5dr_action_destroy(struct mlx5dr_action *action)
|
|
|
|
|
{
|
|
|
|
|
if (WARN_ON_ONCE(refcount_read(&action->refcount) > 1))
|
|
|
|
@ -1881,6 +1977,9 @@ int mlx5dr_action_destroy(struct mlx5dr_action *action)
|
|
|
|
|
case DR_ACTION_TYP_SAMPLER:
|
|
|
|
|
refcount_dec(&action->sampler->dmn->refcount);
|
|
|
|
|
break;
|
|
|
|
|
case DR_ACTION_TYP_ASO_FLOW_METER:
|
|
|
|
|
refcount_dec(&action->aso->dmn->refcount);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|