* Re: [PATCH net-next 2/2] selftests: bonding: Add a test for 802.3ad with coupled control disabled
2026-11-11 17:19 ` [PATCH net-next 2/2] selftests: bonding: Add a test for 802.3ad with coupled control disabled Ido Schimmel
@ 2026-11-12 20:21 ` netdev-bot+sashiko
2026-11-13 7:01 ` Ido Schimmel
2026-11-13 2:16 ` Hangbin Liu
2026-11-13 2:24 ` Hangbin Liu
2 siblings, 1 reply; 11+ messages in thread
From: netdev-bot+sashiko @ 2026-11-12 20:21 UTC (permalink / raw)
To: idosch
Cc: netdev, davem, kuba, pabeni, edumazet, jv, andrew+netdev, razor,
aahila
Thank you for your contribution! Sashiko AI review found more severe
issue(s) in other patches of this series. This mail is only an FYI, in case
you want to address the nit picks below when you respin.
Low priority / nit picks for your consideration:
- [Low] The bonding selftest config fragment
(tools/testing/selftests/drivers/net/bonding/config) now asks for…
- [Low] In bond_lacp_independent_control.sh, collecting() reads the total
packet count of the bond1 ingress ICMP echo-request filter (handle…
--
selftests: bonding: Add a test for 802.3ad with coupled control disabled
This adds a VRF based selftest which checks that a bond port with
coupled_control off receives packets in COLLECTING state. It keeps the
port in COLLECTING state by clearing the Collecting bit in received
LACPDUs, and then checks that ping works in DISTRIBUTING state. The
bonding selftest config fragment gains the VRF, pedit and policy routing
options the test needs.
> diff --git a/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> new file mode 100755
> index 0000000000000..c29712e01e49e
> --- /dev/null
> +++ b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
[ ... ]
> +h1_create()
> +{
> + adf_ip_link_add bond1 type bond mode 802.3ad lacp_rate fast \
> + coupled_control off
> + adf_ip_link_set_master "$h1" bond1
> + adf_simple_if_init bond1 192.0.2.1/28
> +
> + tc qdisc add dev "$h1" clsact
> + defer tc qdisc del dev "$h1" clsact
> +
> + tc qdisc add dev bond1 clsact
> + defer tc qdisc del dev bond1 clsact
> +
> + tc filter add dev bond1 ingress pref 1 handle 101 proto ip \
> + flower skip_hw src_ip 192.0.2.2 dst_ip 192.0.2.1 \
> + ip_proto icmp type 8 action pass
> + defer tc filter del dev bond1 ingress pref 1 handle 101 flower
> +}
[ ... ]
> +collecting()
> +{
[ ... ]
> + ping_do bond2 192.0.2.1
> + pkts=$(tc_rule_handle_stats_get "dev bond1 ingress" 101)
> + ((pkts >= PING_COUNT))
> + check_err $? "Packets not received in COLLECTING state"
[Severity: Low]
Can this check pass when no packets were received in COLLECTING state?
The bond1 ingress filter with handle 101 is installed once by
h1_create() from setup_prepare(), outside the per-test defer scopes, so
its counter keeps growing across tests. collecting() compares the
absolute counter with PING_COUNT and does not take a baseline before
ping_do.
tests_run() in net/lib.sh iterates over ${TESTS:-$ALL_TESTS}. Take
TESTS="distributing collecting" as an example:
distributing()
ping_do bond2 192.0.2.1 <- PING_COUNT echo requests hit filter 101
collecting()
port moved to COLLECTING state
ping_do bond2 192.0.2.1 <- nothing received without the fix
pkts >= PING_COUNT <- still true from the earlier test
The same thing happens if collecting is listed twice. The default
ALL_TESTS order runs collecting first, so the default run is not
affected.
Since the ping_do return value is ignored here, this counter is the only
check of the fix. Would it make sense to read the counter before ping_do
and check the delta, or to create the filter inside collecting() with a
matching defer?
> +
> + log_test "Receive in COLLECTING state"
> +}
[ ... ]
> diff --git a/tools/testing/selftests/drivers/net/bonding/config b/tools/testing/selftests/drivers/net/bonding/config
> index b62c707152930..71c6d69d98a18 100644
> --- a/tools/testing/selftests/drivers/net/bonding/config
> +++ b/tools/testing/selftests/drivers/net/bonding/config
[ ... ]
> @@ -15,7 +19,9 @@ CONFIG_NETCONSOLE_DYNAMIC=y
> CONFIG_NETCONSOLE_EXTENDED_LOG=y
> CONFIG_NETDEVSIM=m
> CONFIG_NET_IPGRE=y
> +CONFIG_NET_L3_MASTER_DEV=y
> CONFIG_NET_SCH_INGRESS=y
> +CONFIG_NET_VRF=y
[Severity: Low]
Should this fragment also enable CONFIG_IP_ADVANCED_ROUTER=y and
CONFIG_IP_MULTIPLE_TABLES=y?
NET_VRF depends on IP_MULTIPLE_TABLES in drivers/net/Kconfig:
config NET_VRF
tristate "Virtual Routing and Forwarding (Lite)"
depends on IP_MULTIPLE_TABLES
depends on NET_L3_MASTER_DEV
depends on IPV6_MULTIPLE_TABLES || IPV6=n
and in net/ipv4/Kconfig, IP_MULTIPLE_TABLES depends on IP_ADVANCED_ROUTER
and has no default:
config IP_MULTIPLE_TABLES
bool "IP: policy routing"
depends on IP_ADVANCED_ROUTER
The patch adds the NET_L3_MASTER_DEV and IPV6_MULTIPLE_TABLES
dependencies but not the IPv4 ones. If the fragment is merged onto a base
config that lacks them, Kconfig silently drops NET_VRF. arm64 defconfig
is one example: it sets neither symbol, while x86_64_defconfig sets both.
In that case setup_prepare()->adf_vrf_prepare()->vrf_prepare() runs:
ip -4 rule add pref 32765 table local
which needs IPv4 policy routing, and adf_simple_if_init() cannot create
the VRF devices. The test then fails during setup and never exercises the
bonding change.
Several other net selftest fragments have the same gap, while
net/mptcp/config lists IP_MULTIPLE_TABLES explicitly.
> CONFIG_NLMON=y
> CONFIG_VETH=y
> CONFIG_VLAN_8021Q=m
--
Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261111171947.2816258-1-idosch%40nvidia.com
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next 2/2] selftests: bonding: Add a test for 802.3ad with coupled control disabled
2026-11-12 20:21 ` netdev-bot+sashiko
@ 2026-11-13 7:01 ` Ido Schimmel
0 siblings, 0 replies; 11+ messages in thread
From: Ido Schimmel @ 2026-11-13 7:01 UTC (permalink / raw)
To: netdev-bot+sashiko
Cc: idosch, netdev, davem, kuba, pabeni, edumazet, jv, andrew+netdev,
razor, aahila
tl;dr - I believe the patch is fine as-is.
On Thu, Nov 12, 2026 at 08:21:58PM +0000, netdev-bot+sashiko@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found more severe
> issue(s) in other patches of this series. This mail is only an FYI, in case
> you want to address the nit picks below when you respin.
>
> Low priority / nit picks for your consideration:
>
> - [Low] The bonding selftest config fragment
> (tools/testing/selftests/drivers/net/bonding/config) now asks for…
> - [Low] In bond_lacp_independent_control.sh, collecting() reads the total
> packet count of the bond1 ingress ICMP echo-request filter (handle…
>
> --
>
> selftests: bonding: Add a test for 802.3ad with coupled control disabled
>
> This adds a VRF based selftest which checks that a bond port with
> coupled_control off receives packets in COLLECTING state. It keeps the
> port in COLLECTING state by clearing the Collecting bit in received
> LACPDUs, and then checks that ping works in DISTRIBUTING state. The
> bonding selftest config fragment gains the VRF, pedit and policy routing
> options the test needs.
>
> > diff --git a/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> > new file mode 100755
> > index 0000000000000..c29712e01e49e
> > --- /dev/null
> > +++ b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
>
> [ ... ]
>
> > +h1_create()
> > +{
> > + adf_ip_link_add bond1 type bond mode 802.3ad lacp_rate fast \
> > + coupled_control off
> > + adf_ip_link_set_master "$h1" bond1
> > + adf_simple_if_init bond1 192.0.2.1/28
> > +
> > + tc qdisc add dev "$h1" clsact
> > + defer tc qdisc del dev "$h1" clsact
> > +
> > + tc qdisc add dev bond1 clsact
> > + defer tc qdisc del dev bond1 clsact
> > +
> > + tc filter add dev bond1 ingress pref 1 handle 101 proto ip \
> > + flower skip_hw src_ip 192.0.2.2 dst_ip 192.0.2.1 \
> > + ip_proto icmp type 8 action pass
> > + defer tc filter del dev bond1 ingress pref 1 handle 101 flower
> > +}
>
> [ ... ]
>
> > +collecting()
> > +{
>
> [ ... ]
>
> > + ping_do bond2 192.0.2.1
> > + pkts=$(tc_rule_handle_stats_get "dev bond1 ingress" 101)
> > + ((pkts >= PING_COUNT))
> > + check_err $? "Packets not received in COLLECTING state"
>
> [Severity: Low]
> Can this check pass when no packets were received in COLLECTING state?
>
> The bond1 ingress filter with handle 101 is installed once by
> h1_create() from setup_prepare(), outside the per-test defer scopes, so
> its counter keeps growing across tests. collecting() compares the
> absolute counter with PING_COUNT and does not take a baseline before
> ping_do.
>
> tests_run() in net/lib.sh iterates over ${TESTS:-$ALL_TESTS}. Take
> TESTS="distributing collecting" as an example:
>
> distributing()
> ping_do bond2 192.0.2.1 <- PING_COUNT echo requests hit filter 101
> collecting()
> port moved to COLLECTING state
> ping_do bond2 192.0.2.1 <- nothing received without the fix
> pkts >= PING_COUNT <- still true from the earlier test
>
> The same thing happens if collecting is listed twice. The default
> ALL_TESTS order runs collecting first, so the default run is not
> affected.
>
> Since the ping_do return value is ignored here, this counter is the only
> check of the fix. Would it make sense to read the counter before ping_do
> and check the delta, or to create the filter inside collecting() with a
> matching defer?
Noise. This is not a problem with the default test order and I don't
think it's worth handling other orders.
>
> > +
> > + log_test "Receive in COLLECTING state"
> > +}
>
> [ ... ]
>
> > diff --git a/tools/testing/selftests/drivers/net/bonding/config b/tools/testing/selftests/drivers/net/bonding/config
> > index b62c707152930..71c6d69d98a18 100644
> > --- a/tools/testing/selftests/drivers/net/bonding/config
> > +++ b/tools/testing/selftests/drivers/net/bonding/config
>
> [ ... ]
>
> > @@ -15,7 +19,9 @@ CONFIG_NETCONSOLE_DYNAMIC=y
> > CONFIG_NETCONSOLE_EXTENDED_LOG=y
> > CONFIG_NETDEVSIM=m
> > CONFIG_NET_IPGRE=y
> > +CONFIG_NET_L3_MASTER_DEV=y
> > CONFIG_NET_SCH_INGRESS=y
> > +CONFIG_NET_VRF=y
>
> [Severity: Low]
> Should this fragment also enable CONFIG_IP_ADVANCED_ROUTER=y and
> CONFIG_IP_MULTIPLE_TABLES=y?
>
> NET_VRF depends on IP_MULTIPLE_TABLES in drivers/net/Kconfig:
>
> config NET_VRF
> tristate "Virtual Routing and Forwarding (Lite)"
> depends on IP_MULTIPLE_TABLES
> depends on NET_L3_MASTER_DEV
> depends on IPV6_MULTIPLE_TABLES || IPV6=n
>
> and in net/ipv4/Kconfig, IP_MULTIPLE_TABLES depends on IP_ADVANCED_ROUTER
> and has no default:
>
> config IP_MULTIPLE_TABLES
> bool "IP: policy routing"
> depends on IP_ADVANCED_ROUTER
>
> The patch adds the NET_L3_MASTER_DEV and IPV6_MULTIPLE_TABLES
> dependencies but not the IPv4 ones. If the fragment is merged onto a base
> config that lacks them, Kconfig silently drops NET_VRF. arm64 defconfig
> is one example: it sets neither symbol, while x86_64_defconfig sets both.
>
> In that case setup_prepare()->adf_vrf_prepare()->vrf_prepare() runs:
>
> ip -4 rule add pref 32765 table local
>
> which needs IPv4 policy routing, and adf_simple_if_init() cannot create
> the VRF devices. The test then fails during setup and never exercises the
> bonding change.
>
> Several other net selftest fragments have the same gap, while
> net/mptcp/config lists IP_MULTIPLE_TABLES explicitly.
Both options are enabled by x86_64_defconfig and other config files that
enable CONFIG_NET_VRF do not list them either (e.g.,
net/forwarding/config). The test is running fine in the netdev CI.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next 2/2] selftests: bonding: Add a test for 802.3ad with coupled control disabled
2026-11-11 17:19 ` [PATCH net-next 2/2] selftests: bonding: Add a test for 802.3ad with coupled control disabled Ido Schimmel
2026-11-12 20:21 ` netdev-bot+sashiko
@ 2026-11-13 2:16 ` Hangbin Liu
2026-11-13 2:24 ` Hangbin Liu
2 siblings, 0 replies; 11+ messages in thread
From: Hangbin Liu @ 2026-11-13 2:16 UTC (permalink / raw)
To: Ido Schimmel
Cc: netdev, davem, kuba, pabeni, edumazet, jv, andrew+netdev, razor,
aahila
On Wed, Nov 11, 2026 at 07:19:47PM +0200, Ido Schimmel wrote:
> Test that with coupled control disabled, a port in COLLECTING state
> receives packets.
>
> In this mode, a port only transitions from COLLECTING to DISTRIBUTING
> state if its partner sets the Collecting bit in its LACPDUs. Therefore,
> keep the port in COLLECTING state by clearing the Collecting bit in
> received LACPDUs.
>
> Also test that ping works once the port moves to DISTRIBUTING state.
>
> Use VRFs rather than network namespaces so that the test could be run
> with a veth pair or a pair of physically connected ports.
>
> Output without "bonding: 3ad: Receive packets in COLLECTING state":
>
> # ./bond_lacp_independent_control.sh
> TEST: Receive in COLLECTING state [FAIL]
> Packets not received in COLLECTING state
> TEST: Ping in DISTRIBUTING state [ OK ]
>
> Output with the fix:
>
> # ./bond_lacp_independent_control.sh
> TEST: Receive in COLLECTING state [ OK ]
> TEST: Ping in DISTRIBUTING state [ OK ]
>
> Reviewed-by: Petr Machata <petrm@nvidia.com>
> Signed-off-by: Ido Schimmel <idosch@nvidia.com>
> ---
> .../selftests/drivers/net/bonding/Makefile | 1 +
> .../bonding/bond_lacp_independent_control.sh | 144 ++++++++++++++++++
> .../selftests/drivers/net/bonding/config | 6 +
> 3 files changed, 151 insertions(+)
> create mode 100755 tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
>
> diff --git a/tools/testing/selftests/drivers/net/bonding/Makefile b/tools/testing/selftests/drivers/net/bonding/Makefile
> index e337c099fb40..46d9fede5918 100644
> --- a/tools/testing/selftests/drivers/net/bonding/Makefile
> +++ b/tools/testing/selftests/drivers/net/bonding/Makefile
> @@ -7,6 +7,7 @@ TEST_PROGS := \
> bond-eth-type-change.sh \
> bond-lladdr-target.sh \
> bond_ipsec_offload.sh \
> + bond_lacp_independent_control.sh \
> bond_lacp_prio.sh \
> bond_lacp_strict.sh \
> bond_macvlan_ipvlan.sh \
> diff --git a/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> new file mode 100755
> index 000000000000..c29712e01e49
> --- /dev/null
> +++ b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> @@ -0,0 +1,144 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +
> +# +-------------------------+ +-------------------------+
> +# | H1 (vrf) | | H2 (vrf) |
> +# | + bond1 (802.3ad) | | + bond2 (802.3ad) |
> +# | | coupled_control off | | | |
> +# | | 192.0.2.1/28 | | | 192.0.2.2/28 |
> +# | | | | | |
> +# | + $h1 | | + $h2 |
> +# +--|----------------------+ +--|----------------------+
> +# | |
> +# +---------------------------+
> +
> +# shellcheck disable=SC2034,SC2329
> +ALL_TESTS="
> + collecting
> + distributing
> +"
> +NUM_NETIFS=2
> +REQUIRE_MZ=no
> +lib_dir=$(dirname "$0")
> +# shellcheck disable=SC1091
> +source "$lib_dir"/../../../net/forwarding/lib.sh
> +
> +lacp_state_get()
> +{
> + local dev=$1; shift
> +
> + ip -d -j link show dev "$dev" | \
> + jq '.[].linkinfo.info_slave_data.ad_actor_oper_port_state'
> +}
> +
> +# The actor state of a port in ATTACHED state is 0x0f: Activity (0x01),
> +# Timeout (0x02), Aggregation (0x04) and Synchronization (0x08). The
> +# Collecting (0x10) bit is added in COLLECTING state (0x1f) and the
> +# Distributing (0x20) bit in DISTRIBUTING state (0x3f).
> +lacp_state_wait()
> +{
> + local dev=$1; shift
> + local state=$1; shift
> +
> + slowwait "$WAIT_TIMEOUT" until_counter_is "== $state" \
> + lacp_state_get "$dev" > /dev/null
> +}
> +
> +partner_state_clear()
> +{
> + local bits=$1; shift
> +
> + tc filter replace dev "$h1" ingress pref 1 handle 101 protocol 0x8809 \
> + flower skip_hw action pedit munge offset 18 u8 set 0 \
> + retain "$bits"
> +}
> +
> +h1_create()
> +{
> + adf_ip_link_add bond1 type bond mode 802.3ad lacp_rate fast \
> + coupled_control off
> + adf_ip_link_set_master "$h1" bond1
> + adf_simple_if_init bond1 192.0.2.1/28
> +
> + tc qdisc add dev "$h1" clsact
> + defer tc qdisc del dev "$h1" clsact
> +
> + tc qdisc add dev bond1 clsact
> + defer tc qdisc del dev bond1 clsact
> +
> + tc filter add dev bond1 ingress pref 1 handle 101 proto ip \
> + flower skip_hw src_ip 192.0.2.2 dst_ip 192.0.2.1 \
> + ip_proto icmp type 8 action pass
> + defer tc filter del dev bond1 ingress pref 1 handle 101 flower
> +}
> +
> +h2_create()
> +{
> + adf_ip_link_add bond2 type bond mode 802.3ad lacp_rate fast
> + adf_ip_link_set_master "$h2" bond2
> + adf_simple_if_init bond2 192.0.2.2/28
> +}
> +
> +setup_prepare()
> +{
> + h1=${NETIFS[p1]}
> + h2=${NETIFS[p2]}
> +
> + adf_vrf_prepare
> +
> + h1_create
> + h2_create
> +}
> +
> +collecting()
> +{
> + local pkts
> +
> + RET=0
> +
> + # Clear the Synchronization (0x08) and Collecting (0x10) bits in the
> + # partner's state to move $h1 to ATTACHED state and then only clear
> + # the Collecting bit to move it to COLLECTING state.
> + partner_state_clear 0x18
> + defer tc filter del dev "$h1" ingress pref 1 handle 101 flower
> + lacp_state_wait "$h1" 0x0f
> + check_err $? "Port did not reach ATTACHED state"
> +
> + partner_state_clear 0x10
> + lacp_state_wait "$h1" 0x1f
> + check_err $? "Port did not reach COLLECTING state"
> +
> + # $h1 cannot reply to ARP requests in COLLECTING state.
> + ip neigh add 192.0.2.1 lladdr "$(mac_get bond1)" dev bond2 \
> + nud permanent
> + defer ip neigh del 192.0.2.1 dev bond2
> +
> + ping_do bond2 192.0.2.1
> + pkts=$(tc_rule_handle_stats_get "dev bond1 ingress" 101)
> + ((pkts >= PING_COUNT))
> + check_err $? "Packets not received in COLLECTING state"
> +
> + log_test "Receive in COLLECTING state"
> +}
> +
> +distributing()
> +{
> + RET=0
> +
> + lacp_state_wait "$h1" 0x3f
> + check_err $? "Port did not reach DISTRIBUTING state"
> +
> + ping_do bond2 192.0.2.1
> + check_err $? "Ping failed"
> +
> + log_test "Ping in DISTRIBUTING state"
> +}
> +
> +trap cleanup EXIT
> +
> +setup_prepare
> +setup_wait
> +
> +tests_run
> +
> +exit "$EXIT_STATUS"
> diff --git a/tools/testing/selftests/drivers/net/bonding/config b/tools/testing/selftests/drivers/net/bonding/config
> index b62c70715293..71c6d69d98a1 100644
> --- a/tools/testing/selftests/drivers/net/bonding/config
> +++ b/tools/testing/selftests/drivers/net/bonding/config
> @@ -1,13 +1,17 @@
> CONFIG_BONDING=y
> +CONFIG_BPF_SYSCALL=y
> CONFIG_BRIDGE=y
> +CONFIG_CGROUP_BPF=y
> CONFIG_CONFIGFS_FS=y
> CONFIG_DUMMY=y
> CONFIG_INET_ESP=y
> CONFIG_INET_ESP_OFFLOAD=y
> CONFIG_IPV6=y
> +CONFIG_IPV6_MULTIPLE_TABLES=y
> CONFIG_IPVLAN=y
> CONFIG_MACVLAN=y
> CONFIG_NET_ACT_GACT=y
> +CONFIG_NET_ACT_PEDIT=m
> CONFIG_NET_CLS_FLOWER=y
> CONFIG_NET_CLS_MATCHALL=m
> CONFIG_NETCONSOLE=m
> @@ -15,7 +19,9 @@ CONFIG_NETCONSOLE_DYNAMIC=y
> CONFIG_NETCONSOLE_EXTENDED_LOG=y
> CONFIG_NETDEVSIM=m
> CONFIG_NET_IPGRE=y
> +CONFIG_NET_L3_MASTER_DEV=y
> CONFIG_NET_SCH_INGRESS=y
> +CONFIG_NET_VRF=y
> CONFIG_NLMON=y
> CONFIG_VETH=y
> CONFIG_VLAN_8021Q=m
> --
> 2.56.0
>
Tested-by: Hangbin Liu <liuhangbin@kylinos.cn>
Reviewed-by: Hangbin Liu <liuhangbin@kylinos.cn>
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next 2/2] selftests: bonding: Add a test for 802.3ad with coupled control disabled
2026-11-11 17:19 ` [PATCH net-next 2/2] selftests: bonding: Add a test for 802.3ad with coupled control disabled Ido Schimmel
2026-11-12 20:21 ` netdev-bot+sashiko
2026-11-13 2:16 ` Hangbin Liu
@ 2026-11-13 2:24 ` Hangbin Liu
2026-11-13 7:07 ` Ido Schimmel
2 siblings, 1 reply; 11+ messages in thread
From: Hangbin Liu @ 2026-11-13 2:24 UTC (permalink / raw)
To: Ido Schimmel
Cc: netdev, davem, kuba, pabeni, edumazet, jv, andrew+netdev, razor,
aahila
Hi Ido,
On Wed, Nov 11, 2026 at 07:19:47PM +0200, Ido Schimmel wrote:
> Test that with coupled control disabled, a port in COLLECTING state
> receives packets.
>
> In this mode, a port only transitions from COLLECTING to DISTRIBUTING
> state if its partner sets the Collecting bit in its LACPDUs. Therefore,
> keep the port in COLLECTING state by clearing the Collecting bit in
> received LACPDUs.
>
> Also test that ping works once the port moves to DISTRIBUTING state.
>
> Use VRFs rather than network namespaces so that the test could be run
> with a veth pair or a pair of physically connected ports.
>
> Output without "bonding: 3ad: Receive packets in COLLECTING state":
>
> # ./bond_lacp_independent_control.sh
> TEST: Receive in COLLECTING state [FAIL]
> Packets not received in COLLECTING state
> TEST: Ping in DISTRIBUTING state [ OK ]
>
> Output with the fix:
>
> # ./bond_lacp_independent_control.sh
> TEST: Receive in COLLECTING state [ OK ]
> TEST: Ping in DISTRIBUTING state [ OK ]
>
> Reviewed-by: Petr Machata <petrm@nvidia.com>
> Signed-off-by: Ido Schimmel <idosch@nvidia.com>
> ---
> .../selftests/drivers/net/bonding/Makefile | 1 +
> .../bonding/bond_lacp_independent_control.sh | 144 ++++++++++++++++++
> .../selftests/drivers/net/bonding/config | 6 +
> 3 files changed, 151 insertions(+)
> create mode 100755 tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
>
> diff --git a/tools/testing/selftests/drivers/net/bonding/Makefile b/tools/testing/selftests/drivers/net/bonding/Makefile
> index e337c099fb40..46d9fede5918 100644
> --- a/tools/testing/selftests/drivers/net/bonding/Makefile
> +++ b/tools/testing/selftests/drivers/net/bonding/Makefile
> @@ -7,6 +7,7 @@ TEST_PROGS := \
> bond-eth-type-change.sh \
> bond-lladdr-target.sh \
> bond_ipsec_offload.sh \
> + bond_lacp_independent_control.sh \
> bond_lacp_prio.sh \
> bond_lacp_strict.sh \
> bond_macvlan_ipvlan.sh \
> diff --git a/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> new file mode 100755
> index 000000000000..c29712e01e49
> --- /dev/null
> +++ b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> @@ -0,0 +1,144 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +
> +# +-------------------------+ +-------------------------+
> +# | H1 (vrf) | | H2 (vrf) |
> +# | + bond1 (802.3ad) | | + bond2 (802.3ad) |
> +# | | coupled_control off | | | |
> +# | | 192.0.2.1/28 | | | 192.0.2.2/28 |
> +# | | | | | |
> +# | + $h1 | | + $h2 |
> +# +--|----------------------+ +--|----------------------+
> +# | |
> +# +---------------------------+
> +
> +# shellcheck disable=SC2034,SC2329
> +ALL_TESTS="
> + collecting
> + distributing
> +"
> +NUM_NETIFS=2
> +REQUIRE_MZ=no
> +lib_dir=$(dirname "$0")
> +# shellcheck disable=SC1091
> +source "$lib_dir"/../../../net/forwarding/lib.sh
> +
> +lacp_state_get()
> +{
> + local dev=$1; shift
> +
> + ip -d -j link show dev "$dev" | \
> + jq '.[].linkinfo.info_slave_data.ad_actor_oper_port_state'
> +}
> +
> +# The actor state of a port in ATTACHED state is 0x0f: Activity (0x01),
> +# Timeout (0x02), Aggregation (0x04) and Synchronization (0x08). The
> +# Collecting (0x10) bit is added in COLLECTING state (0x1f) and the
> +# Distributing (0x20) bit in DISTRIBUTING state (0x3f).
> +lacp_state_wait()
> +{
> + local dev=$1; shift
> + local state=$1; shift
> +
> + slowwait "$WAIT_TIMEOUT" until_counter_is "== $state" \
> + lacp_state_get "$dev" > /dev/null
> +}
> +
> +partner_state_clear()
> +{
> + local bits=$1; shift
> +
> + tc filter replace dev "$h1" ingress pref 1 handle 101 protocol 0x8809 \
> + flower skip_hw action pedit munge offset 18 u8 set 0 \
> + retain "$bits"
> +}
> +
> +h1_create()
> +{
> + adf_ip_link_add bond1 type bond mode 802.3ad lacp_rate fast \
> + coupled_control off
> + adf_ip_link_set_master "$h1" bond1
> + adf_simple_if_init bond1 192.0.2.1/28
> +
> + tc qdisc add dev "$h1" clsact
> + defer tc qdisc del dev "$h1" clsact
> +
> + tc qdisc add dev bond1 clsact
> + defer tc qdisc del dev bond1 clsact
> +
> + tc filter add dev bond1 ingress pref 1 handle 101 proto ip \
> + flower skip_hw src_ip 192.0.2.2 dst_ip 192.0.2.1 \
> + ip_proto icmp type 8 action pass
> + defer tc filter del dev bond1 ingress pref 1 handle 101 flower
> +}
> +
> +h2_create()
> +{
> + adf_ip_link_add bond2 type bond mode 802.3ad lacp_rate fast
> + adf_ip_link_set_master "$h2" bond2
> + adf_simple_if_init bond2 192.0.2.2/28
> +}
> +
> +setup_prepare()
> +{
> + h1=${NETIFS[p1]}
> + h2=${NETIFS[p2]}
> +
> + adf_vrf_prepare
Nit: why we need the vrf prepare? The h1/h2 should be veth interface, no?
> diff --git a/tools/testing/selftests/drivers/net/bonding/config b/tools/testing/selftests/drivers/net/bonding/config
> index b62c70715293..71c6d69d98a1 100644
> --- a/tools/testing/selftests/drivers/net/bonding/config
> +++ b/tools/testing/selftests/drivers/net/bonding/config
> @@ -1,13 +1,17 @@
> CONFIG_BONDING=y
> +CONFIG_BPF_SYSCALL=y
> CONFIG_BRIDGE=y
> +CONFIG_CGROUP_BPF=y
> CONFIG_CONFIGFS_FS=y
> CONFIG_DUMMY=y
> CONFIG_INET_ESP=y
> CONFIG_INET_ESP_OFFLOAD=y
> CONFIG_IPV6=y
> +CONFIG_IPV6_MULTIPLE_TABLES=y
Do we need this config ?
> CONFIG_IPVLAN=y
> CONFIG_MACVLAN=y
> CONFIG_NET_ACT_GACT=y
> +CONFIG_NET_ACT_PEDIT=m
> CONFIG_NET_CLS_FLOWER=y
> CONFIG_NET_CLS_MATCHALL=m
> CONFIG_NETCONSOLE=m
> @@ -15,7 +19,9 @@ CONFIG_NETCONSOLE_DYNAMIC=y
> CONFIG_NETCONSOLE_EXTENDED_LOG=y
> CONFIG_NETDEVSIM=m
> CONFIG_NET_IPGRE=y
> +CONFIG_NET_L3_MASTER_DEV=y
> CONFIG_NET_SCH_INGRESS=y
> +CONFIG_NET_VRF=y
If yes, this config could be removed. And the H1 (vrf) description in the
chart.
Thanks
Hangbin
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next 2/2] selftests: bonding: Add a test for 802.3ad with coupled control disabled
2026-11-13 2:24 ` Hangbin Liu
@ 2026-11-13 7:07 ` Ido Schimmel
2026-11-13 7:45 ` Hangbin Liu
0 siblings, 1 reply; 11+ messages in thread
From: Ido Schimmel @ 2026-11-13 7:07 UTC (permalink / raw)
To: Hangbin Liu
Cc: Ido Schimmel, netdev, davem, kuba, pabeni, edumazet, jv,
andrew+netdev, razor, aahila
On Fri, Nov 13, 2026 at 10:24:46AM +0800, Hangbin Liu wrote:
> Hi Ido,
> On Wed, Nov 11, 2026 at 07:19:47PM +0200, Ido Schimmel wrote:
> > Test that with coupled control disabled, a port in COLLECTING state
> > receives packets.
> >
> > In this mode, a port only transitions from COLLECTING to DISTRIBUTING
> > state if its partner sets the Collecting bit in its LACPDUs. Therefore,
> > keep the port in COLLECTING state by clearing the Collecting bit in
> > received LACPDUs.
> >
> > Also test that ping works once the port moves to DISTRIBUTING state.
> >
> > Use VRFs rather than network namespaces so that the test could be run
> > with a veth pair or a pair of physically connected ports.
> >
> > Output without "bonding: 3ad: Receive packets in COLLECTING state":
> >
> > # ./bond_lacp_independent_control.sh
> > TEST: Receive in COLLECTING state [FAIL]
> > Packets not received in COLLECTING state
> > TEST: Ping in DISTRIBUTING state [ OK ]
> >
> > Output with the fix:
> >
> > # ./bond_lacp_independent_control.sh
> > TEST: Receive in COLLECTING state [ OK ]
> > TEST: Ping in DISTRIBUTING state [ OK ]
> >
> > Reviewed-by: Petr Machata <petrm@nvidia.com>
> > Signed-off-by: Ido Schimmel <idosch@nvidia.com>
> > ---
> > .../selftests/drivers/net/bonding/Makefile | 1 +
> > .../bonding/bond_lacp_independent_control.sh | 144 ++++++++++++++++++
> > .../selftests/drivers/net/bonding/config | 6 +
> > 3 files changed, 151 insertions(+)
> > create mode 100755 tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> >
> > diff --git a/tools/testing/selftests/drivers/net/bonding/Makefile b/tools/testing/selftests/drivers/net/bonding/Makefile
> > index e337c099fb40..46d9fede5918 100644
> > --- a/tools/testing/selftests/drivers/net/bonding/Makefile
> > +++ b/tools/testing/selftests/drivers/net/bonding/Makefile
> > @@ -7,6 +7,7 @@ TEST_PROGS := \
> > bond-eth-type-change.sh \
> > bond-lladdr-target.sh \
> > bond_ipsec_offload.sh \
> > + bond_lacp_independent_control.sh \
> > bond_lacp_prio.sh \
> > bond_lacp_strict.sh \
> > bond_macvlan_ipvlan.sh \
> > diff --git a/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> > new file mode 100755
> > index 000000000000..c29712e01e49
> > --- /dev/null
> > +++ b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> > @@ -0,0 +1,144 @@
> > +#!/bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +# +-------------------------+ +-------------------------+
> > +# | H1 (vrf) | | H2 (vrf) |
> > +# | + bond1 (802.3ad) | | + bond2 (802.3ad) |
> > +# | | coupled_control off | | | |
> > +# | | 192.0.2.1/28 | | | 192.0.2.2/28 |
> > +# | | | | | |
> > +# | + $h1 | | + $h2 |
> > +# +--|----------------------+ +--|----------------------+
> > +# | |
> > +# +---------------------------+
> > +
> > +# shellcheck disable=SC2034,SC2329
> > +ALL_TESTS="
> > + collecting
> > + distributing
> > +"
> > +NUM_NETIFS=2
> > +REQUIRE_MZ=no
> > +lib_dir=$(dirname "$0")
> > +# shellcheck disable=SC1091
> > +source "$lib_dir"/../../../net/forwarding/lib.sh
> > +
> > +lacp_state_get()
> > +{
> > + local dev=$1; shift
> > +
> > + ip -d -j link show dev "$dev" | \
> > + jq '.[].linkinfo.info_slave_data.ad_actor_oper_port_state'
> > +}
> > +
> > +# The actor state of a port in ATTACHED state is 0x0f: Activity (0x01),
> > +# Timeout (0x02), Aggregation (0x04) and Synchronization (0x08). The
> > +# Collecting (0x10) bit is added in COLLECTING state (0x1f) and the
> > +# Distributing (0x20) bit in DISTRIBUTING state (0x3f).
> > +lacp_state_wait()
> > +{
> > + local dev=$1; shift
> > + local state=$1; shift
> > +
> > + slowwait "$WAIT_TIMEOUT" until_counter_is "== $state" \
> > + lacp_state_get "$dev" > /dev/null
> > +}
> > +
> > +partner_state_clear()
> > +{
> > + local bits=$1; shift
> > +
> > + tc filter replace dev "$h1" ingress pref 1 handle 101 protocol 0x8809 \
> > + flower skip_hw action pedit munge offset 18 u8 set 0 \
> > + retain "$bits"
> > +}
> > +
> > +h1_create()
> > +{
> > + adf_ip_link_add bond1 type bond mode 802.3ad lacp_rate fast \
> > + coupled_control off
> > + adf_ip_link_set_master "$h1" bond1
> > + adf_simple_if_init bond1 192.0.2.1/28
> > +
> > + tc qdisc add dev "$h1" clsact
> > + defer tc qdisc del dev "$h1" clsact
> > +
> > + tc qdisc add dev bond1 clsact
> > + defer tc qdisc del dev bond1 clsact
> > +
> > + tc filter add dev bond1 ingress pref 1 handle 101 proto ip \
> > + flower skip_hw src_ip 192.0.2.2 dst_ip 192.0.2.1 \
> > + ip_proto icmp type 8 action pass
> > + defer tc filter del dev bond1 ingress pref 1 handle 101 flower
> > +}
> > +
> > +h2_create()
> > +{
> > + adf_ip_link_add bond2 type bond mode 802.3ad lacp_rate fast
> > + adf_ip_link_set_master "$h2" bond2
> > + adf_simple_if_init bond2 192.0.2.2/28
> > +}
> > +
> > +setup_prepare()
> > +{
> > + h1=${NETIFS[p1]}
> > + h2=${NETIFS[p2]}
> > +
> > + adf_vrf_prepare
>
> Nit: why we need the vrf prepare? The h1/h2 should be veth interface, no?
No. The VRF usage is intentional. From the commit message:
"Use VRFs rather than network namespaces so that the test could be run
with a veth pair or a pair of physically connected ports."
>
> > diff --git a/tools/testing/selftests/drivers/net/bonding/config b/tools/testing/selftests/drivers/net/bonding/config
> > index b62c70715293..71c6d69d98a1 100644
> > --- a/tools/testing/selftests/drivers/net/bonding/config
> > +++ b/tools/testing/selftests/drivers/net/bonding/config
> > @@ -1,13 +1,17 @@
> > CONFIG_BONDING=y
> > +CONFIG_BPF_SYSCALL=y
> > CONFIG_BRIDGE=y
> > +CONFIG_CGROUP_BPF=y
> > CONFIG_CONFIGFS_FS=y
> > CONFIG_DUMMY=y
> > CONFIG_INET_ESP=y
> > CONFIG_INET_ESP_OFFLOAD=y
> > CONFIG_IPV6=y
> > +CONFIG_IPV6_MULTIPLE_TABLES=y
>
> Do we need this config ?
Yes. CONFIG_NET_VRF depends on it when IPv6 is enabled and it's not
enabled by default. Other config files that enable CONFIG_NET_VRF list
it as well.
>
> > CONFIG_IPVLAN=y
> > CONFIG_MACVLAN=y
> > CONFIG_NET_ACT_GACT=y
> > +CONFIG_NET_ACT_PEDIT=m
> > CONFIG_NET_CLS_FLOWER=y
> > CONFIG_NET_CLS_MATCHALL=m
> > CONFIG_NETCONSOLE=m
> > @@ -15,7 +19,9 @@ CONFIG_NETCONSOLE_DYNAMIC=y
> > CONFIG_NETCONSOLE_EXTENDED_LOG=y
> > CONFIG_NETDEVSIM=m
> > CONFIG_NET_IPGRE=y
> > +CONFIG_NET_L3_MASTER_DEV=y
> > CONFIG_NET_SCH_INGRESS=y
> > +CONFIG_NET_VRF=y
>
> If yes, this config could be removed. And the H1 (vrf) description in the
> chart.
See above. VRF is needed.
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH net-next 2/2] selftests: bonding: Add a test for 802.3ad with coupled control disabled
2026-11-13 7:07 ` Ido Schimmel
@ 2026-11-13 7:45 ` Hangbin Liu
0 siblings, 0 replies; 11+ messages in thread
From: Hangbin Liu @ 2026-11-13 7:45 UTC (permalink / raw)
To: Ido Schimmel
Cc: Ido Schimmel, netdev, davem, kuba, pabeni, edumazet, jv,
andrew+netdev, razor, aahila
Hi Ido,
On Fri, Nov 13, 2026 at 09:07:32AM +0200, Ido Schimmel wrote:
> On Fri, Nov 13, 2026 at 10:24:46AM +0800, Hangbin Liu wrote:
> > Hi Ido,
> > On Wed, Nov 11, 2026 at 07:19:47PM +0200, Ido Schimmel wrote:
> > > Test that with coupled control disabled, a port in COLLECTING state
> > > receives packets.
> > >
> > > In this mode, a port only transitions from COLLECTING to DISTRIBUTING
> > > state if its partner sets the Collecting bit in its LACPDUs. Therefore,
> > > keep the port in COLLECTING state by clearing the Collecting bit in
> > > received LACPDUs.
> > >
> > > Also test that ping works once the port moves to DISTRIBUTING state.
> > >
> > > Use VRFs rather than network namespaces so that the test could be run
> > > with a veth pair or a pair of physically connected ports.
> > >
> > > Output without "bonding: 3ad: Receive packets in COLLECTING state":
> > >
> > > # ./bond_lacp_independent_control.sh
> > > TEST: Receive in COLLECTING state [FAIL]
> > > Packets not received in COLLECTING state
> > > TEST: Ping in DISTRIBUTING state [ OK ]
> > >
> > > Output with the fix:
> > >
> > > # ./bond_lacp_independent_control.sh
> > > TEST: Receive in COLLECTING state [ OK ]
> > > TEST: Ping in DISTRIBUTING state [ OK ]
> > >
> > > Reviewed-by: Petr Machata <petrm@nvidia.com>
> > > Signed-off-by: Ido Schimmel <idosch@nvidia.com>
> > > ---
> > > .../selftests/drivers/net/bonding/Makefile | 1 +
> > > .../bonding/bond_lacp_independent_control.sh | 144 ++++++++++++++++++
> > > .../selftests/drivers/net/bonding/config | 6 +
> > > 3 files changed, 151 insertions(+)
> > > create mode 100755 tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> > >
> > > diff --git a/tools/testing/selftests/drivers/net/bonding/Makefile b/tools/testing/selftests/drivers/net/bonding/Makefile
> > > index e337c099fb40..46d9fede5918 100644
> > > --- a/tools/testing/selftests/drivers/net/bonding/Makefile
> > > +++ b/tools/testing/selftests/drivers/net/bonding/Makefile
> > > @@ -7,6 +7,7 @@ TEST_PROGS := \
> > > bond-eth-type-change.sh \
> > > bond-lladdr-target.sh \
> > > bond_ipsec_offload.sh \
> > > + bond_lacp_independent_control.sh \
> > > bond_lacp_prio.sh \
> > > bond_lacp_strict.sh \
> > > bond_macvlan_ipvlan.sh \
> > > diff --git a/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> > > new file mode 100755
> > > index 000000000000..c29712e01e49
> > > --- /dev/null
> > > +++ b/tools/testing/selftests/drivers/net/bonding/bond_lacp_independent_control.sh
> > > @@ -0,0 +1,144 @@
> > > +#!/bin/bash
> > > +# SPDX-License-Identifier: GPL-2.0
> > > +
> > > +# +-------------------------+ +-------------------------+
> > > +# | H1 (vrf) | | H2 (vrf) |
> > > +# | + bond1 (802.3ad) | | + bond2 (802.3ad) |
> > > +# | | coupled_control off | | | |
> > > +# | | 192.0.2.1/28 | | | 192.0.2.2/28 |
> > > +# | | | | | |
> > > +# | + $h1 | | + $h2 |
> > > +# +--|----------------------+ +--|----------------------+
> > > +# | |
> > > +# +---------------------------+
> > > +
> > > +# shellcheck disable=SC2034,SC2329
> > > +ALL_TESTS="
> > > + collecting
> > > + distributing
> > > +"
> > > +NUM_NETIFS=2
> > > +REQUIRE_MZ=no
> > > +lib_dir=$(dirname "$0")
> > > +# shellcheck disable=SC1091
> > > +source "$lib_dir"/../../../net/forwarding/lib.sh
> > > +
> > > +lacp_state_get()
> > > +{
> > > + local dev=$1; shift
> > > +
> > > + ip -d -j link show dev "$dev" | \
> > > + jq '.[].linkinfo.info_slave_data.ad_actor_oper_port_state'
> > > +}
> > > +
> > > +# The actor state of a port in ATTACHED state is 0x0f: Activity (0x01),
> > > +# Timeout (0x02), Aggregation (0x04) and Synchronization (0x08). The
> > > +# Collecting (0x10) bit is added in COLLECTING state (0x1f) and the
> > > +# Distributing (0x20) bit in DISTRIBUTING state (0x3f).
> > > +lacp_state_wait()
> > > +{
> > > + local dev=$1; shift
> > > + local state=$1; shift
> > > +
> > > + slowwait "$WAIT_TIMEOUT" until_counter_is "== $state" \
> > > + lacp_state_get "$dev" > /dev/null
> > > +}
> > > +
> > > +partner_state_clear()
> > > +{
> > > + local bits=$1; shift
> > > +
> > > + tc filter replace dev "$h1" ingress pref 1 handle 101 protocol 0x8809 \
> > > + flower skip_hw action pedit munge offset 18 u8 set 0 \
> > > + retain "$bits"
> > > +}
> > > +
> > > +h1_create()
> > > +{
> > > + adf_ip_link_add bond1 type bond mode 802.3ad lacp_rate fast \
> > > + coupled_control off
> > > + adf_ip_link_set_master "$h1" bond1
> > > + adf_simple_if_init bond1 192.0.2.1/28
> > > +
> > > + tc qdisc add dev "$h1" clsact
> > > + defer tc qdisc del dev "$h1" clsact
> > > +
> > > + tc qdisc add dev bond1 clsact
> > > + defer tc qdisc del dev bond1 clsact
> > > +
> > > + tc filter add dev bond1 ingress pref 1 handle 101 proto ip \
> > > + flower skip_hw src_ip 192.0.2.2 dst_ip 192.0.2.1 \
> > > + ip_proto icmp type 8 action pass
> > > + defer tc filter del dev bond1 ingress pref 1 handle 101 flower
> > > +}
> > > +
> > > +h2_create()
> > > +{
> > > + adf_ip_link_add bond2 type bond mode 802.3ad lacp_rate fast
> > > + adf_ip_link_set_master "$h2" bond2
> > > + adf_simple_if_init bond2 192.0.2.2/28
> > > +}
> > > +
> > > +setup_prepare()
> > > +{
> > > + h1=${NETIFS[p1]}
> > > + h2=${NETIFS[p2]}
> > > +
> > > + adf_vrf_prepare
> >
> > Nit: why we need the vrf prepare? The h1/h2 should be veth interface, no?
>
> No. The VRF usage is intentional. From the commit message:
>
> "Use VRFs rather than network namespaces so that the test could be run
> with a veth pair or a pair of physically connected ports."
>
Oh, I wrote too few VRF tests. I just noticed that we use `adf_simple_if_init`
to create the VRF interfaces.
For a pair of physically connected ports, do you mean two ports connected
back-to-back on the *same* host? Otherwise I’m not sure how to run the test
using two physical ports across two different hosts.
> >
> > > diff --git a/tools/testing/selftests/drivers/net/bonding/config b/tools/testing/selftests/drivers/net/bonding/config
> > > index b62c70715293..71c6d69d98a1 100644
> > > --- a/tools/testing/selftests/drivers/net/bonding/config
> > > +++ b/tools/testing/selftests/drivers/net/bonding/config
> > > @@ -1,13 +1,17 @@
> > > CONFIG_BONDING=y
> > > +CONFIG_BPF_SYSCALL=y
> > > CONFIG_BRIDGE=y
> > > +CONFIG_CGROUP_BPF=y
> > > CONFIG_CONFIGFS_FS=y
> > > CONFIG_DUMMY=y
> > > CONFIG_INET_ESP=y
> > > CONFIG_INET_ESP_OFFLOAD=y
> > > CONFIG_IPV6=y
> > > +CONFIG_IPV6_MULTIPLE_TABLES=y
> >
> > Do we need this config ?
>
> Yes. CONFIG_NET_VRF depends on it when IPv6 is enabled and it's not
> enabled by default. Other config files that enable CONFIG_NET_VRF list
> it as well.
>
> >
> > > CONFIG_IPVLAN=y
> > > CONFIG_MACVLAN=y
> > > CONFIG_NET_ACT_GACT=y
> > > +CONFIG_NET_ACT_PEDIT=m
> > > CONFIG_NET_CLS_FLOWER=y
> > > CONFIG_NET_CLS_MATCHALL=m
> > > CONFIG_NETCONSOLE=m
> > > @@ -15,7 +19,9 @@ CONFIG_NETCONSOLE_DYNAMIC=y
> > > CONFIG_NETCONSOLE_EXTENDED_LOG=y
> > > CONFIG_NETDEVSIM=m
> > > CONFIG_NET_IPGRE=y
> > > +CONFIG_NET_L3_MASTER_DEV=y
> > > CONFIG_NET_SCH_INGRESS=y
> > > +CONFIG_NET_VRF=y
> >
> > If yes, this config could be removed. And the H1 (vrf) description in the
> > chart.
>
> See above. VRF is needed.
Thanks for the explanation.
Regards
Hangbin
^ permalink raw reply [flat|nested] 11+ messages in thread