Commit 71b2ec21 authored by Kaixi Fan's avatar Kaixi Fan Committed by Alexei Starovoitov
Browse files

selftests/bpf: Replace bpf_trace_printk in tunnel kernel code



Replace bpf_trace_printk with bpf_printk in test_tunnel_kern.c.
function bpf_printk is more easier and useful than bpf_trace_printk.

Signed-off-by: default avatarKaixi Fan <fankaixi.li@bytedance.com>
Link: https://lore.kernel.org/r/20220430074844.69214-4-fankaixi.li@bytedance.com


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 1ee7efd4
Loading
Loading
Loading
Loading
+72 −97
Original line number Diff line number Diff line
@@ -21,10 +21,7 @@
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_endian.h>

#define ERROR(ret) do {\
		char fmt[] = "ERROR line:%d ret:%d\n";\
		bpf_trace_printk(fmt, sizeof(fmt), __LINE__, ret); \
	} while (0)
#define log_err(__ret) bpf_printk("ERROR line:%d ret:%d\n", __LINE__, __ret)

struct geneve_opt {
	__be16	opt_class;
@@ -47,7 +44,6 @@ struct {
	__type(value, __u32);
} local_ip_map SEC(".maps");


SEC("tc")
int gre_set_tunnel(struct __sk_buff *skb)
{
@@ -63,7 +59,7 @@ int gre_set_tunnel(struct __sk_buff *skb)
	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_ZERO_CSUM_TX | BPF_F_SEQ_NUMBER);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -75,15 +71,14 @@ int gre_get_tunnel(struct __sk_buff *skb)
{
	int ret;
	struct bpf_tunnel_key key;
	char fmt[] = "key %d remote ip 0x%x\n";

	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	bpf_trace_printk(fmt, sizeof(fmt), key.tunnel_id, key.remote_ipv4);
	bpf_printk("key %d remote ip 0x%x\n", key.tunnel_id, key.remote_ipv4);
	return TC_ACT_OK;
}

@@ -104,7 +99,7 @@ int ip6gretap_set_tunnel(struct __sk_buff *skb)
				     BPF_F_TUNINFO_IPV6 | BPF_F_ZERO_CSUM_TX |
				     BPF_F_SEQ_NUMBER);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -114,18 +109,17 @@ int ip6gretap_set_tunnel(struct __sk_buff *skb)
SEC("tc")
int ip6gretap_get_tunnel(struct __sk_buff *skb)
{
	char fmt[] = "key %d remote ip6 ::%x label %x\n";
	struct bpf_tunnel_key key;
	int ret;

	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	bpf_trace_printk(fmt, sizeof(fmt),
	bpf_printk("key %d remote ip6 ::%x label %x\n",
		   key.tunnel_id, key.remote_ipv6[3], key.tunnel_label);

	return TC_ACT_OK;
@@ -147,7 +141,7 @@ int erspan_set_tunnel(struct __sk_buff *skb)
	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_ZERO_CSUM_TX);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -167,7 +161,7 @@ int erspan_set_tunnel(struct __sk_buff *skb)

	ret = bpf_skb_set_tunnel_opt(skb, &md, sizeof(md));
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -177,7 +171,6 @@ int erspan_set_tunnel(struct __sk_buff *skb)
SEC("tc")
int erspan_get_tunnel(struct __sk_buff *skb)
{
	char fmt[] = "key %d remote ip 0x%x erspan version %d\n";
	struct bpf_tunnel_key key;
	struct erspan_metadata md;
	__u32 index;
@@ -185,28 +178,24 @@ int erspan_get_tunnel(struct __sk_buff *skb)

	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	ret = bpf_skb_get_tunnel_opt(skb, &md, sizeof(md));
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	bpf_trace_printk(fmt, sizeof(fmt),
	bpf_printk("key %d remote ip 0x%x erspan version %d\n",
		   key.tunnel_id, key.remote_ipv4, md.version);

#ifdef ERSPAN_V1
	char fmt2[] = "\tindex %x\n";

	index = bpf_ntohl(md.u.index);
	bpf_trace_printk(fmt2, sizeof(fmt2), index);
	bpf_printk("\tindex %x\n", index);
#else
	char fmt2[] = "\tdirection %d hwid %x timestamp %u\n";

	bpf_trace_printk(fmt2, sizeof(fmt2),
	bpf_printk("\tdirection %d hwid %x timestamp %u\n",
		   md.u.md2.dir,
		   (md.u.md2.hwid_upper << 4) + md.u.md2.hwid,
		   bpf_ntohl(md.u.md2.timestamp));
@@ -231,7 +220,7 @@ int ip4ip6erspan_set_tunnel(struct __sk_buff *skb)
	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -252,7 +241,7 @@ int ip4ip6erspan_set_tunnel(struct __sk_buff *skb)

	ret = bpf_skb_set_tunnel_opt(skb, &md, sizeof(md));
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -262,7 +251,6 @@ int ip4ip6erspan_set_tunnel(struct __sk_buff *skb)
SEC("tc")
int ip4ip6erspan_get_tunnel(struct __sk_buff *skb)
{
	char fmt[] = "ip6erspan get key %d remote ip6 ::%x erspan version %d\n";
	struct bpf_tunnel_key key;
	struct erspan_metadata md;
	__u32 index;
@@ -271,28 +259,24 @@ int ip4ip6erspan_get_tunnel(struct __sk_buff *skb)
	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	ret = bpf_skb_get_tunnel_opt(skb, &md, sizeof(md));
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	bpf_trace_printk(fmt, sizeof(fmt),
	bpf_printk("ip6erspan get key %d remote ip6 ::%x erspan version %d\n",
		   key.tunnel_id, key.remote_ipv4, md.version);

#ifdef ERSPAN_V1
	char fmt2[] = "\tindex %x\n";

	index = bpf_ntohl(md.u.index);
	bpf_trace_printk(fmt2, sizeof(fmt2), index);
	bpf_printk("\tindex %x\n", index);
#else
	char fmt2[] = "\tdirection %d hwid %x timestamp %u\n";

	bpf_trace_printk(fmt2, sizeof(fmt2),
	bpf_printk("\tdirection %d hwid %x timestamp %u\n",
		   md.u.md2.dir,
		   (md.u.md2.hwid_upper << 4) + md.u.md2.hwid,
		   bpf_ntohl(md.u.md2.timestamp));
@@ -351,7 +335,7 @@ int vxlan_set_tunnel_src(struct __sk_buff *skb)

	local_ip = bpf_map_lookup_elem(&local_ip_map, &index);
	if (!local_ip) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -365,14 +349,14 @@ int vxlan_set_tunnel_src(struct __sk_buff *skb)
	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_ZERO_CSUM_TX);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	md.gbp = 0x800FF; /* Set VXLAN Group Policy extension */
	ret = bpf_skb_set_tunnel_opt(skb, &md, sizeof(md));
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -385,26 +369,24 @@ int vxlan_get_tunnel_src(struct __sk_buff *skb)
	int ret;
	struct bpf_tunnel_key key;
	struct vxlan_metadata md;
	char fmt[] = "key %d remote ip 0x%x vxlan gbp 0x%x\n";
	char fmt2[] = "local ip 0x%x\n";
	__u32 index = 0;
	__u32 *local_ip = NULL;

	local_ip = bpf_map_lookup_elem(&local_ip_map, &index);
	if (!local_ip) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	ret = bpf_skb_get_tunnel_opt(skb, &md, sizeof(md));
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -461,7 +443,7 @@ int ip6vxlan_set_tunnel_src(struct __sk_buff *skb)

	local_ip = bpf_map_lookup_elem(&local_ip_map, &index);
	if (!local_ip) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -475,7 +457,7 @@ int ip6vxlan_set_tunnel_src(struct __sk_buff *skb)
	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -485,8 +467,6 @@ int ip6vxlan_set_tunnel_src(struct __sk_buff *skb)
SEC("tc")
int ip6vxlan_get_tunnel_src(struct __sk_buff *skb)
{
	char fmt[] = "key %d remote ip6 ::%x label %x\n";
	char fmt2[] = "local ip6 ::%x\n";
	struct bpf_tunnel_key key;
	int ret;
	__u32 index = 0;
@@ -494,23 +474,23 @@ int ip6vxlan_get_tunnel_src(struct __sk_buff *skb)

	local_ip = bpf_map_lookup_elem(&local_ip_map, &index);
	if (!local_ip) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	if (bpf_ntohl(key.local_ipv6[3]) != *local_ip) {
		bpf_trace_printk(fmt, sizeof(fmt),
				 key.tunnel_id,
				 key.remote_ipv6[3], key.tunnel_label);
		bpf_trace_printk(fmt2, sizeof(fmt2), key.local_ipv6[3]);
		ERROR(ret);
		bpf_printk("ip6vxlan key %d local ip6 ::%x remote ip6 ::%x label 0x%x\n",
			   key.tunnel_id, bpf_ntohl(key.local_ipv6[3]),
			   bpf_ntohl(key.remote_ipv6[3]), key.tunnel_label);
		bpf_printk("local_ip 0x%x\n", *local_ip);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -542,13 +522,13 @@ int geneve_set_tunnel(struct __sk_buff *skb)
	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_ZERO_CSUM_TX);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	ret = bpf_skb_set_tunnel_opt(skb, &gopt, sizeof(gopt));
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -561,11 +541,10 @@ int geneve_get_tunnel(struct __sk_buff *skb)
	int ret;
	struct bpf_tunnel_key key;
	struct geneve_opt gopt;
	char fmt[] = "key %d remote ip 0x%x geneve class 0x%x\n";

	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -573,7 +552,7 @@ int geneve_get_tunnel(struct __sk_buff *skb)
	if (ret < 0)
		gopt.opt_class = 0;

	bpf_trace_printk(fmt, sizeof(fmt),
	bpf_printk("key %d remote ip 0x%x geneve class 0x%x\n",
		   key.tunnel_id, key.remote_ipv4, gopt.opt_class);
	return TC_ACT_OK;
}
@@ -594,7 +573,7 @@ int ip6geneve_set_tunnel(struct __sk_buff *skb)
	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -609,7 +588,7 @@ int ip6geneve_set_tunnel(struct __sk_buff *skb)

	ret = bpf_skb_set_tunnel_opt(skb, &gopt, sizeof(gopt));
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -619,7 +598,6 @@ int ip6geneve_set_tunnel(struct __sk_buff *skb)
SEC("tc")
int ip6geneve_get_tunnel(struct __sk_buff *skb)
{
	char fmt[] = "key %d remote ip 0x%x geneve class 0x%x\n";
	struct bpf_tunnel_key key;
	struct geneve_opt gopt;
	int ret;
@@ -627,7 +605,7 @@ int ip6geneve_get_tunnel(struct __sk_buff *skb)
	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -635,7 +613,7 @@ int ip6geneve_get_tunnel(struct __sk_buff *skb)
	if (ret < 0)
		gopt.opt_class = 0;

	bpf_trace_printk(fmt, sizeof(fmt),
	bpf_printk("key %d remote ip 0x%x geneve class 0x%x\n",
		   key.tunnel_id, key.remote_ipv4, gopt.opt_class);

	return TC_ACT_OK;
@@ -652,7 +630,7 @@ int ipip_set_tunnel(struct __sk_buff *skb)

	/* single length check */
	if (data + sizeof(*iph) > data_end) {
		ERROR(1);
		log_err(1);
		return TC_ACT_SHOT;
	}

@@ -663,7 +641,7 @@ int ipip_set_tunnel(struct __sk_buff *skb)

	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key), 0);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -675,15 +653,14 @@ int ipip_get_tunnel(struct __sk_buff *skb)
{
	int ret;
	struct bpf_tunnel_key key;
	char fmt[] = "remote ip 0x%x\n";

	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	bpf_trace_printk(fmt, sizeof(fmt), key.remote_ipv4);
	bpf_printk("remote ip 0x%x\n", key.remote_ipv4);
	return TC_ACT_OK;
}

@@ -698,7 +675,7 @@ int ipip6_set_tunnel(struct __sk_buff *skb)

	/* single length check */
	if (data + sizeof(*iph) > data_end) {
		ERROR(1);
		log_err(1);
		return TC_ACT_SHOT;
	}

@@ -711,7 +688,7 @@ int ipip6_set_tunnel(struct __sk_buff *skb)
	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -723,16 +700,15 @@ int ipip6_get_tunnel(struct __sk_buff *skb)
{
	int ret;
	struct bpf_tunnel_key key;
	char fmt[] = "remote ip6 %x::%x\n";

	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	bpf_trace_printk(fmt, sizeof(fmt), bpf_htonl(key.remote_ipv6[0]),
	bpf_printk("remote ip6 %x::%x\n", bpf_htonl(key.remote_ipv6[0]),
		   bpf_htonl(key.remote_ipv6[3]));
	return TC_ACT_OK;
}
@@ -748,7 +724,7 @@ int ip6ip6_set_tunnel(struct __sk_buff *skb)

	/* single length check */
	if (data + sizeof(*iph) > data_end) {
		ERROR(1);
		log_err(1);
		return TC_ACT_SHOT;
	}

@@ -760,7 +736,7 @@ int ip6ip6_set_tunnel(struct __sk_buff *skb)
	ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

@@ -772,16 +748,15 @@ int ip6ip6_get_tunnel(struct __sk_buff *skb)
{
	int ret;
	struct bpf_tunnel_key key;
	char fmt[] = "remote ip6 %x::%x\n";

	ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key),
				     BPF_F_TUNINFO_IPV6);
	if (ret < 0) {
		ERROR(ret);
		log_err(ret);
		return TC_ACT_SHOT;
	}

	bpf_trace_printk(fmt, sizeof(fmt), bpf_htonl(key.remote_ipv6[0]),
	bpf_printk("remote ip6 %x::%x\n", bpf_htonl(key.remote_ipv6[0]),
		   bpf_htonl(key.remote_ipv6[3]));
	return TC_ACT_OK;
}
@@ -790,14 +765,14 @@ SEC("tc")
int xfrm_get_state(struct __sk_buff *skb)
{
	struct bpf_xfrm_state x;
	char fmt[] = "reqid %d spi 0x%x remote ip 0x%x\n";
	int ret;

	ret = bpf_skb_get_xfrm_state(skb, 0, &x, sizeof(x), 0);
	if (ret < 0)
		return TC_ACT_OK;

	bpf_trace_printk(fmt, sizeof(fmt), x.reqid, bpf_ntohl(x.spi),
	bpf_printk("reqid %d spi 0x%x remote ip 0x%x\n",
		   x.reqid, bpf_ntohl(x.spi),
		   bpf_ntohl(x.remote_ipv4));
	return TC_ACT_OK;
}