in tcpdumpw/pkg/filter/l4_proto_filter_provider.go [41:84]
func (p *L4ProtoFilterProvider) Get(ctx context.Context) (*string, bool) {
if *p.Raw == "" ||
*p.Raw == "23" || // tcp(6) + udp(17)
*p.Raw == "0x17" || // tcp(0x06) + udp(0x11)
strings.EqualFold(*p.Raw, "ALL") ||
strings.EqualFold(*p.Raw, "ANY") ||
strings.EqualFold(*p.Raw, l4_PROTO_DEFAULT_FILTER) {
filter := string(l4_PROTO_DEFAULT_FILTER)
return &filter, true
}
protos := strings.Split(*p.Raw, ",")
if len(protos) == 0 || (len(protos) == 1 && protos[0] == "") {
filter := string(l4_PROTO_DEFAULT_FILTER)
return &filter, true
}
l4Protos := mapset.NewThreadUnsafeSet[string]()
for _, proto := range protos {
switch proto {
case "tcp", "6", "0x06":
l4Protos.Add(string(l4_PROTO_TCP_FILTER))
p.AddL4Proto(pcap.L4_PROTO_TCP)
case "udp", "17", "0x11":
l4Protos.Add(string(l4_PROTO_UDP_FILTER))
p.AddL4Proto(pcap.L4_PROTO_UDP)
case "icmp", "icmp4", "1", "0x01":
l4Protos.Add(string(l4_PROTO_ICMPv4_FILTER))
p.AddL4Proto(pcap.L4_PROTO_ICMP)
case "icmp6", "58", "0x3A":
l4Protos.Add(string(l4_PROTO_ICMPv6_FILTER))
p.AddL4Proto(pcap.L4_PROTO_ICMP6)
}
}
if l4Protos.IsEmpty() {
filter := string(l4_PROTO_DEFAULT_FILTER)
return &filter, true
}
filter := stringFormatter.Format("{0}", strings.Join(l4Protos.ToSlice(), " or "))
return &filter, true
}