mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-24 19:45:06 +08:00
75f0139fd6
Add regression tests for PF_PACKET transmission using packet_snd. The TPACKET ring interface has tests for transmission and reception. This is an initial stab at the same for the send call based interface. Packets are sent over loopback, then read twice. The entire packet is read from another packet socket and compared. The packet is also verified to arrive at a UDP socket for protocol conformance. The test sends a packet over loopback, testing the following options (not the full cross-product): - SOCK_DGRAM - SOCK_RAW - vlan tag - qdisc bypass - bind() and sendto() - virtio_net_hdr - csum offload (NOT actual csum feature, ignored on loopback) - gso Besides these basic functionality tests, the test runs from a set of bounds checks, positive and negative. Running over loopback, which has dev->min_header_len, it cannot generate variable length hhlen. Signed-off-by: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
99 lines
2.2 KiB
Bash
Executable File
99 lines
2.2 KiB
Bash
Executable File
#!/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"
|