|
@@ -56,7 +56,8 @@ TEST_NET6[2]=2001:db8:102
|
|
|
|
|
|
# connected gateway
|
|
# connected gateway
|
|
CONGW[1]=169.254.1.254
|
|
CONGW[1]=169.254.1.254
|
|
-CONGW[2]=169.254.5.254
|
|
|
|
|
|
+CONGW[2]=169.254.3.254
|
|
|
|
+CONGW[3]=169.254.5.254
|
|
|
|
|
|
# recursive gateway
|
|
# recursive gateway
|
|
RECGW4[1]=169.254.11.254
|
|
RECGW4[1]=169.254.11.254
|
|
@@ -232,6 +233,23 @@ run_ip()
|
|
log_test $? ${exp_rc} "${desc}"
|
|
log_test $? ${exp_rc} "${desc}"
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+run_ip_mpath()
|
|
|
|
+{
|
|
|
|
+ local table="$1"
|
|
|
|
+ local prefix="$2"
|
|
|
|
+ local nh1="$3"
|
|
|
|
+ local nh2="$4"
|
|
|
|
+ local exp_rc="$5"
|
|
|
|
+ local desc="$6"
|
|
|
|
+
|
|
|
|
+ # dev arg may be empty
|
|
|
|
+ [ -n "${dev}" ] && dev="dev ${dev}"
|
|
|
|
+
|
|
|
|
+ run_cmd ip ro add table "${table}" "${prefix}"/32 \
|
|
|
|
+ nexthop via ${nh1} nexthop via ${nh2}
|
|
|
|
+ log_test $? ${exp_rc} "${desc}"
|
|
|
|
+}
|
|
|
|
+
|
|
valid_onlink_ipv4()
|
|
valid_onlink_ipv4()
|
|
{
|
|
{
|
|
# - unicast connected, unicast recursive
|
|
# - unicast connected, unicast recursive
|
|
@@ -243,13 +261,37 @@ valid_onlink_ipv4()
|
|
|
|
|
|
log_subsection "VRF ${VRF}"
|
|
log_subsection "VRF ${VRF}"
|
|
|
|
|
|
- run_ip ${VRF_TABLE} ${TEST_NET4[2]}.1 ${CONGW[2]} ${NETIFS[p5]} 0 "unicast connected"
|
|
|
|
|
|
+ run_ip ${VRF_TABLE} ${TEST_NET4[2]}.1 ${CONGW[3]} ${NETIFS[p5]} 0 "unicast connected"
|
|
run_ip ${VRF_TABLE} ${TEST_NET4[2]}.2 ${RECGW4[2]} ${NETIFS[p5]} 0 "unicast recursive"
|
|
run_ip ${VRF_TABLE} ${TEST_NET4[2]}.2 ${RECGW4[2]} ${NETIFS[p5]} 0 "unicast recursive"
|
|
|
|
|
|
log_subsection "VRF device, PBR table"
|
|
log_subsection "VRF device, PBR table"
|
|
|
|
|
|
- run_ip ${PBR_TABLE} ${TEST_NET4[2]}.3 ${CONGW[2]} ${NETIFS[p5]} 0 "unicast connected"
|
|
|
|
|
|
+ run_ip ${PBR_TABLE} ${TEST_NET4[2]}.3 ${CONGW[3]} ${NETIFS[p5]} 0 "unicast connected"
|
|
run_ip ${PBR_TABLE} ${TEST_NET4[2]}.4 ${RECGW4[2]} ${NETIFS[p5]} 0 "unicast recursive"
|
|
run_ip ${PBR_TABLE} ${TEST_NET4[2]}.4 ${RECGW4[2]} ${NETIFS[p5]} 0 "unicast recursive"
|
|
|
|
+
|
|
|
|
+ # multipath version
|
|
|
|
+ #
|
|
|
|
+ log_subsection "default VRF - main table - multipath"
|
|
|
|
+
|
|
|
|
+ run_ip_mpath 254 ${TEST_NET4[1]}.5 \
|
|
|
|
+ "${CONGW[1]} dev ${NETIFS[p1]} onlink" \
|
|
|
|
+ "${CONGW[2]} dev ${NETIFS[p3]} onlink" \
|
|
|
|
+ 0 "unicast connected - multipath"
|
|
|
|
+
|
|
|
|
+ run_ip_mpath 254 ${TEST_NET4[1]}.6 \
|
|
|
|
+ "${RECGW4[1]} dev ${NETIFS[p1]} onlink" \
|
|
|
|
+ "${RECGW4[2]} dev ${NETIFS[p3]} onlink" \
|
|
|
|
+ 0 "unicast recursive - multipath"
|
|
|
|
+
|
|
|
|
+ run_ip_mpath 254 ${TEST_NET4[1]}.7 \
|
|
|
|
+ "${CONGW[1]} dev ${NETIFS[p1]}" \
|
|
|
|
+ "${CONGW[2]} dev ${NETIFS[p3]} onlink" \
|
|
|
|
+ 0 "unicast connected - multipath onlink first only"
|
|
|
|
+
|
|
|
|
+ run_ip_mpath 254 ${TEST_NET4[1]}.8 \
|
|
|
|
+ "${CONGW[1]} dev ${NETIFS[p1]} onlink" \
|
|
|
|
+ "${CONGW[2]} dev ${NETIFS[p3]}" \
|
|
|
|
+ 0 "unicast connected - multipath onlink second only"
|
|
}
|
|
}
|
|
|
|
|
|
invalid_onlink_ipv4()
|
|
invalid_onlink_ipv4()
|
|
@@ -289,6 +331,21 @@ run_ip6()
|
|
log_test $? ${exp_rc} "${desc}"
|
|
log_test $? ${exp_rc} "${desc}"
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+run_ip6_mpath()
|
|
|
|
+{
|
|
|
|
+ local table="$1"
|
|
|
|
+ local prefix="$2"
|
|
|
|
+ local opts="$3"
|
|
|
|
+ local nh1="$4"
|
|
|
|
+ local nh2="$5"
|
|
|
|
+ local exp_rc="$6"
|
|
|
|
+ local desc="$7"
|
|
|
|
+
|
|
|
|
+ run_cmd ip -6 ro add table "${table}" "${prefix}"/128 "${opts}" \
|
|
|
|
+ nexthop via ${nh1} nexthop via ${nh2}
|
|
|
|
+ log_test $? ${exp_rc} "${desc}"
|
|
|
|
+}
|
|
|
|
+
|
|
valid_onlink_ipv6()
|
|
valid_onlink_ipv6()
|
|
{
|
|
{
|
|
# - unicast connected, unicast recursive, v4-mapped
|
|
# - unicast connected, unicast recursive, v4-mapped
|
|
@@ -310,6 +367,40 @@ valid_onlink_ipv6()
|
|
run_ip6 ${PBR_TABLE} ${TEST_NET6[2]}::4 ${V6ADDRS[p5]/::*}::64 ${NETIFS[p5]} 0 "unicast connected"
|
|
run_ip6 ${PBR_TABLE} ${TEST_NET6[2]}::4 ${V6ADDRS[p5]/::*}::64 ${NETIFS[p5]} 0 "unicast connected"
|
|
run_ip6 ${PBR_TABLE} ${TEST_NET6[2]}::5 ${RECGW6[2]} ${NETIFS[p5]} 0 "unicast recursive"
|
|
run_ip6 ${PBR_TABLE} ${TEST_NET6[2]}::5 ${RECGW6[2]} ${NETIFS[p5]} 0 "unicast recursive"
|
|
run_ip6 ${PBR_TABLE} ${TEST_NET6[2]}::6 ::ffff:${TEST_NET4IN6[2]} ${NETIFS[p5]} 0 "v4-mapped"
|
|
run_ip6 ${PBR_TABLE} ${TEST_NET6[2]}::6 ::ffff:${TEST_NET4IN6[2]} ${NETIFS[p5]} 0 "v4-mapped"
|
|
|
|
+
|
|
|
|
+ # multipath version
|
|
|
|
+ #
|
|
|
|
+ log_subsection "default VRF - main table - multipath"
|
|
|
|
+
|
|
|
|
+ run_ip6_mpath 254 ${TEST_NET6[1]}::4 "onlink" \
|
|
|
|
+ "${V6ADDRS[p1]/::*}::64 dev ${NETIFS[p1]}" \
|
|
|
|
+ "${V6ADDRS[p3]/::*}::64 dev ${NETIFS[p3]}" \
|
|
|
|
+ 0 "unicast connected - multipath onlink"
|
|
|
|
+
|
|
|
|
+ run_ip6_mpath 254 ${TEST_NET6[1]}::5 "onlink" \
|
|
|
|
+ "${RECGW6[1]} dev ${NETIFS[p1]}" \
|
|
|
|
+ "${RECGW6[2]} dev ${NETIFS[p3]}" \
|
|
|
|
+ 0 "unicast recursive - multipath onlink"
|
|
|
|
+
|
|
|
|
+ run_ip6_mpath 254 ${TEST_NET6[1]}::6 "onlink" \
|
|
|
|
+ "::ffff:${TEST_NET4IN6[1]} dev ${NETIFS[p1]}" \
|
|
|
|
+ "::ffff:${TEST_NET4IN6[2]} dev ${NETIFS[p3]}" \
|
|
|
|
+ 0 "v4-mapped - multipath onlink"
|
|
|
|
+
|
|
|
|
+ run_ip6_mpath 254 ${TEST_NET6[1]}::7 "" \
|
|
|
|
+ "${V6ADDRS[p1]/::*}::64 dev ${NETIFS[p1]} onlink" \
|
|
|
|
+ "${V6ADDRS[p3]/::*}::64 dev ${NETIFS[p3]} onlink" \
|
|
|
|
+ 0 "unicast connected - multipath onlink both nexthops"
|
|
|
|
+
|
|
|
|
+ run_ip6_mpath 254 ${TEST_NET6[1]}::8 "" \
|
|
|
|
+ "${V6ADDRS[p1]/::*}::64 dev ${NETIFS[p1]} onlink" \
|
|
|
|
+ "${V6ADDRS[p3]/::*}::64 dev ${NETIFS[p3]}" \
|
|
|
|
+ 0 "unicast connected - multipath onlink first only"
|
|
|
|
+
|
|
|
|
+ run_ip6_mpath 254 ${TEST_NET6[1]}::9 "" \
|
|
|
|
+ "${V6ADDRS[p1]/::*}::64 dev ${NETIFS[p1]}" \
|
|
|
|
+ "${V6ADDRS[p3]/::*}::64 dev ${NETIFS[p3]} onlink" \
|
|
|
|
+ 0 "unicast connected - multipath onlink second only"
|
|
}
|
|
}
|
|
|
|
|
|
invalid_onlink_ipv6()
|
|
invalid_onlink_ipv6()
|
|
@@ -355,6 +446,7 @@ run_onlink_tests()
|
|
log_section "IPv6 onlink"
|
|
log_section "IPv6 onlink"
|
|
log_subsection "Valid onlink commands"
|
|
log_subsection "Valid onlink commands"
|
|
valid_onlink_ipv6
|
|
valid_onlink_ipv6
|
|
|
|
+ log_subsection "Invalid onlink commands"
|
|
invalid_onlink_ipv6
|
|
invalid_onlink_ipv6
|
|
}
|
|
}
|
|
|
|
|