Update README
[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 MAP_CONTENTS="$(bpftool map show | grep drop_cnt_map | awk '{ print $1 }' | tr -d ':' | while read IF; do
20         bpftool map dump id "$IF"
21 done)"
22 echo "$MAP_CONTENTS" | {
23         declare -a COUNTS
24         KEY=""
25         while read LINE; do
26                 case "$LINE" in
27                         "key:") ;;
28                         "value"*)
29                                 COUNTS["$KEY"]=$(( ${COUNTS["$KEY"]} + $(echo "$LINE" | awk '{ print "0x" $11 $10 $9 $8 $7 $6 $5 $4 }') ))
30                                 ;;
31                         "Found "*) ;;
32                         *)
33                                 KEY=$((16#$(echo "$LINE" | awk '{ print $4 $3 $2 $1 }')))
34                                 if [ "$COUNTS["$KEY"]" = "" ]; then
35                                         COUNTS["$KEY"]=0
36                                 fi
37                                 ;;
38                 esac
39         done
40         for C in "${!COUNTS[@]}"; do
41                 KEY=$C
42                 CNT="${COUNTS["$KEY"]}"
43                 PRINTCNT
44         done
45 }