mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
Merge branch 'ipvlan-support-bonding-events'
Etienne Champetier says: ==================== ipvlan: Support bonding events ==================== Link: https://patch.msgid.link/20250109032819.326528-1-champetier.etienne@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
8d460ac783
|
|
@ -799,6 +799,12 @@ static int ipvlan_device_event(struct notifier_block *unused,
|
|||
case NETDEV_PRE_TYPE_CHANGE:
|
||||
/* Forbid underlying device to change its type. */
|
||||
return NOTIFY_BAD;
|
||||
|
||||
case NETDEV_NOTIFY_PEERS:
|
||||
case NETDEV_BONDING_FAILOVER:
|
||||
case NETDEV_RESEND_IGMP:
|
||||
list_for_each_entry(ipvlan, &port->ipvlans, pnode)
|
||||
call_netdevice_notifiers(event, ipvlan->dev);
|
||||
}
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ TEST_PROGS := \
|
|||
mode-2-recovery-updelay.sh \
|
||||
bond_options.sh \
|
||||
bond-eth-type-change.sh \
|
||||
bond_macvlan.sh
|
||||
bond_macvlan_ipvlan.sh
|
||||
|
||||
TEST_FILES := \
|
||||
lag_lib.sh \
|
||||
|
|
|
|||
|
|
@ -1,99 +0,0 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Test macvlan over balance-alb
|
||||
|
||||
lib_dir=$(dirname "$0")
|
||||
source ${lib_dir}/bond_topo_2d1c.sh
|
||||
|
||||
m1_ns="m1-$(mktemp -u XXXXXX)"
|
||||
m2_ns="m1-$(mktemp -u XXXXXX)"
|
||||
m1_ip4="192.0.2.11"
|
||||
m1_ip6="2001:db8::11"
|
||||
m2_ip4="192.0.2.12"
|
||||
m2_ip6="2001:db8::12"
|
||||
|
||||
cleanup()
|
||||
{
|
||||
ip -n ${m1_ns} link del macv0
|
||||
ip netns del ${m1_ns}
|
||||
ip -n ${m2_ns} link del macv0
|
||||
ip netns del ${m2_ns}
|
||||
|
||||
client_destroy
|
||||
server_destroy
|
||||
gateway_destroy
|
||||
}
|
||||
|
||||
check_connection()
|
||||
{
|
||||
local ns=${1}
|
||||
local target=${2}
|
||||
local message=${3:-"macvlan_over_bond"}
|
||||
RET=0
|
||||
|
||||
|
||||
ip netns exec ${ns} ping ${target} -c 4 -i 0.1 &>/dev/null
|
||||
check_err $? "ping failed"
|
||||
log_test "$mode: $message"
|
||||
}
|
||||
|
||||
macvlan_over_bond()
|
||||
{
|
||||
local param="$1"
|
||||
RET=0
|
||||
|
||||
# setup new bond mode
|
||||
bond_reset "${param}"
|
||||
|
||||
ip -n ${s_ns} link add link bond0 name macv0 type macvlan mode bridge
|
||||
ip -n ${s_ns} link set macv0 netns ${m1_ns}
|
||||
ip -n ${m1_ns} link set dev macv0 up
|
||||
ip -n ${m1_ns} addr add ${m1_ip4}/24 dev macv0
|
||||
ip -n ${m1_ns} addr add ${m1_ip6}/24 dev macv0
|
||||
|
||||
ip -n ${s_ns} link add link bond0 name macv0 type macvlan mode bridge
|
||||
ip -n ${s_ns} link set macv0 netns ${m2_ns}
|
||||
ip -n ${m2_ns} link set dev macv0 up
|
||||
ip -n ${m2_ns} addr add ${m2_ip4}/24 dev macv0
|
||||
ip -n ${m2_ns} addr add ${m2_ip6}/24 dev macv0
|
||||
|
||||
sleep 2
|
||||
|
||||
check_connection "${c_ns}" "${s_ip4}" "IPv4: client->server"
|
||||
check_connection "${c_ns}" "${s_ip6}" "IPv6: client->server"
|
||||
check_connection "${c_ns}" "${m1_ip4}" "IPv4: client->macvlan_1"
|
||||
check_connection "${c_ns}" "${m1_ip6}" "IPv6: client->macvlan_1"
|
||||
check_connection "${c_ns}" "${m2_ip4}" "IPv4: client->macvlan_2"
|
||||
check_connection "${c_ns}" "${m2_ip6}" "IPv6: client->macvlan_2"
|
||||
check_connection "${m1_ns}" "${m2_ip4}" "IPv4: macvlan_1->macvlan_2"
|
||||
check_connection "${m1_ns}" "${m2_ip6}" "IPv6: macvlan_1->macvlan_2"
|
||||
|
||||
|
||||
sleep 5
|
||||
|
||||
check_connection "${s_ns}" "${c_ip4}" "IPv4: server->client"
|
||||
check_connection "${s_ns}" "${c_ip6}" "IPv6: server->client"
|
||||
check_connection "${m1_ns}" "${c_ip4}" "IPv4: macvlan_1->client"
|
||||
check_connection "${m1_ns}" "${c_ip6}" "IPv6: macvlan_1->client"
|
||||
check_connection "${m2_ns}" "${c_ip4}" "IPv4: macvlan_2->client"
|
||||
check_connection "${m2_ns}" "${c_ip6}" "IPv6: macvlan_2->client"
|
||||
check_connection "${m2_ns}" "${m1_ip4}" "IPv4: macvlan_2->macvlan_2"
|
||||
check_connection "${m2_ns}" "${m1_ip6}" "IPv6: macvlan_2->macvlan_2"
|
||||
|
||||
ip -n ${c_ns} neigh flush dev eth0
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
setup_prepare
|
||||
ip netns add ${m1_ns}
|
||||
ip netns add ${m2_ns}
|
||||
|
||||
modes="active-backup balance-tlb balance-alb"
|
||||
|
||||
for mode in $modes; do
|
||||
macvlan_over_bond "mode $mode"
|
||||
done
|
||||
|
||||
exit $EXIT_STATUS
|
||||
96
tools/testing/selftests/drivers/net/bonding/bond_macvlan_ipvlan.sh
Executable file
96
tools/testing/selftests/drivers/net/bonding/bond_macvlan_ipvlan.sh
Executable file
|
|
@ -0,0 +1,96 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Test macvlan/ipvlan over bond
|
||||
|
||||
lib_dir=$(dirname "$0")
|
||||
source ${lib_dir}/bond_topo_2d1c.sh
|
||||
|
||||
xvlan1_ns="xvlan1-$(mktemp -u XXXXXX)"
|
||||
xvlan2_ns="xvlan2-$(mktemp -u XXXXXX)"
|
||||
xvlan1_ip4="192.0.2.11"
|
||||
xvlan1_ip6="2001:db8::11"
|
||||
xvlan2_ip4="192.0.2.12"
|
||||
xvlan2_ip6="2001:db8::12"
|
||||
|
||||
cleanup()
|
||||
{
|
||||
client_destroy
|
||||
server_destroy
|
||||
gateway_destroy
|
||||
|
||||
ip netns del ${xvlan1_ns}
|
||||
ip netns del ${xvlan2_ns}
|
||||
}
|
||||
|
||||
check_connection()
|
||||
{
|
||||
local ns=${1}
|
||||
local target=${2}
|
||||
local message=${3}
|
||||
RET=0
|
||||
|
||||
ip netns exec ${ns} ping ${target} -c 4 -i 0.1 &>/dev/null
|
||||
check_err $? "ping failed"
|
||||
log_test "${bond_mode}/${xvlan_type}_${xvlan_mode}: ${message}"
|
||||
}
|
||||
|
||||
xvlan_over_bond()
|
||||
{
|
||||
local param="$1"
|
||||
local xvlan_type="$2"
|
||||
local xvlan_mode="$3"
|
||||
RET=0
|
||||
|
||||
# setup new bond mode
|
||||
bond_reset "${param}"
|
||||
|
||||
ip -n ${s_ns} link add link bond0 name ${xvlan_type}0 type ${xvlan_type} mode ${xvlan_mode}
|
||||
ip -n ${s_ns} link set ${xvlan_type}0 netns ${xvlan1_ns}
|
||||
ip -n ${xvlan1_ns} link set dev ${xvlan_type}0 up
|
||||
ip -n ${xvlan1_ns} addr add ${xvlan1_ip4}/24 dev ${xvlan_type}0
|
||||
ip -n ${xvlan1_ns} addr add ${xvlan1_ip6}/24 dev ${xvlan_type}0
|
||||
|
||||
ip -n ${s_ns} link add link bond0 name ${xvlan_type}0 type ${xvlan_type} mode ${xvlan_mode}
|
||||
ip -n ${s_ns} link set ${xvlan_type}0 netns ${xvlan2_ns}
|
||||
ip -n ${xvlan2_ns} link set dev ${xvlan_type}0 up
|
||||
ip -n ${xvlan2_ns} addr add ${xvlan2_ip4}/24 dev ${xvlan_type}0
|
||||
ip -n ${xvlan2_ns} addr add ${xvlan2_ip6}/24 dev ${xvlan_type}0
|
||||
|
||||
sleep 2
|
||||
|
||||
check_connection "${c_ns}" "${s_ip4}" "IPv4: client->server"
|
||||
check_connection "${c_ns}" "${s_ip6}" "IPv6: client->server"
|
||||
check_connection "${c_ns}" "${xvlan1_ip4}" "IPv4: client->${xvlan_type}_1"
|
||||
check_connection "${c_ns}" "${xvlan1_ip6}" "IPv6: client->${xvlan_type}_1"
|
||||
check_connection "${c_ns}" "${xvlan2_ip4}" "IPv4: client->${xvlan_type}_2"
|
||||
check_connection "${c_ns}" "${xvlan2_ip6}" "IPv6: client->${xvlan_type}_2"
|
||||
check_connection "${xvlan1_ns}" "${xvlan2_ip4}" "IPv4: ${xvlan_type}_1->${xvlan_type}_2"
|
||||
check_connection "${xvlan1_ns}" "${xvlan2_ip6}" "IPv6: ${xvlan_type}_1->${xvlan_type}_2"
|
||||
|
||||
check_connection "${s_ns}" "${c_ip4}" "IPv4: server->client"
|
||||
check_connection "${s_ns}" "${c_ip6}" "IPv6: server->client"
|
||||
check_connection "${xvlan1_ns}" "${c_ip4}" "IPv4: ${xvlan_type}_1->client"
|
||||
check_connection "${xvlan1_ns}" "${c_ip6}" "IPv6: ${xvlan_type}_1->client"
|
||||
check_connection "${xvlan2_ns}" "${c_ip4}" "IPv4: ${xvlan_type}_2->client"
|
||||
check_connection "${xvlan2_ns}" "${c_ip6}" "IPv6: ${xvlan_type}_2->client"
|
||||
check_connection "${xvlan2_ns}" "${xvlan1_ip4}" "IPv4: ${xvlan_type}_2->${xvlan_type}_1"
|
||||
check_connection "${xvlan2_ns}" "${xvlan1_ip6}" "IPv6: ${xvlan_type}_2->${xvlan_type}_1"
|
||||
|
||||
ip -n ${c_ns} neigh flush dev eth0
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
setup_prepare
|
||||
ip netns add ${xvlan1_ns}
|
||||
ip netns add ${xvlan2_ns}
|
||||
|
||||
bond_modes="active-backup balance-tlb balance-alb"
|
||||
|
||||
for bond_mode in ${bond_modes}; do
|
||||
xvlan_over_bond "mode ${bond_mode}" macvlan bridge
|
||||
xvlan_over_bond "mode ${bond_mode}" ipvlan l2
|
||||
done
|
||||
|
||||
exit $EXIT_STATUS
|
||||
|
|
@ -3,6 +3,7 @@ CONFIG_BRIDGE=y
|
|||
CONFIG_DUMMY=y
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_MACVLAN=y
|
||||
CONFIG_IPVLAN=y
|
||||
CONFIG_NET_ACT_GACT=y
|
||||
CONFIG_NET_CLS_FLOWER=y
|
||||
CONFIG_NET_SCH_INGRESS=y
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user