From: kernel test robot <lkp@intel.com>
To: Alce Lafranque <alce@lafranque.net>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
David Ahern <dsahern@kernel.org>,
Ido Schimmel <idosch@nvidia.com>
Cc: oe-kbuild-all@lists.linux.dev, netdev@vger.kernel.org,
Alce Lafranque <alce@lafranque.net>,
Vincent Bernat <vincent@bernat.ch>
Subject: Re: [PATCH net-next v2] vxlan: add support for flowlabel inherit
Date: Sat, 7 Oct 2023 23:44:53 +0800 [thread overview]
Message-ID: <202310072308.H5ORfHTn-lkp@intel.com> (raw)
In-Reply-To: <20231007142624.739192-1-alce@lafranque.net>
Hi Alce,
kernel test robot noticed the following build warnings:
[auto build test WARNING on net-next/main]
url: https://github.com/intel-lab-lkp/linux/commits/Alce-Lafranque/vxlan-add-support-for-flowlabel-inherit/20231007-222907
base: net-next/main
patch link: https://lore.kernel.org/r/20231007142624.739192-1-alce%40lafranque.net
patch subject: [PATCH net-next v2] vxlan: add support for flowlabel inherit
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231007/202310072308.H5ORfHTn-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231007/202310072308.H5ORfHTn-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202310072308.H5ORfHTn-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/net/vxlan/vxlan_core.c: In function 'vxlan_xmit_one':
>> drivers/net/vxlan/vxlan_core.c:2478:17: warning: enumeration value '__VXLAN_LABEL_END' not handled in switch [-Wswitch]
2478 | switch (vxlan->cfg.label_behavior) {
| ^~~~~~
vim +/__VXLAN_LABEL_END +2478 drivers/net/vxlan/vxlan_core.c
2440
2441 info = skb_tunnel_info(skb);
2442
2443 if (rdst) {
2444 dst = &rdst->remote_ip;
2445 if (vxlan_addr_any(dst)) {
2446 if (did_rsc) {
2447 /* short-circuited back to local bridge */
2448 vxlan_encap_bypass(skb, vxlan, vxlan,
2449 default_vni, true);
2450 return;
2451 }
2452 goto drop;
2453 }
2454
2455 dst_port = rdst->remote_port ? rdst->remote_port : vxlan->cfg.dst_port;
2456 vni = (rdst->remote_vni) ? : default_vni;
2457 ifindex = rdst->remote_ifindex;
2458 local_ip = vxlan->cfg.saddr;
2459 dst_cache = &rdst->dst_cache;
2460 md->gbp = skb->mark;
2461 if (flags & VXLAN_F_TTL_INHERIT) {
2462 ttl = ip_tunnel_get_ttl(old_iph, skb);
2463 } else {
2464 ttl = vxlan->cfg.ttl;
2465 if (!ttl && vxlan_addr_multicast(dst))
2466 ttl = 1;
2467 }
2468
2469 tos = vxlan->cfg.tos;
2470 if (tos == 1)
2471 tos = ip_tunnel_get_dsfield(old_iph, skb);
2472
2473 if (dst->sa.sa_family == AF_INET)
2474 udp_sum = !(flags & VXLAN_F_UDP_ZERO_CSUM_TX);
2475 else
2476 udp_sum = !(flags & VXLAN_F_UDP_ZERO_CSUM6_TX);
2477 #if IS_ENABLED(CONFIG_IPV6)
> 2478 switch (vxlan->cfg.label_behavior) {
2479 case VXLAN_LABEL_FIXED:
2480 label = vxlan->cfg.label;
2481 break;
2482 case VXLAN_LABEL_INHERIT:
2483 label = ip_tunnel_get_flowlabel(old_iph, skb);
2484 break;
2485 }
2486 #endif
2487 } else {
2488 if (!info) {
2489 WARN_ONCE(1, "%s: Missing encapsulation instructions\n",
2490 dev->name);
2491 goto drop;
2492 }
2493 remote_ip.sa.sa_family = ip_tunnel_info_af(info);
2494 if (remote_ip.sa.sa_family == AF_INET) {
2495 remote_ip.sin.sin_addr.s_addr = info->key.u.ipv4.dst;
2496 local_ip.sin.sin_addr.s_addr = info->key.u.ipv4.src;
2497 } else {
2498 remote_ip.sin6.sin6_addr = info->key.u.ipv6.dst;
2499 local_ip.sin6.sin6_addr = info->key.u.ipv6.src;
2500 }
2501 dst = &remote_ip;
2502 dst_port = info->key.tp_dst ? : vxlan->cfg.dst_port;
2503 flow_flags = info->key.flow_flags;
2504 vni = tunnel_id_to_key32(info->key.tun_id);
2505 ifindex = 0;
2506 dst_cache = &info->dst_cache;
2507 if (info->key.tun_flags & TUNNEL_VXLAN_OPT) {
2508 if (info->options_len < sizeof(*md))
2509 goto drop;
2510 md = ip_tunnel_info_opts(info);
2511 }
2512 ttl = info->key.ttl;
2513 tos = info->key.tos;
2514 #if IS_ENABLED(CONFIG_IPV6)
2515 label = info->key.label;
2516 #endif
2517 udp_sum = !!(info->key.tun_flags & TUNNEL_CSUM);
2518 }
2519 src_port = udp_flow_src_port(dev_net(dev), skb, vxlan->cfg.port_min,
2520 vxlan->cfg.port_max, true);
2521
2522 rcu_read_lock();
2523 if (dst->sa.sa_family == AF_INET) {
2524 struct vxlan_sock *sock4 = rcu_dereference(vxlan->vn4_sock);
2525 struct rtable *rt;
2526 __be16 df = 0;
2527
2528 if (!ifindex)
2529 ifindex = sock4->sock->sk->sk_bound_dev_if;
2530
2531 rt = vxlan_get_route(vxlan, dev, sock4, skb, ifindex, tos,
2532 dst->sin.sin_addr.s_addr,
2533 &local_ip.sin.sin_addr.s_addr,
2534 dst_port, src_port, flow_flags,
2535 dst_cache, info);
2536 if (IS_ERR(rt)) {
2537 err = PTR_ERR(rt);
2538 goto tx_error;
2539 }
2540
2541 if (!info) {
2542 /* Bypass encapsulation if the destination is local */
2543 err = encap_bypass_if_local(skb, dev, vxlan, dst,
2544 dst_port, ifindex, vni,
2545 &rt->dst, rt->rt_flags);
2546 if (err)
2547 goto out_unlock;
2548
2549 if (vxlan->cfg.df == VXLAN_DF_SET) {
2550 df = htons(IP_DF);
2551 } else if (vxlan->cfg.df == VXLAN_DF_INHERIT) {
2552 struct ethhdr *eth = eth_hdr(skb);
2553
2554 if (ntohs(eth->h_proto) == ETH_P_IPV6 ||
2555 (ntohs(eth->h_proto) == ETH_P_IP &&
2556 old_iph->frag_off & htons(IP_DF)))
2557 df = htons(IP_DF);
2558 }
2559 } else if (info->key.tun_flags & TUNNEL_DONT_FRAGMENT) {
2560 df = htons(IP_DF);
2561 }
2562
2563 ndst = &rt->dst;
2564 err = skb_tunnel_check_pmtu(skb, ndst, vxlan_headroom(flags & VXLAN_F_GPE),
2565 netif_is_any_bridge_port(dev));
2566 if (err < 0) {
2567 goto tx_error;
2568 } else if (err) {
2569 if (info) {
2570 struct ip_tunnel_info *unclone;
2571 struct in_addr src, dst;
2572
2573 unclone = skb_tunnel_info_unclone(skb);
2574 if (unlikely(!unclone))
2575 goto tx_error;
2576
2577 src = remote_ip.sin.sin_addr;
2578 dst = local_ip.sin.sin_addr;
2579 unclone->key.u.ipv4.src = src.s_addr;
2580 unclone->key.u.ipv4.dst = dst.s_addr;
2581 }
2582 vxlan_encap_bypass(skb, vxlan, vxlan, vni, false);
2583 dst_release(ndst);
2584 goto out_unlock;
2585 }
2586
2587 tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
2588 ttl = ttl ? : ip4_dst_hoplimit(&rt->dst);
2589 err = vxlan_build_skb(skb, ndst, sizeof(struct iphdr),
2590 vni, md, flags, udp_sum);
2591 if (err < 0)
2592 goto tx_error;
2593
2594 udp_tunnel_xmit_skb(rt, sock4->sock->sk, skb, local_ip.sin.sin_addr.s_addr,
2595 dst->sin.sin_addr.s_addr, tos, ttl, df,
2596 src_port, dst_port, xnet, !udp_sum);
2597 #if IS_ENABLED(CONFIG_IPV6)
2598 } else {
2599 struct vxlan_sock *sock6 = rcu_dereference(vxlan->vn6_sock);
2600
2601 if (!ifindex)
2602 ifindex = sock6->sock->sk->sk_bound_dev_if;
2603
2604 ndst = vxlan6_get_route(vxlan, dev, sock6, skb, ifindex, tos,
2605 label, &dst->sin6.sin6_addr,
2606 &local_ip.sin6.sin6_addr,
2607 dst_port, src_port,
2608 dst_cache, info);
2609 if (IS_ERR(ndst)) {
2610 err = PTR_ERR(ndst);
2611 ndst = NULL;
2612 goto tx_error;
2613 }
2614
2615 if (!info) {
2616 u32 rt6i_flags = ((struct rt6_info *)ndst)->rt6i_flags;
2617
2618 err = encap_bypass_if_local(skb, dev, vxlan, dst,
2619 dst_port, ifindex, vni,
2620 ndst, rt6i_flags);
2621 if (err)
2622 goto out_unlock;
2623 }
2624
2625 err = skb_tunnel_check_pmtu(skb, ndst,
2626 vxlan_headroom((flags & VXLAN_F_GPE) | VXLAN_F_IPV6),
2627 netif_is_any_bridge_port(dev));
2628 if (err < 0) {
2629 goto tx_error;
2630 } else if (err) {
2631 if (info) {
2632 struct ip_tunnel_info *unclone;
2633 struct in6_addr src, dst;
2634
2635 unclone = skb_tunnel_info_unclone(skb);
2636 if (unlikely(!unclone))
2637 goto tx_error;
2638
2639 src = remote_ip.sin6.sin6_addr;
2640 dst = local_ip.sin6.sin6_addr;
2641 unclone->key.u.ipv6.src = src;
2642 unclone->key.u.ipv6.dst = dst;
2643 }
2644
2645 vxlan_encap_bypass(skb, vxlan, vxlan, vni, false);
2646 dst_release(ndst);
2647 goto out_unlock;
2648 }
2649
2650 tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
2651 ttl = ttl ? : ip6_dst_hoplimit(ndst);
2652 skb_scrub_packet(skb, xnet);
2653 err = vxlan_build_skb(skb, ndst, sizeof(struct ipv6hdr),
2654 vni, md, flags, udp_sum);
2655 if (err < 0)
2656 goto tx_error;
2657
2658 udp_tunnel6_xmit_skb(ndst, sock6->sock->sk, skb, dev,
2659 &local_ip.sin6.sin6_addr,
2660 &dst->sin6.sin6_addr, tos, ttl,
2661 label, src_port, dst_port, !udp_sum);
2662 #endif
2663 }
2664 vxlan_vnifilter_count(vxlan, vni, NULL, VXLAN_VNI_STATS_TX, pkt_len);
2665 out_unlock:
2666 rcu_read_unlock();
2667 return;
2668
2669 drop:
2670 dev->stats.tx_dropped++;
2671 vxlan_vnifilter_count(vxlan, vni, NULL, VXLAN_VNI_STATS_TX_DROPS, 0);
2672 dev_kfree_skb(skb);
2673 return;
2674
2675 tx_error:
2676 rcu_read_unlock();
2677 if (err == -ELOOP)
2678 dev->stats.collisions++;
2679 else if (err == -ENETUNREACH)
2680 dev->stats.tx_carrier_errors++;
2681 dst_release(ndst);
2682 dev->stats.tx_errors++;
2683 vxlan_vnifilter_count(vxlan, vni, NULL, VXLAN_VNI_STATS_TX_ERRORS, 0);
2684 kfree_skb(skb);
2685 }
2686
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2023-10-07 15:45 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-30 14:28 [PATCH net-next] vxlan: add support for flowlabel inherit Alce Lafranque
2023-09-30 15:29 ` Eric Dumazet
2023-09-30 18:16 ` alce
2023-10-01 21:21 ` Vincent Bernat
2023-10-03 10:59 ` Ido Schimmel
2023-10-07 14:46 ` alce
2023-10-07 14:26 ` [PATCH net-next v2] " Alce Lafranque
2023-10-07 15:44 ` kernel test robot [this message]
2023-10-11 7:11 ` Ido Schimmel
2023-10-07 17:09 ` [PATCH net-next] " Tom Herbert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202310072308.H5ORfHTn-lkp@intel.com \
--to=lkp@intel.com \
--cc=alce@lafranque.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=idosch@nvidia.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=pabeni@redhat.com \
--cc=vincent@bernat.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.