#!/bin/bash # SPDX-License-Identifier: GPL-2.0 # # Run a series of packet socket send regression tests set -e readonly mtu=1500 readonly iphlen=20 readonly udphlen=8 readonly vnet_hlen=10 readonly eth_hlen=14 readonly mss="$((${mtu} - ${iphlen} - ${udphlen}))" readonly mss_exceeds="$((${mss} + 1))" readonly max_mtu=65535 readonly max_mss="$((${max_mtu} - ${iphlen} - ${udphlen}))" readonly max_mss_exceeds="$((${max_mss} + 1))" # functional checks (not a full cross-product) echo "dgram" ./in_netns.sh ./psock_snd -d echo "dgram bind" ./in_netns.sh ./psock_snd -d -b echo "raw" ./in_netns.sh ./psock_snd echo "raw bind" ./in_netns.sh ./psock_snd -b echo "raw qdisc bypass" ./in_netns.sh ./psock_snd -q echo "raw vlan" ./in_netns.sh ./psock_snd -V echo "raw vnet hdr" ./in_netns.sh ./psock_snd -v echo "raw csum_off" ./in_netns.sh ./psock_snd -v -c echo "raw csum_off with bad offset (fails)" (! ./in_netns.sh ./psock_snd -v -c -C) # bounds check: send {max, max + 1, min, min - 1} lengths echo "raw min size" ./in_netns.sh ./psock_snd -l 0 echo "raw mtu size" ./in_netns.sh ./psock_snd -l "${mss}" echo "raw mtu size + 1 (fails)" (! ./in_netns.sh ./psock_snd -l "${mss_exceeds}") # fails due to ARPHRD_ETHER check in packet_extra_vlan_len_allowed # # echo "raw vlan mtu size" # ./in_netns.sh ./psock_snd -V -l "${mss}" echo "raw vlan mtu size + 1 (fails)" (! ./in_netns.sh ./psock_snd -V -l "${mss_exceeds}") echo "dgram mtu size" ./in_netns.sh ./psock_snd -d -l "${mss}" echo "dgram mtu size + 1 (fails)" (! ./in_netns.sh ./psock_snd -d -l "${mss_exceeds}") echo "raw truncate hlen (fails: does not arrive)" (! ./in_netns.sh ./psock_snd -t "$((${vnet_hlen} + ${eth_hlen}))") echo "raw truncate hlen - 1 (fails: EINVAL)" (! ./in_netns.sh ./psock_snd -t "$((${vnet_hlen} + ${eth_hlen} - 1))") # gso checks: implies -l, because with gso len must exceed gso_size echo "raw gso min size" ./in_netns.sh ./psock_snd -v -c -g -l "${mss_exceeds}" echo "raw gso min size - 1 (fails)" (! ./in_netns.sh ./psock_snd -v -c -g -l "${mss}") echo "raw gso max size" ./in_netns.sh ./psock_snd -v -c -g -l "${max_mss}" echo "raw gso max size + 1 (fails)" (! ./in_netns.sh ./psock_snd -v -c -g -l "${max_mss_exceeds}") echo "OK. All tests passed"