This test checks that MTU given on vti link creation is actually
configured, and that tunnel is not created with an invalid MTU.

Signed-off-by: Stefano Brivio <sbri...@redhat.com>
---
 tools/testing/selftests/net/pmtu.sh | 45 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/pmtu.sh 
b/tools/testing/selftests/net/pmtu.sh
index 336b8545c4bd..2a7ada49d0c0 100755
--- a/tools/testing/selftests/net/pmtu.sh
+++ b/tools/testing/selftests/net/pmtu.sh
@@ -29,9 +29,14 @@
 #
 # - pmtu_vti6_default_mtu
 #      Same as above, for IPv6
+#
+# - pmtu_vti4_link_add_mtu
+#      Set up vti4 interface passing MTU value at link creation, check MTU is
+#      configured, and that link is not created with invalid MTU values
 
 tests="pmtu_vti4_exception pmtu_vti6_exception
-       pmtu_vti4_default_mtu pmtu_vti6_default_mtu"
+       pmtu_vti4_default_mtu pmtu_vti6_default_mtu
+       pmtu_vti4_link_add_mtu"
 
 NS_A="ns-$(mktemp -u XXXXXX)"
 NS_B="ns-$(mktemp -u XXXXXX)"
@@ -306,6 +311,44 @@ test_pmtu_vti6_default_mtu() {
        return 1
 }
 
+test_pmtu_vti4_link_add_mtu() {
+       setup namespaces && return 2
+
+       ${ns_a} ip link add vti4_a type vti local ${veth4_a_addr} remote 
${veth4_b_addr} key 10
+       [ $? -ne 0 ] && echo "  vti not supported" && return 2
+       ${ns_a} ip link del vti4_a
+
+       pass=1
+
+       min=68
+       max=$((65528 - 20))
+       # Check invalid values first
+       for v in $((min - 1)) $((max + 1)); do
+               ${ns_a} ip link add vti4_a mtu ${v} type vti local 
${veth4_a_addr} remote ${veth4_b_addr} key 10 2>/dev/null
+               # This can fail, or MTU can be adjusted to a proper value
+               [ $? -ne 0 ] && continue
+               mtu="$(link_get_mtu "${ns_a}" vti4_a)"
+               if [ ${mtu} -lt ${min} -o ${mtu} -gt ${max} ]; then
+                       echo "  vti tunnel created with invalid MTU ${mtu}"
+                       pass=0
+               fi
+               ${ns_a} ip link del vti4_a
+       done
+
+       # Now check valid values
+       for v in ${min} 1300 ${max}; do
+               ${ns_a} ip link add vti4_a mtu ${v} type vti local 
${veth4_a_addr} remote ${veth4_b_addr} key 10
+               mtu="$(link_get_mtu "${ns_a}" vti4_a)"
+               ${ns_a} ip link del vti4_a
+               if [ "${mtu}" != "${v}" ]; then
+                       echo "  vti MTU ${mtu} doesn't match configured value 
${v}"
+                       pass=0
+               fi
+       done
+
+       return ${pass}
+}
+
 trap cleanup EXIT
 
 exitcode=0
-- 
2.15.1

Reply via email to