Track and print rule source in drop prints
[flowspec-xdp] / dropcount.sh
1 #!/bin/bash
2 function PRINTCNT() {
3 if [ "$KEY" != "" ]; then
4         if [ "$KEY" = "0" ]; then
5                 echo -e "$CNT:\tInvalid packet length"
6         elif [ "$KEY" = "1" ]; then
7                 echo -e "$CNT:\tInvalid VLAN tag"
8         elif [ "$KEY" = "2" ]; then
9                 echo -e "$CNT:\tInvalid/rejected IHL IPv4 field"
10         elif [ "$KEY" = "3" ]; then
11                 echo -e "$CNT:\tRejected IPv6 fragments"
12         else
13                 echo -en "$CNT:\t"
14                 cat "$(dirname ${BASH_SOURCE[0]})/installed-rules.txt" | head -n $(( $KEY - 3 )) | tail -n1
15         fi
16 fi
17 CNT=0
18 }
19 bpftool map show | grep drop_cnt_map | awk '{ print $1 }' | tr -d ':' | while read IF; do
20         bpftool map dump id "$IF" | {
21                 KEY=""
22                 CNT=0
23                 while read LINE; do
24                         case "$LINE" in
25                                 "key:") ;;
26                                 "value"*)
27                                         CNT=$(( $CNT + $(echo "$LINE" | awk '{ print "0x" $11 $10 $9 $8 $7 $6 $5 $4 }') ))
28                                         ;;
29                                 "Found "*) ;;
30                                 *)
31                                         PRINTCNT
32                                         KEY=$((16#$(echo "$LINE" | awk '{ print $4 $3 $2 $1 }')))
33                                         ;;
34                         esac
35                 done
36                 PRINTCNT
37         }
38 done