Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 # Test for port-default priority. Non-IP packets ingress $swp1 and are
0005 # prioritized according to the default priority specified at the port.
0006 # rx_octets_prio_* counters are used to verify the prioritization.
0007 #
0008 # +-----------------------+
0009 # | H1                    |
0010 # |    + $h1              |
0011 # |    | 192.0.2.1/28     |
0012 # +----|------------------+
0013 #      |
0014 # +----|------------------+
0015 # | SW |                  |
0016 # |    + $swp1            |
0017 # |      192.0.2.2/28     |
0018 # |      APP=<prio>,1,0   |
0019 # +-----------------------+
0020 
0021 ALL_TESTS="
0022         ping_ipv4
0023         test_defprio
0024 "
0025 
0026 lib_dir=$(dirname $0)/../../../net/forwarding
0027 
0028 NUM_NETIFS=2
0029 : ${HIT_TIMEOUT:=1000} # ms
0030 source $lib_dir/lib.sh
0031 
0032 declare -a APP
0033 
0034 defprio_install()
0035 {
0036         local dev=$1; shift
0037         local prio=$1; shift
0038         local app="app=$prio,1,0"
0039 
0040         lldptool -T -i $dev -V APP $app >/dev/null
0041         lldpad_app_wait_set $dev
0042         APP[$prio]=$app
0043 }
0044 
0045 defprio_uninstall()
0046 {
0047         local dev=$1; shift
0048         local prio=$1; shift
0049         local app=${APP[$prio]}
0050 
0051         lldptool -T -i $dev -V APP -d $app >/dev/null
0052         lldpad_app_wait_del
0053         unset APP[$prio]
0054 }
0055 
0056 defprio_flush()
0057 {
0058         local dev=$1; shift
0059         local prio
0060 
0061         if ((${#APP[@]})); then
0062                 lldptool -T -i $dev -V APP -d ${APP[@]} >/dev/null
0063         fi
0064         lldpad_app_wait_del
0065         APP=()
0066 }
0067 
0068 h1_create()
0069 {
0070         simple_if_init $h1 192.0.2.1/28
0071 }
0072 
0073 h1_destroy()
0074 {
0075         simple_if_fini $h1 192.0.2.1/28
0076 }
0077 
0078 switch_create()
0079 {
0080         ip link set dev $swp1 up
0081         ip addr add dev $swp1 192.0.2.2/28
0082 }
0083 
0084 switch_destroy()
0085 {
0086         defprio_flush $swp1
0087         ip addr del dev $swp1 192.0.2.2/28
0088         ip link set dev $swp1 down
0089 }
0090 
0091 setup_prepare()
0092 {
0093         h1=${NETIFS[p1]}
0094         swp1=${NETIFS[p2]}
0095 
0096         vrf_prepare
0097 
0098         h1_create
0099         switch_create
0100 }
0101 
0102 cleanup()
0103 {
0104         pre_cleanup
0105 
0106         switch_destroy
0107         h1_destroy
0108 
0109         vrf_cleanup
0110 }
0111 
0112 ping_ipv4()
0113 {
0114         ping_test $h1 192.0.2.2
0115 }
0116 
0117 __test_defprio()
0118 {
0119         local prio_install=$1; shift
0120         local prio_observe=$1; shift
0121         local key
0122         local t1
0123         local i
0124 
0125         RET=0
0126 
0127         defprio_install $swp1 $prio_install
0128 
0129         local t0=$(ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
0130         mausezahn -q $h1 -d 100m -c 10 -t arp reply
0131         t1=$(busywait "$HIT_TIMEOUT" until_counter_is ">= $((t0 + 10))" \
0132                 ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
0133 
0134         check_err $? "Default priority $prio_install/$prio_observe: Expected to capture 10 packets, got $((t1 - t0))."
0135         log_test "Default priority $prio_install/$prio_observe"
0136 
0137         defprio_uninstall $swp1 $prio_install
0138 }
0139 
0140 test_defprio()
0141 {
0142         local prio
0143 
0144         for prio in {0..7}; do
0145                 __test_defprio $prio $prio
0146         done
0147 
0148         defprio_install $swp1 3
0149         __test_defprio 0 3
0150         __test_defprio 1 3
0151         __test_defprio 2 3
0152         __test_defprio 4 4
0153         __test_defprio 5 5
0154         __test_defprio 6 6
0155         __test_defprio 7 7
0156         defprio_uninstall $swp1 3
0157 }
0158 
0159 trap cleanup EXIT
0160 
0161 setup_prepare
0162 setup_wait
0163 
0164 tests_run
0165 
0166 exit $EXIT_STATUS