Skip to content

Commit 4c6612f

Browse files
walking-machineAlexei Starovoitov
authored andcommitted
selftests/bpf: Check VLAN tag and proto in xdp_metadata
Verify, whether VLAN tag and proto are set correctly. To simulate "stripped" VLAN tag on veth, send test packet from VLAN interface. Also, add TO_STR() macro for convenience. Acked-by: Stanislav Fomichev <[email protected]> Signed-off-by: Larysa Zaremba <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alexei Starovoitov <[email protected]>
1 parent a3850af commit 4c6612f

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

tools/testing/selftests/bpf/prog_tests/xdp_metadata.c

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,13 @@
3838
#define TX_MAC "00:00:00:00:00:01"
3939
#define RX_MAC "00:00:00:00:00:02"
4040

41+
#define VLAN_ID 59
42+
#define VLAN_PROTO "802.1Q"
43+
#define VLAN_PID htons(ETH_P_8021Q)
44+
#define TX_NAME_VLAN TX_NAME "." TO_STR(VLAN_ID)
45+
4146
#define XDP_RSS_TYPE_L4 BIT(3)
47+
#define VLAN_VID_MASK 0xfff
4248

4349
struct xsk {
4450
void *umem_area;
@@ -323,6 +329,12 @@ static int verify_xsk_metadata(struct xsk *xsk, bool sent_from_af_xdp)
323329
if (!sent_from_af_xdp) {
324330
if (!ASSERT_NEQ(meta->rx_hash_type & XDP_RSS_TYPE_L4, 0, "rx_hash_type"))
325331
return -1;
332+
333+
if (!ASSERT_EQ(meta->rx_vlan_tci & VLAN_VID_MASK, VLAN_ID, "rx_vlan_tci"))
334+
return -1;
335+
336+
if (!ASSERT_EQ(meta->rx_vlan_proto, VLAN_PID, "rx_vlan_proto"))
337+
return -1;
326338
goto done;
327339
}
328340

@@ -378,10 +390,14 @@ void test_xdp_metadata(void)
378390

379391
SYS(out, "ip link set dev " TX_NAME " address " TX_MAC);
380392
SYS(out, "ip link set dev " TX_NAME " up");
381-
SYS(out, "ip addr add " TX_ADDR "/" PREFIX_LEN " dev " TX_NAME);
393+
394+
SYS(out, "ip link add link " TX_NAME " " TX_NAME_VLAN
395+
" type vlan proto " VLAN_PROTO " id " TO_STR(VLAN_ID));
396+
SYS(out, "ip link set dev " TX_NAME_VLAN " up");
397+
SYS(out, "ip addr add " TX_ADDR "/" PREFIX_LEN " dev " TX_NAME_VLAN);
382398

383399
/* Avoid ARP calls */
384-
SYS(out, "ip -4 neigh add " RX_ADDR " lladdr " RX_MAC " dev " TX_NAME);
400+
SYS(out, "ip -4 neigh add " RX_ADDR " lladdr " RX_MAC " dev " TX_NAME_VLAN);
385401

386402
switch_ns_to_rx(&tok);
387403

tools/testing/selftests/bpf/progs/xdp_metadata.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ extern int bpf_xdp_metadata_rx_timestamp(const struct xdp_md *ctx,
2323
__u64 *timestamp) __ksym;
2424
extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, __u32 *hash,
2525
enum xdp_rss_hash_type *rss_type) __ksym;
26+
extern int bpf_xdp_metadata_rx_vlan_tag(const struct xdp_md *ctx,
27+
__be16 *vlan_proto,
28+
__u16 *vlan_tci) __ksym;
2629

2730
SEC("xdp")
2831
int rx(struct xdp_md *ctx)
@@ -86,6 +89,8 @@ int rx(struct xdp_md *ctx)
8689
meta->rx_timestamp = 1;
8790

8891
bpf_xdp_metadata_rx_hash(ctx, &meta->rx_hash, &meta->rx_hash_type);
92+
bpf_xdp_metadata_rx_vlan_tag(ctx, &meta->rx_vlan_proto,
93+
&meta->rx_vlan_tci);
8994

9095
return bpf_redirect_map(&xsk, ctx->rx_queue_index, XDP_PASS);
9196
}

tools/testing/selftests/bpf/testing_helpers.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
#include <bpf/libbpf.h>
1010
#include <time.h>
1111

12+
#define __TO_STR(x) #x
13+
#define TO_STR(x) __TO_STR(x)
14+
1215
int parse_num_list(const char *s, bool **set, int *set_len);
1316
__u32 link_info_prog_id(const struct bpf_link *link, struct bpf_link_info *info);
1417
int bpf_prog_test_load(const char *file, enum bpf_prog_type type,

0 commit comments

Comments
 (0)