#include #include #include #include #define CAPTURE_MAGIC 0x4d544350 #define CAPTURE_VERSION 1 struct capture_header { __be32 magic; __u8 version; __u8 flags; __be16 header_len; __be32 skb_mark; __be32 aux_value; } __attribute__((packed)); SEC("classifier") int classifier(struct __sk_buff *skb) { struct capture_header hdr = { .magic = bpf_htonl(CAPTURE_MAGIC), .version = CAPTURE_VERSION, .flags = 0, .header_len = bpf_htons(sizeof(struct capture_header)), .skb_mark = bpf_htonl(skb->mark), .aux_value = 0, }; if (!skb->mark) { return TC_ACT_OK; } if (bpf_skb_adjust_room(skb, sizeof(hdr), BPF_ADJ_ROOM_MAC, 0)) { return TC_ACT_OK; } if (bpf_skb_store_bytes(skb, 0, &hdr, sizeof(hdr), 0)) { return TC_ACT_OK; } return TC_ACT_OK; } char LICENSE[] SEC("license") = "GPL";