Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from David Miller: 1) Several nf_flow_table_offload fixes from Pablo Neira Ayuso, including adding a missing ipv6 match description. 2) Several heap overflow fixes in mwifiex from qize wang and Ganapathi Bhat. 3) Fix uninit value in bond_neigh_init(), from Eric Dumazet. 4) Fix non-ACPI probing of nxp-nci, from Stephan Gerhold. 5) Fix use after free in tipc_disc_rcv(), from Tuong Lien. 6) Enforce limit of 33 tail calls in mips and riscv JIT, from Paul Chaignon. 7) Multicast MAC limit test is off by one in qede, from Manish Chopra. 8) Fix established socket lookup race when socket goes from TCP_ESTABLISHED to TCP_LISTEN, because there lacks an intervening RCU grace period. From Eric Dumazet. 9) Don't send empty SKBs from tcp_write_xmit(), also from Eric Dumazet. 10) Fix active backup transition after link failure in bonding, from Mahesh Bandewar. 11) Avoid zero sized hash table in gtp driver, from Taehee Yoo. 12) Fix wrong interface passed to ->mac_link_up(), from Russell King. 13) Fix DSA egress flooding settings in b53, from Florian Fainelli. 14) Memory leak in gmac_setup_txqs(), from Navid Emamdoost. 15) Fix double free in dpaa2-ptp code, from Ioana Ciornei. 16) Reject invalid MTU values in stmmac, from Jose Abreu. 17) Fix refcount leak in error path of u32 classifier, from Davide Caratti. 18) Fix regression causing iwlwifi firmware crashes on boot, from Anders Kaseorg. 19) Fix inverted return value logic in llc2 code, from Chan Shu Tak. 20) Disable hardware GRO when XDP is attached to qede, frm Manish Chopra. 21) Since we encode state in the low pointer bits, dst metrics must be at least 4 byte aligned, which is not necessarily true on m68k. Add annotations to fix this, from Geert Uytterhoeven. * git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (160 commits) sfc: Include XDP packet headroom in buffer step size. sfc: fix channel allocation with brute force net: dst: Force 4-byte alignment of dst_metrics selftests: pmtu: fix init mtu value in description hv_netvsc: Fix unwanted rx_table reset net: phy: ensure that phy IDs are correctly typed mod_devicetable: fix PHY module format qede: Disable hardware gro when xdp prog is installed net: ena: fix issues in setting interrupt moderation params in ethtool net: ena: fix default tx interrupt moderation interval net/smc: unregister ib devices in reboot_event net: stmmac: platform: Fix MDIO init for platforms without PHY llc2: Fix return statement of llc_stat_ev_rx_null_dsap_xid_c (and _test_c) net: hisilicon: Fix a BUG trigered by wrong bytes_compl net: dsa: ksz: use common define for tag len s390/qeth: don't return -ENOTSUPP to userspace s390/qeth: fix promiscuous mode after reset s390/qeth: handle error due to unsupported transport mode cxgb4: fix refcount init for TC-MQPRIO offload tc-testing: initial tdc selftests for cls_u32 ...
This commit is contained in:
39
tools/testing/selftests/bpf/test_ftrace.sh
Executable file
39
tools/testing/selftests/bpf/test_ftrace.sh
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
|
||||
TR=/sys/kernel/debug/tracing/
|
||||
clear_trace() { # reset trace output
|
||||
echo > $TR/trace
|
||||
}
|
||||
|
||||
disable_tracing() { # stop trace recording
|
||||
echo 0 > $TR/tracing_on
|
||||
}
|
||||
|
||||
enable_tracing() { # start trace recording
|
||||
echo 1 > $TR/tracing_on
|
||||
}
|
||||
|
||||
reset_tracer() { # reset the current tracer
|
||||
echo nop > $TR/current_tracer
|
||||
}
|
||||
|
||||
disable_tracing
|
||||
clear_trace
|
||||
|
||||
echo "" > $TR/set_ftrace_filter
|
||||
echo '*printk* *console* *wake* *serial* *lock*' > $TR/set_ftrace_notrace
|
||||
|
||||
echo "bpf_prog_test*" > $TR/set_graph_function
|
||||
echo "" > $TR/set_graph_notrace
|
||||
|
||||
echo function_graph > $TR/current_tracer
|
||||
|
||||
enable_tracing
|
||||
./test_progs -t fentry
|
||||
./test_progs -t fexit
|
||||
disable_tracing
|
||||
clear_trace
|
||||
|
||||
reset_tracer
|
||||
|
||||
exit 0
|
@@ -408,10 +408,10 @@ static void update_map(int fd, int index)
|
||||
assert(!bpf_map_update_elem(fd, &index, &value, 0));
|
||||
}
|
||||
|
||||
static int create_prog_dummy1(enum bpf_prog_type prog_type)
|
||||
static int create_prog_dummy_simple(enum bpf_prog_type prog_type, int ret)
|
||||
{
|
||||
struct bpf_insn prog[] = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 42),
|
||||
BPF_MOV64_IMM(BPF_REG_0, ret),
|
||||
BPF_EXIT_INSN(),
|
||||
};
|
||||
|
||||
@@ -419,14 +419,15 @@ static int create_prog_dummy1(enum bpf_prog_type prog_type)
|
||||
ARRAY_SIZE(prog), "GPL", 0, NULL, 0);
|
||||
}
|
||||
|
||||
static int create_prog_dummy2(enum bpf_prog_type prog_type, int mfd, int idx)
|
||||
static int create_prog_dummy_loop(enum bpf_prog_type prog_type, int mfd,
|
||||
int idx, int ret)
|
||||
{
|
||||
struct bpf_insn prog[] = {
|
||||
BPF_MOV64_IMM(BPF_REG_3, idx),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, mfd),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0,
|
||||
BPF_FUNC_tail_call),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 41),
|
||||
BPF_MOV64_IMM(BPF_REG_0, ret),
|
||||
BPF_EXIT_INSN(),
|
||||
};
|
||||
|
||||
@@ -435,10 +436,9 @@ static int create_prog_dummy2(enum bpf_prog_type prog_type, int mfd, int idx)
|
||||
}
|
||||
|
||||
static int create_prog_array(enum bpf_prog_type prog_type, uint32_t max_elem,
|
||||
int p1key)
|
||||
int p1key, int p2key, int p3key)
|
||||
{
|
||||
int p2key = 1;
|
||||
int mfd, p1fd, p2fd;
|
||||
int mfd, p1fd, p2fd, p3fd;
|
||||
|
||||
mfd = bpf_create_map(BPF_MAP_TYPE_PROG_ARRAY, sizeof(int),
|
||||
sizeof(int), max_elem, 0);
|
||||
@@ -449,23 +449,24 @@ static int create_prog_array(enum bpf_prog_type prog_type, uint32_t max_elem,
|
||||
return -1;
|
||||
}
|
||||
|
||||
p1fd = create_prog_dummy1(prog_type);
|
||||
p2fd = create_prog_dummy2(prog_type, mfd, p2key);
|
||||
if (p1fd < 0 || p2fd < 0)
|
||||
goto out;
|
||||
p1fd = create_prog_dummy_simple(prog_type, 42);
|
||||
p2fd = create_prog_dummy_loop(prog_type, mfd, p2key, 41);
|
||||
p3fd = create_prog_dummy_simple(prog_type, 24);
|
||||
if (p1fd < 0 || p2fd < 0 || p3fd < 0)
|
||||
goto err;
|
||||
if (bpf_map_update_elem(mfd, &p1key, &p1fd, BPF_ANY) < 0)
|
||||
goto out;
|
||||
goto err;
|
||||
if (bpf_map_update_elem(mfd, &p2key, &p2fd, BPF_ANY) < 0)
|
||||
goto out;
|
||||
goto err;
|
||||
if (bpf_map_update_elem(mfd, &p3key, &p3fd, BPF_ANY) < 0) {
|
||||
err:
|
||||
close(mfd);
|
||||
mfd = -1;
|
||||
}
|
||||
close(p3fd);
|
||||
close(p2fd);
|
||||
close(p1fd);
|
||||
|
||||
return mfd;
|
||||
out:
|
||||
close(p2fd);
|
||||
close(p1fd);
|
||||
close(mfd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int create_map_in_map(void)
|
||||
@@ -684,7 +685,7 @@ static void do_test_fixup(struct bpf_test *test, enum bpf_prog_type prog_type,
|
||||
}
|
||||
|
||||
if (*fixup_prog1) {
|
||||
map_fds[4] = create_prog_array(prog_type, 4, 0);
|
||||
map_fds[4] = create_prog_array(prog_type, 4, 0, 1, 2);
|
||||
do {
|
||||
prog[*fixup_prog1].imm = map_fds[4];
|
||||
fixup_prog1++;
|
||||
@@ -692,7 +693,7 @@ static void do_test_fixup(struct bpf_test *test, enum bpf_prog_type prog_type,
|
||||
}
|
||||
|
||||
if (*fixup_prog2) {
|
||||
map_fds[5] = create_prog_array(prog_type, 8, 7);
|
||||
map_fds[5] = create_prog_array(prog_type, 8, 7, 1, 2);
|
||||
do {
|
||||
prog[*fixup_prog2].imm = map_fds[5];
|
||||
fixup_prog2++;
|
||||
|
@@ -455,7 +455,7 @@
|
||||
BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
|
||||
BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 7),
|
||||
/* bpf_tail_call() */
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 3),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
@@ -478,7 +478,7 @@
|
||||
BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 1),
|
||||
BPF_EMIT_CALL(BPF_FUNC_sk_release),
|
||||
/* bpf_tail_call() */
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 3),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
@@ -497,7 +497,7 @@
|
||||
BPF_SK_LOOKUP(sk_lookup_tcp),
|
||||
/* bpf_tail_call() */
|
||||
BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 3),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
|
@@ -27,7 +27,7 @@
|
||||
{
|
||||
"runtime/jit: tail_call within bounds, no prog",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 3),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 1),
|
||||
@@ -37,6 +37,157 @@
|
||||
.result = ACCEPT,
|
||||
.retval = 1,
|
||||
},
|
||||
{
|
||||
"runtime/jit: tail_call within bounds, key 2",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.fixup_prog1 = { 1 },
|
||||
.result = ACCEPT,
|
||||
.retval = 24,
|
||||
},
|
||||
{
|
||||
"runtime/jit: tail_call within bounds, key 2 / key 2, first branch",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 13),
|
||||
BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 13, 4),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_JMP_IMM(BPF_JA, 0, 0, 3),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.fixup_prog1 = { 5, 9 },
|
||||
.result = ACCEPT,
|
||||
.retval = 24,
|
||||
},
|
||||
{
|
||||
"runtime/jit: tail_call within bounds, key 2 / key 2, second branch",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 14),
|
||||
BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 13, 4),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_JMP_IMM(BPF_JA, 0, 0, 3),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.fixup_prog1 = { 5, 9 },
|
||||
.result = ACCEPT,
|
||||
.retval = 24,
|
||||
},
|
||||
{
|
||||
"runtime/jit: tail_call within bounds, key 0 / key 2, first branch",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 13),
|
||||
BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 13, 4),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 0),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_JMP_IMM(BPF_JA, 0, 0, 3),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.fixup_prog1 = { 5, 9 },
|
||||
.result = ACCEPT,
|
||||
.retval = 24,
|
||||
},
|
||||
{
|
||||
"runtime/jit: tail_call within bounds, key 0 / key 2, second branch",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 14),
|
||||
BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 13, 4),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 0),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_JMP_IMM(BPF_JA, 0, 0, 3),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 2),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.fixup_prog1 = { 5, 9 },
|
||||
.result = ACCEPT,
|
||||
.retval = 42,
|
||||
},
|
||||
{
|
||||
"runtime/jit: tail_call within bounds, different maps, first branch",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 13),
|
||||
BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 13, 4),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 0),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_JMP_IMM(BPF_JA, 0, 0, 3),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 0),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.fixup_prog1 = { 5 },
|
||||
.fixup_prog2 = { 9 },
|
||||
.result_unpriv = REJECT,
|
||||
.errstr_unpriv = "tail_call abusing map_ptr",
|
||||
.result = ACCEPT,
|
||||
.retval = 1,
|
||||
},
|
||||
{
|
||||
"runtime/jit: tail_call within bounds, different maps, second branch",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 14),
|
||||
BPF_STX_MEM(BPF_B, BPF_REG_1, BPF_REG_0,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
|
||||
offsetof(struct __sk_buff, cb[0])),
|
||||
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 13, 4),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 0),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_JMP_IMM(BPF_JA, 0, 0, 3),
|
||||
BPF_MOV64_IMM(BPF_REG_3, 0),
|
||||
BPF_LD_MAP_FD(BPF_REG_2, 0),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_tail_call),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.fixup_prog1 = { 5 },
|
||||
.fixup_prog2 = { 9 },
|
||||
.result_unpriv = REJECT,
|
||||
.errstr_unpriv = "tail_call abusing map_ptr",
|
||||
.result = ACCEPT,
|
||||
.retval = 42,
|
||||
},
|
||||
{
|
||||
"runtime/jit: tail_call out of bounds",
|
||||
.insns = {
|
||||
|
@@ -36,7 +36,7 @@ h2_destroy()
|
||||
{
|
||||
ip -6 route del 2001:db8:1::/64 vrf v$h2
|
||||
ip -4 route del 192.0.2.0/28 vrf v$h2
|
||||
simple_if_fini $h2 192.0.2.130/28
|
||||
simple_if_fini $h2 192.0.2.130/28 2001:db8:2::2/64
|
||||
}
|
||||
|
||||
router_create()
|
||||
|
@@ -11,9 +11,9 @@
|
||||
# R1 and R2 (also implemented with namespaces), with different MTUs:
|
||||
#
|
||||
# segment a_r1 segment b_r1 a_r1: 2000
|
||||
# .--------------R1--------------. a_r2: 1500
|
||||
# A B a_r3: 2000
|
||||
# '--------------R2--------------' a_r4: 1400
|
||||
# .--------------R1--------------. b_r1: 1400
|
||||
# A B a_r2: 2000
|
||||
# '--------------R2--------------' b_r2: 1500
|
||||
# segment a_r2 segment b_r2
|
||||
#
|
||||
# Check that PMTU exceptions with the correct PMTU are created. Then
|
||||
|
@@ -722,34 +722,6 @@ TEST_F(tls, recv_lowat)
|
||||
EXPECT_EQ(memcmp(send_mem, recv_mem + 10, 5), 0);
|
||||
}
|
||||
|
||||
TEST_F(tls, recv_rcvbuf)
|
||||
{
|
||||
char send_mem[4096];
|
||||
char recv_mem[4096];
|
||||
int rcv_buf = 1024;
|
||||
|
||||
memset(send_mem, 0x1c, sizeof(send_mem));
|
||||
|
||||
EXPECT_EQ(setsockopt(self->cfd, SOL_SOCKET, SO_RCVBUF,
|
||||
&rcv_buf, sizeof(rcv_buf)), 0);
|
||||
|
||||
EXPECT_EQ(send(self->fd, send_mem, 512, 0), 512);
|
||||
memset(recv_mem, 0, sizeof(recv_mem));
|
||||
EXPECT_EQ(recv(self->cfd, recv_mem, sizeof(recv_mem), 0), 512);
|
||||
EXPECT_EQ(memcmp(send_mem, recv_mem, 512), 0);
|
||||
|
||||
if (self->notls)
|
||||
return;
|
||||
|
||||
EXPECT_EQ(send(self->fd, send_mem, 4096, 0), 4096);
|
||||
memset(recv_mem, 0, sizeof(recv_mem));
|
||||
EXPECT_EQ(recv(self->cfd, recv_mem, sizeof(recv_mem), 0), -1);
|
||||
EXPECT_EQ(errno, EMSGSIZE);
|
||||
|
||||
EXPECT_EQ(recv(self->cfd, recv_mem, sizeof(recv_mem), 0), -1);
|
||||
EXPECT_EQ(errno, EMSGSIZE);
|
||||
}
|
||||
|
||||
TEST_F(tls, bidir)
|
||||
{
|
||||
char const *test_str = "test_read";
|
||||
|
@@ -8,9 +8,14 @@ ksft_skip=4
|
||||
ret=0
|
||||
test_inet_nat=true
|
||||
|
||||
sfx=$(mktemp -u "XXXXXXXX")
|
||||
ns0="ns0-$sfx"
|
||||
ns1="ns1-$sfx"
|
||||
ns2="ns2-$sfx"
|
||||
|
||||
cleanup()
|
||||
{
|
||||
for i in 0 1 2; do ip netns del ns$i;done
|
||||
for i in 0 1 2; do ip netns del ns$i-"$sfx";done
|
||||
}
|
||||
|
||||
nft --version > /dev/null 2>&1
|
||||
@@ -25,40 +30,49 @@ if [ $? -ne 0 ];then
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
ip netns add ns0
|
||||
ip netns add "$ns0"
|
||||
if [ $? -ne 0 ];then
|
||||
echo "SKIP: Could not create net namespace"
|
||||
echo "SKIP: Could not create net namespace $ns0"
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
ip netns add ns1
|
||||
ip netns add ns2
|
||||
ip netns add "$ns1"
|
||||
if [ $? -ne 0 ];then
|
||||
echo "SKIP: Could not create net namespace $ns1"
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
ip link add veth0 netns ns0 type veth peer name eth0 netns ns1 > /dev/null 2>&1
|
||||
ip netns add "$ns2"
|
||||
if [ $? -ne 0 ];then
|
||||
echo "SKIP: Could not create net namespace $ns2"
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
ip link add veth0 netns "$ns0" type veth peer name eth0 netns "$ns1" > /dev/null 2>&1
|
||||
if [ $? -ne 0 ];then
|
||||
echo "SKIP: No virtual ethernet pair device support in kernel"
|
||||
exit $ksft_skip
|
||||
fi
|
||||
ip link add veth1 netns ns0 type veth peer name eth0 netns ns2
|
||||
ip link add veth1 netns "$ns0" type veth peer name eth0 netns "$ns2"
|
||||
|
||||
ip -net ns0 link set lo up
|
||||
ip -net ns0 link set veth0 up
|
||||
ip -net ns0 addr add 10.0.1.1/24 dev veth0
|
||||
ip -net ns0 addr add dead:1::1/64 dev veth0
|
||||
ip -net "$ns0" link set lo up
|
||||
ip -net "$ns0" link set veth0 up
|
||||
ip -net "$ns0" addr add 10.0.1.1/24 dev veth0
|
||||
ip -net "$ns0" addr add dead:1::1/64 dev veth0
|
||||
|
||||
ip -net ns0 link set veth1 up
|
||||
ip -net ns0 addr add 10.0.2.1/24 dev veth1
|
||||
ip -net ns0 addr add dead:2::1/64 dev veth1
|
||||
ip -net "$ns0" link set veth1 up
|
||||
ip -net "$ns0" addr add 10.0.2.1/24 dev veth1
|
||||
ip -net "$ns0" addr add dead:2::1/64 dev veth1
|
||||
|
||||
for i in 1 2; do
|
||||
ip -net ns$i link set lo up
|
||||
ip -net ns$i link set eth0 up
|
||||
ip -net ns$i addr add 10.0.$i.99/24 dev eth0
|
||||
ip -net ns$i route add default via 10.0.$i.1
|
||||
ip -net ns$i addr add dead:$i::99/64 dev eth0
|
||||
ip -net ns$i route add default via dead:$i::1
|
||||
ip -net ns$i-$sfx link set lo up
|
||||
ip -net ns$i-$sfx link set eth0 up
|
||||
ip -net ns$i-$sfx addr add 10.0.$i.99/24 dev eth0
|
||||
ip -net ns$i-$sfx route add default via 10.0.$i.1
|
||||
ip -net ns$i-$sfx addr add dead:$i::99/64 dev eth0
|
||||
ip -net ns$i-$sfx route add default via dead:$i::1
|
||||
done
|
||||
|
||||
bad_counter()
|
||||
@@ -66,8 +80,9 @@ bad_counter()
|
||||
local ns=$1
|
||||
local counter=$2
|
||||
local expect=$3
|
||||
local tag=$4
|
||||
|
||||
echo "ERROR: $counter counter in $ns has unexpected value (expected $expect)" 1>&2
|
||||
echo "ERROR: $counter counter in $ns has unexpected value (expected $expect) at $tag" 1>&2
|
||||
ip netns exec $ns nft list counter inet filter $counter 1>&2
|
||||
}
|
||||
|
||||
@@ -78,24 +93,24 @@ check_counters()
|
||||
|
||||
cnt=$(ip netns exec $ns nft list counter inet filter ns0in | grep -q "packets 1 bytes 84")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter $ns ns0in "packets 1 bytes 84"
|
||||
bad_counter $ns ns0in "packets 1 bytes 84" "check_counters 1"
|
||||
lret=1
|
||||
fi
|
||||
cnt=$(ip netns exec $ns nft list counter inet filter ns0out | grep -q "packets 1 bytes 84")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter $ns ns0out "packets 1 bytes 84"
|
||||
bad_counter $ns ns0out "packets 1 bytes 84" "check_counters 2"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
expect="packets 1 bytes 104"
|
||||
cnt=$(ip netns exec $ns nft list counter inet filter ns0in6 | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter $ns ns0in6 "$expect"
|
||||
bad_counter $ns ns0in6 "$expect" "check_counters 3"
|
||||
lret=1
|
||||
fi
|
||||
cnt=$(ip netns exec $ns nft list counter inet filter ns0out6 | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter $ns ns0out6 "$expect"
|
||||
bad_counter $ns ns0out6 "$expect" "check_counters 4"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
@@ -107,41 +122,41 @@ check_ns0_counters()
|
||||
local ns=$1
|
||||
local lret=0
|
||||
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns0in | grep -q "packets 0 bytes 0")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns0in | grep -q "packets 0 bytes 0")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns0in "packets 0 bytes 0"
|
||||
bad_counter "$ns0" ns0in "packets 0 bytes 0" "check_ns0_counters 1"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns0in6 | grep -q "packets 0 bytes 0")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns0in6 | grep -q "packets 0 bytes 0")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns0in6 "packets 0 bytes 0"
|
||||
bad_counter "$ns0" ns0in6 "packets 0 bytes 0"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns0out | grep -q "packets 0 bytes 0")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns0out | grep -q "packets 0 bytes 0")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns0out "packets 0 bytes 0"
|
||||
bad_counter "$ns0" ns0out "packets 0 bytes 0" "check_ns0_counters 2"
|
||||
lret=1
|
||||
fi
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns0out6 | grep -q "packets 0 bytes 0")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns0out6 | grep -q "packets 0 bytes 0")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns0out6 "packets 0 bytes 0"
|
||||
bad_counter "$ns0" ns0out6 "packets 0 bytes 0" "check_ns0_counters3 "
|
||||
lret=1
|
||||
fi
|
||||
|
||||
for dir in "in" "out" ; do
|
||||
expect="packets 1 bytes 84"
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ${ns}${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ${ns}${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 $ns$dir "$expect"
|
||||
bad_counter "$ns0" $ns$dir "$expect" "check_ns0_counters 4"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
expect="packets 1 bytes 104"
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ${ns}${dir}6 | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ${ns}${dir}6 | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 $ns$dir6 "$expect"
|
||||
bad_counter "$ns0" $ns$dir6 "$expect" "check_ns0_counters 5"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -152,7 +167,7 @@ check_ns0_counters()
|
||||
reset_counters()
|
||||
{
|
||||
for i in 0 1 2;do
|
||||
ip netns exec ns$i nft reset counters inet > /dev/null
|
||||
ip netns exec ns$i-$sfx nft reset counters inet > /dev/null
|
||||
done
|
||||
}
|
||||
|
||||
@@ -166,7 +181,7 @@ test_local_dnat6()
|
||||
IPF="ip6"
|
||||
fi
|
||||
|
||||
ip netns exec ns0 nft -f - <<EOF
|
||||
ip netns exec "$ns0" nft -f /dev/stdin <<EOF
|
||||
table $family nat {
|
||||
chain output {
|
||||
type nat hook output priority 0; policy accept;
|
||||
@@ -180,7 +195,7 @@ EOF
|
||||
fi
|
||||
|
||||
# ping netns1, expect rewrite to netns2
|
||||
ip netns exec ns0 ping -q -c 1 dead:1::99 > /dev/null
|
||||
ip netns exec "$ns0" ping -q -c 1 dead:1::99 > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
lret=1
|
||||
echo "ERROR: ping6 failed"
|
||||
@@ -189,18 +204,18 @@ EOF
|
||||
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns1$dir "$expect"
|
||||
bad_counter "$ns0" ns1$dir "$expect" "test_local_dnat6 1"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
|
||||
expect="packets 1 bytes 104"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns2$dir "$expect"
|
||||
bad_counter "$ns0" ns2$dir "$expect" "test_local_dnat6 2"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -208,9 +223,9 @@ EOF
|
||||
# expect 0 count in ns1
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns1" ns0$dir "$expect" "test_local_dnat6 3"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -218,15 +233,15 @@ EOF
|
||||
# expect 1 packet in ns2
|
||||
expect="packets 1 bytes 104"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns2 nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns2" nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns0$dir "$expect"
|
||||
bad_counter "$ns2" ns0$dir "$expect" "test_local_dnat6 4"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
|
||||
test $lret -eq 0 && echo "PASS: ipv6 ping to ns1 was $family NATted to ns2"
|
||||
ip netns exec ns0 nft flush chain ip6 nat output
|
||||
test $lret -eq 0 && echo "PASS: ipv6 ping to $ns1 was $family NATted to $ns2"
|
||||
ip netns exec "$ns0" nft flush chain ip6 nat output
|
||||
|
||||
return $lret
|
||||
}
|
||||
@@ -241,7 +256,7 @@ test_local_dnat()
|
||||
IPF="ip"
|
||||
fi
|
||||
|
||||
ip netns exec ns0 nft -f - <<EOF 2>/dev/null
|
||||
ip netns exec "$ns0" nft -f /dev/stdin <<EOF 2>/dev/null
|
||||
table $family nat {
|
||||
chain output {
|
||||
type nat hook output priority 0; policy accept;
|
||||
@@ -260,7 +275,7 @@ EOF
|
||||
fi
|
||||
|
||||
# ping netns1, expect rewrite to netns2
|
||||
ip netns exec ns0 ping -q -c 1 10.0.1.99 > /dev/null
|
||||
ip netns exec "$ns0" ping -q -c 1 10.0.1.99 > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
lret=1
|
||||
echo "ERROR: ping failed"
|
||||
@@ -269,18 +284,18 @@ EOF
|
||||
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns1$dir "$expect"
|
||||
bad_counter "$ns0" ns1$dir "$expect" "test_local_dnat 1"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
|
||||
expect="packets 1 bytes 84"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns2$dir "$expect"
|
||||
bad_counter "$ns0" ns2$dir "$expect" "test_local_dnat 2"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -288,9 +303,9 @@ EOF
|
||||
# expect 0 count in ns1
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns1" ns0$dir "$expect" "test_local_dnat 3"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -298,19 +313,19 @@ EOF
|
||||
# expect 1 packet in ns2
|
||||
expect="packets 1 bytes 84"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns2 nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns2" nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns0$dir "$expect"
|
||||
bad_counter "$ns2" ns0$dir "$expect" "test_local_dnat 4"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
|
||||
test $lret -eq 0 && echo "PASS: ping to ns1 was $family NATted to ns2"
|
||||
test $lret -eq 0 && echo "PASS: ping to $ns1 was $family NATted to $ns2"
|
||||
|
||||
ip netns exec ns0 nft flush chain $family nat output
|
||||
ip netns exec "$ns0" nft flush chain $family nat output
|
||||
|
||||
reset_counters
|
||||
ip netns exec ns0 ping -q -c 1 10.0.1.99 > /dev/null
|
||||
ip netns exec "$ns0" ping -q -c 1 10.0.1.99 > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
lret=1
|
||||
echo "ERROR: ping failed"
|
||||
@@ -319,17 +334,17 @@ EOF
|
||||
|
||||
expect="packets 1 bytes 84"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns1$dir "$expect"
|
||||
bad_counter "$ns1" ns1$dir "$expect" "test_local_dnat 5"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns2$dir "$expect"
|
||||
bad_counter "$ns0" ns2$dir "$expect" "test_local_dnat 6"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -337,9 +352,9 @@ EOF
|
||||
# expect 1 count in ns1
|
||||
expect="packets 1 bytes 84"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns0 ns0$dir "$expect"
|
||||
bad_counter "$ns0" ns0$dir "$expect" "test_local_dnat 7"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -347,14 +362,14 @@ EOF
|
||||
# expect 0 packet in ns2
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns2 nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns2" nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns2$dir "$expect"
|
||||
bad_counter "$ns2" ns0$dir "$expect" "test_local_dnat 8"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
|
||||
test $lret -eq 0 && echo "PASS: ping to ns1 OK after $family nat output chain flush"
|
||||
test $lret -eq 0 && echo "PASS: ping to $ns1 OK after $family nat output chain flush"
|
||||
|
||||
return $lret
|
||||
}
|
||||
@@ -366,26 +381,26 @@ test_masquerade6()
|
||||
local natflags=$2
|
||||
local lret=0
|
||||
|
||||
ip netns exec ns0 sysctl net.ipv6.conf.all.forwarding=1 > /dev/null
|
||||
ip netns exec "$ns0" sysctl net.ipv6.conf.all.forwarding=1 > /dev/null
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannot ping ns1 from ns2 via ipv6"
|
||||
echo "ERROR: cannot ping $ns1 from $ns2 via ipv6"
|
||||
return 1
|
||||
lret=1
|
||||
fi
|
||||
|
||||
expect="packets 1 bytes 104"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns2$dir "$expect"
|
||||
bad_counter "$ns1" ns2$dir "$expect" "test_masquerade6 1"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns2 nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns2" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns1$dir "$expect"
|
||||
bad_counter "$ns2" ns1$dir "$expect" "test_masquerade6 2"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -393,7 +408,7 @@ test_masquerade6()
|
||||
reset_counters
|
||||
|
||||
# add masquerading rule
|
||||
ip netns exec ns0 nft -f - <<EOF
|
||||
ip netns exec "$ns0" nft -f /dev/stdin <<EOF
|
||||
table $family nat {
|
||||
chain postrouting {
|
||||
type nat hook postrouting priority 0; policy accept;
|
||||
@@ -406,24 +421,24 @@ EOF
|
||||
return $ksft_skip
|
||||
fi
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannot ping ns1 from ns2 with active $family masquerade $natflags"
|
||||
echo "ERROR: cannot ping $ns1 from $ns2 with active $family masquerade $natflags"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
# ns1 should have seen packets from ns0, due to masquerade
|
||||
expect="packets 1 bytes 104"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns1" ns0$dir "$expect" "test_masquerade6 3"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns2 nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns2" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns1$dir "$expect"
|
||||
bad_counter "$ns2" ns1$dir "$expect" "test_masquerade6 4"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -431,32 +446,32 @@ EOF
|
||||
# ns1 should not have seen packets from ns2, due to masquerade
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns1" ns0$dir "$expect" "test_masquerade6 5"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns1$dir "$expect"
|
||||
bad_counter "$ns0" ns1$dir "$expect" "test_masquerade6 6"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannot ping ns1 from ns2 with active ipv6 masquerade $natflags (attempt 2)"
|
||||
echo "ERROR: cannot ping $ns1 from $ns2 with active ipv6 masquerade $natflags (attempt 2)"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
ip netns exec ns0 nft flush chain $family nat postrouting
|
||||
ip netns exec "$ns0" nft flush chain $family nat postrouting
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: Could not flush $family nat postrouting" 1>&2
|
||||
lret=1
|
||||
fi
|
||||
|
||||
test $lret -eq 0 && echo "PASS: $family IPv6 masquerade $natflags for ns2"
|
||||
test $lret -eq 0 && echo "PASS: $family IPv6 masquerade $natflags for $ns2"
|
||||
|
||||
return $lret
|
||||
}
|
||||
@@ -467,26 +482,26 @@ test_masquerade()
|
||||
local natflags=$2
|
||||
local lret=0
|
||||
|
||||
ip netns exec ns0 sysctl net.ipv4.conf.veth0.forwarding=1 > /dev/null
|
||||
ip netns exec ns0 sysctl net.ipv4.conf.veth1.forwarding=1 > /dev/null
|
||||
ip netns exec "$ns0" sysctl net.ipv4.conf.veth0.forwarding=1 > /dev/null
|
||||
ip netns exec "$ns0" sysctl net.ipv4.conf.veth1.forwarding=1 > /dev/null
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannot ping ns1 from ns2 $natflags"
|
||||
echo "ERROR: cannot ping $ns1 from "$ns2" $natflags"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
expect="packets 1 bytes 84"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns2$dir "$expect"
|
||||
bad_counter "$ns1" ns2$dir "$expect" "test_masquerade 1"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns2 nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns2" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns1$dir "$expect"
|
||||
bad_counter "$ns2" ns1$dir "$expect" "test_masquerade 2"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -494,7 +509,7 @@ test_masquerade()
|
||||
reset_counters
|
||||
|
||||
# add masquerading rule
|
||||
ip netns exec ns0 nft -f - <<EOF
|
||||
ip netns exec "$ns0" nft -f /dev/stdin <<EOF
|
||||
table $family nat {
|
||||
chain postrouting {
|
||||
type nat hook postrouting priority 0; policy accept;
|
||||
@@ -507,24 +522,24 @@ EOF
|
||||
return $ksft_skip
|
||||
fi
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannot ping ns1 from ns2 with active $family masquerade $natflags"
|
||||
echo "ERROR: cannot ping $ns1 from $ns2 with active $family masquerade $natflags"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
# ns1 should have seen packets from ns0, due to masquerade
|
||||
expect="packets 1 bytes 84"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns0${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns1" ns0$dir "$expect" "test_masquerade 3"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns2 nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns2" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns1$dir "$expect"
|
||||
bad_counter "$ns2" ns1$dir "$expect" "test_masquerade 4"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -532,32 +547,32 @@ EOF
|
||||
# ns1 should not have seen packets from ns2, due to masquerade
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns1" ns0$dir "$expect" "test_masquerade 5"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns1$dir "$expect"
|
||||
bad_counter "$ns0" ns1$dir "$expect" "test_masquerade 6"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannot ping ns1 from ns2 with active ip masquerade $natflags (attempt 2)"
|
||||
echo "ERROR: cannot ping $ns1 from $ns2 with active ip masquerade $natflags (attempt 2)"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
ip netns exec ns0 nft flush chain $family nat postrouting
|
||||
ip netns exec "$ns0" nft flush chain $family nat postrouting
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: Could not flush $family nat postrouting" 1>&2
|
||||
lret=1
|
||||
fi
|
||||
|
||||
test $lret -eq 0 && echo "PASS: $family IP masquerade $natflags for ns2"
|
||||
test $lret -eq 0 && echo "PASS: $family IP masquerade $natflags for $ns2"
|
||||
|
||||
return $lret
|
||||
}
|
||||
@@ -567,25 +582,25 @@ test_redirect6()
|
||||
local family=$1
|
||||
local lret=0
|
||||
|
||||
ip netns exec ns0 sysctl net.ipv6.conf.all.forwarding=1 > /dev/null
|
||||
ip netns exec "$ns0" sysctl net.ipv6.conf.all.forwarding=1 > /dev/null
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannnot ping ns1 from ns2 via ipv6"
|
||||
echo "ERROR: cannnot ping $ns1 from $ns2 via ipv6"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
expect="packets 1 bytes 104"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns2$dir "$expect"
|
||||
bad_counter "$ns1" ns2$dir "$expect" "test_redirect6 1"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns2 nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns2" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns1$dir "$expect"
|
||||
bad_counter "$ns2" ns1$dir "$expect" "test_redirect6 2"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -593,7 +608,7 @@ test_redirect6()
|
||||
reset_counters
|
||||
|
||||
# add redirect rule
|
||||
ip netns exec ns0 nft -f - <<EOF
|
||||
ip netns exec "$ns0" nft -f /dev/stdin <<EOF
|
||||
table $family nat {
|
||||
chain prerouting {
|
||||
type nat hook prerouting priority 0; policy accept;
|
||||
@@ -606,18 +621,18 @@ EOF
|
||||
return $ksft_skip
|
||||
fi
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 dead:1::99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannot ping ns1 from ns2 via ipv6 with active $family redirect"
|
||||
echo "ERROR: cannot ping $ns1 from $ns2 via ipv6 with active $family redirect"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
# ns1 should have seen no packets from ns2, due to redirection
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns1" ns0$dir "$expect" "test_redirect6 3"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -625,20 +640,20 @@ EOF
|
||||
# ns0 should have seen packets from ns2, due to masquerade
|
||||
expect="packets 1 bytes 104"
|
||||
for dir in "in6" "out6" ; do
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns1" ns0$dir "$expect" "test_redirect6 4"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
|
||||
ip netns exec ns0 nft delete table $family nat
|
||||
ip netns exec "$ns0" nft delete table $family nat
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: Could not delete $family nat table" 1>&2
|
||||
lret=1
|
||||
fi
|
||||
|
||||
test $lret -eq 0 && echo "PASS: $family IPv6 redirection for ns2"
|
||||
test $lret -eq 0 && echo "PASS: $family IPv6 redirection for $ns2"
|
||||
|
||||
return $lret
|
||||
}
|
||||
@@ -648,26 +663,26 @@ test_redirect()
|
||||
local family=$1
|
||||
local lret=0
|
||||
|
||||
ip netns exec ns0 sysctl net.ipv4.conf.veth0.forwarding=1 > /dev/null
|
||||
ip netns exec ns0 sysctl net.ipv4.conf.veth1.forwarding=1 > /dev/null
|
||||
ip netns exec "$ns0" sysctl net.ipv4.conf.veth0.forwarding=1 > /dev/null
|
||||
ip netns exec "$ns0" sysctl net.ipv4.conf.veth1.forwarding=1 > /dev/null
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannot ping ns1 from ns2"
|
||||
echo "ERROR: cannot ping $ns1 from $ns2"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
expect="packets 1 bytes 84"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns2$dir "$expect"
|
||||
bad_counter "$ns1" $ns2$dir "$expect" "test_redirect 1"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
cnt=$(ip netns exec ns2 nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns2" nft list counter inet filter ns1${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns2 ns1$dir "$expect"
|
||||
bad_counter "$ns2" ns1$dir "$expect" "test_redirect 2"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -675,7 +690,7 @@ test_redirect()
|
||||
reset_counters
|
||||
|
||||
# add redirect rule
|
||||
ip netns exec ns0 nft -f - <<EOF
|
||||
ip netns exec "$ns0" nft -f /dev/stdin <<EOF
|
||||
table $family nat {
|
||||
chain prerouting {
|
||||
type nat hook prerouting priority 0; policy accept;
|
||||
@@ -688,9 +703,9 @@ EOF
|
||||
return $ksft_skip
|
||||
fi
|
||||
|
||||
ip netns exec ns2 ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
ip netns exec "$ns2" ping -q -c 1 10.0.1.99 > /dev/null # ping ns2->ns1
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "ERROR: cannot ping ns1 from ns2 with active $family ip redirect"
|
||||
echo "ERROR: cannot ping $ns1 from $ns2 with active $family ip redirect"
|
||||
lret=1
|
||||
fi
|
||||
|
||||
@@ -698,9 +713,9 @@ EOF
|
||||
expect="packets 0 bytes 0"
|
||||
for dir in "in" "out" ; do
|
||||
|
||||
cnt=$(ip netns exec ns1 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns1" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns1" ns0$dir "$expect" "test_redirect 3"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
@@ -708,28 +723,28 @@ EOF
|
||||
# ns0 should have seen packets from ns2, due to masquerade
|
||||
expect="packets 1 bytes 84"
|
||||
for dir in "in" "out" ; do
|
||||
cnt=$(ip netns exec ns0 nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
cnt=$(ip netns exec "$ns0" nft list counter inet filter ns2${dir} | grep -q "$expect")
|
||||
if [ $? -ne 0 ]; then
|
||||
bad_counter ns1 ns0$dir "$expect"
|
||||
bad_counter "$ns0" ns0$dir "$expect" "test_redirect 4"
|
||||
lret=1
|
||||
fi
|
||||
done
|
||||
|
||||
ip netns exec ns0 nft delete table $family nat
|
||||
ip netns exec "$ns0" nft delete table $family nat
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: Could not delete $family nat table" 1>&2
|
||||
lret=1
|
||||
fi
|
||||
|
||||
test $lret -eq 0 && echo "PASS: $family IP redirection for ns2"
|
||||
test $lret -eq 0 && echo "PASS: $family IP redirection for $ns2"
|
||||
|
||||
return $lret
|
||||
}
|
||||
|
||||
|
||||
# ip netns exec ns0 ping -c 1 -q 10.0.$i.99
|
||||
# ip netns exec "$ns0" ping -c 1 -q 10.0.$i.99
|
||||
for i in 0 1 2; do
|
||||
ip netns exec ns$i nft -f - <<EOF
|
||||
ip netns exec ns$i-$sfx nft -f /dev/stdin <<EOF
|
||||
table inet filter {
|
||||
counter ns0in {}
|
||||
counter ns1in {}
|
||||
@@ -796,18 +811,18 @@ done
|
||||
sleep 3
|
||||
# test basic connectivity
|
||||
for i in 1 2; do
|
||||
ip netns exec ns0 ping -c 1 -q 10.0.$i.99 > /dev/null
|
||||
ip netns exec "$ns0" ping -c 1 -q 10.0.$i.99 > /dev/null
|
||||
if [ $? -ne 0 ];then
|
||||
echo "ERROR: Could not reach other namespace(s)" 1>&2
|
||||
ret=1
|
||||
fi
|
||||
|
||||
ip netns exec ns0 ping -c 1 -q dead:$i::99 > /dev/null
|
||||
ip netns exec "$ns0" ping -c 1 -q dead:$i::99 > /dev/null
|
||||
if [ $? -ne 0 ];then
|
||||
echo "ERROR: Could not reach other namespace(s) via ipv6" 1>&2
|
||||
ret=1
|
||||
fi
|
||||
check_counters ns$i
|
||||
check_counters ns$i-$sfx
|
||||
if [ $? -ne 0 ]; then
|
||||
ret=1
|
||||
fi
|
||||
@@ -820,7 +835,7 @@ for i in 1 2; do
|
||||
done
|
||||
|
||||
if [ $ret -eq 0 ];then
|
||||
echo "PASS: netns routing/connectivity: ns0 can reach ns1 and ns2"
|
||||
echo "PASS: netns routing/connectivity: $ns0 can reach $ns1 and $ns2"
|
||||
fi
|
||||
|
||||
reset_counters
|
||||
@@ -846,4 +861,9 @@ reset_counters
|
||||
$test_inet_nat && test_redirect inet
|
||||
$test_inet_nat && test_redirect6 inet
|
||||
|
||||
if [ $ret -ne 0 ];then
|
||||
echo -n "FAIL: "
|
||||
nft --version
|
||||
fi
|
||||
|
||||
exit $ret
|
||||
|
@@ -152,7 +152,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "6f5e",
|
||||
"id": "b99c",
|
||||
"name": "Add basic filter with cmp ematch u8/transport layer and default action",
|
||||
"category": [
|
||||
"filter",
|
||||
|
@@ -1,26 +1,4 @@
|
||||
[
|
||||
{
|
||||
"id": "e9a3",
|
||||
"name": "Add u32 with source match",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 1 u32 match ip src 127.0.0.1/32 flowid 1:1 action ok",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
|
||||
"matchPattern": "match 7f000001/ffffffff at 12",
|
||||
"matchCount": "1",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "2638",
|
||||
"name": "Add matchall and try to get it",
|
||||
|
205
tools/testing/selftests/tc-testing/tc-tests/filters/u32.json
Normal file
205
tools/testing/selftests/tc-testing/tc-tests/filters/u32.json
Normal file
@@ -0,0 +1,205 @@
|
||||
[
|
||||
{
|
||||
"id": "afa9",
|
||||
"name": "Add u32 with source match",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip src 127.0.0.1/32 flowid 1:1 action ok",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 ingress",
|
||||
"matchPattern": "filter protocol ip pref 1 u32 chain (0[ ]+$|0 fh 800: ht divisor 1|0 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1.*match 7f000001/ffffffff at 12)",
|
||||
"matchCount": "3",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "6aa7",
|
||||
"name": "Add/Replace u32 with source match and invalid indev",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter replace dev $DEV1 ingress protocol ip prio 1 u32 match ip src 127.0.0.1/32 indev notexist20 flowid 1:1 action ok",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 ingress",
|
||||
"matchPattern": "filter protocol ip pref 1 u32 chain 0",
|
||||
"matchCount": "0",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bc4d",
|
||||
"name": "Replace valid u32 with source match and invalid indev",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress",
|
||||
"$TC filter add dev $DEV1 ingress protocol ip prio 1 u32 match ip src 127.0.0.3/32 flowid 1:3 action ok"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter replace dev $DEV1 ingress protocol ip prio 1 u32 match ip src 127.0.0.2/32 indev notexist20 flowid 1:2 action ok",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 ingress",
|
||||
"matchPattern": "filter protocol ip pref 1 u32 chain (0[ ]+$|0 fh 800: ht divisor 1|0 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:3.*match 7f000003/ffffffff at 12)",
|
||||
"matchCount": "3",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "648b",
|
||||
"name": "Add u32 with custom hash table",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter add dev $DEV1 ingress prio 99 handle 42: u32 divisor 256",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 ingress",
|
||||
"matchPattern": "pref 99 u32 chain (0[ ]+$|0 fh 42: ht divisor 256|0 fh 800: ht divisor 1)",
|
||||
"matchCount": "3",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "6658",
|
||||
"name": "Add/Replace u32 with custom hash table and invalid handle",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter replace dev $DEV1 ingress prio 99 handle 42:42 u32 divisor 256",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 ingress",
|
||||
"matchPattern": "pref 99 u32 chain 0",
|
||||
"matchCount": "0",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "9d0a",
|
||||
"name": "Replace valid u32 with custom hash table and invalid handle",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress",
|
||||
"$TC filter add dev $DEV1 ingress prio 99 handle 42: u32 divisor 256"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter replace dev $DEV1 ingress prio 99 handle 42:42 u32 divisor 128",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 ingress",
|
||||
"matchPattern": "pref 99 u32 chain (0[ ]+$|0 fh 42: ht divisor 256|0 fh 800: ht divisor 1)",
|
||||
"matchCount": "3",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "1644",
|
||||
"name": "Add u32 filter that links to a custom hash table",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress",
|
||||
"$TC filter add dev $DEV1 ingress prio 99 handle 43: u32 divisor 256"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter add dev $DEV1 ingress protocol ip prio 98 u32 link 43: hashkey mask 0x0000ff00 at 12 match ip src 192.168.0.0/16",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 ingress",
|
||||
"matchPattern": "filter protocol ip pref 98 u32 chain (0[ ]+$|0 fh 801: ht divisor 1|0 fh 801::800 order 2048 key ht 801 bkt 0 link 43:.*match c0a80000/ffff0000 at 12.*hash mask 0000ff00 at 12)",
|
||||
"matchCount": "3",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "74c2",
|
||||
"name": "Add/Replace u32 filter with invalid hash table id",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter replace dev $DEV1 ingress protocol ip prio 20 u32 ht 47:47 action drop",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 ingress",
|
||||
"matchPattern": "filter protocol ip pref 20 u32 chain 0",
|
||||
"matchCount": "0",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "1fe6",
|
||||
"name": "Replace valid u32 filter with invalid hash table id",
|
||||
"category": [
|
||||
"filter",
|
||||
"u32"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
"$TC qdisc add dev $DEV1 ingress",
|
||||
"$TC filter add dev $DEV1 ingress protocol ip prio 99 handle 43: u32 divisor 1",
|
||||
"$TC filter add dev $DEV1 ingress protocol ip prio 98 u32 ht 43: match tcp src 22 FFFF classid 1:3"
|
||||
],
|
||||
"cmdUnderTest": "$TC filter replace dev $DEV1 ingress protocol ip prio 98 u32 ht 43:1 match tcp src 23 FFFF classid 1:4",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$TC filter show dev $DEV1 ingress",
|
||||
"matchPattern": "filter protocol ip pref 99 u32 chain (0[ ]+$|0 fh (43|800): ht divisor 1|0 fh 43::800 order 2048 key ht 43 bkt 0 flowid 1:3.*match 00160000/ffff0000 at nexthdr\\+0)",
|
||||
"matchCount": "4",
|
||||
"teardown": [
|
||||
"$TC qdisc del dev $DEV1 ingress"
|
||||
]
|
||||
}
|
||||
]
|
Reference in New Issue
Block a user