2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 01:51:26 +00:00

ovs-router: Fix flushing of local routes.

Since commit 8e4e45887ec3, priority of 'local' route entries no
longer matches with 'plen'.  This should be taken into account
while flushing cached routes, otherwise they will remain in OVS
even after removing them from the system:

  # ifconfig eth0 11.0.0.1
  # ovs-appctl ovs/route/show
    --- A new route synchronized from kernel route table ---
    Cached: 11.0.0.1/32 dev eth0 SRC 11.0.0.1 local
  # ifconfig eth0 0
  # ovs-appctl ovs/route/show
    -- the new route entry is still in ovs route table ---
    Cached: 11.0.0.1/32 dev eth0 SRC 11.0.0.1 local

CC: wenxu <wenxu@ucloud.cn>
Fixes: 8e4e45887ec3 ("ofproto-dpif-xlate: makes OVS native tunneling honor tunnel-specified source addresses")
Reported-by: Zheng Jingzhou <glovejmm@163.com>
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2020-July/373093.html
Acked-by: William Tu <u9012063@gmail.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Signed-off-by: William Tu <u9012063@gmail.com>
This commit is contained in:
Ilya Maximets 2020-07-21 14:47:32 +02:00 committed by William Tu
parent 9cfb1d0f7d
commit 9e11517e6c
5 changed files with 33 additions and 2 deletions

View File

@ -666,6 +666,7 @@ Ying Chen yingchen@vmware.com
Yongqiang Liu liuyq7809@gmail.com
ZHANG Zhiming zhangzhiming@yunshan.net.cn
Zhangguanghui zhang.guanghui@h3c.com
Zheng Jingzhou glovejmm@163.com
Ziyou Wang ziyouw@vmware.com
ankur dwivedi ankurengg2003@gmail.com
chen zhang 3zhangchen9211@gmail.com

View File

@ -505,7 +505,7 @@ ovs_router_flush(void)
ovs_mutex_lock(&mutex);
classifier_defer(&cls);
CLS_FOR_EACH(rt, cr, &cls) {
if (rt->priority == rt->plen) {
if (rt->priority == rt->plen || rt->local) {
rt_entry_delete__(&rt->cr);
}
}

View File

@ -154,7 +154,8 @@ SYSTEM_KMOD_TESTSUITE_AT = \
SYSTEM_USERSPACE_TESTSUITE_AT = \
tests/system-userspace-testsuite.at \
tests/system-userspace-macros.at \
tests/system-userspace-packet-type-aware.at
tests/system-userspace-packet-type-aware.at \
tests/system-route.at
SYSTEM_TSO_TESTSUITE_AT = \
tests/system-tso-testsuite.at \

28
tests/system-route.at Normal file
View File

@ -0,0 +1,28 @@
AT_BANNER([system-route])
dnl Add an interface, add/del ip address, check that OVS catches route updates.
AT_SETUP([ovs-route - add/remove system route])
AT_KEYWORDS([route])
OVS_TRAFFIC_VSWITCHD_START()
dnl Create tap port.
AT_CHECK([ip tuntap add name p1-route mode tap])
AT_CHECK([ip link set p1-route up])
on_exit 'ip link del p1-route'
dnl Add ip address.
AT_CHECK([ip addr add 10.0.0.17/24 dev p1-route], [0], [stdout])
dnl Check that OVS catches route updates.
OVS_WAIT_UNTIL([ovs-appctl ovs/route/show | grep 'p1-route' | sort], [0], [dnl
Cached: 10.0.0.17/24 dev p1-route SRC 10.0.0.17
Cached: 10.0.0.17/32 dev p1-route SRC 10.0.0.17 local
])
dnl Delete ip address.
AT_CHECK([ip addr del 10.0.0.17/24 dev p1-route], [0], [stdout])
dnl Check that routes was removed from OVS.
OVS_WAIT_UNTIL([test `ovs-appctl ovs/route/show | grep -c 'p1-route'` -eq 0 ])
OVS_TRAFFIC_VSWITCHD_STOP
AT_CLEANUP

View File

@ -26,3 +26,4 @@ m4_include([tests/system-traffic.at])
m4_include([tests/system-layer3-tunnels.at])
m4_include([tests/system-interface.at])
m4_include([tests/system-userspace-packet-type-aware.at])
m4_include([tests/system-route.at])