iavf: redefine the magic number for FDIR GTP-U header fields
authorHaiyue Wang <haiyue.wang@intel.com>
Wed, 31 Mar 2021 02:08:37 +0000 (10:08 +0800)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Fri, 23 Apr 2021 16:34:19 +0000 (09:34 -0700)
The flex-byte for GTP-U protocol header fields uses the magic number,
which is hard to maintain and understand, define the interested fields
with meaningful macro name, based on the GTP-U protocol stack:

GTP-U header
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | 0x1 |1|0|1|0|0|     0xff      |           Length              |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                           TEID = 1654                         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |    Sequence Number = 0        |N-PDU Number=0 |NextExtHdr=0x85|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

GTP-U Extension Header (PDU Session Container)
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |  ExtHdrLen=2  |Type=0 | Spare |0|0|   QFI     | PPI |  Spare  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                    Padding                    |NextExtHdr=0x0 |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Signed-off-by: Haiyue Wang <haiyue.wang@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/iavf/iavf_fdir.c

index af872ea..6146203 100644 (file)
@@ -54,8 +54,13 @@ iavf_fill_fdir_gtpu_hdr(struct iavf_fdir_fltr *fltr,
 #define IAVF_GTPU_HDR_TEID_OFFS0       4
 #define IAVF_GTPU_HDR_TEID_OFFS1       6
 #define IAVF_GTPU_HDR_N_PDU_AND_NEXT_EXTHDR_OFFS       10
+#define IAVF_GTPU_HDR_NEXT_EXTHDR_TYPE_MASK            0x00FF /* skip N_PDU */
+/* PDU Session Container Extension Header (PSC) */
+#define IAVF_GTPU_PSC_EXTHDR_TYPE                      0x85
 #define IAVF_GTPU_HDR_PSC_PDU_TYPE_AND_QFI_OFFS                13
-#define IAVF_GTPU_PSC_EXTHDR_TYPE      0x85 /* PDU Session Container Extension Header */
+#define IAVF_GTPU_HDR_PSC_PDU_QFI_MASK                 0x3F /* skip Type */
+#define IAVF_GTPU_EH_QFI_IDX                           1
+
                if (fltr->flex_words[i].offset < adj_offs)
                        return -EINVAL;
 
@@ -71,7 +76,9 @@ iavf_fill_fdir_gtpu_hdr(struct iavf_fdir_fltr *fltr,
                        }
                        break;
                case IAVF_GTPU_HDR_N_PDU_AND_NEXT_EXTHDR_OFFS:
-                       if ((fltr->flex_words[i].word & 0xff) != IAVF_GTPU_PSC_EXTHDR_TYPE)
+                       if ((fltr->flex_words[i].word &
+                            IAVF_GTPU_HDR_NEXT_EXTHDR_TYPE_MASK) !=
+                                               IAVF_GTPU_PSC_EXTHDR_TYPE)
                                return -EOPNOTSUPP;
                        if (!ehdr)
                                ehdr = &proto_hdrs->proto_hdr[proto_hdrs->count++];
@@ -80,7 +87,9 @@ iavf_fill_fdir_gtpu_hdr(struct iavf_fdir_fltr *fltr,
                case IAVF_GTPU_HDR_PSC_PDU_TYPE_AND_QFI_OFFS:
                        if (!ehdr)
                                return -EINVAL;
-                       ehdr->buffer[1] = fltr->flex_words[i].word & 0x3F;
+                       ehdr->buffer[IAVF_GTPU_EH_QFI_IDX] =
+                                       fltr->flex_words[i].word &
+                                               IAVF_GTPU_HDR_PSC_PDU_QFI_MASK;
                        VIRTCHNL_ADD_PROTO_HDR_FIELD_BIT(ehdr, GTPU_EH, QFI);
                        break;
                default: