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

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'net-6.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net

Pull networking fixes from Paolo Abeni:
"Including fixes from netfilter.

Current release - regressions:

- mlx5: fix pre-2.40 binutils assembler error

Current release - new code bugs:

- net: psp: don't assume reply skbs will have a socket

- eth: fbnic: fix missing programming of the default descriptor

Previous releases - regressions:

- page_pool: fix PP_MAGIC_MASK to avoid crashing on some 32-bit arches

- tcp:
- take care of zero tp->window_clamp in tcp_set_rcvlowat()
- don't call reqsk_fastopen_remove() in tcp_conn_request()

- eth:
- ice: release xa entry on adapter allocation failure
- usb: asix: hold PM usage ref to avoid PM/MDIO + RTNL deadlock

Previous releases - always broken:

- netfilter: validate objref and objrefmap expressions

- sctp: fix a null dereference in sctp_disposition sctp_sf_do_5_1D_ce()

- eth:
- mlx4: prevent potential use after free in mlx4_en_do_uc_filter()
- mlx5: prevent tunnel mode conflicts between FDB and NIC IPsec tables
- ocelot: fix use-after-free caused by cyclic delayed work

Misc:

- add support for MediaTek PCIe 5G HP DRMR-H01"

* tag 'net-6.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (38 commits)
net: airoha: Fix loopback mode configuration for GDM2 port
selftests: drv-net: pp_alloc_fail: add necessary optoins to config
selftests: drv-net: pp_alloc_fail: lower traffic expectations
selftests: drv-net: fix linter warnings in pp_alloc_fail
eth: fbnic: fix reporting of alloc_failed qstats
selftests: drv-net: xdp: add test for interface level qstats
selftests: drv-net: xdp: rename netnl to ethnl
eth: fbnic: fix saving stats from XDP_TX rings on close
eth: fbnic: fix accounting of XDP packets
eth: fbnic: fix missing programming of the default descriptor
selftests: netfilter: query conntrack state to check for port clash resolution
selftests: netfilter: nft_fib.sh: fix spurious test failures
bridge: br_vlan_fill_forward_path_pvid: use br_vlan_group_rcu()
netfilter: nft_objref: validate objref and objrefmap expressions
net: pse-pd: tps23881: Fix current measurement scaling
net/mlx5: fix pre-2.40 binutils assembler error
net/mlx5e: Do not fail PSP init on missing caps
net/mlx5e: Prevent tunnel reformat when tunnel mode not allowed
net/mlx5: Prevent tunnel mode conflicts between FDB and NIC IPsec tables
net: usb: asix: hold PM usage ref to avoid PM/MDIO + RTNL deadlock
...

