u16 sib_mask = 0;
u16 mask;
u16 off;
+ bool exist;
flds = params->prof->segs[seg].fields;
break;
case ICE_FLOW_FIELD_IDX_IPV6_TTL:
case ICE_FLOW_FIELD_IDX_IPV6_PROT:
- prot_id = seg == 0 ? ICE_PROT_IPV6_OF_OR_S : ICE_PROT_IPV6_IL;
+ prot_id = ICE_PROT_IPV6_NEXT_PROTO;
+ exist = ice_check_ddp_support_proto_id(hw, prot_id);
+ if (!exist)
+ prot_id = seg == 0 ?
+ ICE_PROT_IPV6_OF_OR_S :
+ ICE_PROT_IPV6_IL;
+ else
+ prot_id = seg == 0 ?
+ ICE_PROT_IPV6_NEXT_PROTO :
+ ICE_PROT_IPV6_IL;
/* TTL and PROT share the same extraction seq. entry.
* Each is considered a sibling to the other in terms of sharing
flds[fld].xtrct.disp = (u8)(ice_flds_info[fld].off % ese_bits);
flds[fld].xtrct.idx = params->es_cnt;
flds[fld].xtrct.mask = ice_flds_info[fld].mask;
+ if (prot_id == ICE_PROT_IPV6_NEXT_PROTO) {
+ flds[fld].xtrct.off = 0;
+ flds[fld].xtrct.disp = 0;
+ }
/* Adjust the next field-entry index after accommodating the number of
* entries this field consumes
#define FLAG_GTPU_MSK \
(FLAG_GTP_EH_PDU | FLAG_GTP_EH_PDU_LINK)
-#define FLAG_GTPU_DW \
- (FLAG_GTP_EH_PDU | FLAG_GTP_EH_PDU_LINK)
#define FLAG_GTPU_UP \
+ (FLAG_GTP_EH_PDU | FLAG_GTP_EH_PDU_LINK)
+#define FLAG_GTPU_DW \
(FLAG_GTP_EH_PDU)
/**
* ice_flow_set_hw_prof - Set HW flow profile based on the parsed profile info