#define REFINE_PROTO_FLD(op, fld) \
VIRTCHNL_##op##_PROTO_HDR_FIELD(hdr, VIRTCHNL_PROTO_HDR_##fld)
+#define REPALCE_PROTO_FLD(fld_1, fld_2) \
+do { \
+ REFINE_PROTO_FLD(DEL, fld_1); \
+ REFINE_PROTO_FLD(ADD, fld_2); \
+} while (0)
/* refine proto hdrs base on l2, l3, l4 rss type */
static void
} else {
hdr->field_selector = 0;
}
+ if (rss_type & RTE_ETH_RSS_L3_PRE64) {
+ if (REFINE_PROTO_FLD(TEST, IPV6_SRC))
+ REPALCE_PROTO_FLD(IPV6_SRC,
+ IPV6_PREFIX64_SRC);
+ if (REFINE_PROTO_FLD(TEST, IPV6_DST))
+ REPALCE_PROTO_FLD(IPV6_DST,
+ IPV6_PREFIX64_DST);
+ }
break;
case VIRTCHNL_PROTO_HDR_UDP:
if (rss_type &
return true;
}
+ /* current ipv6 prefix only supports prefix 64 bits*/
+#define _invalid_prefix_ (RTE_ETH_RSS_L3_PRE32 | \
+ RTE_ETH_RSS_L3_PRE40 | \
+ RTE_ETH_RSS_L3_PRE48 | \
+ RTE_ETH_RSS_L3_PRE56 | \
+ RTE_ETH_RSS_L3_PRE96)
+
+ if (rss_type & _invalid_prefix_)
+ return true;
+
/* check not allowed RSS type */
#define _RSS_ATTR_ (ETH_RSS_L3_SRC_ONLY | \
ETH_RSS_L3_DST_ONLY | \