+1120 -603
+3 -1
drivers/net/ethernet/airoha/airoha_eth.c
··· 1710 1710 airoha_fe_wr(eth, REG_GDM_RXCHN_EN(2), 0xffff); 1711 1711 airoha_fe_rmw(eth, REG_GDM_LPBK_CFG(2), 1712 1712 LPBK_CHAN_MASK | LPBK_MODE_MASK | LPBK_EN_MASK, 1713 - FIELD_PREP(LPBK_CHAN_MASK, chan) | LPBK_EN_MASK); 1713 + FIELD_PREP(LPBK_CHAN_MASK, chan) | 1714 + LBK_GAP_MODE_MASK | LBK_LEN_MODE_MASK | 1715 + LBK_CHAN_MODE_MASK | LPBK_EN_MASK); 1714 1716 airoha_fe_rmw(eth, REG_GDM_LEN_CFG(2), 1715 1717 GDM_SHORT_LEN_MASK | GDM_LONG_LEN_MASK, 1716 1718 FIELD_PREP(GDM_SHORT_LEN_MASK, 60) |
+3
drivers/net/ethernet/airoha/airoha_regs.h
··· 151 151 #define LPBK_LEN_MASK GENMASK(23, 10) 152 152 #define LPBK_CHAN_MASK GENMASK(8, 4) 153 153 #define LPBK_MODE_MASK GENMASK(3, 1) 154 + #define LBK_GAP_MODE_MASK BIT(3) 155 + #define LBK_LEN_MODE_MASK BIT(2) 156 + #define LBK_CHAN_MODE_MASK BIT(1) 154 157 #define LPBK_EN_MASK BIT(0) 155 158 156 159 #define REG_GDM_TXCHN_EN(_n) (GDM_BASE(_n) + 0x24)
+2
drivers/net/ethernet/freescale/fsl_pq_mdio.c
··· 479 479 "missing 'reg' property in node %pOF\n", 480 480 tbi); 481 481 err = -EBUSY; 482 + of_node_put(tbi); 482 483 goto error; 483 484 } 484 485 set_tbipa(*prop, pdev, 485 486 data->get_tbipa, priv->map, &res); 487 + of_node_put(tbi); 486 488 } 487 489 } 488 490
+6 -4
drivers/net/ethernet/intel/ice/ice_adapter.c
··· 99 99 100 100 index = ice_adapter_xa_index(pdev); 101 101 scoped_guard(mutex, &ice_adapters_mutex) { 102 - err = xa_insert(&ice_adapters, index, NULL, GFP_KERNEL); 103 - if (err == -EBUSY) { 104 - adapter = xa_load(&ice_adapters, index); 102 + adapter = xa_load(&ice_adapters, index); 103 + if (adapter) { 105 104 refcount_inc(&adapter->refcount); 106 105 WARN_ON_ONCE(adapter->index != ice_adapter_index(pdev)); 107 106 return adapter; 108 107 } 108 + err = xa_reserve(&ice_adapters, index, GFP_KERNEL); 109 109 if (err) 110 110 return ERR_PTR(err); 111 111 112 112 adapter = ice_adapter_new(pdev); 113 - if (!adapter) 113 + if (!adapter) { 114 + xa_release(&ice_adapters, index); 114 115 return ERR_PTR(-ENOMEM); 116 + } 115 117 xa_store(&ice_adapters, index, adapter, GFP_KERNEL); 116 118 } 117 119 return adapter;
+1 -1
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
··· 1180 1180 mlx4_unregister_mac(mdev->dev, priv->port, mac); 1181 1181 1182 1182 hlist_del_rcu(&entry->hlist); 1183 - kfree_rcu(entry, rcu); 1184 1183 en_dbg(DRV, priv, "Removed MAC %pM on port:%d\n", 1185 1184 entry->mac, priv->port); 1185 + kfree_rcu(entry, rcu); 1186 1186 ++removed; 1187 1187 } 1188 1188 }
+27 -11
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
··· 772 772 struct netlink_ext_ack *extack) 773 773 { 774 774 struct mlx5e_ipsec_sa_entry *sa_entry = NULL; 775 + bool allow_tunnel_mode = false; 775 776 struct mlx5e_ipsec *ipsec; 776 777 struct mlx5e_priv *priv; 777 778 gfp_t gfp; ··· 804 803 goto err_xfrm; 805 804 } 806 805 806 + if (mlx5_eswitch_block_mode(priv->mdev)) 807 + goto unblock_ipsec; 808 + 809 + if (x->props.mode == XFRM_MODE_TUNNEL && 810 + x->xso.type == XFRM_DEV_OFFLOAD_PACKET) { 811 + allow_tunnel_mode = mlx5e_ipsec_fs_tunnel_allowed(sa_entry); 812 + if (!allow_tunnel_mode) { 813 + NL_SET_ERR_MSG_MOD(extack, 814 + "Packet offload tunnel mode is disabled due to encap settings"); 815 + err = -EINVAL; 816 + goto unblock_mode; 817 + } 818 + } 819 + 807 820 /* check esn */ 808 821 if (x->props.flags & XFRM_STATE_ESN) 809 822 mlx5e_ipsec_update_esn_state(sa_entry); ··· 832 817 833 818 err = mlx5_ipsec_create_work(sa_entry); 834 819 if (err) 835 - goto unblock_ipsec; 820 + goto unblock_encap; 836 821 837 822 err = mlx5e_ipsec_create_dwork(sa_entry); 838 823 if (err) ··· 846 831 err = mlx5e_accel_ipsec_fs_add_rule(sa_entry); 847 832 if (err) 848 833 goto err_hw_ctx; 849 - 850 - if (x->props.mode == XFRM_MODE_TUNNEL && 851 - x->xso.type == XFRM_DEV_OFFLOAD_PACKET && 852 - !mlx5e_ipsec_fs_tunnel_enabled(sa_entry)) { 853 - NL_SET_ERR_MSG_MOD(extack, "Packet offload tunnel mode is disabled due to encap settings"); 854 - err = -EINVAL; 855 - goto err_add_rule; 856 - } 857 834 858 835 /* We use *_bh() variant because xfrm_timer_handler(), which runs 859 836 * in softirq context, can reach our state delete logic and we need ··· 862 855 queue_delayed_work(ipsec->wq, &sa_entry->dwork->dwork, 863 856 MLX5_IPSEC_RESCHED); 864 857 865 - if (x->xso.type == XFRM_DEV_OFFLOAD_PACKET && 866 - x->props.mode == XFRM_MODE_TUNNEL) { 858 + if (allow_tunnel_mode) { 867 859 xa_lock_bh(&ipsec->sadb); 868 860 __xa_set_mark(&ipsec->sadb, sa_entry->ipsec_obj_id, 869 861 MLX5E_IPSEC_TUNNEL_SA); ··· 871 865 872 866 out: 873 867 x->xso.offload_handle = (unsigned long)sa_entry; 868 + if (allow_tunnel_mode) 869 + mlx5_eswitch_unblock_encap(priv->mdev); 870 + 871 + mlx5_eswitch_unblock_mode(priv->mdev); 872 + 874 873 return 0; 875 874 876 875 err_add_rule: ··· 888 877 if (sa_entry->work) 889 878 kfree(sa_entry->work->data); 890 879 kfree(sa_entry->work); 880 + unblock_encap: 881 + if (allow_tunnel_mode) 882 + mlx5_eswitch_unblock_encap(priv->mdev); 883 + unblock_mode: 884 + mlx5_eswitch_unblock_mode(priv->mdev); 891 885 unblock_ipsec: 892 886 mlx5_eswitch_unblock_ipsec(priv->mdev); 893 887 err_xfrm:
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h
··· 319 319 int mlx5e_accel_ipsec_fs_add_pol(struct mlx5e_ipsec_pol_entry *pol_entry); 320 320 void mlx5e_accel_ipsec_fs_del_pol(struct mlx5e_ipsec_pol_entry *pol_entry); 321 321 void mlx5e_accel_ipsec_fs_modify(struct mlx5e_ipsec_sa_entry *sa_entry); 322 - bool mlx5e_ipsec_fs_tunnel_enabled(struct mlx5e_ipsec_sa_entry *sa_entry); 322 + bool mlx5e_ipsec_fs_tunnel_allowed(struct mlx5e_ipsec_sa_entry *sa_entry); 323 323 324 324 int mlx5_ipsec_create_sa_ctx(struct mlx5e_ipsec_sa_entry *sa_entry); 325 325 void mlx5_ipsec_free_sa_ctx(struct mlx5e_ipsec_sa_entry *sa_entry);
+21 -11
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
··· 1069 1069 1070 1070 /* Create FT */ 1071 1071 if (mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_TUNNEL) 1072 - rx->allow_tunnel_mode = mlx5_eswitch_block_encap(mdev); 1072 + rx->allow_tunnel_mode = 1073 + mlx5_eswitch_block_encap(mdev, rx == ipsec->rx_esw); 1074 + 1073 1075 if (rx->allow_tunnel_mode) 1074 1076 flags = MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT; 1075 1077 ft = ipsec_ft_create(attr.ns, attr.sa_level, attr.prio, 1, 2, flags); ··· 1312 1310 goto err_status_rule; 1313 1311 1314 1312 if (mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_TUNNEL) 1315 - tx->allow_tunnel_mode = mlx5_eswitch_block_encap(mdev); 1313 + tx->allow_tunnel_mode = 1314 + mlx5_eswitch_block_encap(mdev, tx == ipsec->tx_esw); 1315 + 1316 1316 if (tx->allow_tunnel_mode) 1317 1317 flags = MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT; 1318 1318 ft = ipsec_ft_create(tx->ns, attr.sa_level, attr.prio, 1, 4, flags); ··· 2850 2846 memcpy(sa_entry, &sa_entry_shadow, sizeof(*sa_entry)); 2851 2847 } 2852 2848 2853 - bool mlx5e_ipsec_fs_tunnel_enabled(struct mlx5e_ipsec_sa_entry *sa_entry) 2849 + bool mlx5e_ipsec_fs_tunnel_allowed(struct mlx5e_ipsec_sa_entry *sa_entry) 2854 2850 { 2855 - struct mlx5_accel_esp_xfrm_attrs *attrs = &sa_entry->attrs; 2856 - struct mlx5e_ipsec_rx *rx; 2857 - struct mlx5e_ipsec_tx *tx; 2851 + struct mlx5e_ipsec *ipsec = sa_entry->ipsec; 2852 + struct xfrm_state *x = sa_entry->x; 2853 + bool from_fdb; 2858 2854 2859 - rx = ipsec_rx(sa_entry->ipsec, attrs->addrs.family, attrs->type); 2860 - tx = ipsec_tx(sa_entry->ipsec, attrs->type); 2861 - if (sa_entry->attrs.dir == XFRM_DEV_OFFLOAD_OUT) 2862 - return tx->allow_tunnel_mode; 2855 + if (x->xso.dir == XFRM_DEV_OFFLOAD_OUT) { 2856 + struct mlx5e_ipsec_tx *tx = ipsec_tx(ipsec, x->xso.type); 2863 2857 2864 - return rx->allow_tunnel_mode; 2858 + from_fdb = (tx == ipsec->tx_esw); 2859 + } else { 2860 + struct mlx5e_ipsec_rx *rx = ipsec_rx(ipsec, x->props.family, 2861 + x->xso.type); 2862 + 2863 + from_fdb = (rx == ipsec->rx_esw); 2864 + } 2865 + 2866 + return mlx5_eswitch_block_encap(ipsec->mdev, from_fdb); 2865 2867 } 2866 2868 2867 2869 void mlx5e_ipsec_handle_mpv_event(int event, struct mlx5e_priv *slave_priv,
+5 -5
drivers/net/ethernet/mellanox/mlx5/core/en_accel/psp.c
··· 893 893 894 894 if (!mlx5_is_psp_device(mdev)) { 895 895 mlx5_core_dbg(mdev, "PSP offload not supported\n"); 896 - return -EOPNOTSUPP; 896 + return 0; 897 897 } 898 898 899 899 if (!MLX5_CAP_ETH(mdev, swp)) { 900 900 mlx5_core_dbg(mdev, "SWP not supported\n"); 901 - return -EOPNOTSUPP; 901 + return 0; 902 902 } 903 903 904 904 if (!MLX5_CAP_ETH(mdev, swp_csum)) { 905 905 mlx5_core_dbg(mdev, "SWP checksum not supported\n"); 906 - return -EOPNOTSUPP; 906 + return 0; 907 907 } 908 908 909 909 if (!MLX5_CAP_ETH(mdev, swp_csum_l4_partial)) { 910 910 mlx5_core_dbg(mdev, "SWP L4 partial checksum not supported\n"); 911 - return -EOPNOTSUPP; 911 + return 0; 912 912 } 913 913 914 914 if (!MLX5_CAP_ETH(mdev, swp_lso)) { 915 915 mlx5_core_dbg(mdev, "PSP LSO not supported\n"); 916 - return -EOPNOTSUPP; 916 + return 0; 917 917 } 918 918 919 919 psp = kzalloc(sizeof(*psp), GFP_KERNEL);
+3 -2
drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
··· 879 879 struct mlx5_eswitch *slave_esw); 880 880 int mlx5_eswitch_reload_ib_reps(struct mlx5_eswitch *esw); 881 881 882 - bool mlx5_eswitch_block_encap(struct mlx5_core_dev *dev); 882 + bool mlx5_eswitch_block_encap(struct mlx5_core_dev *dev, bool from_fdb); 883 883 void mlx5_eswitch_unblock_encap(struct mlx5_core_dev *dev); 884 884 885 885 int mlx5_eswitch_block_mode(struct mlx5_core_dev *dev); ··· 974 974 return 0; 975 975 } 976 976 977 - static inline bool mlx5_eswitch_block_encap(struct mlx5_core_dev *dev) 977 + static inline bool 978 + mlx5_eswitch_block_encap(struct mlx5_core_dev *dev, bool from_fdb) 978 979 { 979 980 return true; 980 981 }
+10 -8
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
··· 4006 4006 return esw_inline_mode_to_devlink(esw->offloads.inline_mode, mode); 4007 4007 } 4008 4008 4009 - bool mlx5_eswitch_block_encap(struct mlx5_core_dev *dev) 4009 + bool mlx5_eswitch_block_encap(struct mlx5_core_dev *dev, bool from_fdb) 4010 4010 { 4011 4011 struct mlx5_eswitch *esw = dev->priv.eswitch; 4012 + enum devlink_eswitch_encap_mode encap; 4013 + bool allow_tunnel = false; 4012 4014 4013 4015 if (!mlx5_esw_allowed(esw)) 4014 4016 return true; 4015 4017 4016 4018 down_write(&esw->mode_lock); 4017 - if (esw->mode != MLX5_ESWITCH_LEGACY && 4018 - esw->offloads.encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE) { 4019 - up_write(&esw->mode_lock); 4020 - return false; 4019 + encap = esw->offloads.encap; 4020 + if (esw->mode == MLX5_ESWITCH_LEGACY || 4021 + (encap == DEVLINK_ESWITCH_ENCAP_MODE_NONE && !from_fdb)) { 4022 + allow_tunnel = true; 4023 + esw->offloads.num_block_encap++; 4021 4024 } 4022 - 4023 - esw->offloads.num_block_encap++; 4024 4025 up_write(&esw->mode_lock); 4025 - return true; 4026 + 4027 + return allow_tunnel; 4026 4028 } 4027 4029 4028 4030 void mlx5_eswitch_unblock_encap(struct mlx5_core_dev *dev)
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/wc.c
··· 266 266 if (cpu_has_neon()) { 267 267 kernel_neon_begin(); 268 268 asm volatile 269 - (".arch_extension simd;\n\t" 269 + (".arch_extension simd\n\t" 270 270 "ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [%0]\n\t" 271 271 "st1 {v0.16b, v1.16b, v2.16b, v3.16b}, [%1]" 272 272 :
+3 -3
drivers/net/ethernet/meta/fbnic/fbnic_ethtool.c
··· 185 185 186 186 for (i = 0; i < nv->txt_count; i++) { 187 187 fbnic_aggregate_ring_tx_counters(fbn, &nv->qt[i].sub0); 188 - fbnic_aggregate_ring_tx_counters(fbn, &nv->qt[i].sub1); 188 + fbnic_aggregate_ring_xdp_counters(fbn, &nv->qt[i].sub1); 189 189 fbnic_aggregate_ring_tx_counters(fbn, &nv->qt[i].cmpl); 190 190 } 191 191 192 192 for (j = 0; j < nv->rxt_count; j++, i++) { 193 - fbnic_aggregate_ring_rx_counters(fbn, &nv->qt[i].sub0); 194 - fbnic_aggregate_ring_rx_counters(fbn, &nv->qt[i].sub1); 193 + fbnic_aggregate_ring_bdq_counters(fbn, &nv->qt[i].sub0); 194 + fbnic_aggregate_ring_bdq_counters(fbn, &nv->qt[i].sub1); 195 195 fbnic_aggregate_ring_rx_counters(fbn, &nv->qt[i].cmpl); 196 196 } 197 197 }
+8
drivers/net/ethernet/meta/fbnic/fbnic_mac.c
··· 83 83 84 84 static void fbnic_mac_init_qm(struct fbnic_dev *fbd) 85 85 { 86 + u64 default_meta = FIELD_PREP(FBNIC_TWD_L2_HLEN_MASK, ETH_HLEN) | 87 + FBNIC_TWD_FLAG_REQ_COMPLETION; 86 88 u32 clock_freq; 89 + 90 + /* Configure default TWQ Metadata descriptor */ 91 + wr32(fbd, FBNIC_QM_TWQ_DEFAULT_META_L, 92 + lower_32_bits(default_meta)); 93 + wr32(fbd, FBNIC_QM_TWQ_DEFAULT_META_H, 94 + upper_32_bits(default_meta)); 87 95 88 96 /* Configure TSO behavior */ 89 97 wr32(fbd, FBNIC_QM_TQS_CTL0,
+21 -2
drivers/net/ethernet/meta/fbnic/fbnic_netdev.c
··· 543 543 static void fbnic_get_queue_stats_rx(struct net_device *dev, int idx, 544 544 struct netdev_queue_stats_rx *rx) 545 545 { 546 + u64 bytes, packets, alloc_fail, alloc_fail_bdq; 546 547 struct fbnic_net *fbn = netdev_priv(dev); 547 548 struct fbnic_ring *rxr = fbn->rx[idx]; 548 549 struct fbnic_dev *fbd = fbn->fbd; 549 550 struct fbnic_queue_stats *stats; 550 - u64 bytes, packets, alloc_fail; 551 551 u64 csum_complete, csum_none; 552 + struct fbnic_q_triad *qt; 552 553 unsigned int start; 553 554 554 555 if (!rxr) 555 556 return; 557 + 558 + /* fbn->rx points to completion queues */ 559 + qt = container_of(rxr, struct fbnic_q_triad, cmpl); 556 560 557 561 stats = &rxr->stats; 558 562 do { ··· 567 563 csum_complete = stats->rx.csum_complete; 568 564 csum_none = stats->rx.csum_none; 569 565 } while (u64_stats_fetch_retry(&stats->syncp, start)); 566 + 567 + stats = &qt->sub0.stats; 568 + do { 569 + start = u64_stats_fetch_begin(&stats->syncp); 570 + alloc_fail_bdq = stats->bdq.alloc_failed; 571 + } while (u64_stats_fetch_retry(&stats->syncp, start)); 572 + alloc_fail += alloc_fail_bdq; 573 + 574 + stats = &qt->sub1.stats; 575 + do { 576 + start = u64_stats_fetch_begin(&stats->syncp); 577 + alloc_fail_bdq = stats->bdq.alloc_failed; 578 + } while (u64_stats_fetch_retry(&stats->syncp, start)); 579 + alloc_fail += alloc_fail_bdq; 570 580 571 581 rx->bytes = bytes; 572 582 rx->packets = packets; ··· 659 641 660 642 rx->bytes = fbn->rx_stats.bytes; 661 643 rx->packets = fbn->rx_stats.packets; 662 - rx->alloc_fail = fbn->rx_stats.rx.alloc_failed; 644 + rx->alloc_fail = fbn->rx_stats.rx.alloc_failed + 645 + fbn->bdq_stats.bdq.alloc_failed; 663 646 rx->csum_complete = fbn->rx_stats.rx.csum_complete; 664 647 rx->csum_none = fbn->rx_stats.rx.csum_none; 665 648 }
+1
drivers/net/ethernet/meta/fbnic/fbnic_netdev.h
··· 68 68 /* Storage for stats after ring destruction */ 69 69 struct fbnic_queue_stats tx_stats; 70 70 struct fbnic_queue_stats rx_stats; 71 + struct fbnic_queue_stats bdq_stats; 71 72 u64 link_down_events; 72 73 73 74 /* Time stamping filter config */
+47 -27
drivers/net/ethernet/meta/fbnic/fbnic_txrx.c
··· 904 904 netmem = page_pool_dev_alloc_netmems(bdq->page_pool); 905 905 if (!netmem) { 906 906 u64_stats_update_begin(&bdq->stats.syncp); 907 - bdq->stats.rx.alloc_failed++; 907 + bdq->stats.bdq.alloc_failed++; 908 908 u64_stats_update_end(&bdq->stats.syncp); 909 909 910 910 break; ··· 1242 1242 /* Walk the completion queue collecting the heads reported by NIC */ 1243 1243 while (likely(packets < budget)) { 1244 1244 struct sk_buff *skb = ERR_PTR(-EINVAL); 1245 + u32 pkt_bytes; 1245 1246 u64 rcd; 1246 1247 1247 1248 if ((*raw_rcd & cpu_to_le64(FBNIC_RCD_DONE)) == done) ··· 1273 1272 /* We currently ignore the action table index */ 1274 1273 break; 1275 1274 case FBNIC_RCD_TYPE_META: 1276 - if (unlikely(pkt->add_frag_failed)) 1277 - skb = NULL; 1278 - else if (likely(!fbnic_rcd_metadata_err(rcd))) 1275 + if (likely(!fbnic_rcd_metadata_err(rcd) && 1276 + !pkt->add_frag_failed)) { 1277 + pkt_bytes = xdp_get_buff_len(&pkt->buff); 1279 1278 skb = fbnic_run_xdp(nv, pkt); 1279 + } 1280 1280 1281 1281 /* Populate skb and invalidate XDP */ 1282 1282 if (!IS_ERR_OR_NULL(skb)) { 1283 1283 fbnic_populate_skb_fields(nv, rcd, skb, qt, 1284 1284 &csum_complete, 1285 1285 &csum_none); 1286 - 1287 - packets++; 1288 - bytes += skb->len; 1289 - 1290 1286 napi_gro_receive(&nv->napi, skb); 1291 1287 } else if (skb == ERR_PTR(-FBNIC_XDP_TX)) { 1292 1288 pkt_tail = nv->qt[0].sub1.tail; 1293 - bytes += xdp_get_buff_len(&pkt->buff); 1289 + } else if (PTR_ERR(skb) == -FBNIC_XDP_CONSUME) { 1290 + fbnic_put_pkt_buff(qt, pkt, 1); 1294 1291 } else { 1295 - if (!skb) { 1292 + if (!skb) 1296 1293 alloc_failed++; 1297 - dropped++; 1298 - } else if (skb == ERR_PTR(-FBNIC_XDP_LEN_ERR)) { 1294 + 1295 + if (skb == ERR_PTR(-FBNIC_XDP_LEN_ERR)) 1299 1296 length_errors++; 1300 - } else { 1297 + else 1301 1298 dropped++; 1302 - } 1303 1299 1304 1300 fbnic_put_pkt_buff(qt, pkt, 1); 1301 + goto next_dont_count; 1305 1302 } 1306 1303 1304 + packets++; 1305 + bytes += pkt_bytes; 1306 + next_dont_count: 1307 1307 pkt->buff.data_hard_start = NULL; 1308 1308 1309 1309 break; ··· 1321 1319 u64_stats_update_begin(&rcq->stats.syncp); 1322 1320 rcq->stats.packets += packets; 1323 1321 rcq->stats.bytes += bytes; 1324 - /* Re-add ethernet header length (removed in fbnic_build_skb) */ 1325 - rcq->stats.bytes += ETH_HLEN * packets; 1326 1322 rcq->stats.dropped += dropped; 1327 1323 rcq->stats.rx.alloc_failed += alloc_failed; 1328 1324 rcq->stats.rx.csum_complete += csum_complete; ··· 1414 1414 BUILD_BUG_ON(sizeof(fbn->rx_stats.rx) / 8 != 4); 1415 1415 } 1416 1416 1417 + void fbnic_aggregate_ring_bdq_counters(struct fbnic_net *fbn, 1418 + struct fbnic_ring *bdq) 1419 + { 1420 + struct fbnic_queue_stats *stats = &bdq->stats; 1421 + 1422 + /* Capture stats from queues before dissasociating them */ 1423 + fbn->bdq_stats.bdq.alloc_failed += stats->bdq.alloc_failed; 1424 + /* Remember to add new stats here */ 1425 + BUILD_BUG_ON(sizeof(fbn->rx_stats.bdq) / 8 != 1); 1426 + } 1427 + 1417 1428 void fbnic_aggregate_ring_tx_counters(struct fbnic_net *fbn, 1418 1429 struct fbnic_ring *txr) 1419 1430 { ··· 1444 1433 BUILD_BUG_ON(sizeof(fbn->tx_stats.twq) / 8 != 6); 1445 1434 } 1446 1435 1447 - static void fbnic_aggregate_ring_xdp_counters(struct fbnic_net *fbn, 1448 - struct fbnic_ring *xdpr) 1436 + void fbnic_aggregate_ring_xdp_counters(struct fbnic_net *fbn, 1437 + struct fbnic_ring *xdpr) 1449 1438 { 1450 1439 struct fbnic_queue_stats *stats = &xdpr->stats; 1451 1440 ··· 1453 1442 return; 1454 1443 1455 1444 /* Capture stats from queues before dissasociating them */ 1456 - fbn->rx_stats.bytes += stats->bytes; 1457 - fbn->rx_stats.packets += stats->packets; 1458 - fbn->rx_stats.dropped += stats->dropped; 1445 + fbn->tx_stats.dropped += stats->dropped; 1459 1446 fbn->tx_stats.bytes += stats->bytes; 1460 1447 fbn->tx_stats.packets += stats->packets; 1461 1448 } ··· 1497 1488 fbn->rx[rxr->q_idx] = NULL; 1498 1489 } 1499 1490 1491 + static void fbnic_remove_bdq_ring(struct fbnic_net *fbn, 1492 + struct fbnic_ring *bdq) 1493 + { 1494 + if (!(bdq->flags & FBNIC_RING_F_STATS)) 1495 + return; 1496 + 1497 + fbnic_aggregate_ring_bdq_counters(fbn, bdq); 1498 + } 1499 + 1500 1500 static void fbnic_free_qt_page_pools(struct fbnic_q_triad *qt) 1501 1501 { 1502 1502 page_pool_destroy(qt->sub0.page_pool); ··· 1525 1507 } 1526 1508 1527 1509 for (j = 0; j < nv->rxt_count; j++, i++) { 1528 - fbnic_remove_rx_ring(fbn, &nv->qt[i].sub0); 1529 - fbnic_remove_rx_ring(fbn, &nv->qt[i].sub1); 1510 + fbnic_remove_bdq_ring(fbn, &nv->qt[i].sub0); 1511 + fbnic_remove_bdq_ring(fbn, &nv->qt[i].sub1); 1530 1512 fbnic_remove_rx_ring(fbn, &nv->qt[i].cmpl); 1531 1513 } 1532 1514 ··· 1725 1707 while (rxt_count) { 1726 1708 /* Configure header queue */ 1727 1709 db = &uc_addr[FBNIC_QUEUE(rxq_idx) + FBNIC_QUEUE_BDQ_HPQ_TAIL]; 1728 - fbnic_ring_init(&qt->sub0, db, 0, FBNIC_RING_F_CTX); 1710 + fbnic_ring_init(&qt->sub0, db, 0, 1711 + FBNIC_RING_F_CTX | FBNIC_RING_F_STATS); 1729 1712 1730 1713 /* Configure payload queue */ 1731 1714 db = &uc_addr[FBNIC_QUEUE(rxq_idx) + FBNIC_QUEUE_BDQ_PPQ_TAIL]; 1732 - fbnic_ring_init(&qt->sub1, db, 0, FBNIC_RING_F_CTX); 1715 + fbnic_ring_init(&qt->sub1, db, 0, 1716 + FBNIC_RING_F_CTX | FBNIC_RING_F_STATS); 1733 1717 1734 1718 /* Configure Rx completion queue */ 1735 1719 db = &uc_addr[FBNIC_QUEUE(rxq_idx) + FBNIC_QUEUE_RCQ_HEAD]; ··· 2850 2830 real = container_of(fbn->rx[idx], struct fbnic_q_triad, cmpl); 2851 2831 nv = fbn->napi[idx % fbn->num_napi]; 2852 2832 2853 - fbnic_aggregate_ring_rx_counters(fbn, &real->sub0); 2854 - fbnic_aggregate_ring_rx_counters(fbn, &real->sub1); 2833 + fbnic_aggregate_ring_bdq_counters(fbn, &real->sub0); 2834 + fbnic_aggregate_ring_bdq_counters(fbn, &real->sub1); 2855 2835 fbnic_aggregate_ring_rx_counters(fbn, &real->cmpl); 2856 2836 2857 2837 memcpy(real, qmem, sizeof(*real));
+7
drivers/net/ethernet/meta/fbnic/fbnic_txrx.h
··· 92 92 u64 csum_none; 93 93 u64 length_errors; 94 94 } rx; 95 + struct { 96 + u64 alloc_failed; 97 + } bdq; 95 98 }; 96 99 u64 dropped; 97 100 struct u64_stats_sync syncp; ··· 168 165 169 166 void fbnic_aggregate_ring_rx_counters(struct fbnic_net *fbn, 170 167 struct fbnic_ring *rxr); 168 + void fbnic_aggregate_ring_bdq_counters(struct fbnic_net *fbn, 169 + struct fbnic_ring *rxr); 171 170 void fbnic_aggregate_ring_tx_counters(struct fbnic_net *fbn, 172 171 struct fbnic_ring *txr); 172 + void fbnic_aggregate_ring_xdp_counters(struct fbnic_net *fbn, 173 + struct fbnic_ring *xdpr); 173 174 174 175 int fbnic_alloc_napi_vectors(struct fbnic_net *fbn); 175 176 void fbnic_free_napi_vectors(struct fbnic_net *fbn);
+5
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
··· 708 708 /* Init masks */ 709 709 sparx5_update_fwd(sparx5); 710 710 711 + /* Init flood masks */ 712 + for (int pgid = sparx5_get_pgid(sparx5, PGID_UC_FLOOD); 713 + pgid <= sparx5_get_pgid(sparx5, PGID_BCAST); pgid++) 714 + sparx5_pgid_clear(sparx5, pgid); 715 + 711 716 /* CPU copy CPU pgids */ 712 717 spx5_wr(ANA_AC_PGID_MISC_CFG_PGID_CPU_COPY_ENA_SET(1), sparx5, 713 718 ANA_AC_PGID_MISC_CFG(sparx5_get_pgid(sparx5, PGID_CPU)));
+12
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
··· 176 176 struct net_device *bridge, 177 177 struct netlink_ext_ack *extack) 178 178 { 179 + struct switchdev_brport_flags flags = {0}; 179 180 struct sparx5 *sparx5 = port->sparx5; 180 181 struct net_device *ndev = port->ndev; 181 182 int err; ··· 206 205 */ 207 206 __dev_mc_unsync(ndev, sparx5_mc_unsync); 208 207 208 + /* Enable uc/mc/bc flooding */ 209 + flags.mask = BR_FLOOD | BR_MCAST_FLOOD | BR_BCAST_FLOOD; 210 + flags.val = flags.mask; 211 + sparx5_port_attr_bridge_flags(port, flags); 212 + 209 213 return 0; 210 214 211 215 err_switchdev_offload: ··· 221 215 static void sparx5_port_bridge_leave(struct sparx5_port *port, 222 216 struct net_device *bridge) 223 217 { 218 + struct switchdev_brport_flags flags = {0}; 224 219 struct sparx5 *sparx5 = port->sparx5; 225 220 226 221 switchdev_bridge_port_unoffload(port->ndev, NULL, NULL, NULL); ··· 241 234 242 235 /* Port enters in host more therefore restore mc list */ 243 236 __dev_mc_sync(port->ndev, sparx5_mc_sync, sparx5_mc_unsync); 237 + 238 + /* Disable uc/mc/bc flooding */ 239 + flags.mask = BR_FLOOD | BR_MCAST_FLOOD | BR_BCAST_FLOOD; 240 + flags.val = 0; 241 + sparx5_port_attr_bridge_flags(port, flags); 244 242 } 245 243 246 244 static int sparx5_port_changeupper(struct net_device *dev,
-10
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
··· 167 167 /* Divide up fwd mask in 32 bit words */ 168 168 bitmap_to_arr32(mask, sparx5->bridge_fwd_mask, SPX5_PORTS); 169 169 170 - /* Update flood masks */ 171 - for (port = sparx5_get_pgid(sparx5, PGID_UC_FLOOD); 172 - port <= sparx5_get_pgid(sparx5, PGID_BCAST); port++) { 173 - spx5_wr(mask[0], sparx5, ANA_AC_PGID_CFG(port)); 174 - if (is_sparx5(sparx5)) { 175 - spx5_wr(mask[1], sparx5, ANA_AC_PGID_CFG1(port)); 176 - spx5_wr(mask[2], sparx5, ANA_AC_PGID_CFG2(port)); 177 - } 178 - } 179 - 180 170 /* Update SRC masks */ 181 171 for (port = 0; port < sparx5->data->consts->n_ports; port++) { 182 172 if (test_bit(port, sparx5->bridge_fwd_mask)) {
+1 -1
drivers/net/ethernet/mscc/ocelot_stats.c
··· 1021 1021 1022 1022 void ocelot_stats_deinit(struct ocelot *ocelot) 1023 1023 { 1024 - cancel_delayed_work(&ocelot->stats_work); 1024 + disable_delayed_work_sync(&ocelot->stats_work); 1025 1025 destroy_workqueue(ocelot->stats_queue); 1026 1026 }
+25 -14
drivers/net/mdio/mdio-i2c.c
··· 116 116 if (!i2c_mii_valid_phy_id(phy_id)) 117 117 return 0; 118 118 119 - ret = i2c_smbus_xfer(i2c, i2c_mii_phy_addr(phy_id), 0, 120 - I2C_SMBUS_READ, reg, 121 - I2C_SMBUS_BYTE_DATA, &smbus_data); 119 + i2c_lock_bus(i2c, I2C_LOCK_SEGMENT); 120 + 121 + ret = __i2c_smbus_xfer(i2c, i2c_mii_phy_addr(phy_id), 0, 122 + I2C_SMBUS_READ, reg, 123 + I2C_SMBUS_BYTE_DATA, &smbus_data); 122 124 if (ret < 0) 123 - return ret; 125 + goto unlock; 124 126 125 127 val = (smbus_data.byte & 0xff) << 8; 126 128 127 - ret = i2c_smbus_xfer(i2c, i2c_mii_phy_addr(phy_id), 0, 128 - I2C_SMBUS_READ, reg, 129 - I2C_SMBUS_BYTE_DATA, &smbus_data); 129 + ret = __i2c_smbus_xfer(i2c, i2c_mii_phy_addr(phy_id), 0, 130 + I2C_SMBUS_READ, reg, 131 + I2C_SMBUS_BYTE_DATA, &smbus_data); 132 + 133 + unlock: 134 + i2c_unlock_bus(i2c, I2C_LOCK_SEGMENT); 135 + 130 136 if (ret < 0) 131 137 return ret; 132 138 ··· 153 147 154 148 smbus_data.byte = (val & 0xff00) >> 8; 155 149 156 - ret = i2c_smbus_xfer(i2c, i2c_mii_phy_addr(phy_id), 0, 157 - I2C_SMBUS_WRITE, reg, 158 - I2C_SMBUS_BYTE_DATA, &smbus_data); 150 + i2c_lock_bus(i2c, I2C_LOCK_SEGMENT); 151 + 152 + ret = __i2c_smbus_xfer(i2c, i2c_mii_phy_addr(phy_id), 0, 153 + I2C_SMBUS_WRITE, reg, 154 + I2C_SMBUS_BYTE_DATA, &smbus_data); 159 155 if (ret < 0) 160 - return ret; 156 + goto unlock; 161 157 162 158 smbus_data.byte = val & 0xff; 163 159 164 - ret = i2c_smbus_xfer(i2c, i2c_mii_phy_addr(phy_id), 0, 165 - I2C_SMBUS_WRITE, reg, 166 - I2C_SMBUS_BYTE_DATA, &smbus_data); 160 + ret = __i2c_smbus_xfer(i2c, i2c_mii_phy_addr(phy_id), 0, 161 + I2C_SMBUS_WRITE, reg, 162 + I2C_SMBUS_BYTE_DATA, &smbus_data); 163 + 164 + unlock: 165 + i2c_unlock_bus(i2c, I2C_LOCK_SEGMENT); 167 166 168 167 return ret < 0 ? ret : 0; 169 168 }
+1 -1
drivers/net/pse-pd/tps23881.c
··· 62 62 #define TPS23881_REG_SRAM_DATA 0x61 63 63 64 64 #define TPS23881_UV_STEP 3662 65 - #define TPS23881_NA_STEP 70190 65 + #define TPS23881_NA_STEP 89500 66 66 #define TPS23881_MW_STEP 500 67 67 #define TPS23881_MIN_PI_PW_LIMIT_MW 2000 68 68
+29
drivers/net/usb/asix_devices.c
··· 625 625 asix_read_medium_status(dev, 1)); 626 626 } 627 627 628 + /* Notes on PM callbacks and locking context: 629 + * 630 + * - asix_suspend()/asix_resume() are invoked for both runtime PM and 631 + * system-wide suspend/resume. For struct usb_driver the ->resume() 632 + * callback does not receive pm_message_t, so the resume type cannot 633 + * be distinguished here. 634 + * 635 + * - The MAC driver must hold RTNL when calling phylink interfaces such as 636 + * phylink_suspend()/resume(). Those calls will also perform MDIO I/O. 637 + * 638 + * - Taking RTNL and doing MDIO from a runtime-PM resume callback (while 639 + * the USB PM lock is held) is fragile. Since autosuspend brings no 640 + * measurable power saving here, we block it by holding a PM usage 641 + * reference in ax88772_bind(). 642 + */ 628 643 static int asix_suspend(struct usb_interface *intf, pm_message_t message) 629 644 { 630 645 struct usbnet *dev = usb_get_intfdata(intf); ··· 934 919 if (ret) 935 920 goto initphy_err; 936 921 922 + /* Keep this interface runtime-PM active by taking a usage ref. 923 + * Prevents runtime suspend while bound and avoids resume paths 924 + * that could deadlock (autoresume under RTNL while USB PM lock 925 + * is held, phylink/MDIO wants RTNL). 926 + */ 927 + pm_runtime_get_noresume(&intf->dev); 928 + 937 929 return 0; 938 930 939 931 initphy_err: ··· 970 948 phylink_destroy(priv->phylink); 971 949 ax88772_mdio_unregister(priv); 972 950 asix_rx_fixup_common_free(dev->driver_priv); 951 + /* Drop the PM usage ref taken in bind() */ 952 + pm_runtime_put(&intf->dev); 973 953 } 974 954 975 955 static void ax88178_unbind(struct usbnet *dev, struct usb_interface *intf) ··· 1624 1600 .resume = asix_resume, 1625 1601 .reset_resume = asix_resume, 1626 1602 .disconnect = usbnet_disconnect, 1603 + /* usbnet enables autosuspend by default (supports_autosuspend=1). 1604 + * We keep runtime-PM active for AX88772* by taking a PM usage 1605 + * reference in ax88772_bind() (pm_runtime_get_noresume()) and 1606 + * dropping it in unbind(), which effectively blocks autosuspend. 1607 + */ 1627 1608 .supports_autosuspend = 1, 1628 1609 .disable_hub_initiated_lpm = 1, 1629 1610 };
+7 -4
drivers/net/usb/lan78xx.c
··· 1080 1080 } 1081 1081 1082 1082 read_raw_eeprom_done: 1083 - if (dev->chipid == ID_REV_CHIP_ID_7800_) 1084 - return lan78xx_write_reg(dev, HW_CFG, saved); 1085 - 1086 - return 0; 1083 + if (dev->chipid == ID_REV_CHIP_ID_7800_) { 1084 + int rc = lan78xx_write_reg(dev, HW_CFG, saved); 1085 + /* If USB fails, there is nothing to do */ 1086 + if (rc < 0) 1087 + return rc; 1088 + } 1089 + return ret; 1087 1090 } 1088 1091 1089 1092 static int lan78xx_read_eeprom(struct lan78xx_net *dev, u32 offset,
+1
drivers/net/wwan/t7xx/t7xx_pci.c
··· 939 939 940 940 static const struct pci_device_id t7xx_pci_table[] = { 941 941 { PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x4d75) }, 942 + { PCI_DEVICE(0x03f0, 0x09c8) }, // HP DRMR-H01 942 943 { PCI_DEVICE(0x14c0, 0x4d75) }, // Dell DW5933e 943 944 { } 944 945 };
+13 -9
include/linux/mm.h
··· 4263 4263 * since this value becomes part of PP_SIGNATURE; meaning we can just use the 4264 4264 * space between the PP_SIGNATURE value (without POISON_POINTER_DELTA), and the 4265 4265 * lowest bits of POISON_POINTER_DELTA. On arches where POISON_POINTER_DELTA is 4266 - * 0, we make sure that we leave the two topmost bits empty, as that guarantees 4267 - * we won't mistake a valid kernel pointer for a value we set, regardless of the 4268 - * VMSPLIT setting. 4266 + * 0, we use the lowest bit of PAGE_OFFSET as the boundary if that value is 4267 + * known at compile-time. 4269 4268 * 4270 - * Altogether, this means that the number of bits available is constrained by 4271 - * the size of an unsigned long (at the upper end, subtracting two bits per the 4272 - * above), and the definition of PP_SIGNATURE (with or without 4273 - * POISON_POINTER_DELTA). 4269 + * If the value of PAGE_OFFSET is not known at compile time, or if it is too 4270 + * small to leave at least 8 bits available above PP_SIGNATURE, we define the 4271 + * number of bits to be 0, which turns off the DMA index tracking altogether 4272 + * (see page_pool_register_dma_index()). 4274 4273 */ 4275 4274 #define PP_DMA_INDEX_SHIFT (1 + __fls(PP_SIGNATURE - POISON_POINTER_DELTA)) 4276 4275 #if POISON_POINTER_DELTA > 0 ··· 4278 4279 */ 4279 4280 #define PP_DMA_INDEX_BITS MIN(32, __ffs(POISON_POINTER_DELTA) - PP_DMA_INDEX_SHIFT) 4280 4281 #else 4281 - /* Always leave out the topmost two; see above. */ 4282 - #define PP_DMA_INDEX_BITS MIN(32, BITS_PER_LONG - PP_DMA_INDEX_SHIFT - 2) 4282 + /* Use the lowest bit of PAGE_OFFSET if there's at least 8 bits available; see above */ 4283 + #define PP_DMA_INDEX_MIN_OFFSET (1 << (PP_DMA_INDEX_SHIFT + 8)) 4284 + #define PP_DMA_INDEX_BITS ((__builtin_constant_p(PAGE_OFFSET) && \ 4285 + PAGE_OFFSET >= PP_DMA_INDEX_MIN_OFFSET && \ 4286 + !(PAGE_OFFSET & (PP_DMA_INDEX_MIN_OFFSET - 1))) ? \ 4287 + MIN(32, __ffs(PAGE_OFFSET) - PP_DMA_INDEX_SHIFT) : 0) 4288 + 4283 4289 #endif 4284 4290 4285 4291 #define PP_DMA_INDEX_MASK GENMASK(PP_DMA_INDEX_BITS + PP_DMA_INDEX_SHIFT - 1, \
+2 -2
include/linux/phy.h
··· 297 297 * 298 298 * Description: maps RGMII supported link speeds into the clock rates. 299 299 * This can also be used for MII, GMII, and RMII interface modes as the 300 - * clock rates are indentical, but the caller must be aware that errors 300 + * clock rates are identical, but the caller must be aware that errors 301 301 * for unsupported clock rates will not be signalled. 302 302 * 303 303 * Returns: clock rate or negative errno ··· 519 519 * struct phy_c45_device_ids - 802.3-c45 Device Identifiers 520 520 * @devices_in_package: IEEE 802.3 devices in package register value. 521 521 * @mmds_present: bit vector of MMDs present. 522 - * @device_ids: The device identifer for each present device. 522 + * @device_ids: The device identifier for each present device. 523 523 */ 524 524 struct phy_c45_device_ids { 525 525 u32 devices_in_package;
+2 -2
include/net/psp/functions.h
··· 34 34 void psp_sk_assoc_free(struct sock *sk); 35 35 void psp_twsk_init(struct inet_timewait_sock *tw, const struct sock *sk); 36 36 void psp_twsk_assoc_free(struct inet_timewait_sock *tw); 37 - void psp_reply_set_decrypted(struct sk_buff *skb); 37 + void psp_reply_set_decrypted(const struct sock *sk, struct sk_buff *skb); 38 38 39 39 static inline struct psp_assoc *psp_sk_assoc(const struct sock *sk) 40 40 { ··· 160 160 psp_twsk_init(struct inet_timewait_sock *tw, const struct sock *sk) { } 161 161 static inline void psp_twsk_assoc_free(struct inet_timewait_sock *tw) { } 162 162 static inline void 163 - psp_reply_set_decrypted(struct sk_buff *skb) { } 163 + psp_reply_set_decrypted(const struct sock *sk, struct sk_buff *skb) { } 164 164 165 165 static inline struct psp_assoc *psp_sk_assoc(const struct sock *sk) 166 166 {
+1 -1
net/bridge/br_vlan.c
··· 1457 1457 if (!br_opt_get(br, BROPT_VLAN_ENABLED)) 1458 1458 return; 1459 1459 1460 - vg = br_vlan_group(br); 1460 + vg = br_vlan_group_rcu(br); 1461 1461 1462 1462 if (idx >= 0 && 1463 1463 ctx->vlan[idx].proto == br->vlan_proto) {
+53 -23
net/core/page_pool.c
··· 468 468 } 469 469 } 470 470 471 + static int page_pool_register_dma_index(struct page_pool *pool, 472 + netmem_ref netmem, gfp_t gfp) 473 + { 474 + int err = 0; 475 + u32 id; 476 + 477 + if (unlikely(!PP_DMA_INDEX_BITS)) 478 + goto out; 479 + 480 + if (in_softirq()) 481 + err = xa_alloc(&pool->dma_mapped, &id, netmem_to_page(netmem), 482 + PP_DMA_INDEX_LIMIT, gfp); 483 + else 484 + err = xa_alloc_bh(&pool->dma_mapped, &id, netmem_to_page(netmem), 485 + PP_DMA_INDEX_LIMIT, gfp); 486 + if (err) { 487 + WARN_ONCE(err != -ENOMEM, "couldn't track DMA mapping, please report to netdev@"); 488 + goto out; 489 + } 490 + 491 + netmem_set_dma_index(netmem, id); 492 + out: 493 + return err; 494 + } 495 + 496 + static int page_pool_release_dma_index(struct page_pool *pool, 497 + netmem_ref netmem) 498 + { 499 + struct page *old, *page = netmem_to_page(netmem); 500 + unsigned long id; 501 + 502 + if (unlikely(!PP_DMA_INDEX_BITS)) 503 + return 0; 504 + 505 + id = netmem_get_dma_index(netmem); 506 + if (!id) 507 + return -1; 508 + 509 + if (in_softirq()) 510 + old = xa_cmpxchg(&pool->dma_mapped, id, page, NULL, 0); 511 + else 512 + old = xa_cmpxchg_bh(&pool->dma_mapped, id, page, NULL, 0); 513 + if (old != page) 514 + return -1; 515 + 516 + netmem_set_dma_index(netmem, 0); 517 + 518 + return 0; 519 + } 520 + 471 521 static bool page_pool_dma_map(struct page_pool *pool, netmem_ref netmem, gfp_t gfp) 472 522 { 473 523 dma_addr_t dma; 474 524 int err; 475 - u32 id; 476 525 477 526 /* Setup DMA mapping: use 'struct page' area for storing DMA-addr 478 527 * since dma_addr_t can be either 32 or 64 bits and does not always fit ··· 540 491 goto unmap_failed; 541 492 } 542 493 543 - if (in_softirq()) 544 - err = xa_alloc(&pool->dma_mapped, &id, netmem_to_page(netmem), 545 - PP_DMA_INDEX_LIMIT, gfp); 546 - else 547 - err = xa_alloc_bh(&pool->dma_mapped, &id, netmem_to_page(netmem), 548 - PP_DMA_INDEX_LIMIT, gfp); 549 - if (err) { 550 - WARN_ONCE(err != -ENOMEM, "couldn't track DMA mapping, please report to netdev@"); 494 + err = page_pool_register_dma_index(pool, netmem, gfp); 495 + if (err) 551 496 goto unset_failed; 552 - } 553 497 554 - netmem_set_dma_index(netmem, id); 555 498 page_pool_dma_sync_for_device(pool, netmem, pool->p.max_len); 556 499 557 500 return true; ··· 721 680 static __always_inline void __page_pool_release_netmem_dma(struct page_pool *pool, 722 681 netmem_ref netmem) 723 682 { 724 - struct page *old, *page = netmem_to_page(netmem); 725 - unsigned long id; 726 683 dma_addr_t dma; 727 684 728 685 if (!pool->dma_map) ··· 729 690 */ 730 691 return; 731 692 732 - id = netmem_get_dma_index(netmem); 733 - if (!id) 734 - return; 735 - 736 - if (in_softirq()) 737 - old = xa_cmpxchg(&pool->dma_mapped, id, page, NULL, 0); 738 - else 739 - old = xa_cmpxchg_bh(&pool->dma_mapped, id, page, NULL, 0); 740 - if (old != page) 693 + if (page_pool_release_dma_index(pool, netmem)) 741 694 return; 742 695 743 696 dma = page_pool_get_dma_addr_netmem(netmem); ··· 739 708 PAGE_SIZE << pool->p.order, pool->p.dma_dir, 740 709 DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_WEAK_ORDERING); 741 710 page_pool_set_dma_addr_netmem(netmem, 0); 742 - netmem_set_dma_index(netmem, 0); 743 711 } 744 712 745 713 /* Disconnects a page (from a page_pool). API users can have a need
+1 -1
net/ipv4/ip_output.c
··· 1668 1668 nskb->ip_summed = CHECKSUM_NONE; 1669 1669 if (orig_sk) { 1670 1670 skb_set_owner_edemux(nskb, (struct sock *)orig_sk); 1671 - psp_reply_set_decrypted(nskb); 1671 + psp_reply_set_decrypted(orig_sk, nskb); 1672 1672 } 1673 1673 if (transmit_time) 1674 1674 nskb->tstamp_type = SKB_CLOCK_MONOTONIC;
+4 -1
net/ipv4/tcp.c
··· 1791 1791 /* Make sure sk_rcvbuf is big enough to satisfy SO_RCVLOWAT hint */ 1792 1792 int tcp_set_rcvlowat(struct sock *sk, int val) 1793 1793 { 1794 + struct tcp_sock *tp = tcp_sk(sk); 1794 1795 int space, cap; 1795 1796 1796 1797 if (sk->sk_userlocks & SOCK_RCVBUF_LOCK) ··· 1810 1809 space = tcp_space_from_win(sk, val); 1811 1810 if (space > sk->sk_rcvbuf) { 1812 1811 WRITE_ONCE(sk->sk_rcvbuf, space); 1813 - WRITE_ONCE(tcp_sk(sk)->window_clamp, val); 1812 + 1813 + if (tp->window_clamp && tp->window_clamp < val) 1814 + WRITE_ONCE(tp->window_clamp, val); 1814 1815 } 1815 1816 return 0; 1816 1817 }
-1
net/ipv4/tcp_input.c
··· 7509 7509 &foc, TCP_SYNACK_FASTOPEN, skb); 7510 7510 /* Add the child socket directly into the accept queue */ 7511 7511 if (!inet_csk_reqsk_queue_add(sk, req, fastopen_sk)) { 7512 - reqsk_fastopen_remove(fastopen_sk, req, false); 7513 7512 bh_unlock_sock(fastopen_sk); 7514 7513 sock_put(fastopen_sk); 7515 7514 goto drop_and_free;
+1 -1
net/ipv6/tcp_ipv6.c
··· 974 974 if (sk) { 975 975 /* unconstify the socket only to attach it to buff with care. */ 976 976 skb_set_owner_edemux(buff, (struct sock *)sk); 977 - psp_reply_set_decrypted(buff); 977 + psp_reply_set_decrypted(sk, buff); 978 978 979 979 if (sk->sk_state == TCP_TIME_WAIT) 980 980 mark = inet_twsk(sk)->tw_mark;
+39
net/netfilter/nft_objref.c
··· 22 22 obj->ops->eval(obj, regs, pkt); 23 23 } 24 24 25 + static int nft_objref_validate_obj_type(const struct nft_ctx *ctx, u32 type) 26 + { 27 + unsigned int hooks; 28 + 29 + switch (type) { 30 + case NFT_OBJECT_SYNPROXY: 31 + if (ctx->family != NFPROTO_IPV4 && 32 + ctx->family != NFPROTO_IPV6 && 33 + ctx->family != NFPROTO_INET) 34 + return -EOPNOTSUPP; 35 + 36 + hooks = (1 << NF_INET_LOCAL_IN) | (1 << NF_INET_FORWARD); 37 + 38 + return nft_chain_validate_hooks(ctx->chain, hooks); 39 + default: 40 + break; 41 + } 42 + 43 + return 0; 44 + } 45 + 46 + static int nft_objref_validate(const struct nft_ctx *ctx, 47 + const struct nft_expr *expr) 48 + { 49 + struct nft_object *obj = nft_objref_priv(expr); 50 + 51 + return nft_objref_validate_obj_type(ctx, obj->ops->type->type); 52 + } 53 + 25 54 static int nft_objref_init(const struct nft_ctx *ctx, 26 55 const struct nft_expr *expr, 27 56 const struct nlattr * const tb[]) ··· 122 93 .activate = nft_objref_activate, 123 94 .deactivate = nft_objref_deactivate, 124 95 .dump = nft_objref_dump, 96 + .validate = nft_objref_validate, 125 97 .reduce = NFT_REDUCE_READONLY, 126 98 }; 127 99 ··· 227 197 nf_tables_destroy_set(ctx, priv->set); 228 198 } 229 199 200 + static int nft_objref_map_validate(const struct nft_ctx *ctx, 201 + const struct nft_expr *expr) 202 + { 203 + const struct nft_objref_map *priv = nft_expr_priv(expr); 204 + 205 + return nft_objref_validate_obj_type(ctx, priv->set->objtype); 206 + } 207 + 230 208 static const struct nft_expr_ops nft_objref_map_ops = { 231 209 .type = &nft_objref_type, 232 210 .size = NFT_EXPR_SIZE(sizeof(struct nft_objref_map)), ··· 244 206 .deactivate = nft_objref_map_deactivate, 245 207 .destroy = nft_objref_map_destroy, 246 208 .dump = nft_objref_map_dump, 209 + .validate = nft_objref_map_validate, 247 210 .reduce = NFT_REDUCE_READONLY, 248 211 }; 249 212
+2 -2
net/psp/psp_sock.c
··· 279 279 psp_assoc_put(pas); 280 280 } 281 281 282 - void psp_reply_set_decrypted(struct sk_buff *skb) 282 + void psp_reply_set_decrypted(const struct sock *sk, struct sk_buff *skb) 283 283 { 284 284 struct psp_assoc *pas; 285 285 286 286 rcu_read_lock(); 287 - pas = psp_sk_get_assoc_rcu(skb->sk); 287 + pas = psp_sk_get_assoc_rcu(sk); 288 288 if (pas && pas->tx.spi) 289 289 skb->decrypted = 1; 290 290 rcu_read_unlock();
+2 -1
net/sctp/sm_statefuns.c
··· 886 886 return SCTP_DISPOSITION_CONSUME; 887 887 888 888 nomem_authev: 889 - sctp_ulpevent_free(ai_ev); 889 + if (ai_ev) 890 + sctp_ulpevent_free(ai_ev); 890 891 nomem_aiev: 891 892 sctp_ulpevent_free(ev); 892 893 nomem_ev:
+1 -1
net/tipc/crypto.c
··· 1797 1797 * @b: bearer where the message has been received 1798 1798 * 1799 1799 * If the decryption is successful, the decrypted skb is returned directly or 1800 - * as the callback, the encryption header and auth tag will be trimed out 1800 + * as the callback, the encryption header and auth tag will be trimmed out 1801 1801 * before forwarding to tipc_rcv() via the tipc_crypto_rcv_complete(). 1802 1802 * Otherwise, the skb will be freed! 1803 1803 * Note: RX key(s) can be re-aligned, or in case of no key suitable, TX
+2 -2
net/tipc/topsrv.c
··· 57 57 * @conn_idr: identifier set of connection 58 58 * @idr_lock: protect the connection identifier set 59 59 * @idr_in_use: amount of allocated identifier entry 60 - * @net: network namspace instance 60 + * @net: network namespace instance 61 61 * @awork: accept work item 62 62 * @rcv_wq: receive workqueue 63 63 * @send_wq: send workqueue ··· 83 83 * @sock: socket handler associated with connection 84 84 * @flags: indicates connection state 85 85 * @server: pointer to connected server 86 - * @sub_list: lsit to all pertaing subscriptions 86 + * @sub_list: list to all pertaining subscriptions 87 87 * @sub_lock: lock protecting the subscription list 88 88 * @rwork: receive work item 89 89 * @outqueue: pointer to first outbound message in queue
+2 -2
tools/testing/selftests/drivers/net/Makefile
··· 10 10 # end of TEST_GEN_FILES 11 11 12 12 TEST_PROGS := \ 13 + hds.py \ 13 14 napi_id.py \ 14 15 napi_threaded.py \ 15 16 netcons_basic.sh \ ··· 22 21 ping.py \ 23 22 psp.py \ 24 23 queues.py \ 25 - stats.py \ 26 24 shaper.py \ 27 - hds.py \ 25 + stats.py \ 28 26 xdp.py \ 29 27 # end of TEST_PROGS 30 28
+12 -9
tools/testing/selftests/drivers/net/bonding/Makefile
··· 4 4 TEST_PROGS := \ 5 5 bond-arp-interval-causes-panic.sh \ 6 6 bond-break-lacpdu-tx.sh \ 7 + bond-eth-type-change.sh \ 7 8 bond-lladdr-target.sh \ 9 + bond_ipsec_offload.sh \ 10 + bond_lacp_prio.sh \ 11 + bond_macvlan_ipvlan.sh \ 12 + bond_options.sh \ 13 + bond_passive_lacp.sh \ 8 14 dev_addr_lists.sh \ 9 15 mode-1-recovery-updelay.sh \ 10 16 mode-2-recovery-updelay.sh \ 11 - bond_options.sh \ 12 - bond-eth-type-change.sh \ 13 - bond_macvlan_ipvlan.sh \ 14 - bond_passive_lacp.sh \ 15 - bond_lacp_prio.sh 16 - bond_ipsec_offload.sh 17 + # end of TEST_PROGS 17 18 18 19 TEST_FILES := \ 19 - lag_lib.sh \ 20 20 bond_topo_2d1c.sh \ 21 - bond_topo_3d1c.sh 21 + bond_topo_3d1c.sh \ 22 + lag_lib.sh \ 23 + # end of TEST_FILES 22 24 23 25 TEST_INCLUDES := \ 26 + ../../../net/lib.sh \ 24 27 ../../../net/forwarding/lib.sh \ 25 - ../../../net/lib.sh 28 + # end of TEST_INCLUDES 26 29 27 30 include ../../../lib.mk
+4 -4
tools/testing/selftests/drivers/net/bonding/config
··· 1 1 CONFIG_BONDING=y 2 2 CONFIG_BRIDGE=y 3 3 CONFIG_DUMMY=y 4 + CONFIG_INET_ESP=y 5 + CONFIG_INET_ESP_OFFLOAD=y 4 6 CONFIG_IPV6=y 5 - CONFIG_MACVLAN=y 6 7 CONFIG_IPVLAN=y 8 + CONFIG_MACVLAN=y 7 9 CONFIG_NET_ACT_GACT=y 8 10 CONFIG_NET_CLS_FLOWER=y 9 11 CONFIG_NET_CLS_MATCHALL=m 12 + CONFIG_NETDEVSIM=m 10 13 CONFIG_NET_SCH_INGRESS=y 11 14 CONFIG_NLMON=y 12 15 CONFIG_VETH=y 13 16 CONFIG_VLAN_8021Q=m 14 - CONFIG_INET_ESP=y 15 - CONFIG_INET_ESP_OFFLOAD=y 16 17 CONFIG_XFRM_USER=m 17 - CONFIG_NETDEVSIM=m
+1 -1
tools/testing/selftests/drivers/net/config
··· 3 3 CONFIG_DEBUG_INFO_BTF_MODULES=n 4 4 CONFIG_INET_PSP=y 5 5 CONFIG_IPV6=y 6 - CONFIG_NETDEVSIM=m 7 6 CONFIG_NETCONSOLE=m 8 7 CONFIG_NETCONSOLE_DYNAMIC=y 9 8 CONFIG_NETCONSOLE_EXTENDED_LOG=y 9 + CONFIG_NETDEVSIM=m 10 10 CONFIG_XDP_SOCKETS=y
+8 -4
tools/testing/selftests/drivers/net/dsa/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0+ OR MIT 2 2 3 - TEST_PROGS = bridge_locked_port.sh \ 3 + TEST_PROGS := \ 4 + bridge_locked_port.sh \ 4 5 bridge_mdb.sh \ 5 6 bridge_mld.sh \ 6 7 bridge_vlan_aware.sh \ ··· 10 9 local_termination.sh \ 11 10 no_forwarding.sh \ 12 11 tc_actions.sh \ 13 - test_bridge_fdb_stress.sh 12 + test_bridge_fdb_stress.sh \ 13 + # end of TEST_PROGS 14 14 15 15 TEST_FILES := \ 16 + forwarding.config \ 16 17 run_net_forwarding_test.sh \ 17 - forwarding.config 18 + # end of TEST_FILES 18 19 19 20 TEST_INCLUDES := \ 20 21 ../../../net/forwarding/bridge_locked_port.sh \ ··· 30 27 ../../../net/forwarding/no_forwarding.sh \ 31 28 ../../../net/forwarding/tc_actions.sh \ 32 29 ../../../net/forwarding/tc_common.sh \ 33 - ../../../net/lib.sh 30 + ../../../net/lib.sh \ 31 + # end of TEST_INCLUDES 34 32 35 33 include ../../../lib.mk
+2 -1
tools/testing/selftests/drivers/net/hds.py
··· 3 3 4 4 import errno 5 5 import os 6 + import random 6 7 from typing import Union 7 8 from lib.py import ksft_run, ksft_exit, ksft_eq, ksft_raises, KsftSkipEx 8 9 from lib.py import CmdExitFailure, EthtoolFamily, NlError 9 10 from lib.py import NetDrvEnv 10 - from lib.py import defer, ethtool, ip, random 11 + from lib.py import defer, ethtool, ip 11 12 12 13 13 14 def _get_hds_mode(cfg, netnl) -> str:
+6 -2
tools/testing/selftests/drivers/net/hw/Makefile
··· 32 32 TEST_INCLUDES := \ 33 33 $(wildcard lib/py/*.py ../lib/py/*.py) \ 34 34 ../../../net/lib.sh \ 35 - ../../../net/forwarding/lib.sh \ 36 35 ../../../net/forwarding/ipip_lib.sh \ 36 + ../../../net/forwarding/lib.sh \ 37 37 ../../../net/forwarding/tc_common.sh \ 38 38 # 39 39 ··· 45 45 include ../../../lib.mk 46 46 47 47 # YNL build 48 - YNL_GENS := ethtool netdev 48 + YNL_GENS := \ 49 + ethtool \ 50 + netdev \ 51 + # end of YNL_GENS 52 + 49 53 include ../../../net/ynl.mk 50 54 51 55 include ../../../net/bpf.mk
+4
tools/testing/selftests/drivers/net/hw/config
··· 1 + CONFIG_FAIL_FUNCTION=y 2 + CONFIG_FAULT_INJECTION=y 3 + CONFIG_FAULT_INJECTION_DEBUG_FS=y 4 + CONFIG_FUNCTION_ERROR_INJECTION=y 1 5 CONFIG_IO_URING=y 2 6 CONFIG_IPV6=y 3 7 CONFIG_IPV6_GRE=y
+25 -11
tools/testing/selftests/drivers/net/hw/pp_alloc_fail.py
··· 1 1 #!/usr/bin/env python3 2 2 # SPDX-License-Identifier: GPL-2.0 3 3 4 + """ 5 + Test driver resilience vs page pool allocation failures. 6 + """ 7 + 4 8 import errno 5 9 import time 10 + import math 6 11 import os 7 12 from lib.py import ksft_run, ksft_exit, ksft_pr 8 13 from lib.py import KsftSkipEx, KsftFailEx ··· 18 13 19 14 def _write_fail_config(config): 20 15 for key, value in config.items(): 21 - with open("/sys/kernel/debug/fail_function/" + key, "w") as fp: 16 + path = "/sys/kernel/debug/fail_function/" 17 + with open(path + key, "w", encoding='ascii') as fp: 22 18 fp.write(str(value) + "\n") 23 19 24 20 ··· 28 22 raise KsftSkipEx("Kernel built without function error injection (or DebugFS)") 29 23 30 24 if not os.path.exists("/sys/kernel/debug/fail_function/page_pool_alloc_netmems"): 31 - with open("/sys/kernel/debug/fail_function/inject", "w") as fp: 32 - fp.write("page_pool_alloc_netmems\n") 25 + _write_fail_config({"inject": "page_pool_alloc_netmems"}) 33 26 34 27 _write_fail_config({ 35 28 "verbose": 0, ··· 43 38 return 44 39 45 40 if os.path.exists("/sys/kernel/debug/fail_function/page_pool_alloc_netmems"): 46 - with open("/sys/kernel/debug/fail_function/inject", "w") as fp: 47 - fp.write("\n") 41 + _write_fail_config({"inject": ""}) 48 42 49 43 _write_fail_config({ 50 44 "probability": 0, ··· 52 48 53 49 54 50 def test_pp_alloc(cfg, netdevnl): 51 + """ 52 + Configure page pool allocation fail injection while traffic is running. 53 + """ 54 + 55 55 def get_stats(): 56 56 return netdevnl.qstats_get({"ifindex": cfg.ifindex}, dump=True)[0] 57 57 ··· 63 55 stat1 = get_stats() 64 56 time.sleep(1) 65 57 stat2 = get_stats() 66 - if stat2['rx-packets'] - stat1['rx-packets'] < 15000: 58 + if stat2['rx-packets'] - stat1['rx-packets'] < 4000: 67 59 raise KsftFailEx("Traffic seems low:", stat2['rx-packets'] - stat1['rx-packets']) 68 60 69 61 ··· 90 82 time.sleep(3) 91 83 s2 = get_stats() 92 84 93 - if s2['rx-alloc-fail'] - s1['rx-alloc-fail'] < 1: 85 + seen_fails = s2['rx-alloc-fail'] - s1['rx-alloc-fail'] 86 + if seen_fails < 1: 94 87 raise KsftSkipEx("Allocation failures not increasing") 95 - if s2['rx-alloc-fail'] - s1['rx-alloc-fail'] < 100: 96 - raise KsftSkipEx("Allocation increasing too slowly", s2['rx-alloc-fail'] - s1['rx-alloc-fail'], 97 - "packets:", s2['rx-packets'] - s1['rx-packets']) 88 + pkts = s2['rx-packets'] - s1['rx-packets'] 89 + # Expecting one failure per 512 buffers, 3.1x safety margin 90 + want_fails = math.floor(pkts / 512 / 3.1) 91 + if seen_fails < want_fails: 92 + raise KsftSkipEx("Allocation increasing too slowly", seen_fails, 93 + "packets:", pkts) 94 + ksft_pr(f"Seen: pkts:{pkts} fails:{seen_fails} (pass thrs:{want_fails})") 98 95 99 96 # Basic failures are fine, try to wobble some settings to catch extra failures 100 97 check_traffic_flowing() ··· 118 105 else: 119 106 ksft_pr("ethtool -G change retval: did not succeed", new_g) 120 107 else: 121 - ksft_pr("ethtool -G change retval: did not try") 108 + ksft_pr("ethtool -G change retval: did not try") 122 109 123 110 time.sleep(0.1) 124 111 check_traffic_flowing() ··· 132 119 133 120 134 121 def main() -> None: 122 + """ Ksft boiler plate main """ 135 123 netdevnl = NetdevFamily() 136 124 with NetDrvEpEnv(__file__, nsim_test=False) as cfg: 137 125
+32 -11
tools/testing/selftests/drivers/net/lib/py/__init__.py
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 3 + """ 4 + Driver test environment. 5 + NetDrvEnv and NetDrvEpEnv are the main environment classes. 6 + Former is for local host only tests, latter creates / connects 7 + to a remote endpoint. See NIPA wiki for more information about 8 + running and writing driver tests. 9 + """ 10 + 3 11 import sys 4 12 from pathlib import Path 5 13 ··· 16 8 try: 17 9 sys.path.append(KSFT_DIR.as_posix()) 18 10 19 - from net.lib.py import * 20 - 21 11 # Import one by one to avoid pylint false positives 12 + from net.lib.py import NetNS, NetNSEnter, NetdevSimDev 22 13 from net.lib.py import EthtoolFamily, NetdevFamily, NetshaperFamily, \ 23 14 NlError, RtnlFamily, DevlinkFamily, PSPFamily 24 15 from net.lib.py import CmdExitFailure 25 16 from net.lib.py import bkg, cmd, bpftool, bpftrace, defer, ethtool, \ 26 17 fd_read_timeout, ip, rand_port, tool, wait_port_listen, wait_file 27 - from net.lib.py import fd_read_timeout 28 18 from net.lib.py import KsftSkipEx, KsftFailEx, KsftXfailEx 29 19 from net.lib.py import ksft_disruptive, ksft_exit, ksft_pr, ksft_run, \ 30 20 ksft_setup 31 21 from net.lib.py import ksft_eq, ksft_ge, ksft_in, ksft_is, ksft_lt, \ 32 22 ksft_ne, ksft_not_in, ksft_raises, ksft_true, ksft_gt, ksft_not_none 33 - except ModuleNotFoundError as e: 34 - ksft_pr("Failed importing `net` library from kernel sources") 35 - ksft_pr(str(e)) 36 - ktap_result(True, comment="SKIP") 37 - sys.exit(4) 38 23 39 - from .env import * 40 - from .load import * 41 - from .remote import Remote 24 + __all__ = ["NetNS", "NetNSEnter", "NetdevSimDev", 25 + "EthtoolFamily", "NetdevFamily", "NetshaperFamily", 26 + "NlError", "RtnlFamily", "DevlinkFamily", "PSPFamily", 27 + "CmdExitFailure", 28 + "bkg", "cmd", "bpftool", "bpftrace", "defer", "ethtool", 29 + "fd_read_timeout", "ip", "rand_port", "tool", 30 + "wait_port_listen", "wait_file", 31 + "KsftSkipEx", "KsftFailEx", "KsftXfailEx", 32 + "ksft_disruptive", "ksft_exit", "ksft_pr", "ksft_run", 33 + "ksft_setup", 34 + "ksft_eq", "ksft_ge", "ksft_in", "ksft_is", "ksft_lt", 35 + "ksft_ne", "ksft_not_in", "ksft_raises", "ksft_true", "ksft_gt", 36 + "ksft_not_none", "ksft_not_none"] 37 + 38 + from .env import NetDrvEnv, NetDrvEpEnv 39 + from .load import GenerateTraffic 40 + from .remote import Remote 41 + 42 + __all__ += ["NetDrvEnv", "NetDrvEpEnv", "GenerateTraffic", "Remote"] 43 + except ModuleNotFoundError as e: 44 + print("Failed importing `net` library from kernel sources") 45 + print(str(e)) 46 + sys.exit(4)
+3 -1
tools/testing/selftests/drivers/net/netdevsim/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0+ OR MIT 2 2 3 - TEST_PROGS = devlink.sh \ 3 + TEST_PROGS := \ 4 + devlink.sh \ 4 5 devlink_in_netns.sh \ 5 6 devlink_trap.sh \ 6 7 ethtool-coalesce.sh \ ··· 18 17 psample.sh \ 19 18 tc-mq-visibility.sh \ 20 19 udp_tunnel_nic.sh \ 20 + # end of TEST_PROGS 21 21 22 22 include ../../../lib.mk
+8 -3
tools/testing/selftests/drivers/net/team/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 # Makefile for net selftests 3 3 4 - TEST_PROGS := dev_addr_lists.sh propagation.sh options.sh 4 + TEST_PROGS := \ 5 + dev_addr_lists.sh \ 6 + options.sh \ 7 + propagation.sh \ 8 + # end of TEST_PROGS 5 9 6 10 TEST_INCLUDES := \ 7 11 ../bonding/lag_lib.sh \ 8 12 ../../../net/forwarding/lib.sh \ 9 - ../../../net/lib.sh \ 10 13 ../../../net/in_netns.sh \ 11 - ../../../net/lib/sh/defer.sh 14 + ../../../net/lib.sh \ 15 + ../../../net/lib/sh/defer.sh \ 16 + # end of TEST_INCLUDES 12 17 13 18 include ../../../lib.mk
+5 -8
tools/testing/selftests/drivers/net/virtio_net/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0+ OR MIT 2 2 3 - TEST_PROGS = basic_features.sh \ 4 - # 3 + TEST_PROGS = basic_features.sh 5 4 6 - TEST_FILES = \ 7 - virtio_net_common.sh \ 8 - # 5 + TEST_FILES = virtio_net_common.sh 9 6 10 7 TEST_INCLUDES = \ 11 - ../../../net/forwarding/lib.sh \ 12 - ../../../net/lib.sh \ 13 - # 8 + ../../../net/forwarding/lib.sh \ 9 + ../../../net/lib.sh \ 10 + # end of TEST_INCLUDES 14 11 15 12 include ../../../lib.mk
+93 -6
tools/testing/selftests/drivers/net/xdp.py
··· 11 11 from dataclasses import dataclass 12 12 from enum import Enum 13 13 14 - from lib.py import ksft_run, ksft_exit, ksft_eq, ksft_ne, ksft_pr 15 - from lib.py import KsftFailEx, NetDrvEpEnv, EthtoolFamily, NlError 14 + from lib.py import ksft_run, ksft_exit, ksft_eq, ksft_ge, ksft_ne, ksft_pr 15 + from lib.py import KsftFailEx, NetDrvEpEnv 16 + from lib.py import EthtoolFamily, NetdevFamily, NlError 16 17 from lib.py import bkg, cmd, rand_port, wait_port_listen 17 18 from lib.py import ip, bpftool, defer 18 19 ··· 542 541 The HDS threshold value. If the threshold is not supported or an error occurs, 543 542 a default value of 1500 is returned. 544 543 """ 545 - netnl = cfg.netnl 544 + ethnl = cfg.ethnl 546 545 hds_thresh = 1500 547 546 548 547 try: 549 - rings = netnl.rings_get({'header': {'dev-index': cfg.ifindex}}) 548 + rings = ethnl.rings_get({'header': {'dev-index': cfg.ifindex}}) 550 549 if 'hds-thresh' not in rings: 551 550 ksft_pr(f'hds-thresh not supported. Using default: {hds_thresh}') 552 551 return hds_thresh ··· 563 562 564 563 Args: 565 564 cfg: Configuration object containing network settings. 566 - netnl: Network namespace or link object (not used in this function). 565 + ethnl: Network namespace or link object (not used in this function). 567 566 568 567 This function sets up the packet size and offset lists, then performs 569 568 the head adjustment test by sending and receiving UDP packets. ··· 672 671 _validate_res(res, offset_lst, pkt_sz_lst) 673 672 674 673 674 + def _test_xdp_native_ifc_stats(cfg, act): 675 + cfg.require_cmd("socat") 676 + 677 + bpf_info = BPFProgInfo("xdp_prog", "xdp_native.bpf.o", "xdp", 1500) 678 + prog_info = _load_xdp_prog(cfg, bpf_info) 679 + port = rand_port() 680 + 681 + _set_xdp_map("map_xdp_setup", TestConfig.MODE.value, act.value) 682 + _set_xdp_map("map_xdp_setup", TestConfig.PORT.value, port) 683 + 684 + # Discard the input, but we need a listener to avoid ICMP errors 685 + rx_udp = f"socat -{cfg.addr_ipver} -T 2 -u UDP-RECV:{port},reuseport " + \ 686 + "/dev/null" 687 + # Listener runs on "remote" in case of XDP_TX 688 + rx_host = cfg.remote if act == XDPAction.TX else None 689 + # We want to spew 2000 packets quickly, bash seems to do a good enough job 690 + tx_udp = f"exec 5<>/dev/udp/{cfg.addr}/{port}; " \ 691 + "for i in `seq 2000`; do echo a >&5; done; exec 5>&-" 692 + 693 + cfg.wait_hw_stats_settle() 694 + # Qstats have more clearly defined semantics than rtnetlink. 695 + # XDP is the "first layer of the stack" so XDP packets should be counted 696 + # as received and sent as if the decision was made in the routing layer. 697 + before = cfg.netnl.qstats_get({"ifindex": cfg.ifindex}, dump=True)[0] 698 + 699 + with bkg(rx_udp, host=rx_host, exit_wait=True): 700 + wait_port_listen(port, proto="udp", host=rx_host) 701 + cmd(tx_udp, host=cfg.remote, shell=True) 702 + 703 + cfg.wait_hw_stats_settle() 704 + after = cfg.netnl.qstats_get({"ifindex": cfg.ifindex}, dump=True)[0] 705 + 706 + ksft_ge(after['rx-packets'] - before['rx-packets'], 2000) 707 + if act == XDPAction.TX: 708 + ksft_ge(after['tx-packets'] - before['tx-packets'], 2000) 709 + 710 + expected_pkts = 2000 711 + stats = _get_stats(prog_info["maps"]["map_xdp_stats"]) 712 + ksft_eq(stats[XDPStats.RX.value], expected_pkts, "XDP RX stats mismatch") 713 + if act == XDPAction.TX: 714 + ksft_eq(stats[XDPStats.TX.value], expected_pkts, "XDP TX stats mismatch") 715 + 716 + # Flip the ring count back and forth to make sure the stats from XDP rings 717 + # don't get lost. 718 + chans = cfg.ethnl.channels_get({'header': {'dev-index': cfg.ifindex}}) 719 + if chans.get('combined-count', 0) > 1: 720 + cfg.ethnl.channels_set({'header': {'dev-index': cfg.ifindex}, 721 + 'combined-count': 1}) 722 + cfg.ethnl.channels_set({'header': {'dev-index': cfg.ifindex}, 723 + 'combined-count': chans['combined-count']}) 724 + before = after 725 + after = cfg.netnl.qstats_get({"ifindex": cfg.ifindex}, dump=True)[0] 726 + 727 + ksft_ge(after['rx-packets'], before['rx-packets']) 728 + if act == XDPAction.TX: 729 + ksft_ge(after['tx-packets'], before['tx-packets']) 730 + 731 + 732 + def test_xdp_native_qstats_pass(cfg): 733 + """ 734 + Send 2000 messages, expect XDP_PASS, make sure the packets were counted 735 + to interface level qstats (Rx). 736 + """ 737 + _test_xdp_native_ifc_stats(cfg, XDPAction.PASS) 738 + 739 + 740 + def test_xdp_native_qstats_drop(cfg): 741 + """ 742 + Send 2000 messages, expect XDP_DROP, make sure the packets were counted 743 + to interface level qstats (Rx). 744 + """ 745 + _test_xdp_native_ifc_stats(cfg, XDPAction.DROP) 746 + 747 + 748 + def test_xdp_native_qstats_tx(cfg): 749 + """ 750 + Send 2000 messages, expect XDP_TX, make sure the packets were counted 751 + to interface level qstats (Rx and Tx) 752 + """ 753 + _test_xdp_native_ifc_stats(cfg, XDPAction.TX) 754 + 755 + 675 756 def main(): 676 757 """ 677 758 Main function to execute the XDP tests. ··· 764 681 function to execute the tests. 765 682 """ 766 683 with NetDrvEpEnv(__file__) as cfg: 767 - cfg.netnl = EthtoolFamily() 684 + cfg.ethnl = EthtoolFamily() 685 + cfg.netnl = NetdevFamily() 768 686 ksft_run( 769 687 [ 770 688 test_xdp_native_pass_sb, ··· 778 694 test_xdp_native_adjst_tail_shrnk_data, 779 695 test_xdp_native_adjst_head_grow_data, 780 696 test_xdp_native_adjst_head_shrnk_data, 697 + test_xdp_native_qstats_pass, 698 + test_xdp_native_qstats_drop, 699 + test_xdp_native_qstats_tx, 781 700 ], 782 701 args=(cfg,)) 783 702 ksft_exit()
+191 -122
tools/testing/selftests/net/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 # Makefile for net selftests 3 3 4 - CFLAGS += -Wall -Wl,--no-as-needed -O2 -g 4 + CFLAGS += -Wall -Wl,--no-as-needed -O2 -g 5 5 CFLAGS += -I../../../../usr/include/ $(KHDR_INCLUDES) 6 6 # Additional include paths needed by kselftest.h 7 7 CFLAGS += -I../ 8 8 9 - TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh \ 10 - rtnetlink.sh xfrm_policy.sh 11 - TEST_PROGS += fcnal-ipv4.sh fcnal-ipv6.sh fcnal-other.sh 12 - TEST_PROGS += fib_tests.sh fib-onlink-tests.sh pmtu.sh udpgso.sh ip_defrag.sh 13 - TEST_PROGS += udpgso_bench.sh fib_rule_tests.sh msg_zerocopy.sh psock_snd.sh 14 - TEST_PROGS += udpgro_bench.sh udpgro.sh test_vxlan_under_vrf.sh reuseport_addr_any.sh 15 - TEST_PROGS += test_vxlan_fdb_changelink.sh so_txtime.sh ipv6_flowlabel.sh 16 - TEST_PROGS += tcp_fastopen_backup_key.sh l2tp.sh traceroute.sh 17 - TEST_PROGS += fin_ack_lat.sh fib_nexthop_multiprefix.sh fib_nexthops.sh fib_nexthop_nongw.sh 18 - TEST_PROGS += altnames.sh icmp.sh icmp_redirect.sh ip6_gre_headroom.sh 19 - TEST_PROGS += route_localnet.sh 20 - TEST_PROGS += reuseaddr_ports_exhausted.sh 21 - TEST_PROGS += txtimestamp.sh 22 - TEST_PROGS += vrf-xfrm-tests.sh 23 - TEST_PROGS += rxtimestamp.sh 24 - TEST_PROGS += drop_monitor_tests.sh 25 - TEST_PROGS += vrf_route_leaking.sh 26 - TEST_PROGS += bareudp.sh 27 - TEST_PROGS += amt.sh 28 - TEST_PROGS += unicast_extensions.sh 29 - TEST_PROGS += udpgro_fwd.sh 30 - TEST_PROGS += udpgro_frglist.sh 31 - TEST_PROGS += nat6to4.sh 32 - TEST_PROGS += veth.sh 33 - TEST_PROGS += ioam6.sh 34 - TEST_PROGS += gro.sh 35 - TEST_PROGS += gre_gso.sh 36 - TEST_PROGS += gre_ipv6_lladdr.sh 37 - TEST_PROGS += cmsg_so_mark.sh 38 - TEST_PROGS += cmsg_so_priority.sh 39 - TEST_PROGS += test_so_rcv.sh 40 - TEST_PROGS += cmsg_time.sh cmsg_ip.sh 41 - TEST_PROGS += netns-name.sh 42 - TEST_PROGS += link_netns.py 43 - TEST_PROGS += nl_netdev.py 44 - TEST_PROGS += rtnetlink.py 45 - TEST_PROGS += rtnetlink_notification.sh 46 - TEST_PROGS += srv6_end_dt46_l3vpn_test.sh 47 - TEST_PROGS += srv6_end_dt4_l3vpn_test.sh 48 - TEST_PROGS += srv6_end_dt6_l3vpn_test.sh 49 - TEST_PROGS += srv6_hencap_red_l3vpn_test.sh 50 - TEST_PROGS += srv6_hl2encap_red_l2vpn_test.sh 51 - TEST_PROGS += srv6_end_next_csid_l3vpn_test.sh 52 - TEST_PROGS += srv6_end_x_next_csid_l3vpn_test.sh 53 - TEST_PROGS += srv6_end_flavors_test.sh 54 - TEST_PROGS += srv6_end_dx4_netfilter_test.sh 55 - TEST_PROGS += srv6_end_dx6_netfilter_test.sh 56 - TEST_PROGS += vrf_strict_mode_test.sh 57 - TEST_PROGS += arp_ndisc_evict_nocarrier.sh 58 - TEST_PROGS += ndisc_unsolicited_na_test.sh 59 - TEST_PROGS += arp_ndisc_untracked_subnets.sh 60 - TEST_PROGS += stress_reuseport_listen.sh 61 - TEST_PROGS += l2_tos_ttl_inherit.sh 62 - TEST_PROGS += bind_bhash.sh 63 - TEST_PROGS += ip_local_port_range.sh 64 - TEST_PROGS += rps_default_mask.sh 65 - TEST_PROGS += big_tcp.sh 66 - TEST_PROGS += netns-sysctl.sh 67 - TEST_PROGS += netdev-l2addr.sh 68 - TEST_PROGS_EXTENDED := toeplitz_client.sh toeplitz.sh xfrm_policy_add_speed.sh 69 - TEST_GEN_FILES = socket nettest 70 - TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy reuseport_addr_any 71 - TEST_GEN_FILES += tcp_mmap tcp_inq psock_snd txring_overwrite 72 - TEST_GEN_FILES += udpgso udpgso_bench_tx udpgso_bench_rx ip_defrag 73 - TEST_GEN_FILES += so_txtime ipv6_flowlabel ipv6_flowlabel_mgr so_netns_cookie 74 - TEST_GEN_FILES += tcp_fastopen_backup_key 75 - TEST_GEN_FILES += fin_ack_lat 76 - TEST_GEN_FILES += reuseaddr_ports_exhausted 77 - TEST_GEN_FILES += hwtstamp_config rxtimestamp timestamping txtimestamp 78 - TEST_GEN_FILES += ipsec 79 - TEST_GEN_FILES += ioam6_parser 80 - TEST_GEN_FILES += gro 81 - TEST_GEN_PROGS = reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa 82 - TEST_GEN_PROGS += reuseport_dualstack reuseaddr_conflict tls tun tap epoll_busy_poll 83 - TEST_GEN_FILES += toeplitz 84 - TEST_GEN_FILES += cmsg_sender 85 - TEST_GEN_FILES += stress_reuseport_listen 86 - TEST_GEN_FILES += so_rcv_listener 87 - TEST_PROGS += test_vxlan_vnifiltering.sh 88 - TEST_GEN_FILES += io_uring_zerocopy_tx 89 - TEST_PROGS += io_uring_zerocopy_tx.sh 90 - TEST_GEN_FILES += bind_bhash 91 - TEST_GEN_PROGS += sk_bind_sendto_listen 92 - TEST_GEN_PROGS += sk_connect_zero_addr 93 - TEST_GEN_PROGS += sk_so_peek_off 94 - TEST_PROGS += test_ingress_egress_chaining.sh 95 - TEST_GEN_PROGS += so_incoming_cpu 96 - TEST_PROGS += sctp_vrf.sh 97 - TEST_GEN_FILES += sctp_hello 98 - TEST_GEN_FILES += ip_local_port_range 99 - TEST_GEN_PROGS += bind_wildcard 100 - TEST_GEN_PROGS += bind_timewait 101 - TEST_PROGS += test_vxlan_mdb.sh 102 - TEST_PROGS += test_bridge_neigh_suppress.sh 103 - TEST_PROGS += test_vxlan_nh.sh 104 - TEST_PROGS += test_vxlan_nolocalbypass.sh 105 - TEST_PROGS += test_bridge_backup_port.sh 106 - TEST_PROGS += test_neigh.sh 107 - TEST_PROGS += fdb_flush.sh fdb_notify.sh 108 - TEST_PROGS += fq_band_pktlimit.sh 109 - TEST_PROGS += vlan_hw_filter.sh 110 - TEST_PROGS += vlan_bridge_binding.sh 111 - TEST_PROGS += bpf_offload.py 112 - TEST_PROGS += ipv6_route_update_soft_lockup.sh 113 - TEST_PROGS += busy_poll_test.sh 114 - TEST_GEN_PROGS += proc_net_pktgen 115 - TEST_PROGS += lwt_dst_cache_ref_loop.sh 116 - TEST_PROGS += skf_net_off.sh 117 - TEST_GEN_FILES += skf_net_off 118 - TEST_GEN_FILES += tfo 119 - TEST_PROGS += tfo_passive.sh 120 - TEST_PROGS += broadcast_ether_dst.sh 121 - TEST_PROGS += broadcast_pmtu.sh 122 - TEST_PROGS += ipv6_force_forwarding.sh 123 - TEST_GEN_PROGS += ipv6_fragmentation 124 - TEST_PROGS += route_hint.sh 125 - TEST_GEN_PROGS += tcp_port_share 9 + TEST_PROGS := \ 10 + altnames.sh \ 11 + amt.sh \ 12 + arp_ndisc_evict_nocarrier.sh \ 13 + arp_ndisc_untracked_subnets.sh \ 14 + bareudp.sh \ 15 + big_tcp.sh \ 16 + bind_bhash.sh \ 17 + bpf_offload.py \ 18 + broadcast_ether_dst.sh \ 19 + broadcast_pmtu.sh \ 20 + busy_poll_test.sh \ 21 + cmsg_ip.sh \ 22 + cmsg_so_mark.sh \ 23 + cmsg_so_priority.sh \ 24 + cmsg_time.sh \ 25 + drop_monitor_tests.sh \ 26 + fcnal-ipv4.sh \ 27 + fcnal-ipv6.sh \ 28 + fcnal-other.sh \ 29 + fdb_flush.sh \ 30 + fdb_notify.sh \ 31 + fib-onlink-tests.sh \ 32 + fib_nexthop_multiprefix.sh \ 33 + fib_nexthop_nongw.sh \ 34 + fib_nexthops.sh \ 35 + fib_rule_tests.sh \ 36 + fib_tests.sh \ 37 + fin_ack_lat.sh \ 38 + fq_band_pktlimit.sh \ 39 + gre_gso.sh \ 40 + gre_ipv6_lladdr.sh \ 41 + gro.sh \ 42 + icmp.sh \ 43 + icmp_redirect.sh \ 44 + io_uring_zerocopy_tx.sh \ 45 + ioam6.sh \ 46 + ip6_gre_headroom.sh \ 47 + ip_defrag.sh \ 48 + ip_local_port_range.sh \ 49 + ipv6_flowlabel.sh \ 50 + ipv6_force_forwarding.sh \ 51 + ipv6_route_update_soft_lockup.sh \ 52 + l2_tos_ttl_inherit.sh \ 53 + l2tp.sh \ 54 + link_netns.py \ 55 + lwt_dst_cache_ref_loop.sh \ 56 + msg_zerocopy.sh \ 57 + nat6to4.sh \ 58 + ndisc_unsolicited_na_test.sh \ 59 + netdev-l2addr.sh \ 60 + netdevice.sh \ 61 + netns-name.sh \ 62 + netns-sysctl.sh \ 63 + nl_netdev.py \ 64 + pmtu.sh \ 65 + psock_snd.sh \ 66 + reuseaddr_ports_exhausted.sh \ 67 + reuseport_addr_any.sh \ 68 + route_hint.sh \ 69 + route_localnet.sh \ 70 + rps_default_mask.sh \ 71 + rtnetlink.py \ 72 + rtnetlink.sh \ 73 + rtnetlink_notification.sh \ 74 + run_afpackettests \ 75 + run_netsocktests \ 76 + rxtimestamp.sh \ 77 + sctp_vrf.sh \ 78 + skf_net_off.sh \ 79 + so_txtime.sh \ 80 + srv6_end_dt46_l3vpn_test.sh \ 81 + srv6_end_dt4_l3vpn_test.sh \ 82 + srv6_end_dt6_l3vpn_test.sh \ 83 + srv6_end_dx4_netfilter_test.sh \ 84 + srv6_end_dx6_netfilter_test.sh \ 85 + srv6_end_flavors_test.sh \ 86 + srv6_end_next_csid_l3vpn_test.sh \ 87 + srv6_end_x_next_csid_l3vpn_test.sh \ 88 + srv6_hencap_red_l3vpn_test.sh \ 89 + srv6_hl2encap_red_l2vpn_test.sh \ 90 + stress_reuseport_listen.sh \ 91 + tcp_fastopen_backup_key.sh \ 92 + test_bpf.sh \ 93 + test_bridge_backup_port.sh \ 94 + test_bridge_neigh_suppress.sh \ 95 + test_ingress_egress_chaining.sh \ 96 + test_neigh.sh \ 97 + test_so_rcv.sh \ 98 + test_vxlan_fdb_changelink.sh \ 99 + test_vxlan_mdb.sh \ 100 + test_vxlan_nh.sh \ 101 + test_vxlan_nolocalbypass.sh \ 102 + test_vxlan_under_vrf.sh \ 103 + test_vxlan_vnifiltering.sh \ 104 + tfo_passive.sh \ 105 + traceroute.sh \ 106 + txtimestamp.sh \ 107 + udpgro.sh \ 108 + udpgro_bench.sh \ 109 + udpgro_frglist.sh \ 110 + udpgro_fwd.sh \ 111 + udpgso.sh \ 112 + udpgso_bench.sh \ 113 + unicast_extensions.sh \ 114 + veth.sh \ 115 + vlan_bridge_binding.sh \ 116 + vlan_hw_filter.sh \ 117 + vrf-xfrm-tests.sh \ 118 + vrf_route_leaking.sh \ 119 + vrf_strict_mode_test.sh \ 120 + xfrm_policy.sh \ 121 + # end of TEST_PROGS 122 + 123 + TEST_PROGS_EXTENDED := \ 124 + toeplitz.sh \ 125 + toeplitz_client.sh \ 126 + xfrm_policy_add_speed.sh \ 127 + # end of TEST_PROGS_EXTENDED 128 + 129 + TEST_GEN_FILES := \ 130 + bind_bhash \ 131 + cmsg_sender \ 132 + fin_ack_lat \ 133 + gro \ 134 + hwtstamp_config \ 135 + io_uring_zerocopy_tx \ 136 + ioam6_parser \ 137 + ip_defrag \ 138 + ip_local_port_range \ 139 + ipsec \ 140 + ipv6_flowlabel \ 141 + ipv6_flowlabel_mgr \ 142 + msg_zerocopy \ 143 + nettest \ 144 + psock_fanout \ 145 + psock_snd \ 146 + psock_tpacket \ 147 + reuseaddr_ports_exhausted \ 148 + reuseport_addr_any \ 149 + rxtimestamp \ 150 + sctp_hello \ 151 + skf_net_off \ 152 + so_netns_cookie \ 153 + so_rcv_listener \ 154 + so_txtime \ 155 + socket \ 156 + stress_reuseport_listen \ 157 + tcp_fastopen_backup_key \ 158 + tcp_inq \ 159 + tcp_mmap \ 160 + tfo \ 161 + timestamping \ 162 + toeplitz \ 163 + txring_overwrite \ 164 + txtimestamp \ 165 + udpgso \ 166 + udpgso_bench_rx \ 167 + udpgso_bench_tx \ 168 + # end of TEST_GEN_FILES 169 + 170 + TEST_GEN_PROGS := \ 171 + bind_timewait \ 172 + bind_wildcard \ 173 + epoll_busy_poll \ 174 + ipv6_fragmentation \ 175 + proc_net_pktgen \ 176 + reuseaddr_conflict \ 177 + reuseport_bpf \ 178 + reuseport_bpf_cpu \ 179 + reuseport_bpf_numa \ 180 + reuseport_dualstack \ 181 + sk_bind_sendto_listen \ 182 + sk_connect_zero_addr \ 183 + sk_so_peek_off \ 184 + so_incoming_cpu \ 185 + tap \ 186 + tcp_port_share \ 187 + tls \ 188 + tun \ 189 + # end of TEST_GEN_PROGS 190 + 191 + TEST_FILES := \ 192 + fcnal-test.sh \ 193 + in_netns.sh \ 194 + lib.sh \ 195 + settings \ 196 + setup_loopback.sh \ 197 + setup_veth.sh \ 198 + # end of TEST_FILES 126 199 127 200 # YNL files, must be before "include ..lib.mk" 128 201 YNL_GEN_FILES := busy_poller 129 202 YNL_GEN_PROGS := netlink-dumps 130 203 TEST_GEN_FILES += $(YNL_GEN_FILES) 131 204 TEST_GEN_PROGS += $(YNL_GEN_PROGS) 132 - 133 - TEST_FILES := settings 134 - TEST_FILES += fcnal-test.sh 135 - TEST_FILES += in_netns.sh lib.sh setup_loopback.sh setup_veth.sh 136 205 137 206 TEST_GEN_FILES += $(patsubst %.c,%.o,$(wildcard *.bpf.c)) 138 207
+9 -1
tools/testing/selftests/net/af_unix/Makefile
··· 1 1 CFLAGS += $(KHDR_INCLUDES) -Wall -Wflex-array-member-not-at-end 2 - TEST_GEN_PROGS := diag_uid msg_oob scm_inq scm_pidfd scm_rights unix_connect 2 + 3 + TEST_GEN_PROGS := \ 4 + diag_uid \ 5 + msg_oob \ 6 + scm_inq \ 7 + scm_pidfd \ 8 + scm_rights \ 9 + unix_connect \ 10 + # end of TEST_GEN_PROGS 3 11 4 12 include ../../lib.mk
+1 -1
tools/testing/selftests/net/af_unix/config
··· 1 - CONFIG_UNIX=y 2 1 CONFIG_AF_UNIX_OOB=y 2 + CONFIG_UNIX=y 3 3 CONFIG_UNIX_DIAG=m
+70 -70
tools/testing/selftests/net/config
··· 1 - CONFIG_USER_NS=y 2 - CONFIG_NET_NS=y 1 + CONFIG_AMT=m 2 + CONFIG_BAREUDP=m 3 3 CONFIG_BONDING=m 4 4 CONFIG_BPF_SYSCALL=y 5 - CONFIG_TEST_BPF=m 6 - CONFIG_NUMA=y 7 - CONFIG_RPS=y 8 - CONFIG_SYSFS=y 9 - CONFIG_PROC_SYSCTL=y 10 - CONFIG_NET_VRF=y 11 - CONFIG_NET_L3_MASTER_DEV=y 12 - CONFIG_IPV6=y 13 - CONFIG_IPV6_MULTIPLE_TABLES=y 14 - CONFIG_VETH=y 15 - CONFIG_NET_IPVTI=y 16 - CONFIG_IPV6_VTI=y 17 - CONFIG_DUMMY=y 18 - CONFIG_BRIDGE_VLAN_FILTERING=y 19 5 CONFIG_BRIDGE=y 6 + CONFIG_BRIDGE_VLAN_FILTERING=y 7 + CONFIG_CAN=m 8 + CONFIG_CAN_DEV=m 9 + CONFIG_CAN_VXCAN=m 10 + CONFIG_CRYPTO_ARIA=y 20 11 CONFIG_CRYPTO_CHACHA20POLY1305=m 12 + CONFIG_CRYPTO_SHA1=y 13 + CONFIG_CRYPTO_SM4_GENERIC=y 21 14 CONFIG_DEBUG_INFO_BTF=y 22 15 CONFIG_DEBUG_INFO_BTF_MODULES=n 23 - CONFIG_VLAN_8021Q=y 16 + CONFIG_DUMMY=y 24 17 CONFIG_GENEVE=m 25 18 CONFIG_IFB=y 26 19 CONFIG_INET_DIAG=y 27 20 CONFIG_INET_ESP=y 28 21 CONFIG_INET_ESP_OFFLOAD=y 29 - CONFIG_CRYPTO_SHA1=y 30 - CONFIG_NET_FOU=y 31 - CONFIG_NET_FOU_IP_TUNNELS=y 32 - CONFIG_NETFILTER=y 33 - CONFIG_NETFILTER_ADVANCED=y 34 - CONFIG_NETFILTER_XTABLES_LEGACY=y 35 - CONFIG_NF_CONNTRACK=m 36 - CONFIG_IPV6_MROUTE=y 37 - CONFIG_IPV6_SIT=y 38 - CONFIG_NF_NAT=m 22 + CONFIG_IP6_NF_FILTER=m 39 23 CONFIG_IP6_NF_IPTABLES=m 40 24 CONFIG_IP6_NF_IPTABLES_LEGACY=m 41 - CONFIG_IP_NF_IPTABLES=m 42 - CONFIG_IP_NF_IPTABLES_LEGACY=m 43 25 CONFIG_IP6_NF_MANGLE=m 44 - CONFIG_IP6_NF_FILTER=m 26 + CONFIG_IP6_NF_MATCH_RPFILTER=m 45 27 CONFIG_IP6_NF_NAT=m 46 28 CONFIG_IP6_NF_RAW=m 47 - CONFIG_IP_NF_MANGLE=m 29 + CONFIG_IP6_NF_TARGET_REJECT=m 48 30 CONFIG_IP_NF_FILTER=m 31 + CONFIG_IP_NF_IPTABLES=m 32 + CONFIG_IP_NF_IPTABLES_LEGACY=m 33 + CONFIG_IP_NF_MANGLE=m 34 + CONFIG_IP_NF_MATCH_RPFILTER=m 49 35 CONFIG_IP_NF_NAT=m 50 36 CONFIG_IP_NF_RAW=m 51 37 CONFIG_IP_NF_TARGET_REJECT=m 52 - CONFIG_IP6_NF_TARGET_REJECT=m 53 38 CONFIG_IP_NF_TARGET_TTL=m 39 + CONFIG_IP_SCTP=m 40 + CONFIG_IPV6=y 54 41 CONFIG_IPV6_GRE=m 42 + CONFIG_IPV6_ILA=m 43 + CONFIG_IPV6_IOAM6_LWTUNNEL=y 44 + CONFIG_IPV6_MROUTE=y 45 + CONFIG_IPV6_MULTIPLE_TABLES=y 46 + CONFIG_IPV6_RPL_LWTUNNEL=y 55 47 CONFIG_IPV6_SEG6_LWTUNNEL=y 48 + CONFIG_IPV6_SIT=y 49 + CONFIG_IPV6_VTI=y 50 + CONFIG_IPVLAN=m 51 + CONFIG_KALLSYMS=y 52 + CONFIG_L2TP=m 56 53 CONFIG_L2TP_ETH=m 57 54 CONFIG_L2TP_IP=m 58 - CONFIG_L2TP=m 59 55 CONFIG_L2TP_V3=y 60 56 CONFIG_MACSEC=m 61 57 CONFIG_MACVLAN=y 62 58 CONFIG_MACVTAP=y 63 59 CONFIG_MPLS=y 60 + CONFIG_MPLS_IPTUNNEL=m 61 + CONFIG_MPLS_ROUTING=m 64 62 CONFIG_MPTCP=y 65 - CONFIG_NF_TABLES=m 66 - CONFIG_NF_TABLES_IPV6=y 67 - CONFIG_NF_TABLES_IPV4=y 68 - CONFIG_NFT_NAT=m 69 - CONFIG_NETFILTER_XT_MATCH_LENGTH=m 70 - CONFIG_NETFILTER_XT_TARGET_HL=m 71 - CONFIG_NETFILTER_XT_NAT=m 72 63 CONFIG_NET_ACT_CSUM=m 73 64 CONFIG_NET_ACT_CT=m 74 65 CONFIG_NET_ACT_GACT=m 66 + CONFIG_NET_ACT_MIRRED=m 75 67 CONFIG_NET_ACT_PEDIT=m 68 + CONFIG_NET_ACT_TUNNEL_KEY=m 76 69 CONFIG_NET_CLS_BASIC=m 77 70 CONFIG_NET_CLS_BPF=m 71 + CONFIG_NET_CLS_FLOWER=m 78 72 CONFIG_NET_CLS_MATCHALL=m 79 73 CONFIG_NET_CLS_U32=m 80 - CONFIG_NET_IPGRE_DEMUX=m 74 + CONFIG_NETDEVSIM=m 75 + CONFIG_NET_DROP_MONITOR=m 76 + CONFIG_NETFILTER=y 77 + CONFIG_NETFILTER_ADVANCED=y 78 + CONFIG_NETFILTER_XTABLES_LEGACY=y 79 + CONFIG_NETFILTER_XT_MATCH_LENGTH=m 80 + CONFIG_NETFILTER_XT_MATCH_POLICY=m 81 + CONFIG_NETFILTER_XT_NAT=m 82 + CONFIG_NETFILTER_XT_TARGET_HL=m 83 + CONFIG_NET_FOU=y 84 + CONFIG_NET_FOU_IP_TUNNELS=y 81 85 CONFIG_NET_IPGRE=m 86 + CONFIG_NET_IPGRE_DEMUX=m 82 87 CONFIG_NET_IPIP=y 88 + CONFIG_NET_IPVTI=y 89 + CONFIG_NETKIT=y 90 + CONFIG_NET_L3_MASTER_DEV=y 91 + CONFIG_NET_NS=y 92 + CONFIG_NET_PKTGEN=m 93 + CONFIG_NET_SCH_ETF=m 94 + CONFIG_NET_SCH_FQ=m 83 95 CONFIG_NET_SCH_FQ_CODEL=m 84 96 CONFIG_NET_SCH_HTB=m 85 - CONFIG_NET_SCH_FQ=m 86 - CONFIG_NET_SCH_ETF=m 97 + CONFIG_NET_SCH_INGRESS=m 87 98 CONFIG_NET_SCH_NETEM=y 88 99 CONFIG_NET_SCH_PRIO=m 89 - CONFIG_NFT_COMPAT=m 100 + CONFIG_NET_VRF=y 101 + CONFIG_NF_CONNTRACK=m 90 102 CONFIG_NF_CONNTRACK_OVS=y 91 103 CONFIG_NF_FLOW_TABLE=m 104 + CONFIG_NF_NAT=m 105 + CONFIG_NF_TABLES=m 106 + CONFIG_NF_TABLES_IPV4=y 107 + CONFIG_NF_TABLES_IPV6=y 108 + CONFIG_NFT_COMPAT=m 109 + CONFIG_NFT_NAT=m 110 + CONFIG_NUMA=y 92 111 CONFIG_OPENVSWITCH=m 93 112 CONFIG_OPENVSWITCH_GENEVE=m 94 113 CONFIG_OPENVSWITCH_GRE=m 95 114 CONFIG_OPENVSWITCH_VXLAN=m 115 + CONFIG_PROC_SYSCTL=y 96 116 CONFIG_PSAMPLE=m 117 + CONFIG_RPS=y 118 + CONFIG_SYSFS=y 97 119 CONFIG_TCP_MD5SIG=y 98 120 CONFIG_TEST_BLACKHOLE_DEV=m 99 - CONFIG_KALLSYMS=y 121 + CONFIG_TEST_BPF=m 100 122 CONFIG_TLS=m 101 123 CONFIG_TRACEPOINTS=y 102 - CONFIG_NET_DROP_MONITOR=m 103 - CONFIG_NETDEVSIM=m 104 - CONFIG_MPLS_ROUTING=m 105 - CONFIG_MPLS_IPTUNNEL=m 106 - CONFIG_NET_SCH_INGRESS=m 107 - CONFIG_NET_CLS_FLOWER=m 108 - CONFIG_NET_ACT_TUNNEL_KEY=m 109 - CONFIG_NET_ACT_MIRRED=m 110 - CONFIG_BAREUDP=m 111 - CONFIG_IPV6_IOAM6_LWTUNNEL=y 112 - CONFIG_CRYPTO_SM4_GENERIC=y 113 - CONFIG_AMT=m 114 124 CONFIG_TUN=y 125 + CONFIG_USER_NS=y 126 + CONFIG_VETH=y 127 + CONFIG_VLAN_8021Q=y 115 128 CONFIG_VXLAN=m 116 - CONFIG_IP_SCTP=m 117 - CONFIG_NETFILTER_XT_MATCH_POLICY=m 118 - CONFIG_CRYPTO_ARIA=y 119 129 CONFIG_XFRM_INTERFACE=m 120 130 CONFIG_XFRM_USER=m 121 - CONFIG_IP_NF_MATCH_RPFILTER=m 122 - CONFIG_IP6_NF_MATCH_RPFILTER=m 123 - CONFIG_IPVLAN=m 124 - CONFIG_CAN=m 125 - CONFIG_CAN_DEV=m 126 - CONFIG_CAN_VXCAN=m 127 - CONFIG_NETKIT=y 128 - CONFIG_NET_PKTGEN=m 129 - CONFIG_IPV6_ILA=m 130 - CONFIG_IPV6_RPL_LWTUNNEL=y
+31 -27
tools/testing/selftests/net/forwarding/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0+ OR MIT 2 2 3 - TEST_PROGS = \ 3 + TEST_PROGS := \ 4 4 bridge_activity_notify.sh \ 5 5 bridge_fdb_learning_limit.sh \ 6 + bridge_fdb_local_vlan_0.sh \ 6 7 bridge_igmp.sh \ 7 8 bridge_locked_port.sh \ 8 - bridge_fdb_local_vlan_0.sh \ 9 9 bridge_mdb.sh \ 10 10 bridge_mdb_host.sh \ 11 11 bridge_mdb_max.sh \ ··· 21 21 gre_custom_multipath_hash.sh \ 22 22 gre_inner_v4_multipath.sh \ 23 23 gre_inner_v6_multipath.sh \ 24 - gre_multipath_nh_res.sh \ 25 - gre_multipath_nh.sh \ 26 24 gre_multipath.sh \ 25 + gre_multipath_nh.sh \ 26 + gre_multipath_nh_res.sh \ 27 27 ip6_forward_instats_vrf.sh \ 28 28 ip6gre_custom_multipath_hash.sh \ 29 + ip6gre_flat.sh \ 29 30 ip6gre_flat_key.sh \ 30 31 ip6gre_flat_keys.sh \ 31 - ip6gre_flat.sh \ 32 + ip6gre_hier.sh \ 32 33 ip6gre_hier_key.sh \ 33 34 ip6gre_hier_keys.sh \ 34 - ip6gre_hier.sh \ 35 35 ip6gre_inner_v4_multipath.sh \ 36 36 ip6gre_inner_v6_multipath.sh \ 37 + ipip_flat_gre.sh \ 37 38 ipip_flat_gre_key.sh \ 38 39 ipip_flat_gre_keys.sh \ 39 - ipip_flat_gre.sh \ 40 + ipip_hier_gre.sh \ 40 41 ipip_hier_gre_key.sh \ 41 42 ipip_hier_gre_keys.sh \ 42 - ipip_hier_gre.sh \ 43 43 lib_sh_test.sh \ 44 44 local_termination.sh \ 45 45 min_max_mtu.sh \ 46 + mirror_gre.sh \ 46 47 mirror_gre_bound.sh \ 47 48 mirror_gre_bridge_1d.sh \ 48 49 mirror_gre_bridge_1d_vlan.sh \ 49 - mirror_gre_bridge_1q_lag.sh \ 50 50 mirror_gre_bridge_1q.sh \ 51 + mirror_gre_bridge_1q_lag.sh \ 51 52 mirror_gre_changes.sh \ 52 53 mirror_gre_flower.sh \ 53 54 mirror_gre_lag_lacp.sh \ 54 55 mirror_gre_neigh.sh \ 55 56 mirror_gre_nh.sh \ 56 - mirror_gre.sh \ 57 - mirror_gre_vlan_bridge_1q.sh \ 58 57 mirror_gre_vlan.sh \ 58 + mirror_gre_vlan_bridge_1q.sh \ 59 59 mirror_vlan.sh \ 60 60 no_forwarding.sh \ 61 61 pedit_dsfield.sh \ 62 62 pedit_ip.sh \ 63 63 pedit_l4port.sh \ 64 - q_in_vni_ipv6.sh \ 65 64 q_in_vni.sh \ 65 + q_in_vni_ipv6.sh \ 66 + router.sh \ 66 67 router_bridge.sh \ 67 68 router_bridge_1d.sh \ 68 69 router_bridge_1d_lag.sh \ 69 70 router_bridge_lag.sh \ 71 + router_bridge_pvid_vlan_upper.sh \ 70 72 router_bridge_vlan.sh \ 71 73 router_bridge_vlan_upper.sh \ 72 - router_bridge_pvid_vlan_upper.sh \ 73 74 router_bridge_vlan_upper_pvid.sh \ 74 75 router_broadcast.sh \ 75 - router_mpath_nh_res.sh \ 76 76 router_mpath_nh.sh \ 77 + router_mpath_nh_res.sh \ 77 78 router_mpath_seed.sh \ 78 79 router_multicast.sh \ 79 80 router_multipath.sh \ 80 81 router_nh.sh \ 81 - router.sh \ 82 82 router_vid_1.sh \ 83 83 sch_ets.sh \ 84 84 sch_red.sh \ ··· 88 88 skbedit_priority.sh \ 89 89 tc_actions.sh \ 90 90 tc_chains.sh \ 91 - tc_flower_router.sh \ 92 91 tc_flower.sh \ 93 - tc_flower_l2_miss.sh \ 94 92 tc_flower_cfm.sh \ 93 + tc_flower_l2_miss.sh \ 95 94 tc_flower_port_range.sh \ 95 + tc_flower_router.sh \ 96 96 tc_mpls_l2vpn.sh \ 97 97 tc_police.sh \ 98 98 tc_shblocks.sh \ 99 99 tc_tunnel_key.sh \ 100 100 tc_vlan_modify.sh \ 101 - vxlan_asymmetric_ipv6.sh \ 102 101 vxlan_asymmetric.sh \ 103 - vxlan_bridge_1d_ipv6.sh \ 104 - vxlan_bridge_1d_port_8472_ipv6.sh \ 105 - vxlan_bridge_1d_port_8472.sh \ 102 + vxlan_asymmetric_ipv6.sh \ 106 103 vxlan_bridge_1d.sh \ 104 + vxlan_bridge_1d_ipv6.sh \ 105 + vxlan_bridge_1d_port_8472.sh \ 106 + vxlan_bridge_1d_port_8472_ipv6.sh \ 107 + vxlan_bridge_1q.sh \ 107 108 vxlan_bridge_1q_ipv6.sh \ 108 109 vxlan_bridge_1q_mc_ul.sh \ 109 - vxlan_bridge_1q_port_8472_ipv6.sh \ 110 110 vxlan_bridge_1q_port_8472.sh \ 111 - vxlan_bridge_1q.sh \ 111 + vxlan_bridge_1q_port_8472_ipv6.sh \ 112 112 vxlan_reserved.sh \ 113 + vxlan_symmetric.sh \ 113 114 vxlan_symmetric_ipv6.sh \ 114 - vxlan_symmetric.sh 115 + # end of TEST_PROGS 115 116 116 - TEST_FILES := devlink_lib.sh \ 117 + TEST_FILES := \ 118 + devlink_lib.sh \ 117 119 fib_offload_lib.sh \ 118 120 forwarding.config.sample \ 119 121 ip6gre_lib.sh \ ··· 130 128 sch_ets_tests.sh \ 131 129 sch_tbf_core.sh \ 132 130 sch_tbf_etsprio.sh \ 133 - tc_common.sh 131 + tc_common.sh \ 132 + # end of TEST_FILES 134 133 135 134 TEST_INCLUDES := \ 135 + $(wildcard ../lib/sh/*.sh) \ 136 136 ../lib.sh \ 137 - $(wildcard ../lib/sh/*.sh) 137 + # end of TEST_INCLUDES 138 138 139 139 include ../../lib.mk
+17 -17
tools/testing/selftests/net/forwarding/config
··· 1 - CONFIG_BRIDGE=m 2 - CONFIG_VLAN_8021Q=m 3 - CONFIG_BRIDGE_VLAN_FILTERING=y 4 - CONFIG_BRIDGE_IGMP_SNOOPING=y 5 - CONFIG_NET_L3_MASTER_DEV=y 6 - CONFIG_IPV6_MULTIPLE_TABLES=y 7 - CONFIG_NET_VRF=m 8 1 CONFIG_BPF_SYSCALL=y 2 + CONFIG_BRIDGE=m 3 + CONFIG_BRIDGE_IGMP_SNOOPING=y 4 + CONFIG_BRIDGE_VLAN_FILTERING=y 9 5 CONFIG_CGROUP_BPF=y 10 6 CONFIG_DUMMY=m 11 - CONFIG_IPV6=y 12 - CONFIG_IPV6_GRE=m 13 - CONFIG_IPV6_MROUTE=y 14 - CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y 15 - CONFIG_IPV6_PIMSM_V2=y 16 7 CONFIG_IP_MROUTE=y 17 8 CONFIG_IP_MROUTE_MULTIPLE_TABLES=y 18 9 CONFIG_IP_PIMSM_V1=y 19 10 CONFIG_IP_PIMSM_V2=y 11 + CONFIG_IPV6=y 12 + CONFIG_IPV6_GRE=m 13 + CONFIG_IPV6_MROUTE=y 14 + CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y 15 + CONFIG_IPV6_MULTIPLE_TABLES=y 16 + CONFIG_IPV6_PIMSM_V2=y 20 17 CONFIG_MACVLAN=m 18 + CONFIG_NAMESPACES=y 21 19 CONFIG_NET_ACT_CT=m 20 + CONFIG_NET_ACT_GACT=m 22 21 CONFIG_NET_ACT_MIRRED=m 23 22 CONFIG_NET_ACT_MPLS=m 24 23 CONFIG_NET_ACT_PEDIT=m ··· 26 27 CONFIG_NET_ACT_SKBEDIT=m 27 28 CONFIG_NET_ACT_TUNNEL_KEY=m 28 29 CONFIG_NET_ACT_VLAN=m 30 + CONFIG_NET_CLS_BASIC=m 29 31 CONFIG_NET_CLS_FLOWER=m 30 32 CONFIG_NET_CLS_MATCHALL=m 31 - CONFIG_NET_CLS_BASIC=m 32 33 CONFIG_NET_EMATCH=y 33 34 CONFIG_NET_EMATCH_META=m 35 + CONFIG_NETFILTER=y 34 36 CONFIG_NET_IPGRE=m 35 37 CONFIG_NET_IPGRE_DEMUX=m 36 38 CONFIG_NET_IPIP=m 39 + CONFIG_NET_L3_MASTER_DEV=y 40 + CONFIG_NET_NS=y 37 41 CONFIG_NET_SCH_ETS=m 38 42 CONFIG_NET_SCH_INGRESS=m 39 - CONFIG_NET_ACT_GACT=m 40 43 CONFIG_NET_SCH_PRIO=m 41 44 CONFIG_NET_SCH_RED=m 42 45 CONFIG_NET_SCH_TBF=m 43 46 CONFIG_NET_TC_SKB_EXT=y 44 47 CONFIG_NET_TEAM=y 45 48 CONFIG_NET_TEAM_MODE_LOADBALANCE=y 46 - CONFIG_NETFILTER=y 49 + CONFIG_NET_VRF=m 47 50 CONFIG_NF_CONNTRACK=m 48 51 CONFIG_NF_FLOW_TABLE=m 49 52 CONFIG_NF_TABLES=m 50 53 CONFIG_VETH=m 51 - CONFIG_NAMESPACES=y 52 - CONFIG_NET_NS=y 54 + CONFIG_VLAN_8021Q=m 53 55 CONFIG_VXLAN=m 54 56 CONFIG_XFRM_USER=m
+5 -1
tools/testing/selftests/net/hsr/Makefile
··· 2 2 3 3 top_srcdir = ../../../../.. 4 4 5 - TEST_PROGS := hsr_ping.sh hsr_redbox.sh 5 + TEST_PROGS := \ 6 + hsr_ping.sh \ 7 + hsr_redbox.sh \ 8 + # end of TEST_PROGS 9 + 6 10 TEST_FILES += hsr_common.sh 7 11 8 12 include ../../lib.mk
+2 -2
tools/testing/selftests/net/hsr/config
··· 1 + CONFIG_BRIDGE=y 2 + CONFIG_HSR=y 1 3 CONFIG_IPV6=y 2 4 CONFIG_NET_SCH_NETEM=m 3 - CONFIG_HSR=y 4 5 CONFIG_VETH=y 5 - CONFIG_BRIDGE=y 6 6 CONFIG_VLAN_8021Q=m
+9 -5
tools/testing/selftests/net/lib/Makefile
··· 5 5 # Additional include paths needed by kselftest.h 6 6 CFLAGS += -I../../ 7 7 8 - TEST_FILES := ../../../../../Documentation/netlink/specs 9 - TEST_FILES += ../../../../net/ynl 8 + TEST_FILES := \ 9 + ../../../../net/ynl \ 10 + ../../../../../Documentation/netlink/specs \ 11 + # end of TEST_FILES 10 12 11 - TEST_GEN_FILES += csum 12 - TEST_GEN_FILES += $(patsubst %.c,%.o,$(wildcard *.bpf.c)) 13 - TEST_GEN_FILES += xdp_helper 13 + TEST_GEN_FILES := \ 14 + $(patsubst %.c,%.o,$(wildcard *.bpf.c)) \ 15 + csum \ 16 + xdp_helper \ 17 + # end of TEST_GEN_FILES 14 18 15 19 TEST_INCLUDES := $(wildcard py/*.py sh/*.sh) 16 20
+23 -5
tools/testing/selftests/net/mptcp/Makefile
··· 4 4 5 5 CFLAGS += -Wall -Wl,--no-as-needed -O2 -g -I$(top_srcdir)/usr/include $(KHDR_INCLUDES) 6 6 7 - TEST_PROGS := mptcp_connect.sh mptcp_connect_mmap.sh mptcp_connect_sendfile.sh \ 8 - mptcp_connect_checksum.sh pm_netlink.sh mptcp_join.sh diag.sh \ 9 - simult_flows.sh mptcp_sockopt.sh userspace_pm.sh 7 + TEST_PROGS := \ 8 + diag.sh \ 9 + mptcp_connect.sh \ 10 + mptcp_connect_checksum.sh \ 11 + mptcp_connect_mmap.sh \ 12 + mptcp_connect_sendfile.sh \ 13 + mptcp_join.sh \ 14 + mptcp_sockopt.sh \ 15 + pm_netlink.sh \ 16 + simult_flows.sh \ 17 + userspace_pm.sh \ 18 + # end of TEST_PROGS 10 19 11 - TEST_GEN_FILES = mptcp_connect pm_nl_ctl mptcp_sockopt mptcp_inq mptcp_diag 20 + TEST_GEN_FILES := \ 21 + mptcp_connect \ 22 + mptcp_diag \ 23 + mptcp_inq \ 24 + mptcp_sockopt \ 25 + pm_nl_ctl \ 26 + # end of TEST_GEN_FILES 12 27 13 - TEST_FILES := mptcp_lib.sh settings 28 + TEST_FILES := \ 29 + mptcp_lib.sh \ 30 + settings \ 31 + # end of TEST_FILES 14 32 15 33 TEST_INCLUDES := ../lib.sh $(wildcard ../lib/sh/*.sh) 16 34
+24 -24
tools/testing/selftests/net/mptcp/config
··· 1 - CONFIG_KALLSYMS=y 2 - CONFIG_MPTCP=y 3 - CONFIG_IPV6=y 4 - CONFIG_MPTCP_IPV6=y 5 1 CONFIG_INET_DIAG=m 6 2 CONFIG_INET_MPTCP_DIAG=m 7 - CONFIG_VETH=y 8 - CONFIG_NET_SCH_NETEM=m 9 - CONFIG_SYN_COOKIES=y 3 + CONFIG_IP6_NF_FILTER=m 4 + CONFIG_IP6_NF_TARGET_REJECT=m 5 + CONFIG_IP_ADVANCED_ROUTER=y 6 + CONFIG_IP_MULTIPLE_TABLES=y 7 + CONFIG_IP_NF_FILTER=m 8 + CONFIG_IP_NF_MANGLE=m 9 + CONFIG_IP_NF_TARGET_REJECT=m 10 + CONFIG_IPV6=y 11 + CONFIG_IPV6_MULTIPLE_TABLES=y 12 + CONFIG_KALLSYMS=y 13 + CONFIG_MPTCP=y 14 + CONFIG_MPTCP_IPV6=y 15 + CONFIG_NET_ACT_CSUM=m 16 + CONFIG_NET_ACT_PEDIT=m 17 + CONFIG_NET_CLS_ACT=y 18 + CONFIG_NET_CLS_FW=m 10 19 CONFIG_NETFILTER=y 11 20 CONFIG_NETFILTER_ADVANCED=y 12 21 CONFIG_NETFILTER_NETLINK=m 13 - CONFIG_NF_TABLES=m 14 - CONFIG_NFT_COMPAT=m 15 22 CONFIG_NETFILTER_XTABLES=m 16 23 CONFIG_NETFILTER_XTABLES_LEGACY=y 17 24 CONFIG_NETFILTER_XT_MATCH_BPF=m 18 25 CONFIG_NETFILTER_XT_MATCH_LENGTH=m 19 26 CONFIG_NETFILTER_XT_MATCH_STATISTIC=m 20 27 CONFIG_NETFILTER_XT_TARGET_MARK=m 21 - CONFIG_NF_TABLES_INET=y 22 - CONFIG_NFT_TPROXY=m 23 - CONFIG_NFT_SOCKET=m 24 - CONFIG_IP_ADVANCED_ROUTER=y 25 - CONFIG_IP_MULTIPLE_TABLES=y 26 - CONFIG_IP_NF_FILTER=m 27 - CONFIG_IP_NF_MANGLE=m 28 - CONFIG_IP_NF_TARGET_REJECT=m 29 - CONFIG_IP6_NF_TARGET_REJECT=m 30 - CONFIG_IPV6_MULTIPLE_TABLES=y 31 - CONFIG_IP6_NF_FILTER=m 32 - CONFIG_NET_ACT_CSUM=m 33 - CONFIG_NET_ACT_PEDIT=m 34 - CONFIG_NET_CLS_ACT=y 35 - CONFIG_NET_CLS_FW=m 36 28 CONFIG_NET_SCH_INGRESS=m 29 + CONFIG_NET_SCH_NETEM=m 30 + CONFIG_NF_TABLES=m 31 + CONFIG_NF_TABLES_INET=y 32 + CONFIG_NFT_COMPAT=m 33 + CONFIG_NFT_SOCKET=m 34 + CONFIG_NFT_TPROXY=m 35 + CONFIG_SYN_COOKIES=y 36 + CONFIG_VETH=y
+49 -40
tools/testing/selftests/net/netfilter/Makefile
··· 6 6 MNL_CFLAGS := $(shell $(HOSTPKG_CONFIG) --cflags libmnl 2>/dev/null) 7 7 MNL_LDLIBS := $(shell $(HOSTPKG_CONFIG) --libs libmnl 2>/dev/null || echo -lmnl) 8 8 9 - TEST_PROGS := br_netfilter.sh bridge_brouter.sh 10 - TEST_PROGS += br_netfilter_queue.sh 11 - TEST_PROGS += conntrack_dump_flush.sh 12 - TEST_PROGS += conntrack_icmp_related.sh 13 - TEST_PROGS += conntrack_ipip_mtu.sh 14 - TEST_PROGS += conntrack_tcp_unreplied.sh 15 - TEST_PROGS += conntrack_resize.sh 16 - TEST_PROGS += conntrack_sctp_collision.sh 17 - TEST_PROGS += conntrack_vrf.sh 18 - TEST_PROGS += conntrack_clash.sh 19 - TEST_PROGS += conntrack_reverse_clash.sh 20 - TEST_PROGS += ipvs.sh 21 - TEST_PROGS += nf_conntrack_packetdrill.sh 22 - TEST_PROGS += nf_nat_edemux.sh 23 - TEST_PROGS += nft_audit.sh 24 - TEST_PROGS += nft_concat_range.sh 25 - TEST_PROGS += nft_conntrack_helper.sh 26 - TEST_PROGS += nft_fib.sh 27 - TEST_PROGS += nft_flowtable.sh 28 - TEST_PROGS += nft_interface_stress.sh 29 - TEST_PROGS += nft_meta.sh 30 - TEST_PROGS += nft_nat.sh 31 - TEST_PROGS += nft_nat_zones.sh 32 - TEST_PROGS += nft_queue.sh 33 - TEST_PROGS += nft_synproxy.sh 34 - TEST_PROGS += nft_tproxy_tcp.sh 35 - TEST_PROGS += nft_tproxy_udp.sh 36 - TEST_PROGS += nft_zones_many.sh 37 - TEST_PROGS += rpath.sh 38 - TEST_PROGS += vxlan_mtu_frag.sh 39 - TEST_PROGS += xt_string.sh 9 + TEST_PROGS := \ 10 + br_netfilter.sh \ 11 + br_netfilter_queue.sh \ 12 + bridge_brouter.sh \ 13 + conntrack_clash.sh \ 14 + conntrack_dump_flush.sh \ 15 + conntrack_icmp_related.sh \ 16 + conntrack_ipip_mtu.sh \ 17 + conntrack_resize.sh \ 18 + conntrack_reverse_clash.sh \ 19 + conntrack_sctp_collision.sh \ 20 + conntrack_tcp_unreplied.sh \ 21 + conntrack_vrf.sh \ 22 + ipvs.sh \ 23 + nf_conntrack_packetdrill.sh \ 24 + nf_nat_edemux.sh \ 25 + nft_audit.sh \ 26 + nft_concat_range.sh \ 27 + nft_conntrack_helper.sh \ 28 + nft_fib.sh \ 29 + nft_flowtable.sh \ 30 + nft_interface_stress.sh \ 31 + nft_meta.sh \ 32 + nft_nat.sh \ 33 + nft_nat_zones.sh \ 34 + nft_queue.sh \ 35 + nft_synproxy.sh \ 36 + nft_tproxy_tcp.sh \ 37 + nft_tproxy_udp.sh \ 38 + nft_zones_many.sh \ 39 + rpath.sh \ 40 + vxlan_mtu_frag.sh \ 41 + xt_string.sh \ 42 + # end of TEST_PROGS 40 43 41 44 TEST_PROGS_EXTENDED = nft_concat_range_perf.sh 42 45 43 - TEST_GEN_FILES = audit_logread 44 - TEST_GEN_FILES += connect_close nf_queue 45 - TEST_GEN_FILES += conntrack_dump_flush 46 - TEST_GEN_FILES += conntrack_reverse_clash 47 - TEST_GEN_FILES += sctp_collision 48 - TEST_GEN_FILES += udpclash 46 + TEST_GEN_FILES = \ 47 + audit_logread \ 48 + connect_close \ 49 + conntrack_dump_flush \ 50 + conntrack_reverse_clash \ 51 + nf_queue \ 52 + sctp_collision \ 53 + udpclash \ 54 + # end of TEST_GEN_FILES 49 55 50 56 include ../../lib.mk 51 57 ··· 62 56 $(OUTPUT)/conntrack_dump_flush: LDLIBS += $(MNL_LDLIBS) 63 57 $(OUTPUT)/udpclash: LDLIBS += -lpthread 64 58 65 - TEST_FILES := lib.sh 66 - TEST_FILES += packetdrill 59 + TEST_FILES := \ 60 + lib.sh \ 61 + packetdrill \ 62 + # end of TEST_FILES 67 63 68 64 TEST_INCLUDES := \ 65 + $(wildcard ../lib/sh/*.sh) \ 69 66 ../lib.sh \ 70 - $(wildcard ../lib/sh/*.sh) 67 + # end of TEST_INCLUDES
+29 -29
tools/testing/selftests/net/netfilter/config
··· 1 1 CONFIG_AUDIT=y 2 2 CONFIG_BPF_SYSCALL=y 3 3 CONFIG_BRIDGE=m 4 - CONFIG_NETFILTER_XTABLES_LEGACY=y 5 - CONFIG_BRIDGE_NF_EBTABLES_LEGACY=m 6 4 CONFIG_BRIDGE_EBT_BROUTE=m 7 5 CONFIG_BRIDGE_EBT_IP=m 8 6 CONFIG_BRIDGE_EBT_REDIRECT=m 9 7 CONFIG_BRIDGE_EBT_T_FILTER=m 10 8 CONFIG_BRIDGE_NETFILTER=m 11 9 CONFIG_BRIDGE_NF_EBTABLES=m 10 + CONFIG_BRIDGE_NF_EBTABLES_LEGACY=m 12 11 CONFIG_BRIDGE_VLAN_FILTERING=y 13 12 CONFIG_CGROUP_BPF=y 14 - CONFIG_DUMMY=m 15 - CONFIG_INET_ESP=m 16 13 CONFIG_CRYPTO_SHA1=m 17 - CONFIG_IP_NF_MATCH_RPFILTER=m 18 - CONFIG_IP6_NF_MATCH_RPFILTER=m 19 - CONFIG_IP_NF_IPTABLES=m 20 - CONFIG_IP_NF_IPTABLES_LEGACY=m 14 + CONFIG_DUMMY=m 15 + CONFIG_INET_DIAG=m 16 + CONFIG_INET_ESP=m 17 + CONFIG_INET_SCTP_DIAG=m 18 + CONFIG_IP6_NF_FILTER=m 21 19 CONFIG_IP6_NF_IPTABLES=m 22 20 CONFIG_IP6_NF_IPTABLES_LEGACY=m 23 - CONFIG_IP_NF_NAT=m 24 - CONFIG_IP_NF_FILTER=m 25 - CONFIG_IP6_NF_FILTER=m 26 - CONFIG_IP_NF_RAW=m 21 + CONFIG_IP6_NF_MATCH_RPFILTER=m 27 22 CONFIG_IP6_NF_RAW=m 23 + CONFIG_IP_NF_FILTER=m 24 + CONFIG_IP_NF_IPTABLES=m 25 + CONFIG_IP_NF_IPTABLES_LEGACY=m 26 + CONFIG_IP_NF_MATCH_RPFILTER=m 27 + CONFIG_IP_NF_NAT=m 28 + CONFIG_IP_NF_RAW=m 28 29 CONFIG_IP_SCTP=m 30 + CONFIG_IPV6=y 31 + CONFIG_IPV6_MULTIPLE_TABLES=y 29 32 CONFIG_IP_VS=m 30 33 CONFIG_IP_VS_PROTO_TCP=y 31 34 CONFIG_IP_VS_RR=m 32 - CONFIG_IPV6=y 33 - CONFIG_IPV6_MULTIPLE_TABLES=y 34 35 CONFIG_MACVLAN=m 35 36 CONFIG_NAMESPACES=y 36 37 CONFIG_NET_CLS_U32=m 37 - CONFIG_NET_L3_MASTER_DEV=y 38 - CONFIG_NET_NS=y 39 - CONFIG_NET_SCH_NETEM=m 40 - CONFIG_NET_SCH_HTB=m 41 - CONFIG_NET_IPIP=m 42 - CONFIG_NET_VRF=y 43 38 CONFIG_NETFILTER=y 44 39 CONFIG_NETFILTER_ADVANCED=y 45 40 CONFIG_NETFILTER_NETLINK=m 46 41 CONFIG_NETFILTER_NETLINK_QUEUE=m 47 42 CONFIG_NETFILTER_SYNPROXY=m 48 43 CONFIG_NETFILTER_XTABLES=m 49 - CONFIG_NETFILTER_XT_NAT=m 44 + CONFIG_NETFILTER_XTABLES_LEGACY=y 50 45 CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m 51 46 CONFIG_NETFILTER_XT_MATCH_STATE=m 52 47 CONFIG_NETFILTER_XT_MATCH_STRING=m 48 + CONFIG_NETFILTER_XT_NAT=m 53 49 CONFIG_NETFILTER_XT_TARGET_REDIRECT=m 50 + CONFIG_NET_IPIP=m 51 + CONFIG_NET_L3_MASTER_DEV=y 52 + CONFIG_NET_NS=y 53 + CONFIG_NET_PKTGEN=m 54 + CONFIG_NET_SCH_HTB=m 55 + CONFIG_NET_SCH_NETEM=m 56 + CONFIG_NET_VRF=y 54 57 CONFIG_NF_CONNTRACK=m 55 - CONFIG_NF_CONNTRACK_PROCFS=y 56 58 CONFIG_NF_CONNTRACK_EVENTS=y 57 59 CONFIG_NF_CONNTRACK_FTP=m 58 60 CONFIG_NF_CONNTRACK_MARK=y 61 + CONFIG_NF_CONNTRACK_PROCFS=y 59 62 CONFIG_NF_CONNTRACK_ZONES=y 60 63 CONFIG_NF_CT_NETLINK=m 61 64 CONFIG_NF_CT_PROTO_SCTP=y 62 65 CONFIG_NF_FLOW_TABLE=m 66 + CONFIG_NF_FLOW_TABLE_INET=m 63 67 CONFIG_NF_LOG_IPV4=m 64 68 CONFIG_NF_LOG_IPV6=m 65 69 CONFIG_NF_NAT=m 66 - CONFIG_NF_NAT_REDIRECT=y 67 70 CONFIG_NF_NAT_MASQUERADE=y 71 + CONFIG_NF_NAT_REDIRECT=y 68 72 CONFIG_NF_TABLES=m 69 73 CONFIG_NF_TABLES_BRIDGE=m 70 74 CONFIG_NF_TABLES_INET=y 71 75 CONFIG_NF_TABLES_IPV4=y 72 76 CONFIG_NF_TABLES_IPV6=y 73 77 CONFIG_NF_TABLES_NETDEV=y 74 - CONFIG_NF_FLOW_TABLE_INET=m 75 78 CONFIG_NFT_BRIDGE_META=m 76 79 CONFIG_NFT_COMPAT=m 77 80 CONFIG_NFT_CT=m ··· 93 90 CONFIG_NFT_REDIR=m 94 91 CONFIG_NFT_SYNPROXY=m 95 92 CONFIG_NFT_TPROXY=m 93 + CONFIG_TUN=m 96 94 CONFIG_VETH=m 97 95 CONFIG_VLAN_8021Q=m 98 96 CONFIG_VXLAN=m 99 - CONFIG_XFRM_USER=m 100 97 CONFIG_XFRM_STATISTICS=y 101 - CONFIG_NET_PKTGEN=m 102 - CONFIG_TUN=m 103 - CONFIG_INET_DIAG=m 104 - CONFIG_INET_SCTP_DIAG=m 98 + CONFIG_XFRM_USER=m
+41 -17
tools/testing/selftests/net/netfilter/nf_nat_edemux.sh
··· 17 17 18 18 checktool "socat -h" "run test without socat" 19 19 checktool "iptables --version" "run test without iptables" 20 + checktool "conntrack --version" "run test without conntrack" 20 21 21 22 trap cleanup EXIT 23 + 24 + connect_done() 25 + { 26 + local ns="$1" 27 + local port="$2" 28 + 29 + ip netns exec "$ns" ss -nt -o state established "dport = :$port" | grep -q "$port" 30 + } 31 + 32 + check_ctstate() 33 + { 34 + local ns="$1" 35 + local dp="$2" 36 + 37 + if ! ip netns exec "$ns" conntrack --get -s 192.168.1.2 -d 192.168.1.1 -p tcp \ 38 + --sport 10000 --dport "$dp" --state ESTABLISHED > /dev/null 2>&1;then 39 + echo "FAIL: Did not find expected state for dport $2" 40 + ip netns exec "$ns" bash -c 'conntrack -L; conntrack -S; ss -nt' 41 + ret=1 42 + fi 43 + } 22 44 23 45 setup_ns ns1 ns2 24 46 ··· 66 44 ip netns exec "$ns2" sysctl -q net.ipv4.ip_local_port_range="10000 10000" 67 45 68 46 # add a virtual IP using DNAT 69 - ip netns exec "$ns2" iptables -t nat -A OUTPUT -d 10.96.0.1/32 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.1:5201 47 + ip netns exec "$ns2" iptables -t nat -A OUTPUT -d 10.96.0.1/32 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.1:5201 || exit 1 70 48 71 49 # ... and route it to the other namespace 72 50 ip netns exec "$ns2" ip route add 10.96.0.1 via 192.168.1.1 73 51 74 - # add a persistent connection from the other namespace 75 - ip netns exec "$ns2" socat -t 10 - TCP:192.168.1.1:5201 > /dev/null & 52 + # listener should be up by now, wait if it isn't yet. 53 + wait_local_port_listen "$ns1" 5201 tcp 76 54 77 - sleep 1 55 + # add a persistent connection from the other namespace 56 + sleep 10 | ip netns exec "$ns2" socat -t 10 - TCP:192.168.1.1:5201 > /dev/null & 57 + cpid0=$! 58 + busywait "$BUSYWAIT_TIMEOUT" connect_done "$ns2" "5201" 78 59 79 60 # ip daddr:dport will be rewritten to 192.168.1.1 5201 80 61 # NAT must reallocate source port 10000 because ··· 96 71 ip netns exec "$ns1" iptables -t nat -A PREROUTING -p tcp --dport 5202 -j REDIRECT --to-ports 5201 97 72 ip netns exec "$ns1" iptables -t nat -A PREROUTING -p tcp --dport 5203 -j REDIRECT --to-ports 5201 98 73 99 - sleep 5 | ip netns exec "$ns2" socat -t 5 -u STDIN TCP:192.168.1.1:5202,connect-timeout=5 >/dev/null & 74 + sleep 5 | ip netns exec "$ns2" socat -T 5 -u STDIN TCP:192.168.1.1:5202,connect-timeout=5 >/dev/null & 75 + cpid1=$! 100 76 101 - # if connect succeeds, client closes instantly due to EOF on stdin. 102 - # if connect hangs, it will time out after 5s. 103 - echo | ip netns exec "$ns2" socat -t 3 -u STDIN TCP:192.168.1.1:5203,connect-timeout=5 >/dev/null & 77 + sleep 5 | ip netns exec "$ns2" socat -T 5 -u STDIN TCP:192.168.1.1:5203,connect-timeout=5 >/dev/null & 104 78 cpid2=$! 105 79 106 - time_then=$(date +%s) 107 - wait $cpid2 108 - rv=$? 109 - time_now=$(date +%s) 80 + busywait "$BUSYWAIT_TIMEOUT" connect_done "$ns2" 5202 81 + busywait "$BUSYWAIT_TIMEOUT" connect_done "$ns2" 5203 110 82 111 - # Check how much time has elapsed, expectation is for 112 - # 'cpid2' to connect and then exit (and no connect delay). 113 - delta=$((time_now - time_then)) 83 + check_ctstate "$ns1" 5202 84 + check_ctstate "$ns1" 5203 114 85 115 - if [ $delta -lt 2 ] && [ $rv -eq 0 ]; then 86 + kill $socatpid $cpid0 $cpid1 $cpid2 87 + socatpid=0 88 + 89 + if [ $ret -eq 0 ]; then 116 90 echo "PASS: could connect to service via redirected ports" 117 91 else 118 - echo "FAIL: socat cannot connect to service via redirect ($delta seconds elapsed, returned $rv)" 92 + echo "FAIL: socat cannot connect to service via redirect" 119 93 ret=1 120 94 fi 121 95
+8 -5
tools/testing/selftests/net/netfilter/nft_fib.sh
··· 256 256 local daddr4=$1 257 257 local daddr6=$2 258 258 259 - if ip netns exec "$ns1" ping -c 1 -w 1 -q "$daddr4" > /dev/null; then 259 + if ip netns exec "$ns1" ping -c 1 -W 0.1 -q "$daddr4" > /dev/null; then 260 260 echo "FAIL: ${ns1} could reach $daddr4" 1>&2 261 261 return 1 262 262 fi 263 263 264 - if ip netns exec "$ns1" ping -c 1 -w 1 -q "$daddr6" > /dev/null; then 264 + if ip netns exec "$ns1" ping -c 1 -W 0.1 -q "$daddr6" > /dev/null; then 265 265 echo "FAIL: ${ns1} could reach $daddr6" 1>&2 266 266 return 1 267 267 fi ··· 437 437 local addr="$3" 438 438 local type="$4" 439 439 local count="$5" 440 + local lret=0 440 441 441 442 [ -z "$count" ] && count=1 442 443 443 444 if ! ip netns exec "$nsrouter" nft get element inet t "$setname" { "$iifname" . "$addr" . "$type" } |grep -q "counter packets $count";then 444 - echo "FAIL: did not find $iifname . $addr . $type in $setname" 445 + echo "FAIL: did not find $iifname . $addr . $type in $setname with $count packets" 445 446 ip netns exec "$nsrouter" nft list set inet t "$setname" 446 447 ret=1 447 - return 1 448 + # do not fail right away, delete entry if it exists so later test that 449 + # checks for unwanted keys don't get confused by this *expected* key. 450 + lret=1 448 451 fi 449 452 450 453 # delete the entry, this allows to check if anything unexpected appeared ··· 459 456 return 1 460 457 fi 461 458 462 - return 0 459 + return $lret 463 460 } 464 461 465 462 check_local()
+7 -5
tools/testing/selftests/net/ovpn/Makefile
··· 19 19 20 20 TEST_FILES = common.sh 21 21 22 - TEST_PROGS = test.sh \ 23 - test-large-mtu.sh \ 22 + TEST_PROGS := \ 24 23 test-chachapoly.sh \ 25 - test-tcp.sh \ 26 - test-float.sh \ 24 + test-close-socket-tcp.sh \ 27 25 test-close-socket.sh \ 28 - test-close-socket-tcp.sh 26 + test-float.sh \ 27 + test-large-mtu.sh \ 28 + test-tcp.sh \ 29 + test.sh \ 30 + # end of TEST_PROGS 29 31 30 32 TEST_GEN_FILES := ovpn-cli 31 33
+6 -6
tools/testing/selftests/net/ovpn/config
··· 1 - CONFIG_NET=y 2 - CONFIG_INET=y 3 - CONFIG_STREAM_PARSER=y 4 - CONFIG_NET_UDP_TUNNEL=y 5 - CONFIG_DST_CACHE=y 6 1 CONFIG_CRYPTO=y 7 2 CONFIG_CRYPTO_AES=y 8 - CONFIG_CRYPTO_GCM=y 9 3 CONFIG_CRYPTO_CHACHA20POLY1305=y 4 + CONFIG_CRYPTO_GCM=y 5 + CONFIG_DST_CACHE=y 6 + CONFIG_INET=y 7 + CONFIG_NET=y 8 + CONFIG_NET_UDP_TUNNEL=y 10 9 CONFIG_OVPN=m 10 + CONFIG_STREAM_PARSER=y
+2
tools/testing/selftests/net/ovpn/ovpn-cli.c
··· 1587 1587 sock = nl_socket_alloc(); 1588 1588 if (!sock) { 1589 1589 fprintf(stderr, "cannot allocate netlink socket\n"); 1590 + ret = -ENOMEM; 1590 1591 goto err_free; 1591 1592 } 1592 1593 ··· 2107 2106 ret = ovpn_listen_mcast(); 2108 2107 break; 2109 2108 case CMD_INVALID: 2109 + ret = -EINVAL; 2110 2110 break; 2111 2111 } 2112 2112
+6 -4
tools/testing/selftests/net/packetdrill/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 3 - TEST_INCLUDES := ksft_runner.sh \ 4 - defaults.sh \ 5 - set_sysctls.py \ 6 - ../../kselftest/ktap_helpers.sh 3 + TEST_INCLUDES := \ 4 + defaults.sh \ 5 + ksft_runner.sh \ 6 + set_sysctls.py \ 7 + ../../kselftest/ktap_helpers.sh \ 8 + # end of TEST_INCLUDES 7 9 8 10 TEST_PROGS := $(wildcard *.pkt) 9 11
+2 -2
tools/testing/selftests/net/packetdrill/config
··· 1 - CONFIG_IPV6=y 2 - CONFIG_HZ_1000=y 3 1 CONFIG_HZ=1000 2 + CONFIG_HZ_1000=y 3 + CONFIG_IPV6=y 4 4 CONFIG_NET_NS=y 5 5 CONFIG_NET_SCH_FIFO=y 6 6 CONFIG_NET_SCH_FQ=y
+8 -2
tools/testing/selftests/net/rds/Makefile
··· 5 5 6 6 TEST_PROGS := run.sh 7 7 8 - TEST_FILES := include.sh test.py 8 + TEST_FILES := \ 9 + include.sh \ 10 + test.py \ 11 + # end of TEST_FILES 9 12 10 - EXTRA_CLEAN := /tmp/rds_logs include.sh 13 + EXTRA_CLEAN := \ 14 + include.sh \ 15 + /tmp/rds_logs \ 16 + # end of EXTRA_CLEAN 11 17 12 18 include ../../lib.mk
+1 -1
tools/testing/selftests/net/tcp_ao/config
··· 1 1 CONFIG_CRYPTO_HMAC=y 2 2 CONFIG_CRYPTO_RMD160=y 3 3 CONFIG_CRYPTO_SHA1=y 4 - CONFIG_IPV6_MULTIPLE_TABLES=y 5 4 CONFIG_IPV6=y 5 + CONFIG_IPV6_MULTIPLE_TABLES=y 6 6 CONFIG_NET_L3_MASTER_DEV=y 7 7 CONFIG_NET_VRF=y 8 8 CONFIG_TCP_AO=y