Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Just minor overlapping changes in the conflicts here. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -663,7 +663,7 @@ while ($#ARGV >= 0) {
|
||||
}
|
||||
|
||||
else {
|
||||
die "Unknow option $opt\n";
|
||||
die "Unknown option $opt\n";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -732,7 +732,7 @@ if ($start) {
|
||||
}
|
||||
}
|
||||
run_command "cp $good_start $good" or die "failed to copy to $good\n";
|
||||
run_command "cp $bad_start $bad" or die "faield to copy to $bad\n";
|
||||
run_command "cp $bad_start $bad" or die "failed to copy to $bad\n";
|
||||
} else {
|
||||
if ( ! -f $good ) {
|
||||
die "Can not find file $good\n";
|
||||
|
@@ -57,7 +57,8 @@ TEST_PROGS := test_kmod.sh \
|
||||
test_lirc_mode2.sh \
|
||||
test_skb_cgroup_id.sh \
|
||||
test_flow_dissector.sh \
|
||||
test_xdp_vlan.sh \
|
||||
test_xdp_vlan_mode_generic.sh \
|
||||
test_xdp_vlan_mode_native.sh \
|
||||
test_lwt_ip_encap.sh \
|
||||
test_tcp_check_syncookie.sh \
|
||||
test_tc_tunnel.sh \
|
||||
|
@@ -41,8 +41,7 @@ int sendmsg_v6_prog(struct bpf_sock_addr *ctx)
|
||||
}
|
||||
|
||||
/* Rewrite destination. */
|
||||
if ((ctx->user_ip6[0] & 0xFFFF) == bpf_htons(0xFACE) &&
|
||||
ctx->user_ip6[0] >> 16 == bpf_htons(0xB00C)) {
|
||||
if (ctx->user_ip6[0] == bpf_htonl(0xFACEB00C)) {
|
||||
ctx->user_ip6[0] = bpf_htonl(DST_REWRITE_IP6_0);
|
||||
ctx->user_ip6[1] = bpf_htonl(DST_REWRITE_IP6_1);
|
||||
ctx->user_ip6[2] = bpf_htonl(DST_REWRITE_IP6_2);
|
||||
|
@@ -1,6 +1,14 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Author: Jesper Dangaard Brouer <hawk@kernel.org>
|
||||
|
||||
TESTNAME=xdp_vlan
|
||||
# Allow wrapper scripts to name test
|
||||
if [ -z "$TESTNAME" ]; then
|
||||
TESTNAME=xdp_vlan
|
||||
fi
|
||||
|
||||
# Default XDP mode
|
||||
XDP_MODE=xdpgeneric
|
||||
|
||||
usage() {
|
||||
echo "Testing XDP + TC eBPF VLAN manipulations: $TESTNAME"
|
||||
@@ -9,9 +17,23 @@ usage() {
|
||||
echo " -v | --verbose : Verbose"
|
||||
echo " --flush : Flush before starting (e.g. after --interactive)"
|
||||
echo " --interactive : Keep netns setup running after test-run"
|
||||
echo " --mode=XXX : Choose XDP mode (xdp | xdpgeneric | xdpdrv)"
|
||||
echo ""
|
||||
}
|
||||
|
||||
valid_xdp_mode()
|
||||
{
|
||||
local mode=$1
|
||||
|
||||
case "$mode" in
|
||||
xdpgeneric | xdpdrv | xdp)
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
esac
|
||||
}
|
||||
|
||||
cleanup()
|
||||
{
|
||||
local status=$?
|
||||
@@ -37,7 +59,7 @@ cleanup()
|
||||
|
||||
# Using external program "getopt" to get --long-options
|
||||
OPTIONS=$(getopt -o hvfi: \
|
||||
--long verbose,flush,help,interactive,debug -- "$@")
|
||||
--long verbose,flush,help,interactive,debug,mode: -- "$@")
|
||||
if (( $? != 0 )); then
|
||||
usage
|
||||
echo "selftests: $TESTNAME [FAILED] Error calling getopt, unknown option?"
|
||||
@@ -60,6 +82,11 @@ while true; do
|
||||
cleanup
|
||||
shift
|
||||
;;
|
||||
--mode )
|
||||
shift
|
||||
XDP_MODE=$1
|
||||
shift
|
||||
;;
|
||||
-- )
|
||||
shift
|
||||
break
|
||||
@@ -81,8 +108,14 @@ if [ "$EUID" -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ip link set dev lo xdp off 2>/dev/null > /dev/null
|
||||
if [ $? -ne 0 ];then
|
||||
valid_xdp_mode $XDP_MODE
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "selftests: $TESTNAME [FAILED] unknown XDP mode ($XDP_MODE)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ip link set dev lo xdpgeneric off 2>/dev/null > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "selftests: $TESTNAME [SKIP] need ip xdp support"
|
||||
exit 0
|
||||
fi
|
||||
@@ -155,7 +188,7 @@ ip netns exec ns2 ip link set lo up
|
||||
# At this point, the hosts cannot reach each-other,
|
||||
# because ns2 are using VLAN tags on the packets.
|
||||
|
||||
ip netns exec ns2 sh -c 'ping -W 1 -c 1 100.64.41.1 || echo "Okay ping fails"'
|
||||
ip netns exec ns2 sh -c 'ping -W 1 -c 1 100.64.41.1 || echo "Success: First ping must fail"'
|
||||
|
||||
|
||||
# Now we can use the test_xdp_vlan.c program to pop/push these VLAN tags
|
||||
@@ -166,7 +199,7 @@ export FILE=test_xdp_vlan.o
|
||||
|
||||
# First test: Remove VLAN by setting VLAN ID 0, using "xdp_vlan_change"
|
||||
export XDP_PROG=xdp_vlan_change
|
||||
ip netns exec ns1 ip link set $DEVNS1 xdp object $FILE section $XDP_PROG
|
||||
ip netns exec ns1 ip link set $DEVNS1 $XDP_MODE object $FILE section $XDP_PROG
|
||||
|
||||
# In ns1: egress use TC to add back VLAN tag 4011
|
||||
# (del cmd)
|
||||
@@ -177,8 +210,8 @@ ip netns exec ns1 tc filter add dev $DEVNS1 egress \
|
||||
prio 1 handle 1 bpf da obj $FILE sec tc_vlan_push
|
||||
|
||||
# Now the namespaces can reach each-other, test with ping:
|
||||
ip netns exec ns2 ping -W 2 -c 3 $IPADDR1
|
||||
ip netns exec ns1 ping -W 2 -c 3 $IPADDR2
|
||||
ip netns exec ns2 ping -i 0.2 -W 2 -c 2 $IPADDR1
|
||||
ip netns exec ns1 ping -i 0.2 -W 2 -c 2 $IPADDR2
|
||||
|
||||
# Second test: Replace xdp prog, that fully remove vlan header
|
||||
#
|
||||
@@ -187,9 +220,9 @@ ip netns exec ns1 ping -W 2 -c 3 $IPADDR2
|
||||
# ETH_P_8021Q indication, and this cause overwriting of our changes.
|
||||
#
|
||||
export XDP_PROG=xdp_vlan_remove_outer2
|
||||
ip netns exec ns1 ip link set $DEVNS1 xdp off
|
||||
ip netns exec ns1 ip link set $DEVNS1 xdp object $FILE section $XDP_PROG
|
||||
ip netns exec ns1 ip link set $DEVNS1 $XDP_MODE off
|
||||
ip netns exec ns1 ip link set $DEVNS1 $XDP_MODE object $FILE section $XDP_PROG
|
||||
|
||||
# Now the namespaces should still be able reach each-other, test with ping:
|
||||
ip netns exec ns2 ping -W 2 -c 3 $IPADDR1
|
||||
ip netns exec ns1 ping -W 2 -c 3 $IPADDR2
|
||||
ip netns exec ns2 ping -i 0.2 -W 2 -c 2 $IPADDR1
|
||||
ip netns exec ns1 ping -i 0.2 -W 2 -c 2 $IPADDR2
|
||||
|
9
tools/testing/selftests/bpf/test_xdp_vlan_mode_generic.sh
Executable file
9
tools/testing/selftests/bpf/test_xdp_vlan_mode_generic.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# Exit on failure
|
||||
set -e
|
||||
|
||||
# Wrapper script to test generic-XDP
|
||||
export TESTNAME=xdp_vlan_mode_generic
|
||||
./test_xdp_vlan.sh --mode=xdpgeneric
|
9
tools/testing/selftests/bpf/test_xdp_vlan_mode_native.sh
Executable file
9
tools/testing/selftests/bpf/test_xdp_vlan_mode_native.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# Exit on failure
|
||||
set -e
|
||||
|
||||
# Wrapper script to test native-XDP
|
||||
export TESTNAME=xdp_vlan_mode_native
|
||||
./test_xdp_vlan.sh --mode=xdpdrv
|
@@ -974,6 +974,17 @@
|
||||
.result = ACCEPT,
|
||||
.prog_type = BPF_PROG_TYPE_CGROUP_SKB,
|
||||
},
|
||||
{
|
||||
"read gso_segs from CGROUP_SKB",
|
||||
.insns = {
|
||||
BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_1,
|
||||
offsetof(struct __sk_buff, gso_segs)),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.prog_type = BPF_PROG_TYPE_CGROUP_SKB,
|
||||
},
|
||||
{
|
||||
"write gso_segs from CGROUP_SKB",
|
||||
.insns = {
|
||||
|
@@ -191,8 +191,7 @@ int cg_find_unified_root(char *root, size_t len)
|
||||
strtok(NULL, delim);
|
||||
strtok(NULL, delim);
|
||||
|
||||
if (strcmp(fs, "cgroup") == 0 &&
|
||||
strcmp(type, "cgroup2") == 0) {
|
||||
if (strcmp(type, "cgroup2") == 0) {
|
||||
strncpy(root, mount, len);
|
||||
return 0;
|
||||
}
|
||||
|
@@ -28,7 +28,7 @@
|
||||
# override by exporting to your environment prior running this script.
|
||||
# For instance this script assumes you do not have xfs loaded upon boot.
|
||||
# If this is false, export DEFAULT_KMOD_FS="ext4" prior to running this
|
||||
# script if the filesyste module you don't have loaded upon bootup
|
||||
# script if the filesystem module you don't have loaded upon bootup
|
||||
# is ext4 instead. Refer to allow_user_defaults() for a list of user
|
||||
# override variables possible.
|
||||
#
|
||||
@@ -263,7 +263,7 @@ config_get_test_result()
|
||||
config_reset()
|
||||
{
|
||||
if ! echo -n "1" >"$DIR"/reset; then
|
||||
echo "$0: reset shuld have worked" >&2
|
||||
echo "$0: reset should have worked" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
@@ -488,7 +488,7 @@ usage()
|
||||
echo Example uses:
|
||||
echo
|
||||
echo "${TEST_NAME}.sh -- executes all tests"
|
||||
echo "${TEST_NAME}.sh -t 0008 -- Executes test ID 0008 number of times is recomended"
|
||||
echo "${TEST_NAME}.sh -t 0008 -- Executes test ID 0008 number of times is recommended"
|
||||
echo "${TEST_NAME}.sh -w 0008 -- Watch test ID 0008 run until an error occurs"
|
||||
echo "${TEST_NAME}.sh -s 0008 -- Run test ID 0008 once"
|
||||
echo "${TEST_NAME}.sh -c 0008 3 -- Run test ID 0008 three times"
|
||||
|
@@ -10,6 +10,7 @@
|
||||
#ifndef __KSELFTEST_H
|
||||
#define __KSELFTEST_H
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <stdarg.h>
|
||||
@@ -81,58 +82,68 @@ static inline void ksft_print_cnts(void)
|
||||
|
||||
static inline void ksft_print_msg(const char *msg, ...)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
va_list args;
|
||||
|
||||
va_start(args, msg);
|
||||
printf("# ");
|
||||
errno = saved_errno;
|
||||
vprintf(msg, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
static inline void ksft_test_result_pass(const char *msg, ...)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
va_list args;
|
||||
|
||||
ksft_cnt.ksft_pass++;
|
||||
|
||||
va_start(args, msg);
|
||||
printf("ok %d ", ksft_test_num());
|
||||
errno = saved_errno;
|
||||
vprintf(msg, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
static inline void ksft_test_result_fail(const char *msg, ...)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
va_list args;
|
||||
|
||||
ksft_cnt.ksft_fail++;
|
||||
|
||||
va_start(args, msg);
|
||||
printf("not ok %d ", ksft_test_num());
|
||||
errno = saved_errno;
|
||||
vprintf(msg, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
static inline void ksft_test_result_skip(const char *msg, ...)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
va_list args;
|
||||
|
||||
ksft_cnt.ksft_xskip++;
|
||||
|
||||
va_start(args, msg);
|
||||
printf("not ok %d # SKIP ", ksft_test_num());
|
||||
errno = saved_errno;
|
||||
vprintf(msg, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
static inline void ksft_test_result_error(const char *msg, ...)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
va_list args;
|
||||
|
||||
ksft_cnt.ksft_error++;
|
||||
|
||||
va_start(args, msg);
|
||||
printf("not ok %d # error ", ksft_test_num());
|
||||
errno = saved_errno;
|
||||
vprintf(msg, args);
|
||||
va_end(args);
|
||||
}
|
||||
@@ -152,10 +163,12 @@ static inline int ksft_exit_fail(void)
|
||||
|
||||
static inline int ksft_exit_fail_msg(const char *msg, ...)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
va_list args;
|
||||
|
||||
va_start(args, msg);
|
||||
printf("Bail out! ");
|
||||
errno = saved_errno;
|
||||
vprintf(msg, args);
|
||||
va_end(args);
|
||||
|
||||
@@ -178,10 +191,12 @@ static inline int ksft_exit_xpass(void)
|
||||
static inline int ksft_exit_skip(const char *msg, ...)
|
||||
{
|
||||
if (msg) {
|
||||
int saved_errno = errno;
|
||||
va_list args;
|
||||
|
||||
va_start(args, msg);
|
||||
printf("not ok %d # SKIP ", 1 + ksft_test_num());
|
||||
errno = saved_errno;
|
||||
vprintf(msg, args);
|
||||
va_end(args);
|
||||
} else {
|
||||
|
@@ -13,6 +13,14 @@ function log() {
|
||||
echo "$1" > /dev/kmsg
|
||||
}
|
||||
|
||||
# skip(msg) - testing can't proceed
|
||||
# msg - explanation
|
||||
function skip() {
|
||||
log "SKIP: $1"
|
||||
echo "SKIP: $1" >&2
|
||||
exit 4
|
||||
}
|
||||
|
||||
# die(msg) - game over, man
|
||||
# msg - dying words
|
||||
function die() {
|
||||
@@ -21,13 +29,27 @@ function die() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
# set_dynamic_debug() - setup kernel dynamic debug
|
||||
# TODO - push and pop this config?
|
||||
function push_dynamic_debug() {
|
||||
DYNAMIC_DEBUG=$(grep '^kernel/livepatch' /sys/kernel/debug/dynamic_debug/control | \
|
||||
awk -F'[: ]' '{print "file " $1 " line " $2 " " $4}')
|
||||
}
|
||||
|
||||
function pop_dynamic_debug() {
|
||||
if [[ -n "$DYNAMIC_DEBUG" ]]; then
|
||||
echo -n "$DYNAMIC_DEBUG" > /sys/kernel/debug/dynamic_debug/control
|
||||
fi
|
||||
}
|
||||
|
||||
# set_dynamic_debug() - save the current dynamic debug config and tweak
|
||||
# it for the self-tests. Set a script exit trap
|
||||
# that restores the original config.
|
||||
function set_dynamic_debug() {
|
||||
cat << EOF > /sys/kernel/debug/dynamic_debug/control
|
||||
file kernel/livepatch/* +p
|
||||
func klp_try_switch_task -p
|
||||
EOF
|
||||
push_dynamic_debug
|
||||
trap pop_dynamic_debug EXIT INT TERM HUP
|
||||
cat <<-EOF > /sys/kernel/debug/dynamic_debug/control
|
||||
file kernel/livepatch/* +p
|
||||
func klp_try_switch_task -p
|
||||
EOF
|
||||
}
|
||||
|
||||
# loop_until(cmd) - loop a command until it is successful or $MAX_RETRIES,
|
||||
@@ -43,6 +65,12 @@ function loop_until() {
|
||||
done
|
||||
}
|
||||
|
||||
function assert_mod() {
|
||||
local mod="$1"
|
||||
|
||||
modprobe --dry-run "$mod" &>/dev/null
|
||||
}
|
||||
|
||||
function is_livepatch_mod() {
|
||||
local mod="$1"
|
||||
|
||||
@@ -75,6 +103,9 @@ function __load_mod() {
|
||||
function load_mod() {
|
||||
local mod="$1"; shift
|
||||
|
||||
assert_mod "$mod" ||
|
||||
skip "unable to load module ${mod}, verify CONFIG_TEST_LIVEPATCH=m and run self-tests as root"
|
||||
|
||||
is_livepatch_mod "$mod" &&
|
||||
die "use load_lp() to load the livepatch module $mod"
|
||||
|
||||
@@ -88,6 +119,9 @@ function load_mod() {
|
||||
function load_lp_nowait() {
|
||||
local mod="$1"; shift
|
||||
|
||||
assert_mod "$mod" ||
|
||||
skip "unable to load module ${mod}, verify CONFIG_TEST_LIVEPATCH=m and run self-tests as root"
|
||||
|
||||
is_livepatch_mod "$mod" ||
|
||||
die "module $mod is not a livepatch"
|
||||
|
||||
|
4
tools/testing/selftests/net/.gitignore
vendored
4
tools/testing/selftests/net/.gitignore
vendored
@@ -17,7 +17,7 @@ tcp_inq
|
||||
tls
|
||||
txring_overwrite
|
||||
ip_defrag
|
||||
ipv6_flowlabel
|
||||
ipv6_flowlabel_mgr
|
||||
so_txtime
|
||||
flowlabel
|
||||
flowlabel_mgr
|
||||
tcp_fastopen_backup_key
|
||||
|
@@ -93,18 +93,10 @@ sw1_create()
|
||||
ip route add vrf v$ol1 192.0.2.16/28 \
|
||||
nexthop dev g1a \
|
||||
nexthop dev g1b
|
||||
|
||||
tc qdisc add dev $ul1 clsact
|
||||
tc filter add dev $ul1 egress pref 111 prot ipv4 \
|
||||
flower dst_ip 192.0.2.66 action pass
|
||||
tc filter add dev $ul1 egress pref 222 prot ipv4 \
|
||||
flower dst_ip 192.0.2.82 action pass
|
||||
}
|
||||
|
||||
sw1_destroy()
|
||||
{
|
||||
tc qdisc del dev $ul1 clsact
|
||||
|
||||
ip route del vrf v$ol1 192.0.2.16/28
|
||||
|
||||
ip route del vrf v$ol1 192.0.2.82/32 via 192.0.2.146
|
||||
@@ -139,10 +131,18 @@ sw2_create()
|
||||
ip route add vrf v$ol2 192.0.2.0/28 \
|
||||
nexthop dev g2a \
|
||||
nexthop dev g2b
|
||||
|
||||
tc qdisc add dev $ul2 clsact
|
||||
tc filter add dev $ul2 ingress pref 111 prot 802.1Q \
|
||||
flower vlan_id 111 action pass
|
||||
tc filter add dev $ul2 ingress pref 222 prot 802.1Q \
|
||||
flower vlan_id 222 action pass
|
||||
}
|
||||
|
||||
sw2_destroy()
|
||||
{
|
||||
tc qdisc del dev $ul2 clsact
|
||||
|
||||
ip route del vrf v$ol2 192.0.2.0/28
|
||||
|
||||
ip route del vrf v$ol2 192.0.2.81/32 via 192.0.2.145
|
||||
@@ -187,12 +187,16 @@ setup_prepare()
|
||||
sw1_create
|
||||
sw2_create
|
||||
h2_create
|
||||
|
||||
forwarding_enable
|
||||
}
|
||||
|
||||
cleanup()
|
||||
{
|
||||
pre_cleanup
|
||||
|
||||
forwarding_restore
|
||||
|
||||
h2_destroy
|
||||
sw2_destroy
|
||||
sw1_destroy
|
||||
@@ -211,15 +215,15 @@ multipath4_test()
|
||||
nexthop dev g1a weight $weight1 \
|
||||
nexthop dev g1b weight $weight2
|
||||
|
||||
local t0_111=$(tc_rule_stats_get $ul1 111 egress)
|
||||
local t0_222=$(tc_rule_stats_get $ul1 222 egress)
|
||||
local t0_111=$(tc_rule_stats_get $ul2 111 ingress)
|
||||
local t0_222=$(tc_rule_stats_get $ul2 222 ingress)
|
||||
|
||||
ip vrf exec v$h1 \
|
||||
$MZ $h1 -q -p 64 -A 192.0.2.1 -B 192.0.2.18 \
|
||||
-d 1msec -t udp "sp=1024,dp=0-32768"
|
||||
|
||||
local t1_111=$(tc_rule_stats_get $ul1 111 egress)
|
||||
local t1_222=$(tc_rule_stats_get $ul1 222 egress)
|
||||
local t1_111=$(tc_rule_stats_get $ul2 111 ingress)
|
||||
local t1_222=$(tc_rule_stats_get $ul2 222 ingress)
|
||||
|
||||
local d111=$((t1_111 - t0_111))
|
||||
local d222=$((t1_222 - t0_222))
|
||||
|
@@ -25,6 +25,80 @@
|
||||
#define TLS_PAYLOAD_MAX_LEN 16384
|
||||
#define SOL_TLS 282
|
||||
|
||||
#ifndef ENOTSUPP
|
||||
#define ENOTSUPP 524
|
||||
#endif
|
||||
|
||||
FIXTURE(tls_basic)
|
||||
{
|
||||
int fd, cfd;
|
||||
bool notls;
|
||||
};
|
||||
|
||||
FIXTURE_SETUP(tls_basic)
|
||||
{
|
||||
struct sockaddr_in addr;
|
||||
socklen_t len;
|
||||
int sfd, ret;
|
||||
|
||||
self->notls = false;
|
||||
len = sizeof(addr);
|
||||
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
addr.sin_port = 0;
|
||||
|
||||
self->fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
sfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
ret = bind(sfd, &addr, sizeof(addr));
|
||||
ASSERT_EQ(ret, 0);
|
||||
ret = listen(sfd, 10);
|
||||
ASSERT_EQ(ret, 0);
|
||||
|
||||
ret = getsockname(sfd, &addr, &len);
|
||||
ASSERT_EQ(ret, 0);
|
||||
|
||||
ret = connect(self->fd, &addr, sizeof(addr));
|
||||
ASSERT_EQ(ret, 0);
|
||||
|
||||
self->cfd = accept(sfd, &addr, &len);
|
||||
ASSERT_GE(self->cfd, 0);
|
||||
|
||||
close(sfd);
|
||||
|
||||
ret = setsockopt(self->fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
|
||||
if (ret != 0) {
|
||||
ASSERT_EQ(errno, ENOENT);
|
||||
self->notls = true;
|
||||
printf("Failure setting TCP_ULP, testing without tls\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ret = setsockopt(self->cfd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
|
||||
ASSERT_EQ(ret, 0);
|
||||
}
|
||||
|
||||
FIXTURE_TEARDOWN(tls_basic)
|
||||
{
|
||||
close(self->fd);
|
||||
close(self->cfd);
|
||||
}
|
||||
|
||||
/* Send some data through with ULP but no keys */
|
||||
TEST_F(tls_basic, base_base)
|
||||
{
|
||||
char const *test_str = "test_read";
|
||||
int send_len = 10;
|
||||
char buf[10];
|
||||
|
||||
ASSERT_EQ(strlen(test_str) + 1, send_len);
|
||||
|
||||
EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
|
||||
EXPECT_NE(recv(self->cfd, buf, send_len, 0), -1);
|
||||
EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
|
||||
};
|
||||
|
||||
FIXTURE(tls)
|
||||
{
|
||||
int fd, cfd;
|
||||
@@ -165,6 +239,16 @@ TEST_F(tls, msg_more)
|
||||
EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
|
||||
}
|
||||
|
||||
TEST_F(tls, msg_more_unsent)
|
||||
{
|
||||
char const *test_str = "test_read";
|
||||
int send_len = 10;
|
||||
char buf[10];
|
||||
|
||||
EXPECT_EQ(send(self->fd, test_str, send_len, MSG_MORE), send_len);
|
||||
EXPECT_EQ(recv(self->cfd, buf, send_len, MSG_DONTWAIT), -1);
|
||||
}
|
||||
|
||||
TEST_F(tls, sendmsg_single)
|
||||
{
|
||||
struct msghdr msg;
|
||||
@@ -610,6 +694,42 @@ TEST_F(tls, recv_lowat)
|
||||
EXPECT_EQ(memcmp(send_mem, recv_mem + 10, 5), 0);
|
||||
}
|
||||
|
||||
TEST_F(tls, bidir)
|
||||
{
|
||||
char const *test_str = "test_read";
|
||||
int send_len = 10;
|
||||
char buf[10];
|
||||
int ret;
|
||||
|
||||
if (!self->notls) {
|
||||
struct tls12_crypto_info_aes_gcm_128 tls12;
|
||||
|
||||
memset(&tls12, 0, sizeof(tls12));
|
||||
tls12.info.version = TLS_1_3_VERSION;
|
||||
tls12.info.cipher_type = TLS_CIPHER_AES_GCM_128;
|
||||
|
||||
ret = setsockopt(self->fd, SOL_TLS, TLS_RX, &tls12,
|
||||
sizeof(tls12));
|
||||
ASSERT_EQ(ret, 0);
|
||||
|
||||
ret = setsockopt(self->cfd, SOL_TLS, TLS_TX, &tls12,
|
||||
sizeof(tls12));
|
||||
ASSERT_EQ(ret, 0);
|
||||
}
|
||||
|
||||
ASSERT_EQ(strlen(test_str) + 1, send_len);
|
||||
|
||||
EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
|
||||
EXPECT_NE(recv(self->cfd, buf, send_len, 0), -1);
|
||||
EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
|
||||
EXPECT_EQ(send(self->cfd, test_str, send_len, 0), send_len);
|
||||
EXPECT_NE(recv(self->fd, buf, send_len, 0), -1);
|
||||
EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
|
||||
};
|
||||
|
||||
TEST_F(tls, pollin)
|
||||
{
|
||||
char const *test_str = "test_poll";
|
||||
@@ -837,6 +957,109 @@ TEST_F(tls, control_msg)
|
||||
EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
|
||||
}
|
||||
|
||||
TEST_F(tls, shutdown)
|
||||
{
|
||||
char const *test_str = "test_read";
|
||||
int send_len = 10;
|
||||
char buf[10];
|
||||
|
||||
ASSERT_EQ(strlen(test_str) + 1, send_len);
|
||||
|
||||
EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
|
||||
EXPECT_NE(recv(self->cfd, buf, send_len, 0), -1);
|
||||
EXPECT_EQ(memcmp(buf, test_str, send_len), 0);
|
||||
|
||||
shutdown(self->fd, SHUT_RDWR);
|
||||
shutdown(self->cfd, SHUT_RDWR);
|
||||
}
|
||||
|
||||
TEST_F(tls, shutdown_unsent)
|
||||
{
|
||||
char const *test_str = "test_read";
|
||||
int send_len = 10;
|
||||
|
||||
EXPECT_EQ(send(self->fd, test_str, send_len, MSG_MORE), send_len);
|
||||
|
||||
shutdown(self->fd, SHUT_RDWR);
|
||||
shutdown(self->cfd, SHUT_RDWR);
|
||||
}
|
||||
|
||||
TEST_F(tls, shutdown_reuse)
|
||||
{
|
||||
struct sockaddr_in addr;
|
||||
int ret;
|
||||
|
||||
shutdown(self->fd, SHUT_RDWR);
|
||||
shutdown(self->cfd, SHUT_RDWR);
|
||||
close(self->cfd);
|
||||
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
addr.sin_port = 0;
|
||||
|
||||
ret = bind(self->fd, &addr, sizeof(addr));
|
||||
EXPECT_EQ(ret, 0);
|
||||
ret = listen(self->fd, 10);
|
||||
EXPECT_EQ(ret, -1);
|
||||
EXPECT_EQ(errno, EINVAL);
|
||||
|
||||
ret = connect(self->fd, &addr, sizeof(addr));
|
||||
EXPECT_EQ(ret, -1);
|
||||
EXPECT_EQ(errno, EISCONN);
|
||||
}
|
||||
|
||||
TEST(non_established) {
|
||||
struct tls12_crypto_info_aes_gcm_256 tls12;
|
||||
struct sockaddr_in addr;
|
||||
int sfd, ret, fd;
|
||||
socklen_t len;
|
||||
|
||||
len = sizeof(addr);
|
||||
|
||||
memset(&tls12, 0, sizeof(tls12));
|
||||
tls12.info.version = TLS_1_2_VERSION;
|
||||
tls12.info.cipher_type = TLS_CIPHER_AES_GCM_256;
|
||||
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
addr.sin_port = 0;
|
||||
|
||||
fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
sfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
ret = bind(sfd, &addr, sizeof(addr));
|
||||
ASSERT_EQ(ret, 0);
|
||||
ret = listen(sfd, 10);
|
||||
ASSERT_EQ(ret, 0);
|
||||
|
||||
ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
|
||||
EXPECT_EQ(ret, -1);
|
||||
/* TLS ULP not supported */
|
||||
if (errno == ENOENT)
|
||||
return;
|
||||
EXPECT_EQ(errno, ENOTSUPP);
|
||||
|
||||
ret = setsockopt(sfd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
|
||||
EXPECT_EQ(ret, -1);
|
||||
EXPECT_EQ(errno, ENOTSUPP);
|
||||
|
||||
ret = getsockname(sfd, &addr, &len);
|
||||
ASSERT_EQ(ret, 0);
|
||||
|
||||
ret = connect(fd, &addr, sizeof(addr));
|
||||
ASSERT_EQ(ret, 0);
|
||||
|
||||
ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
|
||||
ASSERT_EQ(ret, 0);
|
||||
|
||||
ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
|
||||
EXPECT_EQ(ret, -1);
|
||||
EXPECT_EQ(errno, EEXIST);
|
||||
|
||||
close(fd);
|
||||
close(sfd);
|
||||
}
|
||||
|
||||
TEST(keysizes) {
|
||||
struct tls12_crypto_info_aes_gcm_256 tls12;
|
||||
struct sockaddr_in addr;
|
||||
|
@@ -339,13 +339,9 @@ static int test_pidfd_send_signal_syscall_support(void)
|
||||
|
||||
ret = sys_pidfd_send_signal(pidfd, 0, NULL, 0);
|
||||
if (ret < 0) {
|
||||
/*
|
||||
* pidfd_send_signal() will currently return ENOSYS when
|
||||
* CONFIG_PROC_FS is not set.
|
||||
*/
|
||||
if (errno == ENOSYS)
|
||||
ksft_exit_skip(
|
||||
"%s test: pidfd_send_signal() syscall not supported (Ensure that CONFIG_PROC_FS=y is set)\n",
|
||||
"%s test: pidfd_send_signal() syscall not supported\n",
|
||||
test_name);
|
||||
|
||||
ksft_exit_fail_msg("%s test: Failed to send signal\n",
|
||||
|
@@ -713,5 +713,99 @@
|
||||
"teardown": [
|
||||
"$TC actions flush action vlan"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "294e",
|
||||
"name": "Add batch of 32 vlan push actions with cookie",
|
||||
"category": [
|
||||
"actions",
|
||||
"vlan"
|
||||
],
|
||||
"setup": [
|
||||
[
|
||||
"$TC actions flush action vlan",
|
||||
0,
|
||||
1,
|
||||
255
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action vlan push protocol 802.1q id 4094 priority 7 pipe index \\$i cookie aabbccddeeff112233445566778800a1 \\\"; args=\"\\$args\\$cmd\"; done && $TC actions add \\$args\"",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC actions list action vlan",
|
||||
"matchPattern": "^[ \t]+index [0-9]+ ref",
|
||||
"matchCount": "32",
|
||||
"teardown": [
|
||||
"$TC actions flush action vlan"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "56f7",
|
||||
"name": "Delete batch of 32 vlan push actions",
|
||||
"category": [
|
||||
"actions",
|
||||
"vlan"
|
||||
],
|
||||
"setup": [
|
||||
[
|
||||
"$TC actions flush action vlan",
|
||||
0,
|
||||
1,
|
||||
255
|
||||
],
|
||||
"bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action vlan push protocol 802.1q id 4094 priority 7 pipe index \\$i \\\"; args=\\\"\\$args\\$cmd\\\"; done && $TC actions add \\$args\""
|
||||
],
|
||||
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action vlan index \\$i \\\"; args=\"\\$args\\$cmd\"; done && $TC actions del \\$args\"",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC actions list action vlan",
|
||||
"matchPattern": "^[ \t]+index [0-9]+ ref",
|
||||
"matchCount": "0",
|
||||
"teardown": []
|
||||
},
|
||||
{
|
||||
"id": "759f",
|
||||
"name": "Add batch of 32 vlan pop actions with cookie",
|
||||
"category": [
|
||||
"actions",
|
||||
"vlan"
|
||||
],
|
||||
"setup": [
|
||||
[
|
||||
"$TC actions flush action vlan",
|
||||
0,
|
||||
1,
|
||||
255
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action vlan pop continue index \\$i cookie aabbccddeeff112233445566778800a1 \\\"; args=\"\\$args\\$cmd\"; done && $TC actions add \\$args\"",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC actions list action vlan",
|
||||
"matchPattern": "^[ \t]+index [0-9]+ ref",
|
||||
"matchCount": "32",
|
||||
"teardown": [
|
||||
"$TC actions flush action vlan"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c84a",
|
||||
"name": "Delete batch of 32 vlan pop actions",
|
||||
"category": [
|
||||
"actions",
|
||||
"vlan"
|
||||
],
|
||||
"setup": [
|
||||
[
|
||||
"$TC actions flush action vlan",
|
||||
0,
|
||||
1,
|
||||
255
|
||||
],
|
||||
"bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action vlan pop index \\$i \\\"; args=\\\"\\$args\\$cmd\\\"; done && $TC actions add \\$args\""
|
||||
],
|
||||
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action vlan index \\$i \\\"; args=\"\\$args\\$cmd\"; done && $TC actions del \\$args\"",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC actions list action vlan",
|
||||
"matchPattern": "^[ \t]+index [0-9]+ ref",
|
||||
"matchCount": "0",
|
||||
"teardown": []
|
||||
}
|
||||
]
|
||||
|
@@ -451,7 +451,7 @@ static int test_vsys_x(void)
|
||||
printf("[OK]\tExecuting the vsyscall page failed: #PF(0x%lx)\n",
|
||||
segv_err);
|
||||
} else {
|
||||
printf("[FAILT]\tExecution failed with the wrong error: #PF(0x%lx)\n",
|
||||
printf("[FAIL]\tExecution failed with the wrong error: #PF(0x%lx)\n",
|
||||
segv_err);
|
||||
return 1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user