summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Maximets <i.maximets@ovn.org>2020-07-21 14:47:32 +0200
committerWilliam Tu <u9012063@gmail.com>2020-07-21 06:23:49 -0700
commit9e11517e6ca6814c8927cea78df98503890a21e2 (patch)
tree7f9b0d09b70f1b48f1ab248a5d33f8a996842179
parent9cfb1d0f7d65b52cc8f14d05c9e9ea8b64f90773 (diff)
downloadopenvswitch-9e11517e6ca6814c8927cea78df98503890a21e2.tar.gz
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>
-rw-r--r--AUTHORS.rst1
-rw-r--r--lib/ovs-router.c2
-rw-r--r--tests/automake.mk3
-rw-r--r--tests/system-route.at28
-rw-r--r--tests/system-userspace-testsuite.at1
5 files changed, 33 insertions, 2 deletions
diff --git a/AUTHORS.rst b/AUTHORS.rst
index 763f199ec..10ce012ba 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -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
diff --git a/lib/ovs-router.c b/lib/ovs-router.c
index bfb2b7071..09b81c6e5 100644
--- a/lib/ovs-router.c
+++ b/lib/ovs-router.c
@@ -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);
}
}
diff --git a/tests/automake.mk b/tests/automake.mk
index cbba5b170..677b99a6b 100644
--- a/tests/automake.mk
+++ b/tests/automake.mk
@@ -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 \
diff --git a/tests/system-route.at b/tests/system-route.at
new file mode 100644
index 000000000..1714273e3
--- /dev/null
+++ b/tests/system-route.at
@@ -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
diff --git a/tests/system-userspace-testsuite.at b/tests/system-userspace-testsuite.at
index b40da9579..2e9659a67 100644
--- a/tests/system-userspace-testsuite.at
+++ b/tests/system-userspace-testsuite.at
@@ -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])