Hi Jianbo, Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on net-next/master] url: https://github.com/0day-ci/linux/commits/Jianbo-Liu/net-flow_dissector-Save-vlan-ethertype-from-headers/20180630-180158 reproduce: # apt-get install sparse make ARCH=x86_64 allmodconfig make C=1 CF=-D__CHECK_ENDIAN__ sparse warnings: (new ones prefixed by >>) net/sched/cls_flower.c:544:15: sparse: cast to restricted __be32 net/sched/cls_flower.c:544:15: sparse: cast to restricted __be32 net/sched/cls_flower.c:544:15: sparse: cast to restricted __be32 net/sched/cls_flower.c:544:15: sparse: cast to restricted __be32 net/sched/cls_flower.c:544:15: sparse: cast to restricted __be32 net/sched/cls_flower.c:544:15: sparse: cast to restricted __be32 net/sched/cls_flower.c:545:16: sparse: cast to restricted __be32 net/sched/cls_flower.c:545:16: sparse: cast to restricted __be32 net/sched/cls_flower.c:545:16: sparse: cast to restricted __be32 net/sched/cls_flower.c:545:16: sparse: cast to restricted __be32 net/sched/cls_flower.c:545:16: sparse: cast to restricted __be32 net/sched/cls_flower.c:545:16: sparse: cast to restricted __be32 include/linux/slab.h:631:13: sparse: undefined identifier '__builtin_mul_overflow' include/linux/slab.h:631:13: sparse: not a function <noident> >> net/sched/cls_flower.c:1317:70: sparse: incorrect type in argument 3 >> (different base types) @@ expected unsigned short [unsigned] [usertype] >> value @@ got short [unsigned] [usertype] value @@ net/sched/cls_flower.c:1317:70: expected unsigned short [unsigned] [usertype] value net/sched/cls_flower.c:1317:70: got restricted __be16 [usertype] n_proto include/linux/slab.h:631:13: sparse: call with no type! vim +1317 net/sched/cls_flower.c 1264 1265 static int fl_dump(struct net *net, struct tcf_proto *tp, void *fh, 1266 struct sk_buff *skb, struct tcmsg *t) 1267 { 1268 struct cls_fl_filter *f = fh; 1269 struct nlattr *nest; 1270 struct fl_flow_key *key, *mask; 1271 1272 if (!f) 1273 return skb->len; 1274 1275 t->tcm_handle = f->handle; 1276 1277 nest = nla_nest_start(skb, TCA_OPTIONS); 1278 if (!nest) 1279 goto nla_put_failure; 1280 1281 if (f->res.classid && 1282 nla_put_u32(skb, TCA_FLOWER_CLASSID, f->res.classid)) 1283 goto nla_put_failure; 1284 1285 key = &f->key; 1286 mask = &f->mask->key; 1287 1288 if (mask->indev_ifindex) { 1289 struct net_device *dev; 1290 1291 dev = __dev_get_by_index(net, key->indev_ifindex); 1292 if (dev && nla_put_string(skb, TCA_FLOWER_INDEV, dev->name)) 1293 goto nla_put_failure; 1294 } 1295 1296 if (!tc_skip_hw(f->flags)) 1297 fl_hw_update_stats(tp, f); 1298 1299 if (fl_dump_key_val(skb, key->eth.dst, TCA_FLOWER_KEY_ETH_DST, 1300 mask->eth.dst, TCA_FLOWER_KEY_ETH_DST_MASK, 1301 sizeof(key->eth.dst)) || 1302 fl_dump_key_val(skb, key->eth.src, TCA_FLOWER_KEY_ETH_SRC, 1303 mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK, 1304 sizeof(key->eth.src)) || 1305 fl_dump_key_val(skb, &key->basic.n_proto, TCA_FLOWER_KEY_ETH_TYPE, 1306 &mask->basic.n_proto, TCA_FLOWER_UNSPEC, 1307 sizeof(key->basic.n_proto))) 1308 goto nla_put_failure; 1309 1310 if (fl_dump_key_mpls(skb, &key->mpls, &mask->mpls)) 1311 goto nla_put_failure; 1312 1313 if (fl_dump_key_vlan(skb, &key->vlan, &mask->vlan)) 1314 goto nla_put_failure; 1315 1316 if (mask->vlan.vlan_tpid && > 1317 nla_put_u16(skb, TCA_FLOWER_KEY_VLAN_ETH_TYPE, > key->basic.n_proto)) 1318 goto nla_put_failure; 1319 1320 if ((key->basic.n_proto == htons(ETH_P_IP) || 1321 key->basic.n_proto == htons(ETH_P_IPV6)) && 1322 (fl_dump_key_val(skb, &key->basic.ip_proto, TCA_FLOWER_KEY_IP_PROTO, 1323 &mask->basic.ip_proto, TCA_FLOWER_UNSPEC, 1324 sizeof(key->basic.ip_proto)) || 1325 fl_dump_key_ip(skb, &key->ip, &mask->ip))) 1326 goto nla_put_failure; 1327 1328 if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS && 1329 (fl_dump_key_val(skb, &key->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC, 1330 &mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK, 1331 sizeof(key->ipv4.src)) || 1332 fl_dump_key_val(skb, &key->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST, 1333 &mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK, 1334 sizeof(key->ipv4.dst)))) 1335 goto nla_put_failure; 1336 else if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS && 1337 (fl_dump_key_val(skb, &key->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC, 1338 &mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK, 1339 sizeof(key->ipv6.src)) || 1340 fl_dump_key_val(skb, &key->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST, 1341 &mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK, 1342 sizeof(key->ipv6.dst)))) 1343 goto nla_put_failure; 1344 1345 if (key->basic.ip_proto == IPPROTO_TCP && 1346 (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_TCP_SRC, 1347 &mask->tp.src, TCA_FLOWER_KEY_TCP_SRC_MASK, 1348 sizeof(key->tp.src)) || 1349 fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_TCP_DST, 1350 &mask->tp.dst, TCA_FLOWER_KEY_TCP_DST_MASK, 1351 sizeof(key->tp.dst)) || 1352 fl_dump_key_val(skb, &key->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS, 1353 &mask->tcp.flags, TCA_FLOWER_KEY_TCP_FLAGS_MASK, 1354 sizeof(key->tcp.flags)))) 1355 goto nla_put_failure; 1356 else if (key->basic.ip_proto == IPPROTO_UDP && 1357 (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_UDP_SRC, 1358 &mask->tp.src, TCA_FLOWER_KEY_UDP_SRC_MASK, 1359 sizeof(key->tp.src)) || 1360 fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_UDP_DST, 1361 &mask->tp.dst, TCA_FLOWER_KEY_UDP_DST_MASK, 1362 sizeof(key->tp.dst)))) 1363 goto nla_put_failure; 1364 else if (key->basic.ip_proto == IPPROTO_SCTP && 1365 (fl_dump_key_val(skb, &key->tp.src, TCA_FLOWER_KEY_SCTP_SRC, 1366 &mask->tp.src, TCA_FLOWER_KEY_SCTP_SRC_MASK, 1367 sizeof(key->tp.src)) || 1368 fl_dump_key_val(skb, &key->tp.dst, TCA_FLOWER_KEY_SCTP_DST, 1369 &mask->tp.dst, TCA_FLOWER_KEY_SCTP_DST_MASK, 1370 sizeof(key->tp.dst)))) 1371 goto nla_put_failure; 1372 else if (key->basic.n_proto == htons(ETH_P_IP) && 1373 key->basic.ip_proto == IPPROTO_ICMP && 1374 (fl_dump_key_val(skb, &key->icmp.type, 1375 TCA_FLOWER_KEY_ICMPV4_TYPE, &mask->icmp.type, 1376 TCA_FLOWER_KEY_ICMPV4_TYPE_MASK, 1377 sizeof(key->icmp.type)) || 1378 fl_dump_key_val(skb, &key->icmp.code, 1379 TCA_FLOWER_KEY_ICMPV4_CODE, &mask->icmp.code, 1380 TCA_FLOWER_KEY_ICMPV4_CODE_MASK, 1381 sizeof(key->icmp.code)))) 1382 goto nla_put_failure; 1383 else if (key->basic.n_proto == htons(ETH_P_IPV6) && 1384 key->basic.ip_proto == IPPROTO_ICMPV6 && 1385 (fl_dump_key_val(skb, &key->icmp.type, 1386 TCA_FLOWER_KEY_ICMPV6_TYPE, &mask->icmp.type, 1387 TCA_FLOWER_KEY_ICMPV6_TYPE_MASK, 1388 sizeof(key->icmp.type)) || 1389 fl_dump_key_val(skb, &key->icmp.code, 1390 TCA_FLOWER_KEY_ICMPV6_CODE, &mask->icmp.code, 1391 TCA_FLOWER_KEY_ICMPV6_CODE_MASK, 1392 sizeof(key->icmp.code)))) 1393 goto nla_put_failure; 1394 else if ((key->basic.n_proto == htons(ETH_P_ARP) || 1395 key->basic.n_proto == htons(ETH_P_RARP)) && 1396 (fl_dump_key_val(skb, &key->arp.sip, 1397 TCA_FLOWER_KEY_ARP_SIP, &mask->arp.sip, 1398 TCA_FLOWER_KEY_ARP_SIP_MASK, 1399 sizeof(key->arp.sip)) || 1400 fl_dump_key_val(skb, &key->arp.tip, 1401 TCA_FLOWER_KEY_ARP_TIP, &mask->arp.tip, 1402 TCA_FLOWER_KEY_ARP_TIP_MASK, 1403 sizeof(key->arp.tip)) || 1404 fl_dump_key_val(skb, &key->arp.op, 1405 TCA_FLOWER_KEY_ARP_OP, &mask->arp.op, 1406 TCA_FLOWER_KEY_ARP_OP_MASK, 1407 sizeof(key->arp.op)) || 1408 fl_dump_key_val(skb, key->arp.sha, TCA_FLOWER_KEY_ARP_SHA, 1409 mask->arp.sha, TCA_FLOWER_KEY_ARP_SHA_MASK, 1410 sizeof(key->arp.sha)) || 1411 fl_dump_key_val(skb, key->arp.tha, TCA_FLOWER_KEY_ARP_THA, 1412 mask->arp.tha, TCA_FLOWER_KEY_ARP_THA_MASK, 1413 sizeof(key->arp.tha)))) 1414 goto nla_put_failure; 1415 1416 if (key->enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS && 1417 (fl_dump_key_val(skb, &key->enc_ipv4.src, 1418 TCA_FLOWER_KEY_ENC_IPV4_SRC, &mask->enc_ipv4.src, 1419 TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK, 1420 sizeof(key->enc_ipv4.src)) || 1421 fl_dump_key_val(skb, &key->enc_ipv4.dst, 1422 TCA_FLOWER_KEY_ENC_IPV4_DST, &mask->enc_ipv4.dst, 1423 TCA_FLOWER_KEY_ENC_IPV4_DST_MASK, 1424 sizeof(key->enc_ipv4.dst)))) 1425 goto nla_put_failure; 1426 else if (key->enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS && 1427 (fl_dump_key_val(skb, &key->enc_ipv6.src, 1428 TCA_FLOWER_KEY_ENC_IPV6_SRC, &mask->enc_ipv6.src, 1429 TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK, 1430 sizeof(key->enc_ipv6.src)) || 1431 fl_dump_key_val(skb, &key->enc_ipv6.dst, 1432 TCA_FLOWER_KEY_ENC_IPV6_DST, 1433 &mask->enc_ipv6.dst, 1434 TCA_FLOWER_KEY_ENC_IPV6_DST_MASK, 1435 sizeof(key->enc_ipv6.dst)))) 1436 goto nla_put_failure; 1437 1438 if (fl_dump_key_val(skb, &key->enc_key_id, TCA_FLOWER_KEY_ENC_KEY_ID, 1439 &mask->enc_key_id, TCA_FLOWER_UNSPEC, 1440 sizeof(key->enc_key_id)) || 1441 fl_dump_key_val(skb, &key->enc_tp.src, 1442 TCA_FLOWER_KEY_ENC_UDP_SRC_PORT, 1443 &mask->enc_tp.src, 1444 TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK, 1445 sizeof(key->enc_tp.src)) || 1446 fl_dump_key_val(skb, &key->enc_tp.dst, 1447 TCA_FLOWER_KEY_ENC_UDP_DST_PORT, 1448 &mask->enc_tp.dst, 1449 TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK, 1450 sizeof(key->enc_tp.dst))) 1451 goto nla_put_failure; 1452 1453 if (fl_dump_key_flags(skb, key->control.flags, mask->control.flags)) 1454 goto nla_put_failure; 1455 1456 if (f->flags && nla_put_u32(skb, TCA_FLOWER_FLAGS, f->flags)) 1457 goto nla_put_failure; 1458 1459 if (tcf_exts_dump(skb, &f->exts)) 1460 goto nla_put_failure; 1461 1462 nla_nest_end(skb, nest); 1463 1464 if (tcf_exts_dump_stats(skb, &f->exts) < 0) 1465 goto nla_put_failure; 1466 1467 return skb->len; 1468 1469 nla_put_failure: 1470 nla_nest_cancel(skb, nest); 1471 return -1; 1472 } 1473 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation