Merge tag 'net-5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski:
"Including fixes from bpf, can and netfilter.
Current release - regressions:
- bpf: do not reject when the stack read size is different from the
tracked scalar size
- net: fix premature exit from NAPI state polling in napi_disable()
- riscv, bpf: fix RV32 broken build, and silence RV64 warning
Current release - new code bugs:
- net: fix possible NULL deref in sock_reserve_memory
- amt: fix error return code in amt_init(); fix stopping the
workqueue
- ax88796c: use the correct ioctl callback
Previous releases - always broken:
- bpf: stop caching subprog index in the bpf_pseudo_func insn
- security: fixups for the security hooks in sctp
- nfc: add necessary privilege flags in netlink layer, limit
operations to admin only
- vsock: prevent unnecessary refcnt inc for non-blocking connect
- net/smc: fix sk_refcnt underflow on link down and fallback
- nfnetlink_queue: fix OOB when mac header was cleared
- can: j1939: ignore invalid messages per standard
- bpf, sockmap:
- fix race in ingress receive verdict with redirect to self
- fix incorrect sk_skb data_end access when src_reg = dst_reg
- strparser, and tls are reusing qdisc_skb_cb and colliding
- ethtool: fix ethtool msg len calculation for pause stats
- vlan: fix a UAF in vlan_dev_real_dev() when ref-holder tries to
access an unregistering real_dev
- udp6: make encap_rcv() bump the v6 not v4 stats
- drv: prestera: add explicit padding to fix m68k build
- drv: felix: fix broken VLAN-tagged PTP under VLAN-aware bridge
- drv: mvpp2: fix wrong SerDes reconfiguration order
Misc & small latecomers:
- ipvs: auto-load ipvs on genl access
- mctp: sanity check the struct sockaddr_mctp padding fields
- libfs: support RENAME_EXCHANGE in simple_rename()
- avoid double accounting for pure zerocopy skbs"
* tag 'net-5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (123 commits)
selftests/net: udpgso_bench_rx: fix port argument
net: wwan: iosm: fix compilation warning
cxgb4: fix eeprom len when diagnostics not implemented
net: fix premature exit from NAPI state polling in napi_disable()
net/smc: fix sk_refcnt underflow on linkdown and fallback
net/mlx5: Lag, fix a potential Oops with mlx5_lag_create_definer()
gve: fix unmatched u64_stats_update_end()
net: ethernet: lantiq_etop: Fix compilation error
selftests: forwarding: Fix packet matching in mirroring selftests
vsock: prevent unnecessary refcnt inc for nonblocking connect
net: marvell: mvpp2: Fix wrong SerDes reconfiguration order
net: ethernet: ti: cpsw_ale: Fix access to un-initialized memory
net: stmmac: allow a tc-taprio base-time of zero
selftests: net: test_vxlan_under_vrf: fix HV connectivity test
net: hns3: allow configure ETS bandwidth of all TCs
net: hns3: remove check VF uc mac exist when set by PF
net: hns3: fix some mac statistics is always 0 in device version V2
net: hns3: fix kernel crash when unload VF while it is being reset
net: hns3: sync rx ring head in echo common pull
net: hns3: fix pfc packet number incorrect after querying pfc parameters
...
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
|
||||
#define CG_NAME "/netcnt"
|
||||
|
||||
void test_netcnt(void)
|
||||
void serial_test_netcnt(void)
|
||||
{
|
||||
union percpu_net_cnt *percpu_netcnt = NULL;
|
||||
struct bpf_cgroup_storage_key key;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (c) 2020 Facebook */
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <sched.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/stat.h>
|
||||
@@ -29,44 +30,106 @@ static int read_iter(char *file)
|
||||
|
||||
static int fn(void)
|
||||
{
|
||||
int err, duration = 0;
|
||||
struct stat a, b, c;
|
||||
int err, map;
|
||||
|
||||
err = unshare(CLONE_NEWNS);
|
||||
if (CHECK(err, "unshare", "failed: %d\n", errno))
|
||||
if (!ASSERT_OK(err, "unshare"))
|
||||
goto out;
|
||||
|
||||
err = mount("", "/", "", MS_REC | MS_PRIVATE, NULL);
|
||||
if (CHECK(err, "mount /", "failed: %d\n", errno))
|
||||
if (!ASSERT_OK(err, "mount /"))
|
||||
goto out;
|
||||
|
||||
err = umount(TDIR);
|
||||
if (CHECK(err, "umount " TDIR, "failed: %d\n", errno))
|
||||
if (!ASSERT_OK(err, "umount " TDIR))
|
||||
goto out;
|
||||
|
||||
err = mount("none", TDIR, "tmpfs", 0, NULL);
|
||||
if (CHECK(err, "mount", "mount root failed: %d\n", errno))
|
||||
if (!ASSERT_OK(err, "mount tmpfs"))
|
||||
goto out;
|
||||
|
||||
err = mkdir(TDIR "/fs1", 0777);
|
||||
if (CHECK(err, "mkdir "TDIR"/fs1", "failed: %d\n", errno))
|
||||
if (!ASSERT_OK(err, "mkdir " TDIR "/fs1"))
|
||||
goto out;
|
||||
err = mkdir(TDIR "/fs2", 0777);
|
||||
if (CHECK(err, "mkdir "TDIR"/fs2", "failed: %d\n", errno))
|
||||
if (!ASSERT_OK(err, "mkdir " TDIR "/fs2"))
|
||||
goto out;
|
||||
|
||||
err = mount("bpf", TDIR "/fs1", "bpf", 0, NULL);
|
||||
if (CHECK(err, "mount bpffs "TDIR"/fs1", "failed: %d\n", errno))
|
||||
if (!ASSERT_OK(err, "mount bpffs " TDIR "/fs1"))
|
||||
goto out;
|
||||
err = mount("bpf", TDIR "/fs2", "bpf", 0, NULL);
|
||||
if (CHECK(err, "mount bpffs " TDIR "/fs2", "failed: %d\n", errno))
|
||||
if (!ASSERT_OK(err, "mount bpffs " TDIR "/fs2"))
|
||||
goto out;
|
||||
|
||||
err = read_iter(TDIR "/fs1/maps.debug");
|
||||
if (CHECK(err, "reading " TDIR "/fs1/maps.debug", "failed\n"))
|
||||
if (!ASSERT_OK(err, "reading " TDIR "/fs1/maps.debug"))
|
||||
goto out;
|
||||
err = read_iter(TDIR "/fs2/progs.debug");
|
||||
if (CHECK(err, "reading " TDIR "/fs2/progs.debug", "failed\n"))
|
||||
if (!ASSERT_OK(err, "reading " TDIR "/fs2/progs.debug"))
|
||||
goto out;
|
||||
|
||||
err = mkdir(TDIR "/fs1/a", 0777);
|
||||
if (!ASSERT_OK(err, "creating " TDIR "/fs1/a"))
|
||||
goto out;
|
||||
err = mkdir(TDIR "/fs1/a/1", 0777);
|
||||
if (!ASSERT_OK(err, "creating " TDIR "/fs1/a/1"))
|
||||
goto out;
|
||||
err = mkdir(TDIR "/fs1/b", 0777);
|
||||
if (!ASSERT_OK(err, "creating " TDIR "/fs1/b"))
|
||||
goto out;
|
||||
|
||||
map = bpf_create_map(BPF_MAP_TYPE_ARRAY, 4, 4, 1, 0);
|
||||
if (!ASSERT_GT(map, 0, "create_map(ARRAY)"))
|
||||
goto out;
|
||||
err = bpf_obj_pin(map, TDIR "/fs1/c");
|
||||
if (!ASSERT_OK(err, "pin map"))
|
||||
goto out;
|
||||
close(map);
|
||||
|
||||
/* Check that RENAME_EXCHANGE works for directories. */
|
||||
err = stat(TDIR "/fs1/a", &a);
|
||||
if (!ASSERT_OK(err, "stat(" TDIR "/fs1/a)"))
|
||||
goto out;
|
||||
err = renameat2(0, TDIR "/fs1/a", 0, TDIR "/fs1/b", RENAME_EXCHANGE);
|
||||
if (!ASSERT_OK(err, "renameat2(/fs1/a, /fs1/b, RENAME_EXCHANGE)"))
|
||||
goto out;
|
||||
err = stat(TDIR "/fs1/b", &b);
|
||||
if (!ASSERT_OK(err, "stat(" TDIR "/fs1/b)"))
|
||||
goto out;
|
||||
if (!ASSERT_EQ(a.st_ino, b.st_ino, "b should have a's inode"))
|
||||
goto out;
|
||||
err = access(TDIR "/fs1/b/1", F_OK);
|
||||
if (!ASSERT_OK(err, "access(" TDIR "/fs1/b/1)"))
|
||||
goto out;
|
||||
|
||||
/* Check that RENAME_EXCHANGE works for mixed file types. */
|
||||
err = stat(TDIR "/fs1/c", &c);
|
||||
if (!ASSERT_OK(err, "stat(" TDIR "/fs1/map)"))
|
||||
goto out;
|
||||
err = renameat2(0, TDIR "/fs1/c", 0, TDIR "/fs1/b", RENAME_EXCHANGE);
|
||||
if (!ASSERT_OK(err, "renameat2(/fs1/c, /fs1/b, RENAME_EXCHANGE)"))
|
||||
goto out;
|
||||
err = stat(TDIR "/fs1/b", &b);
|
||||
if (!ASSERT_OK(err, "stat(" TDIR "/fs1/b)"))
|
||||
goto out;
|
||||
if (!ASSERT_EQ(c.st_ino, b.st_ino, "b should have c's inode"))
|
||||
goto out;
|
||||
err = access(TDIR "/fs1/c/1", F_OK);
|
||||
if (!ASSERT_OK(err, "access(" TDIR "/fs1/c/1)"))
|
||||
goto out;
|
||||
|
||||
/* Check that RENAME_NOREPLACE works. */
|
||||
err = renameat2(0, TDIR "/fs1/b", 0, TDIR "/fs1/a", RENAME_NOREPLACE);
|
||||
if (!ASSERT_ERR(err, "renameat2(RENAME_NOREPLACE)")) {
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
err = access(TDIR "/fs1/b", F_OK);
|
||||
if (!ASSERT_OK(err, "access(" TDIR "/fs1/b)"))
|
||||
goto out;
|
||||
|
||||
out:
|
||||
umount(TDIR "/fs1");
|
||||
umount(TDIR "/fs2");
|
||||
|
||||
@@ -23,6 +23,16 @@ struct callback_ctx {
|
||||
int output;
|
||||
};
|
||||
|
||||
const volatile int bypass_unused = 1;
|
||||
|
||||
static __u64
|
||||
unused_subprog(struct bpf_map *map, __u32 *key, __u64 *val,
|
||||
struct callback_ctx *data)
|
||||
{
|
||||
data->output = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static __u64
|
||||
check_array_elem(struct bpf_map *map, __u32 *key, __u64 *val,
|
||||
struct callback_ctx *data)
|
||||
@@ -54,6 +64,8 @@ int test_pkt_access(struct __sk_buff *skb)
|
||||
|
||||
data.output = 0;
|
||||
bpf_for_each_map_elem(&arraymap, check_array_elem, &data, 0);
|
||||
if (!bypass_unused)
|
||||
bpf_for_each_map_elem(&arraymap, unused_subprog, &data, 0);
|
||||
arraymap_output = data.output;
|
||||
|
||||
bpf_for_each_map_elem(&percpu_map, check_percpu_elem, (void *)0, 0);
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Test topology:
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# | veth1 veth2 veth3 | ... init net
|
||||
# - - - - - - - - - - - - - - - - - - -
|
||||
# | veth1 veth2 veth3 | ns0
|
||||
# - -| - - - - - - | - - - - - - | - -
|
||||
# --------- --------- ---------
|
||||
# | veth0 | | veth0 | | veth0 | ...
|
||||
# | veth0 | | veth0 | | veth0 |
|
||||
# --------- --------- ---------
|
||||
# ns1 ns2 ns3
|
||||
#
|
||||
@@ -31,6 +31,7 @@ IFACES=""
|
||||
DRV_MODE="xdpgeneric xdpdrv xdpegress"
|
||||
PASS=0
|
||||
FAIL=0
|
||||
LOG_DIR=$(mktemp -d)
|
||||
|
||||
test_pass()
|
||||
{
|
||||
@@ -50,6 +51,7 @@ clean_up()
|
||||
ip link del veth$i 2> /dev/null
|
||||
ip netns del ns$i 2> /dev/null
|
||||
done
|
||||
ip netns del ns0 2> /dev/null
|
||||
}
|
||||
|
||||
# Kselftest framework requirement - SKIP code is 4.
|
||||
@@ -77,10 +79,12 @@ setup_ns()
|
||||
mode="xdpdrv"
|
||||
fi
|
||||
|
||||
ip netns add ns0
|
||||
for i in $(seq $NUM); do
|
||||
ip netns add ns$i
|
||||
ip link add veth$i type veth peer name veth0 netns ns$i
|
||||
ip link set veth$i up
|
||||
ip -n ns$i link add veth0 index 2 type veth \
|
||||
peer name veth$i netns ns0 index $((1 + $i))
|
||||
ip -n ns0 link set veth$i up
|
||||
ip -n ns$i link set veth0 up
|
||||
|
||||
ip -n ns$i addr add 192.0.2.$i/24 dev veth0
|
||||
@@ -91,7 +95,7 @@ setup_ns()
|
||||
xdp_dummy.o sec xdp &> /dev/null || \
|
||||
{ test_fail "Unable to load dummy xdp" && exit 1; }
|
||||
IFACES="$IFACES veth$i"
|
||||
veth_mac[$i]=$(ip link show veth$i | awk '/link\/ether/ {print $2}')
|
||||
veth_mac[$i]=$(ip -n ns0 link show veth$i | awk '/link\/ether/ {print $2}')
|
||||
done
|
||||
}
|
||||
|
||||
@@ -100,17 +104,17 @@ do_egress_tests()
|
||||
local mode=$1
|
||||
|
||||
# mac test
|
||||
ip netns exec ns2 tcpdump -e -i veth0 -nn -l -e &> mac_ns1-2_${mode}.log &
|
||||
ip netns exec ns3 tcpdump -e -i veth0 -nn -l -e &> mac_ns1-3_${mode}.log &
|
||||
ip netns exec ns2 tcpdump -e -i veth0 -nn -l -e &> ${LOG_DIR}/mac_ns1-2_${mode}.log &
|
||||
ip netns exec ns3 tcpdump -e -i veth0 -nn -l -e &> ${LOG_DIR}/mac_ns1-3_${mode}.log &
|
||||
sleep 0.5
|
||||
ip netns exec ns1 ping 192.0.2.254 -i 0.1 -c 4 &> /dev/null
|
||||
sleep 0.5
|
||||
pkill -9 tcpdump
|
||||
pkill tcpdump
|
||||
|
||||
# mac check
|
||||
grep -q "${veth_mac[2]} > ff:ff:ff:ff:ff:ff" mac_ns1-2_${mode}.log && \
|
||||
grep -q "${veth_mac[2]} > ff:ff:ff:ff:ff:ff" ${LOG_DIR}/mac_ns1-2_${mode}.log && \
|
||||
test_pass "$mode mac ns1-2" || test_fail "$mode mac ns1-2"
|
||||
grep -q "${veth_mac[3]} > ff:ff:ff:ff:ff:ff" mac_ns1-3_${mode}.log && \
|
||||
grep -q "${veth_mac[3]} > ff:ff:ff:ff:ff:ff" ${LOG_DIR}/mac_ns1-3_${mode}.log && \
|
||||
test_pass "$mode mac ns1-3" || test_fail "$mode mac ns1-3"
|
||||
}
|
||||
|
||||
@@ -121,46 +125,46 @@ do_ping_tests()
|
||||
# ping6 test: echo request should be redirect back to itself, not others
|
||||
ip netns exec ns1 ip neigh add 2001:db8::2 dev veth0 lladdr 00:00:00:00:00:02
|
||||
|
||||
ip netns exec ns1 tcpdump -i veth0 -nn -l -e &> ns1-1_${mode}.log &
|
||||
ip netns exec ns2 tcpdump -i veth0 -nn -l -e &> ns1-2_${mode}.log &
|
||||
ip netns exec ns3 tcpdump -i veth0 -nn -l -e &> ns1-3_${mode}.log &
|
||||
ip netns exec ns1 tcpdump -i veth0 -nn -l -e &> ${LOG_DIR}/ns1-1_${mode}.log &
|
||||
ip netns exec ns2 tcpdump -i veth0 -nn -l -e &> ${LOG_DIR}/ns1-2_${mode}.log &
|
||||
ip netns exec ns3 tcpdump -i veth0 -nn -l -e &> ${LOG_DIR}/ns1-3_${mode}.log &
|
||||
sleep 0.5
|
||||
# ARP test
|
||||
ip netns exec ns1 ping 192.0.2.254 -i 0.1 -c 4 &> /dev/null
|
||||
ip netns exec ns1 arping -q -c 2 -I veth0 192.0.2.254
|
||||
# IPv4 test
|
||||
ip netns exec ns1 ping 192.0.2.253 -i 0.1 -c 4 &> /dev/null
|
||||
# IPv6 test
|
||||
ip netns exec ns1 ping6 2001:db8::2 -i 0.1 -c 2 &> /dev/null
|
||||
sleep 0.5
|
||||
pkill -9 tcpdump
|
||||
pkill tcpdump
|
||||
|
||||
# All netns should receive the redirect arp requests
|
||||
[ $(grep -c "who-has 192.0.2.254" ns1-1_${mode}.log) -gt 4 ] && \
|
||||
[ $(grep -cF "who-has 192.0.2.254" ${LOG_DIR}/ns1-1_${mode}.log) -eq 4 ] && \
|
||||
test_pass "$mode arp(F_BROADCAST) ns1-1" || \
|
||||
test_fail "$mode arp(F_BROADCAST) ns1-1"
|
||||
[ $(grep -c "who-has 192.0.2.254" ns1-2_${mode}.log) -le 4 ] && \
|
||||
[ $(grep -cF "who-has 192.0.2.254" ${LOG_DIR}/ns1-2_${mode}.log) -eq 2 ] && \
|
||||
test_pass "$mode arp(F_BROADCAST) ns1-2" || \
|
||||
test_fail "$mode arp(F_BROADCAST) ns1-2"
|
||||
[ $(grep -c "who-has 192.0.2.254" ns1-3_${mode}.log) -le 4 ] && \
|
||||
[ $(grep -cF "who-has 192.0.2.254" ${LOG_DIR}/ns1-3_${mode}.log) -eq 2 ] && \
|
||||
test_pass "$mode arp(F_BROADCAST) ns1-3" || \
|
||||
test_fail "$mode arp(F_BROADCAST) ns1-3"
|
||||
|
||||
# ns1 should not receive the redirect echo request, others should
|
||||
[ $(grep -c "ICMP echo request" ns1-1_${mode}.log) -eq 4 ] && \
|
||||
[ $(grep -c "ICMP echo request" ${LOG_DIR}/ns1-1_${mode}.log) -eq 4 ] && \
|
||||
test_pass "$mode IPv4 (F_BROADCAST|F_EXCLUDE_INGRESS) ns1-1" || \
|
||||
test_fail "$mode IPv4 (F_BROADCAST|F_EXCLUDE_INGRESS) ns1-1"
|
||||
[ $(grep -c "ICMP echo request" ns1-2_${mode}.log) -eq 4 ] && \
|
||||
[ $(grep -c "ICMP echo request" ${LOG_DIR}/ns1-2_${mode}.log) -eq 4 ] && \
|
||||
test_pass "$mode IPv4 (F_BROADCAST|F_EXCLUDE_INGRESS) ns1-2" || \
|
||||
test_fail "$mode IPv4 (F_BROADCAST|F_EXCLUDE_INGRESS) ns1-2"
|
||||
[ $(grep -c "ICMP echo request" ns1-3_${mode}.log) -eq 4 ] && \
|
||||
[ $(grep -c "ICMP echo request" ${LOG_DIR}/ns1-3_${mode}.log) -eq 4 ] && \
|
||||
test_pass "$mode IPv4 (F_BROADCAST|F_EXCLUDE_INGRESS) ns1-3" || \
|
||||
test_fail "$mode IPv4 (F_BROADCAST|F_EXCLUDE_INGRESS) ns1-3"
|
||||
|
||||
# ns1 should receive the echo request, ns2 should not
|
||||
[ $(grep -c "ICMP6, echo request" ns1-1_${mode}.log) -eq 4 ] && \
|
||||
[ $(grep -c "ICMP6, echo request" ${LOG_DIR}/ns1-1_${mode}.log) -eq 4 ] && \
|
||||
test_pass "$mode IPv6 (no flags) ns1-1" || \
|
||||
test_fail "$mode IPv6 (no flags) ns1-1"
|
||||
[ $(grep -c "ICMP6, echo request" ns1-2_${mode}.log) -eq 0 ] && \
|
||||
[ $(grep -c "ICMP6, echo request" ${LOG_DIR}/ns1-2_${mode}.log) -eq 0 ] && \
|
||||
test_pass "$mode IPv6 (no flags) ns1-2" || \
|
||||
test_fail "$mode IPv6 (no flags) ns1-2"
|
||||
}
|
||||
@@ -176,9 +180,13 @@ do_tests()
|
||||
xdpgeneric) drv_p="-S";;
|
||||
esac
|
||||
|
||||
./xdp_redirect_multi $drv_p $IFACES &> xdp_redirect_${mode}.log &
|
||||
ip netns exec ns0 ./xdp_redirect_multi $drv_p $IFACES &> ${LOG_DIR}/xdp_redirect_${mode}.log &
|
||||
xdp_pid=$!
|
||||
sleep 1
|
||||
if ! ps -p $xdp_pid > /dev/null; then
|
||||
test_fail "$mode xdp_redirect_multi start failed"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "$mode" = "xdpegress" ]; then
|
||||
do_egress_tests $mode
|
||||
@@ -189,16 +197,16 @@ do_tests()
|
||||
kill $xdp_pid
|
||||
}
|
||||
|
||||
trap clean_up 0 2 3 6 9
|
||||
trap clean_up EXIT
|
||||
|
||||
check_env
|
||||
rm -f xdp_redirect_*.log ns*.log mac_ns*.log
|
||||
|
||||
for mode in ${DRV_MODE}; do
|
||||
setup_ns $mode
|
||||
do_tests $mode
|
||||
clean_up
|
||||
done
|
||||
rm -rf ${LOG_DIR}
|
||||
|
||||
echo "Summary: PASS $PASS, FAIL $FAIL"
|
||||
[ $FAIL -eq 0 ] && exit 0 || exit 1
|
||||
|
||||
@@ -265,3 +265,20 @@
|
||||
.result = ACCEPT,
|
||||
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
||||
},
|
||||
{
|
||||
"Spill a u32 scalar at fp-4 and then at fp-8",
|
||||
.insns = {
|
||||
/* r4 = 4321 */
|
||||
BPF_MOV32_IMM(BPF_REG_4, 4321),
|
||||
/* *(u32 *)(r10 -4) = r4 */
|
||||
BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_4, -4),
|
||||
/* *(u32 *)(r10 -8) = r4 */
|
||||
BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_4, -8),
|
||||
/* r4 = *(u64 *)(r10 -8) */
|
||||
BPF_LDX_MEM(BPF_DW, BPF_REG_4, BPF_REG_10, -8),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
||||
},
|
||||
|
||||
@@ -129,7 +129,7 @@ int main(int argc, char **argv)
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
printf("Get interfaces");
|
||||
printf("Get interfaces:");
|
||||
for (i = 0; i < MAX_IFACE_NUM && argv[optind + i]; i++) {
|
||||
ifaces[i] = if_nametoindex(argv[optind + i]);
|
||||
if (!ifaces[i])
|
||||
@@ -139,7 +139,7 @@ int main(int argc, char **argv)
|
||||
goto err_out;
|
||||
}
|
||||
if (ifaces[i] > MAX_INDEX_NUM) {
|
||||
printf("Interface index to large\n");
|
||||
printf(" interface index too large\n");
|
||||
goto err_out;
|
||||
}
|
||||
printf(" %d", ifaces[i]);
|
||||
|
||||
@@ -12,7 +12,7 @@ TEST_PROGS += udpgro_bench.sh udpgro.sh test_vxlan_under_vrf.sh reuseport_addr_a
|
||||
TEST_PROGS += test_vxlan_fdb_changelink.sh so_txtime.sh ipv6_flowlabel.sh
|
||||
TEST_PROGS += tcp_fastopen_backup_key.sh fcnal-test.sh l2tp.sh traceroute.sh
|
||||
TEST_PROGS += fin_ack_lat.sh fib_nexthop_multiprefix.sh fib_nexthops.sh
|
||||
TEST_PROGS += altnames.sh icmp_redirect.sh ip6_gre_headroom.sh
|
||||
TEST_PROGS += altnames.sh icmp.sh icmp_redirect.sh ip6_gre_headroom.sh
|
||||
TEST_PROGS += route_localnet.sh
|
||||
TEST_PROGS += reuseaddr_ports_exhausted.sh
|
||||
TEST_PROGS += txtimestamp.sh
|
||||
@@ -30,7 +30,12 @@ TEST_PROGS += ioam6.sh
|
||||
TEST_PROGS += gro.sh
|
||||
TEST_PROGS += gre_gso.sh
|
||||
TEST_PROGS += cmsg_so_mark.sh
|
||||
TEST_PROGS_EXTENDED := in_netns.sh
|
||||
TEST_PROGS += srv6_end_dt46_l3vpn_test.sh
|
||||
TEST_PROGS += srv6_end_dt4_l3vpn_test.sh
|
||||
TEST_PROGS += srv6_end_dt6_l3vpn_test.sh
|
||||
TEST_PROGS += vrf_strict_mode_test.sh
|
||||
TEST_PROGS_EXTENDED := in_netns.sh setup_loopback.sh setup_veth.sh
|
||||
TEST_PROGS_EXTENDED += toeplitz_client.sh toeplitz.sh
|
||||
TEST_GEN_FILES = socket nettest
|
||||
TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy reuseport_addr_any
|
||||
TEST_GEN_FILES += tcp_mmap tcp_inq psock_snd txring_overwrite
|
||||
|
||||
@@ -80,7 +80,7 @@ test_gretap()
|
||||
|
||||
test_ip6gretap()
|
||||
{
|
||||
test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ip' \
|
||||
test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ipv6' \
|
||||
"mirror to ip6gretap"
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ test_span_gre_ttl()
|
||||
|
||||
mirror_install $swp1 ingress $tundev "matchall $tcflags"
|
||||
tc filter add dev $h3 ingress pref 77 prot $prot \
|
||||
flower ip_ttl 50 action pass
|
||||
flower skip_hw ip_ttl 50 action pass
|
||||
|
||||
mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 0
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ test_gretap()
|
||||
|
||||
test_ip6gretap()
|
||||
{
|
||||
test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ip' \
|
||||
test_vlan_match gt6 'skip_hw vlan_id 555 vlan_ethtype ipv6' \
|
||||
"mirror to ip6gretap"
|
||||
}
|
||||
|
||||
@@ -218,6 +218,7 @@ test_ip6gretap_forbidden_egress()
|
||||
test_span_gre_untagged_egress()
|
||||
{
|
||||
local tundev=$1; shift
|
||||
local ul_proto=$1; shift
|
||||
local what=$1; shift
|
||||
|
||||
RET=0
|
||||
@@ -225,7 +226,7 @@ test_span_gre_untagged_egress()
|
||||
mirror_install $swp1 ingress $tundev "matchall $tcflags"
|
||||
|
||||
quick_test_span_gre_dir $tundev ingress
|
||||
quick_test_span_vlan_dir $h3 555 ingress
|
||||
quick_test_span_vlan_dir $h3 555 ingress "$ul_proto"
|
||||
|
||||
h3_addr_add_del del $h3.555
|
||||
bridge vlan add dev $swp3 vid 555 pvid untagged
|
||||
@@ -233,7 +234,7 @@ test_span_gre_untagged_egress()
|
||||
sleep 5
|
||||
|
||||
quick_test_span_gre_dir $tundev ingress
|
||||
fail_test_span_vlan_dir $h3 555 ingress
|
||||
fail_test_span_vlan_dir $h3 555 ingress "$ul_proto"
|
||||
|
||||
h3_addr_add_del del $h3
|
||||
bridge vlan add dev $swp3 vid 555
|
||||
@@ -241,7 +242,7 @@ test_span_gre_untagged_egress()
|
||||
sleep 5
|
||||
|
||||
quick_test_span_gre_dir $tundev ingress
|
||||
quick_test_span_vlan_dir $h3 555 ingress
|
||||
quick_test_span_vlan_dir $h3 555 ingress "$ul_proto"
|
||||
|
||||
mirror_uninstall $swp1 ingress
|
||||
|
||||
@@ -250,12 +251,12 @@ test_span_gre_untagged_egress()
|
||||
|
||||
test_gretap_untagged_egress()
|
||||
{
|
||||
test_span_gre_untagged_egress gt4 "mirror to gretap"
|
||||
test_span_gre_untagged_egress gt4 ip "mirror to gretap"
|
||||
}
|
||||
|
||||
test_ip6gretap_untagged_egress()
|
||||
{
|
||||
test_span_gre_untagged_egress gt6 "mirror to ip6gretap"
|
||||
test_span_gre_untagged_egress gt6 ipv6 "mirror to ip6gretap"
|
||||
}
|
||||
|
||||
test_span_gre_fdb_roaming()
|
||||
|
||||
@@ -115,13 +115,14 @@ do_test_span_vlan_dir_ips()
|
||||
local dev=$1; shift
|
||||
local vid=$1; shift
|
||||
local direction=$1; shift
|
||||
local ul_proto=$1; shift
|
||||
local ip1=$1; shift
|
||||
local ip2=$1; shift
|
||||
|
||||
# Install the capture as skip_hw to avoid double-counting of packets.
|
||||
# The traffic is meant for local box anyway, so will be trapped to
|
||||
# kernel.
|
||||
vlan_capture_install $dev "skip_hw vlan_id $vid vlan_ethtype ip"
|
||||
vlan_capture_install $dev "skip_hw vlan_id $vid vlan_ethtype $ul_proto"
|
||||
mirror_test v$h1 $ip1 $ip2 $dev 100 $expect
|
||||
mirror_test v$h2 $ip2 $ip1 $dev 100 $expect
|
||||
vlan_capture_uninstall $dev
|
||||
|
||||
@@ -85,9 +85,9 @@ test_tagged_vlan_dir()
|
||||
RET=0
|
||||
|
||||
mirror_install $swp1 $direction $swp3.555 "matchall $tcflags"
|
||||
do_test_span_vlan_dir_ips 10 "$h3.555" 111 "$direction" \
|
||||
do_test_span_vlan_dir_ips 10 "$h3.555" 111 "$direction" ip \
|
||||
192.0.2.17 192.0.2.18
|
||||
do_test_span_vlan_dir_ips 0 "$h3.555" 555 "$direction" \
|
||||
do_test_span_vlan_dir_ips 0 "$h3.555" 555 "$direction" ip \
|
||||
192.0.2.17 192.0.2.18
|
||||
mirror_uninstall $swp1 $direction
|
||||
|
||||
|
||||
@@ -116,17 +116,18 @@ gre_gst_test_checks()
|
||||
{
|
||||
local name=$1
|
||||
local addr=$2
|
||||
local proto=$3
|
||||
|
||||
$NS_EXEC nc -kl $port >/dev/null &
|
||||
$NS_EXEC nc $proto -kl $port >/dev/null &
|
||||
PID=$!
|
||||
while ! $NS_EXEC ss -ltn | grep -q $port; do ((i++)); sleep 0.01; done
|
||||
|
||||
cat $TMPFILE | timeout 1 nc $addr $port
|
||||
cat $TMPFILE | timeout 1 nc $proto -N $addr $port
|
||||
log_test $? 0 "$name - copy file w/ TSO"
|
||||
|
||||
ethtool -K veth0 tso off
|
||||
|
||||
cat $TMPFILE | timeout 1 nc $addr $port
|
||||
cat $TMPFILE | timeout 1 nc $proto -N $addr $port
|
||||
log_test $? 0 "$name - copy file w/ GSO"
|
||||
|
||||
ethtool -K veth0 tso on
|
||||
@@ -155,7 +156,7 @@ gre6_gso_test()
|
||||
sleep 2
|
||||
|
||||
gre_gst_test_checks GREv6/v4 172.16.2.2
|
||||
gre_gst_test_checks GREv6/v6 2001:db8:1::2
|
||||
gre_gst_test_checks GREv6/v6 2001:db8:1::2 -6
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
@@ -211,12 +211,16 @@ static void test(int *rcv_fd, int len, int family, int proto)
|
||||
|
||||
/* Forward iterate */
|
||||
for (node = 0; node < len; ++node) {
|
||||
if (!numa_bitmask_isbitset(numa_nodes_ptr, node))
|
||||
continue;
|
||||
send_from_node(node, family, proto);
|
||||
receive_on_node(rcv_fd, len, epfd, node, proto);
|
||||
}
|
||||
|
||||
/* Reverse iterate */
|
||||
for (node = len - 1; node >= 0; --node) {
|
||||
if (!numa_bitmask_isbitset(numa_nodes_ptr, node))
|
||||
continue;
|
||||
send_from_node(node, family, proto);
|
||||
receive_on_node(rcv_fd, len, epfd, node, proto);
|
||||
}
|
||||
|
||||
@@ -101,6 +101,8 @@ setup-vm() {
|
||||
ip -netns hv-$id link set veth-tap master br0
|
||||
ip -netns hv-$id link set veth-tap up
|
||||
|
||||
ip link set veth-hv address 02:1d:8d:dd:0c:6$id
|
||||
|
||||
ip link set veth-hv netns vm-$id
|
||||
ip -netns vm-$id addr add 10.0.0.$id/24 dev veth-hv
|
||||
ip -netns vm-$id link set veth-hv up
|
||||
|
||||
@@ -654,7 +654,6 @@ TEST_F(tls, recvmsg_single_max)
|
||||
TEST_F(tls, recvmsg_multiple)
|
||||
{
|
||||
unsigned int msg_iovlen = 1024;
|
||||
unsigned int len_compared = 0;
|
||||
struct iovec vec[1024];
|
||||
char *iov_base[1024];
|
||||
unsigned int iov_len = 16;
|
||||
@@ -675,8 +674,6 @@ TEST_F(tls, recvmsg_multiple)
|
||||
hdr.msg_iovlen = msg_iovlen;
|
||||
hdr.msg_iov = vec;
|
||||
EXPECT_NE(recvmsg(self->cfd, &hdr, 0), -1);
|
||||
for (i = 0; i < msg_iovlen; i++)
|
||||
len_compared += iov_len;
|
||||
|
||||
for (i = 0; i < msg_iovlen; i++)
|
||||
free(iov_base[i]);
|
||||
|
||||
@@ -293,19 +293,17 @@ static void usage(const char *filepath)
|
||||
|
||||
static void parse_opts(int argc, char **argv)
|
||||
{
|
||||
const char *bind_addr = NULL;
|
||||
int c;
|
||||
|
||||
/* bind to any by default */
|
||||
setup_sockaddr(PF_INET6, "::", &cfg_bind_addr);
|
||||
while ((c = getopt(argc, argv, "4b:C:Gl:n:p:rR:S:tv")) != -1) {
|
||||
switch (c) {
|
||||
case '4':
|
||||
cfg_family = PF_INET;
|
||||
cfg_alen = sizeof(struct sockaddr_in);
|
||||
setup_sockaddr(PF_INET, "0.0.0.0", &cfg_bind_addr);
|
||||
break;
|
||||
case 'b':
|
||||
setup_sockaddr(cfg_family, optarg, &cfg_bind_addr);
|
||||
bind_addr = optarg;
|
||||
break;
|
||||
case 'C':
|
||||
cfg_connect_timeout_ms = strtoul(optarg, NULL, 0);
|
||||
@@ -341,6 +339,11 @@ static void parse_opts(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (!bind_addr)
|
||||
bind_addr = cfg_family == PF_INET6 ? "::" : "0.0.0.0";
|
||||
|
||||
setup_sockaddr(cfg_family, bind_addr, &cfg_bind_addr);
|
||||
|
||||
if (optind != argc)
|
||||
usage(argv[0]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user