mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
selftests/net/openvswitch: add SET action test
Add test_action_set exercising OVS_ACTION_ATTR_SET with an ipv4 dst rewrite. The test verifies the SET action in three steps: first confirm normal forwarding, then apply set(ipv4(dst=10.0.0.99)) to rewrite the destination to an address nobody owns and verify ping fails, then restore normal forwarding and verify connectivity recovers. Signed-off-by: Minxi Hou <houminxi@gmail.com> Reviewed-by: Aaron Conole <aconole@redhat.com> Link: https://patch.msgid.link/20260612130503.311240-1-houminxi@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
86bbdbac17
commit
3b165c2a29
|
|
@ -31,6 +31,7 @@ tests="
|
|||
pop_vlan vlan: POP_VLAN action strips tag
|
||||
dec_ttl ttl: dec_ttl decrements IP TTL
|
||||
flow_set flow-set: Flow modify
|
||||
action_set set: SET action rewrites fields
|
||||
psample psample: Sampling packets with psample"
|
||||
|
||||
info() {
|
||||
|
|
@ -377,6 +378,71 @@ test_flow_set() {
|
|||
return 0
|
||||
}
|
||||
|
||||
test_action_set() {
|
||||
sbx_add "test_action_set" || return $?
|
||||
ovs_add_dp "test_action_set" settest || return 1
|
||||
|
||||
info "create namespaces"
|
||||
for ns in client server; do
|
||||
ovs_add_netns_and_veths "test_action_set" "settest" "$ns" \
|
||||
"${ns:0:1}0" "${ns:0:1}1" || return 1
|
||||
done
|
||||
|
||||
ip netns exec client ip addr add 10.0.0.1/24 dev c1
|
||||
ip netns exec client ip link set c1 up
|
||||
ip netns exec server ip addr add 10.0.0.2/24 dev s1
|
||||
ip netns exec server ip link set s1 up
|
||||
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(2),eth(),eth_type(0x0806),arp()' '1' || return 1
|
||||
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(1),eth(),eth_type(0x0800),ipv4()' '2' || return 1
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(2),eth(),eth_type(0x0800),ipv4()' '1' || return 1
|
||||
|
||||
info "verify connectivity without SET"
|
||||
ovs_sbx "test_action_set" ip netns exec client ping -c 1 -W 2 \
|
||||
10.0.0.2 || return 1
|
||||
|
||||
ovs_del_flows "test_action_set" settest
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(2),eth(),eth_type(0x0806),arp()' '1' || return 1
|
||||
|
||||
info "set ipv4 dst to unreachable address"
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(1),eth(),eth_type(0x0800),ipv4()' \
|
||||
'set(ipv4(dst=10.0.0.99)),2' || return 1
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(2),eth(),eth_type(0x0800),ipv4()' '1' || return 1
|
||||
|
||||
info "verify ping fails with rewritten dst"
|
||||
ovs_sbx "test_action_set" ip netns exec client ping -c 1 -W 2 \
|
||||
10.0.0.2 >/dev/null 2>&1 \
|
||||
&& { info "FAIL: ping should fail with dst rewritten"
|
||||
return 1; }
|
||||
|
||||
ovs_del_flows "test_action_set" settest
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(2),eth(),eth_type(0x0806),arp()' '1' || return 1
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(1),eth(),eth_type(0x0800),ipv4()' '2' || return 1
|
||||
ovs_add_flow "test_action_set" settest \
|
||||
'in_port(2),eth(),eth_type(0x0800),ipv4()' '1' || return 1
|
||||
|
||||
info "verify connectivity restored without SET"
|
||||
ovs_sbx "test_action_set" ip netns exec client ping -c 1 -W 2 \
|
||||
10.0.0.2 || return 1
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# psample test
|
||||
# - use psample to observe packets
|
||||
test_psample() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user