| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- ROUTER_NUM_NETIFS=4
- router_h1_create()
- {
- simple_if_init $h1 192.0.1.1/24
- ip route add 193.0.0.0/8 via 192.0.1.2 dev $h1
- }
- router_h1_destroy()
- {
- ip route del 193.0.0.0/8 via 192.0.1.2 dev $h1
- simple_if_fini $h1 192.0.1.1/24
- }
- router_h2_create()
- {
- simple_if_init $h2 192.0.2.1/24
- tc qdisc add dev $h2 handle ffff: ingress
- }
- router_h2_destroy()
- {
- tc qdisc del dev $h2 handle ffff: ingress
- simple_if_fini $h2 192.0.2.1/24
- }
- router_create()
- {
- ip link set dev $rp1 up
- ip link set dev $rp2 up
- ip address add 192.0.1.2/24 dev $rp1
- ip address add 192.0.2.2/24 dev $rp2
- }
- router_destroy()
- {
- ip address del 192.0.2.2/24 dev $rp2
- ip address del 192.0.1.2/24 dev $rp1
- ip link set dev $rp2 down
- ip link set dev $rp1 down
- }
- router_setup_prepare()
- {
- h1=${NETIFS[p1]}
- rp1=${NETIFS[p2]}
- rp2=${NETIFS[p3]}
- h2=${NETIFS[p4]}
- h1mac=$(mac_get $h1)
- rp1mac=$(mac_get $rp1)
- vrf_prepare
- router_h1_create
- router_h2_create
- router_create
- }
- router_offload_validate()
- {
- local route_count=$1
- local offloaded_count
- offloaded_count=$(ip route | grep -o 'offload' | wc -l)
- [[ $offloaded_count -ge $route_count ]]
- }
- router_routes_create()
- {
- local route_count=$1
- local count=0
- ROUTE_FILE="$(mktemp)"
- for i in {0..255}
- do
- for j in {0..255}
- do
- for k in {0..255}
- do
- if [[ $count -eq $route_count ]]; then
- break 3
- fi
- echo route add 193.${i}.${j}.${k}/32 via \
- 192.0.2.1 dev $rp2 >> $ROUTE_FILE
- ((count++))
- done
- done
- done
- ip -b $ROUTE_FILE &> /dev/null
- }
- router_routes_destroy()
- {
- if [[ -v ROUTE_FILE ]]; then
- rm -f $ROUTE_FILE
- fi
- }
- router_test()
- {
- local route_count=$1
- local should_fail=$2
- local count=0
- RET=0
- router_routes_create $route_count
- router_offload_validate $route_count
- check_err_fail $should_fail $? "Offload of $route_count routes"
- if [[ $RET -ne 0 ]] || [[ $should_fail -eq 1 ]]; then
- return
- fi
- tc filter add dev $h2 ingress protocol ip pref 1 flower \
- skip_sw dst_ip 193.0.0.0/8 action drop
- for i in {0..255}
- do
- for j in {0..255}
- do
- for k in {0..255}
- do
- if [[ $count -eq $route_count ]]; then
- break 3
- fi
- $MZ $h1 -c 1 -p 64 -a $h1mac -b $rp1mac \
- -A 192.0.1.1 -B 193.${i}.${j}.${k} \
- -t ip -q
- ((count++))
- done
- done
- done
- tc_check_packets "dev $h2 ingress" 1 $route_count
- check_err $? "Offload mismatch"
- tc filter del dev $h2 ingress protocol ip pref 1 flower \
- skip_sw dst_ip 193.0.0.0/8 action drop
- router_routes_destroy
- }
- router_cleanup()
- {
- pre_cleanup
- router_routes_destroy
- router_destroy
- router_h2_destroy
- router_h1_destroy
- vrf_cleanup
- }
|