Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iavf: redefine the magic number for FDIR GTP-U header fields

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>

authored by

Haiyue Wang and committed by
Tony Nguyen
1f70dfc5 f3b9da31

+12 -3
+12 -3
drivers/net/ethernet/intel/iavf/iavf_fdir.c
··· 54 54 #define IAVF_GTPU_HDR_TEID_OFFS0 4 55 55 #define IAVF_GTPU_HDR_TEID_OFFS1 6 56 56 #define IAVF_GTPU_HDR_N_PDU_AND_NEXT_EXTHDR_OFFS 10 57 + #define IAVF_GTPU_HDR_NEXT_EXTHDR_TYPE_MASK 0x00FF /* skip N_PDU */ 58 + /* PDU Session Container Extension Header (PSC) */ 59 + #define IAVF_GTPU_PSC_EXTHDR_TYPE 0x85 57 60 #define IAVF_GTPU_HDR_PSC_PDU_TYPE_AND_QFI_OFFS 13 58 - #define IAVF_GTPU_PSC_EXTHDR_TYPE 0x85 /* PDU Session Container Extension Header */ 61 + #define IAVF_GTPU_HDR_PSC_PDU_QFI_MASK 0x3F /* skip Type */ 62 + #define IAVF_GTPU_EH_QFI_IDX 1 63 + 59 64 if (fltr->flex_words[i].offset < adj_offs) 60 65 return -EINVAL; 61 66 ··· 76 71 } 77 72 break; 78 73 case IAVF_GTPU_HDR_N_PDU_AND_NEXT_EXTHDR_OFFS: 79 - if ((fltr->flex_words[i].word & 0xff) != IAVF_GTPU_PSC_EXTHDR_TYPE) 74 + if ((fltr->flex_words[i].word & 75 + IAVF_GTPU_HDR_NEXT_EXTHDR_TYPE_MASK) != 76 + IAVF_GTPU_PSC_EXTHDR_TYPE) 80 77 return -EOPNOTSUPP; 81 78 if (!ehdr) 82 79 ehdr = &proto_hdrs->proto_hdr[proto_hdrs->count++]; ··· 87 80 case IAVF_GTPU_HDR_PSC_PDU_TYPE_AND_QFI_OFFS: 88 81 if (!ehdr) 89 82 return -EINVAL; 90 - ehdr->buffer[1] = fltr->flex_words[i].word & 0x3F; 83 + ehdr->buffer[IAVF_GTPU_EH_QFI_IDX] = 84 + fltr->flex_words[i].word & 85 + IAVF_GTPU_HDR_PSC_PDU_QFI_MASK; 91 86 VIRTCHNL_ADD_PROTO_HDR_FIELD_BIT(ehdr, GTPU_EH, QFI); 92 87 break; 93 88 default: