diff options
author | Andrew Melnychenko <andrew@daynix.com> | 2024-02-05 18:54:35 +0200 |
---|---|---|
committer | Jason Wang <jasowang@redhat.com> | 2024-03-12 19:31:47 +0800 |
commit | 0cc14182aba961f4c34a21dd202ce6e4a87470f5 (patch) | |
tree | bba84b6261874bf20066156762d1c413f3006ec5 /tools | |
parent | e88899fa90635da7f5c1e245028288755bb5fbd4 (diff) | |
download | qemu-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.c | 7 |
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) { |