1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# Run a series of packet socket send regression tests 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunset -e 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunreadonly mtu=1500 9*4882a593Smuzhiyunreadonly iphlen=20 10*4882a593Smuzhiyunreadonly udphlen=8 11*4882a593Smuzhiyun 12*4882a593Smuzhiyunreadonly vnet_hlen=10 13*4882a593Smuzhiyunreadonly eth_hlen=14 14*4882a593Smuzhiyun 15*4882a593Smuzhiyunreadonly mss="$((${mtu} - ${iphlen} - ${udphlen}))" 16*4882a593Smuzhiyunreadonly mss_exceeds="$((${mss} + 1))" 17*4882a593Smuzhiyun 18*4882a593Smuzhiyunreadonly max_mtu=65535 19*4882a593Smuzhiyunreadonly max_mss="$((${max_mtu} - ${iphlen} - ${udphlen}))" 20*4882a593Smuzhiyunreadonly max_mss_exceeds="$((${max_mss} + 1))" 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun# functional checks (not a full cross-product) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyunecho "dgram" 25*4882a593Smuzhiyun./in_netns.sh ./psock_snd -d 26*4882a593Smuzhiyun 27*4882a593Smuzhiyunecho "dgram bind" 28*4882a593Smuzhiyun./in_netns.sh ./psock_snd -d -b 29*4882a593Smuzhiyun 30*4882a593Smuzhiyunecho "raw" 31*4882a593Smuzhiyun./in_netns.sh ./psock_snd 32*4882a593Smuzhiyun 33*4882a593Smuzhiyunecho "raw bind" 34*4882a593Smuzhiyun./in_netns.sh ./psock_snd -b 35*4882a593Smuzhiyun 36*4882a593Smuzhiyunecho "raw qdisc bypass" 37*4882a593Smuzhiyun./in_netns.sh ./psock_snd -q 38*4882a593Smuzhiyun 39*4882a593Smuzhiyunecho "raw vlan" 40*4882a593Smuzhiyun./in_netns.sh ./psock_snd -V 41*4882a593Smuzhiyun 42*4882a593Smuzhiyunecho "raw vnet hdr" 43*4882a593Smuzhiyun./in_netns.sh ./psock_snd -v 44*4882a593Smuzhiyun 45*4882a593Smuzhiyunecho "raw csum_off" 46*4882a593Smuzhiyun./in_netns.sh ./psock_snd -v -c 47*4882a593Smuzhiyun 48*4882a593Smuzhiyunecho "raw csum_off with bad offset (expected to fail)" 49*4882a593Smuzhiyun(! ./in_netns.sh ./psock_snd -v -c -C) 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun# bounds check: send {max, max + 1, min, min - 1} lengths 53*4882a593Smuzhiyun 54*4882a593Smuzhiyunecho "raw min size" 55*4882a593Smuzhiyun./in_netns.sh ./psock_snd -l 0 56*4882a593Smuzhiyun 57*4882a593Smuzhiyunecho "raw mtu size" 58*4882a593Smuzhiyun./in_netns.sh ./psock_snd -l "${mss}" 59*4882a593Smuzhiyun 60*4882a593Smuzhiyunecho "raw mtu size + 1 (expected to fail)" 61*4882a593Smuzhiyun(! ./in_netns.sh ./psock_snd -l "${mss_exceeds}") 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun# fails due to ARPHRD_ETHER check in packet_extra_vlan_len_allowed 64*4882a593Smuzhiyun# 65*4882a593Smuzhiyun# echo "raw vlan mtu size" 66*4882a593Smuzhiyun# ./in_netns.sh ./psock_snd -V -l "${mss}" 67*4882a593Smuzhiyun 68*4882a593Smuzhiyunecho "raw vlan mtu size + 1 (expected to fail)" 69*4882a593Smuzhiyun(! ./in_netns.sh ./psock_snd -V -l "${mss_exceeds}") 70*4882a593Smuzhiyun 71*4882a593Smuzhiyunecho "dgram mtu size" 72*4882a593Smuzhiyun./in_netns.sh ./psock_snd -d -l "${mss}" 73*4882a593Smuzhiyun 74*4882a593Smuzhiyunecho "dgram mtu size + 1 (expected to fail)" 75*4882a593Smuzhiyun(! ./in_netns.sh ./psock_snd -d -l "${mss_exceeds}") 76*4882a593Smuzhiyun 77*4882a593Smuzhiyunecho "raw truncate hlen (expected to fail: does not arrive)" 78*4882a593Smuzhiyun(! ./in_netns.sh ./psock_snd -t "$((${vnet_hlen} + ${eth_hlen}))") 79*4882a593Smuzhiyun 80*4882a593Smuzhiyunecho "raw truncate hlen - 1 (expected to fail: EINVAL)" 81*4882a593Smuzhiyun(! ./in_netns.sh ./psock_snd -t "$((${vnet_hlen} + ${eth_hlen} - 1))") 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun# gso checks: implies -l, because with gso len must exceed gso_size 85*4882a593Smuzhiyun 86*4882a593Smuzhiyunecho "raw gso min size" 87*4882a593Smuzhiyun./in_netns.sh ./psock_snd -v -c -g -l "${mss_exceeds}" 88*4882a593Smuzhiyun 89*4882a593Smuzhiyunecho "raw gso min size - 1 (expected to fail)" 90*4882a593Smuzhiyun(! ./in_netns.sh ./psock_snd -v -c -g -l "${mss}") 91*4882a593Smuzhiyun 92*4882a593Smuzhiyunecho "raw gso max size" 93*4882a593Smuzhiyun./in_netns.sh ./psock_snd -v -c -g -l "${max_mss}" 94*4882a593Smuzhiyun 95*4882a593Smuzhiyunecho "raw gso max size + 1 (expected to fail)" 96*4882a593Smuzhiyun(! ./in_netns.sh ./psock_snd -v -c -g -l "${max_mss_exceeds}") 97*4882a593Smuzhiyun 98*4882a593Smuzhiyunecho "OK. All tests passed" 99