Basic filter allowing only a list of VLANs.
if BUILD_EBPF
-all: lb.bpf filter.bpf bypass_filter.bpf xdp_filter.bpf
+all: lb.bpf filter.bpf bypass_filter.bpf xdp_filter.bpf vlan_filter.bpf
%.bpf: %.c
${CC} -Wall -O2 -D__KERNEL__ -D__ASM_SYSREG_H -emit-llvm -c $< -o - | ${LLC} -march=bpf -filetype=obj -o $@
--- /dev/null
+#include <stdint.h>
+#include <stddef.h>
+#include <linux/bpf.h>
+
+#include "bpf_helpers.h"
+
+#define LINUX_VERSION_CODE 263682
+
+int SEC("filter") hashfilter(struct __sk_buff *skb) {
+ uint16_t vlan_id = skb->vlan_tci & 0x0fff;
+ /* accept VLAN 2 and 4 and drop the rest */
+ switch (vlan_id) {
+ case 2:
+ case 4:
+ return -1;
+ default:
+ return 0;
+ }
+ return 0;
+}
+
+char __license[] SEC("license") = "GPL";
+
+uint32_t __version SEC("version") = LINUX_VERSION_CODE;