sample/bpf: fix erspan metadata
The commitc69de58ba8
("net: erspan: use bitfield instead of mask and offset") changes the erspan header to use bitfield, and commitd350a82302
("net: erspan: create erspan metadata uapi header") creates a uapi header file. The above two commit breaks the current erspan test. This patch fixes it by adapting the above two changes. Fixes:ac80c2a165
("samples/bpf: add erspan v2 sample code") Fixes:ef88f89c83
("samples/bpf: extend test_tunnel_bpf.sh with ERSPAN") Signed-off-by: William Tu <u9012063@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
39f57f6799
commit
9c33ca4317
|
@ -15,6 +15,7 @@
|
||||||
#include <uapi/linux/tcp.h>
|
#include <uapi/linux/tcp.h>
|
||||||
#include <uapi/linux/filter.h>
|
#include <uapi/linux/filter.h>
|
||||||
#include <uapi/linux/pkt_cls.h>
|
#include <uapi/linux/pkt_cls.h>
|
||||||
|
#include <uapi/linux/erspan.h>
|
||||||
#include <net/ipv6.h>
|
#include <net/ipv6.h>
|
||||||
#include "bpf_helpers.h"
|
#include "bpf_helpers.h"
|
||||||
#include "bpf_endian.h"
|
#include "bpf_endian.h"
|
||||||
|
@ -35,24 +36,10 @@ struct geneve_opt {
|
||||||
u8 opt_data[8]; /* hard-coded to 8 byte */
|
u8 opt_data[8]; /* hard-coded to 8 byte */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct erspan_md2 {
|
|
||||||
__be32 timestamp;
|
|
||||||
__be16 sgt;
|
|
||||||
__be16 flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct vxlan_metadata {
|
struct vxlan_metadata {
|
||||||
u32 gbp;
|
u32 gbp;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct erspan_metadata {
|
|
||||||
union {
|
|
||||||
__be32 index;
|
|
||||||
struct erspan_md2 md2;
|
|
||||||
} u;
|
|
||||||
int version;
|
|
||||||
};
|
|
||||||
|
|
||||||
SEC("gre_set_tunnel")
|
SEC("gre_set_tunnel")
|
||||||
int _gre_set_tunnel(struct __sk_buff *skb)
|
int _gre_set_tunnel(struct __sk_buff *skb)
|
||||||
{
|
{
|
||||||
|
@ -156,13 +143,15 @@ int _erspan_set_tunnel(struct __sk_buff *skb)
|
||||||
__builtin_memset(&md, 0, sizeof(md));
|
__builtin_memset(&md, 0, sizeof(md));
|
||||||
#ifdef ERSPAN_V1
|
#ifdef ERSPAN_V1
|
||||||
md.version = 1;
|
md.version = 1;
|
||||||
md.u.index = htonl(123);
|
md.u.index = bpf_htonl(123);
|
||||||
#else
|
#else
|
||||||
u8 direction = 1;
|
u8 direction = 1;
|
||||||
u16 hwid = 7;
|
u8 hwid = 7;
|
||||||
|
|
||||||
md.version = 2;
|
md.version = 2;
|
||||||
md.u.md2.flags = htons((direction << 3) | (hwid << 4));
|
md.u.md2.dir = direction;
|
||||||
|
md.u.md2.hwid = hwid & 0xf;
|
||||||
|
md.u.md2.hwid_upper = (hwid >> 4) & 0x3;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ret = bpf_skb_set_tunnel_opt(skb, &md, sizeof(md));
|
ret = bpf_skb_set_tunnel_opt(skb, &md, sizeof(md));
|
||||||
|
@ -207,8 +196,8 @@ int _erspan_get_tunnel(struct __sk_buff *skb)
|
||||||
char fmt2[] = "\tdirection %d hwid %x timestamp %u\n";
|
char fmt2[] = "\tdirection %d hwid %x timestamp %u\n";
|
||||||
|
|
||||||
bpf_trace_printk(fmt2, sizeof(fmt2),
|
bpf_trace_printk(fmt2, sizeof(fmt2),
|
||||||
(ntohs(md.u.md2.flags) >> 3) & 0x1,
|
md.u.md2.dir,
|
||||||
(ntohs(md.u.md2.flags) >> 4) & 0x3f,
|
(md.u.md2.hwid_upper << 4) + md.u.md2.hwid,
|
||||||
bpf_ntohl(md.u.md2.timestamp));
|
bpf_ntohl(md.u.md2.timestamp));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -242,10 +231,12 @@ int _ip4ip6erspan_set_tunnel(struct __sk_buff *skb)
|
||||||
md.version = 1;
|
md.version = 1;
|
||||||
#else
|
#else
|
||||||
u8 direction = 0;
|
u8 direction = 0;
|
||||||
u16 hwid = 17;
|
u8 hwid = 17;
|
||||||
|
|
||||||
md.version = 2;
|
md.version = 2;
|
||||||
md.u.md2.flags = htons((direction << 3) | (hwid << 4));
|
md.u.md2.dir = direction;
|
||||||
|
md.u.md2.hwid = hwid & 0xf;
|
||||||
|
md.u.md2.hwid_upper = (hwid >> 4) & 0x3;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ret = bpf_skb_set_tunnel_opt(skb, &md, sizeof(md));
|
ret = bpf_skb_set_tunnel_opt(skb, &md, sizeof(md));
|
||||||
|
@ -290,8 +281,8 @@ int _ip4ip6erspan_get_tunnel(struct __sk_buff *skb)
|
||||||
char fmt2[] = "\tdirection %d hwid %x timestamp %u\n";
|
char fmt2[] = "\tdirection %d hwid %x timestamp %u\n";
|
||||||
|
|
||||||
bpf_trace_printk(fmt2, sizeof(fmt2),
|
bpf_trace_printk(fmt2, sizeof(fmt2),
|
||||||
(ntohs(md.u.md2.flags) >> 3) & 0x1,
|
md.u.md2.dir,
|
||||||
(ntohs(md.u.md2.flags) >> 4) & 0x3f,
|
(md.u.md2.hwid_upper << 4) + md.u.md2.hwid,
|
||||||
bpf_ntohl(md.u.md2.timestamp));
|
bpf_ntohl(md.u.md2.timestamp));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ function add_erspan_tunnel {
|
||||||
ip netns exec at_ns0 \
|
ip netns exec at_ns0 \
|
||||||
ip link add dev $DEV_NS type $TYPE seq key 2 \
|
ip link add dev $DEV_NS type $TYPE seq key 2 \
|
||||||
local 172.16.1.100 remote 172.16.1.200 \
|
local 172.16.1.100 remote 172.16.1.200 \
|
||||||
erspan_ver 2 erspan_dir 1 erspan_hwid 3
|
erspan_ver 2 erspan_dir egress erspan_hwid 3
|
||||||
fi
|
fi
|
||||||
ip netns exec at_ns0 ip link set dev $DEV_NS up
|
ip netns exec at_ns0 ip link set dev $DEV_NS up
|
||||||
ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
|
ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
|
||||||
|
@ -97,7 +97,7 @@ function add_ip6erspan_tunnel {
|
||||||
ip netns exec at_ns0 \
|
ip netns exec at_ns0 \
|
||||||
ip link add dev $DEV_NS type $TYPE seq key 2 \
|
ip link add dev $DEV_NS type $TYPE seq key 2 \
|
||||||
local ::11 remote ::22 \
|
local ::11 remote ::22 \
|
||||||
erspan_ver 2 erspan_dir 1 erspan_hwid 7
|
erspan_ver 2 erspan_dir egress erspan_hwid 7
|
||||||
fi
|
fi
|
||||||
ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
|
ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24
|
||||||
ip netns exec at_ns0 ip link set dev $DEV_NS up
|
ip netns exec at_ns0 ip link set dev $DEV_NS up
|
||||||
|
|
Loading…
Reference in New Issue