]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ice: add virtchnl definitions and static data for GTP RSS
authorAleksandr Loktionov <aleksandr.loktionov@intel.com>
Thu, 30 Oct 2025 13:59:46 +0000 (14:59 +0100)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Thu, 6 Nov 2025 22:19:43 +0000 (14:19 -0800)
Add virtchnl protocol header and field definitions for advanced RSS
configuration including GTPC, GTPU, L2TPv2, ECPRI, PPP, GRE, and IP
fragment headers.

- Define new virtchnl protocol header types
- Add RSS field selectors for tunnel protocols
- Extend static mapping arrays for protocol field matching
- Add L2TPv2 session ID and length+session ID field support

This provides the foundational definitions needed for VF RSS
configuration of tunnel protocols.

Co-developed-by: Dan Nowlin <dan.nowlin@intel.com>
Signed-off-by: Dan Nowlin <dan.nowlin@intel.com>
Co-developed-by: Jie Wang <jie1x.wang@intel.com>
Signed-off-by: Jie Wang <jie1x.wang@intel.com>
Co-developed-by: Junfeng Guo <junfeng.guo@intel.com>
Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
Co-developed-by: Qi Zhang <qi.z.zhang@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Co-developed-by: Ting Xu <ting.xu@intel.com>
Signed-off-by: Ting Xu <ting.xu@intel.com>
Signed-off-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_vf_lib.h
drivers/net/ethernet/intel/ice/virt/rss.c
include/linux/avf/virtchnl.h

index b007089071767ed56e6e192a2e53ac5c08dd76e3..7a9c75d1d07cbdb7148064f72174a24b8d661ffa 100644 (file)
@@ -53,6 +53,46 @@ struct ice_mdd_vf_events {
        u16 last_printed;
 };
 
+enum ice_hash_ip_ctx_type {
+       ICE_HASH_IP_CTX_IP = 0,
+       ICE_HASH_IP_CTX_IP_ESP,
+       ICE_HASH_IP_CTX_IP_UDP_ESP,
+       ICE_HASH_IP_CTX_IP_AH,
+       ICE_HASH_IP_CTX_IP_PFCP,
+       ICE_HASH_IP_CTX_IP_UDP,
+       ICE_HASH_IP_CTX_IP_TCP,
+       ICE_HASH_IP_CTX_IP_SCTP,
+       ICE_HASH_IP_CTX_MAX,
+};
+
+struct ice_vf_hash_ip_ctx {
+       struct ice_rss_hash_cfg ctx[ICE_HASH_IP_CTX_MAX];
+};
+
+enum ice_hash_gtpu_ctx_type {
+       ICE_HASH_GTPU_CTX_EH_IP = 0,
+       ICE_HASH_GTPU_CTX_EH_IP_UDP,
+       ICE_HASH_GTPU_CTX_EH_IP_TCP,
+       ICE_HASH_GTPU_CTX_UP_IP,
+       ICE_HASH_GTPU_CTX_UP_IP_UDP,
+       ICE_HASH_GTPU_CTX_UP_IP_TCP,
+       ICE_HASH_GTPU_CTX_DW_IP,
+       ICE_HASH_GTPU_CTX_DW_IP_UDP,
+       ICE_HASH_GTPU_CTX_DW_IP_TCP,
+       ICE_HASH_GTPU_CTX_MAX,
+};
+
+struct ice_vf_hash_gtpu_ctx {
+       struct ice_rss_hash_cfg ctx[ICE_HASH_GTPU_CTX_MAX];
+};
+
+struct ice_vf_hash_ctx {
+       struct ice_vf_hash_ip_ctx v4;
+       struct ice_vf_hash_ip_ctx v6;
+       struct ice_vf_hash_gtpu_ctx ipv4;
+       struct ice_vf_hash_gtpu_ctx ipv6;
+};
+
 /* Structure to store fdir fv entry */
 struct ice_fdir_prof_info {
        struct ice_parser_profile prof;
@@ -66,6 +106,12 @@ struct ice_vf_qs_bw {
        u8 tc;
 };
 
+/* Structure to store RSS field vector entry */
+struct ice_rss_prof_info {
+       struct ice_parser_profile prof;
+       bool symm;
+};
+
 /* VF operations */
 struct ice_vf_ops {
        enum ice_disq_rst_src reset_type;
@@ -106,6 +152,8 @@ struct ice_vf {
        u16 ctrl_vsi_idx;
        struct ice_vf_fdir fdir;
        struct ice_fdir_prof_info fdir_prof_info[ICE_MAX_PTGS];
+       struct ice_rss_prof_info rss_prof_info[ICE_MAX_PTGS];
+       struct ice_vf_hash_ctx hash_ctx;
        u64 rss_hashcfg;                /* RSS hash configuration */
        struct ice_sw *vf_sw_id;        /* switch ID the VF VSIs connect to */
        struct virtchnl_version_info vf_ver;
index cbdbb32d512b227be7eca67cebef679437c7beb8..ee0d1ec32d566fefe7cf7b7b9ac77d28f1ddc4e0 100644 (file)
@@ -36,6 +36,11 @@ static const struct ice_vc_hdr_match_type ice_vc_hdr_list[] = {
        {VIRTCHNL_PROTO_HDR_ESP,        ICE_FLOW_SEG_HDR_ESP},
        {VIRTCHNL_PROTO_HDR_AH,         ICE_FLOW_SEG_HDR_AH},
        {VIRTCHNL_PROTO_HDR_PFCP,       ICE_FLOW_SEG_HDR_PFCP_SESSION},
+       {VIRTCHNL_PROTO_HDR_GTPC,       ICE_FLOW_SEG_HDR_GTPC},
+       {VIRTCHNL_PROTO_HDR_L2TPV2,     ICE_FLOW_SEG_HDR_L2TPV2},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,  ICE_FLOW_SEG_HDR_IPV_FRAG},
+       {VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG,       ICE_FLOW_SEG_HDR_IPV_FRAG},
+       {VIRTCHNL_PROTO_HDR_GRE,        ICE_FLOW_SEG_HDR_GRE},
 };
 
 struct ice_vc_hash_field_match_type {
@@ -87,8 +92,125 @@ ice_vc_hash_field_match_type ice_vc_hash_field_list[] = {
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
                ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
-       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+       {VIRTCHNL_PROTO_HDR_IPV4,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_FRAG_PKID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_ID)},
+       {VIRTCHNL_PROTO_HDR_IPV4,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST),
+               ICE_FLOW_HASH_IPV4},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_FRAG_PKID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_ID)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               ICE_FLOW_HASH_IPV4 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_PROT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM)},
        {VIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC),
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA)},
        {VIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST),
