aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorAndrew Melnychenko <andrew@daynix.com>2024-02-05 18:54:35 +0200
committerJason Wang <jasowang@redhat.com>2024-03-12 19:31:47 +0800
commit0cc14182aba961f4c34a21dd202ce6e4a87470f5 (patch)
treebba84b6261874bf20066156762d1c413f3006ec5 /tools
parente88899fa90635da7f5c1e245028288755bb5fbd4 (diff)
downloadqemu-0cc14182aba961f4c34a21dd202ce6e4a87470f5.zip
qemu-0cc14182aba961f4c34a21dd202ce6e4a87470f5.tar.gz
qemu-0cc14182aba961f4c34a21dd202ce6e4a87470f5.tar.bz2
ebpf: Updated eBPF program and skeleton.
Updated section name, so libbpf should init/gues proper program type without specifications during open/load. Also, added map_flags with explicitly declared BPF_F_MMAPABLE. Added check for BPF_F_MMAPABLE flag to meson script and requirements to libbpf version. Also changed fragmentation flag check - some TCP/UDP packets may be considered fragmented if DF flag is set. Signed-off-by: Andrew Melnychenko <andrew@daynix.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/ebpf/rss.bpf.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/tools/ebpf/rss.bpf.c b/tools/ebpf/rss.bpf.c
index 20f227e..9715d11 100644
--- a/tools/ebpf/rss.bpf.c
+++ b/tools/ebpf/rss.bpf.c
@@ -81,6 +81,7 @@ struct {
__uint(key_size, sizeof(__u32));
__uint(value_size, sizeof(struct rss_config_t));
__uint(max_entries, 1);
+ __uint(map_flags, BPF_F_MMAPABLE);
} tap_rss_map_configurations SEC(".maps");
struct {
@@ -88,6 +89,7 @@ struct {
__uint(key_size, sizeof(__u32));
__uint(value_size, sizeof(struct toeplitz_key_data_t));
__uint(max_entries, 1);
+ __uint(map_flags, BPF_F_MMAPABLE);
} tap_rss_map_toeplitz_key SEC(".maps");
struct {
@@ -95,6 +97,7 @@ struct {
__uint(key_size, sizeof(__u32));
__uint(value_size, sizeof(__u16));
__uint(max_entries, INDIRECTION_TABLE_SIZE);
+ __uint(map_flags, BPF_F_MMAPABLE);
} tap_rss_map_indirection_table SEC(".maps");
static inline void net_rx_rss_add_chunk(__u8 *rss_input, size_t *bytes_written,
@@ -317,7 +320,7 @@ static inline int parse_packet(struct __sk_buff *skb,
info->in_src = ip.saddr;
info->in_dst = ip.daddr;
- info->is_fragmented = !!ip.frag_off;
+ info->is_fragmented = !!(bpf_ntohs(ip.frag_off) & (0x2000 | 0x1fff));
l4_protocol = ip.protocol;
l4_offset = ip.ihl * 4;
@@ -528,7 +531,7 @@ static inline __u32 calculate_rss_hash(struct __sk_buff *skb,
return result;
}
-SEC("tun_rss_steering")
+SEC("socket")
int tun_rss_steering_prog(struct __sk_buff *skb)
{