1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2018-2021 Beijing WangXun Technology Co., Ltd.
9 * PTID(Packet Type Identifier, 8bits)
10 * - Bit 3:0 detailed types.
11 * - Bit 5:4 basic types.
12 * - Bit 7:6 tunnel types.
14 #define NGBE_PTID_NULL 0
15 #define NGBE_PTID_MAX 256
16 #define NGBE_PTID_MASK 0xFF
17 #define NGBE_PTID_MASK_TUNNEL 0x7F
20 #define NGBE_PTID_TUN_IPV6 0x40
21 #define NGBE_PTID_TUN_EI 0x00 /* IP */
22 #define NGBE_PTID_TUN_EIG 0x10 /* IP+GRE */
23 #define NGBE_PTID_TUN_EIGM 0x20 /* IP+GRE+MAC */
24 #define NGBE_PTID_TUN_EIGMV 0x30 /* IP+GRE+MAC+VLAN */
27 #define NGBE_PTID_PKT_TUN (0x80)
28 #define NGBE_PTID_PKT_MAC (0x10)
29 #define NGBE_PTID_PKT_IP (0x20)
32 #define NGBE_PTID_TYP_MAC (0x01)
33 #define NGBE_PTID_TYP_TS (0x02) /* time sync */
34 #define NGBE_PTID_TYP_FIP (0x03)
35 #define NGBE_PTID_TYP_LLDP (0x04)
36 #define NGBE_PTID_TYP_CNM (0x05)
37 #define NGBE_PTID_TYP_EAPOL (0x06)
38 #define NGBE_PTID_TYP_ARP (0x07)
39 #define NGBE_PTID_TYP_ETF (0x08)
42 #define NGBE_PTID_PKT_IPV6 (0x08)
43 #define NGBE_PTID_TYP_IPFRAG (0x01)
44 #define NGBE_PTID_TYP_IPDATA (0x02)
45 #define NGBE_PTID_TYP_UDP (0x03)
46 #define NGBE_PTID_TYP_TCP (0x04)
47 #define NGBE_PTID_TYP_SCTP (0x05)
49 /* packet type non-ip values */
51 NGBE_PTID_L2_ABORTED = (NGBE_PTID_PKT_MAC),
52 NGBE_PTID_L2_MAC = (NGBE_PTID_PKT_MAC | NGBE_PTID_TYP_MAC),
53 NGBE_PTID_L2_TMST = (NGBE_PTID_PKT_MAC | NGBE_PTID_TYP_TS),
54 NGBE_PTID_L2_FIP = (NGBE_PTID_PKT_MAC | NGBE_PTID_TYP_FIP),
55 NGBE_PTID_L2_LLDP = (NGBE_PTID_PKT_MAC | NGBE_PTID_TYP_LLDP),
56 NGBE_PTID_L2_CNM = (NGBE_PTID_PKT_MAC | NGBE_PTID_TYP_CNM),
57 NGBE_PTID_L2_EAPOL = (NGBE_PTID_PKT_MAC | NGBE_PTID_TYP_EAPOL),
58 NGBE_PTID_L2_ARP = (NGBE_PTID_PKT_MAC | NGBE_PTID_TYP_ARP),
60 NGBE_PTID_L2_IPV4_FRAG = (NGBE_PTID_PKT_IP | NGBE_PTID_TYP_IPFRAG),
61 NGBE_PTID_L2_IPV4 = (NGBE_PTID_PKT_IP | NGBE_PTID_TYP_IPDATA),
62 NGBE_PTID_L2_IPV4_UDP = (NGBE_PTID_PKT_IP | NGBE_PTID_TYP_UDP),
63 NGBE_PTID_L2_IPV4_TCP = (NGBE_PTID_PKT_IP | NGBE_PTID_TYP_TCP),
64 NGBE_PTID_L2_IPV4_SCTP = (NGBE_PTID_PKT_IP | NGBE_PTID_TYP_SCTP),
65 NGBE_PTID_L2_IPV6_FRAG = (NGBE_PTID_PKT_IP | NGBE_PTID_PKT_IPV6 |
66 NGBE_PTID_TYP_IPFRAG),
67 NGBE_PTID_L2_IPV6 = (NGBE_PTID_PKT_IP | NGBE_PTID_PKT_IPV6 |
68 NGBE_PTID_TYP_IPDATA),
69 NGBE_PTID_L2_IPV6_UDP = (NGBE_PTID_PKT_IP | NGBE_PTID_PKT_IPV6 |
71 NGBE_PTID_L2_IPV6_TCP = (NGBE_PTID_PKT_IP | NGBE_PTID_PKT_IPV6 |
73 NGBE_PTID_L2_IPV6_SCTP = (NGBE_PTID_PKT_IP | NGBE_PTID_PKT_IPV6 |
76 NGBE_PTID_L2_TUN4_MAC = (NGBE_PTID_PKT_TUN |
78 NGBE_PTID_L2_TUN6_MAC = (NGBE_PTID_PKT_TUN |
79 NGBE_PTID_TUN_IPV6 | NGBE_PTID_TUN_EIGM),
84 * PTYPE(Packet Type, 32bits)
85 * - Bit 3:0 is for L2 types.
86 * - Bit 7:4 is for L3 or outer L3 (for tunneling case) types.
87 * - Bit 11:8 is for L4 or outer L4 (for tunneling case) types.
88 * - Bit 15:12 is for tunnel types.
89 * - Bit 19:16 is for inner L2 types.
90 * - Bit 23:20 is for inner L3 types.
91 * - Bit 27:24 is for inner L4 types.
92 * - Bit 31:28 is reserved.
93 * please ref to rte_mbuf.h: rte_mbuf.packet_type
95 struct rte_ngbe_ptype {
96 u32 l2:4; /* outer mac */
97 u32 l3:4; /* outer internet protocol */
98 u32 l4:4; /* outer transport protocol */
99 u32 tun:4; /* tunnel protocol */
101 u32 el2:4; /* inner mac */
102 u32 el3:4; /* inner internet protocol */
103 u32 el4:4; /* inner transport protocol */
108 #define RTE_PTYPE_L2_ETHER_FIP RTE_PTYPE_L2_ETHER
109 #define RTE_PTYPE_L2_ETHER_CNM RTE_PTYPE_L2_ETHER
110 #define RTE_PTYPE_L2_ETHER_EAPOL RTE_PTYPE_L2_ETHER
111 #define RTE_PTYPE_L2_ETHER_FILTER RTE_PTYPE_L2_ETHER
113 u32 *ngbe_get_supported_ptypes(void);
114 u32 ngbe_decode_ptype(u8 ptid);
115 u8 ngbe_encode_ptype(u32 ptype);
118 * PT(Packet Type, 32bits)
119 * - Bit 3:0 is for L2 types.
120 * - Bit 7:4 is for L3 or outer L3 (for tunneling case) types.
121 * - Bit 11:8 is for L4 or outer L4 (for tunneling case) types.
122 * - Bit 15:12 is for tunnel types.
123 * - Bit 19:16 is for inner L2 types.
124 * - Bit 23:20 is for inner L3 types.
125 * - Bit 27:24 is for inner L4 types.
126 * - Bit 31:28 is reserved.
127 * PT is a more accurate version of PTYPE
129 #define NGBE_PT_ETHER 0x00
130 #define NGBE_PT_IPV4 0x01
131 #define NGBE_PT_IPV4_TCP 0x11
132 #define NGBE_PT_IPV4_UDP 0x21
133 #define NGBE_PT_IPV4_SCTP 0x41
134 #define NGBE_PT_IPV4_EXT 0x03
135 #define NGBE_PT_IPV4_EXT_TCP 0x13
136 #define NGBE_PT_IPV4_EXT_UDP 0x23
137 #define NGBE_PT_IPV4_EXT_SCTP 0x43
138 #define NGBE_PT_IPV6 0x04
139 #define NGBE_PT_IPV6_TCP 0x14
140 #define NGBE_PT_IPV6_UDP 0x24
141 #define NGBE_PT_IPV6_SCTP 0x44
142 #define NGBE_PT_IPV6_EXT 0x0C
143 #define NGBE_PT_IPV6_EXT_TCP 0x1C
144 #define NGBE_PT_IPV6_EXT_UDP 0x2C
145 #define NGBE_PT_IPV6_EXT_SCTP 0x4C
146 #define NGBE_PT_IPV4_IPV6 0x05
147 #define NGBE_PT_IPV4_IPV6_TCP 0x15
148 #define NGBE_PT_IPV4_IPV6_UDP 0x25
149 #define NGBE_PT_IPV4_IPV6_SCTP 0x45
150 #define NGBE_PT_IPV4_EXT_IPV6 0x07
151 #define NGBE_PT_IPV4_EXT_IPV6_TCP 0x17
152 #define NGBE_PT_IPV4_EXT_IPV6_UDP 0x27
153 #define NGBE_PT_IPV4_EXT_IPV6_SCTP 0x47
154 #define NGBE_PT_IPV4_IPV6_EXT 0x0D
155 #define NGBE_PT_IPV4_IPV6_EXT_TCP 0x1D
156 #define NGBE_PT_IPV4_IPV6_EXT_UDP 0x2D
157 #define NGBE_PT_IPV4_IPV6_EXT_SCTP 0x4D
158 #define NGBE_PT_IPV4_EXT_IPV6_EXT 0x0F
159 #define NGBE_PT_IPV4_EXT_IPV6_EXT_TCP 0x1F
160 #define NGBE_PT_IPV4_EXT_IPV6_EXT_UDP 0x2F
161 #define NGBE_PT_IPV4_EXT_IPV6_EXT_SCTP 0x4F
163 #define NGBE_PT_MAX 256
165 /* ether type filter list: one static filter per filter consumer. This is
166 * to avoid filter collisions later. Add new filters
168 * EAPOL 802.1x (0x888e): Filter 0
169 * FCoE (0x8906): Filter 2
170 * 1588 (0x88f7): Filter 3
171 * FIP (0x8914): Filter 4
172 * LLDP (0x88CC): Filter 5
173 * LACP (0x8809): Filter 6
174 * FC (0x8808): Filter 7
176 #define NGBE_ETF_ID_EAPOL 0
177 #define NGBE_ETF_ID_FCOE 2
178 #define NGBE_ETF_ID_1588 3
179 #define NGBE_ETF_ID_FIP 4
180 #define NGBE_ETF_ID_LLDP 5
181 #define NGBE_ETF_ID_LACP 6
182 #define NGBE_ETF_ID_FC 7
183 #define NGBE_ETF_ID_MAX 8
185 #define NGBE_PTID_ETF_MIN 0x18
186 #define NGBE_PTID_ETF_MAX 0x1F
187 static inline int ngbe_etflt_id(u8 ptid)
189 if (ptid >= NGBE_PTID_ETF_MIN && ptid <= NGBE_PTID_ETF_MAX)
190 return ptid - NGBE_PTID_ETF_MIN;
195 #endif /* _NGBE_PTYPE_H_ */