@@ -110,6 +232,35 @@ ice_vc_hash_field_match_type ice_vc_hash_field_list[] = {
                ICE_FLOW_HASH_IPV6 | BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
        {VIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG_PKID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_ID)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST),
+               ICE_FLOW_HASH_IPV6_PRE64},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT),
+               ICE_FLOW_HASH_IPV6_PRE64 |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
+       {VIRTCHNL_PROTO_HDR_IPV6,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_PROT),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
        {VIRTCHNL_PROTO_HDR_TCP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
@@ -120,6 +271,25 @@ ice_vc_hash_field_match_type ice_vc_hash_field_list[] = {
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT) |
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT),
                ICE_FLOW_HASH_TCP_PORT},
+       {VIRTCHNL_PROTO_HDR_TCP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_TCP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_TCP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_TCP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_CHKSUM),
+               ICE_FLOW_HASH_TCP_PORT |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_CHKSUM)},
        {VIRTCHNL_PROTO_HDR_UDP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
@@ -130,6 +300,25 @@ ice_vc_hash_field_match_type ice_vc_hash_field_list[] = {
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT) |
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT),
                ICE_FLOW_HASH_UDP_PORT},
+       {VIRTCHNL_PROTO_HDR_UDP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_UDP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_UDP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_UDP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_CHKSUM),
+               ICE_FLOW_HASH_UDP_PORT |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_CHKSUM)},
        {VIRTCHNL_PROTO_HDR_SCTP,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT),
                BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
@@ -140,6 +329,25 @@ ice_vc_hash_field_match_type ice_vc_hash_field_list[] = {
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT) |
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT),
                ICE_FLOW_HASH_SCTP_PORT},
+       {VIRTCHNL_PROTO_HDR_SCTP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_SCTP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_SCTP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_CHKSUM),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_CHKSUM)},
+       {VIRTCHNL_PROTO_HDR_SCTP,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT) |
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_CHKSUM),
+               ICE_FLOW_HASH_SCTP_PORT |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_CHKSUM)},
        {VIRTCHNL_PROTO_HDR_PPPOE,
                FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_PPPOE_SESS_ID),
                BIT_ULL(ICE_FLOW_FIELD_IDX_PPPOE_SESS_ID)},
@@ -155,6 +363,15 @@ ice_vc_hash_field_match_type ice_vc_hash_field_list[] = {
                BIT_ULL(ICE_FLOW_FIELD_IDX_AH_SPI)},
        {VIRTCHNL_PROTO_HDR_PFCP, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_PFCP_SEID),
                BIT_ULL(ICE_FLOW_FIELD_IDX_PFCP_SEID)},
+       {VIRTCHNL_PROTO_HDR_GTPC,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_GTPC_TEID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_GTPC_TEID)},
+       {VIRTCHNL_PROTO_HDR_L2TPV2,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_L2TPV2_SESS_ID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_L2TPV2_SESS_ID)},
+       {VIRTCHNL_PROTO_HDR_L2TPV2,
+               FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_L2TPV2_LEN_SESS_ID),
+               BIT_ULL(ICE_FLOW_FIELD_IDX_L2TPV2_LEN_SESS_ID)},
 };
 
 /**
index 5be1881abbb66a1c1298d99a78840a43d09671d8..11bdab5522fd5945275566a8de8f9f541cfcf1f4 100644 (file)
@@ -1253,6 +1253,17 @@ enum virtchnl_proto_hdr_type {
        VIRTCHNL_PROTO_HDR_ESP,
        VIRTCHNL_PROTO_HDR_AH,
        VIRTCHNL_PROTO_HDR_PFCP,
+       VIRTCHNL_PROTO_HDR_GTPC,
+       VIRTCHNL_PROTO_HDR_ECPRI,
+       VIRTCHNL_PROTO_HDR_L2TPV2,
+       VIRTCHNL_PROTO_HDR_PPP,
+       /* IPv4 and IPv6 Fragment header types are only associated to
+        * VIRTCHNL_PROTO_HDR_IPV4 and VIRTCHNL_PROTO_HDR_IPV6 respectively,
+        * cannot be used independently.
+        */
+       VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+       VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG,
+       VIRTCHNL_PROTO_HDR_GRE,
 };
 
 /* Protocol header field within a protocol header. */
@@ -1275,6 +1286,7 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_IPV4_DSCP,
        VIRTCHNL_PROTO_HDR_IPV4_TTL,
        VIRTCHNL_PROTO_HDR_IPV4_PROT,
+       VIRTCHNL_PROTO_HDR_IPV4_CHKSUM,
        /* IPV6 */
        VIRTCHNL_PROTO_HDR_IPV6_SRC =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV6),
@@ -1282,18 +1294,34 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_IPV6_TC,
        VIRTCHNL_PROTO_HDR_IPV6_HOP_LIMIT,
        VIRTCHNL_PROTO_HDR_IPV6_PROT,
+       /* IPV6 Prefix */
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_DST,
        /* TCP */
        VIRTCHNL_PROTO_HDR_TCP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_TCP),
        VIRTCHNL_PROTO_HDR_TCP_DST_PORT,
+       VIRTCHNL_PROTO_HDR_TCP_CHKSUM,
        /* UDP */
        VIRTCHNL_PROTO_HDR_UDP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_UDP),
        VIRTCHNL_PROTO_HDR_UDP_DST_PORT,
+       VIRTCHNL_PROTO_HDR_UDP_CHKSUM,
        /* SCTP */
        VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_SCTP),
        VIRTCHNL_PROTO_HDR_SCTP_DST_PORT,
+       VIRTCHNL_PROTO_HDR_SCTP_CHKSUM,
        /* GTPU_IP */
        VIRTCHNL_PROTO_HDR_GTPU_IP_TEID =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_IP),
@@ -1317,6 +1345,28 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_PFCP_S_FIELD =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_PFCP),
        VIRTCHNL_PROTO_HDR_PFCP_SEID,
+       /* GTPC */
+       VIRTCHNL_PROTO_HDR_GTPC_TEID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPC),
+       /* ECPRI */
+       VIRTCHNL_PROTO_HDR_ECPRI_MSG_TYPE =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_ECPRI),
+       VIRTCHNL_PROTO_HDR_ECPRI_PC_RTC_ID,
+       /* IPv4 Dummy Fragment */
+       VIRTCHNL_PROTO_HDR_IPV4_FRAG_PKID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV4_FRAG),
+       /* IPv6 Extension Fragment */
+       VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG_PKID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG),
+       /* GTPU_DWN/UP */
+       VIRTCHNL_PROTO_HDR_GTPU_DWN_QFI =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_DWN),
+       VIRTCHNL_PROTO_HDR_GTPU_UP_QFI =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_UP),
+       /* L2TPv2 */
+       VIRTCHNL_PROTO_HDR_L2TPV2_SESS_ID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_L2TPV2),
+       VIRTCHNL_PROTO_HDR_L2TPV2_LEN_SESS_ID,
 };
 
 struct virtchnl_proto_hdr {