18c2ecf20Sopenharmony_ci#include <uapi/linux/bpf.h> 28c2ecf20Sopenharmony_ci#include <uapi/linux/if_ether.h> 38c2ecf20Sopenharmony_ci#include <uapi/linux/if_packet.h> 48c2ecf20Sopenharmony_ci#include <uapi/linux/ip.h> 58c2ecf20Sopenharmony_ci#include <bpf/bpf_helpers.h> 68c2ecf20Sopenharmony_ci#include "bpf_legacy.h" 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cistruct { 98c2ecf20Sopenharmony_ci __uint(type, BPF_MAP_TYPE_ARRAY); 108c2ecf20Sopenharmony_ci __type(key, u32); 118c2ecf20Sopenharmony_ci __type(value, long); 128c2ecf20Sopenharmony_ci __uint(max_entries, 256); 138c2ecf20Sopenharmony_ci} my_map SEC(".maps"); 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ciSEC("socket1") 168c2ecf20Sopenharmony_ciint bpf_prog1(struct __sk_buff *skb) 178c2ecf20Sopenharmony_ci{ 188c2ecf20Sopenharmony_ci int index = load_byte(skb, ETH_HLEN + offsetof(struct iphdr, protocol)); 198c2ecf20Sopenharmony_ci long *value; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci if (skb->pkt_type != PACKET_OUTGOING) 228c2ecf20Sopenharmony_ci return 0; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci value = bpf_map_lookup_elem(&my_map, &index); 258c2ecf20Sopenharmony_ci if (value) 268c2ecf20Sopenharmony_ci __sync_fetch_and_add(value, skb->len); 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci return 0; 298c2ecf20Sopenharmony_ci} 308c2ecf20Sopenharmony_cichar _license[] SEC("license") = "GPL"; 31