gluon-statistics-mcast: adding initial package
This package collects disected statistics on multicast and management traffic and provides them via respondd in "statistics-extended". Such information can be helpful for further development and comparison of mesh routing protocols and troubleshooting network issues. The statistics gathered disect into batman-adv packets as well. Statistics are collected both on client bridge ports and br-client as well as mesh interfaces. This introduces a performance penalty but tries to keep the impact on unicast traffic small. Note that respondd replies are rather large (several UDP datagrams, even when LZMA compressed). Therefore you might want to use slower intervals for querying respondd "statistics-extended". Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
This commit is contained in:
parent
7f47038026
commit
d0fa7dd0bb
33
package/gluon-statistics-mcast/Makefile
Normal file
33
package/gluon-statistics-mcast/Makefile
Normal file
@ -0,0 +1,33 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=gluon-statistics-mcast
|
||||
PKG_VERSION:=1
|
||||
|
||||
include ../gluon.mk
|
||||
|
||||
define Package/gluon-statistics-mcast
|
||||
TITLE:=Gluon Statistics for Multicast Traffic
|
||||
DEPENDS:= +bpfcountd +libgluonutil
|
||||
endef
|
||||
|
||||
define Package/gluon-statistics-mcast/description
|
||||
This package collects disected statistics on multicast
|
||||
and management traffic and provides them via respondd in
|
||||
"statistics-extended". Such information can be helpful
|
||||
for further development and comparison of mesh routing
|
||||
protocols and troubleshooting network issues.
|
||||
|
||||
The statistics gathered disect into batman-adv
|
||||
packets as well. Statistics are collected both on client
|
||||
bridge ports and br-client as well as mesh interfaces.
|
||||
|
||||
This introduces a performance penalty but tries to
|
||||
keep the impact on unicast traffic small.
|
||||
|
||||
Note that respondd replies are rather large
|
||||
(several UDP datagrams, even when LZMA compressed).
|
||||
Therefore you might want to use slower intervals for
|
||||
querying respondd "statistics-extended".
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackageGluon,gluon-statistics-mcast))
|
@ -0,0 +1,68 @@
|
||||
case "$INTERFACE" in
|
||||
"client"|\
|
||||
"mmfd")
|
||||
;;
|
||||
*)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
BPFCOUNTD_RUN="/var/run/bpfcountd"
|
||||
mkdir -p "${BPFCOUNTD_RUN}/gluon-ifaces"
|
||||
|
||||
get_ifup_ifaces() {
|
||||
local ifaces="$DEVICE"
|
||||
local brports
|
||||
|
||||
if [ -d "/sys/class/net/$DEVICE/bridge/" ]; then
|
||||
brports="$(ls "/sys/class/net/$DEVICE/brif/")"
|
||||
[ -n "$brports" ] && ifaces="$(echo -e "${brports}\n${ifaces}")"
|
||||
fi
|
||||
|
||||
echo "$ifaces"
|
||||
}
|
||||
|
||||
get_ifdown_ifaces() {
|
||||
cat "${BPFCOUNTD_RUN}/gluon-ifaces/$INTERFACE"
|
||||
}
|
||||
|
||||
bpfcountd_start() {
|
||||
local ifaces="$(get_ifup_ifaces)"
|
||||
local iface
|
||||
|
||||
[ -z "$ifaces" ] && return
|
||||
[ -f "${BPFCOUNTD_RUN}/gluon-ifaces/$INTERFACE" ] && return
|
||||
echo "$ifaces" > "${BPFCOUNTD_RUN}/gluon-ifaces/$INTERFACE"
|
||||
|
||||
for iface in $ifaces; do
|
||||
IFNAME="$iface" /lib/gluon/core/mesh/setup.d/40-bpfcountd "clients"
|
||||
done
|
||||
}
|
||||
|
||||
bpfcountd_stop() {
|
||||
local ifaces="$(get_ifdown_ifaces)"
|
||||
local iface
|
||||
|
||||
[ -z "$ifaces" ] && return
|
||||
rm "${BPFCOUNTD_RUN}/gluon-ifaces/$INTERFACE"
|
||||
|
||||
for iface in $ifaces; do
|
||||
IFNAME="$iface" /lib/gluon/core/mesh/teardown.d/40-bpfcountd
|
||||
done
|
||||
}
|
||||
|
||||
# synchronize reads+writes to /var/run/gluon-ifaces/$INTERFACE
|
||||
lock /var/lock/gluon_bpfcountd_ifaces.lock
|
||||
|
||||
case "$ACTION" in
|
||||
"ifup")
|
||||
bpfcountd_start
|
||||
;;
|
||||
"ifdown")
|
||||
bpfcountd_stop
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
lock -u /var/lock/gluon_bpfcountd_ifaces.lock
|
@ -0,0 +1,618 @@
|
||||
%SSDP;udp dst port 1900
|
||||
%LLMNR;udp dst port 5355
|
||||
%MDNS;udp dst port 5353
|
||||
%NB-NS;udp dst port 137
|
||||
%NB-DGM;udp dst port 138
|
||||
%DP-LSP;udp dst port 17500
|
||||
%TRAP-DAEMON;udp dst port 3600
|
||||
%DHCP4;udp port (67 || 68)
|
||||
%DHCP6;udp port (546 || 547)
|
||||
%WS-DISC;udp port 3702
|
||||
%WSP;udp dst port 9200
|
||||
%TEREDO;udp dst port 3544
|
||||
%SPOTIFY;udp dst port 57621
|
||||
%SIP;udp dst port 5060
|
||||
%BT-LPD;udp dst port 6771
|
||||
%NVBM;udp dst port 8225
|
||||
%SVRLOC;udp dst port 427
|
||||
%ENPC;udp dst port 3289
|
||||
%QTSTREAM;udp dst port 7555
|
||||
%HDHOMERUN;udp dst port 65001
|
||||
%PLEX-DISC0;udp dst port 32410
|
||||
%PLEX-DISC2;udp dst port 32412
|
||||
%PLEX-DISC3;udp dst port 32413
|
||||
%PLEX-DISC4;udp dst port 32414
|
||||
%BT-UTP;udp dst port 16680
|
||||
%WF-BSSERV;udp dst port 61117
|
||||
%FAXIMUM;udp dst port 7437
|
||||
%TOMCAT;udp dst port 9006
|
||||
%DISTINCT;udp dst port 9999
|
||||
%UDP-25412;udp dst port 25412
|
||||
%UDP-10203;udp dst port 10203
|
||||
%UDP-60128;udp dst port 60128
|
||||
%COREL-VNC;udp dst port 2654
|
||||
%HPVMMCTRL;udp dst port 1124
|
||||
%CBT;udp dst port 7777
|
||||
%MCAFEE;udp dst port 6646
|
||||
%UDP-39455;udp dst port 39455
|
||||
%UDP-889;udp dst port 889
|
||||
%UDP-16962;udp dst port 16962
|
||||
%TSEQ;udp dst port 0
|
||||
%CANON-BJNP;udp dst port 8612
|
||||
%RIP;udp dst port 520
|
||||
%RIPNG;udp dst port 521
|
||||
%OLSRV1;udp dst port 698
|
||||
%BABEL;udp dst port 6696
|
||||
%MANET;udp dst port 269
|
||||
%RESPONDD-QRY;udp dst port 1001
|
||||
%SYNCTHING-LPD;udp dst port 21027
|
||||
%USTEER;udp dst port 16720
|
||||
%L3ROAMD;udp dst port 5523
|
||||
%MMFD;udp dst port 27275
|
||||
%RETICULUM;udp dst port 29716
|
||||
|
||||
IP4;ip
|
||||
IP6;ip6
|
||||
BLA;arp and arp[0:2] = 0x0001 and arp[2:2] = 0x0800 and arp[6:2] = 0x0002 and arp[14:4] = 0x00000000 and arp[18:2] = 0xff43 and arp[20:1] = 0x05 and arp[24:4] = 0x00000000
|
||||
ARP;arp and not ${BLA}
|
||||
IPX;ipx
|
||||
NETBEUI;netbeui
|
||||
LLDP;ether proto 0x88CC
|
||||
|
||||
IP4:IGMP;${IP4} && igmp
|
||||
IP4:IGMP:QUERY-V1;${IP4:IGMP} and igmp[0] = 0x11 and ip[2:2] = 0x0020 and igmp[1] = 0x00
|
||||
IP4:IGMP:QUERY-V2;${IP4:IGMP} and igmp[0] = 0x11 and ip[2:2] = 0x0020 and not (igmp[1] = 0x00)
|
||||
IP4:IGMP:QUERY-V3;${IP4:IGMP} and igmp[0] = 0x11 and ip[2:2] >= 0x0024
|
||||
IP4:IGMP:QUERY-UNKNOWN;${IP4:IGMP} and igmp[0] = 0x11 and not ((ip[2:2] = 0x0020 and igmp[1] = 0x00) or (ip[2:2] = 0x0020 and not (igmp[1] = 0x00)) or ip[2:2] >= 0x0024)
|
||||
IP4:IGMP:REPORT-V1;${IP4:IGMP} and igmp[0] = 0x12
|
||||
IP4:IGMP:REPORT-V2;${IP4:IGMP} and igmp[0] = 0x16
|
||||
IP4:IGMP:LEAVE-V2;${IP4:IGMP} and igmp[0] = 0x17
|
||||
IP4:IGMP:REPORT-V3;${IP4:IGMP} and igmp[0] = 0x22
|
||||
IP4:IGMP:MRD-ADV;${IP4:IGMP} and igmp[0] = 0x30
|
||||
IP4:IGMP:MRD-SOL;${IP4:IGMP} and igmp[0] = 0x31
|
||||
IP4:IGMP:MRD-TERM;${IP4:IGMP} and igmp[0] = 0x32
|
||||
|
||||
IP4:MC;${IP4} && ip multicast
|
||||
IP4:MC:PIM;${IP4:MC} && ((ip proto 103) or ((ip proto 2) and (ip[20] == 0x14)))
|
||||
IP4:MC:OSPF;${IP4:MC} && ip proto 89
|
||||
IP4:MC:MANET;${IP4:MC} && ip proto 138
|
||||
IP4:MC:UDP;${IP4:MC} && udp
|
||||
|
||||
IP4:MC:UDP:SSDP;${IP4:MC:UDP} && ${%SSDP}
|
||||
IP4:MC:UDP:LLMNR;${IP4:MC:UDP} && ${%LLMNR}
|
||||
IP4:MC:UDP:MDNS;${IP4:MC:UDP} && ${%MDNS}
|
||||
IP4:MC:UDP:NB-NS;${IP4:MC:UDP} && ${%NB-NS}
|
||||
IP4:MC:UDP:NB-DGM;${IP4:MC:UDP} && ${%NB-DGM}
|
||||
IP4:MC:UDP:DP-LSP;${IP4:MC:UDP} && ${%DP-LSP}
|
||||
IP4:MC:UDP:TRAP-DAEMON;${IP4:MC:UDP} && ${%TRAP-DAEMON}
|
||||
IP4:MC:UDP:DHCP4;${IP4:MC:UDP} && ${%DHCP4}
|
||||
IP4:MC:UDP:DHCP6;${IP4:MC:UDP} && ${%DHCP6}
|
||||
IP4:MC:UDP:WS-DISC;${IP4:MC:UDP} && ${%WS-DISC}
|
||||
IP4:MC:UDP:WSP;${IP4:MC:UDP} && ${%WSP}
|
||||
IP4:MC:UDP:TEREDO;${IP4:MC:UDP} && ${%TEREDO}
|
||||
IP4:MC:UDP:SPOTIFY;${IP4:MC:UDP} && ${%SPOTIFY}
|
||||
IP4:MC:UDP:SIP;${IP4:MC:UDP} && ${%SIP}
|
||||
IP4:MC:UDP:BT-LPD;${IP4:MC:UDP} && ${%BT-LPD}
|
||||
IP4:MC:UDP:NVBM;${IP4:MC:UDP} && ${%NVBM}
|
||||
IP4:MC:UDP:SVRLOC;${IP4:MC:UDP} && ${%SVRLOC}
|
||||
IP4:MC:UDP:ENPC;${IP4:MC:UDP} && ${%ENPC}
|
||||
IP4:MC:UDP:QTSTREAM;${IP4:MC:UDP} && ${%QTSTREAM}
|
||||
IP4:MC:UDP:HDHOMERUN;${IP4:MC:UDP} && ${%HDHOMERUN}
|
||||
IP4:MC:UDP:PLEX-DISC0;${IP4:MC:UDP} && ${%PLEX-DISC0}
|
||||
IP4:MC:UDP:PLEX-DISC2;${IP4:MC:UDP} && ${%PLEX-DISC2}
|
||||
IP4:MC:UDP:PLEX-DISC3;${IP4:MC:UDP} && ${%PLEX-DISC3}
|
||||
IP4:MC:UDP:PLEX-DISC4;${IP4:MC:UDP} && ${%PLEX-DISC4}
|
||||
IP4:MC:UDP:BT-UTP;${IP4:MC:UDP} && ${%BT-UTP}
|
||||
IP4:MC:UDP:WF-BSSERV;${IP4:MC:UDP} && ${%WF-BSSERV}
|
||||
IP4:MC:UDP:FAXIMUM;${IP4:MC:UDP} && ${%FAXIMUM}
|
||||
IP4:MC:UDP:TOMCAT;${IP4:MC:UDP} && ${%TOMCAT}
|
||||
IP4:MC:UDP:DISTINCT;${IP4:MC:UDP} && ${%DISTINCT}
|
||||
IP4:MC:UDP:UDP-25412;${IP4:MC:UDP} && ${%UDP-25412}
|
||||
IP4:MC:UDP:UDP-10203;${IP4:MC:UDP} && ${%UDP-10203}
|
||||
IP4:MC:UDP:UDP-60128;${IP4:MC:UDP} && ${%UDP-60128}
|
||||
IP4:MC:UDP:COREL-VNC;${IP4:MC:UDP} && ${%COREL-VNC}
|
||||
IP4:MC:UDP:HPVMMCTRL;${IP4:MC:UDP} && ${%HPVMMCTRL}
|
||||
IP4:MC:UDP:CBT;${IP4:MC:UDP} && ${%CBT}
|
||||
IP4:MC:UDP:MCAFEE;${IP4:MC:UDP} && ${%MCAFEE}
|
||||
IP4:MC:UDP:UDP-39455;${IP4:MC:UDP} && ${%UDP-39455}
|
||||
IP4:MC:UDP:UDP-889;${IP4:MC:UDP} && ${%UDP-889}
|
||||
IP4:MC:UDP:UDP-16962;${IP4:MC:UDP} && ${%UDP-16962}
|
||||
IP4:MC:UDP:TSEQ;${IP4:MC:UDP} && ${%TSEQ}
|
||||
IP4:MC:UDP:CANON-BJNP;${IP4:MC:UDP} && ${%CANON-BJNP}
|
||||
IP4:MC:UDP:RIP;${IP4:MC:UDP} && ${%RIP}
|
||||
IP4:MC:UDP:RIPNG;${IP4:MC:UDP} && ${%RIPNG}
|
||||
IP4:MC:UDP:OLSRV1;${IP4:MC:UDP} && ${%OLSRV1}
|
||||
IP4:MC:UDP:BABEL;${IP4:MC:UDP} && ${%BABEL}
|
||||
IP4:MC:UDP:MANET;${IP4:MC:UDP} && ${%MANET}
|
||||
IP4:MC:UDP:RESPONDD-QRY;${IP4:MC:UDP} && ${%RESPONDD-QRY}
|
||||
IP4:MC:UDP:SYNCTHING-LPD;${IP4:MC:UDP} && ${%SYNCTHING-LPD}
|
||||
IP4:MC:UDP:USTEER;${IP4:MC:UDP} && ${%USTEER}
|
||||
IP4:MC:UDP:L3ROAMD;${IP4:MC:UDP} && ${%L3ROAMD}
|
||||
IP4:MC:UDP:MMFD;${IP4:MC:UDP} && ${%MMFD}
|
||||
IP4:MC:UDP:RETICULUM;${IP4:MC:UDP} && ${%RETICULUM}
|
||||
|
||||
IP6:MC;${IP6} && ip6 multicast
|
||||
IP6:MC:PIM;${IP6:MC} && ip6 proto 103
|
||||
IP6:MC:OSPF;${IP6:MC} && ip6 proto 89
|
||||
IP6:MC:MANET;${IP6:MC} && ip6 proto 138
|
||||
IP6:MC:UDP;${IP6:MC} && udp
|
||||
|
||||
IP6:MC:UDP:SSDP;${IP6:MC:UDP} && ${%SSDP}
|
||||
IP6:MC:UDP:LLMNR;${IP6:MC:UDP} && ${%LLMNR}
|
||||
IP6:MC:UDP:MDNS;${IP6:MC:UDP} && ${%MDNS}
|
||||
IP6:MC:UDP:NB-NS;${IP6:MC:UDP} && ${%NB-NS}
|
||||
IP6:MC:UDP:NB-DGM;${IP6:MC:UDP} && ${%NB-DGM}
|
||||
IP6:MC:UDP:DP-LSP;${IP6:MC:UDP} && ${%DP-LSP}
|
||||
IP6:MC:UDP:TRAP-DAEMON;${IP6:MC:UDP} && ${%TRAP-DAEMON}
|
||||
IP6:MC:UDP:DHCP4;${IP6:MC:UDP} && ${%DHCP4}
|
||||
IP6:MC:UDP:DHCP6;${IP6:MC:UDP} && ${%DHCP6}
|
||||
IP6:MC:UDP:WS-DISC;${IP6:MC:UDP} && ${%WS-DISC}
|
||||
IP6:MC:UDP:WSP;${IP6:MC:UDP} && ${%WSP}
|
||||
IP6:MC:UDP:TEREDO;${IP6:MC:UDP} && ${%TEREDO}
|
||||
IP6:MC:UDP:SPOTIFY;${IP6:MC:UDP} && ${%SPOTIFY}
|
||||
IP6:MC:UDP:SIP;${IP6:MC:UDP} && ${%SIP}
|
||||
IP6:MC:UDP:BT-LPD;${IP6:MC:UDP} && ${%BT-LPD}
|
||||
IP6:MC:UDP:NVBM;${IP6:MC:UDP} && ${%NVBM}
|
||||
IP6:MC:UDP:SVRLOC;${IP6:MC:UDP} && ${%SVRLOC}
|
||||
IP6:MC:UDP:ENPC;${IP6:MC:UDP} && ${%ENPC}
|
||||
IP6:MC:UDP:QTSTREAM;${IP6:MC:UDP} && ${%QTSTREAM}
|
||||
IP6:MC:UDP:HDHOMERUN;${IP6:MC:UDP} && ${%HDHOMERUN}
|
||||
IP6:MC:UDP:PLEX-DISC0;${IP6:MC:UDP} && ${%PLEX-DISC0}
|
||||
IP6:MC:UDP:PLEX-DISC2;${IP6:MC:UDP} && ${%PLEX-DISC2}
|
||||
IP6:MC:UDP:PLEX-DISC3;${IP6:MC:UDP} && ${%PLEX-DISC3}
|
||||
IP6:MC:UDP:PLEX-DISC4;${IP6:MC:UDP} && ${%PLEX-DISC4}
|
||||
IP6:MC:UDP:BT-UTP;${IP6:MC:UDP} && ${%BT-UTP}
|
||||
IP6:MC:UDP:WF-BSSERV;${IP6:MC:UDP} && ${%WF-BSSERV}
|
||||
IP6:MC:UDP:FAXIMUM;${IP6:MC:UDP} && ${%FAXIMUM}
|
||||
IP6:MC:UDP:TOMCAT;${IP6:MC:UDP} && ${%TOMCAT}
|
||||
IP6:MC:UDP:DISTINCT;${IP6:MC:UDP} && ${%DISTINCT}
|
||||
IP6:MC:UDP:UDP-25412;${IP6:MC:UDP} && ${%UDP-25412}
|
||||
IP6:MC:UDP:UDP-10203;${IP6:MC:UDP} && ${%UDP-10203}
|
||||
IP6:MC:UDP:UDP-60128;${IP6:MC:UDP} && ${%UDP-60128}
|
||||
IP6:MC:UDP:COREL-VNC;${IP6:MC:UDP} && ${%COREL-VNC}
|
||||
IP6:MC:UDP:HPVMMCTRL;${IP6:MC:UDP} && ${%HPVMMCTRL}
|
||||
IP6:MC:UDP:CBT;${IP6:MC:UDP} && ${%CBT}
|
||||
IP6:MC:UDP:MCAFEE;${IP6:MC:UDP} && ${%MCAFEE}
|
||||
IP6:MC:UDP:UDP-39455;${IP6:MC:UDP} && ${%UDP-39455}
|
||||
IP6:MC:UDP:UDP-889;${IP6:MC:UDP} && ${%UDP-889}
|
||||
IP6:MC:UDP:UDP-16962;${IP6:MC:UDP} && ${%UDP-16962}
|
||||
IP6:MC:UDP:TSEQ;${IP6:MC:UDP} && ${%TSEQ}
|
||||
IP6:MC:UDP:CANON-BJNP;${IP6:MC:UDP} && ${%CANON-BJNP}
|
||||
IP6:MC:UDP:RIP;${IP6:MC:UDP} && ${%RIP}
|
||||
IP6:MC:UDP:RIPNG;${IP6:MC:UDP} && ${%RIPNG}
|
||||
IP6:MC:UDP:OLSRV1;${IP6:MC:UDP} && ${%OLSRV1}
|
||||
IP6:MC:UDP:BABEL;${IP6:MC:UDP} && ${%BABEL}
|
||||
IP6:MC:UDP:MANET;${IP6:MC:UDP} && ${%MANET}
|
||||
IP6:MC:UDP:RESPONDD-QRY;${IP6:MC:UDP} && ${%RESPONDD-QRY}
|
||||
IP6:MC:UDP:SYNCTHING-LPD;${IP6:MC:UDP} && ${%SYNCTHING-LPD}
|
||||
IP6:MC:UDP:USTEER;${IP6:MC:UDP} && ${%USTEER}
|
||||
IP6:MC:UDP:L3ROAMD;${IP6:MC:UDP} && ${%L3ROAMD}
|
||||
IP6:MC:UDP:MMFD;${IP6:MC:UDP} && ${%MMFD}
|
||||
IP6:MC:UDP:RETICULUM;${IP6:MC:UDP} && ${%RETICULUM}
|
||||
|
||||
IP6:MC:HBH6;${IP6:MC} && ip6 proto 0
|
||||
IP6:MC:ICMP6;${IP6:MC} && ip6 proto 58
|
||||
|
||||
IP6:MC:HBH6:MLD;${IP6:MC:HBH6} and ip6[40] = 58 and ip6[41] = 0x00 and ip6[42:4] = 0x05020000 and (ip6[46:2] = 0x0000 or ip6[46:2] = 0x0100)
|
||||
IP6:MC:HBH6:MLD:QUERY-V1;${IP6:MC:HBH6:MLD} and ip6[48] = 130 and ip6[4:2] = 0x0020
|
||||
IP6:MC:HBH6:MLD:QUERY-V1:GENERAL;${IP6:MC:HBH6:MLD:QUERY-V1} and ip6[56:4] = 0x00000000 and ip6[60:4] = 0x00000000 and ip6[64:4] = 0x00000000 and ip6[68:4] = 0x00000000
|
||||
IP6:MC:HBH6:MLD:QUERY-V1:ADDRSPEC;${IP6:MC:HBH6:MLD:QUERY-V1} and not (ip6[56:4] = 0x00000000 and ip6[60:4] = 0x00000000 and ip6[64:4] = 0x00000000 and ip6[68:4] = 0x00000000)
|
||||
IP6:MC:HBH6:MLD:QUERY-V2;${IP6:MC:HBH6:MLD} and ip6[48] = 130 and ip6[4:2] >= 0x0024
|
||||
IP6:MC:HBH6:MLD:QUERY-V2:GENERAL;${IP6:MC:HBH6:MLD:QUERY-V2} and ip6[56:4] = 0x00000000 and ip6[60:4] = 0x00000000 and ip6[64:4] = 0x00000000 and ip6[68:4] = 0x00000000
|
||||
IP6:MC:HBH6:MLD:QUERY-V2:ADDRSPEC;${IP6:MC:HBH6:MLD:QUERY-V2} and not (ip6[56:4] = 0x00000000 and ip6[60:4] = 0x00000000 and ip6[64:4] = 0x00000000 and ip6[68:4] = 0x00000000)
|
||||
IP6:MC:HBH6:MLD:QUERY-UNKNOWN;${IP6:MC:HBH6:MLD} and ip6[48] = 130 and not (ip6[4:2] = 0x0020 or ip6[4:2] >= 0x0024)
|
||||
IP6:MC:HBH6:MLD:REPORT-V1;${IP6:MC:HBH6:MLD} and ip6[48] = 131
|
||||
IP6:MC:HBH6:MLD:DONE-V1;${IP6:MC:HBH6:MLD} and ip6[48] = 132
|
||||
IP6:MC:HBH6:MLD:REPORT-V2;${IP6:MC:HBH6:MLD} and ip6[48] = 143
|
||||
IP6:MC:HBH6:MLD:MRD-ADV;${IP6:MC:HBH6:MLD} and ip6[48] = 151
|
||||
IP6:MC:HBH6:MLD:MRD-SOL;${IP6:MC:HBH6:MLD} and ip6[48] = 152
|
||||
IP6:MC:HBH6:MLD:MRD-TERM;${IP6:MC:HBH6:MLD} and ip6[48] = 153
|
||||
IP6:MC:HBH6:OTHER;${IP6:MC:HBH6} and not ${IP6:MC:HBH6:MLD}
|
||||
|
||||
IP6:MC:ICMP6:ECHOREQ;${IP6:MC:ICMP6} && icmp6[icmp6type] = icmp6-echo
|
||||
IP6:MC:ICMP6:ECHOREP;${IP6:MC:ICMP6} && icmp6[icmp6type] = icmp6-echoreply
|
||||
IP6:MC:ICMP6:NDSOL;${IP6:MC:ICMP6} && icmp6[icmp6type] = icmp6-neighborsolicit
|
||||
IP6:MC:ICMP6:NDADV;${IP6:MC:ICMP6} && icmp6[icmp6type] = icmp6-neighboradvert
|
||||
IP6:MC:ICMP6:NDADV:UNSOL;${IP6:MC:ICMP6:NDADV} and ip6 host ff02::1
|
||||
IP6:MC:ICMP6:NDADV:OTHER;${IP6:MC:ICMP6:NDADV} and not (ip6 host ff02::1)
|
||||
IP6:MC:ICMP6:RTRSOL;${IP6:MC:ICMP6} && icmp6[icmp6type] = icmp6-routersolicit
|
||||
IP6:MC:ICMP6:RTRADV;${IP6:MC:ICMP6} && icmp6[icmp6type] = icmp6-routeradvert
|
||||
IP6:MC:ICMP6:OTHER;${IP6:MC:ICMP6} && not (${IP6:MC:ICMP6:ECHOREQ} || ${IP6:MC:ICMP6:ECHOREP} || ${IP6:MC:ICMP6:NDSOL} || ${IP6:MC:ICMP6:NDADV} || ${IP6:MC:ICMP6:RTRSOL} || ${IP6:MC:ICMP6:RTRADV})
|
||||
|
||||
BLA:CLAIM;${BLA} and arp[21:1] = 0x00
|
||||
BLA:UNCLAIM;${BLA} and arp[21:1] = 0x01
|
||||
BLA:ANNOUNCE;${BLA} and arp[21:1] = 0x02
|
||||
BLA:REQUEST;${BLA} and arp[21:1] = 0x03
|
||||
BLA:LOOPDETECT;${BLA} and arp[21:1] = 0x04
|
||||
|
||||
ARP:REQ;${ARP} and arp[6:2] = 0x0001
|
||||
ARP:REQ:UNSOL;${ARP:REQ} and arp[18:4] = 0xffffffff and arp[22:2] = 0xffff
|
||||
ARP:REQ:OTHER;${ARP:REQ} and not (arp[18:4] = 0xffffffff and arp[22:2] = 0xffff)
|
||||
ARP:REP;${ARP} and arp[6:2] = 0x0002
|
||||
ARP:REP:UNSOL;${ARP:REP} and arp[18:4] = 0xffffffff and arp[22:2] = 0xffff
|
||||
ARP:REP:OTHER;${ARP:REP} and not (arp[18:4] = 0xffffffff and arp[22:2] = 0xffff)
|
||||
|
||||
BAT;batadv
|
||||
BAT:BAT-OGM_IV;batadv 15 iv_ogm
|
||||
BAT:BAT-OGM_V;batadv 15 ogm2
|
||||
BAT:BAT-ELP;batadv 15 elp
|
||||
BAT:BAT-UCAST;batadv 15 unicast
|
||||
BAT:BAT-UCAST4;batadv 15 unicast_4addr
|
||||
BAT:BAT-UCAST_FRAG;batadv 15 unicast_frag
|
||||
BAT:BAT-UCAST_TVLV;batadv 15 unicast_tvlv
|
||||
BAT:BAT-BCAST;batadv 15 bcast
|
||||
BAT:BAT-ICMP;batadv 15 \icmp
|
||||
BAT:BAT-CODED;batadv 15 coded
|
||||
BAT:BAT-OTHER;batadv and not (${BAT:BAT-OGM_IV} || ${BAT:BAT-OGM_V} || ${BAT:BAT-ELP} || ${BAT:BAT-UCAST} || ${BAT:BAT-UCAST4} || ${BAT:BAT-UCAST_FRAG} || ${BAT:BAT-UCAST_TVLV} || ${BAT:BAT-BCAST} || ${BAT:BAT-ICMP} || ${BAT:BAT-CODED})
|
||||
|
||||
|
||||
BAT:BAT-BCAST:IP4;${BAT:BAT-BCAST} && ${IP4}
|
||||
BAT:BAT-BCAST:IP6;${BAT:BAT-BCAST} && ${IP6}
|
||||
BAT:BAT-BCAST:BLA;${BAT:BAT-BCAST} && ${BLA}
|
||||
BAT:BAT-BCAST:ARP;${BAT:BAT-BCAST} && ${ARP}
|
||||
BAT:BAT-BCAST:IPX;${BAT:BAT-BCAST} && ${IPX}
|
||||
BAT:BAT-BCAST:NETBEUI;${BAT:BAT-BCAST} && ${NETBEUI}
|
||||
BAT:BAT-BCAST:LLDP;${BAT:BAT-BCAST} && ${LLDP}
|
||||
BAT:BAT-BCAST:OTHER;${BAT:BAT-BCAST} && not (${BAT:BAT-BCAST:IP4} || ${BAT:BAT-BCAST:IP6} || ${BAT:BAT-BCAST:BLA} || ${BAT:BAT-BCAST:ARP} || ${BAT:BAT-BCAST:IPX} || ${BAT:BAT-BCAST:NETBEUI} || ${BAT:BAT-BCAST:LLDP})
|
||||
|
||||
BAT:BAT-UCAST:IP4;${BAT:BAT-UCAST} && ${IP4}
|
||||
BAT:BAT-UCAST:IP6;${BAT:BAT-UCAST} && ${IP6}
|
||||
BAT:BAT-UCAST:BLA;${BAT:BAT-UCAST} && ${BLA}
|
||||
BAT:BAT-UCAST:ARP;${BAT:BAT-UCAST} && ${ARP}
|
||||
BAT:BAT-UCAST:IPX;${BAT:BAT-UCAST} && ${IPX}
|
||||
BAT:BAT-UCAST:NETBEUI;${BAT:BAT-UCAST} && ${NETBEUI}
|
||||
BAT:BAT-UCAST:LLDP;${BAT:BAT-UCAST} && ${LLDP}
|
||||
BAT:BAT-UCAST:OTHER;${BAT:BAT-UCAST} && not (${BAT:BAT-UCAST:IP4} || ${BAT:BAT-UCAST:IP6} || ${BAT:BAT-UCAST:BLA} || ${BAT:BAT-UCAST:ARP} || ${BAT:BAT-UCAST:IPX} || ${BAT:BAT-UCAST:NETBEUI} || ${BAT:BAT-UCAST:LLDP})
|
||||
|
||||
BAT:BAT-UCAST4:IP4;${BAT:BAT-UCAST4} && ${IP4}
|
||||
BAT:BAT-UCAST4:IP6;${BAT:BAT-UCAST4} && ${IP6}
|
||||
BAT:BAT-UCAST4:BLA;${BAT:BAT-UCAST4} && ${BLA}
|
||||
BAT:BAT-UCAST4:ARP;${BAT:BAT-UCAST4} && ${ARP}
|
||||
BAT:BAT-UCAST4:IPX;${BAT:BAT-UCAST4} && ${IPX}
|
||||
BAT:BAT-UCAST4:NETBEUI;${BAT:BAT-UCAST4} && ${NETBEUI}
|
||||
BAT:BAT-UCAST4:LLDP;${BAT:BAT-UCAST4} && ${LLDP}
|
||||
BAT:BAT-UCAST4:OTHER;${BAT:BAT-UCAST4} && not (${BAT:BAT-UCAST4:IP4} || ${BAT:BAT-UCAST4:IP6} || ${BAT:BAT-UCAST4:BLA} || ${BAT:BAT-UCAST4:ARP} || ${BAT:BAT-UCAST4:IPX} || ${BAT:BAT-UCAST4:NETBEUI} || ${BAT:BAT-UCAST4:LLDP})
|
||||
|
||||
BAT:BAT-UCAST_TVLV:IP4;${BAT:BAT-UCAST_TVLV} && ${IP4}
|
||||
BAT:BAT-UCAST_TVLV:IP6;${BAT:BAT-UCAST_TVLV} && ${IP6}
|
||||
BAT:BAT-UCAST_TVLV:BLA;${BAT:BAT-UCAST_TVLV} && ${BLA}
|
||||
BAT:BAT-UCAST_TVLV:ARP;${BAT:BAT-UCAST_TVLV} && ${ARP}
|
||||
BAT:BAT-UCAST_TVLV:IPX;${BAT:BAT-UCAST_TVLV} && ${IPX}
|
||||
BAT:BAT-UCAST_TVLV:NETBEUI;${BAT:BAT-UCAST_TVLV} && ${NETBEUI}
|
||||
BAT:BAT-UCAST_TVLV:LLDP;${BAT:BAT-UCAST_TVLV} && ${LLDP}
|
||||
BAT:BAT-UCAST_TVLV:OTHER;${BAT:BAT-UCAST_TVLV} && not (${BAT:BAT-UCAST_TVLV:IP4} || ${BAT:BAT-UCAST_TVLV:IP6} || ${BAT:BAT-UCAST_TVLV:BLA} || ${BAT:BAT-UCAST_TVLV:ARP} || ${BAT:BAT-UCAST_TVLV:IPX} || ${BAT:BAT-UCAST_TVLV:NETBEUI} || ${BAT:BAT-UCAST_TVLV:LLDP})
|
||||
|
||||
|
||||
BAT:BAT-BCAST:IP4:IGMP;${BAT:BAT-BCAST} && ${IP4:IGMP}
|
||||
BAT:BAT-BCAST:IP4:IGMP:QUERY-V1;${BAT:BAT-BCAST} && ${IP4:IGMP:QUERY-V1}
|
||||
BAT:BAT-BCAST:IP4:IGMP:QUERY-V2;${BAT:BAT-BCAST} && ${IP4:IGMP:QUERY-V2}
|
||||
BAT:BAT-BCAST:IP4:IGMP:QUERY-V3;${BAT:BAT-BCAST} && ${IP4:IGMP:QUERY-V3}
|
||||
BAT:BAT-BCAST:IP4:IGMP:QUERY-UNKNOWN;${BAT:BAT-BCAST} && ${IP4:IGMP:QUERY-UNKNOWN}
|
||||
BAT:BAT-BCAST:IP4:IGMP:REPORT-V1;${BAT:BAT-BCAST} && ${IP4:IGMP:REPORT-V1}
|
||||
BAT:BAT-BCAST:IP4:IGMP:REPORT-V2;${BAT:BAT-BCAST} && ${IP4:IGMP:REPORT-V2}
|
||||
BAT:BAT-BCAST:IP4:IGMP:LEAVE-V2;${BAT:BAT-BCAST} && ${IP4:IGMP:LEAVE-V2}
|
||||
BAT:BAT-BCAST:IP4:IGMP:REPORT-V3;${BAT:BAT-BCAST} && ${IP4:IGMP:REPORT-V3}
|
||||
BAT:BAT-BCAST:IP4:IGMP:MRD-ADV;${BAT:BAT-BCAST} && ${IP4:IGMP:MRD-ADV}
|
||||
BAT:BAT-BCAST:IP4:IGMP:MRD-SOL;${BAT:BAT-BCAST} && ${IP4:IGMP:MRD-SOL}
|
||||
BAT:BAT-BCAST:IP4:IGMP:MRD-TERM;${BAT:BAT-BCAST} && ${IP4:IGMP:MRD-TERM}
|
||||
|
||||
BAT:BAT-BCAST:IP4:MC;${BAT:BAT-BCAST} && ${IP4:MC}
|
||||
BAT:BAT-BCAST:IP4:MC:PIM;${BAT:BAT-BCAST} && ${IP4:MC:PIM}
|
||||
BAT:BAT-BCAST:IP4:MC:OSPF;${BAT:BAT-BCAST} && ${IP4:MC:OSPF}
|
||||
BAT:BAT-BCAST:IP4:MC:MANET;${BAT:BAT-BCAST} && ${IP4:MC:MANET}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP;${BAT:BAT-BCAST} && ${IP4:MC:UDP}
|
||||
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:SSDP;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%SSDP}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:LLMNR;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%LLMNR}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:MDNS;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%MDNS}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:NB-NS;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%NB-NS}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:NB-DGM;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%NB-DGM}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:DP-LSP;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%DP-LSP}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:TRAP-DAEMON;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%TRAP-DAEMON}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:DHCP4;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%DHCP4}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:DHCP6;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%DHCP6}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:WS-DISC;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%WS-DISC}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:WSP;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%WSP}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:TEREDO;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%TEREDO}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:SPOTIFY;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%SPOTIFY}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:SIP;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%SIP}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:BT-LPD;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%BT-LPD}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:NVBM;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%NVBM}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:SVRLOC;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%SVRLOC}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:ENPC;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%ENPC}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:QTSTREAM;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%QTSTREAM}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:HDHOMERUN;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%HDHOMERUN}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:PLEX-DISC0;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%PLEX-DISC0}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:PLEX-DISC2;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%PLEX-DISC2}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:PLEX-DISC3;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%PLEX-DISC3}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:PLEX-DISC4;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%PLEX-DISC4}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:BT-UTP;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%BT-UTP}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:WF-BSSERV;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%WF-BSSERV}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:FAXIMUM;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%FAXIMUM}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:TOMCAT;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%TOMCAT}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:DISTINCT;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%DISTINCT}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:UDP-25412;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%UDP-25412}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:UDP-10203;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%UDP-10203}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:UDP-60128;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%UDP-60128}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:COREL-VNC;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%COREL-VNC}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:HPVMMCTRL;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%HPVMMCTRL}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:CBT;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%CBT}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:MCAFEE;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%MCAFEE}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:UDP-39455;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%UDP-39455}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:UDP-889;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%UDP-889}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:UDP-16962;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%UDP-16962}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:TSEQ;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%TSEQ}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:CANON-BJNP;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%CANON-BJNP}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:RIP;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%RIP}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:RIPNG;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%RIPNG}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:OLSRV1;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%OLSRV1}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:BABEL;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%BABEL}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:MANET;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%MANET}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:RESPONDD-QRY;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%RESPONDD-QRY}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:SYNCTHING-LPD;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%SYNCTHING-LPD}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:USTEER;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%USTEER}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:L3ROAMD;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%L3ROAMD}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:MMFD;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%MMFD}
|
||||
BAT:BAT-BCAST:IP4:MC:UDP:RETICULUM;${BAT:BAT-BCAST:IP4:MC:UDP} && ${%RETICULUM}
|
||||
|
||||
BAT:BAT-BCAST:IP6:MC;${BAT:BAT-BCAST} && ${IP6:MC}
|
||||
BAT:BAT-BCAST:IP6:MC:PIM;${BAT:BAT-BCAST} && ${IP6:MC:PIM}
|
||||
BAT:BAT-BCAST:IP6:MC:OSPF;${BAT:BAT-BCAST} && ${IP6:MC:OSPF}
|
||||
BAT:BAT-BCAST:IP6:MC:MANET;${BAT:BAT-BCAST} && ${IP6:MC:MANET}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP;${BAT:BAT-BCAST} && ${IP6:MC:UDP}
|
||||
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:SSDP;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%SSDP}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:LLMNR;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%LLMNR}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:MDNS;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%MDNS}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:NB-NS;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%NB-NS}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:NB-DGM;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%NB-DGM}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:DP-LSP;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%DP-LSP}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:TRAP-DAEMON;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%TRAP-DAEMON}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:DHCP4;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%DHCP4}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:DHCP6;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%DHCP6}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:WS-DISC;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%WS-DISC}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:WSP;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%WSP}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:TEREDO;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%TEREDO}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:SPOTIFY;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%SPOTIFY}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:SIP;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%SIP}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:BT-LPD;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%BT-LPD}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:NVBM;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%NVBM}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:SVRLOC;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%SVRLOC}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:ENPC;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%ENPC}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:QTSTREAM;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%QTSTREAM}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:HDHOMERUN;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%HDHOMERUN}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:PLEX-DISC0;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%PLEX-DISC0}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:PLEX-DISC2;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%PLEX-DISC2}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:PLEX-DISC3;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%PLEX-DISC3}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:PLEX-DISC4;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%PLEX-DISC4}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:BT-UTP;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%BT-UTP}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:WF-BSSERV;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%WF-BSSERV}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:FAXIMUM;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%FAXIMUM}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:TOMCAT;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%TOMCAT}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:DISTINCT;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%DISTINCT}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:UDP-25412;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%UDP-25412}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:UDP-10203;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%UDP-10203}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:UDP-60128;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%UDP-60128}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:COREL-VNC;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%COREL-VNC}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:HPVMMCTRL;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%HPVMMCTRL}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:CBT;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%CBT}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:MCAFEE;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%MCAFEE}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:UDP-39455;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%UDP-39455}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:UDP-889;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%UDP-889}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:UDP-16962;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%UDP-16962}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:TSEQ;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%TSEQ}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:CANON-BJNP;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%CANON-BJNP}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:RIP;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%RIP}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:RIPNG;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%RIPNG}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:OLSRV1;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%OLSRV1}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:BABEL;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%BABEL}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:MANET;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%MANET}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:RESPONDD-QRY;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%RESPONDD-QRY}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:SYNCTHING-LPD;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%SYNCTHING-LPD}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:USTEER;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%USTEER}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:L3ROAMD;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%L3ROAMD}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:MMFD;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%MMFD}
|
||||
BAT:BAT-BCAST:IP6:MC:UDP:RETICULUM;${BAT:BAT-BCAST:IP6:MC:UDP} && ${%RETICULUM}
|
||||
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6;${BAT:BAT-BCAST} && ${IP6:MC:HBH6}
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6;${BAT:BAT-BCAST} && ${IP6:MC:ICMP6}
|
||||
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:QUERY-V1;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:QUERY-V1}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:QUERY-V1:GENERAL;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:QUERY-V1:GENERAL}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:QUERY-V1:ADDRSPEC;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:QUERY-V1:ADDRSPEC}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:QUERY-V2;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:QUERY-V2}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:QUERY-V2:GENERAL;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:QUERY-V2:GENERAL}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:QUERY-V2:ADDRSPEC;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:QUERY-V2:ADDRSPEC}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:QUERY-UNKNOWN;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:QUERY-UNKNOWN}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:REPORT-V1;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:REPORT-V1}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:DONE-V1;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:DONE-V1}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:REPORT-V2;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:REPORT-V2}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:MRD-ADV;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:MRD-ADV}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:MRD-SOL;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:MRD-SOL}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:MLD:MRD-TERM;${BAT:BAT-BCAST} && ${IP6:MC:HBH6:MLD:MRD-TERM}
|
||||
BAT:BAT-BCAST:IP6:MC:HBH6:OTHER;${BAT:BAT-BCAST} && ${IP6:MC:HBH6} and not (${BAT:BAT-BCAST:IP6:MC:HBH6:MLD})
|
||||
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6:ECHOREQ;${BAT:BAT-BCAST} && ${IP6:MC:ICMP6:ECHOREQ}
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6:ECHOREP;${BAT:BAT-BCAST} && ${IP6:MC:ICMP6:ECHOREP}
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6:NDSOL;${BAT:BAT-BCAST} && ${IP6:MC:ICMP6:NDSOL}
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6:NDADV;${BAT:BAT-BCAST} && ${IP6:MC:ICMP6:NDADV}
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6:NDADV:UNSOL;${BAT:BAT-BCAST} and ${IP6:MC:ICMP6:NDADV:UNSOL}
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6:NDADV:OTHER;${BAT:BAT-BCAST} and ${IP6:MC:ICMP6:NDADV:OTHER}
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6:RTRSOL;${BAT:BAT-BCAST} && ${IP6:MC:ICMP6:RTRSOL}
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6:RTRADV;${BAT:BAT-BCAST} && ${IP6:MC:ICMP6:RTRADV}
|
||||
BAT:BAT-BCAST:IP6:MC:ICMP6:OTHER;${BAT:BAT-BCAST} && ${IP6:MC:ICMP6:OTHER}
|
||||
|
||||
BAT:BAT-BCAST:BLA:CLAIM;${BAT:BAT-BCAST} and ${BLA:CLAIM}
|
||||
BAT:BAT-BCAST:BLA:UNCLAIM;${BAT:BAT-BCAST} and ${BLA:UNCLAIM}
|
||||
BAT:BAT-BCAST:BLA:ANNOUNCE;${BAT:BAT-BCAST} and ${BLA:ANNOUNCE}
|
||||
BAT:BAT-BCAST:BLA:REQUEST;${BAT:BAT-BCAST} and ${BLA:REQUEST}
|
||||
BAT:BAT-BCAST:BLA:LOOPDETECT;${BAT:BAT-BCAST} and ${BLA:LOOPDETECT}
|
||||
|
||||
BAT:BAT-BCAST:ARP:REQ;${BAT:BAT-BCAST} and ${ARP:REQ}
|
||||
BAT:BAT-BCAST:ARP:REQ:UNSOL;${BAT:BAT-BCAST} and ${ARP:REQ:UNSOL}
|
||||
BAT:BAT-BCAST:ARP:REQ:OTHER;${BAT:BAT-BCAST} and ${ARP:REQ:OTHER}
|
||||
BAT:BAT-BCAST:ARP:REP;${BAT:BAT-BCAST} and ${ARP:REP}
|
||||
BAT:BAT-BCAST:ARP:REP:UNSOL;${BAT:BAT-BCAST} and ${ARP:REP:UNSOL}
|
||||
BAT:BAT-BCAST:ARP:REP:OTHER;${BAT:BAT-BCAST} and ${ARP:REP:OTHER}
|
||||
|
||||
|
||||
BAT:BAT-UCAST:IP4:MC;${BAT:BAT-UCAST} && ${IP4:MC}
|
||||
BAT:BAT-UCAST:IP4:MC:PIM;${BAT:BAT-UCAST} && ${IP4:MC:PIM}
|
||||
BAT:BAT-UCAST:IP4:MC:OSPF;${BAT:BAT-UCAST} && ${IP4:MC:OSPF}
|
||||
BAT:BAT-UCAST:IP4:MC:MANET;${BAT:BAT-UCAST} && ${IP4:MC:MANET}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP;${BAT:BAT-UCAST} && ${IP4:MC:UDP}
|
||||
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:SSDP;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%SSDP}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:LLMNR;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%LLMNR}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:MDNS;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%MDNS}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:NB-NS;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%NB-NS}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:NB-DGM;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%NB-DGM}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:DP-LSP;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%DP-LSP}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:TRAP-DAEMON;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%TRAP-DAEMON}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:DHCP4;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%DHCP4}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:DHCP6;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%DHCP6}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:WS-DISC;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%WS-DISC}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:WSP;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%WSP}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:TEREDO;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%TEREDO}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:SPOTIFY;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%SPOTIFY}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:SIP;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%SIP}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:BT-LPD;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%BT-LPD}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:NVBM;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%NVBM}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:SVRLOC;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%SVRLOC}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:ENPC;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%ENPC}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:QTSTREAM;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%QTSTREAM}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:HDHOMERUN;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%HDHOMERUN}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:PLEX-DISC0;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%PLEX-DISC0}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:PLEX-DISC2;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%PLEX-DISC2}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:PLEX-DISC3;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%PLEX-DISC3}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:PLEX-DISC4;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%PLEX-DISC4}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:BT-UTP;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%BT-UTP}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:WF-BSSERV;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%WF-BSSERV}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:FAXIMUM;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%FAXIMUM}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:TOMCAT;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%TOMCAT}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:DISTINCT;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%DISTINCT}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:UDP-25412;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%UDP-25412}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:UDP-10203;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%UDP-10203}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:UDP-60128;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%UDP-60128}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:COREL-VNC;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%COREL-VNC}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:HPVMMCTRL;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%HPVMMCTRL}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:CBT;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%CBT}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:MCAFEE;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%MCAFEE}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:UDP-39455;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%UDP-39455}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:UDP-889;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%UDP-889}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:UDP-16962;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%UDP-16962}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:TSEQ;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%TSEQ}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:CANON-BJNP;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%CANON-BJNP}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:RIP;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%RIP}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:RIPNG;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%RIPNG}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:OLSRV1;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%OLSRV1}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:BABEL;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%BABEL}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:MANET;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%MANET}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:RESPONDD-QRY;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%RESPONDD-QRY}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:SYNCTHING-LPD;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%SYNCTHING-LPD}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:USTEER;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%USTEER}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:L3ROAMD;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%L3ROAMD}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:MMFD;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%MMFD}
|
||||
BAT:BAT-UCAST:IP4:MC:UDP:RETICULUM;${BAT:BAT-UCAST:IP4:MC:UDP} && ${%RETICULUM}
|
||||
|
||||
BAT:BAT-UCAST:IP6:MC;${BAT:BAT-UCAST} && ${IP6:MC}
|
||||
BAT:BAT-UCAST:IP6:MC:PIM;${BAT:BAT-UCAST} && ${IP6:MC:PIM}
|
||||
BAT:BAT-UCAST:IP6:MC:OSPF;${BAT:BAT-UCAST} && ${IP6:MC:OSPF}
|
||||
BAT:BAT-UCAST:IP6:MC:MANET;${BAT:BAT-UCAST} && ${IP6:MC:MANET}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP;${BAT:BAT-UCAST} && ${IP6:MC:UDP}
|
||||
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:SSDP;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%SSDP}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:LLMNR;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%LLMNR}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:MDNS;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%MDNS}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:NB-NS;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%NB-NS}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:NB-DGM;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%NB-DGM}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:DP-LSP;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%DP-LSP}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:TRAP-DAEMON;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%TRAP-DAEMON}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:DHCP4;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%DHCP4}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:DHCP6;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%DHCP6}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:WS-DISC;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%WS-DISC}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:WSP;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%WSP}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:TEREDO;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%TEREDO}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:SPOTIFY;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%SPOTIFY}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:SIP;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%SIP}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:BT-LPD;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%BT-LPD}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:NVBM;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%NVBM}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:SVRLOC;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%SVRLOC}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:ENPC;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%ENPC}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:QTSTREAM;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%QTSTREAM}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:HDHOMERUN;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%HDHOMERUN}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:PLEX-DISC0;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%PLEX-DISC0}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:PLEX-DISC2;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%PLEX-DISC2}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:PLEX-DISC3;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%PLEX-DISC3}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:PLEX-DISC4;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%PLEX-DISC4}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:BT-UTP;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%BT-UTP}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:WF-BSSERV;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%WF-BSSERV}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:FAXIMUM;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%FAXIMUM}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:TOMCAT;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%TOMCAT}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:DISTINCT;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%DISTINCT}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:UDP-25412;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%UDP-25412}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:UDP-10203;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%UDP-10203}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:UDP-60128;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%UDP-60128}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:COREL-VNC;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%COREL-VNC}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:HPVMMCTRL;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%HPVMMCTRL}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:CBT;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%CBT}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:MCAFEE;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%MCAFEE}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:UDP-39455;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%UDP-39455}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:UDP-889;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%UDP-889}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:UDP-16962;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%UDP-16962}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:TSEQ;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%TSEQ}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:CANON-BJNP;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%CANON-BJNP}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:RIP;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%RIP}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:RIPNG;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%RIPNG}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:OLSRV1;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%OLSRV1}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:BABEL;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%BABEL}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:MANET;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%MANET}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:RESPONDD-QRY;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%RESPONDD-QRY}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:SYNCTHING-LPD;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%SYNCTHING-LPD}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:USTEER;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%USTEER}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:L3ROAMD;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%L3ROAMD}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:MMFD;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%MMFD}
|
||||
BAT:BAT-UCAST:IP6:MC:UDP:RETICULUM;${BAT:BAT-UCAST:IP6:MC:UDP} && ${%RETICULUM}
|
||||
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6;${BAT:BAT-UCAST} && ${IP6:MC:HBH6}
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6}
|
||||
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:QUERY-V1;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:QUERY-V1}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:QUERY-V1:GENERAL;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:QUERY-V1:GENERAL}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:QUERY-V1:ADDRSPEC;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:QUERY-V1:ADDRSPEC}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:QUERY-V2;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:QUERY-V2}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:QUERY-V2:GENERAL;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:QUERY-V2:GENERAL}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:QUERY-V2:ADDRSPEC;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:QUERY-V2:ADDRSPEC}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:QUERY-UNKNOWN;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:QUERY-UNKNOWN}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:REPORT-V1;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:REPORT-V1}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:DONE-V1;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:DONE-V1}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:REPORT-V2;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:REPORT-V2}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:MRD-ADV;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:MRD-ADV}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:MRD-SOL;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:MRD-SOL}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:MLD:MRD-TERM;${BAT:BAT-UCAST} && ${IP6:MC:HBH6:MLD:MRD-TERM}
|
||||
BAT:BAT-UCAST:IP6:MC:HBH6:OTHER;${BAT:BAT-UCAST} && ${IP6:MC:HBH6} and not (${BAT:BAT-UCAST:IP6:MC:HBH6:MLD})
|
||||
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6:ECHOREQ;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6:ECHOREQ}
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6:ECHOREP;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6:ECHOREP}
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6:NDSOL;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6:NDSOL}
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6:NDADV;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6:NDADV}
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6:NDADV:UNSOL;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6:NDADV:UNSOL}
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6:NDADV:OTHER;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6:NDADV:OTHER}
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6:RTRSOL;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6:RTRSOL}
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6:RTRADV;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6:RTRADV}
|
||||
BAT:BAT-UCAST:IP6:MC:ICMP6:OTHER;${BAT:BAT-UCAST} && ${IP6:MC:ICMP6:OTHER}
|
||||
|
||||
BAT:BAT-UCAST:BLA:CLAIM;${BAT:BAT-UCAST} and ${BLA:CLAIM}
|
||||
BAT:BAT-UCAST:BLA:UNCLAIM;${BAT:BAT-UCAST} and ${BLA:UNCLAIM}
|
||||
BAT:BAT-UCAST:BLA:ANNOUNCE;${BAT:BAT-UCAST} and ${BLA:ANNOUNCE}
|
||||
BAT:BAT-UCAST:BLA:REQUEST;${BAT:BAT-UCAST} and ${BLA:REQUEST}
|
||||
BAT:BAT-UCAST:BLA:LOOPDETECT;${BAT:BAT-UCAST} and ${BLA:LOOPDETECT}
|
||||
|
||||
BAT:BAT-UCAST:ARP:REQ;${BAT:BAT-UCAST} and ${ARP:REQ}
|
||||
BAT:BAT-UCAST:ARP:REQ:UNSOL;${BAT:BAT-UCAST} and ${ARP:REQ:UNSOL}
|
||||
BAT:BAT-UCAST:ARP:REQ:OTHER;${BAT:BAT-UCAST} and ${ARP:REQ:OTHER}
|
||||
BAT:BAT-UCAST:ARP:REP;${BAT:BAT-UCAST} and ${ARP:REP}
|
||||
BAT:BAT-UCAST:ARP:REP:UNSOL;${BAT:BAT-UCAST} and ${ARP:REP:UNSOL}
|
||||
BAT:BAT-UCAST:ARP:REP:OTHER;${BAT:BAT-UCAST} and ${ARP:REP:OTHER}
|
@ -0,0 +1,67 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ -z "$IFNAME" ] && exit 0
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
SOCKETSSUB="mesh"
|
||||
else
|
||||
SOCKETSSUB="$1"
|
||||
fi
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
lock /var/lock/gluon_bpfcountd.lock
|
||||
|
||||
BPFCOUNTD_RUN="/var/run/bpfcountd"
|
||||
mkdir -p "${BPFCOUNTD_RUN}/gluon-sockets/$SOCKETSSUB"
|
||||
|
||||
export UCI_CONFIG_DIR="${BPFCOUNTD_RUN}/gluon-config"
|
||||
mkdir -p "${UCI_CONFIG_DIR}"
|
||||
touch "${UCI_CONFIG_DIR}/bpfcountd"
|
||||
|
||||
|
||||
# Skip anything which might be unicast payload to avoid
|
||||
# a noticeable performance impact:
|
||||
# -> a batadv unicast packet with an IP unicast destination in
|
||||
# the inner ethernet header; all batadv unicast fragments
|
||||
# Note: batadv unicast fragments might contain a multicast
|
||||
# packet, too (though unlikely, usually they are smaller
|
||||
# than MTU).
|
||||
|
||||
# All IP packets with a unicast destination, except
|
||||
# IGMP, OSPF (89), PIM (103) or MANET (138)
|
||||
PREFILTER_IP4_UC="(ip and not ip multicast and not igmp and not (ip proto (89 or 103 or 138)))"
|
||||
PREFILTER_IP6_UC="(ip6 and not ip6 multicast and not ip6 proto 0 and not (ip6 proto (89 or 103 or 138)))"
|
||||
PREFILTER_IP_UC="(${PREFILTER_IP4_UC} or ${PREFILTER_IP6_UC})"
|
||||
|
||||
PREFILTER_CLIENT="not ${PREFILTER_IP_UC}"
|
||||
PREFILTER_MESH="not (batadv 15 unicast and ${PREFILTER_IP_UC}) and not batadv 15 unicast_frag"
|
||||
PREFILTER="${PREFILTER_CLIENT} and ${PREFILTER_MESH}"
|
||||
|
||||
SECTION_IN="gluon_${IFNAME//-/_}_in"
|
||||
SECTION_OUT="gluon_${IFNAME//-/_}_out"
|
||||
uci -c "${UCI_CONFIG_DIR}" batch <<-EOF
|
||||
set bpfcountd.${SECTION_IN}="bpfcountd"
|
||||
set bpfcountd.${SECTION_IN}.ifname=${IFNAME}
|
||||
set bpfcountd.${SECTION_IN}.prefilter="inbound and (${PREFILTER})"
|
||||
set bpfcountd.${SECTION_IN}.filterfile='/lib/gluon/bpfcountd/mesh.filters'
|
||||
set bpfcountd.${SECTION_IN}.buffersize='131072'
|
||||
set bpfcountd.${SECTION_IN}.disabled='0'
|
||||
|
||||
set bpfcountd.${SECTION_OUT}="bpfcountd"
|
||||
set bpfcountd.${SECTION_OUT}.ifname=${IFNAME}
|
||||
set bpfcountd.${SECTION_OUT}.prefilter="outbound and (${PREFILTER})"
|
||||
set bpfcountd.${SECTION_OUT}.filterfile='/lib/gluon/bpfcountd/mesh.filters'
|
||||
set bpfcountd.${SECTION_OUT}.buffersize='131072'
|
||||
set bpfcountd.${SECTION_OUT}.disabled='0'
|
||||
|
||||
commit bpfcountd
|
||||
EOF
|
||||
|
||||
ln -s "../../${SECTION_IN}.sock" "${BPFCOUNTD_RUN}/gluon-sockets/$SOCKETSSUB/${IFNAME}.in.sock"
|
||||
ln -s "../../${SECTION_OUT}.sock" "${BPFCOUNTD_RUN}/gluon-sockets/$SOCKETSSUB/${IFNAME}.out.sock"
|
||||
|
||||
/etc/init.d/bpfcountd start "${SECTION_IN}"
|
||||
/etc/init.d/bpfcountd start "${SECTION_OUT}"
|
||||
|
||||
lock -u /var/lock/gluon_bpfcountd.lock
|
@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ -z "$IFNAME" ] && exit 0
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
BPFCOUNTD_RUN="/var/run/bpfcountd"
|
||||
|
||||
lock /var/lock/gluon_bpfcountd.lock
|
||||
export UCI_CONFIG_DIR="${BPFCOUNTD_RUN}/gluon-config"
|
||||
|
||||
|
||||
bpfcountd_uci_delete() {
|
||||
local cfg="$1"
|
||||
local uci_ifname
|
||||
|
||||
config_get uci_ifname "$cfg" ifname
|
||||
[ "${uci_ifname}" = "$IFNAME" ] || return
|
||||
|
||||
uci -c "${UCI_CONFIG_DIR}" delete "bpfcountd.$cfg"
|
||||
}
|
||||
|
||||
/etc/init.d/bpfcountd stop "gluon_${IFNAME//-/_}_in"
|
||||
/etc/init.d/bpfcountd stop "gluon_${IFNAME//-/_}_out"
|
||||
|
||||
rm "${BPFCOUNTD_RUN}/gluon-sockets/"*"/${IFNAME}.in.sock"
|
||||
rm "${BPFCOUNTD_RUN}/gluon-sockets/"*"/${IFNAME}.out.sock"
|
||||
|
||||
config_load bpfcountd
|
||||
config_foreach bpfcountd_uci_delete bpfcountd
|
||||
uci -c "${UCI_CONFIG_DIR}" commit bpfcountd
|
||||
|
||||
lock -u /var/lock/gluon_bpfcountd.lock
|
6
package/gluon-statistics-mcast/src/Makefile
Normal file
6
package/gluon-statistics-mcast/src/Makefile
Normal file
@ -0,0 +1,6 @@
|
||||
all: respondd.so
|
||||
|
||||
CFLAGS += -Wall
|
||||
|
||||
respondd.so: respondd.c
|
||||
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -fPIC -D_GNU_SOURCE -o $@ $^ $(LDLIBS) -lgluonutil -luci
|
491
package/gluon-statistics-mcast/src/respondd.c
Normal file
491
package/gluon-statistics-mcast/src/respondd.c
Normal file
@ -0,0 +1,491 @@
|
||||
/*
|
||||
Copyright (c) 2021, Linus Lüssing <linus.luessing@c0d3.blue>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#include <respondd.h>
|
||||
|
||||
#include <json-c/json.h>
|
||||
#include <libgluonutil.h>
|
||||
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
#include <regex.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/un.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define BPFCOUNTD_SOCKS_DIR "/var/run/bpfcountd/gluon-sockets"
|
||||
|
||||
#define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0]))
|
||||
|
||||
enum capdir {
|
||||
CAP_IN,
|
||||
CAP_OUT,
|
||||
CAP_UNDEF,
|
||||
CAP_MAX,
|
||||
};
|
||||
|
||||
static const char *dirstr[CAP_MAX] = {
|
||||
[CAP_IN] = "in",
|
||||
[CAP_OUT] = "out",
|
||||
[CAP_UNDEF] = "",
|
||||
};
|
||||
|
||||
static int check_socket_suffix(const char *socketname)
|
||||
{
|
||||
unsigned int offset;
|
||||
|
||||
if (strlen(socketname) <= strlen(".sock"))
|
||||
return -EINVAL;
|
||||
|
||||
offset = strlen(socketname) - strlen(".sock");
|
||||
if (strcmp(&socketname[offset], ".sock"))
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int regexecmp(const char *re_pattern, const char *re_string)
|
||||
{
|
||||
regex_t regex;
|
||||
regmatch_t pmatch[1];
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (regcomp(®ex, re_pattern, 0))
|
||||
return -EINVAL;
|
||||
|
||||
if (!regexec(®ex, re_string, ARRAY_SIZE(pmatch), pmatch, 0))
|
||||
ret = 0;
|
||||
|
||||
regfree(®ex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static enum capdir parse_socket_dir(const char *socketname)
|
||||
{
|
||||
if (!regexecmp("\\.in\\.sock$", socketname))
|
||||
return CAP_IN;
|
||||
else if (!regexecmp("\\.out\\.sock$", socketname))
|
||||
return CAP_OUT;
|
||||
else
|
||||
return CAP_UNDEF;
|
||||
}
|
||||
|
||||
static int parse_socket_iface(const char *socketname, enum capdir dir,
|
||||
char *iface)
|
||||
{
|
||||
unsigned int iface_len = strlen(socketname);
|
||||
|
||||
if (dir == CAP_IN)
|
||||
iface_len -= strlen(".in.sock");
|
||||
else if (dir == CAP_OUT)
|
||||
iface_len -= strlen(".out.sock");
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
if (iface_len >= IFNAMSIZ)
|
||||
return -EINVAL;
|
||||
|
||||
memset(iface, 0, IFNAMSIZ);
|
||||
strncpy(iface, socketname, iface_len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct json_object *get_json_new(struct json_object *parent,
|
||||
const char *key)
|
||||
{
|
||||
struct json_object *child = NULL;
|
||||
json_bool ret;
|
||||
|
||||
ret = json_object_object_get_ex(parent, key, &child);
|
||||
if (ret && child) {
|
||||
/* sanity check */
|
||||
if (!json_object_is_type(child, json_type_object))
|
||||
return NULL;
|
||||
|
||||
return child;
|
||||
}
|
||||
|
||||
child = json_object_new_object();
|
||||
if (!child)
|
||||
return NULL;
|
||||
|
||||
/* json-c 0.12, should check return codes for >= 0.13 */
|
||||
json_object_object_add(parent, key, child);
|
||||
|
||||
return child;
|
||||
}
|
||||
|
||||
static struct json_object *parse_socket_name(const char *socketname,
|
||||
struct json_object *obj,
|
||||
enum capdir *dir)
|
||||
{
|
||||
int ret;
|
||||
char iface[IFNAMSIZ];
|
||||
|
||||
*dir = parse_socket_dir(socketname);
|
||||
if (*dir == CAP_UNDEF)
|
||||
return NULL;
|
||||
|
||||
ret = parse_socket_iface(socketname, *dir, iface);
|
||||
if (ret < 0)
|
||||
return NULL;
|
||||
|
||||
return get_json_new(obj, iface);
|
||||
}
|
||||
|
||||
static int parse_num(const char *start, int64_t *num)
|
||||
{
|
||||
unsigned long long value;
|
||||
char *endptr;
|
||||
|
||||
if (*start == '-')
|
||||
return -EINVAL;
|
||||
|
||||
value = strtoull(start, &endptr, 10);
|
||||
if ((value == ULLONG_MAX && errno == ERANGE) ||
|
||||
start == endptr)
|
||||
return -EINVAL;
|
||||
|
||||
/* limit to int64 max for json-c */
|
||||
if (value > INT64_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
*num = (int64_t)value;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int add_num_to_json(struct json_object *dir_obj, const char *key,
|
||||
int64_t num)
|
||||
{
|
||||
struct json_object *elem;
|
||||
|
||||
elem = json_object_new_int64(num);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
/* json-c < 0.13 */
|
||||
json_object_object_add(dir_obj, key, elem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Example:
|
||||
* {
|
||||
* "bytes": 12345,
|
||||
* "packets": 456
|
||||
* }
|
||||
*/
|
||||
static struct json_object *create_dir_object(int64_t bytes, int64_t packets)
|
||||
{
|
||||
struct json_object *dir_obj;
|
||||
int ret;
|
||||
|
||||
dir_obj = json_object_new_object();
|
||||
if (!dir_obj)
|
||||
return NULL;
|
||||
|
||||
ret = add_num_to_json(dir_obj, "bytes", bytes);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
ret = add_num_to_json(dir_obj, "packets", packets);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
return dir_obj;
|
||||
err:
|
||||
json_object_put(dir_obj);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int add_line_to_json(struct json_object *iface_obj, enum capdir dir,
|
||||
const char *rule, int64_t bytes, int64_t packets)
|
||||
{
|
||||
struct json_object *dir_obj, *rule_obj = NULL;
|
||||
int ret;
|
||||
|
||||
dir_obj = create_dir_object(bytes, packets);
|
||||
if (!dir_obj)
|
||||
return -ENOMEM;
|
||||
|
||||
rule_obj = get_json_new(iface_obj, rule);
|
||||
if (!rule_obj)
|
||||
goto err;
|
||||
|
||||
/* sanity check, should not exist yet */
|
||||
ret = json_object_object_get_ex(rule_obj, dirstr[dir], NULL);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
/* json-c < 0.13 */
|
||||
json_object_object_add(rule_obj, dirstr[dir], dir_obj);
|
||||
return 0;
|
||||
err:
|
||||
json_object_put(dir_obj);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Parses a line of the following format:
|
||||
* <rulename>:<bytes>:<packets>
|
||||
*
|
||||
* And adds it to the provided json object.
|
||||
*/
|
||||
static int parse_line(struct json_object *obj, enum capdir dir,
|
||||
char *line)
|
||||
{
|
||||
int64_t bytes;
|
||||
int64_t packets;
|
||||
char *start;
|
||||
int ret;
|
||||
|
||||
/* skip lines prefixed with '%' */
|
||||
if (line[0] == '%')
|
||||
return 0;
|
||||
|
||||
/* packets */
|
||||
start = strrchr(line, ':');
|
||||
if (!start)
|
||||
return -EINVAL;
|
||||
|
||||
ret = parse_num(&start[1], &packets);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
*start = '\0';
|
||||
|
||||
/* bytes */
|
||||
start = strrchr(line, ':');
|
||||
if (!start)
|
||||
return -EINVAL;
|
||||
|
||||
ret = parse_num(&start[1], &bytes);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
*start = '\0';
|
||||
/* line: is now rule name */
|
||||
|
||||
ret = add_line_to_json(obj, dir, line, bytes, packets);
|
||||
if (ret < 0)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int parse_socket(const char *socketname, struct json_object *iface_obj,
|
||||
enum capdir dir)
|
||||
{
|
||||
char linebuf[1024];
|
||||
struct sockaddr_un addr;
|
||||
int sd, ret;
|
||||
FILE *file;
|
||||
|
||||
sd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
if (sd < 0)
|
||||
return sd;
|
||||
|
||||
memset(&addr, 0, sizeof(addr));
|
||||
addr.sun_family = AF_UNIX;
|
||||
strncpy(addr.sun_path, socketname, sizeof(addr.sun_path) - 1);
|
||||
|
||||
ret = connect(sd, (const struct sockaddr *)&addr,
|
||||
sizeof(addr));
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
file = fdopen(sd, "r");
|
||||
if (!file) {
|
||||
ret = -EACCES;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Does this really help or maybe even worsen performance? */
|
||||
setlinebuf(file);
|
||||
|
||||
while (!feof(file)) {
|
||||
if (!fgets(linebuf, sizeof(linebuf)-1, file))
|
||||
break;
|
||||
|
||||
parse_line(iface_obj, dir, linebuf);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
out:
|
||||
close(sd);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void parse_socket_subdir(struct dirent *subdir, struct json_object *obj)
|
||||
{
|
||||
struct json_object *subdir_obj;
|
||||
struct dirent *dp;
|
||||
DIR *dir;
|
||||
|
||||
if (chdir(subdir->d_name) < 0)
|
||||
return;
|
||||
|
||||
dir = opendir("./");
|
||||
if (!dir)
|
||||
goto err;
|
||||
|
||||
subdir_obj = json_object_new_object();
|
||||
if (!subdir_obj)
|
||||
goto err2;
|
||||
|
||||
json_object_object_add(obj, subdir->d_name, subdir_obj);
|
||||
|
||||
/* scan: /var/run/bpfcountd/gluon-sockets/<subdir/
|
||||
* for *.sock files
|
||||
*/
|
||||
while ((dp = readdir(dir))) {
|
||||
struct json_object *iface_obj;
|
||||
enum capdir capdir;
|
||||
|
||||
/* skip emtpy names, hidden files, "." and ".." */
|
||||
if (dp->d_name[0] == '\0' || dp->d_name[0] == '.')
|
||||
continue;
|
||||
|
||||
/* skip files not ending in ".sock" */
|
||||
if (check_socket_suffix(dp->d_name) < 0)
|
||||
continue;
|
||||
|
||||
iface_obj = parse_socket_name(dp->d_name, subdir_obj, &capdir);
|
||||
if (!iface_obj)
|
||||
continue;
|
||||
|
||||
parse_socket(dp->d_name, iface_obj, capdir);
|
||||
}
|
||||
|
||||
err2:
|
||||
closedir(dir);
|
||||
err:
|
||||
chdir("..");
|
||||
}
|
||||
|
||||
static struct json_object *get_mcaststats(void)
|
||||
{
|
||||
struct json_object *obj;
|
||||
struct dirent *dp;
|
||||
DIR *dir;
|
||||
|
||||
obj = json_object_new_object();
|
||||
if (!obj)
|
||||
return NULL;
|
||||
|
||||
if (chdir(BPFCOUNTD_SOCKS_DIR) < 0)
|
||||
return obj;
|
||||
|
||||
dir = opendir("./");
|
||||
if (!dir)
|
||||
return obj;
|
||||
|
||||
/* scan: /var/run/bpfcountd/gluon-sockets/ for subdirectories
|
||||
* (e.g. "mesh" and "clients")
|
||||
*/
|
||||
while ((dp = readdir(dir))) {
|
||||
/* skip emtpy names, hidden files, "." and ".." */
|
||||
if (dp->d_name[0] == '\0' || dp->d_name[0] == '.')
|
||||
continue;
|
||||
|
||||
parse_socket_subdir(dp, obj);
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
return obj;
|
||||
}
|
||||
|
||||
static struct json_object *respondd_provider_mcaststats(void)
|
||||
{
|
||||
struct json_object *ret, *traffic, *mcaststats;
|
||||
|
||||
ret = json_object_new_object();
|
||||
if (!ret)
|
||||
return NULL;
|
||||
|
||||
traffic = json_object_new_object();
|
||||
if (!traffic)
|
||||
goto err1;
|
||||
|
||||
mcaststats = get_mcaststats();
|
||||
if (!mcaststats)
|
||||
goto err2;
|
||||
|
||||
/* json-c 0.12, should check return codes for >= 0.13 */
|
||||
json_object_object_add(traffic, "mcast", mcaststats);
|
||||
json_object_object_add(ret, "traffic", traffic);
|
||||
|
||||
return ret;
|
||||
|
||||
err2:
|
||||
json_object_put(traffic);
|
||||
err1:
|
||||
json_object_put(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Example output:
|
||||
*
|
||||
* {
|
||||
* "statistics-extended": {
|
||||
* "traffic": {
|
||||
* "mcast": {
|
||||
* "mesh": {
|
||||
* "mesh-vpn": {
|
||||
* "BAT-BCAST-ARP": {
|
||||
* "in": {
|
||||
* "bytes": 12345,
|
||||
* "packets": 456
|
||||
* },
|
||||
* "out": {
|
||||
* "bytes": 112233,
|
||||
* "packets": 11
|
||||
* }
|
||||
* },
|
||||
* "BAT-BCAST-IP6": {
|
||||
* "in": {
|
||||
* "bytes": 12345,
|
||||
* "packets": 456
|
||||
* "out": {
|
||||
* "bytes": 112233,
|
||||
* "packets": 11
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
const struct respondd_provider_info respondd_providers[] = {
|
||||
{"statistics-extended", respondd_provider_mcaststats},
|
||||
{}
|
||||
};
|
Loading…
Reference in New Issue
Block a user