41
41
ICE_PKT_INNER_UDP = BIT (7 ),
42
42
ICE_PKT_GTP_NOPAY = BIT (8 ),
43
43
ICE_PKT_KMALLOC = BIT (9 ),
44
+ ICE_PKT_PPPOE = BIT (10 ),
44
45
};
45
46
46
47
struct ice_dummy_pkt_offsets {
@@ -1109,6 +1110,154 @@ ICE_DECLARE_PKT_TEMPLATE(ipv6_gtp) = {
1109
1110
0x00 , 0x00 ,
1110
1111
};
1111
1112
1113
+ ICE_DECLARE_PKT_OFFSETS (pppoe_ipv4_tcp ) = {
1114
+ { ICE_MAC_OFOS , 0 },
1115
+ { ICE_ETYPE_OL , 12 },
1116
+ { ICE_PPPOE , 14 },
1117
+ { ICE_IPV4_OFOS , 22 },
1118
+ { ICE_TCP_IL , 42 },
1119
+ { ICE_PROTOCOL_LAST , 0 },
1120
+ };
1121
+
1122
+ ICE_DECLARE_PKT_TEMPLATE (pppoe_ipv4_tcp ) = {
1123
+ 0x00 , 0x00 , 0x00 , 0x00 , /* ICE_MAC_OFOS 0 */
1124
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1125
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1126
+
1127
+ 0x88 , 0x64 , /* ICE_ETYPE_OL 12 */
1128
+
1129
+ 0x11 , 0x00 , 0x00 , 0x00 , /* ICE_PPPOE 14 */
1130
+ 0x00 , 0x16 ,
1131
+
1132
+ 0x00 , 0x21 , /* PPP Link Layer 20 */
1133
+
1134
+ 0x45 , 0x00 , 0x00 , 0x28 , /* ICE_IPV4_OFOS 22 */
1135
+ 0x00 , 0x01 , 0x00 , 0x00 ,
1136
+ 0x00 , 0x06 , 0x00 , 0x00 ,
1137
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1138
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1139
+
1140
+ 0x00 , 0x00 , 0x00 , 0x00 , /* ICE_TCP_IL 42 */
1141
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1142
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1143
+ 0x50 , 0x00 , 0x00 , 0x00 ,
1144
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1145
+
1146
+ 0x00 , 0x00 , /* 2 bytes for 4 bytes alignment */
1147
+ };
1148
+
1149
+ ICE_DECLARE_PKT_OFFSETS (pppoe_ipv4_udp ) = {
1150
+ { ICE_MAC_OFOS , 0 },
1151
+ { ICE_ETYPE_OL , 12 },
1152
+ { ICE_PPPOE , 14 },
1153
+ { ICE_IPV4_OFOS , 22 },
1154
+ { ICE_UDP_ILOS , 42 },
1155
+ { ICE_PROTOCOL_LAST , 0 },
1156
+ };
1157
+
1158
+ ICE_DECLARE_PKT_TEMPLATE (pppoe_ipv4_udp ) = {
1159
+ 0x00 , 0x00 , 0x00 , 0x00 , /* ICE_MAC_OFOS 0 */
1160
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1161
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1162
+
1163
+ 0x88 , 0x64 , /* ICE_ETYPE_OL 12 */
1164
+
1165
+ 0x11 , 0x00 , 0x00 , 0x00 , /* ICE_PPPOE 14 */
1166
+ 0x00 , 0x16 ,
1167
+
1168
+ 0x00 , 0x21 , /* PPP Link Layer 20 */
1169
+
1170
+ 0x45 , 0x00 , 0x00 , 0x1c , /* ICE_IPV4_OFOS 22 */
1171
+ 0x00 , 0x01 , 0x00 , 0x00 ,
1172
+ 0x00 , 0x11 , 0x00 , 0x00 ,
1173
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1174
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1175
+
1176
+ 0x00 , 0x00 , 0x00 , 0x00 , /* ICE_UDP_ILOS 42 */
1177
+ 0x00 , 0x08 , 0x00 , 0x00 ,
1178
+
1179
+ 0x00 , 0x00 , /* 2 bytes for 4 bytes alignment */
1180
+ };
1181
+
1182
+ ICE_DECLARE_PKT_OFFSETS (pppoe_ipv6_tcp ) = {
1183
+ { ICE_MAC_OFOS , 0 },
1184
+ { ICE_ETYPE_OL , 12 },
1185
+ { ICE_PPPOE , 14 },
1186
+ { ICE_IPV6_OFOS , 22 },
1187
+ { ICE_TCP_IL , 62 },
1188
+ { ICE_PROTOCOL_LAST , 0 },
1189
+ };
1190
+
1191
+ ICE_DECLARE_PKT_TEMPLATE (pppoe_ipv6_tcp ) = {
1192
+ 0x00 , 0x00 , 0x00 , 0x00 , /* ICE_MAC_OFOS 0 */
1193
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1194
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1195
+
1196
+ 0x88 , 0x64 , /* ICE_ETYPE_OL 12 */
1197
+
1198
+ 0x11 , 0x00 , 0x00 , 0x00 , /* ICE_PPPOE 14 */
1199
+ 0x00 , 0x2a ,
1200
+
1201
+ 0x00 , 0x57 , /* PPP Link Layer 20 */
1202
+
1203
+ 0x60 , 0x00 , 0x00 , 0x00 , /* ICE_IPV6_OFOS 22 */
1204
+ 0x00 , 0x14 , 0x06 , 0x00 , /* Next header is TCP */
1205
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1206
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1207
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1208
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1209
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1210
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1211
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1212
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1213
+
1214
+ 0x00 , 0x00 , 0x00 , 0x00 , /* ICE_TCP_IL 62 */
1215
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1216
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1217
+ 0x50 , 0x00 , 0x00 , 0x00 ,
1218
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1219
+
1220
+ 0x00 , 0x00 , /* 2 bytes for 4 bytes alignment */
1221
+ };
1222
+
1223
+ ICE_DECLARE_PKT_OFFSETS (pppoe_ipv6_udp ) = {
1224
+ { ICE_MAC_OFOS , 0 },
1225
+ { ICE_ETYPE_OL , 12 },
1226
+ { ICE_PPPOE , 14 },
1227
+ { ICE_IPV6_OFOS , 22 },
1228
+ { ICE_UDP_ILOS , 62 },
1229
+ { ICE_PROTOCOL_LAST , 0 },
1230
+ };
1231
+
1232
+ ICE_DECLARE_PKT_TEMPLATE (pppoe_ipv6_udp ) = {
1233
+ 0x00 , 0x00 , 0x00 , 0x00 , /* ICE_MAC_OFOS 0 */
1234
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1235
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1236
+
1237
+ 0x88 , 0x64 , /* ICE_ETYPE_OL 12 */
1238
+
1239
+ 0x11 , 0x00 , 0x00 , 0x00 , /* ICE_PPPOE 14 */
1240
+ 0x00 , 0x2a ,
1241
+
1242
+ 0x00 , 0x57 , /* PPP Link Layer 20 */
1243
+
1244
+ 0x60 , 0x00 , 0x00 , 0x00 , /* ICE_IPV6_OFOS 22 */
1245
+ 0x00 , 0x08 , 0x11 , 0x00 , /* Next header UDP*/
1246
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1247
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1248
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1249
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1250
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1251
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1252
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1253
+ 0x00 , 0x00 , 0x00 , 0x00 ,
1254
+
1255
+ 0x00 , 0x00 , 0x00 , 0x00 , /* ICE_UDP_ILOS 62 */
1256
+ 0x00 , 0x08 , 0x00 , 0x00 ,
1257
+
1258
+ 0x00 , 0x00 , /* 2 bytes for 4 bytes alignment */
1259
+ };
1260
+
1112
1261
static const struct ice_dummy_pkt_profile ice_dummy_pkt_profiles [] = {
1113
1262
ICE_PKT_PROFILE (ipv6_gtp , ICE_PKT_TUN_GTPU | ICE_PKT_OUTER_IPV6 |
1114
1263
ICE_PKT_GTP_NOPAY ),
@@ -1135,6 +1284,11 @@ static const struct ice_dummy_pkt_profile ice_dummy_pkt_profiles[] = {
1135
1284
ICE_PKT_PROFILE (ipv4_gtpu_ipv4_tcp , ICE_PKT_TUN_GTPU ),
1136
1285
ICE_PKT_PROFILE (ipv6_gtp , ICE_PKT_TUN_GTPC | ICE_PKT_OUTER_IPV6 ),
1137
1286
ICE_PKT_PROFILE (ipv4_gtpu_ipv4 , ICE_PKT_TUN_GTPC ),
1287
+ ICE_PKT_PROFILE (pppoe_ipv6_udp , ICE_PKT_PPPOE | ICE_PKT_OUTER_IPV6 |
1288
+ ICE_PKT_INNER_UDP ),
1289
+ ICE_PKT_PROFILE (pppoe_ipv6_tcp , ICE_PKT_PPPOE | ICE_PKT_OUTER_IPV6 ),
1290
+ ICE_PKT_PROFILE (pppoe_ipv4_udp , ICE_PKT_PPPOE | ICE_PKT_INNER_UDP ),
1291
+ ICE_PKT_PROFILE (pppoe_ipv4_tcp , ICE_PKT_PPPOE ),
1138
1292
ICE_PKT_PROFILE (gre_ipv6_tcp , ICE_PKT_TUN_NVGRE | ICE_PKT_INNER_IPV6 |
1139
1293
ICE_PKT_INNER_TCP ),
1140
1294
ICE_PKT_PROFILE (gre_tcp , ICE_PKT_TUN_NVGRE | ICE_PKT_INNER_TCP ),
@@ -4480,6 +4634,7 @@ static const struct ice_prot_ext_tbl_entry ice_prot_ext[ICE_PROTOCOL_LAST] = {
4480
4634
{ ICE_NVGRE , { 0 , 2 , 4 , 6 } },
4481
4635
{ ICE_GTP , { 8 , 10 , 12 , 14 , 16 , 18 , 20 , 22 } },
4482
4636
{ ICE_GTP_NO_PAY , { 8 , 10 , 12 , 14 } },
4637
+ { ICE_PPPOE , { 0 , 2 , 4 , 6 } },
4483
4638
{ ICE_VLAN_EX , { 2 , 0 } },
4484
4639
{ ICE_VLAN_IN , { 2 , 0 } },
4485
4640
};
@@ -4502,6 +4657,7 @@ static struct ice_protocol_entry ice_prot_id_tbl[ICE_PROTOCOL_LAST] = {
4502
4657
{ ICE_NVGRE , ICE_GRE_OF_HW },
4503
4658
{ ICE_GTP , ICE_UDP_OF_HW },
4504
4659
{ ICE_GTP_NO_PAY , ICE_UDP_ILOS_HW },
4660
+ { ICE_PPPOE , ICE_PPPOE_HW },
4505
4661
{ ICE_VLAN_EX , ICE_VLAN_OF_HW },
4506
4662
{ ICE_VLAN_IN , ICE_VLAN_OL_HW },
4507
4663
};
@@ -5580,6 +5736,12 @@ ice_find_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
5580
5736
match |= ICE_PKT_INNER_IPV6 ;
5581
5737
else if (lkups [i ].type == ICE_GTP_NO_PAY )
5582
5738
match |= ICE_PKT_GTP_NOPAY ;
5739
+ else if (lkups [i ].type == ICE_PPPOE ) {
5740
+ match |= ICE_PKT_PPPOE ;
5741
+ if (lkups [i ].h_u .pppoe_hdr .ppp_prot_id ==
5742
+ htons (PPP_IPV6 ))
5743
+ match |= ICE_PKT_OUTER_IPV6 ;
5744
+ }
5583
5745
}
5584
5746
5585
5747
while (ret -> match && (match & ret -> match ) != ret -> match )
@@ -5677,6 +5839,9 @@ ice_fill_adv_dummy_packet(struct ice_adv_lkup_elem *lkups, u16 lkups_cnt,
5677
5839
case ICE_GTP :
5678
5840
len = sizeof (struct ice_udp_gtp_hdr );
5679
5841
break ;
5842
+ case ICE_PPPOE :
5843
+ len = sizeof (struct ice_pppoe_hdr );
5844
+ break ;
5680
5845
default :
5681
5846
return - EINVAL ;
5682
5847
}
0 commit comments