--- /dev/null
+#!/bin/sh
+KEY=""
+CNT=0
+bpftool map dump id "$(bpftool map show | grep drop_cnt_map | awk '{ print $1 }' | tr -d ':')" | while read LINE; do
+ case "$LINE" in
+ "key:") ;;
+ "value"*)
+ CNT=$(( $CNT + $(echo "$LINE" | awk '{ print "0x" $11 $10 $9 $8 $7 $6 $5 $4 }') ))
+ ;;
+ "Found "*) ;;
+ *)
+ if [ "$KEY" != "" ]; then
+ echo "$KEY: $CNT"
+ fi
+ KEY=$(echo "$LINE" | awk '{ print "0x" $4 $3 $2 $1 }')
+ CNT=0
+ ;;
+ esac
+done
--- /dev/null
+#!/bin/bash
+set -e
+
+RULES="$(birdc show route table flowspec4)
+$(birdc show route table flowspec6)"
+
+echo "$RULES" | ./genrules.py --8021q=drop-vlan --v6frag=ignore-parse-if-rule --ihl=drop-options
+clang -std=c99 -pedantic -Wall -Wextra -Wno-pointer-arith -Wno-unused-variable -Os -emit-llvm -c xdp.c -o - | llc -march=bpf -filetype=obj -o xdp
+
+echo "Before unload drop count was:"
+./dropcount.sh || echo "Not loaded"
+
+ip link set "$1" xdp off
+ip link set "$1" xdpgeneric off
+# Note that sometimes the automated fallback does not work properly so we have to || generic here
+ip link set "$1" xdp obj xdp sec xdp_drop || ip link set "$1" xdpgeneric obj xdp sec xdp_drop