mirror of
https://github.com/openvswitch/ovs
synced 2025-10-25 15:07:05 +00:00
When debug logging is enabled, dpif-netdev can print each flow as it is installed, which it currently does using OpenFlow match formatting. Compared to ODP formatting, there generally isn't too much difference since the fields are largely the same but it is inconsistent with other logging in dpif-netdev as well as the analogous functions that deal with the kernel. However, in some cases there is a difference between the two formats, such as in the cases of input port or tunnel metadata. For input port, datapath format helped detect that the generated masks were incorrect. As for tunnels, at the moment, it's possible to convert between the two formats on demand as we have a global metadata table. In the future, though this won't be possible as the metadata table becomes per-bridge which the datapath won't have access to. Signed-off-by: Jesse Gross <jesse@kernel.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
163 lines
8.3 KiB
Plaintext
163 lines
8.3 KiB
Plaintext
AT_BANNER([dpif-netdev])
|
|
|
|
m4_divert_push([PREPARE_TESTS])
|
|
[
|
|
# Strips out uninteresting parts of flow output, as well as parts
|
|
# that vary from one run to another (e.g., timing and bond actions).
|
|
strip_xout () {
|
|
sed '
|
|
s/ufid:[-0-9a-f]* //
|
|
s/used:[0-9]*\.[0-9]*/used:0.0/
|
|
s/actions:.*/actions: <del>/
|
|
s/packets:[0-9]*/packets:0/
|
|
s/bytes:[0-9]*/bytes:0/
|
|
' | sort
|
|
}
|
|
|
|
strip_xout_keep_actions () {
|
|
sed '
|
|
s/ufid:[-0-9a-f]* //
|
|
s/used:[0-9]*\.[0-9]*/used:0.0/
|
|
s/packets:[0-9]*/packets:0/
|
|
s/bytes:[0-9]*/bytes:0/
|
|
' | sort
|
|
}
|
|
|
|
filter_flow_install () {
|
|
grep 'flow_add' | sed 's/.*flow_add: //' | sort | uniq
|
|
}
|
|
|
|
filter_flow_dump () {
|
|
grep 'flow_dump ' | sed '
|
|
s/.*flow_dump //
|
|
s/used:[0-9]*\.[0-9]*/used:0.0/
|
|
' | sort | uniq
|
|
}
|
|
|
|
strip_metadata () {
|
|
sed 's/metadata=0x[0-9a-f]*/metadata=0x0/'
|
|
}
|
|
]
|
|
m4_divert_pop([PREPARE_TESTS])
|
|
|
|
m4_define([DPIF_NETDEV_DUMMY_IFACE],
|
|
[AT_SETUP([dpif-netdev - $1 interface])
|
|
# Create br0 with interfaces p1 and p7
|
|
# and br1 with interfaces p2 and p8
|
|
# with p1 and p2 connected via unix domain socket
|
|
OVS_VSWITCHD_START(
|
|
[add-port br0 p1 -- set interface p1 type=$1 options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
|
|
add-port br0 p7 -- set interface p7 ofport_request=7 type=$1 -- \
|
|
add-br br1 -- \
|
|
set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
|
|
set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
|
|
fail-mode=secure -- \
|
|
add-port br1 p2 -- set interface p2 type=$1 options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
|
|
add-port br1 p8 -- set interface p8 ofport_request=8 type=$1 --], [], [],
|
|
[m4_if([$1], [dummy-pmd], [--dummy-numa="0,0,0,0,1,1,1,1"], [])])
|
|
AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
|
|
|
|
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
|
|
AT_CHECK([ovs-ofctl add-flow br1 action=normal])
|
|
ovs-appctl time/stop
|
|
ovs-appctl time/warp 5000
|
|
AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
|
|
AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
|
|
ovs-appctl time/warp 100
|
|
sleep 1 # wait for forwarders process packets
|
|
|
|
AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
|
|
recirc_id(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
|
|
recirc_id(0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
|
|
recirc_id(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
|
|
recirc_id(0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
|
|
])
|
|
|
|
OVS_VSWITCHD_STOP
|
|
AT_CLEANUP])
|
|
|
|
DPIF_NETDEV_DUMMY_IFACE([dummy])
|
|
DPIF_NETDEV_DUMMY_IFACE([dummy-pmd])
|
|
|
|
m4_define([DPIF_NETDEV_MISS_FLOW_INSTALL],
|
|
[AT_SETUP([dpif-netdev - miss upcall key matches flow_install - $1])
|
|
OVS_VSWITCHD_START(
|
|
[add-port br0 p1 -- set interface p1 type=$1 options:pstream=punix:$OVS_RUNDIR/p0.sock
|
|
set bridge br0 datapath-type=dummy other-config:datapath-id=1234 fail-mode=secure], [], [],
|
|
[m4_if([$1], [dummy-pmd], [--dummy-numa="0,0,0,0,1,1,1,1"], [])])
|
|
AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
|
|
|
|
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
|
|
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
|
|
sleep 1
|
|
|
|
AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
|
|
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
|
|
])
|
|
AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
|
|
recirc_id(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
|
|
])
|
|
|
|
# Now, the same again without megaflows.
|
|
AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
|
|
])
|
|
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
|
|
sleep 1
|
|
|
|
AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
|
|
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
|
|
])
|
|
AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
|
|
recirc_id(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
|
|
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), actions: <del>
|
|
])
|
|
|
|
OVS_VSWITCHD_STOP
|
|
AT_CLEANUP])
|
|
|
|
DPIF_NETDEV_MISS_FLOW_INSTALL([dummy])
|
|
DPIF_NETDEV_MISS_FLOW_INSTALL([dummy-pmd])
|
|
|
|
m4_define([DPIF_NETDEV_MISS_FLOW_DUMP],
|
|
[AT_SETUP([dpif-netdev - miss upcall key matches flow_dump - $1])
|
|
OVS_VSWITCHD_START(
|
|
[add-port br0 p1 -- set interface p1 type=$1 options:pstream=punix:$OVS_RUNDIR/p0.sock
|
|
set bridge br0 datapath-type=dummy other-config:datapath-id=1234 fail-mode=secure], [], [],
|
|
[m4_if([$1], [dummy-pmd], [--dummy-numa="0,0,0,0,1,1,1,1"], [])])
|
|
AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
|
|
], [])
|
|
AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])
|
|
|
|
AT_CHECK([ovs-ofctl add-flow br0 action=normal])
|
|
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
|
|
sleep 1
|
|
|
|
AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
|
|
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
|
|
])
|
|
AT_CHECK([filter_flow_dump < ovs-vswitchd.log | strip_xout], [0], [dnl
|
|
skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions: <del>
|
|
])
|
|
|
|
# Now, the same again without megaflows.
|
|
AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
|
|
])
|
|
AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
|
|
], [])
|
|
AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
|
|
sleep 1
|
|
|
|
AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
|
|
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
|
|
])
|
|
AT_CHECK([filter_flow_dump < ovs-vswitchd.log | strip_xout], [0], [dnl
|
|
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
|
|
skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions: <del>
|
|
])
|
|
|
|
OVS_VSWITCHD_STOP
|
|
AT_CLEANUP])
|
|
|
|
DPIF_NETDEV_MISS_FLOW_DUMP([dummy])
|
|
DPIF_NETDEV_MISS_FLOW_DUMP([dummy-pmd])
|