ODPM 266: Go-libmemif + 2 examples. 00/8700/6
authorMilan Lenco <milan.lenco@pantheon.tech>
Wed, 11 Oct 2017 14:40:58 +0000 (16:40 +0200)
committerMilan Lenco <milan.lenco@pantheon.tech>
Fri, 13 Oct 2017 06:40:37 +0000 (08:40 +0200)
Change-Id: Icdb9b9eb2314eff6c96afe7996fcf2728291de4a
Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>
269 files changed:
Makefile
extras/libmemif/README.md [new file with mode: 0644]
extras/libmemif/adapter.go [new file with mode: 0644]
extras/libmemif/doc.go [new file with mode: 0644]
extras/libmemif/error.go [new file with mode: 0644]
extras/libmemif/examples/icmp-responder/icmp-responder.go [new file with mode: 0644]
extras/libmemif/examples/raw-data/raw-data.go [new file with mode: 0644]
glide.lock
glide.yaml
vendor/github.com/google/gopacket/.gitignore [new file with mode: 0644]
vendor/github.com/google/gopacket/.travis.gofmt.sh [new file with mode: 0755]
vendor/github.com/google/gopacket/.travis.golint.sh [new file with mode: 0755]
vendor/github.com/google/gopacket/.travis.govet.sh [new file with mode: 0755]
vendor/github.com/google/gopacket/.travis.yml [new file with mode: 0644]
vendor/github.com/google/gopacket/AUTHORS [new file with mode: 0644]
vendor/github.com/google/gopacket/CONTRIBUTING.md [new file with mode: 0644]
vendor/github.com/google/gopacket/LICENSE [new file with mode: 0644]
vendor/github.com/google/gopacket/README.md [new file with mode: 0644]
vendor/github.com/google/gopacket/afpacket/afpacket.go [new file with mode: 0644]
vendor/github.com/google/gopacket/afpacket/afpacket_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/afpacket/header.go [new file with mode: 0644]
vendor/github.com/google/gopacket/afpacket/options.go [new file with mode: 0644]
vendor/github.com/google/gopacket/afpacket/sockopt_linux.go [new file with mode: 0644]
vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go [new file with mode: 0644]
vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s [new file with mode: 0644]
vendor/github.com/google/gopacket/base.go [new file with mode: 0644]
vendor/github.com/google/gopacket/benchmark_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go [new file with mode: 0644]
vendor/github.com/google/gopacket/bytediff/bytediff.go [new file with mode: 0644]
vendor/github.com/google/gopacket/bytediff/bytediff_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/decode.go [new file with mode: 0644]
vendor/github.com/google/gopacket/doc.go [new file with mode: 0644]
vendor/github.com/google/gopacket/dumpcommand/tcpdump.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/arpscan/arpscan.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/bidirectional/main.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/bytediff/bytediff.png [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/bytediff/main.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/httpassembly/main.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/pcapdump/main.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/pcaplay/main.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/pfdump/main.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh [new file with mode: 0755]
vendor/github.com/google/gopacket/examples/reassemblydump/main.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/statsassembly/main.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/synscan/main.go [new file with mode: 0644]
vendor/github.com/google/gopacket/examples/util/util.go [new file with mode: 0644]
vendor/github.com/google/gopacket/flows.go [new file with mode: 0644]
vendor/github.com/google/gopacket/gc [new file with mode: 0755]
vendor/github.com/google/gopacket/ip4defrag/defrag.go [new file with mode: 0644]
vendor/github.com/google/gopacket/ip4defrag/defrag_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layerclass.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/.linted [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/arp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/base.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/base_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/bfd.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/bfd_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/cdp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ctp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/decode_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/dhcp_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/dhcpv4.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/dns.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/dns_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/doc.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/dot11.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/dot11_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/dot1q.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/dot1q_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/eap.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/eapol.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/endpoints.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/endpoints_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/enums.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/etherip.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ethernet.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/fddi.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/gen.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/gen_linted.sh [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/geneve.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/geneve_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/gre.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/gre_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/iana_ports.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/icmp4.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/icmp6.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/icmp6_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/igmp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/igmp_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ip4.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ip4_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ip6.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ip6_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ipsec.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ipsec_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/layertypes.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/linux_sll.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/llc.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/lldp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/loopback.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/mpls.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/mpls_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ndp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ntp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ntp_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ospf.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ospf_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/pflog.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ports.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/ppp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/pppoe.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/prism.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/prism_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/radiotap.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/radiotap_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/rudp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/sctp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/sflow.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/sflow_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/stp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/tcp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/tcp_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/tcpip.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/tcpip_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/test_creator.py [new file with mode: 0755]
vendor/github.com/google/gopacket/layers/udp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/udp_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/udplite.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/usb.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/usb_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/vrrp.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/vrrp_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/vxlan.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layers/vxlan_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/layertype.go [new file with mode: 0644]
vendor/github.com/google/gopacket/macs/benchmark_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/macs/doc.go [new file with mode: 0644]
vendor/github.com/google/gopacket/macs/gen.go [new file with mode: 0644]
vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go [new file with mode: 0644]
vendor/github.com/google/gopacket/packet.go [new file with mode: 0644]
vendor/github.com/google/gopacket/packet_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/parser.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/doc.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/pcap.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/pcap_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/pcap_tester.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/pcap_unix.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/pcap_windows.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/pcapgo_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/test_dns.pcap [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/test_ethernet.pcap [new file with mode: 0644]
vendor/github.com/google/gopacket/pcap/test_loopback.pcap [new file with mode: 0644]
vendor/github.com/google/gopacket/pcapgo/read.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcapgo/read_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcapgo/write.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pcapgo/write_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pfring/doc.go [new file with mode: 0644]
vendor/github.com/google/gopacket/pfring/pfring.go [new file with mode: 0644]
vendor/github.com/google/gopacket/reassembly/cap2test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/reassembly/memory.go [new file with mode: 0644]
vendor/github.com/google/gopacket/reassembly/tcpassembly.go [new file with mode: 0644]
vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/reassembly/tcpcheck.go [new file with mode: 0644]
vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/routing/common.go [new file with mode: 0644]
vendor/github.com/google/gopacket/routing/other.go [new file with mode: 0644]
vendor/github.com/google/gopacket/routing/routing.go [new file with mode: 0644]
vendor/github.com/google/gopacket/tcpassembly/assembly.go [new file with mode: 0644]
vendor/github.com/google/gopacket/tcpassembly/assembly_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go [new file with mode: 0644]
vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go [new file with mode: 0644]
vendor/github.com/google/gopacket/writer.go [new file with mode: 0644]
vendor/github.com/google/gopacket/writer_test.go [new file with mode: 0644]
vendor/golang.org/x/sys/unix/README.md [new file with mode: 0644]
vendor/golang.org/x/sys/unix/dirent.go [new file with mode: 0644]
vendor/golang.org/x/sys/unix/endian_big.go [new file with mode: 0644]
vendor/golang.org/x/sys/unix/endian_little.go [new file with mode: 0644]
vendor/golang.org/x/sys/unix/linux/Dockerfile [new file with mode: 0644]
vendor/golang.org/x/sys/unix/linux/mkall.go [new file with mode: 0644]
vendor/golang.org/x/sys/unix/linux/mksysnum.pl [moved from vendor/golang.org/x/sys/unix/mksysnum_linux.pl with 78% similarity]
vendor/golang.org/x/sys/unix/linux/types.go [moved from vendor/golang.org/x/sys/unix/types_linux.go with 85% similarity]
vendor/golang.org/x/sys/unix/mkall.sh
vendor/golang.org/x/sys/unix/mkerrors.sh
vendor/golang.org/x/sys/unix/mkpost.go
vendor/golang.org/x/sys/unix/mksyscall.pl
vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
vendor/golang.org/x/sys/unix/mksysnum_darwin.pl
vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl
vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl
vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl
vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl
vendor/golang.org/x/sys/unix/openbsd_pledge.go [new file with mode: 0644]
vendor/golang.org/x/sys/unix/openbsd_test.go [new file with mode: 0644]
vendor/golang.org/x/sys/unix/syscall_darwin.go
vendor/golang.org/x/sys/unix/syscall_dragonfly.go
vendor/golang.org/x/sys/unix/syscall_freebsd.go
vendor/golang.org/x/sys/unix/syscall_linux.go
vendor/golang.org/x/sys/unix/syscall_netbsd.go
vendor/golang.org/x/sys/unix/syscall_openbsd.go
vendor/golang.org/x/sys/unix/syscall_solaris.go
vendor/golang.org/x/sys/unix/types_darwin.go
vendor/golang.org/x/sys/unix/types_dragonfly.go
vendor/golang.org/x/sys/unix/types_freebsd.go
vendor/golang.org/x/sys/unix/types_netbsd.go
vendor/golang.org/x/sys/unix/types_openbsd.go
vendor/golang.org/x/sys/unix/types_solaris.go
vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
vendor/golang.org/x/sys/unix/zerrors_linux_386.go
vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go
vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
vendor/golang.org/x/sys/unix/ztypes_linux_386.go
vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
vendor/golang.org/x/sys/windows/syscall_windows.go
vendor/golang.org/x/sys/windows/zsyscall_windows.go
vendor/golang.org/x/sys/windows/ztypes_windows.go
vendor/gopkg.in/yaml.v2/LICENSE
vendor/gopkg.in/yaml.v2/README.md
vendor/gopkg.in/yaml.v2/decode.go
vendor/gopkg.in/yaml.v2/decode_test.go
vendor/gopkg.in/yaml.v2/emitterc.go
vendor/gopkg.in/yaml.v2/example_embedded_test.go [deleted file]
vendor/gopkg.in/yaml.v2/scannerc.go
vendor/gopkg.in/yaml.v2/yaml.go
vendor/gopkg.in/yaml.v2/yamlh.go

index 93cd052..4eed58d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -12,11 +12,17 @@ test:
 install:
        @cd cmd/binapi-generator && go install -v
 
+extras:
+       @cd extras/libmemif/examples/raw-data && go build -v
+       @cd extras/libmemif/examples/icmp-responder && go build -v
+
 clean:
        @rm -f cmd/binapi-generator/binapi-generator
        @rm -f examples/cmd/simple-client/simple-client
        @rm -f examples/cmd/stats-client/stats-client
        @rm -f examples/cmd/perf-bench/perf-bench
+       @rm -f extras/libmemif/examples/raw-data/raw-data
+       @rm -f extras/libmemif/examples/icmp-responder/icmp-responder
 
 generate:
        @cd core && go generate ./...
@@ -25,4 +31,4 @@ generate:
 lint:
        @golint ./... | grep -v vendor | grep -v bin_api || true
 
-.PHONY: build test install clean generate
+.PHONY: build test install extras clean generate
diff --git a/extras/libmemif/README.md b/extras/libmemif/README.md
new file mode 100644 (file)
index 0000000..39a6d58
--- /dev/null
@@ -0,0 +1,185 @@
+## Go-libmemif
+
+Package **libmemif** is a Golang adapter for the **libmemif library**
+(`extras/libmemif` in the [VPP](https://wiki.fd.io/view/VPP) repository).
+To differentiate between the adapter and the underlying C-written library,
+labels `Go-libmemif` and `C-libmemif` are used in the documentation.
+
+### Requirements
+
+libmemif for Golang is build on the top of the original, C-written
+libmemif library using `cgo`. It is therefore necessary to have C-libmemif
+header files and the library itself installed in locations known
+to the compiler.
+
+For example, to install C-libmemif system-wide into the standard
+locations, execute:
+```
+$ git clone https://gerrit.fd.io/r/vpp
+$ cd vpp/extras/libmemif
+$ make install
+```
+
+### Build
+
+Package **libmemif** is not part of the **GoVPP** core and as such it is
+not included in the [make build](../../Makefile) target.
+Instead, it has its own target in the [top-level Makefile](../../Makefile)
+used to build the attached examples with the adapter:
+```
+$ make extras
+```
+
+### APIs
+
+All **Go-libmemif** public APIs can be found in [adapter.go](adapter.go).
+Please see the comments for a more detailed description.
+Additionally, a list of all errors thrown by libmemif can be found
+in [error.go](error.go).
+
+### Usage
+
+**libmemif** needs to be first initialized with `Init(appName)`.
+This has to be done only once in the context of the entire process.
+Make sure to call `Cleanup()` to release all the resources allocated
+by **libmemif** before exiting your application. Consider calling
+`Init()` followed by `Cleanup()` scheduled with `defer` in the `main()`
+function.
+
+Log messages are by default printed to stdout. Use `SetLogger()` to use
+your own customized logger (can be changed before `Init()`).
+
+Once **libmemif** is initialized, new memif interfaces can be created
+with `CreateInterface(config, callbacks)`. See `MemifConfig` structure
+definition to learn about possible memif configuration options.
+If successful, `CreateInterface()` returns an instance of `Memif`
+structure representing the underlying memif interface.
+
+Callbacks are optional and can be shared across multiple memif instances.
+Available callbacks are:
+1. **OnConnect**: called when the connection is established.
+   By the time the callback is called, the Rx/Tx queues are initialized
+   and ready for data transmission. Interrupt channels are also
+   created and ready to be read from.
+   The user is expected to start polling for input packets via repeated
+   calls to `Memif.RxBurst(queueID, count)` or to initiate select
+   on the interrupt channels obtained with `Get*InterruptChan()`,
+   depending on the Rx mode. By default, all memif Rx queues are created
+   in the interrupt mode, but this can be changed per-queue with
+   `Memif.SetRxMode(queueID, mode)`.
+2. **OnDisconnect**: called after the connection was closed. Immediately
+   after the user callback returns, Rx/Tx queues and interrupt channels
+   are also deallocated. The user defined callback should therefore ensure
+   that all the Rx/Tx operations are stopped before it returns.
+
+**libmemif** was designed for a maximum possible performance. Packets
+are sent and received in bulks, rather than one-by-one, using
+`Memif.TxBurst(queueID, packets)` and `Memif.RxBurst(queueID, count)`,
+respectively. Memif connection can consists of multiple queues in both
+directions. A queue is one-directional wait-free ring buffer.
+It is the unit of parallelism for data transmission. The maximum possible
+lock-free granularity is therefore one go routine for one queue.
+
+Interrupt channel for one specific Rx queue can be obtained with
+`GetQueueInterruptChan(queueID)` as opposed to `GetInterruptChan()`
+for all the Rx queues. There is only one interrupt signal sent for
+an entire burst of packets, therefore an interrupt handling routine
+should repeatedly call RxBurst() until an empty slice of packets
+is returned. This way it is ensured that there are no packets left
+on the queue unread when the interrupt signal is cleared.
+Study the `ReadAndPrintPackets()` function in [raw-data example](examples/raw-data/raw-data.go).
+
+For **libmemif** the packet is just an array of bytes. It does not care
+what the actual content is. It is not required for a packet to follow
+any network protocol in order to get transported from one end to another.
+See the type declaration for `RawPacketData` and its use in `Memif.TxBurst()`
+and `Memif.RxBurst()`.
+
+In order to remove a memif interface, call `Memif.Close()`. If the memif
+is in the connected state, the connection is first properly closed.
+Do not touch memif after it was closed, let garbage collector to remove
+the `Memif` instance. In the end, `Cleanup()` will also ensure that all
+active memif interfaces are closed before the cleanup finalizes.
+
+### Examples
+
+**Go-libmemif** ships with two simple examples demonstrating the usage
+of the package with a detailed commentary.
+The examples can be found in the subdirectory [examples](./examples).
+
+#### Raw data (libmemif <-> libmemif)
+
+*raw-data* is a basic example showing how to create a memif interface,
+handle events through callbacks and perform Rx/Tx of raw data. Before
+handling an actual packets it is important to understand the skeleton
+of libmemif-based applications.
+
+Since VPP expects proper packet data, it is not very useful to connect
+*raw-data* example with VPP, even though it will work, since all
+the received data will get dropped on the VPP side.
+
+To create a connection of two raw-data instances, start two processes
+concurrently in an arbitrary order:
+ - *master* memif:
+   ```
+   $ cd extras/libmemif/examples/raw-data
+   $ ./raw-data
+   ```
+ - *slave* memif:
+   ```
+   $ cd extras/libmemif/examples/raw-data
+   $ ./raw-data --slave
+   ```
+
+Every 3 seconds both sides send 3 raw-data packets to the opposite end
+through each of the 3 queues. The received packets are printed to stdout.
+
+Stop an instance of *raw-data* with an interrupt signal (^C).
+
+#### ICMP Responder
+
+*icmp-responder* is a simple example showing how to answer APR and ICMP
+echo requests through a memif interface. Package `google/gopacket` is
+used to decode and construct packets.
+
+The appropriate VPP configuration for the opposite memif is:
+```
+vpp$ create memif id 1 socket /tmp/icmp-responder-example slave secret secret
+vpp$ set int state memif0/1 up
+vpp$ set int ip address memif0/1 192.168.1.2/24
+```
+
+To start the example, simply type:
+```
+root$ ./icmp-responder
+```
+
+*icmp-responder* needs to be run as root so that it can access the socket
+created by VPP.
+
+Normally, the memif interface is in the master mode. Pass CLI flag `--slave`
+to create memif in the slave mode:
+```
+root$ ./icmp-responder --slave
+```
+
+Don't forget to put the opposite memif into the master mode in that case.
+
+To verify the connection, run:
+```
+vpp$ ping 192.168.1.1
+64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=.6974 ms
+64 bytes from 192.168.1.1: icmp_seq=3 ttl=255 time=.6310 ms
+64 bytes from 192.168.1.1: icmp_seq=4 ttl=255 time=1.0350 ms
+64 bytes from 192.168.1.1: icmp_seq=5 ttl=255 time=.5359 ms
+
+Statistics: 5 sent, 4 received, 20% packet loss
+vpp$ sh ip arp
+    Time           IP4       Flags      Ethernet              Interface
+    68.5648   192.168.1.1     D    aa:aa:aa:aa:aa:aa memif0/1
+```
+*Note*: it is expected that the first ping is shown as lost.
+        It was actually converted to an ARP request. This is a VPP
+        specific feature common to all interface types.
+
+Stop the example with an interrupt signal (^C).
\ No newline at end of file
diff --git a/extras/libmemif/adapter.go b/extras/libmemif/adapter.go
new file mode 100644 (file)
index 0000000..b3e6192
--- /dev/null
@@ -0,0 +1,1107 @@
+// Copyright (c) 2017 Cisco and/or its affiliates.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at:
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// +build !windows,!darwin
+
+package libmemif
+
+import (
+       "encoding/binary"
+       "os"
+       "sync"
+       "syscall"
+       "unsafe"
+
+       logger "github.com/Sirupsen/logrus"
+)
+
+/*
+#cgo LDFLAGS: -lmemif
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/eventfd.h>
+#include <libmemif.h>
+
+// Feature tests.
+#ifndef MEMIF_HAVE_CANCEL_POLL_EVENT
+// memif_cancel_poll_event that simply returns ErrUnsupported.
+static int
+memif_cancel_poll_event ()
+{
+       return 102; // ErrUnsupported
+}
+#endif
+
+// govpp_memif_conn_args_t replaces fixed sized arrays with C-strings which
+// are much easier to work with in cgo.
+typedef struct
+{
+       char *socket_filename;
+       char *secret;
+       uint8_t num_s2m_rings;
+       uint8_t num_m2s_rings;
+       uint16_t buffer_size;
+       memif_log2_ring_size_t log2_ring_size;
+       uint8_t is_master;
+       memif_interface_id_t interface_id;
+       char *interface_name;
+       char *instance_name;
+       memif_interface_mode_t mode;
+} govpp_memif_conn_args_t;
+
+// govpp_memif_details_t replaces strings represented with (uint8_t *)
+// to the standard and easy to work with in cgo: (char *)
+typedef struct
+{
+       char *if_name;
+       char *inst_name;
+       char *remote_if_name;
+       char *remote_inst_name;
+       uint32_t id;
+       char *secret;
+       uint8_t role;
+       uint8_t mode;
+       char *socket_filename;
+       uint8_t rx_queues_num;
+       uint8_t tx_queues_num;
+       memif_queue_details_t *rx_queues;
+       memif_queue_details_t *tx_queues;
+       uint8_t link_up_down;
+} govpp_memif_details_t;
+
+extern int go_on_connect_callback(void *privateCtx);
+extern int go_on_disconnect_callback(void *privateCtx);
+
+// Callbacks strip the connection handle away.
+
+static int
+govpp_on_connect_callback(memif_conn_handle_t conn, void *private_ctx)
+{
+       return go_on_connect_callback(private_ctx);
+}
+
+static int
+govpp_on_disconnect_callback(memif_conn_handle_t conn, void *private_ctx)
+{
+       return go_on_disconnect_callback(private_ctx);
+}
+
+// govpp_memif_create uses govpp_memif_conn_args_t.
+static int
+govpp_memif_create (memif_conn_handle_t *conn, govpp_memif_conn_args_t *go_args,
+                    void *private_ctx)
+{
+       memif_conn_args_t args;
+       memset (&args, 0, sizeof (args));
+       args.socket_filename = (char *)go_args->socket_filename;
+       if (go_args->secret != NULL)
+       {
+               strncpy ((char *)args.secret, go_args->secret,
+                                sizeof (args.secret) - 1);
+       }
+       args.num_s2m_rings = go_args->num_s2m_rings;
+       args.num_m2s_rings = go_args->num_m2s_rings;
+       args.buffer_size = go_args->buffer_size;
+       args.log2_ring_size = go_args->log2_ring_size;
+       args.is_master = go_args->is_master;
+       args.interface_id = go_args->interface_id;
+       if (go_args->interface_name != NULL)
+       {
+               strncpy ((char *)args.interface_name, go_args->interface_name,
+                                sizeof(args.interface_name) - 1);
+       }
+       if (go_args->instance_name != NULL)
+       {
+               strncpy ((char *)args.instance_name, go_args->instance_name,
+                                sizeof (args.instance_name) - 1);
+       }
+       args.mode = go_args->mode;
+
+       return memif_create(conn, &args, govpp_on_connect_callback,
+                                               govpp_on_disconnect_callback, NULL,
+                                               private_ctx);
+}
+
+// govpp_memif_get_details keeps reallocating buffer until it is large enough.
+// The buffer is returned to be deallocated when it is no longer needed.
+static int
+govpp_memif_get_details (memif_conn_handle_t conn, govpp_memif_details_t *govpp_md,
+                         char **buf)
+{
+       int rv = 0;
+       size_t buflen = 1 << 7;
+       char *buffer = NULL, *new_buffer = NULL;
+       memif_details_t md = {0};
+
+       do {
+               // initial malloc (256 bytes) or realloc
+               buflen <<= 1;
+               new_buffer = realloc(buffer, buflen);
+               if (new_buffer == NULL)
+               {
+                       free(buffer);
+                       return MEMIF_ERR_NOMEM;
+               }
+               buffer = new_buffer;
+               // try to get details
+               rv = memif_get_details(conn, &md, buffer, buflen);
+       } while (rv == MEMIF_ERR_NOBUF_DET);
+
+       if (rv == 0)
+       {
+               *buf = buffer;
+               govpp_md->if_name = (char *)md.if_name;
+               govpp_md->inst_name = (char *)md.inst_name;
+               govpp_md->remote_if_name = (char *)md.remote_if_name;
+               govpp_md->remote_inst_name = (char *)md.remote_inst_name;
+               govpp_md->id = md.id;
+               govpp_md->secret = (char *)md.secret;
+               govpp_md->role = md.role;
+               govpp_md->mode = md.mode;
+               govpp_md->socket_filename = (char *)md.socket_filename;
+               govpp_md->rx_queues_num = md.rx_queues_num;
+               govpp_md->tx_queues_num = md.tx_queues_num;
+               govpp_md->rx_queues = md.rx_queues;
+               govpp_md->tx_queues = md.tx_queues;
+               govpp_md->link_up_down = md.link_up_down;
+       }
+       else
+               free(buffer);
+       return rv;
+}
+
+// Used to avoid cumbersome tricks that use unsafe.Pointer() + unsafe.Sizeof()
+// or even cast C-array directly into Go-slice.
+static memif_queue_details_t
+govpp_get_rx_queue_details (govpp_memif_details_t *md, int index)
+{
+       return md->rx_queues[index];
+}
+
+// Used to avoid cumbersome tricks that use unsafe.Pointer() + unsafe.Sizeof()
+// or even cast C-array directly into Go-slice.
+static memif_queue_details_t
+govpp_get_tx_queue_details (govpp_memif_details_t *md, int index)
+{
+       return md->tx_queues[index];
+}
+
+// Copy packet data into the selected buffer.
+static void
+govpp_copy_packet_data(memif_buffer_t *buffers, int index, void *data, uint32_t size)
+{
+       buffers[index].data_len = (size > buffers[index].buffer_len ? buffers[index].buffer_len : size);
+       memcpy(buffers[index].data, data, (size_t)buffers[index].data_len);
+}
+
+// Get packet data from the selected buffer.
+// Used to avoid an ugly unsafe.Pointer() + unsafe.Sizeof().
+static void *
+govpp_get_packet_data(memif_buffer_t *buffers, int index, int *size)
+{
+       *size = (int)buffers[index].data_len;
+       return buffers[index].data;
+}
+
+*/
+import "C"
+
+// IfMode represents the mode (layer/behaviour) in which the interface operates.
+type IfMode int
+
+const (
+       // IfModeEthernet tells memif to operate on the L2 layer.
+       IfModeEthernet IfMode = iota
+
+       // IfModeIP tells memif to operate on the L3 layer.
+       IfModeIP
+
+       // IfModePuntInject tells memif to behave as Inject/Punt interface.
+       IfModePuntInject
+)
+
+// RxMode is used to switch between polling and interrupt for RX.
+type RxMode int
+
+const (
+       // RxModeInterrupt tells libmemif to send interrupt signal when data are available.
+       RxModeInterrupt RxMode = iota
+
+       // RxModePolling means that the user needs to explicitly poll for data on RX
+       // queues.
+       RxModePolling
+)
+
+// RawPacketData represents raw packet data. libmemif doesn't care what the
+// actual content is, it only manipulates with raw bytes.
+type RawPacketData []byte
+
+// MemifMeta is used to store a basic memif metadata needed for identification
+// and connection establishment.
+type MemifMeta struct {
+       // IfName is the interface name. Has to be unique across all created memifs.
+       // Interface name is truncated if needed to have no more than 32 characters.
+       IfName string
+
+       // InstanceName identifies the endpoint. If omitted, the application
+       // name passed to Init() will be used instead.
+       // Instance name is truncated if needed to have no more than 32 characters.
+       InstanceName string
+
+       // ConnID is a connection ID used to match opposite sides of the memif
+       // connection.
+       ConnID uint32
+
+       // SocketFilename is the filename of the AF_UNIX socket through which
+       // the connection is established.
+       // The string is truncated if neede to fit into sockaddr_un.sun_path
+       // (108 characters on Linux).
+       SocketFilename string
+
+       // Secret must be the same on both sides for the authentication to succeed.
+       // Empty string is allowed.
+       // The secret is truncated if needed to have no more than 24 characters.
+       Secret string
+
+       // IsMaster is set to true if memif operates in the Master mode.
+       IsMaster bool
+
+       // Mode is the mode (layer/behaviour) in which the memif operates.
+       Mode IfMode
+}
+
+// MemifShmSpecs is used to store the specification of the shared memory segment
+// used by memif to send/receive packets.
+type MemifShmSpecs struct {
+       // NumRxQueues is the number of Rx queues.
+       // Default is 1 (used if the value is 0).
+       NumRxQueues uint8
+
+       // NumTxQueues is the number of Tx queues.
+       // Default is 1 (used if the value is 0).
+       NumTxQueues uint8
+
+       // BufferSize is the size of the buffer to hold one packet, or a single
+       // fragment of a jumbo frame. Default is 2048 (used if the value is 0).
+       BufferSize uint16
+
+       // Log2RingSize is the number of items in the ring represented through
+       // the logarithm base 2.
+       // Default is 10 (used if the value is 0).
+       Log2RingSize uint8
+}
+
+// MemifConfig is the memif configuration.
+// Used as the input argument to CreateInterface().
+// It is the slave's config that mostly decides the parameters of the connection,
+// but master may limit some of the quantities if needed (based on the memif
+// protocol or master's configuration)
+type MemifConfig struct {
+       MemifMeta
+       MemifShmSpecs
+}
+
+// ConnUpdateCallback is a callback type declaration used with callbacks
+// related to connection status changes.
+type ConnUpdateCallback func(memif *Memif) (err error)
+
+// MemifCallbacks is a container for all callbacks provided by memif.
+// Any callback can be nil, in which case it will be simply skipped.
+// Important: Do not call CreateInterface() or Memif.Close() from within a callback
+// or a deadlock will occur. Instead send signal through a channel to another
+// go routine which will be able to create/remove memif interface(s).
+type MemifCallbacks struct {
+       // OnConnect is triggered when a connection for a given memif was established.
+       OnConnect ConnUpdateCallback
+
+       // OnDisconnect is triggered when a connection for a given memif was lost.
+       OnDisconnect ConnUpdateCallback
+}
+
+// Memif represents a single memif interface. It provides methods to send/receive
+// packets in bursts in either the polling mode or in the interrupt mode with
+// the help of golang channels.
+type Memif struct {
+       MemifMeta
+
+       // Per-library references
+       ifIndex int                   // index used in the Go-libmemif context (Context.memifs)
+       cHandle C.memif_conn_handle_t // handle used in C-libmemif
+
+       // Callbacks
+       callbacks *MemifCallbacks
+
+       // Interrupt
+       intCh      chan uint8      // memif-global interrupt channel (value = queue ID)
+       queueIntCh []chan struct{} // per RX queue interrupt channel
+
+       // Rx/Tx queues
+       stopQPollFd int              // event file descriptor used to stop pollRxQueue-s
+       wg          sync.WaitGroup   // wait group for all pollRxQueue-s
+       rxQueueBufs []CPacketBuffers // an array of C-libmemif packet buffers for each RX queue
+       txQueueBufs []CPacketBuffers // an array of C-libmemif packet buffers for each TX queue
+}
+
+// MemifDetails provides a detailed runtime information about a memif interface.
+type MemifDetails struct {
+       MemifMeta
+       MemifConnDetails
+}
+
+// MemifConnDetails provides a detailed runtime information about a memif
+// connection.
+type MemifConnDetails struct {
+       // RemoteIfName is the name of the memif on the opposite side.
+       RemoteIfName string
+       // RemoteInstanceName is the name of the endpoint on the opposite side.
+       RemoteInstanceName string
+       // HasLink is true if the connection has link (= is established and functional).
+       HasLink bool
+       // RxQueues contains details for each Rx queue.
+       RxQueues []MemifQueueDetails
+       // TxQueues contains details for each Tx queue.
+       TxQueues []MemifQueueDetails
+}
+
+// MemifQueueDetails provides a detailed runtime information about a memif queue.
+// Queue = Ring + the associated buffers (one directional).
+type MemifQueueDetails struct {
+       // QueueID is the ID of the queue.
+       QueueID uint8
+       // RingSize is the number of slots in the ring (not logarithmic).
+       RingSize uint32
+       // BufferSize is the size of each buffer pointed to from the ring slots.
+       BufferSize uint16
+       /* Further ring information TO-BE-ADDED when C-libmemif supports them. */
+}
+
+// CPacketBuffers stores an array of memif buffers for use with TxBurst or RxBurst.
+type CPacketBuffers struct {
+       buffers *C.memif_buffer_t
+       count   int
+}
+
+// Context is a global Go-libmemif runtime context.
+type Context struct {
+       lock           sync.RWMutex
+       initialized    bool
+       memifs         map[int] /* ifIndex */ *Memif /* slice of all active memif interfaces */
+       nextMemifIndex int
+
+       wg sync.WaitGroup /* wait-group for pollEvents() */
+}
+
+var (
+       // logger used by the adapter.
+       log *logger.Logger
+
+       // Global Go-libmemif context.
+       context = &Context{initialized: false}
+)
+
+// init initializes global logger, which logs debug level messages to stdout.
+func init() {
+       log = logger.New()
+       log.Out = os.Stdout
+       log.Level = logger.DebugLevel
+}
+
+// SetLogger changes the logger for Go-libmemif to the provided one.
+// The logger is not used for logging of C-libmemif.
+func SetLogger(l *logger.Logger) {
+       log = l
+}
+
+// Init initializes the libmemif library. Must by called exactly once and before
+// any libmemif functions. Do not forget to call Cleanup() before exiting
+// your application.
+// <appName> should be a human-readable string identifying your application.
+// For example, VPP returns the version information ("show version" from VPP CLI).
+func Init(appName string) error {
+       context.lock.Lock()
+       defer context.lock.Unlock()
+
+       if context.initialized {
+               return ErrAlreadyInit
+       }
+
+       log.Debug("Initializing libmemif library")
+
+       // Initialize C-libmemif.
+       var errCode int
+       if appName == "" {
+               errCode = int(C.memif_init(nil, nil))
+       } else {
+               appName := C.CString(appName)
+               defer C.free(unsafe.Pointer(appName))
+               errCode = int(C.memif_init(nil, appName))
+       }
+       err := getMemifError(errCode)
+       if err != nil {
+               return err
+       }
+
+       // Initialize the map of memory interfaces.
+       context.memifs = make(map[int]*Memif)
+
+       // Start event polling.
+       context.wg.Add(1)
+       go pollEvents()
+
+       context.initialized = true
+       log.Debug("libmemif library was initialized")
+       return err
+}
+
+// Cleanup cleans up all the resources allocated by libmemif.
+func Cleanup() error {
+       context.lock.Lock()
+       defer context.lock.Unlock()
+
+       if !context.initialized {
+               return ErrNotInit
+       }
+
+       log.Debug("Closing libmemif library")
+
+       // Delete all active interfaces.
+       for _, memif := range context.memifs {
+               memif.Close()
+       }
+
+       // Stop the event loop (if supported by C-libmemif).
+       errCode := C.memif_cancel_poll_event()
+       err := getMemifError(int(errCode))
+       if err == nil {
+               log.Debug("Waiting for pollEvents() to stop...")
+               context.wg.Wait()
+               log.Debug("pollEvents() has stopped...")
+       } else {
+               log.WithField("err", err).Debug("NOT Waiting for pollEvents to stop...")
+       }
+
+       // Run cleanup for C-libmemif.
+       err = getMemifError(int(C.memif_cleanup()))
+       if err == nil {
+               context.initialized = false
+               log.Debug("libmemif library was closed")
+       }
+       return err
+}
+
+// CreateInterface creates a new memif interface with the given configuration.
+// The same callbacks can be used with multiple memifs. The first callback input
+// argument (*Memif) can be used to tell which memif the callback was triggered for.
+// The method is thread-safe.
+func CreateInterface(config *MemifConfig, callbacks *MemifCallbacks) (memif *Memif, err error) {
+       context.lock.Lock()
+       defer context.lock.Unlock()
+
+       if !context.initialized {
+               return nil, ErrNotInit
+       }
+
+       log.WithField("ifName", config.IfName).Debug("Creating a new memif interface")
+
+       // Create memif-wrapper for Go-libmemif.
+       memif = &Memif{
+               MemifMeta: config.MemifMeta,
+               callbacks: &MemifCallbacks{},
+               ifIndex:   context.nextMemifIndex,
+       }
+
+       // Initialize memif callbacks.
+       if callbacks != nil {
+               memif.callbacks.OnConnect = callbacks.OnConnect
+               memif.callbacks.OnDisconnect = callbacks.OnDisconnect
+       }
+
+       // Initialize memif-global interrupt channel.
+       memif.intCh = make(chan uint8, 1<<6)
+
+       // Initialize event file descriptor for stopping Rx/Tx queue polling.
+       memif.stopQPollFd = int(C.eventfd(0, C.EFD_NONBLOCK))
+       if memif.stopQPollFd < 0 {
+               return nil, ErrSyscall
+       }
+
+       // Initialize memif input arguments.
+       args := &C.govpp_memif_conn_args_t{}
+       // - socket file name
+       if config.SocketFilename != "" {
+               args.socket_filename = C.CString(config.SocketFilename)
+               defer C.free(unsafe.Pointer(args.socket_filename))
+       }
+       // - interface ID
+       args.interface_id = C.memif_interface_id_t(config.ConnID)
+       // - interface name
+       if config.IfName != "" {
+               args.interface_name = C.CString(config.IfName)
+               defer C.free(unsafe.Pointer(args.interface_name))
+       }
+       // - instance name
+       if config.InstanceName != "" {
+               args.instance_name = C.CString(config.InstanceName)
+               defer C.free(unsafe.Pointer(args.instance_name))
+       }
+       // - mode
+       switch config.Mode {
+       case IfModeEthernet:
+               args.mode = C.MEMIF_INTERFACE_MODE_ETHERNET
+       case IfModeIP:
+               args.mode = C.MEMIF_INTERFACE_MODE_IP
+       case IfModePuntInject:
+               args.mode = C.MEMIF_INTERFACE_MODE_PUNT_INJECT
+       default:
+               args.mode = C.MEMIF_INTERFACE_MODE_ETHERNET
+       }
+       // - secret
+       if config.Secret != "" {
+               args.secret = C.CString(config.Secret)
+               defer C.free(unsafe.Pointer(args.secret))
+       }
+       // - master/slave flag + number of Rx/Tx queues
+       if config.IsMaster {
+               args.num_s2m_rings = C.uint8_t(config.NumRxQueues)
+               args.num_m2s_rings = C.uint8_t(config.NumTxQueues)
+               args.is_master = C.uint8_t(1)
+       } else {
+               args.num_s2m_rings = C.uint8_t(config.NumTxQueues)
+               args.num_m2s_rings = C.uint8_t(config.NumRxQueues)
+               args.is_master = C.uint8_t(0)
+       }
+       // - buffer size
+       args.buffer_size = C.uint16_t(config.BufferSize)
+       // - log_2(ring size)
+       args.log2_ring_size = C.memif_log2_ring_size_t(config.Log2RingSize)
+
+       // Create memif in C-libmemif.
+       errCode := C.govpp_memif_create(&memif.cHandle, args, unsafe.Pointer(uintptr(memif.ifIndex)))
+       err = getMemifError(int(errCode))
+       if err != nil {
+               return nil, err
+       }
+
+       // Register the new memif.
+       context.memifs[memif.ifIndex] = memif
+       context.nextMemifIndex++
+       log.WithField("ifName", config.IfName).Debug("A new memif interface was created")
+
+       return memif, nil
+}
+
+// GetInterruptChan returns a channel which is continuously being filled with
+// IDs of queues with data ready to be received.
+// Since there is only one interrupt signal sent for an entire burst of packets,
+// an interrupt handling routine should repeatedly call RxBurst() until
+// the function returns an empty slice of packets. This way it is ensured
+// that there are no packets left on the queue unread when the interrupt signal
+// is cleared.
+// The method is thread-safe.
+func (memif *Memif) GetInterruptChan() (ch <-chan uint8 /* queue ID */) {
+       return memif.intCh
+}
+
+// GetQueueInterruptChan returns an empty-data channel which fires every time
+// there are data to read on a given queue.
+// It is only valid to call this function if memif is in the connected state.
+// Channel is automatically closed when the connection goes down (but after
+// the user provided callback OnDisconnect has executed).
+// Since there is only one interrupt signal sent for an entire burst of packets,
+// an interrupt handling routine should repeatedly call RxBurst() until
+// the function returns an empty slice of packets. This way it is ensured
+// that there are no packets left on the queue unread when the interrupt signal
+// is cleared.
+// The method is thread-safe.
+func (memif *Memif) GetQueueInterruptChan(queueID uint8) (ch <-chan struct{}, err error) {
+       if int(queueID) >= len(memif.queueIntCh) {
+               return nil, ErrQueueID
+       }
+       return memif.queueIntCh[queueID], nil
+}
+
+// SetRxMode allows to switch between the interrupt and the polling mode for Rx.
+// The method is thread-safe.
+func (memif *Memif) SetRxMode(queueID uint8, rxMode RxMode) (err error) {
+       var cRxMode C.memif_rx_mode_t
+       switch rxMode {
+       case RxModeInterrupt:
+               cRxMode = C.MEMIF_RX_MODE_INTERRUPT
+       case RxModePolling:
+               cRxMode = C.MEMIF_RX_MODE_POLLING
+       default:
+               cRxMode = C.MEMIF_RX_MODE_INTERRUPT
+       }
+       errCode := C.memif_set_rx_mode(memif.cHandle, cRxMode, C.uint16_t(queueID))
+       return getMemifError(int(errCode))
+}
+
+// GetDetails returns a detailed runtime information about this memif.
+// The method is thread-safe.
+func (memif *Memif) GetDetails() (details *MemifDetails, err error) {
+       cDetails := C.govpp_memif_details_t{}
+       var buf *C.char
+
+       // Get memif details from C-libmemif.
+       errCode := C.govpp_memif_get_details(memif.cHandle, &cDetails, &buf)
+       err = getMemifError(int(errCode))
+       if err != nil {
+               return nil, err
+       }
+       defer C.free(unsafe.Pointer(buf))
+
+       // Convert details from C to Go.
+       details = &MemifDetails{}
+       // - metadata:
+       details.IfName = C.GoString(cDetails.if_name)
+       details.InstanceName = C.GoString(cDetails.inst_name)
+       details.ConnID = uint32(cDetails.id)
+       details.SocketFilename = C.GoString(cDetails.socket_filename)
+       if cDetails.secret != nil {
+               details.Secret = C.GoString(cDetails.secret)
+       }
+       details.IsMaster = cDetails.role == C.uint8_t(0)
+       switch cDetails.mode {
+       case C.MEMIF_INTERFACE_MODE_ETHERNET:
+               details.Mode = IfModeEthernet
+       case C.MEMIF_INTERFACE_MODE_IP:
+               details.Mode = IfModeIP
+       case C.MEMIF_INTERFACE_MODE_PUNT_INJECT:
+               details.Mode = IfModePuntInject
+       default:
+               details.Mode = IfModeEthernet
+       }
+       // - connection details:
+       details.RemoteIfName = C.GoString(cDetails.remote_if_name)
+       details.RemoteInstanceName = C.GoString(cDetails.remote_inst_name)
+       details.HasLink = cDetails.link_up_down == C.uint8_t(1)
+       // - RX queues:
+       var i uint8
+       for i = 0; i < uint8(cDetails.rx_queues_num); i++ {
+               cRxQueue := C.govpp_get_rx_queue_details(&cDetails, C.int(i))
+               queueDetails := MemifQueueDetails{
+                       QueueID:    uint8(cRxQueue.qid),
+                       RingSize:   uint32(cRxQueue.ring_size),
+                       BufferSize: uint16(cRxQueue.buffer_size),
+               }
+               details.RxQueues = append(details.RxQueues, queueDetails)
+       }
+       // - TX queues:
+       for i = 0; i < uint8(cDetails.tx_queues_num); i++ {
+               cTxQueue := C.govpp_get_tx_queue_details(&cDetails, C.int(i))
+               queueDetails := MemifQueueDetails{
+                       QueueID:    uint8(cTxQueue.qid),
+                       RingSize:   uint32(cTxQueue.ring_size),
+                       BufferSize: uint16(cTxQueue.buffer_size),
+               }
+               details.TxQueues = append(details.TxQueues, queueDetails)
+       }
+
+       return details, nil
+}
+
+// TxBurst is used to send multiple packets in one call into a selected queue.
+// The actual number of packets sent may be smaller and is returned as <count>.
+// The method is non-blocking even if the ring is full and no packet can be sent.
+// It is only valid to call this function if memif is in the connected state.
+// Multiple TxBurst-s can run concurrently provided that each targets a different
+// TX queue.
+func (memif *Memif) TxBurst(queueID uint8, packets []RawPacketData) (count uint16, err error) {
+       var sentCount C.uint16_t
+       var allocated C.uint16_t
+       var bufSize int
+
+       if len(packets) == 0 {
+               return 0, nil
+       }
+
+       if int(queueID) >= len(memif.txQueueBufs) {
+               return 0, ErrQueueID
+       }
+
+       // The largest packet in the set determines the packet buffer size.
+       for _, packet := range packets {
+               if len(packet) > int(bufSize) {
+                       bufSize = len(packet)
+               }
+       }
+
+       // Reallocate Tx buffers if needed to fit the input packets.
+       pb := memif.txQueueBufs[queueID]
+       bufCount := len(packets)
+       if pb.count < bufCount {
+               newBuffers := C.realloc(unsafe.Pointer(pb.buffers), C.size_t(bufCount*int(C.sizeof_memif_buffer_t)))
+               if newBuffers == nil {
+                       // Realloc failed, <count> will be less than len(packets).
+                       bufCount = pb.count
+               } else {
+                       pb.buffers = (*C.memif_buffer_t)(newBuffers)
+                       pb.count = bufCount
+               }
+       }
+
+       // Allocate ring slots.
+       cQueueID := C.uint16_t(queueID)
+       errCode := C.memif_buffer_alloc(memif.cHandle, cQueueID, pb.buffers, C.uint16_t(bufCount),
+               &allocated, C.uint16_t(bufSize))
+       err = getMemifError(int(errCode))
+       if err == ErrNoBufRing {
+               // Not enough ring slots, <count> will be less than bufCount.
+               err = nil
+       }
+       if err != nil {
+               return 0, err
+       }
+
+       // Copy packet data into the buffers.
+       for i := 0; i < int(allocated); i++ {
+               packetData := unsafe.Pointer(&packets[i][0])
+               C.govpp_copy_packet_data(pb.buffers, C.int(i), packetData, C.uint32_t(len(packets[i])))
+       }
+
+       errCode = C.memif_tx_burst(memif.cHandle, cQueueID, pb.buffers, allocated, &sentCount)
+       err = getMemifError(int(errCode))
+       if err != nil {
+               return 0, err
+       }
+       count = uint16(sentCount)
+
+       return count, nil
+}
+
+// RxBurst is used to receive multiple packets in one call from a selected queue.
+// <count> is the number of packets to receive. The actual number of packets
+// received may be smaller. <count> effectively limits the maximum number
+// of packets to receive in one burst (for a flat, predictable memory usage).
+// The method is non-blocking even if there are no packets to receive.
+// It is only valid to call this function if memif is in the connected state.
+// Multiple RxBurst-s can run concurrently provided that each targets a different
+// Rx queue.
+func (memif *Memif) RxBurst(queueID uint8, count uint16) (packets []RawPacketData, err error) {
+       var recvCount C.uint16_t
+       var freed C.uint16_t
+
+       if count == 0 {
+               return packets, nil
+       }
+
+       if int(queueID) >= len(memif.rxQueueBufs) {
+               return packets, ErrQueueID
+       }
+
+       // Reallocate Rx buffers if needed to fit the output packets.
+       pb := memif.rxQueueBufs[queueID]
+       bufCount := int(count)
+       if pb.count < bufCount {
+               newBuffers := C.realloc(unsafe.Pointer(pb.buffers), C.size_t(bufCount*int(C.sizeof_memif_buffer_t)))
+               if newBuffers == nil {
+                       // Realloc failed, len(<packets>) will be certainly less than <count>.
+                       bufCount = pb.count
+               } else {
+                       pb.buffers = (*C.memif_buffer_t)(newBuffers)
+                       pb.count = bufCount
+               }
+       }
+
+       cQueueID := C.uint16_t(queueID)
+       errCode := C.memif_rx_burst(memif.cHandle, cQueueID, pb.buffers, C.uint16_t(bufCount), &recvCount)
+       err = getMemifError(int(errCode))
+       if err == ErrNoBuf {
+               // More packets to read - the user is expected to run RxBurst() until there
+               // are no more packets to receive.
+               err = nil
+       }
+       if err != nil {
+               return packets, err
+       }
+
+       // Copy packet data into the instances of RawPacketData.
+       for i := 0; i < int(recvCount); i++ {
+               var packetSize C.int
+               packetData := C.govpp_get_packet_data(pb.buffers, C.int(i), &packetSize)
+               packets = append(packets, C.GoBytes(packetData, packetSize))
+       }
+
+       errCode = C.memif_buffer_free(memif.cHandle, cQueueID, pb.buffers, recvCount, &freed)
+       err = getMemifError(int(errCode))
+       if err != nil {
+               // Throw away packets to avoid duplicities.
+               packets = nil
+       }
+
+       return packets, err
+}
+
+// Close removes the memif interface. If the memif is in the connected state,
+// the connection is first properly closed.
+// Do not access memif after it is closed, let garbage collector to remove it.
+func (memif *Memif) Close() error {
+       log.WithField("ifName", memif.IfName).Debug("Closing the memif interface")
+
+       // Delete memif from C-libmemif.
+       err := getMemifError(int(C.memif_delete(&memif.cHandle)))
+
+       if err != nil {
+               // Close memif-global interrupt channel.
+               close(memif.intCh)
+               // Close file descriptor stopQPollFd.
+               C.close(C.int(memif.stopQPollFd))
+       }
+
+       context.lock.Lock()
+       defer context.lock.Unlock()
+       // Unregister the interface from the context.
+       delete(context.memifs, memif.ifIndex)
+       log.WithField("ifName", memif.IfName).Debug("memif interface was closed")
+
+       return err
+}
+
+// initQueues allocates resources associated with Rx/Tx queues.
+func (memif *Memif) initQueues() error {
+       // Get Rx/Tx queues count.
+       details, err := memif.GetDetails()
+       if err != nil {
+               return err
+       }
+
+       log.WithFields(logger.Fields{
+               "ifName":   memif.IfName,
+               "Rx-count": len(details.RxQueues),
+               "Tx-count": len(details.TxQueues),
+       }).Debug("Initializing Rx/Tx queues.")
+
+       // Initialize interrupt channels.
+       var i int
+       for i = 0; i < len(details.RxQueues); i++ {
+               queueIntCh := make(chan struct{}, 1)
+               memif.queueIntCh = append(memif.queueIntCh, queueIntCh)
+       }
+
+       // Initialize Rx/Tx packet buffers.
+       for i = 0; i < len(details.RxQueues); i++ {
+               memif.rxQueueBufs = append(memif.rxQueueBufs, CPacketBuffers{})
+       }
+       for i = 0; i < len(details.TxQueues); i++ {
+               memif.txQueueBufs = append(memif.txQueueBufs, CPacketBuffers{})
+       }
+
+       return nil
+}
+
+// closeQueues deallocates all resources associated with Rx/Tx queues.
+func (memif *Memif) closeQueues() {
+       log.WithFields(logger.Fields{
+               "ifName":   memif.IfName,
+               "Rx-count": len(memif.rxQueueBufs),
+               "Tx-count": len(memif.txQueueBufs),
+       }).Debug("Closing Rx/Tx queues.")
+
+       // Close interrupt channels.
+       for _, ch := range memif.queueIntCh {
+               close(ch)
+       }
+       memif.queueIntCh = nil
+
+       // Deallocate Rx/Tx packet buffers.
+       for _, pb := range memif.rxQueueBufs {
+               C.free(unsafe.Pointer(pb.buffers))
+       }
+       memif.rxQueueBufs = nil
+       for _, pb := range memif.txQueueBufs {
+               C.free(unsafe.Pointer(pb.buffers))
+       }
+       memif.txQueueBufs = nil
+}
+
+// pollEvents repeatedly polls for a libmemif event.
+func pollEvents() {
+       defer context.wg.Done()
+       for {
+               errCode := C.memif_poll_event(C.int(-1))
+               err := getMemifError(int(errCode))
+               if err == ErrPollCanceled {
+                       return
+               }
+       }
+}
+
+// pollRxQueue repeatedly polls an Rx queue for interrupts.
+func pollRxQueue(memif *Memif, queueID uint8) {
+       defer memif.wg.Done()
+
+       log.WithFields(logger.Fields{
+               "ifName":   memif.IfName,
+               "queue-ID": queueID,
+       }).Debug("Started queue interrupt polling.")
+
+       var qfd C.int
+       errCode := C.memif_get_queue_efd(memif.cHandle, C.uint16_t(queueID), &qfd)
+       err := getMemifError(int(errCode))
+       if err != nil {
+               log.WithField("err", err).Error("memif_get_queue_efd() failed")
+               return
+       }
+
+       // Create epoll file descriptor.
+       var event [1]syscall.EpollEvent
+       epFd, err := syscall.EpollCreate1(0)
+       if err != nil {
+               log.WithField("err", err).Error("epoll_create1() failed")
+               return
+       }
+       defer syscall.Close(epFd)
+
+       // Add Rx queue interrupt file descriptor.
+       event[0].Events = syscall.EPOLLIN
+       event[0].Fd = int32(qfd)
+       if err = syscall.EpollCtl(epFd, syscall.EPOLL_CTL_ADD, int(qfd), &event[0]); err != nil {
+               log.WithField("err", err).Error("epoll_ctl() failed")
+               return
+       }
+
+       // Add file descriptor used to stop this go routine.
+       event[0].Events = syscall.EPOLLIN
+       event[0].Fd = int32(memif.stopQPollFd)
+       if err = syscall.EpollCtl(epFd, syscall.EPOLL_CTL_ADD, memif.stopQPollFd, &event[0]); err != nil {
+               log.WithField("err", err).Error("epoll_ctl() failed")
+               return
+       }
+
+       // Poll for interrupts.
+       for {
+               _, err := syscall.EpollWait(epFd, event[:], -1)
+               if err != nil {
+                       log.WithField("err", err).Error("epoll_wait() failed")
+                       return
+               }
+
+               // Handle Rx Interrupt.
+               if event[0].Fd == int32(qfd) {
+                       // Consume the interrupt event.
+                       buf := make([]byte, 8)
+                       _, err = syscall.Read(int(qfd), buf[:])
+                       if err != nil {
+                               log.WithField("err", err).Warn("read() failed")
+                       }
+
+                       // Send signal to memif-global interrupt channel.
+                       select {
+                       case memif.intCh <- queueID:
+                               break
+                       default:
+                               break
+                       }
+
+                       // Send signal to queue-specific interrupt channel.
+                       select {
+                       case memif.queueIntCh[queueID] <- struct{}{}:
+                               break
+                       default:
+                               break
+                       }
+               }
+
+               // Stop the go routine if requested.
+               if event[0].Fd == int32(memif.stopQPollFd) {
+                       log.WithFields(logger.Fields{
+                               "ifName":   memif.IfName,
+                               "queue-ID": queueID,
+                       }).Debug("Stopped queue interrupt polling.")
+                       return
+               }
+       }
+}
+
+//export go_on_connect_callback
+func go_on_connect_callback(privateCtx unsafe.Pointer) C.int {
+       log.Debug("go_on_connect_callback BEGIN")
+       defer log.Debug("go_on_connect_callback END")
+       context.lock.RLock()
+       defer context.lock.RUnlock()
+
+       // Get memif reference.
+       ifIndex := int(uintptr(privateCtx))
+       memif, exists := context.memifs[ifIndex]
+       if !exists {
+               return C.int(ErrNoConn.Code())
+       }
+
+       // Initialize Rx/Tx queues.
+       err := memif.initQueues()
+       if err != nil {
+               if memifErr, ok := err.(*MemifError); ok {
+                       return C.int(memifErr.Code())
+               }
+               return C.int(ErrUnknown.Code())
+       }
+
+       // Call the user callback.
+       if memif.callbacks.OnConnect != nil {
+               memif.callbacks.OnConnect(memif)
+       }
+
+       // Start polling the RX queues for interrupts.
+       for i := 0; i < len(memif.queueIntCh); i++ {
+               memif.wg.Add(1)
+               go pollRxQueue(memif, uint8(i))
+       }
+
+       return C.int(0)
+}
+
+//export go_on_disconnect_callback
+func go_on_disconnect_callback(privateCtx unsafe.Pointer) C.int {
+       log.Debug("go_on_disconnect_callback BEGIN")
+       defer log.Debug("go_on_disconnect_callback END")
+       context.lock.RLock()
+       defer context.lock.RUnlock()
+
+       // Get memif reference.
+       ifIndex := int(uintptr(privateCtx))
+       memif, exists := context.memifs[ifIndex]
+       if !exists {
+               // Already closed.
+               return C.int(0)
+       }
+
+       // Stop polling the RX queues for interrupts.
+       buf := make([]byte, 8)
+       binary.PutUvarint(buf, 1)
+       // - add an event
+       _, err := syscall.Write(memif.stopQPollFd, buf[:])
+       if err != nil {
+               return C.int(ErrSyscall.Code())
+       }
+       // - wait
+       memif.wg.Wait()
+       // - remove the event
+       _, err = syscall.Read(memif.stopQPollFd, buf[:])
+       if err != nil {
+               return C.int(ErrSyscall.Code())
+       }
+
+       // Call the user callback.
+       if memif.callbacks.OnDisconnect != nil {
+               memif.callbacks.OnDisconnect(memif)
+       }
+
+       // Close Rx/Tx queues.
+       memif.closeQueues()
+
+       return C.int(0)
+}
diff --git a/extras/libmemif/doc.go b/extras/libmemif/doc.go
new file mode 100644 (file)
index 0000000..46da1aa
--- /dev/null
@@ -0,0 +1,5 @@
+// Package libmemif is a Golang adapter for the libmemif library
+// (extras/libmemif in the VPP repository). To differentiate between the adapter
+// and the underlying C-written library, labels "Go-libmemif" and "C-libmemif"
+// are used in the documentation.
+package libmemif
diff --git a/extras/libmemif/error.go b/extras/libmemif/error.go
new file mode 100644 (file)
index 0000000..3a2145d
--- /dev/null
@@ -0,0 +1,123 @@
+// Copyright (c) 2017 Cisco and/or its affiliates.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at:
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// +build !windows,!darwin
+
+package libmemif
+
+/*
+#cgo LDFLAGS: -lmemif
+
+#include <unistd.h>
+#include <libmemif.h>
+*/
+import "C"
+
+// List of errors thrown by go-libmemif.
+// Error handling code should compare returned error by value against these variables.
+var (
+       ErrSyscall       = newMemifError(1)
+       ErrAccess        = newMemifError(2)
+       ErrNoFile        = newMemifError(3)
+       ErrFileLimit     = newMemifError(4)
+       ErrProcFileLimit = newMemifError(5)
+       ErrAlready       = newMemifError(6)
+       ErrAgain         = newMemifError(7)
+       ErrBadFd         = newMemifError(8)
+       ErrNoMem         = newMemifError(9)
+       ErrInvalArgs     = newMemifError(10)
+       ErrNoConn        = newMemifError(11)
+       ErrConn          = newMemifError(12)
+       ErrClbFDUpdate   = newMemifError(13)
+       ErrFileNotSock   = newMemifError(14)
+       ErrNoShmFD       = newMemifError(15)
+       ErrCookie        = newMemifError(16)
+
+       // Not thrown, instead properly handled inside the golang adapter:
+       ErrNoBufRing    = newMemifError(17)
+       ErrNoBuf        = newMemifError(18)
+       ErrNoBufDetails = newMemifError(19)
+
+       ErrIntWrite     = newMemifError(20)
+       ErrMalformedMsg = newMemifError(21)
+       ErrQueueID      = newMemifError(22)
+       ErrProto        = newMemifError(23)
+       ErrIfID         = newMemifError(24)
+       ErrAcceptSlave  = newMemifError(25)
+       ErrAlreadyConn  = newMemifError(26)
+       ErrMode         = newMemifError(27)
+       ErrSecret       = newMemifError(28)
+       ErrNoSecret     = newMemifError(29)
+       ErrMaxRegion    = newMemifError(30)
+       ErrMaxRing      = newMemifError(31)
+       ErrNotIntFD     = newMemifError(32)
+       ErrDisconnect   = newMemifError(33)
+       ErrDisconnected = newMemifError(34)
+       ErrUnknownMsg   = newMemifError(35)
+       ErrPollCanceled = newMemifError(36)
+
+       // Errors added by the adapter:
+       ErrNotInit     = newMemifError(100, "libmemif is not initialized")
+       ErrAlreadyInit = newMemifError(101, "libmemif is already initialized")
+       ErrUnsupported = newMemifError(102, "the feature is not supported by C-libmemif")
+
+       // Received unrecognized error code from C-libmemif.
+       ErrUnknown = newMemifError(-1, "unknown error")
+)
+
+// MemifError implements and extends the error interface with the method Code(),
+// which returns the integer error code as returned by C-libmemif.
+type MemifError struct {
+       code        int
+       description string
+}
+
+// Error prints error description.
+func (e *MemifError) Error() string {
+       return e.description
+}
+
+// Code returns the integer error code as returned by C-libmemif.
+func (e *MemifError) Code() int {
+       return e.code
+}
+
+// A registry of libmemif errors. Used to convert C-libmemif error code into
+// the associated MemifError.
+var errorRegistry = map[int]*MemifError{}
+
+// newMemifError builds and registers a new MemifError.
+func newMemifError(code int, desc ...string) *MemifError {
+       var err *MemifError
+       if len(desc) > 0 {
+               err = &MemifError{code: code, description: "libmemif: " + desc[0]}
+       } else {
+               err = &MemifError{code: code, description: "libmemif: " + C.GoString(C.memif_strerror(C.int(code)))}
+       }
+       errorRegistry[code] = err
+       return err
+}
+
+// getMemifError returns the MemifError associated with the given C-libmemif
+// error code.
+func getMemifError(code int) error {
+       if code == 0 {
+               return nil /* success */
+       }
+       err, known := errorRegistry[code]
+       if !known {
+               return ErrUnknown
+       }
+       return err
+}
diff --git a/extras/libmemif/examples/icmp-responder/icmp-responder.go b/extras/libmemif/examples/icmp-responder/icmp-responder.go
new file mode 100644 (file)
index 0000000..f9867f7
--- /dev/null
@@ -0,0 +1,402 @@
+// icmp-responder is a simple example showing how to answer APR and ICMP echo
+// requests through a memif interface. Package "google/gopacket" is used to decode
+// and construct packets.
+//
+// The appropriate VPP configuration for the opposite memif is:
+//   vpp$ create memif id 1 socket /tmp/icmp-responder-example slave secret secret
+//   vpp$ set int state memif0/1 up
+//   vpp$ set int ip address memif0/1 192.168.1.2/24
+//
+// To start the example, simply type:
+//   root$ ./icmp-responder
+//
+// icmp-responder needs to be run as root so that it can access the socket
+// created by VPP.
+//
+// Normally, the memif interface is in the master mode. Pass CLI flag "--slave"
+// to create memif in the slave mode:
+//   root$ ./icmp-responder --slave
+//
+// Don't forget to put the opposite memif into the master mode in that case.
+//
+// To verify the connection, run:
+//   vpp$ ping 192.168.1.1
+//   64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=.6974 ms
+//   64 bytes from 192.168.1.1: icmp_seq=3 ttl=255 time=.6310 ms
+//   64 bytes from 192.168.1.1: icmp_seq=4 ttl=255 time=1.0350 ms
+//   64 bytes from 192.168.1.1: icmp_seq=5 ttl=255 time=.5359 ms
+//
+//   Statistics: 5 sent, 4 received, 20% packet loss
+//   vpp$ sh ip arp
+//   Time           IP4       Flags      Ethernet              Interface
+//   68.5648   192.168.1.1     D    aa:aa:aa:aa:aa:aa memif0/1
+//
+// Note: it is expected that the first ping is shown as lost. It was actually
+// converted to an ARP request. This is a VPP feature common to all interface
+// types.
+//
+// Stop the example with an interrupt signal.
+package main
+
+import (
+       "errors"
+       "fmt"
+       "net"
+       "os"
+       "os/signal"
+       "sync"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+
+       "git.fd.io/govpp.git/extras/libmemif"
+)
+
+const (
+       // Socket through which the opposite memifs will establish the connection.
+       Socket = "/tmp/icmp-responder-example"
+
+       // Secret used to authenticate the memif connection.
+       Secret = "secret"
+
+       // ConnectionID is an identifier used to match opposite memifs.
+       ConnectionID = 1
+
+       // IPAddress assigned to the memif interface.
+       IPAddress = "192.168.1.1"
+
+       // MAC address assigned to the memif interface.
+       MAC = "aa:aa:aa:aa:aa:aa"
+
+       // NumQueues is the (configured!) number of queues for both Rx & Tx.
+       // The actual number agreed during connection establishment may be smaller!
+       NumQueues uint8 = 3
+)
+
+// For management of go routines.
+var wg sync.WaitGroup
+var stopCh chan struct{}
+
+// Parsed addresses.
+var hwAddr net.HardwareAddr
+var ipAddr net.IP
+
+// ErrUnhandledPacket is thrown and printed when an unexpected packet is received.
+var ErrUnhandledPacket = errors.New("received an unhandled packet")
+
+// OnConnect is called when a memif connection gets established.
+func OnConnect(memif *libmemif.Memif) (err error) {
+       details, err := memif.GetDetails()
+       if err != nil {
+               fmt.Printf("libmemif.GetDetails() error: %v\n", err)
+       }
+       fmt.Printf("memif %s has been connected: %+v\n", memif.IfName, details)
+
+       stopCh = make(chan struct{})
+       // Start a separate go routine for each RX queue.
+       // (memif queue is a unit of parallelism for Rx/Tx).
+       // Beware: the number of queues created may be lower than what was requested
+       // in MemifConfiguration (the master makes the final decision).
+       // Use Memif.GetDetails to get the number of queues.
+       var i uint8
+       for i = 0; i < uint8(len(details.RxQueues)); i++ {
+               wg.Add(1)
+               go IcmpResponder(memif, i)
+       }
+       return nil
+}
+
+// OnDisconnect is called when a memif connection is lost.
+func OnDisconnect(memif *libmemif.Memif) (err error) {
+       fmt.Printf("memif %s has been disconnected\n", memif.IfName)
+       // Stop all packet producers and consumers.
+       close(stopCh)
+       wg.Wait()
+       return nil
+}
+
+// IcmpResponder answers to ICMP pings with ICMP pongs.
+func IcmpResponder(memif *libmemif.Memif, queueID uint8) {
+       defer wg.Done()
+
+       // Get channel which fires every time there are packets to read on the queue.
+       interruptCh, err := memif.GetQueueInterruptChan(queueID)
+       if err != nil {
+               // Example of libmemif error handling code:
+               switch err {
+               case libmemif.ErrQueueID:
+                       fmt.Printf("libmemif.Memif.GetQueueInterruptChan() complains about invalid queue id!?")
+               // Here you would put all the errors that need to be handled individually...
+               default:
+                       fmt.Printf("libmemif.Memif.GetQueueInterruptChan() error: %v\n", err)
+               }
+               return
+       }
+
+       for {
+               select {
+               case <-interruptCh:
+                       // Read all packets from the queue but at most 10 at once.
+                       // Since there is only one interrupt signal sent for an entire burst
+                       // of packets, an interrupt handling routine should repeatedly call
+                       // RxBurst() until the function returns an empty slice of packets.
+                       // This way it is ensured that there are no packets left
+                       // on the queue unread when the interrupt signal is cleared.
+                       for {
+                               packets, err := memif.RxBurst(queueID, 10)
+                               if err != nil {
+                                       fmt.Printf("libmemif.Memif.RxBurst() error: %v\n", err)
+                                       // Skip this burst, continue with the next one 3secs later...
+                                       break
+                               }
+                               if len(packets) == 0 {
+                                       // No more packets to read until the next interrupt.
+                                       break
+                               }
+                               // Generate response for each supported request.
+                               responses := []libmemif.RawPacketData{}
+                               for _, packet := range packets {
+                                       fmt.Println("Received new packet:")
+                                       DumpPacket(packet)
+                                       response, err := GeneratePacketResponse(packet)
+                                       if err == nil {
+                                               fmt.Println("Sending response:")
+                                               DumpPacket(response)
+                                               responses = append(responses, response)
+                                       } else {
+                                               fmt.Printf("Failed to generate response: %v\n", err)
+                                       }
+                               }
+                               // Send pongs / ARP responses. We may not be able to do it in one
+                               // burst if the ring is (almost) full or the internal buffer cannot
+                               // contain it.
+                               sent := 0
+                               for {
+                                       count, err := memif.TxBurst(queueID, responses[sent:])
+                                       if err != nil {
+                                               fmt.Printf("libmemif.Memif.TxBurst() error: %v\n", err)
+                                               break
+                                       } else {
+                                               fmt.Printf("libmemif.Memif.TxBurst() has sent %d packets.\n", count)
+                                               sent += int(count)
+                                               if sent == len(responses) {
+                                                       break
+                                               }
+                                       }
+                               }
+                       }
+               case <-stopCh:
+                       return
+               }
+       }
+}
+
+// DumpPacket prints a human-readable description of the packet.
+func DumpPacket(packetData libmemif.RawPacketData) {
+       packet := gopacket.NewPacket(packetData, layers.LayerTypeEthernet, gopacket.Default)
+       fmt.Println(packet.Dump())
+}
+
+// GeneratePacketResponse returns an appropriate answer to an ARP request
+// or an ICMP echo request.
+func GeneratePacketResponse(packetData libmemif.RawPacketData) (response libmemif.RawPacketData, err error) {
+       packet := gopacket.NewPacket(packetData, layers.LayerTypeEthernet, gopacket.Default)
+
+       ethLayer := packet.Layer(layers.LayerTypeEthernet)
+       if ethLayer == nil {
+               fmt.Println("Missing ETH layer.")
+               return nil, ErrUnhandledPacket
+       }
+       eth, _ := ethLayer.(*layers.Ethernet)
+
+       if eth.EthernetType == layers.EthernetTypeARP {
+               // Handle ARP request.
+               arpLayer := packet.Layer(layers.LayerTypeARP)
+               if arpLayer == nil {
+                       fmt.Println("Missing ARP layer.")
+                       return nil, ErrUnhandledPacket
+               }
+               arp, _ := arpLayer.(*layers.ARP)
+               if arp.Operation != layers.ARPRequest {
+                       fmt.Println("Not ARP request.")
+                       return nil, ErrUnhandledPacket
+               }
+               fmt.Println("Received an ARP request.")
+
+               // Build packet layers.
+               ethResp := layers.Ethernet{
+                       SrcMAC:       hwAddr,
+                       DstMAC:       eth.SrcMAC,
+                       EthernetType: layers.EthernetTypeARP,
+               }
+               arpResp := layers.ARP{
+                       AddrType:          layers.LinkTypeEthernet,
+                       Protocol:          layers.EthernetTypeIPv4,
+                       HwAddressSize:     6,
+                       ProtAddressSize:   4,
+                       Operation:         layers.ARPReply,
+                       SourceHwAddress:   []byte(hwAddr),
+                       SourceProtAddress: []byte(ipAddr),
+                       DstHwAddress:      arp.SourceHwAddress,
+                       DstProtAddress:    arp.SourceProtAddress,
+               }
+               // Set up buffer and options for serialization.
+               buf := gopacket.NewSerializeBuffer()
+               opts := gopacket.SerializeOptions{
+                       FixLengths:       true,
+                       ComputeChecksums: true,
+               }
+               err := gopacket.SerializeLayers(buf, opts, &ethResp, &arpResp)
+               if err != nil {
+                       fmt.Println("SerializeLayers error: ", err)
+               }
+               return buf.Bytes(), nil
+       }
+
+       if eth.EthernetType == layers.EthernetTypeIPv4 {
+               // Respond to ICMP request.
+               ipLayer := packet.Layer(layers.LayerTypeIPv4)
+               if ipLayer == nil {
+                       fmt.Println("Missing IPv4 layer.")
+                       return nil, ErrUnhandledPacket
+               }
+               ipv4, _ := ipLayer.(*layers.IPv4)
+               if ipv4.Protocol != layers.IPProtocolICMPv4 {
+                       fmt.Println("Not ICMPv4 protocol.")
+                       return nil, ErrUnhandledPacket
+               }
+               icmpLayer := packet.Layer(layers.LayerTypeICMPv4)
+               if icmpLayer == nil {
+                       fmt.Println("Missing ICMPv4 layer.")
+                       return nil, ErrUnhandledPacket
+               }
+               icmp, _ := icmpLayer.(*layers.ICMPv4)
+               if icmp.TypeCode.Type() != layers.ICMPv4TypeEchoRequest {
+                       fmt.Println("Not ICMPv4 echo request.")
+                       return nil, ErrUnhandledPacket
+               }
+               fmt.Println("Received an ICMPv4 echo request.")
+
+               // Build packet layers.
+               ethResp := layers.Ethernet{
+                       SrcMAC:       hwAddr,
+                       DstMAC:       eth.SrcMAC,
+                       EthernetType: layers.EthernetTypeIPv4,
+               }
+               ipv4Resp := layers.IPv4{
+                       Version:    4,
+                       IHL:        5,
+                       TOS:        0,
+                       Id:         0,
+                       Flags:      0,
+                       FragOffset: 0,
+                       TTL:        255,
+                       Protocol:   layers.IPProtocolICMPv4,
+                       SrcIP:      ipAddr,
+                       DstIP:      ipv4.SrcIP,
+               }
+               icmpResp := layers.ICMPv4{
+                       TypeCode: layers.CreateICMPv4TypeCode(layers.ICMPv4TypeEchoReply, 0),
+                       Id:       icmp.Id,
+                       Seq:      icmp.Seq,
+               }
+
+               // Set up buffer and options for serialization.
+               buf := gopacket.NewSerializeBuffer()
+               opts := gopacket.SerializeOptions{
+                       FixLengths:       true,
+                       ComputeChecksums: true,
+               }
+               err := gopacket.SerializeLayers(buf, opts, &ethResp, &ipv4Resp, &icmpResp,
+                       gopacket.Payload(icmp.Payload))
+               if err != nil {
+                       fmt.Println("SerializeLayers error: ", err)
+               }
+               return buf.Bytes(), nil
+       }
+
+       return nil, ErrUnhandledPacket
+}
+
+func main() {
+       var err error
+       fmt.Println("Starting 'icmp-responder' example...")
+
+       hwAddr, err = net.ParseMAC(MAC)
+       if err != nil {
+               fmt.Println("Failed to parse the MAC address: %v", err)
+               return
+       }
+
+       ip := net.ParseIP(IPAddress)
+       if ip != nil {
+               ipAddr = ip.To4()
+       }
+       if ipAddr == nil {
+               fmt.Println("Failed to parse the IP address: %v", err)
+               return
+       }
+
+       // If run with the "--slave" option, create memif in the slave mode.
+       var isMaster = true
+       var appSuffix string
+       if len(os.Args) > 1 && (os.Args[1] == "--slave" || os.Args[1] == "-slave") {
+               isMaster = false
+               appSuffix = "-slave"
+       }
+
+       // Initialize libmemif first.
+       appName := "ICMP-Responder" + appSuffix
+       fmt.Println("Initializing libmemif as ", appName)
+       err = libmemif.Init(appName)
+       if err != nil {
+               fmt.Printf("libmemif.Init() error: %v\n", err)
+               return
+       }
+       // Schedule automatic cleanup.
+       defer libmemif.Cleanup()
+
+       // Prepare callbacks to use with the memif.
+       // The same callbacks could be used with multiple memifs.
+       // The first input argument (*libmemif.Memif) can be used to tell which
+       // memif the callback was triggered for.
+       memifCallbacks := &libmemif.MemifCallbacks{
+               OnConnect:    OnConnect,
+               OnDisconnect: OnDisconnect,
+       }
+
+       // Prepare memif1 configuration.
+       memifConfig := &libmemif.MemifConfig{
+               MemifMeta: libmemif.MemifMeta{
+                       IfName:         "memif1",
+                       ConnID:         ConnectionID,
+                       SocketFilename: Socket,
+                       Secret:         Secret,
+                       IsMaster:       isMaster,
+                       Mode:           libmemif.IfModeEthernet,
+               },
+               MemifShmSpecs: libmemif.MemifShmSpecs{
+                       NumRxQueues:  NumQueues,
+                       NumTxQueues:  NumQueues,
+                       BufferSize:   2048,
+                       Log2RingSize: 10,
+               },
+       }
+
+       fmt.Printf("Callbacks: %+v\n", memifCallbacks)
+       fmt.Printf("Config: %+v\n", memifConfig)
+
+       // Create memif1 interface.
+       memif, err := libmemif.CreateInterface(memifConfig, memifCallbacks)
+       if err != nil {
+               fmt.Printf("libmemif.CreateInterface() error: %v\n", err)
+               return
+       }
+       // Schedule automatic cleanup of the interface.
+       defer memif.Close()
+
+       // Wait until an interrupt signal is received.
+       sigChan := make(chan os.Signal, 1)
+       signal.Notify(sigChan, os.Interrupt)
+       <-sigChan
+}
diff --git a/extras/libmemif/examples/raw-data/raw-data.go b/extras/libmemif/examples/raw-data/raw-data.go
new file mode 100644 (file)
index 0000000..f8a6aad
--- /dev/null
@@ -0,0 +1,240 @@
+// raw-data is a basic example showing how to create a memif interface, handle
+// events through callbacks and perform Rx/Tx of raw data. Before handling
+// an actual packets it is important to understand the skeleton of libmemif-based
+// applications.
+//
+// Since VPP expects proper packet data, it is not very useful to connect
+// raw-data example with VPP, even though it will work, since all the received
+// data will get dropped on the VPP side.
+//
+// To create a connection of two raw-data instances, run two processes
+// concurrently:
+//  - master memif:
+//     $ ./raw-data
+//  - slave memif:
+//     $ ./raw-data --slave
+//
+// Every 3 seconds both sides send 3 raw-data packets to the opposite end through
+// each queue. The received packets are printed to stdout.
+//
+// Stop an instance of raw-data with an interrupt signal.
+package main
+
+import (
+       "fmt"
+       "os"
+       "os/signal"
+       "strconv"
+       "sync"
+       "time"
+
+       "git.fd.io/govpp.git/extras/libmemif"
+)
+
+const (
+       // Socket through which the opposite memifs will establish the connection.
+       Socket = "/tmp/raw-data-example"
+
+       // Secret used to authenticate the memif connection.
+       Secret = "secret"
+
+       // ConnectionID is an identifier used to match opposite memifs.
+       ConnectionID = 1
+
+       // NumQueues is the (configured!) number of queues for both Rx & Tx.
+       // The actual number agreed during connection establishment may be smaller!
+       NumQueues uint8 = 3
+)
+
+// For management of go routines.
+var wg sync.WaitGroup
+var stopCh chan struct{}
+
+// OnConnect is called when a memif connection gets established.
+func OnConnect(memif *libmemif.Memif) (err error) {
+       details, err := memif.GetDetails()
+       if err != nil {
+               fmt.Printf("libmemif.GetDetails() error: %v\n", err)
+       }
+       fmt.Printf("memif %s has been connected: %+v\n", memif.IfName, details)
+
+       stopCh = make(chan struct{})
+       // Start a separate go routine for each queue.
+       // (memif queue is a unit of parallelism for Rx/Tx)
+       // Beware: the number of queues created may be lower than what was requested
+       // in MemifConfiguration (the master makes the final decision).
+       // Use Memif.GetDetails to get the number of queues.
+       var i uint8
+       for i = 0; i < uint8(len(details.RxQueues)); i++ {
+               wg.Add(1)
+               go ReadAndPrintPackets(memif, i)
+       }
+       for i = 0; i < uint8(len(details.TxQueues)); i++ {
+               wg.Add(1)
+               go SendPackets(memif, i)
+       }
+       return nil
+}
+
+// OnDisconnect is called when a memif connection is lost.
+func OnDisconnect(memif *libmemif.Memif) (err error) {
+       fmt.Printf("memif %s has been disconnected\n", memif.IfName)
+       // Stop all packet producers and consumers.
+       close(stopCh)
+       wg.Wait()
+       return nil
+}
+
+// ReadAndPrintPackets keeps receiving raw packet data from a selected queue
+// and prints them to stdout.
+func ReadAndPrintPackets(memif *libmemif.Memif, queueID uint8) {
+       defer wg.Done()
+
+       // Get channel which fires every time there are packets to read on the queue.
+       interruptCh, err := memif.GetQueueInterruptChan(queueID)
+       if err != nil {
+               // Example of libmemif error handling code:
+               switch err {
+               case libmemif.ErrQueueID:
+                       fmt.Printf("libmemif.Memif.GetQueueInterruptChan() complains about invalid queue id!?")
+               // Here you would put all the errors that need to be handled individually...
+               default:
+                       fmt.Printf("libmemif.Memif.GetQueueInterruptChan() error: %v\n", err)
+               }
+               return
+       }
+
+       for {
+               select {
+               case <-interruptCh:
+                       // Read all packets from the queue but at most 10 at once.
+                       // Since there is only one interrupt signal sent for an entire burst
+                       // of packets, an interrupt handling routine should repeatedly call
+                       // RxBurst() until the function returns an empty slice of packets.
+                       // This way it is ensured that there are no packets left
+                       // on the queue unread when the interrupt signal is cleared.
+                       for {
+                               packets, err := memif.RxBurst(queueID, 10)
+                               if err != nil {
+                                       fmt.Printf("libmemif.Memif.RxBurst() error: %v\n", err)
+                                       // Skip this burst, continue with the next one 3secs later...
+                               } else {
+                                       if len(packets) == 0 {
+                                               // No more packets to read until the next interrupt.
+                                               break
+                                       }
+                                       for _, packet := range packets {
+                                               fmt.Printf("Received packet queue=%d: %v\n", queueID, string(packet[:]))
+                                       }
+                               }
+                       }
+               case <-stopCh:
+                       return
+               }
+       }
+}
+
+// SendPackets keeps sending bursts of 3 raw-data packets every 3 seconds into
+// the selected queue.
+func SendPackets(memif *libmemif.Memif, queueID uint8) {
+       defer wg.Done()
+
+       counter := 0
+       for {
+               select {
+               case <-time.After(3 * time.Second):
+                       counter++
+                       // Prepare fake packets.
+                       packets := []libmemif.RawPacketData{
+                               libmemif.RawPacketData("Packet #1 in burst number " + strconv.Itoa(counter)),
+                               libmemif.RawPacketData("Packet #2 in burst number " + strconv.Itoa(counter)),
+                               libmemif.RawPacketData("Packet #3 in burst number " + strconv.Itoa(counter)),
+                       }
+                       // Send the packets. We may not be able to do it in one burst if the ring
+                       // is (almost) full or the internal buffer cannot contain it.
+                       sent := 0
+                       for {
+                               count, err := memif.TxBurst(queueID, packets[sent:])
+                               if err != nil {
+                                       fmt.Printf("libmemif.Memif.TxBurst() error: %v\n", err)
+                                       break
+                               } else {
+                                       fmt.Printf("libmemif.Memif.TxBurst() has sent %d packets.\n", count)
+                                       sent += int(count)
+                                       if sent == len(packets) {
+                                               break
+                                       }
+                               }
+                       }
+               case <-stopCh:
+                       return
+               }
+       }
+}
+
+func main() {
+       fmt.Println("Starting 'raw-data' example...")
+
+       // If run with the "--slave" option, create memif in the slave mode.
+       var isMaster = true
+       var appSuffix string
+       if len(os.Args) > 1 && (os.Args[1] == "--slave" || os.Args[1] == "-slave") {
+               isMaster = false
+               appSuffix = "-slave"
+       }
+
+       // Initialize libmemif first.
+       appName := "Raw-Data" + appSuffix
+       fmt.Println("Initializing libmemif as ", appName)
+       err := libmemif.Init(appName)
+       if err != nil {
+               fmt.Printf("libmemif.Init() error: %v\n", err)
+               return
+       }
+       // Schedule automatic cleanup.
+       defer libmemif.Cleanup()
+
+       // Prepare callbacks to use with the memif.
+       // The same callbacks could be used with multiple memifs.
+       // The first input argument (*libmemif.Memif) can be used to tell which
+       // memif the callback was triggered for.
+       memifCallbacks := &libmemif.MemifCallbacks{
+               OnConnect:    OnConnect,
+               OnDisconnect: OnDisconnect,
+       }
+
+       // Prepare memif1 configuration.
+       memifConfig := &libmemif.MemifConfig{
+               MemifMeta: libmemif.MemifMeta{
+                       IfName:         "memif1",
+                       ConnID:         ConnectionID,
+                       SocketFilename: Socket,
+                       Secret:         Secret,
+                       IsMaster:       isMaster,
+                       Mode:           libmemif.IfModeEthernet,
+               },
+               MemifShmSpecs: libmemif.MemifShmSpecs{
+                       NumRxQueues:  NumQueues,
+                       NumTxQueues:  NumQueues,
+                       BufferSize:   2048,
+                       Log2RingSize: 10,
+               },
+       }
+
+       fmt.Printf("Callbacks: %+v\n", memifCallbacks)
+       fmt.Printf("Config: %+v\n", memifConfig)
+
+       // Create memif1 interface.
+       memif, err := libmemif.CreateInterface(memifConfig, memifCallbacks)
+       if err != nil {
+               fmt.Printf("libmemif.CreateInterface() error: %v\n", err)
+               return
+       }
+       // Schedule automatic cleanup of the interface.
+       defer memif.Close()
+
+       // Wait until an interrupt signal is received.
+       sigChan := make(chan os.Signal, 1)
+       signal.Notify(sigChan, os.Interrupt)
+       <-sigChan
+}
index 1ea0090..e63e196 100644 (file)
@@ -1,10 +1,14 @@
-hash: 92ccb280ef0daf6a46db82b2599b097abdb2eb1cd8f9de518def2c4f92d97fdc
-updated: 2017-09-12T09:54:16.30397759+02:00
+hash: 5367b16eb1343728b5cccd82f4f7c4ea2cb42c284d3ebf6b7c519ea1c35bd755
+updated: 2017-10-11T16:39:11.448357454+02:00
 imports:
 - name: github.com/bennyscetbun/jsongo
   version: 5240b3f82c6665fe3ccd96bdf5e6f38fe1e1399d
 - name: github.com/fsnotify/fsnotify
   version: 4da3e2cfbabc9f751898f250b49f2439785783a1
+- name: github.com/google/gopacket
+  version: 8e484f31b1237166f00e4896d27ddde259540632
+  subpackages:
+  - layers
 - name: github.com/lunixbochs/struc
   version: ef56447db6a068ad9e52bc54a1aff5fb9e1ed2dd
 - name: github.com/pkg/profile
@@ -12,7 +16,7 @@ imports:
 - name: github.com/Sirupsen/logrus
   version: 202f25545ea4cf9b191ff7f846df5d87c9382c2b
 - name: golang.org/x/sys
-  version: e48874b42435b4347fc52bdee0424a52abc974d7
+  version: 9ccfe848b9db8435a24c424abbc07a921adf1df5
   subpackages:
   - unix
 testImports:
@@ -31,4 +35,4 @@ testImports:
   - matchers/support/goraph/util
   - types
 - name: gopkg.in/yaml.v2
-  version: eb3733d160e74a9c7e442f435eb3bea458e1d19f
+  version: cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b
index 05ad1f4..9f4fac3 100644 (file)
@@ -8,6 +8,8 @@ import:
   version: ef56447db6a068ad9e52bc54a1aff5fb9e1ed2dd
 - package: github.com/fsnotify/fsnotify
   version: 4da3e2cfbabc9f751898f250b49f2439785783a1
+- package: github.com/google/gopacket
+  version: 8e484f31b1237166f00e4896d27ddde259540632
 testImport:
 - package: github.com/onsi/gomega
   version: v1.1.0
diff --git a/vendor/github.com/google/gopacket/.gitignore b/vendor/github.com/google/gopacket/.gitignore
new file mode 100644 (file)
index 0000000..149266f
--- /dev/null
@@ -0,0 +1,38 @@
+# Compiled Object files, Static and Dynamic libs (Shared Objects)
+*.o
+*.a
+*.so
+
+# Folders
+_obj
+_test
+
+# Architecture specific extensions/prefixes
+*.[568vq]
+[568vq].out
+
+*.cgo1.go
+*.cgo2.c
+_cgo_defun.c
+_cgo_gotypes.go
+_cgo_export.*
+
+_testmain.go
+
+*.exe
+#*
+*~
+
+# examples binaries
+examples/synscan/synscan
+examples/pfdump/pfdump
+examples/pcapdump/pcapdump
+examples/httpassembly/httpassembly
+examples/statsassembly/statsassembly
+examples/arpscan/arpscan
+examples/bidirectional/bidirectional
+examples/bytediff/bytediff
+examples/reassemblydump/reassemblydump
+layers/gen
+macs/gen
+pcap/pcap_tester
diff --git a/vendor/github.com/google/gopacket/.travis.gofmt.sh b/vendor/github.com/google/gopacket/.travis.gofmt.sh
new file mode 100755 (executable)
index 0000000..e341a1c
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+cd "$(dirname $0)"
+if [ -n "$(go fmt ./...)" ]; then
+  echo "Go code is not formatted, run 'go fmt github.com/google/stenographer/...'" >&2
+  exit 1
+fi
diff --git a/vendor/github.com/google/gopacket/.travis.golint.sh b/vendor/github.com/google/gopacket/.travis.golint.sh
new file mode 100755 (executable)
index 0000000..ed74c65
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+cd "$(dirname $0)"
+
+go get github.com/golang/lint/golint
+DIRS=". tcpassembly tcpassembly/tcpreader ip4defrag reassembly macs pcapgo pcap afpacket pfring routing"
+# Add subdirectories here as we clean up golint on each.
+for subdir in $DIRS; do
+  pushd $subdir
+  if golint |
+      grep -v CannotSetRFMon |  # pcap exported error name
+      grep -v DataLost |        # tcpassembly/tcpreader exported error name
+      grep .; then
+    exit 1
+  fi
+  popd
+done
+
+pushd layers
+for file in $(cat .linted); do
+  if golint $file | grep .; then
+    exit 1
+  fi
+done
+popd
diff --git a/vendor/github.com/google/gopacket/.travis.govet.sh b/vendor/github.com/google/gopacket/.travis.govet.sh
new file mode 100755 (executable)
index 0000000..52ad084
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+cd "$(dirname $0)"
+DIRS=". layers pcap pcapgo pfring tcpassembly tcpassembly/tcpreader routing ip4defrag bytediff macs"
+set -e
+for subdir in $DIRS; do
+  pushd $subdir
+  go vet
+  popd
+done
diff --git a/vendor/github.com/google/gopacket/.travis.yml b/vendor/github.com/google/gopacket/.travis.yml
new file mode 100644 (file)
index 0000000..7d73126
--- /dev/null
@@ -0,0 +1,14 @@
+language: go
+install:
+ - go get github.com/google/gopacket
+ - go get github.com/google/gopacket/layers
+ - go get github.com/google/gopacket/tcpassembly
+ - go get github.com/google/gopacket/reassembly
+script:
+ - go test github.com/google/gopacket
+ - go test github.com/google/gopacket/layers
+ - go test github.com/google/gopacket/tcpassembly
+ - go test github.com/google/gopacket/reassembly
+ - ./.travis.gofmt.sh
+ - ./.travis.govet.sh
+ - ./.travis.golint.sh
diff --git a/vendor/github.com/google/gopacket/AUTHORS b/vendor/github.com/google/gopacket/AUTHORS
new file mode 100644 (file)
index 0000000..eba34f0
--- /dev/null
@@ -0,0 +1,46 @@
+AUTHORS AND MAINTAINERS:
+
+MAIN DEVELOPERS:
+Graeme Connell   <gconnell@google.com, gsconnell@gmail.com>
+
+AUTHORS:
+Nigel Tao <nigeltao@google.com>
+Cole Mickens <cole.mickens@gmail.com>
+Ben Daglish <bdaglish@restorepoint.com>
+Luis Martinez <martinezlc99@gmail.com>
+Remco Verhoef <remco@dutchcoders.io>
+Hiroaki Kawai <Hiroaki.Kawai@gmail.com>
+Lukas Lueg <lukas.lueg@gmail.com>
+Laurent Hausermann <laurent.hausermann@gmail.com>
+Bill Green <bgreen@newrelic.com>
+
+CONTRIBUTORS:
+Attila Oláh <attila@attilaolah.eu>
+Vittus Mikiassen <matt.miki.vimik@gmail.com>
+Matthias Radestock <matthias.radestock@gmail.com>
+Matthew Sackman <matthew@wellquite.org>
+Loic Prylli <loicp@google.com>
+Alexandre Fiori <fiorix@gmail.com>
+Adrian Tam <adrian.c.m.tam@gmail.com>
+Satoshi Matsumoto <kaorimatz@gmail.com>
+David Stainton <dstainton415@gmail.com>
+Jesse Ward <jesse@jesseward.com>
+Kane Mathers <kane@kanemathers.name>
+
+-----------------------------------------------
+FORKED FROM github.com/akrennmair/gopcap
+ALL THE FOLLOWING ARE FOR THAT PROJECT
+
+MAIN DEVELOPERS:
+Andreas Krennmair <ak@synflood.at>
+
+CONTRIBUTORS:
+Andrea Nall <anall@andreanall.com>
+Daniel Arndt <danielarndt@gmail.com>
+Dustin Sallings <dustin@spy.net>
+Graeme Connell <gconnell@google.com, gsconnell@gmail.com>
+Guillaume Savary <guillaume@savary.name>
+Mark Smith <mark@qq.is>
+Miek Gieben <miek@miek.nl>
+Mike Bell <mike@mikebell.org>
+Trevor Strohman <strohman@google.com>
diff --git a/vendor/github.com/google/gopacket/CONTRIBUTING.md b/vendor/github.com/google/gopacket/CONTRIBUTING.md
new file mode 100644 (file)
index 0000000..99ab7a2
--- /dev/null
@@ -0,0 +1,215 @@
+Contributing To gopacket
+========================
+
+So you've got some code and you'd like it to be part of gopacket... wonderful!
+We're happy to accept contributions, whether they're fixes to old protocols, new
+protocols entirely, or anything else you think would improve the gopacket
+library.  This document is designed to help you to do just that.
+
+The first section deals with the plumbing:  how to actually get a change
+submitted.
+
+The second section deals with coding style... Go is great in that it
+has a uniform style implemented by 'go fmt', but there's still some decisions
+we've made that go above and beyond, and if you follow them, they won't come up
+in your code review.
+
+The third section deals with some of the implementation decisions we've made,
+which may help you to understand the current code and which we may ask you to
+conform to (or provide compelling reasons for ignoring).
+
+Overall, we hope this document will help you to understand our system and write
+great code which fits in, and help us to turn around on your code review quickly
+so the code can make it into the master branch as quickly as possible.
+
+
+How To Submit Code
+------------------
+
+We use github.com's Pull Request feature to receive code contributions from
+external contributors.  See
+https://help.github.com/articles/creating-a-pull-request/ for details on
+how to create a request.
+
+Also, there's a local script `gc` in the base directory of GoPacket that
+runs a local set of checks, which should give you relatively high confidence
+that your pull won't fail github pull checks.
+
+```sh
+go get github.com/google/gopacket
+cd $GOROOT/src/pkg/github.com/google/gopacket
+git checkout -b <mynewfeature>  # create a new branch to work from
+... code code code ...
+./gc  # Run this to do local commits, it performs a number of checks
+```
+
+To sum up:
+
+* DO
+    + Pull down the latest version.
+    + Make a feature-specific branch.
+    + Code using the style and methods discussed in the rest of this document.
+    + Use the ./gc command to do local commits or check correctness.
+    + Push your new feature branch up to github.com, as a pull request.
+    + Handle comments and requests from reviewers, pushing new commits up to
+      your feature branch as problems are addressed.
+    + Put interesting comments and discussions into commit comments.
+* DON'T
+    + Push to someone else's branch without their permission.
+
+
+Coding Style
+------------
+
+* Go code must be run through `go fmt`, `go vet`, and `golint`
+* Follow http://golang.org/doc/effective_go.html as much as possible.
+    + In particular, http://golang.org/doc/effective_go.html#mixed-caps.  Enums
+      should be be CamelCase, with acronyms capitalized (TCPSourcePort, vs.
+      TcpSourcePort or TCP_SOURCE_PORT).
+* Bonus points for giving enum types a String() field.
+* Any exported types or functions should have commentary
+  (http://golang.org/doc/effective_go.html#commentary)
+
+
+Coding Methods And Implementation Notes
+---------------------------------------
+
+### Error Handling
+
+Many times, you'll be decoding a protocol and run across something bad, a packet
+corruption or the like.  How do you handle this?  First off, ALWAYS report the
+error.  You can do this either by returning the error from the decode() function
+(most common), or if you're up for it you can implement and add an ErrorLayer
+through the packet builder (the first method is a simple shortcut that does
+exactly this, then stops any future decoding).
+
+Often, you'll already have decode some part of your protocol by the time you hit
+your error.  Use your own discretion to determine whether the stuff you've
+already decoded should be returned to the caller or not:
+
+```go
+func decodeMyProtocol(data []byte, p gopacket.PacketBuilder) error {
+  prot := &MyProtocol{}
+  if len(data) < 10 {
+    // This error occurred before we did ANYTHING, so there's nothing in my
+    // protocol that the caller could possibly want.  Just return the error.
+    return fmt.Errorf("Length %d less than 10", len(data))
+  }
+  prot.ImportantField1 = data[:5]
+  prot.ImportantField2 = data[5:10]
+  // At this point, we've already got enough information in 'prot' to
+  // warrant returning it to the caller, so we'll add it now.
+  p.AddLayer(prot)
+  if len(data) < 15 {
+    // We encountered an error later in the packet, but the caller already
+    // has the important info we've gleaned so far.
+    return fmt.Errorf("Length %d less than 15", len(data))
+  }
+  prot.ImportantField3 = data[10:15]
+  return nil  // We've already added the layer, we can just return success.
+}
+```
+
+In general, our code follows the approach of returning the first error it
+encounters.  In general, we don't trust any bytes after the first error we see.
+
+### What Is A Layer?
+
+The definition of a layer is up to the discretion of the coder.  It should be
+something important enough that it's actually useful to the caller (IE: every
+TLV value should probably NOT be a layer).  However, it can be more granular
+than a single protocol... IPv6 and SCTP both implement many layers to handle the
+various parts of the protocol.  Use your best judgement, and prepare to defend
+your decisions during code review. ;)
+
+### Performance
+
+We strive to make gopacket as fast as possible while still providing lots of
+features.  In general, this means:
+
+* Focus performance tuning on common protocols (IP4/6, TCP, etc), and optimize
+  others on an as-needed basis (tons of MPLS on your network?  Time to optimize
+  MPLS!)
+* Use fast operations.  See the toplevel benchmark_test for benchmarks of some
+  of Go's underlying features and types.
+* Test your performance changes!  You should use the ./gc script's --benchmark
+  flag to submit any performance-related changes.  Use pcap/gopacket_benchmark
+  to test your change against a PCAP file based on your traffic patterns.
+* Don't be TOO hacky.  Sometimes, removing an unused struct from a field causes
+  a huge performance hit, due to the way that Go currently handles its segmented
+  stack... don't be afraid to clean it up anyway.  We'll trust the Go compiler
+  to get good enough over time to handle this.  Also, this type of
+  compiler-specific optimization is very fragile; someone adding a field to an
+  entirely different struct elsewhere in the codebase could reverse any gains
+  you might achieve by aligning your allocations.
+* Try to minimize memory allocations.  If possible, use []byte to reference
+  pieces of the input, instead of using string, which requires copying the bytes
+  into a new memory allocation.
+* Think hard about what should be evaluated lazily vs. not.  In general, a
+  layer's struct should almost exactly mirror the layer's frame.  Anything
+  that's more interesting should be a function.  This may not always be
+  possible, but it's a good rule of thumb.
+* Don't fear micro-optimizations.  With the above in mind, we welcome
+  micro-optimizations that we think will have positive/neutral impacts on the
+  majority of workloads.  A prime example of this is pre-allocating certain
+  structs within a larger one:
+
+```go
+type MyProtocol struct {
+  // Most packets have 1-4 of VeryCommon, so we preallocate it here.
+  initialAllocation [4]uint32
+  VeryCommon []uint32
+}
+
+func decodeMyProtocol(data []byte, p gopacket.PacketBuilder) error {
+  prot := &MyProtocol{}
+  prot.VeryCommon = proto.initialAllocation[:0]
+  for len(data) > 4 {
+    field := binary.BigEndian.Uint32(data[:4])
+    data = data[4:]
+    // Since we're using the underlying initialAllocation, we won't need to
+    // allocate new memory for the following append unless we more than 16
+    // bytes of data, which should be the uncommon case.
+    prot.VeryCommon = append(prot.VeryCommon, field)
+  }
+  p.AddLayer(prot)
+  if len(data) > 0 {
+    return fmt.Errorf("MyProtocol packet has %d bytes left after decoding", len(data))
+  }
+  return nil
+}
+```
+
+### Slices And Data
+
+If you're pulling a slice from the data you're decoding, don't copy it.  Just
+use the slice itself.
+
+```go
+type MyProtocol struct {
+  A, B net.IP
+}
+func decodeMyProtocol(data []byte, p gopacket.PacketBuilder) error {
+  p.AddLayer(&MyProtocol{
+    A: data[:4],
+    B: data[4:8],
+  })
+  return nil
+}
+```
+
+The caller has already agreed, by using this library, that they won't modify the
+set of bytes they pass in to the decoder, or the library has already copied the
+set of bytes to a read-only location.  See DecodeOptions.NoCopy for more
+information.
+
+### Enums/Types
+
+If a protocol has an integer field (uint8, uint16, etc) with a couple of known
+values that mean something special, make it a type.  This allows us to do really
+nice things like adding a String() function to them, so we can more easily
+display those to users.  Check out layers/enums.go for one example, as well as
+layers/icmp.go for layer-specific enums.
+
+When naming things, try for descriptiveness over suscinctness.  For example,
+choose DNSResponseRecord over DNSRR.
diff --git a/vendor/github.com/google/gopacket/LICENSE b/vendor/github.com/google/gopacket/LICENSE
new file mode 100644 (file)
index 0000000..2100d52
--- /dev/null
@@ -0,0 +1,28 @@
+Copyright (c) 2012 Google, Inc. All rights reserved.
+Copyright (c) 2009-2011 Andreas Krennmair. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * 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.
+   * Neither the name of Andreas Krennmair, Google, nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+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
+OWNER 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.
diff --git a/vendor/github.com/google/gopacket/README.md b/vendor/github.com/google/gopacket/README.md
new file mode 100644 (file)
index 0000000..f71854c
--- /dev/null
@@ -0,0 +1,10 @@
+# GoPacket
+
+This library provides packet decoding capabilities for Go.
+See [godoc](https://godoc.org/github.com/google/gopacket) for more details.
+
+[![Build Status](https://travis-ci.org/google/gopacket.svg?branch=master)](https://travis-ci.org/google/gopacket)
+[![GoDoc](https://godoc.org/github.com/google/gopacket?status.svg)](https://godoc.org/github.com/google/gopacket)
+
+Originally forked from the gopcap project written by Andreas
+Krennmair <ak@synflood.at> (http://github.com/akrennmair/gopcap).
diff --git a/vendor/github.com/google/gopacket/afpacket/afpacket.go b/vendor/github.com/google/gopacket/afpacket/afpacket.go
new file mode 100644 (file)
index 0000000..13937c1
--- /dev/null
@@ -0,0 +1,476 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+// Package afpacket provides Go bindings for MMap'd AF_PACKET socket reading.
+package afpacket
+
+// Couldn't have done this without:
+// http://lxr.free-electrons.com/source/Documentation/networking/packet_mmap.txt
+// http://codemonkeytips.blogspot.co.uk/2011/07/asynchronous-packet-socket-reading-with.html
+
+import (
+       "errors"
+       "fmt"
+       "net"
+       "runtime"
+       "sync"
+       "sync/atomic"
+       "time"
+       "unsafe"
+
+       "golang.org/x/net/bpf"
+       "golang.org/x/sys/unix"
+
+       "github.com/google/gopacket"
+)
+
+/*
+#include <linux/if_packet.h>  // AF_PACKET, sockaddr_ll
+#include <linux/if_ether.h>  // ETH_P_ALL
+#include <sys/socket.h>  // socket()
+#include <unistd.h>  // close()
+#include <arpa/inet.h>  // htons()
+#include <sys/mman.h>  // mmap(), munmap()
+#include <poll.h>  // poll()
+*/
+import "C"
+
+var pageSize = unix.Getpagesize()
+var tpacketAlignment = uint(C.TPACKET_ALIGNMENT)
+
+// ErrPoll returned by poll
+var ErrPoll = errors.New("packet poll failed")
+
+// ErrTimeout returned on poll timeout
+var ErrTimeout = errors.New("packet poll timeout expired")
+
+func tpacketAlign(v int) int {
+       return int((uint(v) + tpacketAlignment - 1) & ((^tpacketAlignment) - 1))
+}
+
+// Stats is a set of counters detailing the work TPacket has done so far.
+type Stats struct {
+       // Packets is the total number of packets returned to the caller.
+       Packets int64
+       // Polls is the number of blocking syscalls made waiting for packets.
+       // This should always be <= Packets, since with TPacket one syscall
+       // can (and often does) return many results.
+       Polls int64
+}
+
+// SocketStats is a struct where socket stats are stored
+type SocketStats C.struct_tpacket_stats
+
+// SocketStatsV3 is a struct where socket stats for TPacketV3 are stored
+type SocketStatsV3 C.struct_tpacket_stats_v3
+
+// TPacket implements packet receiving for Linux AF_PACKET versions 1, 2, and 3.
+type TPacket struct {
+       // fd is the C file descriptor.
+       fd int
+       // ring points to the memory space of the ring buffer shared by tpacket and the kernel.
+       ring []byte
+       // rawring is the unsafe pointer that we use to poll for packets
+       rawring unsafe.Pointer
+       // opts contains read-only options for the TPacket object.
+       opts options
+       mu   sync.Mutex // guards below
+       // offset is the offset into the ring of the current header.
+       offset int
+       // current is the current header.
+       current header
+       // pollset is used by TPacket for its poll() call.
+       pollset unix.PollFd
+       // shouldReleasePacket is set to true whenever we return packet data, to make sure we remember to release that data back to the kernel.
+       shouldReleasePacket bool
+       // headerNextNeeded is set to true when header need to move to the next packet. No need to move it case of poll error.
+       headerNextNeeded bool
+       // tpVersion is the version of TPacket actually in use, set by setRequestedTPacketVersion.
+       tpVersion OptTPacketVersion
+       // Hackity hack hack hack.  We need to return a pointer to the header with
+       // getTPacketHeader, and we don't want to allocate a v3wrapper every time,
+       // so we leave it in the TPacket object and return a pointer to it.
+       v3 v3wrapper
+
+       statsMu sync.Mutex // guards stats below
+       // stats is simple statistics on TPacket's run.
+       stats Stats
+       // socketStats contains stats from the socket
+       socketStats SocketStats
+       // same as socketStats, but with an extra field freeze_q_cnt
+       socketStatsV3 SocketStatsV3
+}
+
+var _ gopacket.ZeroCopyPacketDataSource = &TPacket{}
+
+// bindToInterface binds the TPacket socket to a particular named interface.
+func (h *TPacket) bindToInterface(ifaceName string) error {
+       ifIndex := 0
+       // An empty string here means to listen to all interfaces
+       if ifaceName != "" {
+               iface, err := net.InterfaceByName(ifaceName)
+               if err != nil {
+                       return fmt.Errorf("InterfaceByName: %v", err)
+               }
+               ifIndex = iface.Index
+       }
+       s := &unix.SockaddrLinklayer{
+               Protocol: htons(uint16(unix.ETH_P_ALL)),
+               Ifindex:  ifIndex,
+       }
+       return unix.Bind(h.fd, s)
+}
+
+// setTPacketVersion asks the kernel to set TPacket to a particular version, and returns an error on failure.
+func (h *TPacket) setTPacketVersion(version OptTPacketVersion) error {
+       if err := unix.SetsockoptInt(h.fd, unix.SOL_PACKET, unix.PACKET_VERSION, int(version)); err != nil {
+               return fmt.Errorf("setsockopt packet_version: %v", err)
+       }
+       return nil
+}
+
+// setRequestedTPacketVersion tries to set TPacket to the requested version or versions.
+func (h *TPacket) setRequestedTPacketVersion() error {
+       switch {
+       case (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion3) && h.setTPacketVersion(TPacketVersion3) == nil:
+               h.tpVersion = TPacketVersion3
+       case (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion2) && h.setTPacketVersion(TPacketVersion2) == nil:
+               h.tpVersion = TPacketVersion2
+       case (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion1) && h.setTPacketVersion(TPacketVersion1) == nil:
+               h.tpVersion = TPacketVersion1
+       default:
+               return errors.New("no known tpacket versions work on this machine")
+       }
+       return nil
+}
+
+// setUpRing sets up the shared-memory ring buffer between the user process and the kernel.
+func (h *TPacket) setUpRing() (err error) {
+       totalSize := int(h.opts.framesPerBlock * h.opts.numBlocks * h.opts.frameSize)
+       switch h.tpVersion {
+       case TPacketVersion1, TPacketVersion2:
+               var tp C.struct_tpacket_req
+               tp.tp_block_size = C.uint(h.opts.blockSize)
+               tp.tp_block_nr = C.uint(h.opts.numBlocks)
+               tp.tp_frame_size = C.uint(h.opts.frameSize)
+               tp.tp_frame_nr = C.uint(h.opts.framesPerBlock * h.opts.numBlocks)
+               if err := setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_RX_RING, unsafe.Pointer(&tp), unsafe.Sizeof(tp)); err != nil {
+                       return fmt.Errorf("setsockopt packet_rx_ring: %v", err)
+               }
+       case TPacketVersion3:
+               var tp C.struct_tpacket_req3
+               tp.tp_block_size = C.uint(h.opts.blockSize)
+               tp.tp_block_nr = C.uint(h.opts.numBlocks)
+               tp.tp_frame_size = C.uint(h.opts.frameSize)
+               tp.tp_frame_nr = C.uint(h.opts.framesPerBlock * h.opts.numBlocks)
+               tp.tp_retire_blk_tov = C.uint(h.opts.blockTimeout / time.Millisecond)
+               if err := setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_RX_RING, unsafe.Pointer(&tp), unsafe.Sizeof(tp)); err != nil {
+                       return fmt.Errorf("setsockopt packet_rx_ring v3: %v", err)
+               }
+       default:
+               return errors.New("invalid tpVersion")
+       }
+       h.ring, err = unix.Mmap(h.fd, 0, totalSize, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)
+       if err != nil {
+               return err
+       }
+       if h.ring == nil {
+               return errors.New("no ring")
+       }
+       h.rawring = unsafe.Pointer(&h.ring[0])
+       return nil
+}
+
+// Close cleans up the TPacket.  It should not be used after the Close call.
+func (h *TPacket) Close() {
+       if h.fd == -1 {
+               return // already closed.
+       }
+       if h.ring != nil {
+               unix.Munmap(h.ring)
+       }
+       h.ring = nil
+       unix.Close(h.fd)
+       h.fd = -1
+       runtime.SetFinalizer(h, nil)
+}
+
+// NewTPacket returns a new TPacket object for reading packets off the wire.
+// Its behavior may be modified by passing in any/all of afpacket.Opt* to this
+// function.
+// If this function succeeds, the user should be sure to Close the returned
+// TPacket when finished with it.
+func NewTPacket(opts ...interface{}) (h *TPacket, err error) {
+       h = &TPacket{}
+       if h.opts, err = parseOptions(opts...); err != nil {
+               return nil, err
+       }
+       fd, err := unix.Socket(unix.AF_PACKET, int(h.opts.socktype), int(htons(unix.ETH_P_ALL)))
+       if err != nil {
+               return nil, err
+       }
+       h.fd = fd
+       if err = h.bindToInterface(h.opts.iface); err != nil {
+               goto errlbl
+       }
+       if err = h.setRequestedTPacketVersion(); err != nil {
+               goto errlbl
+       }
+       if err = h.setUpRing(); err != nil {
+               goto errlbl
+       }
+       // Clear stat counter from socket
+       if err = h.InitSocketStats(); err != nil {
+               goto errlbl
+       }
+       runtime.SetFinalizer(h, (*TPacket).Close)
+       return h, nil
+errlbl:
+       h.Close()
+       return nil, err
+}
+
+// SetBPF attaches a BPF filter to the underlying socket
+func (h *TPacket) SetBPF(filter []bpf.RawInstruction) error {
+       var p unix.SockFprog
+       if len(filter) > int(^uint16(0)) {
+               return errors.New("filter too large")
+       }
+       p.Len = uint16(len(filter))
+       p.Filter = (*unix.SockFilter)(unsafe.Pointer(&filter[0]))
+
+       return setsockopt(h.fd, unix.SOL_SOCKET, unix.SO_ATTACH_FILTER, unsafe.Pointer(&p), unix.SizeofSockFprog)
+}
+
+func (h *TPacket) releaseCurrentPacket() error {
+       h.current.clearStatus()
+       h.offset++
+       h.shouldReleasePacket = false
+       return nil
+}
+
+// ZeroCopyReadPacketData reads the next packet off the wire, and returns its data.
+// The slice returned by ZeroCopyReadPacketData points to bytes owned by the
+// TPacket.  Each call to ZeroCopyReadPacketData invalidates any data previously
+// returned by ZeroCopyReadPacketData.  Care must be taken not to keep pointers
+// to old bytes when using ZeroCopyReadPacketData... if you need to keep data past
+// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies
+// the bytes into a new buffer for you.
+//  tp, _ := NewTPacket(...)
+//  data1, _, _ := tp.ZeroCopyReadPacketData()
+//  // do everything you want with data1 here, copying bytes out of it if you'd like to keep them around.
+//  data2, _, _ := tp.ZeroCopyReadPacketData()  // invalidates bytes in data1
+func (h *TPacket) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+       h.mu.Lock()
+retry:
+       if h.current == nil || !h.headerNextNeeded || !h.current.next() {
+               if h.shouldReleasePacket {
+                       h.releaseCurrentPacket()
+               }
+               h.current = h.getTPacketHeader()
+               if err = h.pollForFirstPacket(h.current); err != nil {
+                       h.headerNextNeeded = false
+                       h.mu.Unlock()
+                       return
+               }
+               // We received an empty block
+               if h.current.getLength() == 0 {
+                       goto retry
+               }
+       }
+       data = h.current.getData()
+       ci.Timestamp = h.current.getTime()
+       ci.CaptureLength = len(data)
+       ci.Length = h.current.getLength()
+       ci.InterfaceIndex = h.current.getIfaceIndex()
+       atomic.AddInt64(&h.stats.Packets, 1)
+       h.headerNextNeeded = true
+       h.mu.Unlock()
+
+       return
+}
+
+// Stats returns statistics on the packets the TPacket has seen so far.
+func (h *TPacket) Stats() (Stats, error) {
+       return Stats{
+               Polls:   atomic.LoadInt64(&h.stats.Polls),
+               Packets: atomic.LoadInt64(&h.stats.Packets),
+       }, nil
+}
+
+// InitSocketStats clears socket counters and return empty stats.
+func (h *TPacket) InitSocketStats() error {
+       if h.tpVersion == TPacketVersion3 {
+               socklen := unsafe.Sizeof(h.socketStatsV3)
+               slt := C.socklen_t(socklen)
+               var ssv3 SocketStatsV3
+
+               err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ssv3), uintptr(unsafe.Pointer(&slt)))
+               if err != nil {
+                       return err
+               }
+               h.socketStatsV3 = SocketStatsV3{}
+       } else {
+               socklen := unsafe.Sizeof(h.socketStats)
+               slt := C.socklen_t(socklen)
+               var ss SocketStats
+
+               err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ss), uintptr(unsafe.Pointer(&slt)))
+               if err != nil {
+                       return err
+               }
+               h.socketStats = SocketStats{}
+       }
+       return nil
+}
+
+// SocketStats saves stats from the socket to the TPacket instance.
+func (h *TPacket) SocketStats() (SocketStats, SocketStatsV3, error) {
+       h.statsMu.Lock()
+       defer h.statsMu.Unlock()
+       // We need to save the counters since asking for the stats will clear them
+       if h.tpVersion == TPacketVersion3 {
+               socklen := unsafe.Sizeof(h.socketStatsV3)
+               slt := C.socklen_t(socklen)
+               var ssv3 SocketStatsV3
+
+               err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ssv3), uintptr(unsafe.Pointer(&slt)))
+               if err != nil {
+                       return SocketStats{}, SocketStatsV3{}, err
+               }
+
+               h.socketStatsV3.tp_packets += ssv3.tp_packets
+               h.socketStatsV3.tp_drops += ssv3.tp_drops
+               h.socketStatsV3.tp_freeze_q_cnt += ssv3.tp_freeze_q_cnt
+               return h.socketStats, h.socketStatsV3, nil
+       }
+       socklen := unsafe.Sizeof(h.socketStats)
+       slt := C.socklen_t(socklen)
+       var ss SocketStats
+
+       err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ss), uintptr(unsafe.Pointer(&slt)))
+       if err != nil {
+               return SocketStats{}, SocketStatsV3{}, err
+       }
+
+       h.socketStats.tp_packets += ss.tp_packets
+       h.socketStats.tp_drops += ss.tp_drops
+       return h.socketStats, h.socketStatsV3, nil
+}
+
+// ReadPacketDataTo reads packet data into a user-supplied buffer.
+// This function reads up to the length of the passed-in slice.
+// The number of bytes read into data will be returned in ci.CaptureLength,
+// which is the minimum of the size of the passed-in buffer and the size of
+// the captured packet.
+func (h *TPacket) ReadPacketDataTo(data []byte) (ci gopacket.CaptureInfo, err error) {
+       var d []byte
+       d, ci, err = h.ZeroCopyReadPacketData()
+       if err != nil {
+               return
+       }
+       ci.CaptureLength = copy(data, d)
+       return
+}
+
+// ReadPacketData reads the next packet, copies it into a new buffer, and returns
+// that buffer.  Since the buffer is allocated by ReadPacketData, it is safe for long-term
+// use.  This implements gopacket.PacketDataSource.
+func (h *TPacket) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+       var d []byte
+       d, ci, err = h.ZeroCopyReadPacketData()
+       if err != nil {
+               return
+       }
+       data = make([]byte, len(d))
+       copy(data, d)
+       return
+}
+
+func (h *TPacket) getTPacketHeader() header {
+       switch h.tpVersion {
+       case TPacketVersion1:
+               if h.offset >= h.opts.framesPerBlock*h.opts.numBlocks {
+                       h.offset = 0
+               }
+               position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset)
+               return (*v1header)(unsafe.Pointer(position))
+       case TPacketVersion2:
+               if h.offset >= h.opts.framesPerBlock*h.opts.numBlocks {
+                       h.offset = 0
+               }
+               position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset)
+               return (*v2header)(unsafe.Pointer(position))
+       case TPacketVersion3:
+               // TPacket3 uses each block to return values, instead of each frame.  Hence we need to rotate when we hit #blocks, not #frames.
+               if h.offset >= h.opts.numBlocks {
+                       h.offset = 0
+               }
+               position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset*h.opts.framesPerBlock)
+               h.v3 = initV3Wrapper(unsafe.Pointer(position))
+               return &h.v3
+       }
+       panic("handle tpacket version is invalid")
+}
+
+func (h *TPacket) pollForFirstPacket(hdr header) error {
+       tm := int(h.opts.pollTimeout / time.Millisecond)
+       for hdr.getStatus()&C.TP_STATUS_USER == 0 {
+               h.pollset.Fd = int32(h.fd)
+               h.pollset.Events = unix.POLLIN
+               h.pollset.Revents = 0
+               n, err := unix.Poll([]unix.PollFd{h.pollset}, tm)
+               if n == 0 {
+                       return ErrTimeout
+               }
+
+               atomic.AddInt64(&h.stats.Polls, 1)
+               if h.pollset.Revents&unix.POLLERR > 0 {
+                       return ErrPoll
+               }
+               if err != nil {
+                       return err
+               }
+       }
+
+       h.shouldReleasePacket = true
+       return nil
+}
+
+// FanoutType determines the type of fanout to use with a TPacket SetFanout call.
+type FanoutType int
+
+// FanoutType values.
+const (
+       FanoutHash FanoutType = 0
+       // It appears that defrag only works with FanoutHash, see:
+       // http://lxr.free-electrons.com/source/net/packet/af_packet.c#L1204
+       FanoutHashWithDefrag FanoutType = 0x8000
+       FanoutLoadBalance    FanoutType = 1
+       FanoutCPU            FanoutType = 2
+)
+
+// SetFanout activates TPacket's fanout ability.
+// Use of Fanout requires creating multiple TPacket objects and the same id/type to
+// a SetFanout call on each.  Note that this can be done cross-process, so if two
+// different processes both call SetFanout with the same type/id, they'll share
+// packets between them.  The same should work for multiple TPacket objects within
+// the same process.
+func (h *TPacket) SetFanout(t FanoutType, id uint16) error {
+       h.mu.Lock()
+       defer h.mu.Unlock()
+       arg := C.int(t) << 16
+       arg |= C.int(id)
+       return setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_FANOUT, unsafe.Pointer(&arg), unsafe.Sizeof(arg))
+}
+
+// WritePacketData transmits a raw packet.
+func (h *TPacket) WritePacketData(pkt []byte) error {
+       _, err := unix.Write(h.fd, pkt)
+       return err
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/afpacket_test.go b/vendor/github.com/google/gopacket/afpacket/afpacket_test.go
new file mode 100644 (file)
index 0000000..57f6480
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+package afpacket
+
+import (
+       "reflect"
+       "testing"
+)
+
+func TestParseOptions(t *testing.T) {
+       wanted1 := defaultOpts
+       wanted1.frameSize = 1 << 10
+       wanted1.framesPerBlock = wanted1.blockSize / wanted1.frameSize
+       for i, test := range []struct {
+               opts []interface{}
+               want options
+               err  bool
+       }{
+               {opts: []interface{}{OptBlockSize(2)}, err: true},
+               {opts: []interface{}{OptFrameSize(333)}, err: true},
+               {opts: []interface{}{OptTPacketVersion(-3)}, err: true},
+               {opts: []interface{}{OptTPacketVersion(5)}, err: true},
+               {opts: []interface{}{OptFrameSize(1 << 10)}, want: wanted1},
+       } {
+               got, err := parseOptions(test.opts...)
+               t.Logf("got: %#v\nerr: %v", got, err)
+               if test.err && err == nil || !test.err && err != nil {
+                       t.Errorf("%d error mismatch, want error? %v.  error: %v", i, test.err, err)
+               }
+               if !test.err && !reflect.DeepEqual(test.want, got) {
+                       t.Errorf("%d opts mismatch, want\n%#v", i, test.want)
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/header.go b/vendor/github.com/google/gopacket/afpacket/header.go
new file mode 100644 (file)
index 0000000..0b9918e
--- /dev/null
@@ -0,0 +1,158 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+package afpacket
+
+import (
+       "reflect"
+       "time"
+       "unsafe"
+)
+
+// #include <linux/if_packet.h>
+import "C"
+
+// Our model of handling all TPacket versions is a little hacky, to say the
+// least.  We use the header interface to handle interactions with the
+// tpacket1/tpacket2 packet header AND the tpacket3 block header.  The big
+// difference is that tpacket3's block header implements the next() call to get
+// the next packet within the block, while v1/v2 just always return false.
+
+type header interface {
+       // getStatus returns the TPacket status of the current header.
+       getStatus() int
+       // clearStatus clears the status of the current header, releasing its
+       // underlying data back to the kernel for future use with new packets.
+       // Using the header after calling clearStatus is an error.  clearStatus
+       // should only be called after next() returns false.
+       clearStatus()
+       // getTime returns the timestamp for the current packet pointed to by
+       // the header.
+       getTime() time.Time
+       // getData returns the packet data pointed to by the current header.
+       getData() []byte
+       // getLength returns the total length of the packet.
+       getLength() int
+       // getIfaceIndex returns the index of the network interface
+       // where the packet was seen. The index can later be translated to a name.
+       getIfaceIndex() int
+       // next moves this header to point to the next packet it contains,
+       // returning true on success (in which case getTime and getData will
+       // return values for the new packet) or false if there are no more
+       // packets (in which case clearStatus should be called).
+       next() bool
+}
+
+func tpAlign(x int) int {
+       return int((uint(x) + tpacketAlignment - 1) &^ (tpacketAlignment - 1))
+}
+
+type v1header C.struct_tpacket_hdr
+type v2header C.struct_tpacket2_hdr
+
+func makeSlice(start uintptr, length int) (data []byte) {
+       slice := (*reflect.SliceHeader)(unsafe.Pointer(&data))
+       slice.Data = start
+       slice.Len = length
+       slice.Cap = length
+       return
+}
+
+func (h *v1header) getStatus() int {
+       return int(h.tp_status)
+}
+func (h *v1header) clearStatus() {
+       h.tp_status = 0
+}
+func (h *v1header) getTime() time.Time {
+       return time.Unix(int64(h.tp_sec), int64(h.tp_usec)*1000)
+}
+func (h *v1header) getData() []byte {
+       return makeSlice(uintptr(unsafe.Pointer(h))+uintptr(h.tp_mac), int(h.tp_snaplen))
+}
+func (h *v1header) getLength() int {
+       return int(h.tp_len)
+}
+func (h *v1header) getIfaceIndex() int {
+       ll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket_hdr)))))
+       return int(ll.sll_ifindex)
+}
+func (h *v1header) next() bool {
+       return false
+}
+
+func (h *v2header) getStatus() int {
+       return int(h.tp_status)
+}
+func (h *v2header) clearStatus() {
+       h.tp_status = 0
+}
+func (h *v2header) getTime() time.Time {
+       return time.Unix(int64(h.tp_sec), int64(h.tp_nsec))
+}
+func (h *v2header) getData() []byte {
+       return makeSlice(uintptr(unsafe.Pointer(h))+uintptr(h.tp_mac), int(h.tp_snaplen))
+}
+func (h *v2header) getLength() int {
+       return int(h.tp_len)
+}
+func (h *v2header) getIfaceIndex() int {
+       ll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket2_hdr)))))
+       return int(ll.sll_ifindex)
+}
+func (h *v2header) next() bool {
+       return false
+}
+
+type v3wrapper struct {
+       block    *C.struct_tpacket_block_desc
+       blockhdr *C.struct_tpacket_hdr_v1
+       packet   *C.struct_tpacket3_hdr
+       used     C.__u32
+}
+
+func initV3Wrapper(block unsafe.Pointer) (w v3wrapper) {
+       w.block = (*C.struct_tpacket_block_desc)(block)
+       w.blockhdr = (*C.struct_tpacket_hdr_v1)(unsafe.Pointer(&w.block.hdr[0]))
+       w.packet = (*C.struct_tpacket3_hdr)(unsafe.Pointer(uintptr(block) + uintptr(w.blockhdr.offset_to_first_pkt)))
+       return
+}
+func (w *v3wrapper) getStatus() int {
+       return int(w.blockhdr.block_status)
+}
+func (w *v3wrapper) clearStatus() {
+       w.blockhdr.block_status = 0
+}
+func (w *v3wrapper) getTime() time.Time {
+       return time.Unix(int64(w.packet.tp_sec), int64(w.packet.tp_nsec))
+}
+func (w *v3wrapper) getData() []byte {
+       return makeSlice(uintptr(unsafe.Pointer(w.packet))+uintptr(w.packet.tp_mac), int(w.packet.tp_snaplen))
+}
+func (w *v3wrapper) getLength() int {
+       return int(w.packet.tp_len)
+}
+func (w *v3wrapper) getIfaceIndex() int {
+       ll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(w.packet)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket3_hdr)))))
+       return int(ll.sll_ifindex)
+}
+func (w *v3wrapper) next() bool {
+       w.used++
+       if w.used >= w.blockhdr.num_pkts {
+               return false
+       }
+
+       next := uintptr(unsafe.Pointer(w.packet))
+       if w.packet.tp_next_offset != 0 {
+               next += uintptr(w.packet.tp_next_offset)
+       } else {
+               next += uintptr(tpacketAlign(int(w.packet.tp_snaplen) + int(w.packet.tp_mac)))
+       }
+       w.packet = (*C.struct_tpacket3_hdr)(unsafe.Pointer(next))
+       return true
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/options.go b/vendor/github.com/google/gopacket/afpacket/options.go
new file mode 100644 (file)
index 0000000..c5ab771
--- /dev/null
@@ -0,0 +1,171 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+package afpacket
+
+import (
+       "errors"
+       "fmt"
+       "time"
+)
+
+// #include <linux/if_packet.h>
+// #include <sys/socket.h>
+import "C"
+
+// OptTPacketVersion is the version of TPacket to use.
+// It can be passed into NewTPacket.
+type OptTPacketVersion int
+
+// String returns a string representation of the version, generally of the form V#.
+func (t OptTPacketVersion) String() string {
+       switch t {
+       case TPacketVersion1:
+               return "V1"
+       case TPacketVersion2:
+               return "V2"
+       case TPacketVersion3:
+               return "V3"
+       case TPacketVersionHighestAvailable:
+               return "HighestAvailable"
+       }
+       return "InvalidVersion"
+}
+
+// OptSocketType is the socket type used to open the TPacket socket.
+type OptSocketType int
+
+func (t OptSocketType) String() string {
+       switch t {
+       case SocketRaw:
+               return "SOCK_RAW"
+       case SocketDgram:
+               return "SOCK_DGRAM"
+       }
+       return "UnknownSocketType"
+}
+
+// TPacket version numbers for use with NewHandle.
+const (
+       // TPacketVersionHighestAvailable tells NewHandle to use the highest available version of tpacket the kernel has available.
+       // This is the default, should a version number not be given in NewHandle's options.
+       TPacketVersionHighestAvailable = OptTPacketVersion(-1)
+       TPacketVersion1                = OptTPacketVersion(C.TPACKET_V1)
+       TPacketVersion2                = OptTPacketVersion(C.TPACKET_V2)
+       TPacketVersion3                = OptTPacketVersion(C.TPACKET_V3)
+       tpacketVersionMax              = TPacketVersion3
+       tpacketVersionMin              = -1
+       // SocketRaw is the default socket type.  It returns packet data
+       // including the link layer (ethernet headers, etc).
+       SocketRaw = OptSocketType(C.SOCK_RAW)
+       // SocketDgram strips off the link layer when reading packets, and adds
+       // the link layer back automatically on packet writes (coming soon...)
+       SocketDgram = OptSocketType(C.SOCK_DGRAM)
+)
+
+// OptInterface is the specific interface to bind to.
+// It can be passed into NewTPacket.
+type OptInterface string
+
+// OptFrameSize is TPacket's tp_frame_size
+// It can be passed into NewTPacket.
+type OptFrameSize int
+
+// OptBlockSize is TPacket's tp_block_size
+// It can be passed into NewTPacket.
+type OptBlockSize int
+
+// OptNumBlocks is TPacket's tp_block_nr
+// It can be passed into NewTPacket.
+type OptNumBlocks int
+
+// OptBlockTimeout is TPacket v3's tp_retire_blk_tov.  Note that it has only millisecond granularity, so must be >= 1 ms.
+// It can be passed into NewTPacket.
+type OptBlockTimeout time.Duration
+
+// OptPollTimeout is the number of milliseconds that poll() should block waiting  for a file
+// descriptor to become ready. Specifying a negative value in  time‐out means an infinite timeout.
+type OptPollTimeout time.Duration
+
+// Default constants used by options.
+const (
+       DefaultFrameSize    = 4096                   // Default value for OptFrameSize.
+       DefaultBlockSize    = DefaultFrameSize * 128 // Default value for OptBlockSize.
+       DefaultNumBlocks    = 128                    // Default value for OptNumBlocks.
+       DefaultBlockTimeout = 64 * time.Millisecond  // Default value for OptBlockTimeout.
+       DefaultPollTimeout  = -1 * time.Millisecond  // Default value for OptPollTimeout. This blocks forever.
+)
+
+type options struct {
+       frameSize      int
+       framesPerBlock int
+       blockSize      int
+       numBlocks      int
+       blockTimeout   time.Duration
+       pollTimeout    time.Duration
+       version        OptTPacketVersion
+       socktype       OptSocketType
+       iface          string
+}
+
+var defaultOpts = options{
+       frameSize:    DefaultFrameSize,
+       blockSize:    DefaultBlockSize,
+       numBlocks:    DefaultNumBlocks,
+       blockTimeout: DefaultBlockTimeout,
+       pollTimeout:  DefaultPollTimeout,
+       version:      TPacketVersionHighestAvailable,
+       socktype:     SocketRaw,
+}
+
+func parseOptions(opts ...interface{}) (ret options, err error) {
+       ret = defaultOpts
+       for _, opt := range opts {
+               switch v := opt.(type) {
+               case OptFrameSize:
+                       ret.frameSize = int(v)
+               case OptBlockSize:
+                       ret.blockSize = int(v)
+               case OptNumBlocks:
+                       ret.numBlocks = int(v)
+               case OptBlockTimeout:
+                       ret.blockTimeout = time.Duration(v)
+               case OptPollTimeout:
+                       ret.pollTimeout = time.Duration(v)
+               case OptTPacketVersion:
+                       ret.version = v
+               case OptInterface:
+                       ret.iface = string(v)
+               case OptSocketType:
+                       ret.socktype = v
+               default:
+                       err = errors.New("unknown type in options")
+                       return
+               }
+       }
+       if err = ret.check(); err != nil {
+               return
+       }
+       ret.framesPerBlock = ret.blockSize / ret.frameSize
+       return
+}
+func (o options) check() error {
+       switch {
+       case o.blockSize%pageSize != 0:
+               return fmt.Errorf("block size %d must be divisible by page size %d", o.blockSize, pageSize)
+       case o.blockSize%o.frameSize != 0:
+               return fmt.Errorf("block size %d must be divisible by frame size %d", o.blockSize, o.frameSize)
+       case o.numBlocks < 1:
+               return fmt.Errorf("num blocks %d must be >= 1", o.numBlocks)
+       case o.blockTimeout < time.Millisecond:
+               return fmt.Errorf("block timeout %v must be > %v", o.blockTimeout, time.Millisecond)
+       case o.version < tpacketVersionMin || o.version > tpacketVersionMax:
+               return fmt.Errorf("tpacket version %v is invalid", o.version)
+       }
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go b/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
new file mode 100644 (file)
index 0000000..c53e1cc
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+package afpacket
+
+import (
+       "unsafe"
+
+       "golang.org/x/sys/unix"
+)
+
+// setsockopt provides access to the setsockopt syscall.
+func setsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error {
+       _, _, errno := unix.Syscall6(
+               unix.SYS_SETSOCKOPT,
+               uintptr(fd),
+               uintptr(level),
+               uintptr(name),
+               uintptr(val),
+               vallen,
+               0,
+       )
+       if errno != 0 {
+               return error(errno)
+       }
+
+       return nil
+}
+
+// getsockopt provides access to the getsockopt syscall.
+func getsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error {
+       _, _, errno := unix.Syscall6(
+               unix.SYS_GETSOCKOPT,
+               uintptr(fd),
+               uintptr(level),
+               uintptr(name),
+               uintptr(val),
+               vallen,
+               0,
+       )
+       if errno != 0 {
+               return error(errno)
+       }
+
+       return nil
+}
+
+// htons converts a short (uint16) from host-to-network byte order.
+// Thanks to mikioh for this neat trick:
+// https://github.com/mikioh/-stdyng/blob/master/afpacket.go
+func htons(i uint16) uint16 {
+       return (i<<8)&0xff00 | i>>8
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go b/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go
new file mode 100644 (file)
index 0000000..8c3eb42
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux,386
+
+package afpacket
+
+import (
+       "unsafe"
+
+       "golang.org/x/sys/unix"
+)
+
+const (
+       sysSETSOCKOPT = 0xe
+       sysGETSOCKOPT = 0xf
+)
+
+func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, unix.Errno)
+
+// setsockopt provides access to the setsockopt syscall.
+func setsockopt(fd, level, name int, v unsafe.Pointer, l uintptr) error {
+       _, errno := socketcall(
+               sysSETSOCKOPT,
+               uintptr(fd),
+               uintptr(level),
+               uintptr(name),
+               uintptr(v),
+               l,
+               0,
+       )
+       if errno != 0 {
+               return error(errno)
+       }
+
+       return nil
+}
+
+func getsockopt(fd, level, name int, v unsafe.Pointer, l uintptr) error {
+       _, errno := socketcall(
+               sysGETSOCKOPT,
+               uintptr(fd),
+               uintptr(level),
+               uintptr(name),
+               uintptr(v),
+               l,
+               0,
+       )
+       if errno != 0 {
+               return error(errno)
+       }
+
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s b/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s
new file mode 100644 (file)
index 0000000..7d0336a
--- /dev/null
@@ -0,0 +1,8 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+TEXT   ·socketcall(SB),4,$0-36
+       JMP     syscall·socketcall(SB)
\ No newline at end of file
diff --git a/vendor/github.com/google/gopacket/base.go b/vendor/github.com/google/gopacket/base.go
new file mode 100644 (file)
index 0000000..797b55f
--- /dev/null
@@ -0,0 +1,178 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "fmt"
+)
+
+// Layer represents a single decoded packet layer (using either the
+// OSI or TCP/IP definition of a layer).  When decoding, a packet's data is
+// broken up into a number of layers.  The caller may call LayerType() to
+// figure out which type of layer they've received from the packet.  Optionally,
+// they may then use a type assertion to get the actual layer type for deep
+// inspection of the data.
+type Layer interface {
+       // LayerType is the gopacket type for this layer.
+       LayerType() LayerType
+       // LayerContents returns the set of bytes that make up this layer.
+       LayerContents() []byte
+       // LayerPayload returns the set of bytes contained within this layer, not
+       // including the layer itself.
+       LayerPayload() []byte
+}
+
+// Payload is a Layer containing the payload of a packet.  The definition of
+// what constitutes the payload of a packet depends on previous layers; for
+// TCP and UDP, we stop decoding above layer 4 and return the remaining
+// bytes as a Payload.  Payload is an ApplicationLayer.
+type Payload []byte
+
+// LayerType returns LayerTypePayload
+func (p Payload) LayerType() LayerType { return LayerTypePayload }
+
+// LayerContents returns the bytes making up this layer.
+func (p Payload) LayerContents() []byte { return []byte(p) }
+
+// LayerPayload returns the payload within this layer.
+func (p Payload) LayerPayload() []byte { return nil }
+
+// Payload returns this layer as bytes.
+func (p Payload) Payload() []byte { return []byte(p) }
+
+// String implements fmt.Stringer.
+func (p Payload) String() string { return fmt.Sprintf("%d byte(s)", len(p)) }
+
+// GoString implements fmt.GoStringer.
+func (p Payload) GoString() string { return LongBytesGoString([]byte(p)) }
+
+// CanDecode implements DecodingLayer.
+func (p Payload) CanDecode() LayerClass { return LayerTypePayload }
+
+// NextLayerType implements DecodingLayer.
+func (p Payload) NextLayerType() LayerType { return LayerTypeZero }
+
+// DecodeFromBytes implements DecodingLayer.
+func (p *Payload) DecodeFromBytes(data []byte, df DecodeFeedback) error {
+       *p = Payload(data)
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (p Payload) SerializeTo(b SerializeBuffer, opts SerializeOptions) error {
+       bytes, err := b.PrependBytes(len(p))
+       if err != nil {
+               return err
+       }
+       copy(bytes, p)
+       return nil
+}
+
+// decodePayload decodes data by returning it all in a Payload layer.
+func decodePayload(data []byte, p PacketBuilder) error {
+       payload := &Payload{}
+       if err := payload.DecodeFromBytes(data, p); err != nil {
+               return nil
+       }
+       p.AddLayer(payload)
+       p.SetApplicationLayer(payload)
+       return nil
+}
+
+// Fragment is a Layer containing a fragment of a larger frame, used by layers
+// like IPv4 and IPv6 that allow for fragmentation of their payloads.
+type Fragment []byte
+
+// LayerType returns LayerTypeFragment
+func (p *Fragment) LayerType() LayerType { return LayerTypeFragment }
+
+// LayerContents implements Layer.
+func (p *Fragment) LayerContents() []byte { return []byte(*p) }
+
+// LayerPayload implements Layer.
+func (p *Fragment) LayerPayload() []byte { return nil }
+
+// Payload returns this layer as a byte slice.
+func (p *Fragment) Payload() []byte { return []byte(*p) }
+
+// String implements fmt.Stringer.
+func (p *Fragment) String() string { return fmt.Sprintf("%d byte(s)", len(*p)) }
+
+// CanDecode implements DecodingLayer.
+func (p *Fragment) CanDecode() LayerClass { return LayerTypeFragment }
+
+// NextLayerType implements DecodingLayer.
+func (p *Fragment) NextLayerType() LayerType { return LayerTypeZero }
+
+// DecodeFromBytes implements DecodingLayer.
+func (p *Fragment) DecodeFromBytes(data []byte, df DecodeFeedback) error {
+       *p = Fragment(data)
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (p *Fragment) SerializeTo(b SerializeBuffer, opts SerializeOptions) error {
+       bytes, err := b.PrependBytes(len(*p))
+       if err != nil {
+               return err
+       }
+       copy(bytes, *p)
+       return nil
+}
+
+// decodeFragment decodes data by returning it all in a Fragment layer.
+func decodeFragment(data []byte, p PacketBuilder) error {
+       payload := &Fragment{}
+       if err := payload.DecodeFromBytes(data, p); err != nil {
+               return nil
+       }
+       p.AddLayer(payload)
+       p.SetApplicationLayer(payload)
+       return nil
+}
+
+// These layers correspond to Internet Protocol Suite (TCP/IP) layers, and their
+// corresponding OSI layers, as best as possible.
+
+// LinkLayer is the packet layer corresponding to TCP/IP layer 1 (OSI layer 2)
+type LinkLayer interface {
+       Layer
+       LinkFlow() Flow
+}
+
+// NetworkLayer is the packet layer corresponding to TCP/IP layer 2 (OSI
+// layer 3)
+type NetworkLayer interface {
+       Layer
+       NetworkFlow() Flow
+}
+
+// TransportLayer is the packet layer corresponding to the TCP/IP layer 3 (OSI
+// layer 4)
+type TransportLayer interface {
+       Layer
+       TransportFlow() Flow
+}
+
+// ApplicationLayer is the packet layer corresponding to the TCP/IP layer 4 (OSI
+// layer 7), also known as the packet payload.
+type ApplicationLayer interface {
+       Layer
+       Payload() []byte
+}
+
+// ErrorLayer is a packet layer created when decoding of the packet has failed.
+// Its payload is all the bytes that we were unable to decode, and the returned
+// error details why the decoding failed.
+type ErrorLayer interface {
+       Layer
+       Error() error
+}
diff --git a/vendor/github.com/google/gopacket/benchmark_test.go b/vendor/github.com/google/gopacket/benchmark_test.go
new file mode 100644 (file)
index 0000000..74a1d28
--- /dev/null
@@ -0,0 +1,194 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "runtime"
+       "testing"
+)
+
+// A few benchmarks for figuring out exactly how fast some underlying Go
+// things are.
+
+type testError struct{}
+
+func (t *testError) Error() string { return "abc" }
+
+func BenchmarkTypeAssertion(b *testing.B) {
+       var e error = &testError{}
+       for i := 0; i < b.N; i++ {
+               _, _ = e.(*testError)
+       }
+}
+
+func BenchmarkMapLookup(b *testing.B) {
+       m := map[LayerType]bool{
+               LayerTypePayload: true,
+       }
+       for i := 0; i < b.N; i++ {
+               _ = m[LayerTypePayload]
+       }
+}
+
+func BenchmarkNilMapLookup(b *testing.B) {
+       var m map[LayerType]bool
+       for i := 0; i < b.N; i++ {
+               _ = m[LayerTypePayload]
+       }
+}
+
+func BenchmarkNilMapLookupWithNilCheck(b *testing.B) {
+       var m map[LayerType]bool
+       for i := 0; i < b.N; i++ {
+               if m != nil {
+                       _ = m[LayerTypePayload]
+               }
+       }
+}
+
+func BenchmarkArrayLookup(b *testing.B) {
+       m := make([]bool, 100)
+       for i := 0; i < b.N; i++ {
+               _ = m[LayerTypePayload]
+       }
+}
+
+var testError1 = &testError{}
+var testError2 error = testError1
+
+func BenchmarkTypeToInterface1(b *testing.B) {
+       var e error
+       for i := 0; i < b.N; i++ {
+               e = testError1
+       }
+       // Have to do someting with 'e' or the compiler complains about an unused
+       // variable.
+       testError2 = e
+}
+func BenchmarkTypeToInterface2(b *testing.B) {
+       var e error
+       for i := 0; i < b.N; i++ {
+               e = testError2
+       }
+       // Have to do someting with 'e' or the compiler complains about an unused
+       // variable.
+       testError2 = e
+}
+
+var decodeOpts DecodeOptions
+
+func decodeOptsByValue(_ DecodeOptions)    {}
+func decodeOptsByPointer(_ *DecodeOptions) {}
+func BenchmarkPassDecodeOptionsByValue(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               decodeOptsByValue(decodeOpts)
+       }
+}
+func BenchmarkPassDecodeOptionsByPointer(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               decodeOptsByPointer(&decodeOpts)
+       }
+}
+
+func BenchmarkLockOSThread(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               runtime.LockOSThread()
+       }
+}
+func BenchmarkUnlockOSThread(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               runtime.UnlockOSThread()
+       }
+}
+func lockUnlock() {
+       runtime.LockOSThread()
+       runtime.UnlockOSThread()
+}
+func lockDeferUnlock() {
+       runtime.LockOSThread()
+       defer runtime.UnlockOSThread()
+}
+func BenchmarkLockUnlockOSThread(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               lockUnlock()
+       }
+}
+func BenchmarkLockDeferUnlockOSThread(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               lockDeferUnlock()
+       }
+}
+
+func BenchmarkUnbufferedChannel(b *testing.B) {
+       ca := make(chan bool)
+       cb := make(chan bool)
+       defer close(ca)
+       go func() {
+               defer close(cb)
+               for _ = range ca {
+                       cb <- true
+               }
+       }()
+       for i := 0; i < b.N; i++ {
+               ca <- true
+               <-cb
+       }
+}
+func BenchmarkSmallBufferedChannel(b *testing.B) {
+       ca := make(chan bool, 1)
+       cb := make(chan bool, 1)
+       defer close(ca)
+       go func() {
+               defer close(cb)
+               for _ = range ca {
+                       cb <- true
+               }
+       }()
+       for i := 0; i < b.N; i++ {
+               ca <- true
+               <-cb
+       }
+}
+func BenchmarkLargeBufferedChannel(b *testing.B) {
+       ca := make(chan bool, 1000)
+       cb := make(chan bool, 1000)
+       defer close(ca)
+       go func() {
+               defer close(cb)
+               for _ = range ca {
+                       cb <- true
+               }
+       }()
+       for i := 0; i < b.N; i++ {
+               ca <- true
+               <-cb
+       }
+}
+func BenchmarkEndpointFastHashShort(b *testing.B) {
+       e := Endpoint{typ: 1, len: 2}
+       for i := 0; i < b.N; i++ {
+               e.FastHash()
+       }
+}
+func BenchmarkEndpointFastHashLong(b *testing.B) {
+       e := Endpoint{typ: 1, len: 16}
+       for i := 0; i < b.N; i++ {
+               e.FastHash()
+       }
+}
+func BenchmarkFlowFastHashShort(b *testing.B) {
+       e := Flow{typ: 1, slen: 2, dlen: 2}
+       for i := 0; i < b.N; i++ {
+               e.FastHash()
+       }
+}
+func BenchmarkFlowFastHashLong(b *testing.B) {
+       e := Flow{typ: 1, slen: 16, dlen: 16}
+       for i := 0; i < b.N; i++ {
+               e.FastHash()
+       }
+}
diff --git a/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go b/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go
new file mode 100644 (file)
index 0000000..3e1da0b
--- /dev/null
@@ -0,0 +1,215 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build darwin dragonfly freebsd netbsd openbsd
+
+package bsdbpf
+
+import (
+       "errors"
+       "fmt"
+       "syscall"
+       "time"
+       "unsafe"
+
+       "github.com/google/gopacket"
+       "golang.org/x/sys/unix"
+)
+
+const wordSize = int(unsafe.Sizeof(uintptr(0)))
+
+func bpfWordAlign(x int) int {
+       return (((x) + (wordSize - 1)) &^ (wordSize - 1))
+}
+
+// Options is used to configure various properties of the BPF sniffer.
+// Default values are used when a nil Options pointer is passed to NewBPFSniffer.
+type Options struct {
+       // BPFDeviceName is name of the bpf device to use for sniffing
+       // the network device. The default value of BPFDeviceName is empty string
+       // which causes the first available BPF device file /dev/bpfX to be used.
+       BPFDeviceName string
+       // ReadBufLen specifies the size of the buffer used to read packets
+       // off the wire such that multiple packets are buffered with each read syscall.
+       // Note that an individual packet larger than the buffer size is necessarily truncated.
+       // A larger buffer should increase performance because fewer read syscalls would be made.
+       // If zero is used, the system's default buffer length will be used which depending on the
+       // system may default to 4096 bytes which is not big enough to accomodate some link layers
+       // such as WLAN (802.11).
+       // ReadBufLen defaults to 32767... however typical BSD manual pages for BPF indicate that
+       // if the requested buffer size cannot be accommodated, the closest allowable size will be
+       // set and returned... hence our GetReadBufLen method.
+       ReadBufLen int
+       // Timeout is the length of time to wait before timing out on a read request.
+       // Timeout defaults to nil which means no timeout is used.
+       Timeout *syscall.Timeval
+       // Promisc is set to true for promiscuous mode ethernet sniffing.
+       // Promisc defaults to true.
+       Promisc bool
+       // Immediate is set to true to make our read requests return as soon as a packet becomes available.
+       // Otherwise, a read will block until either the kernel buffer becomes full or a timeout occurs.
+       // The default is true.
+       Immediate bool
+       // PreserveLinkAddr is set to false if the link level source address should be filled in automatically
+       // by the interface output routine. Set to true if the link level source address will be written,
+       // as provided, to the wire.
+       // The default is true.
+       PreserveLinkAddr bool
+}
+
+var defaultOptions = Options{
+       BPFDeviceName:    "",
+       ReadBufLen:       32767,
+       Timeout:          nil,
+       Promisc:          true,
+       Immediate:        true,
+       PreserveLinkAddr: true,
+}
+
+// BPFSniffer is a struct used to track state of a BSD BPF ethernet sniffer
+// such that gopacket's PacketDataSource interface is implemented.
+type BPFSniffer struct {
+       options           *Options
+       sniffDeviceName   string
+       fd                int
+       readBuffer        []byte
+       lastReadLen       int
+       readBytesConsumed int
+}
+
+// NewBPFSniffer is used to create BSD-only BPF ethernet sniffer
+// iface is the network interface device name that you wish to sniff
+// options can set to nil in order to utilize default values for everything.
+// Each field of Options also have a default setting if left unspecified by
+// the user's custome Options struct.
+func NewBPFSniffer(iface string, options *Options) (*BPFSniffer, error) {
+       var err error
+       enable := 1
+       sniffer := BPFSniffer{
+               sniffDeviceName: iface,
+       }
+       if options == nil {
+               sniffer.options = &defaultOptions
+       } else {
+               sniffer.options = options
+       }
+
+       if sniffer.options.BPFDeviceName == "" {
+               sniffer.pickBpfDevice()
+       }
+
+       // setup our read buffer
+       if sniffer.options.ReadBufLen == 0 {
+               sniffer.options.ReadBufLen, err = syscall.BpfBuflen(sniffer.fd)
+               if err != nil {
+                       return nil, err
+               }
+       } else {
+               sniffer.options.ReadBufLen, err = syscall.SetBpfBuflen(sniffer.fd, sniffer.options.ReadBufLen)
+               if err != nil {
+                       return nil, err
+               }
+       }
+       sniffer.readBuffer = make([]byte, sniffer.options.ReadBufLen)
+
+       err = syscall.SetBpfInterface(sniffer.fd, sniffer.sniffDeviceName)
+       if err != nil {
+               return nil, err
+       }
+
+       if sniffer.options.Immediate {
+               // turn immediate mode on. This makes the snffer non-blocking.
+               err = syscall.SetBpfImmediate(sniffer.fd, enable)
+               if err != nil {
+                       return nil, err
+               }
+       }
+
+       // the above call to syscall.SetBpfImmediate needs to be made
+       // before setting a timer otherwise the reads will block for the
+       // entire timer duration even if there are packets to return.
+       if sniffer.options.Timeout != nil {
+               err = syscall.SetBpfTimeout(sniffer.fd, sniffer.options.Timeout)
+               if err != nil {
+                       return nil, err
+               }
+       }
+
+       if sniffer.options.PreserveLinkAddr {
+               // preserves the link level source address...
+               // higher level protocol analyzers will not need this
+               err = syscall.SetBpfHeadercmpl(sniffer.fd, enable)
+               if err != nil {
+                       return nil, err
+               }
+       }
+
+       if sniffer.options.Promisc {
+               // forces the interface into promiscuous mode
+               err = syscall.SetBpfPromisc(sniffer.fd, enable)
+               if err != nil {
+                       return nil, err
+               }
+       }
+
+       return &sniffer, nil
+}
+
+// Close is used to close the file-descriptor of the BPF device file.
+func (b *BPFSniffer) Close() error {
+       return syscall.Close(b.fd)
+}
+
+func (b *BPFSniffer) pickBpfDevice() {
+       var err error
+       b.options.BPFDeviceName = ""
+       for i := 0; i < 99; i++ {
+               b.options.BPFDeviceName = fmt.Sprintf("/dev/bpf%d", i)
+               b.fd, err = syscall.Open(b.options.BPFDeviceName, syscall.O_RDWR, 0)
+               if err == nil {
+                       return
+               }
+       }
+       panic("failed to acquire a BPF device for read-write access")
+}
+
+func (b *BPFSniffer) ReadPacketData() ([]byte, gopacket.CaptureInfo, error) {
+       var err error
+       if b.readBytesConsumed >= b.lastReadLen {
+               b.readBytesConsumed = 0
+               b.readBuffer = make([]byte, b.options.ReadBufLen)
+               b.lastReadLen, err = syscall.Read(b.fd, b.readBuffer)
+               if err != nil {
+                       b.lastReadLen = 0
+                       return nil, gopacket.CaptureInfo{}, err
+               }
+       }
+       hdr := (*unix.BpfHdr)(unsafe.Pointer(&b.readBuffer[b.readBytesConsumed]))
+       frameStart := b.readBytesConsumed + int(hdr.Hdrlen)
+       b.readBytesConsumed += bpfWordAlign(int(hdr.Hdrlen) + int(hdr.Caplen))
+
+       if frameStart+int(hdr.Caplen) > len(b.readBuffer) {
+               captureInfo := gopacket.CaptureInfo{
+                       Timestamp:     time.Unix(int64(hdr.Tstamp.Sec), int64(hdr.Tstamp.Usec)*1000),
+                       CaptureLength: 0,
+                       Length:        0,
+               }
+               return nil, captureInfo, errors.New("BPF captured frame received with corrupted BpfHdr struct.")
+       }
+
+       rawFrame := b.readBuffer[frameStart : frameStart+int(hdr.Caplen)]
+       captureInfo := gopacket.CaptureInfo{
+               Timestamp:     time.Unix(int64(hdr.Tstamp.Sec), int64(hdr.Tstamp.Usec)*1000),
+               CaptureLength: len(rawFrame),
+               Length:        len(rawFrame),
+       }
+       return rawFrame, captureInfo, nil
+}
+
+// GetReadBufLen returns the BPF read buffer length
+func (b *BPFSniffer) GetReadBufLen() int {
+       return b.options.ReadBufLen
+}
diff --git a/vendor/github.com/google/gopacket/bytediff/bytediff.go b/vendor/github.com/google/gopacket/bytediff/bytediff.go
new file mode 100644 (file)
index 0000000..63addd9
--- /dev/null
@@ -0,0 +1,217 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package bytediff provides a simple diff utility for looking at differences in byte
+// slices.  It's slow, clunky, and not particularly good by any measure, but
+// it does provide very useful visualizations for diffs between small byte
+// slices.
+//
+// Our diff algorithm uses a dynamic programming implementation of longest common
+// substring to find matching parts of slices, then recursively calls itself on
+// the prefix/suffix of that matching part for each packet.  This is a Bad Idea
+// (tm) for normal (especially large) input, but for packets where large portions
+// repeat frequently and we expect minor changes between results, it's actually
+// quite useful.
+package bytediff
+
+import (
+       "bytes"
+       "fmt"
+)
+
+// OutputFormat tells a Differences.String call how to format the set of
+// differences into a human-readable string.  Its internals are currently
+// unexported because we may want to change them drastically in the future.  For
+// the moment, please just use one of the provided OutputFormats that comes with
+// this library.
+type OutputFormat struct {
+       start, finish, add, remove, change, reset string
+}
+
+var (
+       // BashOutput uses bash escape sequences to color output.
+       BashOutput = &OutputFormat{
+               reset:  "\033[0m",
+               remove: "\033[32m",
+               add:    "\033[31m",
+               change: "\033[33m",
+       }
+       // HTMLOutput uses a <pre> to wrap output, and <span>s to color it.
+       // HTMLOutput is pretty experimental, so use at your own risk ;)
+       HTMLOutput = &OutputFormat{
+               start:  "<pre>",
+               finish: "</pre>",
+               reset:  "</span>",
+               remove: "<span style='color:red'>",
+               add:    "<span style='color:green'>",
+               change: "<span style='color:yellow'>",
+       }
+)
+
+// longestCommonSubstring uses a O(MN) dynamic programming approach to find the
+// longest common substring in a set of slices.  It returns the index in each
+// slice at which the substring begins, plus the length of the commonality.
+func longestCommonSubstring(strA, strB []byte) (indexA, indexB, length int) {
+       lenA, lenB := len(strA), len(strB)
+       if lenA == 0 || lenB == 0 {
+               return 0, 0, 0
+       }
+       arr := make([][]int, lenA)
+       for i := 0; i < lenA; i++ {
+               arr[i] = make([]int, lenB)
+       }
+       var maxLength int
+       var maxA, maxB int
+       for a := 0; a < lenA; a++ {
+               for b := 0; b < lenB; b++ {
+                       if strA[a] == strB[b] {
+                               length := 1
+                               if a > 0 && b > 0 {
+                                       length = arr[a-1][b-1] + 1
+                               }
+                               arr[a][b] = length
+                               if length > maxLength {
+                                       maxLength = length
+                                       maxA = a
+                                       maxB = b
+                               }
+                       }
+               }
+       }
+       a, b := maxA, maxB
+       for a >= 0 && b >= 0 && strA[a] == strB[b] {
+               indexA = a
+               indexB = b
+               a--
+               b--
+               length++
+       }
+       return
+}
+
+func intMax(a, b int) int {
+       if a > b {
+               return a
+       }
+       return b
+}
+
+// Difference represents a single part of the data being diffed, containing
+// information about both the original and new values.
+// From and To are the sets of bytes in the original and the new byte slice.
+//   !Replace        implies  From == To (no change)
+//   len(To) == 0    implies  From is being deleted
+//   len(From) == 0  implies  To is being inserted
+//   else            implies  From is being replaced by To
+type Difference struct {
+       Replace  bool
+       From, To []byte
+}
+
+// color returns the bash color for a given difference.
+func (c *OutputFormat) color(d Difference) string {
+       switch {
+       case !d.Replace:
+               return ""
+       case len(d.From) == 0:
+               return c.remove
+       case len(d.To) == 0:
+               return c.add
+       default:
+               return c.change
+       }
+}
+
+// Diff diffs strA and strB, returning a list of differences which
+// can be used to construct either the original or new string.
+//
+// Diff is optimized for comparing VERY SHORT slices.  It's meant for comparing
+// things like packets off the wire, not large files or the like.
+// As such, its runtime can be catastrophic if large inputs are passed in.
+// You've been warned.
+func Diff(strA, strB []byte) Differences {
+       if len(strA) == 0 && len(strB) == 0 {
+               return nil
+       }
+       ia, ib, l := longestCommonSubstring(strA, strB)
+       if l == 0 {
+               return Differences{
+                       Difference{true, strA, strB},
+               }
+       }
+       beforeA, match, afterA := strA[:ia], strA[ia:ia+l], strA[ia+l:]
+       beforeB, afterB := strB[:ib], strB[ib+l:]
+       var diffs Differences
+       diffs = append(diffs, Diff(beforeA, beforeB)...)
+       diffs = append(diffs, Difference{false, match, match})
+       diffs = append(diffs, Diff(afterA, afterB)...)
+       return diffs
+}
+
+// Differences is a set of differences for a given diff'd pair of byte slices.
+type Differences []Difference
+
+// String outputs a previously diff'd set of strings, showing differences
+// between them, highlighted by colors.
+//
+// The output format of this function is NOT guaranteed consistent, and may be
+// changed at any time by the library authors.  It's meant solely for human
+// consumption.
+func (c *OutputFormat) String(diffs Differences) string {
+       var buf bytes.Buffer
+       count := 0
+       fmt.Fprintf(&buf, "%s", c.start)
+       fmt.Fprintf(&buf, "00000000 ")
+       for i := 0; i < len(diffs); i++ {
+               diff := diffs[i]
+               color := c.color(diff)
+               reset := ""
+               if color != "" {
+                       reset = c.reset
+               }
+               fmt.Fprint(&buf, color)
+               for _, b := range diff.From {
+                       fmt.Fprintf(&buf, " %02x", b)
+                       count++
+                       switch count % 16 {
+                       case 0:
+                               fmt.Fprintf(&buf, "%v\n%08x%v ", reset, count, color)
+                       case 8:
+                               fmt.Fprintf(&buf, " ")
+                       }
+               }
+               fmt.Fprint(&buf, reset)
+       }
+       fmt.Fprintf(&buf, "\n\n00000000 ")
+       count = 0
+       for i := 0; i < len(diffs); i++ {
+               diff := diffs[i]
+               str := diff.From
+               if diff.Replace {
+                       str = diff.To
+               }
+               color := c.color(diff)
+               reset := ""
+               if color != "" {
+                       reset = c.reset
+               }
+               fmt.Fprint(&buf, color)
+               for _, b := range str {
+                       fmt.Fprintf(&buf, " %02x", b)
+                       count++
+                       switch count % 16 {
+                       case 0:
+                               fmt.Fprintf(&buf, "%v\n%08x%v ", reset, count, color)
+                       case 8:
+                               fmt.Fprintf(&buf, " ")
+                       }
+               }
+               fmt.Fprint(&buf, reset)
+       }
+       fmt.Fprint(&buf, "\n")
+       fmt.Fprintf(&buf, "%s", c.finish)
+       return string(buf.Bytes())
+}
diff --git a/vendor/github.com/google/gopacket/bytediff/bytediff_test.go b/vendor/github.com/google/gopacket/bytediff/bytediff_test.go
new file mode 100644 (file)
index 0000000..022ad4b
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package bytediff
+
+import (
+       "reflect"
+       "testing"
+)
+
+func TestLCS(t *testing.T) {
+       for i, test := range []struct {
+               a, b                   []byte
+               indexA, indexB, length int
+       }{
+               {[]byte{1, 2, 3}, []byte{1, 2, 3}, 0, 0, 3},
+               {[]byte{0, 1, 2, 3}, []byte{1, 2, 3, 4}, 1, 0, 3},
+               {[]byte{0, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3}, []byte{1, 2, 3, 4}, 4, 0, 4},
+               {[]byte{1, 2, 2, 3, 4}, []byte{1, 2, 3, 4}, 2, 1, 3},
+               {[]byte{0, 1, 2, 3, 4}, []byte{1, 1, 2, 2, 3, 4}, 2, 3, 3},
+       } {
+               ia, ib, l := longestCommonSubstring(test.a, test.b)
+               if ia != test.indexA || ib != test.indexB || l != test.length {
+                       t.Errorf("%d: want (%d %d %d) got (%d %d %d)", i, test.indexA, test.indexB, test.length, ia, ib, l)
+               }
+       }
+}
+
+func TestDiff(t *testing.T) {
+       for i, test := range []struct {
+               a, b []byte
+               d    Differences
+       }{
+               {
+                       []byte{0, 1, 2, 3, 4},
+                       []byte{1, 1, 2, 2, 3, 4},
+                       Differences{
+                               Difference{true, []byte{0}, []byte{}},
+                               Difference{false, []byte{1}, []byte{1}},
+                               Difference{true, []byte{}, []byte{1, 2}},
+                               Difference{false, []byte{2, 3, 4}, []byte{2, 3, 4}},
+                       },
+               },
+       } {
+               diffs := Diff(test.a, test.b)
+               if !reflect.DeepEqual(diffs, test.d) {
+                       t.Errorf("%d want %v got %v", i, test.d, diffs)
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/decode.go b/vendor/github.com/google/gopacket/decode.go
new file mode 100644 (file)
index 0000000..2633f84
--- /dev/null
@@ -0,0 +1,157 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "errors"
+)
+
+// DecodeFeedback is used by DecodingLayer layers to provide decoding metadata.
+type DecodeFeedback interface {
+       // SetTruncated should be called if during decoding you notice that a packet
+       // is shorter than internal layer variables (HeaderLength, or the like) say it
+       // should be.  It sets packet.Metadata().Truncated.
+       SetTruncated()
+}
+
+type nilDecodeFeedback struct{}
+
+func (nilDecodeFeedback) SetTruncated() {}
+
+// NilDecodeFeedback implements DecodeFeedback by doing nothing.
+var NilDecodeFeedback DecodeFeedback = nilDecodeFeedback{}
+
+// PacketBuilder is used by layer decoders to store the layers they've decoded,
+// and to defer future decoding via NextDecoder.
+// Typically, the pattern for use is:
+//  func (m *myDecoder) Decode(data []byte, p PacketBuilder) error {
+//    if myLayer, err := myDecodingLogic(data); err != nil {
+//      return err
+//    } else {
+//      p.AddLayer(myLayer)
+//    }
+//    // maybe do this, if myLayer is a LinkLayer
+//    p.SetLinkLayer(myLayer)
+//    return p.NextDecoder(nextDecoder)
+//  }
+type PacketBuilder interface {
+       DecodeFeedback
+       // AddLayer should be called by a decoder immediately upon successful
+       // decoding of a layer.
+       AddLayer(l Layer)
+       // The following functions set the various specific layers in the final
+       // packet.  Note that if many layers call SetX, the first call is kept and all
+       // other calls are ignored.
+       SetLinkLayer(LinkLayer)
+       SetNetworkLayer(NetworkLayer)
+       SetTransportLayer(TransportLayer)
+       SetApplicationLayer(ApplicationLayer)
+       SetErrorLayer(ErrorLayer)
+       // NextDecoder should be called by a decoder when they're done decoding a
+       // packet layer but not done with decoding the entire packet.  The next
+       // decoder will be called to decode the last AddLayer's LayerPayload.
+       // Because of this, NextDecoder must only be called once all other
+       // PacketBuilder calls have been made.  Set*Layer and AddLayer calls after
+       // NextDecoder calls will behave incorrectly.
+       NextDecoder(next Decoder) error
+       // DumpPacketData is used solely for decoding.  If you come across an error
+       // you need to diagnose while processing a packet, call this and your packet's
+       // data will be dumped to stderr so you can create a test.  This should never
+       // be called from a production decoder.
+       DumpPacketData()
+       // DecodeOptions returns the decode options
+       DecodeOptions() *DecodeOptions
+}
+
+// Decoder is an interface for logic to decode a packet layer.  Users may
+// implement a Decoder to handle their own strange packet types, or may use one
+// of the many decoders available in the 'layers' subpackage to decode things
+// for them.
+type Decoder interface {
+       // Decode decodes the bytes of a packet, sending decoded values and other
+       // information to PacketBuilder, and returning an error if unsuccessful.  See
+       // the PacketBuilder documentation for more details.
+       Decode([]byte, PacketBuilder) error
+}
+
+// DecodeFunc wraps a function to make it a Decoder.
+type DecodeFunc func([]byte, PacketBuilder) error
+
+// Decode implements Decoder by calling itself.
+func (d DecodeFunc) Decode(data []byte, p PacketBuilder) error {
+       // function, call thyself.
+       return d(data, p)
+}
+
+// DecodePayload is a Decoder that returns a Payload layer containing all
+// remaining bytes.
+var DecodePayload Decoder = DecodeFunc(decodePayload)
+
+// DecodeUnknown is a Decoder that returns an Unknown layer containing all
+// remaining bytes, useful if you run up against a layer that you're unable to
+// decode yet.  This layer is considered an ErrorLayer.
+var DecodeUnknown Decoder = DecodeFunc(decodeUnknown)
+
+// DecodeFragment is a Decoder that returns a Fragment layer containing all
+// remaining bytes.
+var DecodeFragment Decoder = DecodeFunc(decodeFragment)
+
+// LayerTypeZero is an invalid layer type, but can be used to determine whether
+// layer type has actually been set correctly.
+var LayerTypeZero = RegisterLayerType(0, LayerTypeMetadata{Name: "Unknown", Decoder: DecodeUnknown})
+
+// LayerTypeDecodeFailure is the layer type for the default error layer.
+var LayerTypeDecodeFailure = RegisterLayerType(1, LayerTypeMetadata{Name: "DecodeFailure", Decoder: DecodeUnknown})
+
+// LayerTypePayload is the layer type for a payload that we don't try to decode
+// but treat as a success, IE: an application-level payload.
+var LayerTypePayload = RegisterLayerType(2, LayerTypeMetadata{Name: "Payload", Decoder: DecodePayload})
+
+// LayerTypeFragment is the layer type for a fragment of a layer transported
+// by an underlying layer that supports fragmentation.
+var LayerTypeFragment = RegisterLayerType(3, LayerTypeMetadata{Name: "Fragment", Decoder: DecodeFragment})
+
+// DecodeFailure is a packet layer created if decoding of the packet data failed
+// for some reason.  It implements ErrorLayer.  LayerContents will be the entire
+// set of bytes that failed to parse, and Error will return the reason parsing
+// failed.
+type DecodeFailure struct {
+       data  []byte
+       err   error
+       stack []byte
+}
+
+// Error returns the error encountered during decoding.
+func (d *DecodeFailure) Error() error { return d.err }
+
+// LayerContents implements Layer.
+func (d *DecodeFailure) LayerContents() []byte { return d.data }
+
+// LayerPayload implements Layer.
+func (d *DecodeFailure) LayerPayload() []byte { return nil }
+
+// String implements fmt.Stringer.
+func (d *DecodeFailure) String() string {
+       return "Packet decoding error: " + d.Error().Error()
+}
+
+// Dump implements Dumper.
+func (d *DecodeFailure) Dump() (s string) {
+       if d.stack != nil {
+               s = string(d.stack)
+       }
+       return
+}
+
+// LayerType returns LayerTypeDecodeFailure
+func (d *DecodeFailure) LayerType() LayerType { return LayerTypeDecodeFailure }
+
+// decodeUnknown "decodes" unsupported data types by returning an error.
+// This decoder will thus always return a DecodeFailure layer.
+func decodeUnknown(data []byte, p PacketBuilder) error {
+       return errors.New("Layer type not currently supported")
+}
diff --git a/vendor/github.com/google/gopacket/doc.go b/vendor/github.com/google/gopacket/doc.go
new file mode 100644 (file)
index 0000000..6198940
--- /dev/null
@@ -0,0 +1,365 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*
+Package gopacket provides packet decoding for the Go language.
+
+gopacket contains many sub-packages with additional functionality you may find
+useful, including:
+
+ * layers: You'll probably use this every time.  This contains of the logic
+     built into gopacket for decoding packet protocols.  Note that all example
+     code below assumes that you have imported both gopacket and
+     gopacket/layers.
+ * pcap: C bindings to use libpcap to read packets off the wire.
+ * pfring: C bindings to use PF_RING to read packets off the wire.
+ * afpacket: C bindings for Linux's AF_PACKET to read packets off the wire.
+ * tcpassembly: TCP stream reassembly
+
+Also, if you're looking to dive right into code, see the examples subdirectory
+for numerous simple binaries built using gopacket libraries.
+
+Basic Usage
+
+gopacket takes in packet data as a []byte and decodes it into a packet with
+a non-zero number of "layers".  Each layer corresponds to a protocol
+within the bytes.  Once a packet has been decoded, the layers of the packet
+can be requested from the packet.
+
+ // Decode a packet
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Default)
+ // Get the TCP layer from this packet
+ if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer != nil {
+   fmt.Println("This is a TCP packet!")
+   // Get actual TCP data from this layer
+   tcp, _ := tcpLayer.(*layers.TCP)
+   fmt.Printf("From src port %d to dst port %d\n", tcp.SrcPort, tcp.DstPort)
+ }
+ // Iterate over all layers, printing out each layer type
+ for _, layer := range packet.Layers() {
+   fmt.Println("PACKET LAYER:", layer.LayerType())
+ }
+
+Packets can be decoded from a number of starting points.  Many of our base
+types implement Decoder, which allow us to decode packets for which
+we don't have full data.
+
+ // Decode an ethernet packet
+ ethP := gopacket.NewPacket(p1, layers.LayerTypeEthernet, gopacket.Default)
+ // Decode an IPv6 header and everything it contains
+ ipP := gopacket.NewPacket(p2, layers.LayerTypeIPv6, gopacket.Default)
+ // Decode a TCP header and its payload
+ tcpP := gopacket.NewPacket(p3, layers.LayerTypeTCP, gopacket.Default)
+
+
+Reading Packets From A Source
+
+Most of the time, you won't just have a []byte of packet data lying around.
+Instead, you'll want to read packets in from somewhere (file, interface, etc)
+and process them.  To do that, you'll want to build a PacketSource.
+
+First, you'll need to construct an object that implements the PacketDataSource
+interface.  There are implementations of this interface bundled with gopacket
+in the gopacket/pcap and gopacket/pfring subpackages... see their documentation
+for more information on their usage.  Once you have a PacketDataSource, you can
+pass it into NewPacketSource, along with a Decoder of your choice, to create
+a PacketSource.
+
+Once you have a PacketSource, you can read packets from it in multiple ways.
+See the docs for PacketSource for more details.  The easiest method is the
+Packets function, which returns a channel, then asynchronously writes new
+packets into that channel, closing the channel if the packetSource hits an
+end-of-file.
+
+  packetSource := ...  // construct using pcap or pfring
+  for packet := range packetSource.Packets() {
+    handlePacket(packet)  // do something with each packet
+  }
+
+You can change the decoding options of the packetSource by setting fields in
+packetSource.DecodeOptions... see the following sections for more details.
+
+
+Lazy Decoding
+
+gopacket optionally decodes packet data lazily, meaning it
+only decodes a packet layer when it needs to handle a function call.
+
+ // Create a packet, but don't actually decode anything yet
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Lazy)
+ // Now, decode the packet up to the first IPv4 layer found but no further.
+ // If no IPv4 layer was found, the whole packet will be decoded looking for
+ // it.
+ ip4 := packet.Layer(layers.LayerTypeIPv4)
+ // Decode all layers and return them.  The layers up to the first IPv4 layer
+ // are already decoded, and will not require decoding a second time.
+ layers := packet.Layers()
+
+Lazily-decoded packets are not concurrency-safe.  Since layers have not all been
+decoded, each call to Layer() or Layers() has the potential to mutate the packet
+in order to decode the next layer.  If a packet is used
+in multiple goroutines concurrently, don't use gopacket.Lazy.  Then gopacket
+will decode the packet fully, and all future function calls won't mutate the
+object.
+
+
+NoCopy Decoding
+
+By default, gopacket will copy the slice passed to NewPacket and store the
+copy within the packet, so future mutations to the bytes underlying the slice
+don't affect the packet and its layers.  If you can guarantee that the
+underlying slice bytes won't be changed, you can use NoCopy to tell
+gopacket.NewPacket, and it'll use the passed-in slice itself.
+
+ // This channel returns new byte slices, each of which points to a new
+ // memory location that's guaranteed immutable for the duration of the
+ // packet.
+ for data := range myByteSliceChannel {
+   p := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)
+   doSomethingWithPacket(p)
+ }
+
+The fastest method of decoding is to use both Lazy and NoCopy, but note from
+the many caveats above that for some implementations either or both may be
+dangerous.
+
+
+Pointers To Known Layers
+
+During decoding, certain layers are stored in the packet as well-known
+layer types.  For example, IPv4 and IPv6 are both considered NetworkLayer
+layers, while TCP and UDP are both TransportLayer layers.  We support 4
+layers, corresponding to the 4 layers of the TCP/IP layering scheme (roughly
+anagalous to layers 2, 3, 4, and 7 of the OSI model).  To access these,
+you can use the packet.LinkLayer, packet.NetworkLayer,
+packet.TransportLayer, and packet.ApplicationLayer functions.  Each of
+these functions returns a corresponding interface
+(gopacket.{Link,Network,Transport,Application}Layer).  The first three
+provide methods for getting src/dst addresses for that particular layer,
+while the final layer provides a Payload function to get payload data.
+This is helpful, for example, to get payloads for all packets regardless
+of their underlying data type:
+
+ // Get packets from some source
+ for packet := range someSource {
+   if app := packet.ApplicationLayer(); app != nil {
+     if strings.Contains(string(app.Payload()), "magic string") {
+       fmt.Println("Found magic string in a packet!")
+     }
+   }
+ }
+
+A particularly useful layer is ErrorLayer, which is set whenever there's
+an error parsing part of the packet.
+
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Default)
+ if err := packet.ErrorLayer(); err != nil {
+   fmt.Println("Error decoding some part of the packet:", err)
+ }
+
+Note that we don't return an error from NewPacket because we may have decoded
+a number of layers successfully before running into our erroneous layer.  You
+may still be able to get your Ethernet and IPv4 layers correctly, even if
+your TCP layer is malformed.
+
+
+Flow And Endpoint
+
+gopacket has two useful objects, Flow and Endpoint, for communicating in a protocol
+independent manner the fact that a packet is coming from A and going to B.
+The general layer types LinkLayer, NetworkLayer, and TransportLayer all provide
+methods for extracting their flow information, without worrying about the type
+of the underlying Layer.
+
+A Flow is a simple object made up of a set of two Endpoints, one source and one
+destination.  It details the sender and receiver of the Layer of the Packet.
+
+An Endpoint is a hashable representation of a source or destination.  For
+example, for LayerTypeIPv4, an Endpoint contains the IP address bytes for a v4
+IP packet.  A Flow can be broken into Endpoints, and Endpoints can be combined
+into Flows:
+
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Lazy)
+ netFlow := packet.NetworkLayer().NetworkFlow()
+ src, dst := netFlow.Endpoints()
+ reverseFlow := gopacket.NewFlow(dst, src)
+
+Both Endpoint and Flow objects can be used as map keys, and the equality
+operator can compare them, so you can easily group together all packets
+based on endpoint criteria:
+
+ flows := map[gopacket.Endpoint]chan gopacket.Packet
+ packet := gopacket.NewPacket(myPacketData, layers.LayerTypeEthernet, gopacket.Lazy)
+ // Send all TCP packets to channels based on their destination port.
+ if tcp := packet.Layer(layers.LayerTypeTCP); tcp != nil {
+   flows[tcp.TransportFlow().Dst()] <- packet
+ }
+ // Look for all packets with the same source and destination network address
+ if net := packet.NetworkLayer(); net != nil {
+   src, dst := net.NetworkFlow().Endpoints()
+   if src == dst {
+     fmt.Println("Fishy packet has same network source and dst: %s", src)
+   }
+ }
+ // Find all packets coming from UDP port 1000 to UDP port 500
+ interestingFlow := gopacket.NewFlow(layers.NewUDPPortEndpoint(1000), layers.NewUDPPortEndpoint(500))
+ if t := packet.NetworkLayer(); t != nil && t.TransportFlow() == interestingFlow {
+   fmt.Println("Found that UDP flow I was looking for!")
+ }
+
+For load-balancing purposes, both Flow and Endpoint have FastHash() functions,
+which provide quick, non-cryptographic hashes of their contents.  Of particular
+importance is the fact that Flow FastHash() is symmetric: A->B will have the same
+hash as B->A.  An example usage could be:
+
+ channels := [8]chan gopacket.Packet
+ for i := 0; i < 8; i++ {
+   channels[i] = make(chan gopacket.Packet)
+   go packetHandler(channels[i])
+ }
+ for packet := range getPackets() {
+   if net := packet.NetworkLayer(); net != nil {
+     channels[int(net.NetworkFlow().FastHash()) & 0x7] <- packet
+   }
+ }
+
+This allows us to split up a packet stream while still making sure that each
+stream sees all packets for a flow (and its bidirectional opposite).
+
+
+Implementing Your Own Decoder
+
+If your network has some strange encapsulation, you can implement your own
+decoder.  In this example, we handle Ethernet packets which are encapsulated
+in a 4-byte header.
+
+ // Create a layer type, should be unique and high, so it doesn't conflict,
+ // giving it a name and a decoder to use.
+ var MyLayerType = gopacket.RegisterLayerType(12345, gopacket.LayerTypeMetadata{Name: "MyLayerType", Decoder: gopacket.DecodeFunc(decodeMyLayer)})
+
+ // Implement my layer
+ type MyLayer struct {
+   StrangeHeader []byte
+   payload []byte
+ }
+ func (m MyLayer) LayerType() gopacket.LayerType { return MyLayerType }
+ func (m MyLayer) LayerContents() []byte { return m.StrangeHeader }
+ func (m MyLayer) LayerPayload() []byte { return m.payload }
+
+ // Now implement a decoder... this one strips off the first 4 bytes of the
+ // packet.
+ func decodeMyLayer(data []byte, p gopacket.PacketBuilder) error {
+   // Create my layer
+   p.AddLayer(&MyLayer{data[:4], data[4:]})
+   // Determine how to handle the rest of the packet
+   return p.NextDecoder(layers.LayerTypeEthernet)
+ }
+
+ // Finally, decode your packets:
+ p := gopacket.NewPacket(data, MyLayerType, gopacket.Lazy)
+
+See the docs for Decoder and PacketBuilder for more details on how coding
+decoders works, or look at RegisterLayerType and RegisterEndpointType to see how
+to add layer/endpoint types to gopacket.
+
+
+Fast Decoding With DecodingLayerParser
+
+TLDR:  DecodingLayerParser takes about 10% of the time as NewPacket to decode
+packet data, but only for known packet stacks.
+
+Basic decoding using gopacket.NewPacket or PacketSource.Packets is somewhat slow
+due to its need to allocate a new packet and every respective layer.  It's very
+versatile and can handle all known layer types, but sometimes you really only
+care about a specific set of layers regardless, so that versatility is wasted.
+
+DecodingLayerParser avoids memory allocation altogether by decoding packet
+layers directly into preallocated objects, which you can then reference to get
+the packet's information.  A quick example:
+
+ func main() {
+   var eth layers.Ethernet
+   var ip4 layers.IPv4
+   var ip6 layers.IPv6
+   var tcp layers.TCP
+   parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &ip6, &tcp)
+   decoded := []gopacket.LayerType{}
+   for packetData := range somehowGetPacketData() {
+     err := parser.DecodeLayers(packetData, &decoded)
+     for _, layerType := range decoded {
+       switch layerType {
+         case layers.LayerTypeIPv6:
+           fmt.Println("    IP6 ", ip6.SrcIP, ip6.DstIP)
+         case layers.LayerTypeIPv4:
+           fmt.Println("    IP4 ", ip4.SrcIP, ip4.DstIP)
+       }
+     }
+   }
+ }
+
+The important thing to note here is that the parser is modifying the passed in
+layers (eth, ip4, ip6, tcp) instead of allocating new ones, thus greatly
+speeding up the decoding process.  It's even branching based on layer type...
+it'll handle an (eth, ip4, tcp) or (eth, ip6, tcp) stack.  However, it won't
+handle any other type... since no other decoders were passed in, an (eth, ip4,
+udp) stack will stop decoding after ip4, and only pass back [LayerTypeEthernet,
+LayerTypeIPv4] through the 'decoded' slice (along with an error saying it can't
+decode a UDP packet).
+
+Unfortunately, not all layers can be used by DecodingLayerParser... only those
+implementing the DecodingLayer interface are usable.  Also, it's possible to
+create DecodingLayers that are not themselves Layers... see
+layers.IPv6ExtensionSkipper for an example of this.
+
+
+Creating Packet Data
+
+As well as offering the ability to decode packet data, gopacket will allow you
+to create packets from scratch, as well.  A number of gopacket layers implement
+the SerializableLayer interface; these layers can be serialized to a []byte in
+the following manner:
+
+  ip := &layers.IPv4{
+    SrcIP: net.IP{1, 2, 3, 4},
+    DstIP: net.IP{5, 6, 7, 8},
+    // etc...
+  }
+  buf := gopacket.NewSerializeBuffer()
+  opts := gopacket.SerializeOptions{}  // See SerializeOptions for more details.
+  err := ip.SerializeTo(&buf, opts)
+  if err != nil { panic(err) }
+  fmt.Println(buf.Bytes())  // prints out a byte slice containing the serialized IPv4 layer.
+
+SerializeTo PREPENDS the given layer onto the SerializeBuffer, and they treat
+the current buffer's Bytes() slice as the payload of the serializing layer.
+Therefore, you can serialize an entire packet by serializing a set of layers in
+reverse order (Payload, then TCP, then IP, then Ethernet, for example).  The
+SerializeBuffer's SerializeLayers function is a helper that does exactly that.
+
+To generate a (empty and useless, because no fields are set)
+Ethernet(IPv4(TCP(Payload))) packet, for example, you can run:
+
+  buf := gopacket.NewSerializeBuffer()
+  opts := gopacket.SerializeOptions{}
+  gopacket.SerializeLayers(buf, opts,
+    &layers.Ethernet{},
+    &layers.IPv4{},
+    &layers.TCP{},
+    gopacket.Payload([]byte{1, 2, 3, 4}))
+  packetData := buf.Bytes()
+
+A Final Note
+
+If you use gopacket, you'll almost definitely want to make sure gopacket/layers
+is imported, since when imported it sets all the LayerType variables and fills
+in a lot of interesting variables/maps (DecodersByLayerName, etc).  Therefore,
+it's recommended that even if you don't use any layers functions directly, you still import with:
+
+  import (
+    _ "github.com/google/gopacket/layers"
+  )
+*/
+package gopacket
diff --git a/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go b/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go
new file mode 100644 (file)
index 0000000..2d35722
--- /dev/null
@@ -0,0 +1,119 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package dumpcommand implements a run function for pfdump and pcapdump
+// with many similar flags/features to tcpdump.  This code is split out seperate
+// from data sources (pcap/pfring) so it can be used by both.
+package dumpcommand
+
+import (
+       "flag"
+       "fmt"
+       "log"
+       "os"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/ip4defrag"
+       "github.com/google/gopacket/layers" // pulls in all layers decoders
+)
+
+var (
+       print       = flag.Bool("print", true, "Print out packets, if false only prints out statistics")
+       maxcount    = flag.Int("c", -1, "Only grab this many packets, then exit")
+       decoder     = flag.String("decoder", "Ethernet", "Name of the decoder to use")
+       dump        = flag.Bool("X", false, "If true, dump very verbose info on each packet")
+       statsevery  = flag.Int("stats", 1000, "Output statistics every N packets")
+       printErrors = flag.Bool("errors", false, "Print out packet dumps of decode errors, useful for checking decoders against live traffic")
+       lazy        = flag.Bool("lazy", false, "If true, do lazy decoding")
+       defrag      = flag.Bool("defrag", false, "If true, do IPv4 defrag")
+)
+
+func Run(src gopacket.PacketDataSource) {
+       if !flag.Parsed() {
+               log.Fatalln("Run called without flags.Parse() being called")
+       }
+       var dec gopacket.Decoder
+       var ok bool
+       if dec, ok = gopacket.DecodersByLayerName[*decoder]; !ok {
+               log.Fatalln("No decoder named", *decoder)
+       }
+       source := gopacket.NewPacketSource(src, dec)
+       source.Lazy = *lazy
+       source.NoCopy = true
+       source.DecodeStreamsAsDatagrams = true
+       fmt.Fprintln(os.Stderr, "Starting to read packets")
+       count := 0
+       bytes := int64(0)
+       start := time.Now()
+       errors := 0
+       truncated := 0
+       layertypes := map[gopacket.LayerType]int{}
+       defragger := ip4defrag.NewIPv4Defragmenter()
+
+       for packet := range source.Packets() {
+               count++
+               bytes += int64(len(packet.Data()))
+
+               // defrag the IPv4 packet if required
+               if *defrag {
+                       ip4Layer := packet.Layer(layers.LayerTypeIPv4)
+                       if ip4Layer == nil {
+                               continue
+                       }
+                       ip4 := ip4Layer.(*layers.IPv4)
+                       l := ip4.Length
+
+                       newip4, err := defragger.DefragIPv4(ip4)
+                       if err != nil {
+                               log.Fatalln("Error while de-fragmenting", err)
+                       } else if newip4 == nil {
+                               continue // packet fragment, we don't have whole packet yet.
+                       }
+                       if newip4.Length != l {
+                               fmt.Printf("Decoding re-assembled packet: %s\n", newip4.NextLayerType())
+                               pb, ok := packet.(gopacket.PacketBuilder)
+                               if !ok {
+                                       panic("Not a PacketBuilder")
+                               }
+                               nextDecoder := newip4.NextLayerType()
+                               nextDecoder.Decode(newip4.Payload, pb)
+                       }
+               }
+
+               if *dump {
+                       fmt.Println(packet.Dump())
+               } else if *print {
+                       fmt.Println(packet)
+               }
+               if !*lazy || *print || *dump { // if we've already decoded all layers...
+                       for _, layer := range packet.Layers() {
+                               layertypes[layer.LayerType()]++
+                       }
+                       if packet.Metadata().Truncated {
+                               truncated++
+                       }
+                       if errLayer := packet.ErrorLayer(); errLayer != nil {
+                               errors++
+                               if *printErrors {
+                                       fmt.Println("Error:", errLayer.Error())
+                                       fmt.Println("--- Packet ---")
+                                       fmt.Println(packet.Dump())
+                               }
+                       }
+               }
+               done := *maxcount > 0 && count >= *maxcount
+               if count%*statsevery == 0 || done {
+                       fmt.Fprintf(os.Stderr, "Processed %v packets (%v bytes) in %v, %v errors and %v truncated packets\n", count, bytes, time.Since(start), errors, truncated)
+                       if len(layertypes) > 0 {
+                               fmt.Fprintf(os.Stderr, "Layer types seen: %+v\n", layertypes)
+                       }
+               }
+               if done {
+                       break
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go b/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go
new file mode 100644 (file)
index 0000000..1a0e33e
--- /dev/null
@@ -0,0 +1,188 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// arpscan implements ARP scanning of all interfaces' local networks using
+// gopacket and its subpackages.  This example shows, among other things:
+//   * Generating and sending packet data
+//   * Reading in packet data and interpreting it
+//   * Use of the 'pcap' subpackage for reading/writing
+package main
+
+import (
+       "bytes"
+       "encoding/binary"
+       "errors"
+       "log"
+       "net"
+       "sync"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+       "github.com/google/gopacket/pcap"
+)
+
+func main() {
+       // Get a list of all interfaces.
+       ifaces, err := net.Interfaces()
+       if err != nil {
+               panic(err)
+       }
+
+       var wg sync.WaitGroup
+       for _, iface := range ifaces {
+               wg.Add(1)
+               // Start up a scan on each interface.
+               go func(iface net.Interface) {
+                       defer wg.Done()
+                       if err := scan(&iface); err != nil {
+                               log.Printf("interface %v: %v", iface.Name, err)
+                       }
+               }(iface)
+       }
+       // Wait for all interfaces' scans to complete.  They'll try to run
+       // forever, but will stop on an error, so if we get past this Wait
+       // it means all attempts to write have failed.
+       wg.Wait()
+}
+
+// scan scans an individual interface's local network for machines using ARP requests/replies.
+//
+// scan loops forever, sending packets out regularly.  It returns an error if
+// it's ever unable to write a packet.
+func scan(iface *net.Interface) error {
+       // We just look for IPv4 addresses, so try to find if the interface has one.
+       var addr *net.IPNet
+       if addrs, err := iface.Addrs(); err != nil {
+               return err
+       } else {
+               for _, a := range addrs {
+                       if ipnet, ok := a.(*net.IPNet); ok {
+                               if ip4 := ipnet.IP.To4(); ip4 != nil {
+                                       addr = &net.IPNet{
+                                               IP:   ip4,
+                                               Mask: ipnet.Mask[len(ipnet.Mask)-4:],
+                                       }
+                                       break
+                               }
+                       }
+               }
+       }
+       // Sanity-check that the interface has a good address.
+       if addr == nil {
+               return errors.New("no good IP network found")
+       } else if addr.IP[0] == 127 {
+               return errors.New("skipping localhost")
+       } else if addr.Mask[0] != 0xff || addr.Mask[1] != 0xff {
+               return errors.New("mask means network is too large")
+       }
+       log.Printf("Using network range %v for interface %v", addr, iface.Name)
+
+       // Open up a pcap handle for packet reads/writes.
+       handle, err := pcap.OpenLive(iface.Name, 65536, true, pcap.BlockForever)
+       if err != nil {
+               return err
+       }
+       defer handle.Close()
+
+       // Start up a goroutine to read in packet data.
+       stop := make(chan struct{})
+       go readARP(handle, iface, stop)
+       defer close(stop)
+       for {
+               // Write our scan packets out to the handle.
+               if err := writeARP(handle, iface, addr); err != nil {
+                       log.Printf("error writing packets on %v: %v", iface.Name, err)
+                       return err
+               }
+               // We don't know exactly how long it'll take for packets to be
+               // sent back to us, but 10 seconds should be more than enough
+               // time ;)
+               time.Sleep(10 * time.Second)
+       }
+}
+
+// readARP watches a handle for incoming ARP responses we might care about, and prints them.
+//
+// readARP loops until 'stop' is closed.
+func readARP(handle *pcap.Handle, iface *net.Interface, stop chan struct{}) {
+       src := gopacket.NewPacketSource(handle, layers.LayerTypeEthernet)
+       in := src.Packets()
+       for {
+               var packet gopacket.Packet
+               select {
+               case <-stop:
+                       return
+               case packet = <-in:
+                       arpLayer := packet.Layer(layers.LayerTypeARP)
+                       if arpLayer == nil {
+                               continue
+                       }
+                       arp := arpLayer.(*layers.ARP)
+                       if arp.Operation != layers.ARPReply || bytes.Equal([]byte(iface.HardwareAddr), arp.SourceHwAddress) {
+                               // This is a packet I sent.
+                               continue
+                       }
+                       // Note:  we might get some packets here that aren't responses to ones we've sent,
+                       // if for example someone else sends US an ARP request.  Doesn't much matter, though...
+                       // all information is good information :)
+                       log.Printf("IP %v is at %v", net.IP(arp.SourceProtAddress), net.HardwareAddr(arp.SourceHwAddress))
+               }
+       }
+}
+
+// writeARP writes an ARP request for each address on our local network to the
+// pcap handle.
+func writeARP(handle *pcap.Handle, iface *net.Interface, addr *net.IPNet) error {
+       // Set up all the layers' fields we can.
+       eth := layers.Ethernet{
+               SrcMAC:       iface.HardwareAddr,
+               DstMAC:       net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+               EthernetType: layers.EthernetTypeARP,
+       }
+       arp := layers.ARP{
+               AddrType:          layers.LinkTypeEthernet,
+               Protocol:          layers.EthernetTypeIPv4,
+               HwAddressSize:     6,
+               ProtAddressSize:   4,
+               Operation:         layers.ARPRequest,
+               SourceHwAddress:   []byte(iface.HardwareAddr),
+               SourceProtAddress: []byte(addr.IP),
+               DstHwAddress:      []byte{0, 0, 0, 0, 0, 0},
+       }
+       // Set up buffer and options for serialization.
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{
+               FixLengths:       true,
+               ComputeChecksums: true,
+       }
+       // Send one packet for every address.
+       for _, ip := range ips(addr) {
+               arp.DstProtAddress = []byte(ip)
+               gopacket.SerializeLayers(buf, opts, &eth, &arp)
+               if err := handle.WritePacketData(buf.Bytes()); err != nil {
+                       return err
+               }
+       }
+       return nil
+}
+
+// ips is a simple and not very good method for getting all IPv4 addresses from a
+// net.IPNet.  It returns all IPs it can over the channel it sends back, closing
+// the channel when done.
+func ips(n *net.IPNet) (out []net.IP) {
+       num := binary.BigEndian.Uint32([]byte(n.IP))
+       mask := binary.BigEndian.Uint32([]byte(n.Mask))
+       num &= mask
+       for mask < 0xffffffff {
+               var buf [4]byte
+               binary.BigEndian.PutUint32(buf[:], num)
+               out = append(out, net.IP(buf[:]))
+               mask += 1
+               num += 1
+       }
+       return
+}
diff --git a/vendor/github.com/google/gopacket/examples/bidirectional/main.go b/vendor/github.com/google/gopacket/examples/bidirectional/main.go
new file mode 100644 (file)
index 0000000..4b0b240
--- /dev/null
@@ -0,0 +1,192 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This binary provides an example of connecting up bidirectional streams from
+// the unidirectional streams provided by gopacket/tcpassembly.
+package main
+
+import (
+       "flag"
+       "fmt"
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/examples/util"
+       "github.com/google/gopacket/layers"
+       "github.com/google/gopacket/pcap"
+       "github.com/google/gopacket/tcpassembly"
+       "log"
+       "time"
+)
+
+var iface = flag.String("i", "eth0", "Interface to get packets from")
+var snaplen = flag.Int("s", 16<<10, "SnapLen for pcap packet capture")
+var filter = flag.String("f", "tcp", "BPF filter for pcap")
+var logAllPackets = flag.Bool("v", false, "Logs every packet in great detail")
+
+// key is used to map bidirectional streams to each other.
+type key struct {
+       net, transport gopacket.Flow
+}
+
+// String prints out the key in a human-readable fashion.
+func (k key) String() string {
+       return fmt.Sprintf("%v:%v", k.net, k.transport)
+}
+
+// timeout is the length of time to wait befor flushing connections and
+// bidirectional stream pairs.
+const timeout time.Duration = time.Minute * 5
+
+// myStream implements tcpassembly.Stream
+type myStream struct {
+       bytes int64 // total bytes seen on this stream.
+       bidi  *bidi // maps to my bidirectional twin.
+       done  bool  // if true, we've seen the last packet we're going to for this stream.
+}
+
+// bidi stores each unidirectional side of a bidirectional stream.
+//
+// When a new stream comes in, if we don't have an opposite stream, a bidi is
+// created with 'a' set to the new stream.  If we DO have an opposite stream,
+// 'b' is set to the new stream.
+type bidi struct {
+       key            key       // Key of the first stream, mostly for logging.
+       a, b           *myStream // the two bidirectional streams.
+       lastPacketSeen time.Time // last time we saw a packet from either stream.
+}
+
+// myFactory implements tcpassmebly.StreamFactory
+type myFactory struct {
+       // bidiMap maps keys to bidirectional stream pairs.
+       bidiMap map[key]*bidi
+}
+
+// New handles creating a new tcpassembly.Stream.
+func (f *myFactory) New(netFlow, tcpFlow gopacket.Flow) tcpassembly.Stream {
+       // Create a new stream.
+       s := &myStream{}
+
+       // Find the bidi bidirectional struct for this stream, creating a new one if
+       // one doesn't already exist in the map.
+       k := key{netFlow, tcpFlow}
+       bd := f.bidiMap[k]
+       if bd == nil {
+               bd = &bidi{a: s, key: k}
+               log.Printf("[%v] created first side of bidirectional stream", bd.key)
+               // Register bidirectional with the reverse key, so the matching stream going
+               // the other direction will find it.
+               f.bidiMap[key{netFlow.Reverse(), tcpFlow.Reverse()}] = bd
+       } else {
+               log.Printf("[%v] found second side of bidirectional stream", bd.key)
+               bd.b = s
+               // Clear out the bidi we're using from the map, just in case.
+               delete(f.bidiMap, k)
+       }
+       s.bidi = bd
+       return s
+}
+
+// emptyStream is used to finish bidi that only have one stream, in
+// collectOldStreams.
+var emptyStream = &myStream{done: true}
+
+// collectOldStreams finds any streams that haven't received a packet within
+// 'timeout', and sets/finishes the 'b' stream inside them.  The 'a' stream may
+// still receive packets after this.
+func (f *myFactory) collectOldStreams() {
+       cutoff := time.Now().Add(-timeout)
+       for k, bd := range f.bidiMap {
+               if bd.lastPacketSeen.Before(cutoff) {
+                       log.Printf("[%v] timing out old stream", bd.key)
+                       bd.b = emptyStream   // stub out b with an empty stream.
+                       delete(f.bidiMap, k) // remove it from our map.
+                       bd.maybeFinish()     // if b was the last stream we were waiting for, finish up.
+               }
+       }
+}
+
+// Reassembled handles reassembled TCP stream data.
+func (s *myStream) Reassembled(rs []tcpassembly.Reassembly) {
+       for _, r := range rs {
+               // For now, we'll simply count the bytes on each side of the TCP stream.
+               s.bytes += int64(len(r.Bytes))
+               if r.Skip > 0 {
+                       s.bytes += int64(r.Skip)
+               }
+               // Mark that we've received new packet data.
+               // We could just use time.Now, but by using r.Seen we handle the case
+               // where packets are being read from a file and could be very old.
+               if s.bidi.lastPacketSeen.After(r.Seen) {
+                       s.bidi.lastPacketSeen = r.Seen
+               }
+       }
+}
+
+// ReassemblyComplete marks this stream as finished.
+func (s *myStream) ReassemblyComplete() {
+       s.done = true
+       s.bidi.maybeFinish()
+}
+
+// maybeFinish will wait until both directions are complete, then print out
+// stats.
+func (bd *bidi) maybeFinish() {
+       switch {
+       case bd.a == nil:
+               log.Fatalf("[%v] a should always be non-nil, since it's set when bidis are created", bd.key)
+       case !bd.a.done:
+               log.Printf("[%v] still waiting on first stream", bd.key)
+       case bd.b == nil:
+               log.Printf("[%v] no second stream yet", bd.key)
+       case !bd.b.done:
+               log.Printf("[%v] still waiting on second stream", bd.key)
+       default:
+               log.Printf("[%v] FINISHED, bytes: %d tx, %d rx", bd.key, bd.a.bytes, bd.b.bytes)
+       }
+}
+
+func main() {
+       defer util.Run()()
+       log.Printf("starting capture on interface %q", *iface)
+       // Set up pcap packet capture
+       handle, err := pcap.OpenLive(*iface, int32(*snaplen), true, pcap.BlockForever)
+       if err != nil {
+               panic(err)
+       }
+       if err := handle.SetBPFFilter(*filter); err != nil {
+               panic(err)
+       }
+
+       // Set up assembly
+       streamFactory := &myFactory{bidiMap: make(map[key]*bidi)}
+       streamPool := tcpassembly.NewStreamPool(streamFactory)
+       assembler := tcpassembly.NewAssembler(streamPool)
+
+       log.Println("reading in packets")
+       // Read in packets, pass to assembler.
+       packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+       packets := packetSource.Packets()
+       ticker := time.Tick(timeout / 4)
+       for {
+               select {
+               case packet := <-packets:
+                       if *logAllPackets {
+                               log.Println(packet)
+                       }
+                       if packet.NetworkLayer() == nil || packet.TransportLayer() == nil || packet.TransportLayer().LayerType() != layers.LayerTypeTCP {
+                               log.Println("Unusable packet")
+                               continue
+                       }
+                       tcp := packet.TransportLayer().(*layers.TCP)
+                       assembler.AssembleWithTimestamp(packet.NetworkLayer().NetworkFlow(), tcp, packet.Metadata().Timestamp)
+
+               case <-ticker:
+                       // Every minute, flush connections that haven't seen activity in the past minute.
+                       log.Println("---- FLUSHING ----")
+                       assembler.FlushOlderThan(time.Now().Add(-timeout))
+                       streamFactory.collectOldStreams()
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/examples/bytediff/bytediff.png b/vendor/github.com/google/gopacket/examples/bytediff/bytediff.png
new file mode 100644 (file)
index 0000000..5aa3c8a
Binary files /dev/null and b/vendor/github.com/google/gopacket/examples/bytediff/bytediff.png differ
diff --git a/vendor/github.com/google/gopacket/examples/bytediff/main.go b/vendor/github.com/google/gopacket/examples/bytediff/main.go
new file mode 100644 (file)
index 0000000..2a4c11b
--- /dev/null
@@ -0,0 +1,96 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This binary shows how to display byte differences to users via the bytediff
+// library.
+package main
+
+import (
+       "fmt"
+       "github.com/google/gopacket/bytediff"
+)
+
+var sliceA = []byte{
+       0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49,
+       0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06,
+       0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7,
+       0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18,
+       0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77,
+       0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,
+       0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f,
+       0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68,
+       0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+       0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x61,
+       0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41,
+       0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,
+       0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20,
+       0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34,
+       0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69,
+       0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54,
+       0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63,
+       0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31,
+       0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20,
+       0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x2e, 0x31,
+       0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65,
+       0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c,
+       0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d,
+       0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+       0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d,
+       0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e,
+       0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e,
+       0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70,
+       0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63,
+       0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61,
+       0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55,
+       0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a,
+       0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73,
+       0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39,
+       0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30,
+       0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a,
+       0x0d, 0x0a,
+}
+var sliceB = []byte{
+       0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49,
+       0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06,
+       0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7,
+       0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18,
+       0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77,
+       0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,
+       0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f,
+       0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68,
+       0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+       0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41,
+       0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,
+       0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20,
+       0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34,
+       0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69,
+       0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54,
+       0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63,
+       0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31,
+       0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20,
+       0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32,
+       0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65,
+       0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c,
+       0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d,
+       0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+       0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d,
+       0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e,
+       0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e,
+       0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70,
+       0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63,
+       0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61,
+       0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55,
+       0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a,
+       0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73,
+       0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2e, 0x39, 0x55, 0x35, 0x39,
+       0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30,
+       0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a,
+       0x0d, 0x0a,
+}
+
+func main() {
+       fmt.Println(bytediff.BashOutput.String(bytediff.Diff(sliceA, sliceB)))
+}
diff --git a/vendor/github.com/google/gopacket/examples/httpassembly/main.go b/vendor/github.com/google/gopacket/examples/httpassembly/main.go
new file mode 100644 (file)
index 0000000..02af21e
--- /dev/null
@@ -0,0 +1,127 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This binary provides sample code for using the gopacket TCP assembler and TCP
+// stream reader.  It reads packets off the wire and reconstructs HTTP requests
+// it sees, logging them.
+package main
+
+import (
+       "bufio"
+       "flag"
+       "io"
+       "log"
+       "net/http"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/examples/util"
+       "github.com/google/gopacket/layers"
+       "github.com/google/gopacket/pcap"
+       "github.com/google/gopacket/tcpassembly"
+       "github.com/google/gopacket/tcpassembly/tcpreader"
+)
+
+var iface = flag.String("i", "eth0", "Interface to get packets from")
+var fname = flag.String("r", "", "Filename to read from, overrides -i")
+var snaplen = flag.Int("s", 1600, "SnapLen for pcap packet capture")
+var filter = flag.String("f", "tcp and dst port 80", "BPF filter for pcap")
+var logAllPackets = flag.Bool("v", false, "Logs every packet in great detail")
+
+// Build a simple HTTP request parser using tcpassembly.StreamFactory and tcpassembly.Stream interfaces
+
+// httpStreamFactory implements tcpassembly.StreamFactory
+type httpStreamFactory struct{}
+
+// httpStream will handle the actual decoding of http requests.
+type httpStream struct {
+       net, transport gopacket.Flow
+       r              tcpreader.ReaderStream
+}
+
+func (h *httpStreamFactory) New(net, transport gopacket.Flow) tcpassembly.Stream {
+       hstream := &httpStream{
+               net:       net,
+               transport: transport,
+               r:         tcpreader.NewReaderStream(),
+       }
+       go hstream.run() // Important... we must guarantee that data from the reader stream is read.
+
+       // ReaderStream implements tcpassembly.Stream, so we can return a pointer to it.
+       return &hstream.r
+}
+
+func (h *httpStream) run() {
+       buf := bufio.NewReader(&h.r)
+       for {
+               req, err := http.ReadRequest(buf)
+               if err == io.EOF {
+                       // We must read until we see an EOF... very important!
+                       return
+               } else if err != nil {
+                       log.Println("Error reading stream", h.net, h.transport, ":", err)
+               } else {
+                       bodyBytes := tcpreader.DiscardBytesToEOF(req.Body)
+                       req.Body.Close()
+                       log.Println("Received request from stream", h.net, h.transport, ":", req, "with", bodyBytes, "bytes in request body")
+               }
+       }
+}
+
+func main() {
+       defer util.Run()()
+       var handle *pcap.Handle
+       var err error
+
+       // Set up pcap packet capture
+       if *fname != "" {
+               log.Printf("Reading from pcap dump %q", *fname)
+               handle, err = pcap.OpenOffline(*fname)
+       } else {
+               log.Printf("Starting capture on interface %q", *iface)
+               handle, err = pcap.OpenLive(*iface, int32(*snaplen), true, pcap.BlockForever)
+       }
+       if err != nil {
+               log.Fatal(err)
+       }
+
+       if err := handle.SetBPFFilter(*filter); err != nil {
+               log.Fatal(err)
+       }
+
+       // Set up assembly
+       streamFactory := &httpStreamFactory{}
+       streamPool := tcpassembly.NewStreamPool(streamFactory)
+       assembler := tcpassembly.NewAssembler(streamPool)
+
+       log.Println("reading in packets")
+       // Read in packets, pass to assembler.
+       packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+       packets := packetSource.Packets()
+       ticker := time.Tick(time.Minute)
+       for {
+               select {
+               case packet := <-packets:
+                       // A nil packet indicates the end of a pcap file.
+                       if packet == nil {
+                               return
+                       }
+                       if *logAllPackets {
+                               log.Println(packet)
+                       }
+                       if packet.NetworkLayer() == nil || packet.TransportLayer() == nil || packet.TransportLayer().LayerType() != layers.LayerTypeTCP {
+                               log.Println("Unusable packet")
+                               continue
+                       }
+                       tcp := packet.TransportLayer().(*layers.TCP)
+                       assembler.AssembleWithTimestamp(packet.NetworkLayer().NetworkFlow(), tcp, packet.Metadata().Timestamp)
+
+               case <-ticker:
+                       // Every minute, flush connections that haven't seen activity in the past 2 minutes.
+                       assembler.FlushOlderThan(time.Now().Add(time.Minute * -2))
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/examples/pcapdump/main.go b/vendor/github.com/google/gopacket/examples/pcapdump/main.go
new file mode 100644 (file)
index 0000000..373dee2
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// The pcapdump binary implements a tcpdump-like command line tool with gopacket
+// using pcap as a backend data collection mechanism.
+package main
+
+import (
+       "flag"
+       "fmt"
+       "github.com/google/gopacket/dumpcommand"
+       "github.com/google/gopacket/examples/util"
+       "github.com/google/gopacket/pcap"
+       "log"
+       "os"
+       "strings"
+       "time"
+)
+
+var iface = flag.String("i", "eth0", "Interface to read packets from")
+var fname = flag.String("r", "", "Filename to read from, overrides -i")
+var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet")
+var tstype = flag.String("timestamp_type", "", "Type of timestamps to use")
+var promisc = flag.Bool("promisc", true, "Set promiscuous mode")
+
+func main() {
+       defer util.Run()()
+       var handle *pcap.Handle
+       var err error
+       if *fname != "" {
+               if handle, err = pcap.OpenOffline(*fname); err != nil {
+                       log.Fatal("PCAP OpenOffline error:", err)
+               }
+       } else {
+               // This is a little complicated because we want to allow all possible options
+               // for creating the packet capture handle... instead of all this you can
+               // just call pcap.OpenLive if you want a simple handle.
+               inactive, err := pcap.NewInactiveHandle(*iface)
+               if err != nil {
+                       log.Fatalf("could not create: %v", err)
+               }
+               defer inactive.CleanUp()
+               if err = inactive.SetSnapLen(*snaplen); err != nil {
+                       log.Fatalf("could not set snap length: %v", err)
+               } else if err = inactive.SetPromisc(*promisc); err != nil {
+                       log.Fatalf("could not set promisc mode: %v", err)
+               } else if err = inactive.SetTimeout(time.Second); err != nil {
+                       log.Fatalf("could not set timeout: %v", err)
+               }
+               if *tstype != "" {
+                       if t, err := pcap.TimestampSourceFromString(*tstype); err != nil {
+                               log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps())
+                       } else if err := inactive.SetTimestampSource(t); err != nil {
+                               log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps())
+                       }
+               }
+               if handle, err = inactive.Activate(); err != nil {
+                       log.Fatal("PCAP Activate error:", err)
+               }
+               defer handle.Close()
+       }
+       if len(flag.Args()) > 0 {
+               bpffilter := strings.Join(flag.Args(), " ")
+               fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter)
+               if err = handle.SetBPFFilter(bpffilter); err != nil {
+                       log.Fatal("BPF filter error:", err)
+               }
+       }
+       dumpcommand.Run(handle)
+}
diff --git a/vendor/github.com/google/gopacket/examples/pcaplay/main.go b/vendor/github.com/google/gopacket/examples/pcaplay/main.go
new file mode 100644 (file)
index 0000000..d36d860
--- /dev/null
@@ -0,0 +1,163 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// The pcaplay binary load an offline capture (pcap file) and replay
+// it on the select interface, with an emphasis on packet timing
+package main
+
+import (
+       "flag"
+       "fmt"
+       "io"
+       "log"
+       "os"
+       "strings"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/examples/util"
+       "github.com/google/gopacket/pcap"
+)
+
+var iface = flag.String("i", "eth0", "Interface to write packets to")
+var fname = flag.String("r", "", "Filename to read from")
+var fast = flag.Bool("f", false, "Send each packets as fast as possible")
+
+var lastTS time.Time
+var lastSend time.Time
+
+var start time.Time
+var bytesSent int
+
+func writePacketDelayed(handle *pcap.Handle, buf []byte, ci gopacket.CaptureInfo) {
+       if ci.CaptureLength != ci.Length {
+               // do not write truncated packets
+               return
+       }
+
+       intervalInCapture := ci.Timestamp.Sub(lastTS)
+       elapsedTime := time.Since(lastSend)
+
+       if (intervalInCapture > elapsedTime) && !lastSend.IsZero() {
+               time.Sleep(intervalInCapture - elapsedTime)
+       }
+
+       lastSend = time.Now()
+       writePacket(handle, buf)
+       lastTS = ci.Timestamp
+}
+
+func writePacket(handle *pcap.Handle, buf []byte) error {
+       if err := handle.WritePacketData(buf); err != nil {
+               log.Printf("Failed to send packet: %s\n", err)
+               return err
+       }
+       return nil
+}
+
+func pcapInfo(filename string) (start time.Time, end time.Time, packets int, size int) {
+       handleRead, err := pcap.OpenOffline(*fname)
+       if err != nil {
+               log.Fatal("PCAP OpenOffline error (handle to read packet):", err)
+       }
+
+       var previousTs time.Time
+       var deltaTotal time.Duration
+
+       for {
+               data, ci, err := handleRead.ReadPacketData()
+               if err != nil && err != io.EOF {
+                       log.Fatal(err)
+               } else if err == io.EOF {
+                       break
+               } else {
+
+                       if start.IsZero() {
+                               start = ci.Timestamp
+                       }
+                       end = ci.Timestamp
+                       packets++
+                       size += len(data)
+
+                       if previousTs.IsZero() {
+                               previousTs = ci.Timestamp
+                       } else {
+                               deltaTotal += ci.Timestamp.Sub(previousTs)
+                               previousTs = ci.Timestamp
+                       }
+               }
+       }
+       sec := int(deltaTotal.Seconds())
+       if sec == 0 {
+               sec = 1
+       }
+       fmt.Printf("Avg packet rate %d/s\n", packets/sec)
+       return start, end, packets, size
+}
+
+func main() {
+       defer util.Run()()
+
+       // Sanity checks
+       if *fname == "" {
+               log.Fatal("Need a input file")
+       }
+
+       // Open PCAP file + handle potential BPF Filter
+       handleRead, err := pcap.OpenOffline(*fname)
+       if err != nil {
+               log.Fatal("PCAP OpenOffline error (handle to read packet):", err)
+       }
+       defer handleRead.Close()
+       if len(flag.Args()) > 0 {
+               bpffilter := strings.Join(flag.Args(), " ")
+               fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter)
+               if err = handleRead.SetBPFFilter(bpffilter); err != nil {
+                       log.Fatal("BPF filter error:", err)
+               }
+       }
+       // Open up a second pcap handle for packet writes.
+       handleWrite, err := pcap.OpenLive(*iface, 65536, true, pcap.BlockForever)
+       if err != nil {
+               log.Fatal("PCAP OpenLive error (handle to write packet):", err)
+       }
+       defer handleWrite.Close()
+
+       start = time.Now()
+       pkt := 0
+       tsStart, tsEnd, packets, size := pcapInfo(*fname)
+
+       // Loop over packets and write them
+       for {
+               data, ci, err := handleRead.ReadPacketData()
+               switch {
+               case err == io.EOF:
+                       fmt.Printf("\nFinished in %s", time.Since(start))
+                       return
+               case err != nil:
+                       log.Printf("Failed to read packet %d: %s\n", pkt, err)
+               default:
+                       if *fast {
+                               writePacket(handleWrite, data)
+                       } else {
+                               writePacketDelayed(handleWrite, data, ci)
+                       }
+
+                       bytesSent += len(data)
+                       duration := time.Since(start)
+                       pkt++
+
+                       if duration > time.Second {
+                               rate := bytesSent / int(duration.Seconds())
+                               remainingTime := tsEnd.Sub(tsStart) - duration
+                               fmt.Printf("\rrate %d kB/sec - sent %d/%d kB - %d/%d packets - remaining time %s",
+                                       rate/1000, bytesSent/1000, size/1000,
+                                       pkt, packets, remainingTime)
+                       }
+               }
+       }
+
+}
diff --git a/vendor/github.com/google/gopacket/examples/pfdump/main.go b/vendor/github.com/google/gopacket/examples/pfdump/main.go
new file mode 100644 (file)
index 0000000..4b3ace6
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// The pfdump binary implements a tcpdump-like command line tool with gopacket
+// using pfring as a backend data collection mechanism.
+package main
+
+import (
+       "flag"
+       "fmt"
+       "github.com/google/gopacket/dumpcommand"
+       "github.com/google/gopacket/examples/util"
+       "github.com/google/gopacket/pfring"
+       "log"
+       "os"
+       "strings"
+)
+
+var iface = flag.String("i", "eth0", "Interface to read packets from")
+var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet")
+var cluster = flag.Int("cluster", -1, "If >= 0, sets the pfring cluster to this value")
+var clustertype = flag.Int("clustertype", int(pfring.ClusterPerFlow), "Cluster type")
+
+func main() {
+       defer util.Run()()
+       var ring *pfring.Ring
+       var err error
+       if ring, err = pfring.NewRing(*iface, uint32(*snaplen), pfring.FlagPromisc); err != nil {
+               log.Fatalln("pfring ring creation error:", err)
+       }
+       if len(flag.Args()) > 0 {
+               bpffilter := strings.Join(flag.Args(), " ")
+               fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter)
+               if err = ring.SetBPFFilter(bpffilter); err != nil {
+                       log.Fatalln("BPF filter error:", err)
+               }
+       }
+       if *cluster >= 0 {
+               if err = ring.SetCluster(*cluster, pfring.ClusterType(*clustertype)); err != nil {
+                       log.Fatalln("pfring SetCluster error:", err)
+               }
+       }
+       if err = ring.SetSocketMode(pfring.ReadOnly); err != nil {
+               log.Fatalln("pfring SetSocketMode error:", err)
+       } else if err = ring.Enable(); err != nil {
+               log.Fatalln("pfring Enable error:", err)
+       }
+       dumpcommand.Run(ring)
+}
diff --git a/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh b/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh
new file mode 100755 (executable)
index 0000000..671d29f
--- /dev/null
@@ -0,0 +1,103 @@
+#!/bin/bash
+
+# Limitations: if the number extracted files in too big, finding identical
+#              files might fail due to '*' in cmdline
+#              This would require to split sha256sum symlinks in xx/yyyyy
+
+usage()
+{
+        echo "Usage: $0 <file.pcap> <output-dir>"
+        echo "Compares tcpreassembly against tcpflow"
+        echo ""
+        echo "$@"
+        exit 1
+}
+
+debug() {
+        return # comment me for debug
+        echo "$@"
+}
+
+die()
+{
+        (
+        echo "$@"
+        echo
+        ) >&2
+        exit 1
+}
+
+rename()
+{
+        local path="$1"
+        local filter="$2"
+        find "$path" -type f -name "$filter" -print0 |
+                while IFS= read -r -d $'\0' f; do
+                        local sha256="$(sha256sum "$f" | cut -d ' ' -f 1)"
+                        local target="$(dirname $f)/../sha256/$sha256"
+                        debug "$target → $f"
+                        mkdir -p "$(dirname "$target")" || return 1
+                        if [ ! -f "$target" ]; then
+                                ln -sr "$f" "$target" || return 1
+                        fi
+                done
+        return $?
+}
+
+main()
+{
+        local src="$1"
+        local out="$2"
+
+        # TODO: make options
+        local extra=""
+        extra="$extra -debug"
+        extra="$extra -cpuprofile "$out/gopacket/cpu.prof""
+        extra="$extra -memprofile "$out/gopacket/mem.prof""
+
+        [ ! -f "$src" ] && usage "Missing pcap"
+        [ ! -d "$out" ] && ( mkdir "$out" || die "Failed to create $out" )
+
+        mkdir -p "$out/gopacket/all" || die "Failed to create $out/gopacket/all"
+        mkdir -p "$out/tcpflow/all" || die "Faield to create $out/tcpflow/all"
+
+        echo " * Running go reassembly"
+        time ./reassemblydump -r "$src" $debug -output "$out/gopacket/all" $extra -writeincomplete -ignorefsmerr -nooptcheck -allowmissinginit port 80 &> "$out/gopacket.txt" || die "Failed to run reassmbly. Check $out/gopacket.txt"
+        echo " * Running tcpflow"
+        time tcpflow -e http -r "$src" -o "$out/tcpflow/all" port 80 &> "$out/tcpflow.txt" || die "Failed to run tcpflow. Check $out/tcpflow.txt"
+
+        echo " * Creating sha256sum symlinks for gopacket"
+        rename "$out/gopacket/all" '*' || die "Failed to rename in $out/gopacket"
+        echo " * Creating sha256sum symlinks for tcpflow"
+        rename "$out/tcpflow/all" '*HTTPBODY*' || die "Failed to rename in $out/tcpflow"
+
+        # Remove identical files
+        echo " * Finding identical files"
+        local nb=0
+        mkdir -p "$out/gopacket/sha256-equal"
+        mkdir -p "$out/tcpflow/sha256-equal"
+        for f in "$out/gopacket/sha256/"*; do
+                local f="$(basename "$f")"
+                [ -f "$out/tcpflow/sha256/$f" ] && {
+                        debug "    $f"
+                        mv "$out/gopacket/sha256/$f" "$out/gopacket/sha256-equal"
+                        mv "$out/tcpflow/sha256/$f"  "$out/tcpflow/sha256-equal"
+                        nb=$((nb+1))
+                }
+        done
+        echo "   →  found $nb files"
+
+        echo " * Diffing {gopacket,tcpflow}/sha256"
+        local rc=0
+        for p in "gopacket" "tcpflow"; do
+                local nb=$(ls -1 "$out/$p/sha256/" | wc -l)
+                if [ $nb -ne 0 ]; then
+                        rc=$((rc+1))
+                        echo "   → $nb files in $out/$p/sha256"
+                fi
+        done
+        return $rc
+}
+
+main "$@"
+exit $?
diff --git a/vendor/github.com/google/gopacket/examples/reassemblydump/main.go b/vendor/github.com/google/gopacket/examples/reassemblydump/main.go
new file mode 100644 (file)
index 0000000..9fc3791
--- /dev/null
@@ -0,0 +1,650 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// The pcapdump binary implements a tcpdump-like command line tool with gopacket
+// using pcap as a backend data collection mechanism.
+package main
+
+import (
+       "bufio"
+       "bytes"
+       "compress/gzip"
+       "encoding/binary"
+       "encoding/hex"
+       "flag"
+       "fmt"
+       "io"
+       "io/ioutil"
+       "log"
+       "net/http"
+       "net/url"
+       "os"
+       "os/signal"
+       "path"
+       "runtime/pprof"
+       "strings"
+       "sync"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/examples/util"
+       "github.com/google/gopacket/ip4defrag"
+       "github.com/google/gopacket/layers" // pulls in all layers decoders
+       "github.com/google/gopacket/pcap"
+       "github.com/google/gopacket/reassembly"
+)
+
+var maxcount = flag.Int("c", -1, "Only grab this many packets, then exit")
+var decoder = flag.String("decoder", "", "Name of the decoder to use (default: guess from capture)")
+var statsevery = flag.Int("stats", 1000, "Output statistics every N packets")
+var lazy = flag.Bool("lazy", false, "If true, do lazy decoding")
+var nodefrag = flag.Bool("nodefrag", false, "If true, do not do IPv4 defrag")
+var checksum = flag.Bool("checksum", false, "Check TCP checksum")
+var nooptcheck = flag.Bool("nooptcheck", false, "Do not check TCP options (useful to ignore MSS on captures with TSO)")
+var ignorefsmerr = flag.Bool("ignorefsmerr", false, "Ignore TCP FSM errors")
+var allowmissinginit = flag.Bool("allowmissinginit", false, "Support streams without SYN/SYN+ACK/ACK sequence")
+var verbose = flag.Bool("verbose", false, "Be verbose")
+var debug = flag.Bool("debug", false, "Display debug information")
+var quiet = flag.Bool("quiet", false, "Be quiet regarding errors")
+
+// http
+var nohttp = flag.Bool("nohttp", false, "Disable HTTP parsing")
+var output = flag.String("output", "", "Path to create file for HTTP 200 OK responses")
+var writeincomplete = flag.Bool("writeincomplete", false, "Write incomplete response")
+
+var hexdump = flag.Bool("dump", false, "Dump HTTP request/response as hex")
+var hexdumppkt = flag.Bool("dumppkt", false, "Dump packet as hex")
+
+// capture
+var iface = flag.String("i", "eth0", "Interface to read packets from")
+var fname = flag.String("r", "", "Filename to read from, overrides -i")
+var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet")
+var tstype = flag.String("timestamp_type", "", "Type of timestamps to use")
+var promisc = flag.Bool("promisc", true, "Set promiscuous mode")
+
+var memprofile = flag.String("memprofile", "", "Write memory profile")
+
+var stats struct {
+       ipdefrag            int
+       missedBytes         int
+       pkt                 int
+       sz                  int
+       totalsz             int
+       rejectFsm           int
+       rejectOpt           int
+       rejectConnFsm       int
+       reassembled         int
+       outOfOrderBytes     int
+       outOfOrderPackets   int
+       biggestChunkBytes   int
+       biggestChunkPackets int
+       overlapBytes        int
+       overlapPackets      int
+}
+
+const closeTimeout time.Duration = time.Hour * 24 // Closing inactive: TODO: from CLI
+const timeout time.Duration = time.Minute * 5     // Pending bytes: TODO: from CLI
+
+/*
+ * HTTP part
+ */
+
+type httpReader struct {
+       ident    string
+       isClient bool
+       bytes    chan []byte
+       data     []byte
+       hexdump  bool
+       parent   *tcpStream
+}
+
+func (h *httpReader) Read(p []byte) (int, error) {
+       ok := true
+       for ok && len(h.data) == 0 {
+               h.data, ok = <-h.bytes
+       }
+       if !ok || len(h.data) == 0 {
+               return 0, io.EOF
+       }
+
+       l := copy(p, h.data)
+       h.data = h.data[l:]
+       return l, nil
+}
+
+var outputLevel int
+var errorsMap map[string]uint
+var errors uint
+
+// Too bad for perf that a... is evaluated
+func Error(t string, s string, a ...interface{}) {
+       errors++
+       nb, _ := errorsMap[t]
+       errorsMap[t] = nb + 1
+       if outputLevel >= 0 {
+               fmt.Printf(s, a...)
+       }
+}
+func Info(s string, a ...interface{}) {
+       if outputLevel >= 1 {
+               fmt.Printf(s, a...)
+       }
+}
+func Debug(s string, a ...interface{}) {
+       if outputLevel >= 2 {
+               fmt.Printf(s, a...)
+       }
+}
+
+func (h *httpReader) run(wg *sync.WaitGroup) {
+       defer wg.Done()
+       b := bufio.NewReader(h)
+       for true {
+               if h.isClient {
+                       req, err := http.ReadRequest(b)
+                       if err == io.EOF || err == io.ErrUnexpectedEOF {
+                               break
+                       } else if err != nil {
+                               Error("HTTP-request", "HTTP/%s Request error: %s (%v,%+v)\n", h.ident, err, err, err)
+                               continue
+                       }
+                       body, err := ioutil.ReadAll(req.Body)
+                       s := len(body)
+                       if err != nil {
+                               Error("HTTP-request-body", "Got body err: %s\n", err)
+                       } else if h.hexdump {
+                               Info("Body(%d/0x%x)\n%s\n", len(body), len(body), hex.Dump(body))
+                       }
+                       req.Body.Close()
+                       Info("HTTP/%s Request: %s %s (body:%d)\n", h.ident, req.Method, req.URL, s)
+                       h.parent.urls = append(h.parent.urls, req.URL.String())
+               } else {
+                       res, err := http.ReadResponse(b, nil)
+                       var req string
+                       if len(h.parent.urls) == 0 {
+                               req = fmt.Sprintf("<no-request-seen>")
+                       } else {
+                               req, h.parent.urls = h.parent.urls[0], h.parent.urls[1:]
+                       }
+                       if err == io.EOF || err == io.ErrUnexpectedEOF {
+                               break
+                       } else if err != nil {
+                               Error("HTTP-response", "HTTP/%s Response error: %s (%v,%+v)\n", h.ident, err, err, err)
+                               continue
+                       }
+                       body, err := ioutil.ReadAll(res.Body)
+                       s := len(body)
+                       if err != nil {
+                               Error("HTTP-response-body", "HTTP/%s: failed to get body(parsed len:%d): %s\n", h.ident, s, err)
+                       }
+                       if h.hexdump {
+                               Info("Body(%d/0x%x)\n%s\n", len(body), len(body), hex.Dump(body))
+                       }
+                       res.Body.Close()
+                       sym := ","
+                       if res.ContentLength > 0 && res.ContentLength != int64(s) {
+                               sym = "!="
+                       }
+                       contentType, ok := res.Header["Content-Type"]
+                       if !ok {
+                               contentType = []string{http.DetectContentType(body)}
+                       }
+                       encoding := res.Header["Content-Encoding"]
+                       Info("HTTP/%s Response: %s URL:%s (%d%s%d%s) -> %s\n", h.ident, res.Status, req, res.ContentLength, sym, s, contentType, encoding)
+                       if (err == nil || *writeincomplete) && *output != "" {
+                               base := url.QueryEscape(path.Base(req))
+                               if err != nil {
+                                       base = "incomplete-" + base
+                               }
+                               base = path.Join(*output, base)
+                               if len(base) > 250 {
+                                       base = base[:250] + "..."
+                               }
+                               if base == *output {
+                                       base = path.Join(*output, "noname")
+                               }
+                               target := base
+                               n := 0
+                               for true {
+                                       _, err := os.Stat(target)
+                                       //if os.IsNotExist(err) != nil {
+                                       if err != nil {
+                                               break
+                                       }
+                                       target = fmt.Sprintf("%s-%d", base, n)
+                                       n++
+                               }
+                               f, err := os.Create(target)
+                               if err != nil {
+                                       Error("HTTP-create", "Cannot create %s: %s\n", target, err)
+                                       continue
+                               }
+                               var r io.Reader
+                               r = bytes.NewBuffer(body)
+                               if len(encoding) > 0 && (encoding[0] == "gzip" || encoding[0] == "deflate") {
+                                       r, err = gzip.NewReader(r)
+                                       if err != nil {
+                                               Error("HTTP-gunzip", "Failed to gzip decode: %s", err)
+                                       }
+                               }
+                               if err == nil {
+                                       w, err := io.Copy(f, r)
+                                       if _, ok := r.(*gzip.Reader); ok {
+                                               r.(*gzip.Reader).Close()
+                                       }
+                                       f.Close()
+                                       if err != nil {
+                                               Error("HTTP-save", "%s: failed to save %s (l:%d): %s\n", h.ident, target, w, err)
+                                       } else {
+                                               Info("%s: Saved %s (l:%d)\n", h.ident, target, w)
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+/*
+ * The TCP factory: returns a new Stream
+ */
+type tcpStreamFactory struct {
+       wg     sync.WaitGroup
+       doHTTP bool
+}
+
+func (factory *tcpStreamFactory) New(net, transport gopacket.Flow, tcp *layers.TCP, ac reassembly.AssemblerContext) reassembly.Stream {
+       Debug("* NEW: %s %s\n", net, transport)
+       fsmOptions := reassembly.TCPSimpleFSMOptions{
+               SupportMissingEstablishment: *allowmissinginit,
+       }
+       stream := &tcpStream{
+               net:        net,
+               transport:  transport,
+               isDNS:      tcp.SrcPort == 53 || tcp.DstPort == 53,
+               isHTTP:     (tcp.SrcPort == 80 || tcp.DstPort == 80) && factory.doHTTP,
+               reversed:   tcp.SrcPort == 80,
+               tcpstate:   reassembly.NewTCPSimpleFSM(fsmOptions),
+               ident:      fmt.Sprintf("%s:%s", net, transport),
+               optchecker: reassembly.NewTCPOptionCheck(),
+       }
+       if stream.isHTTP {
+               stream.client = httpReader{
+                       bytes:    make(chan []byte),
+                       ident:    fmt.Sprintf("%s %s", net, transport),
+                       hexdump:  *hexdump,
+                       parent:   stream,
+                       isClient: true,
+               }
+               stream.server = httpReader{
+                       bytes:   make(chan []byte),
+                       ident:   fmt.Sprintf("%s %s", net.Reverse(), transport.Reverse()),
+                       hexdump: *hexdump,
+                       parent:  stream,
+               }
+               factory.wg.Add(2)
+               go stream.client.run(&factory.wg)
+               go stream.server.run(&factory.wg)
+       }
+       return stream
+}
+
+func (factory *tcpStreamFactory) WaitGoRoutines() {
+       factory.wg.Wait()
+}
+
+/*
+ * The assembler context
+ */
+type Context struct {
+       CaptureInfo gopacket.CaptureInfo
+}
+
+func (c *Context) GetCaptureInfo() gopacket.CaptureInfo {
+       return c.CaptureInfo
+}
+
+/*
+ * TCP stream
+ */
+
+/* It's a connection (bidirectional) */
+type tcpStream struct {
+       tcpstate       *reassembly.TCPSimpleFSM
+       fsmerr         bool
+       optchecker     reassembly.TCPOptionCheck
+       net, transport gopacket.Flow
+       isDNS          bool
+       isHTTP         bool
+       reversed       bool
+       client         httpReader
+       server         httpReader
+       urls           []string
+       ident          string
+}
+
+func (t *tcpStream) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir reassembly.TCPFlowDirection, acked reassembly.Sequence, start *bool, ac reassembly.AssemblerContext) bool {
+       // FSM
+       if !t.tcpstate.CheckState(tcp, dir) {
+               Error("FSM", "%s: Packet rejected by FSM (state:%s)\n", t.ident, t.tcpstate.String())
+               stats.rejectFsm++
+               if !t.fsmerr {
+                       t.fsmerr = true
+                       stats.rejectConnFsm++
+               }
+               if !*ignorefsmerr {
+                       return false
+               }
+       }
+       // Options
+       err := t.optchecker.Accept(tcp, ci, dir, acked, start)
+       if err != nil {
+               Error("OptionChecker", "%s: Packet rejected by OptionChecker: %s\n", t.ident, err)
+               stats.rejectOpt++
+               if !*nooptcheck {
+                       return false
+               }
+       }
+       // Checksum
+       accept := true
+       if *checksum {
+               c, err := tcp.ComputeChecksum()
+               if err != nil {
+                       Error("ChecksumCompute", "%s: Got error computing checksum: %s\n", t.ident, err)
+                       accept = false
+               } else if c != 0x0 {
+                       Error("Checksum", "%s: Invalid checksum: 0x%x\n", t.ident, c)
+                       accept = false
+               }
+       }
+       if !accept {
+               stats.rejectOpt++
+       }
+       return accept
+}
+
+func (t *tcpStream) ReassembledSG(sg reassembly.ScatterGather, ac reassembly.AssemblerContext) {
+       dir, start, end, skip := sg.Info()
+       length, saved := sg.Lengths()
+       // update stats
+       sgStats := sg.Stats()
+       if skip > 0 {
+               stats.missedBytes += skip
+       }
+       stats.sz += length - saved
+       stats.pkt += sgStats.Packets
+       if sgStats.Chunks > 1 {
+               stats.reassembled++
+       }
+       stats.outOfOrderPackets += sgStats.QueuedPackets
+       stats.outOfOrderBytes += sgStats.QueuedBytes
+       if length > stats.biggestChunkBytes {
+               stats.biggestChunkBytes = length
+       }
+       if sgStats.Packets > stats.biggestChunkPackets {
+               stats.biggestChunkPackets = sgStats.Packets
+       }
+       if sgStats.OverlapBytes != 0 && sgStats.OverlapPackets == 0 {
+               fmt.Printf("bytes:%d, pkts:%d\n", sgStats.OverlapBytes, sgStats.OverlapPackets)
+               panic("Invalid overlap")
+       }
+       stats.overlapBytes += sgStats.OverlapBytes
+       stats.overlapPackets += sgStats.OverlapPackets
+
+       var ident string
+       if dir == reassembly.TCPDirClientToServer {
+               ident = fmt.Sprintf("%v %v(%s): ", t.net, t.transport, dir)
+       } else {
+               ident = fmt.Sprintf("%v %v(%s): ", t.net.Reverse(), t.transport.Reverse(), dir)
+       }
+       Debug("%s: SG reassembled packet with %d bytes (start:%v,end:%v,skip:%d,saved:%d,nb:%d,%d,overlap:%d,%d)\n", ident, length, start, end, skip, saved, sgStats.Packets, sgStats.Chunks, sgStats.OverlapBytes, sgStats.OverlapPackets)
+       if skip == -1 && *allowmissinginit {
+               // this is allowed
+       } else if skip != 0 {
+               // Missing bytes in stream: do not even try to parse it
+               return
+       }
+       data := sg.Fetch(length)
+       if t.isDNS {
+               dns := &layers.DNS{}
+               var decoded []gopacket.LayerType
+               if len(data) < 2 {
+                       if len(data) > 0 {
+                               sg.KeepFrom(0)
+                       }
+                       return
+               }
+               dnsSize := binary.BigEndian.Uint16(data[:2])
+               missing := int(dnsSize) - len(data[2:])
+               Debug("dnsSize: %d, missing: %d\n", dnsSize, missing)
+               if missing > 0 {
+                       Info("Missing some bytes: %d\n", missing)
+                       sg.KeepFrom(0)
+                       return
+               }
+               p := gopacket.NewDecodingLayerParser(layers.LayerTypeDNS, dns)
+               err := p.DecodeLayers(data[2:], &decoded)
+               if err != nil {
+                       Error("DNS-parser", "Failed to decode DNS: %v\n", err)
+               } else {
+                       Debug("DNS: %s\n", gopacket.LayerDump(dns))
+               }
+               if len(data) > 2+int(dnsSize) {
+                       sg.KeepFrom(2 + int(dnsSize))
+               }
+       } else if t.isHTTP {
+               if length > 0 {
+                       if *hexdump {
+                               Debug("Feeding http with:\n%s", hex.Dump(data))
+                       }
+                       if dir == reassembly.TCPDirClientToServer && !t.reversed {
+                               t.client.bytes <- data
+                       } else {
+                               t.server.bytes <- data
+                       }
+               }
+       }
+}
+
+func (t *tcpStream) ReassemblyComplete(ac reassembly.AssemblerContext) bool {
+       Debug("%s: Connection closed\n", t.ident)
+       if t.isHTTP {
+               close(t.client.bytes)
+               close(t.server.bytes)
+       }
+       // do not remove the connection to allow last ACK
+       return false
+}
+
+func main() {
+       defer util.Run()()
+       var handle *pcap.Handle
+       var err error
+       if *debug {
+               outputLevel = 2
+       } else if *verbose {
+               outputLevel = 1
+       } else if *quiet {
+               outputLevel = -1
+       }
+       errorsMap = make(map[string]uint)
+       if *fname != "" {
+               if handle, err = pcap.OpenOffline(*fname); err != nil {
+                       log.Fatal("PCAP OpenOffline error:", err)
+               }
+       } else {
+               // This is a little complicated because we want to allow all possible options
+               // for creating the packet capture handle... instead of all this you can
+               // just call pcap.OpenLive if you want a simple handle.
+               inactive, err := pcap.NewInactiveHandle(*iface)
+               if err != nil {
+                       log.Fatal("could not create: %v", err)
+               }
+               defer inactive.CleanUp()
+               if err = inactive.SetSnapLen(*snaplen); err != nil {
+                       log.Fatal("could not set snap length: %v", err)
+               } else if err = inactive.SetPromisc(*promisc); err != nil {
+                       log.Fatal("could not set promisc mode: %v", err)
+               } else if err = inactive.SetTimeout(time.Second); err != nil {
+                       log.Fatal("could not set timeout: %v", err)
+               }
+               if *tstype != "" {
+                       if t, err := pcap.TimestampSourceFromString(*tstype); err != nil {
+                               log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps())
+                       } else if err := inactive.SetTimestampSource(t); err != nil {
+                               log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps())
+                       }
+               }
+               if handle, err = inactive.Activate(); err != nil {
+                       log.Fatal("PCAP Activate error:", err)
+               }
+               defer handle.Close()
+       }
+       if len(flag.Args()) > 0 {
+               bpffilter := strings.Join(flag.Args(), " ")
+               Info("Using BPF filter %q\n", bpffilter)
+               if err = handle.SetBPFFilter(bpffilter); err != nil {
+                       log.Fatal("BPF filter error:", err)
+               }
+       }
+
+       var dec gopacket.Decoder
+       var ok bool
+       decoder_name := *decoder
+       if decoder_name == "" {
+               decoder_name = fmt.Sprintf("%s", handle.LinkType())
+       }
+       if dec, ok = gopacket.DecodersByLayerName[decoder_name]; !ok {
+               log.Fatalln("No decoder named", decoder_name)
+       }
+       source := gopacket.NewPacketSource(handle, dec)
+       source.Lazy = *lazy
+       source.NoCopy = true
+       Info("Starting to read packets\n")
+       count := 0
+       bytes := int64(0)
+       start := time.Now()
+       defragger := ip4defrag.NewIPv4Defragmenter()
+
+       streamFactory := &tcpStreamFactory{doHTTP: !*nohttp}
+       streamPool := reassembly.NewStreamPool(streamFactory)
+       assembler := reassembly.NewAssembler(streamPool)
+
+       signalChan := make(chan os.Signal, 1)
+       signal.Notify(signalChan, os.Interrupt)
+
+       for packet := range source.Packets() {
+               count++
+               Debug("PACKET #%d\n", count)
+               data := packet.Data()
+               bytes += int64(len(data))
+               if *hexdumppkt {
+                       Debug("Packet content (%d/0x%x)\n%s\n", len(data), len(data), hex.Dump(data))
+               }
+
+               // defrag the IPv4 packet if required
+               if !*nodefrag {
+                       ip4Layer := packet.Layer(layers.LayerTypeIPv4)
+                       if ip4Layer == nil {
+                               continue
+                       }
+                       ip4 := ip4Layer.(*layers.IPv4)
+                       l := ip4.Length
+                       newip4, err := defragger.DefragIPv4(ip4)
+                       if err != nil {
+                               log.Fatalln("Error while de-fragmenting", err)
+                       } else if newip4 == nil {
+                               Debug("Fragment...\n")
+                               continue // packet fragment, we don't have whole packet yet.
+                       }
+                       if newip4.Length != l {
+                               stats.ipdefrag++
+                               Debug("Decoding re-assembled packet: %s\n", newip4.NextLayerType())
+                               pb, ok := packet.(gopacket.PacketBuilder)
+                               if !ok {
+                                       panic("Not a PacketBuilder")
+                               }
+                               nextDecoder := newip4.NextLayerType()
+                               nextDecoder.Decode(newip4.Payload, pb)
+                       }
+               }
+
+               tcp := packet.Layer(layers.LayerTypeTCP)
+               if tcp != nil {
+                       tcp := tcp.(*layers.TCP)
+                       if *checksum {
+                               err := tcp.SetNetworkLayerForChecksum(packet.NetworkLayer())
+                               if err != nil {
+                                       log.Fatalf("Failed to set network layer for checksum: %s\n", err)
+                               }
+                       }
+                       c := Context{
+                               CaptureInfo: packet.Metadata().CaptureInfo,
+                       }
+                       stats.totalsz += len(tcp.Payload)
+                       assembler.AssembleWithContext(packet.NetworkLayer().NetworkFlow(), tcp, &c)
+               }
+               if count%*statsevery == 0 {
+                       ref := packet.Metadata().CaptureInfo.Timestamp
+                       flushed, closed := assembler.FlushWithOptions(reassembly.FlushOptions{T: ref.Add(-timeout), TC: ref.Add(-closeTimeout)})
+                       Debug("Forced flush: %d flushed, %d closed (%s)", flushed, closed, ref)
+               }
+
+               done := *maxcount > 0 && count >= *maxcount
+               if count%*statsevery == 0 || done {
+                       fmt.Fprintf(os.Stderr, "Processed %v packets (%v bytes) in %v (errors: %v, type:%v)\n", count, bytes, time.Since(start), errors, len(errorsMap))
+               }
+               select {
+               case <-signalChan:
+                       fmt.Fprintf(os.Stderr, "\nCaught SIGINT: aborting\n")
+                       done = true
+               default:
+                       // NOP: continue
+               }
+               if done {
+                       break
+               }
+       }
+
+       closed := assembler.FlushAll()
+       Debug("Final flush: %d closed", closed)
+       if outputLevel >= 2 {
+               streamPool.Dump()
+       }
+
+       if *memprofile != "" {
+               f, err := os.Create(*memprofile)
+               if err != nil {
+                       log.Fatal(err)
+               }
+               pprof.WriteHeapProfile(f)
+               f.Close()
+       }
+
+       streamFactory.WaitGoRoutines()
+       Debug("%s\n", assembler.Dump())
+       if !*nodefrag {
+               fmt.Printf("IPdefrag:\t\t%d\n", stats.ipdefrag)
+       }
+       fmt.Printf("TCP stats:\n")
+       fmt.Printf(" missed bytes:\t\t%d\n", stats.missedBytes)
+       fmt.Printf(" total packets:\t\t%d\n", stats.pkt)
+       fmt.Printf(" rejected FSM:\t\t%d\n", stats.rejectFsm)
+       fmt.Printf(" rejected Options:\t%d\n", stats.rejectOpt)
+       fmt.Printf(" reassembled bytes:\t%d\n", stats.sz)
+       fmt.Printf(" total TCP bytes:\t%d\n", stats.totalsz)
+       fmt.Printf(" conn rejected FSM:\t%d\n", stats.rejectConnFsm)
+       fmt.Printf(" reassembled chunks:\t%d\n", stats.reassembled)
+       fmt.Printf(" out-of-order packets:\t%d\n", stats.outOfOrderPackets)
+       fmt.Printf(" out-of-order bytes:\t%d\n", stats.outOfOrderBytes)
+       fmt.Printf(" biggest-chunk packets:\t%d\n", stats.biggestChunkPackets)
+       fmt.Printf(" biggest-chunk bytes:\t%d\n", stats.biggestChunkBytes)
+       fmt.Printf(" overlap packets:\t%d\n", stats.overlapPackets)
+       fmt.Printf(" overlap bytes:\t\t%d\n", stats.overlapBytes)
+       fmt.Printf("Errors: %d\n", errors)
+       for e, _ := range errorsMap {
+               fmt.Printf(" %s:\t\t%d\n", e, errorsMap[e])
+       }
+}
diff --git a/vendor/github.com/google/gopacket/examples/statsassembly/main.go b/vendor/github.com/google/gopacket/examples/statsassembly/main.go
new file mode 100644 (file)
index 0000000..36da011
--- /dev/null
@@ -0,0 +1,211 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This binary provides sample code for using the gopacket TCP assembler raw,
+// without the help of the tcpreader library.  It watches TCP streams and
+// reports statistics on completed streams.
+//
+// It also uses gopacket.DecodingLayerParser instead of the normal
+// gopacket.PacketSource, to highlight the methods, pros, and cons of this
+// approach.
+package main
+
+import (
+       "flag"
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/examples/util"
+       "github.com/google/gopacket/layers"
+       "github.com/google/gopacket/pcap"
+       "github.com/google/gopacket/tcpassembly"
+       "log"
+       "time"
+)
+
+var iface = flag.String("i", "eth0", "Interface to get packets from")
+var snaplen = flag.Int("s", 65536, "SnapLen for pcap packet capture")
+var filter = flag.String("f", "tcp", "BPF filter for pcap")
+var logAllPackets = flag.Bool("v", false, "Log whenever we see a packet")
+var bufferedPerConnection = flag.Int("connection_max_buffer", 0, `
+Max packets to buffer for a single connection before skipping over a gap in data
+and continuing to stream the connection after the buffer.  If zero or less, this
+is infinite.`)
+var bufferedTotal = flag.Int("total_max_buffer", 0, `
+Max packets to buffer total before skipping over gaps in connections and
+continuing to stream connection data.  If zero or less, this is infinite`)
+var flushAfter = flag.String("flush_after", "2m", `
+Connections which have buffered packets (they've gotten packets out of order and
+are waiting for old packets to fill the gaps) are flushed after they're this old
+(their oldest gap is skipped).  Any string parsed by time.ParseDuration is
+acceptable here`)
+var packetCount = flag.Int("c", -1, `
+Quit after processing this many packets, flushing all currently buffered
+connections.  If negative, this is infinite`)
+
+// simpleStreamFactory implements tcpassembly.StreamFactory
+type statsStreamFactory struct{}
+
+// statsStream will handle the actual decoding of stats requests.
+type statsStream struct {
+       net, transport                      gopacket.Flow
+       bytes, packets, outOfOrder, skipped int64
+       start, end                          time.Time
+       sawStart, sawEnd                    bool
+}
+
+// New creates a new stream.  It's called whenever the assembler sees a stream
+// it isn't currently following.
+func (factory *statsStreamFactory) New(net, transport gopacket.Flow) tcpassembly.Stream {
+       log.Printf("new stream %v:%v started", net, transport)
+       s := &statsStream{
+               net:       net,
+               transport: transport,
+               start:     time.Now(),
+       }
+       s.end = s.start
+       // ReaderStream implements tcpassembly.Stream, so we can return a pointer to it.
+       return s
+}
+
+// Reassembled is called whenever new packet data is available for reading.
+// Reassembly objects contain stream data IN ORDER.
+func (s *statsStream) Reassembled(reassemblies []tcpassembly.Reassembly) {
+       for _, reassembly := range reassemblies {
+               if reassembly.Seen.Before(s.end) {
+                       s.outOfOrder++
+               } else {
+                       s.end = reassembly.Seen
+               }
+               s.bytes += int64(len(reassembly.Bytes))
+               s.packets += 1
+               if reassembly.Skip > 0 {
+                       s.skipped += int64(reassembly.Skip)
+               }
+               s.sawStart = s.sawStart || reassembly.Start
+               s.sawEnd = s.sawEnd || reassembly.End
+       }
+}
+
+// ReassemblyComplete is called when the TCP assembler believes a stream has
+// finished.
+func (s *statsStream) ReassemblyComplete() {
+       diffSecs := float64(s.end.Sub(s.start)) / float64(time.Second)
+       log.Printf("Reassembly of stream %v:%v complete - start:%v end:%v bytes:%v packets:%v ooo:%v bps:%v pps:%v skipped:%v",
+               s.net, s.transport, s.start, s.end, s.bytes, s.packets, s.outOfOrder,
+               float64(s.bytes)/diffSecs, float64(s.packets)/diffSecs, s.skipped)
+}
+
+func main() {
+       defer util.Run()()
+
+       flushDuration, err := time.ParseDuration(*flushAfter)
+       if err != nil {
+               log.Fatal("invalid flush duration: ", *flushAfter)
+       }
+
+       log.Printf("starting capture on interface %q", *iface)
+       // Set up pcap packet capture
+       handle, err := pcap.OpenLive(*iface, int32(*snaplen), true, flushDuration/2)
+       if err != nil {
+               log.Fatal("error opening pcap handle: ", err)
+       }
+       if err := handle.SetBPFFilter(*filter); err != nil {
+               log.Fatal("error setting BPF filter: ", err)
+       }
+
+       // Set up assembly
+       streamFactory := &statsStreamFactory{}
+       streamPool := tcpassembly.NewStreamPool(streamFactory)
+       assembler := tcpassembly.NewAssembler(streamPool)
+       assembler.MaxBufferedPagesPerConnection = *bufferedPerConnection
+       assembler.MaxBufferedPagesTotal = *bufferedTotal
+
+       log.Println("reading in packets")
+
+       // We use a DecodingLayerParser here instead of a simpler PacketSource.
+       // This approach should be measurably faster, but is also more rigid.
+       // PacketSource will handle any known type of packet safely and easily,
+       // but DecodingLayerParser will only handle those packet types we
+       // specifically pass in.  This trade-off can be quite useful, though, in
+       // high-throughput situations.
+       var eth layers.Ethernet
+       var dot1q layers.Dot1Q
+       var ip4 layers.IPv4
+       var ip6 layers.IPv6
+       var ip6extensions layers.IPv6ExtensionSkipper
+       var tcp layers.TCP
+       var payload gopacket.Payload
+       parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet,
+               &eth, &dot1q, &ip4, &ip6, &ip6extensions, &tcp, &payload)
+       decoded := make([]gopacket.LayerType, 0, 4)
+
+       nextFlush := time.Now().Add(flushDuration / 2)
+
+       var byteCount int64
+       start := time.Now()
+
+loop:
+       for ; *packetCount != 0; *packetCount-- {
+               // Check to see if we should flush the streams we have
+               // that haven't seen any new data in a while.  Note we set a
+               // timeout on our PCAP handle, so this should happen even if we
+               // never see packet data.
+               if time.Now().After(nextFlush) {
+                       stats, _ := handle.Stats()
+                       log.Printf("flushing all streams that haven't seen packets in the last 2 minutes, pcap stats: %+v", stats)
+                       assembler.FlushOlderThan(time.Now().Add(flushDuration))
+                       nextFlush = time.Now().Add(flushDuration / 2)
+               }
+
+               // To speed things up, we're also using the ZeroCopy method for
+               // reading packet data.  This method is faster than the normal
+               // ReadPacketData, but the returned bytes in 'data' are
+               // invalidated by any subsequent ZeroCopyReadPacketData call.
+               // Note that tcpassembly is entirely compatible with this packet
+               // reading method.  This is another trade-off which might be
+               // appropriate for high-throughput sniffing:  it avoids a packet
+               // copy, but its cost is much more careful handling of the
+               // resulting byte slice.
+               data, ci, err := handle.ZeroCopyReadPacketData()
+
+               if err != nil {
+                       log.Printf("error getting packet: %v", err)
+                       continue
+               }
+               err = parser.DecodeLayers(data, &decoded)
+               if err != nil {
+                       log.Printf("error decoding packet: %v", err)
+                       continue
+               }
+               if *logAllPackets {
+                       log.Printf("decoded the following layers: %v", decoded)
+               }
+               byteCount += int64(len(data))
+               // Find either the IPv4 or IPv6 address to use as our network
+               // layer.
+               foundNetLayer := false
+               var netFlow gopacket.Flow
+               for _, typ := range decoded {
+                       switch typ {
+                       case layers.LayerTypeIPv4:
+                               netFlow = ip4.NetworkFlow()
+                               foundNetLayer = true
+                       case layers.LayerTypeIPv6:
+                               netFlow = ip6.NetworkFlow()
+                               foundNetLayer = true
+                       case layers.LayerTypeTCP:
+                               if foundNetLayer {
+                                       assembler.AssembleWithTimestamp(netFlow, &tcp, ci.Timestamp)
+                               } else {
+                                       log.Println("could not find IPv4 or IPv6 layer, inoring")
+                               }
+                               continue loop
+                       }
+               }
+               log.Println("could not find TCP layer")
+       }
+       assembler.FlushAll()
+       log.Printf("processed %d bytes in %v", byteCount, time.Since(start))
+}
diff --git a/vendor/github.com/google/gopacket/examples/synscan/main.go b/vendor/github.com/google/gopacket/examples/synscan/main.go
new file mode 100644 (file)
index 0000000..7a2345f
--- /dev/null
@@ -0,0 +1,259 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// synscan implements a TCP syn scanner on top of pcap.
+// It's more complicated than arpscan, since it has to handle sending packets
+// outside the local network, requiring some routing and ARP work.
+//
+// Since this is just an example program, it aims for simplicity over
+// performance.  It doesn't handle sending packets very quickly, it scans IPs
+// serially instead of in parallel, and uses gopacket.Packet instead of
+// gopacket.DecodingLayerParser for packet processing.  We also make use of very
+// simple timeout logic with time.Since.
+//
+// Making it blazingly fast is left as an exercise to the reader.
+package main
+
+import (
+       "errors"
+       "flag"
+       "log"
+       "net"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/examples/util"
+       "github.com/google/gopacket/layers"
+       "github.com/google/gopacket/pcap"
+       "github.com/google/gopacket/routing"
+)
+
+// scanner handles scanning a single IP address.
+type scanner struct {
+       // iface is the interface to send packets on.
+       iface *net.Interface
+       // destination, gateway (if applicable), and source IP addresses to use.
+       dst, gw, src net.IP
+
+       handle *pcap.Handle
+
+       // opts and buf allow us to easily serialize packets in the send()
+       // method.
+       opts gopacket.SerializeOptions
+       buf  gopacket.SerializeBuffer
+}
+
+// newScanner creates a new scanner for a given destination IP address, using
+// router to determine how to route packets to that IP.
+func newScanner(ip net.IP, router routing.Router) (*scanner, error) {
+       s := &scanner{
+               dst: ip,
+               opts: gopacket.SerializeOptions{
+                       FixLengths:       true,
+                       ComputeChecksums: true,
+               },
+               buf: gopacket.NewSerializeBuffer(),
+       }
+       // Figure out the route to the IP.
+       iface, gw, src, err := router.Route(ip)
+       if err != nil {
+               return nil, err
+       }
+       log.Printf("scanning ip %v with interface %v, gateway %v, src %v", ip, iface.Name, gw, src)
+       s.gw, s.src, s.iface = gw, src, iface
+
+       // Open the handle for reading/writing.
+       // Note we could very easily add some BPF filtering here to greatly
+       // decrease the number of packets we have to look at when getting back
+       // scan results.
+       handle, err := pcap.OpenLive(iface.Name, 65536, true, pcap.BlockForever)
+       if err != nil {
+               return nil, err
+       }
+       s.handle = handle
+       return s, nil
+}
+
+// close cleans up the handle.
+func (s *scanner) close() {
+       s.handle.Close()
+}
+
+// getHwAddr is a hacky but effective way to get the destination hardware
+// address for our packets.  It does an ARP request for our gateway (if there is
+// one) or destination IP (if no gateway is necessary), then waits for an ARP
+// reply.  This is pretty slow right now, since it blocks on the ARP
+// request/reply.
+func (s *scanner) getHwAddr() (net.HardwareAddr, error) {
+       start := time.Now()
+       arpDst := s.dst
+       if s.gw != nil {
+               arpDst = s.gw
+       }
+       // Prepare the layers to send for an ARP request.
+       eth := layers.Ethernet{
+               SrcMAC:       s.iface.HardwareAddr,
+               DstMAC:       net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+               EthernetType: layers.EthernetTypeARP,
+       }
+       arp := layers.ARP{
+               AddrType:          layers.LinkTypeEthernet,
+               Protocol:          layers.EthernetTypeIPv4,
+               HwAddressSize:     6,
+               ProtAddressSize:   4,
+               Operation:         layers.ARPRequest,
+               SourceHwAddress:   []byte(s.iface.HardwareAddr),
+               SourceProtAddress: []byte(s.src),
+               DstHwAddress:      []byte{0, 0, 0, 0, 0, 0},
+               DstProtAddress:    []byte(arpDst),
+       }
+       // Send a single ARP request packet (we never retry a send, since this
+       // is just an example ;)
+       if err := s.send(&eth, &arp); err != nil {
+               return nil, err
+       }
+       // Wait 3 seconds for an ARP reply.
+       for {
+               if time.Since(start) > time.Second*3 {
+                       return nil, errors.New("timeout getting ARP reply")
+               }
+               data, _, err := s.handle.ReadPacketData()
+               if err == pcap.NextErrorTimeoutExpired {
+                       continue
+               } else if err != nil {
+                       return nil, err
+               }
+               packet := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)
+               if arpLayer := packet.Layer(layers.LayerTypeARP); arpLayer != nil {
+                       arp := arpLayer.(*layers.ARP)
+                       if net.IP(arp.SourceProtAddress).Equal(net.IP(arpDst)) {
+                               return net.HardwareAddr(arp.SourceHwAddress), nil
+                       }
+               }
+       }
+}
+
+// scan scans the dst IP address of this scanner.
+func (s *scanner) scan() error {
+       // First off, get the MAC address we should be sending packets to.
+       hwaddr, err := s.getHwAddr()
+       if err != nil {
+               return err
+       }
+       // Construct all the network layers we need.
+       eth := layers.Ethernet{
+               SrcMAC:       s.iface.HardwareAddr,
+               DstMAC:       hwaddr,
+               EthernetType: layers.EthernetTypeIPv4,
+       }
+       ip4 := layers.IPv4{
+               SrcIP:    s.src,
+               DstIP:    s.dst,
+               Version:  4,
+               TTL:      64,
+               Protocol: layers.IPProtocolTCP,
+       }
+       tcp := layers.TCP{
+               SrcPort: 54321,
+               DstPort: 0, // will be incremented during the scan
+               SYN:     true,
+       }
+       tcp.SetNetworkLayerForChecksum(&ip4)
+
+       // Create the flow we expect returning packets to have, so we can check
+       // against it and discard useless packets.
+       ipFlow := gopacket.NewFlow(layers.EndpointIPv4, s.dst, s.src)
+       start := time.Now()
+       for {
+               // Send one packet per loop iteration until we've sent packets
+               // to all of ports [1, 65535].
+               if tcp.DstPort < 65535 {
+                       start = time.Now()
+                       tcp.DstPort++
+                       if err := s.send(&eth, &ip4, &tcp); err != nil {
+                               log.Printf("error sending to port %v: %v", tcp.DstPort, err)
+                       }
+               }
+               // Time out 5 seconds after the last packet we sent.
+               if time.Since(start) > time.Second*5 {
+                       log.Printf("timed out for %v, assuming we've seen all we can", s.dst)
+                       return nil
+               }
+
+               // Read in the next packet.
+               data, _, err := s.handle.ReadPacketData()
+               if err == pcap.NextErrorTimeoutExpired {
+                       continue
+               } else if err != nil {
+                       log.Printf("error reading packet: %v", err)
+                       continue
+               }
+
+               // Parse the packet.  We'd use DecodingLayerParser here if we
+               // wanted to be really fast.
+               packet := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)
+
+               // Find the packets we care about, and print out logging
+               // information about them.  All others are ignored.
+               if net := packet.NetworkLayer(); net == nil {
+                       // log.Printf("packet has no network layer")
+               } else if net.NetworkFlow() != ipFlow {
+                       // log.Printf("packet does not match our ip src/dst")
+               } else if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer == nil {
+                       // log.Printf("packet has not tcp layer")
+               } else if tcp, ok := tcpLayer.(*layers.TCP); !ok {
+                       // We panic here because this is guaranteed to never
+                       // happen.
+                       panic("tcp layer is not tcp layer :-/")
+               } else if tcp.DstPort != 54321 {
+                       // log.Printf("dst port %v does not match", tcp.DstPort)
+               } else if tcp.RST {
+                       log.Printf("  port %v closed", tcp.SrcPort)
+               } else if tcp.SYN && tcp.ACK {
+                       log.Printf("  port %v open", tcp.SrcPort)
+               } else {
+                       // log.Printf("ignoring useless packet")
+               }
+       }
+}
+
+// send sends the given layers as a single packet on the network.
+func (s *scanner) send(l ...gopacket.SerializableLayer) error {
+       if err := gopacket.SerializeLayers(s.buf, s.opts, l...); err != nil {
+               return err
+       }
+       return s.handle.WritePacketData(s.buf.Bytes())
+}
+
+func main() {
+       defer util.Run()()
+       router, err := routing.New()
+       if err != nil {
+               log.Fatal("routing error:", err)
+       }
+       for _, arg := range flag.Args() {
+               var ip net.IP
+               if ip = net.ParseIP(arg); ip == nil {
+                       log.Printf("non-ip target: %q", arg)
+                       continue
+               } else if ip = ip.To4(); ip == nil {
+                       log.Printf("non-ipv4 target: %q", arg)
+                       continue
+               }
+               // Note:  newScanner creates and closes a pcap Handle once for
+               // every scan target.  We could do much better, were this not an
+               // example ;)
+               s, err := newScanner(ip, router)
+               if err != nil {
+                       log.Printf("unable to create scanner for %v: %v", ip, err)
+                       continue
+               }
+               if err := s.scan(); err != nil {
+                       log.Printf("unable to scan %v: %v", ip, err)
+               }
+               s.close()
+       }
+}
diff --git a/vendor/github.com/google/gopacket/examples/util/util.go b/vendor/github.com/google/gopacket/examples/util/util.go
new file mode 100644 (file)
index 0000000..0f698fb
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package util provides shared utilities for all gopacket examples.
+package util
+
+import (
+       "flag"
+       "log"
+       "os"
+       "runtime/pprof"
+)
+
+var cpuprofile = flag.String("cpuprofile", "", "Where to write CPU profile")
+
+// Run starts up stuff at the beginning of a main function, and returns a
+// function to defer until the function completes.  It should be used like this:
+//
+//   func main() {
+//     defer util.Run()()
+//     ... stuff ...
+//   }
+func Run() func() {
+       flag.Parse()
+       if *cpuprofile != "" {
+               f, err := os.Create(*cpuprofile)
+               if err != nil {
+                       log.Fatalf("could not open cpu profile file %q", *cpuprofile)
+               }
+               pprof.StartCPUProfile(f)
+               return func() {
+                       pprof.StopCPUProfile()
+                       f.Close()
+               }
+       }
+       return func() {}
+}
diff --git a/vendor/github.com/google/gopacket/flows.go b/vendor/github.com/google/gopacket/flows.go
new file mode 100644 (file)
index 0000000..7203ead
--- /dev/null
@@ -0,0 +1,236 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "bytes"
+       "fmt"
+       "strconv"
+)
+
+// MaxEndpointSize determines the maximum size in bytes of an endpoint address.
+//
+// Endpoints/Flows have a problem:  They need to be hashable.  Therefore, they
+// can't use a byte slice.  The two obvious choices are to use a string or a
+// byte array.  Strings work great, but string creation requires memory
+// allocation, which can be slow.  Arrays work great, but have a fixed size.  We
+// originally used the former, now we've switched to the latter.  Use of a fixed
+// byte-array doubles the speed of constructing a flow (due to not needing to
+// allocate).  This is a huge increase... too much for us to pass up.
+//
+// The end result of this, though, is that an endpoint/flow can't be created
+// using more than MaxEndpointSize bytes per address.
+const MaxEndpointSize = 16
+
+// Endpoint is the set of bytes used to address packets at various layers.
+// See LinkLayer, NetworkLayer, and TransportLayer specifications.
+// Endpoints are usable as map keys.
+type Endpoint struct {
+       typ EndpointType
+       len int
+       raw [MaxEndpointSize]byte
+}
+
+// EndpointType returns the endpoint type associated with this endpoint.
+func (a Endpoint) EndpointType() EndpointType { return a.typ }
+
+// Raw returns the raw bytes of this endpoint.  These aren't human-readable
+// most of the time, but they are faster than calling String.
+func (a Endpoint) Raw() []byte { return a.raw[:a.len] }
+
+// LessThan provides a stable ordering for all endpoints.  It sorts first based
+// on the EndpointType of an endpoint, then based on the raw bytes of that
+// endpoint.
+//
+// For some endpoints, the actual comparison may not make sense, however this
+// ordering does provide useful information for most Endpoint types.
+// Ordering is based first on endpoint type, then on raw endpoint bytes.
+// Endpoint bytes are sorted lexigraphically.
+func (a Endpoint) LessThan(b Endpoint) bool {
+       return a.typ < b.typ || (a.typ == b.typ && bytes.Compare(a.raw[:a.len], b.raw[:b.len]) < 0)
+}
+
+// fnvHash is used by our FastHash functions, and implements the FNV hash
+// created by Glenn Fowler, Landon Curt Noll, and Phong Vo.
+// See http://isthe.com/chongo/tech/comp/fnv/.
+func fnvHash(s []byte) (h uint64) {
+       h = fnvBasis
+       for i := 0; i < len(s); i++ {
+               h ^= uint64(s[i])
+               h *= fnvPrime
+       }
+       return
+}
+
+const fnvBasis = 14695981039346656037
+const fnvPrime = 1099511628211
+
+// FastHash provides a quick hashing function for an endpoint, useful if you'd
+// like to split up endpoints by modulos or other load-balancing techniques.
+// It uses a variant of Fowler-Noll-Vo hashing.
+//
+// The output of FastHash is not guaranteed to remain the same through future
+// code revisions, so should not be used to key values in persistent storage.
+func (a Endpoint) FastHash() (h uint64) {
+       h = fnvHash(a.raw[:a.len])
+       h ^= uint64(a.typ)
+       h *= fnvPrime
+       return
+}
+
+// NewEndpoint creates a new Endpoint object.
+//
+// The size of raw must be less than MaxEndpointSize, otherwise this function
+// will panic.
+func NewEndpoint(typ EndpointType, raw []byte) (e Endpoint) {
+       e.len = len(raw)
+       if e.len > MaxEndpointSize {
+               panic("raw byte length greater than MaxEndpointSize")
+       }
+       e.typ = typ
+       copy(e.raw[:], raw)
+       return
+}
+
+// EndpointTypeMetadata is used to register a new endpoint type.
+type EndpointTypeMetadata struct {
+       // Name is the string returned by an EndpointType's String function.
+       Name string
+       // Formatter is called from an Endpoint's String function to format the raw
+       // bytes in an Endpoint into a human-readable string.
+       Formatter func([]byte) string
+}
+
+// EndpointType is the type of a gopacket Endpoint.  This type determines how
+// the bytes stored in the endpoint should be interpreted.
+type EndpointType int64
+
+var endpointTypes = map[EndpointType]EndpointTypeMetadata{}
+
+// RegisterEndpointType creates a new EndpointType and registers it globally.
+// It MUST be passed a unique number, or it will panic.  Numbers 0-999 are
+// reserved for gopacket's use.
+func RegisterEndpointType(num int, meta EndpointTypeMetadata) EndpointType {
+       t := EndpointType(num)
+       if _, ok := endpointTypes[t]; ok {
+               panic("Endpoint type number already in use")
+       }
+       endpointTypes[t] = meta
+       return t
+}
+
+func (e EndpointType) String() string {
+       if t, ok := endpointTypes[e]; ok {
+               return t.Name
+       }
+       return strconv.Itoa(int(e))
+}
+
+func (a Endpoint) String() string {
+       if t, ok := endpointTypes[a.typ]; ok && t.Formatter != nil {
+               return t.Formatter(a.raw[:a.len])
+       }
+       return fmt.Sprintf("%v:%v", a.typ, a.raw)
+}
+
+// Flow represents the direction of traffic for a packet layer, as a source and destination Endpoint.
+// Flows are usable as map keys.
+type Flow struct {
+       typ        EndpointType
+       slen, dlen int
+       src, dst   [MaxEndpointSize]byte
+}
+
+// FlowFromEndpoints creates a new flow by pasting together two endpoints.
+// The endpoints must have the same EndpointType, or this function will return
+// an error.
+func FlowFromEndpoints(src, dst Endpoint) (_ Flow, err error) {
+       if src.typ != dst.typ {
+               err = fmt.Errorf("Mismatched endpoint types: %v->%v", src.typ, dst.typ)
+               return
+       }
+       return Flow{src.typ, src.len, dst.len, src.raw, dst.raw}, nil
+}
+
+// FastHash provides a quick hashing function for a flow, useful if you'd
+// like to split up flows by modulos or other load-balancing techniques.
+// It uses a variant of Fowler-Noll-Vo hashing, and is guaranteed to collide
+// with its reverse flow.  IE: the flow A->B will have the same hash as the flow
+// B->A.
+//
+// The output of FastHash is not guaranteed to remain the same through future
+// code revisions, so should not be used to key values in persistent storage.
+func (f Flow) FastHash() (h uint64) {
+       // This combination must be commutative.  We don't use ^, since that would
+       // give the same hash for all A->A flows.
+       h = fnvHash(f.src[:f.slen]) + fnvHash(f.dst[:f.dlen])
+       h ^= uint64(f.typ)
+       h *= fnvPrime
+       return
+}
+
+// String returns a human-readable representation of this flow, in the form
+// "Src->Dst"
+func (f Flow) String() string {
+       s, d := f.Endpoints()
+       return fmt.Sprintf("%v->%v", s, d)
+}
+
+// EndpointType returns the EndpointType for this Flow.
+func (f Flow) EndpointType() EndpointType {
+       return f.typ
+}
+
+// Endpoints returns the two Endpoints for this flow.
+func (f Flow) Endpoints() (src, dst Endpoint) {
+       return Endpoint{f.typ, f.slen, f.src}, Endpoint{f.typ, f.dlen, f.dst}
+}
+
+// Src returns the source Endpoint for this flow.
+func (f Flow) Src() (src Endpoint) {
+       src, _ = f.Endpoints()
+       return
+}
+
+// Dst returns the destination Endpoint for this flow.
+func (f Flow) Dst() (dst Endpoint) {
+       _, dst = f.Endpoints()
+       return
+}
+
+// Reverse returns a new flow with endpoints reversed.
+func (f Flow) Reverse() Flow {
+       return Flow{f.typ, f.dlen, f.slen, f.dst, f.src}
+}
+
+// NewFlow creates a new flow.
+//
+// src and dst must have length <= MaxEndpointSize, otherwise NewFlow will
+// panic.
+func NewFlow(t EndpointType, src, dst []byte) (f Flow) {
+       f.slen = len(src)
+       f.dlen = len(dst)
+       if f.slen > MaxEndpointSize || f.dlen > MaxEndpointSize {
+               panic("flow raw byte length greater than MaxEndpointSize")
+       }
+       f.typ = t
+       copy(f.src[:], src)
+       copy(f.dst[:], dst)
+       return
+}
+
+// EndpointInvalid is an endpoint type used for invalid endpoints, IE endpoints
+// that are specified incorrectly during creation.
+var EndpointInvalid = RegisterEndpointType(0, EndpointTypeMetadata{Name: "invalid", Formatter: func(b []byte) string {
+       return fmt.Sprintf("%v", b)
+}})
+
+// InvalidEndpoint is a singleton Endpoint of type EndpointInvalid.
+var InvalidEndpoint = NewEndpoint(EndpointInvalid, nil)
+
+// InvalidFlow is a singleton Flow of type EndpointInvalid.
+var InvalidFlow = NewFlow(EndpointInvalid, nil, nil)
diff --git a/vendor/github.com/google/gopacket/gc b/vendor/github.com/google/gopacket/gc
new file mode 100755 (executable)
index 0000000..57bcdee
--- /dev/null
@@ -0,0 +1,278 @@
+#!/bin/bash
+# Copyright 2012 Google, Inc. All rights reserved.
+
+# This script provides a simple way to run benchmarks against previous code and
+# keep a log of how benchmarks change over time.  When used with the --benchmark
+# flag, it runs benchmarks from the current code and from the last commit run
+# with --benchmark, then stores the results in the git commit description.  We
+# rerun the old benchmarks along with the new ones, since there's no guarantee
+# that git commits will happen on the same machine, so machine differences could
+# cause wildly inaccurate results.
+#
+# If you're making changes to 'gopacket' which could cause performance changes,
+# you may be requested to use this commit script to make sure your changes don't
+# have large detrimental effects (or to show off how awesome your performance
+# improvements are).
+#
+# If not run with the --benchmark flag, this script is still very useful... it
+# makes sure all the correct go formatting, building, and testing work as
+# expected.
+
+function Usage {
+  cat <<EOF
+USAGE:  $0 [--benchmark regexp] [--root] [--gen] <git commit flags...>
+
+--benchmark:  Run benchmark comparisons against last benchmark'd commit
+--root:  Run tests that require root priviledges
+--gen:  Generate code for MACs/ports by pulling down external data
+
+Note, some 'git commit' flags are necessary, if all else fails, pass in -a
+EOF
+  exit 1
+}
+
+BENCH=""
+GEN=""
+ROOT=""
+while [ ! -z "$1" ]; do
+  case "$1" in
+    "--benchmark")
+      BENCH="$2"
+      shift
+      shift
+      ;;
+    "--gen")
+      GEN="yes"
+      shift
+      ;;
+    "--root")
+      ROOT="yes"
+      shift
+      ;;
+    "--help")
+      Usage
+      ;;
+    "-h")
+      Usage
+      ;;
+    "help")
+      Usage
+      ;;
+    *)
+      break
+      ;;
+  esac
+done
+
+function Root {
+  if [ ! -z "$ROOT" ]; then
+    local exec="$1"
+    # Some folks (like me) keep source code in places inaccessible by root (like
+    # NFS), so to make sure things run smoothly we copy them to a /tmp location.
+    local tmpfile="$(mktemp -t gopacket_XXXXXXXX)"
+    echo "Running root test executable $exec as $tmpfile"
+    cp "$exec" "$tmpfile"
+    chmod a+x "$tmpfile"
+    shift
+    sudo "$tmpfile" "$@"
+  fi
+}
+
+if [ "$#" -eq "0" ]; then
+  Usage
+fi
+
+cd $(dirname $0)
+
+# Check for copyright notices.
+for filename in $(find ./ -type f -name '*.go'); do
+  if ! head -n 1 "$filename" | grep -q Copyright; then
+    echo "File '$filename' may not have copyright notice"
+    exit 1
+  fi
+done
+
+set -e
+set -x
+
+if [ ! -z "$ROOT" ]; then
+  echo "Running SUDO to get root priviledges for root tests"
+  sudo echo "have root"
+fi
+
+if [ ! -z "$GEN" ]; then
+  pushd macs
+  go run gen.go | gofmt > valid_mac_prefixes.go
+  popd
+  pushd layers
+  go run gen.go | gofmt > iana_ports.go
+  popd
+fi
+
+# Make sure everything is formatted, compiles, and tests pass.
+go fmt ./...
+go test -i ./... 2>/dev/null >/dev/null || true
+go test
+go build
+pushd examples/bytediff
+go build
+popd
+if [ -f /usr/include/pcap.h ]; then
+  pushd pcap
+  go test ./...
+  go build ./...
+  go build pcap_tester.go
+  Root pcap_tester --mode=basic
+  Root pcap_tester --mode=filtered
+  Root pcap_tester --mode=timestamp || echo "You might not support timestamp sources"
+  popd
+  pushd examples/pcapdump
+  go build
+  popd
+  pushd examples/arpscan
+  go build
+  popd
+  pushd examples/bidirectional
+  go build
+  popd
+  pushd examples/synscan
+  go build
+  popd
+  pushd examples/httpassembly
+  go build
+  popd
+  pushd examples/statsassembly
+  go build
+  popd
+fi
+pushd macs
+go test ./...
+gofmt -w gen.go
+go build gen.go
+popd
+pushd tcpassembly
+go test ./...
+popd
+pushd reassembly
+go test ./...
+popd
+pushd layers
+gofmt -w gen.go
+go build gen.go
+go test ./...
+popd
+pushd pcapgo
+go test ./...
+go build ./...
+popd
+if [ -f /usr/include/linux/if_packet.h ]; then
+  if grep -q TPACKET_V3 /usr/include/linux/if_packet.h; then
+    pushd afpacket
+    go build ./...
+    go test ./...
+    popd
+  fi
+fi
+if [ -f /usr/include/pfring.h ]; then
+  pushd pfring
+  go test ./...
+  go build ./...
+  popd
+  pushd examples/pfdump
+  go build
+  popd
+fi
+
+for travis_script in `ls .travis.*.sh`; do
+  ./$travis_script
+done
+
+# Run our initial commit
+git commit "$@"
+
+if [ -z "$BENCH" ]; then
+  set +x
+  echo "We're not benchmarking and we've committed... we're done!"
+  exit
+fi
+
+### If we get here, we want to run benchmarks from current commit, and compare
+### then to benchmarks from the last --benchmark commit.
+
+# Get our current branch.
+BRANCH="$(git branch | grep '^*' | awk '{print $2}')"
+
+# File we're going to build our commit description in.
+COMMIT_FILE="$(mktemp /tmp/tmp.XXXXXXXX)"
+
+# Add the word "BENCH" to the start of the git commit.
+echo -n "BENCH " > $COMMIT_FILE
+
+# Get the current description... there must be an easier way.
+git log -n 1 | grep '^ ' | sed 's/^    //' >> $COMMIT_FILE
+
+# Get the commit sha for the last benchmark commit
+PREV=$(git log -n 1 --grep='BENCHMARK_MARKER_DO_NOT_CHANGE' | head -n 1 | awk '{print $2}')
+
+## Run current benchmarks
+
+cat >> $COMMIT_FILE <<EOF
+
+
+----------------------------------------------------------
+BENCHMARK_MARKER_DO_NOT_CHANGE
+----------------------------------------------------------
+
+Go version $(go version)
+
+
+TEST BENCHMARKS "$BENCH"
+EOF
+# go seems to have trouble with 'go test --bench=. ./...'
+go test --test.bench="$BENCH" 2>&1 | tee -a $COMMIT_FILE
+pushd layers
+go test --test.bench="$BENCH" 2>&1 | tee -a $COMMIT_FILE
+popd
+cat >> $COMMIT_FILE <<EOF
+
+
+PCAP BENCHMARK
+EOF
+if [ "$BENCH" -eq ".*" ]; then
+  go run pcap/gopacket_benchmark/*.go 2>&1 | tee -a $COMMIT_FILE
+fi
+
+
+
+## Reset to last benchmark commit, run benchmarks
+
+git checkout $PREV
+
+cat >> $COMMIT_FILE <<EOF
+----------------------------------------------------------
+BENCHMARKING AGAINST COMMIT $PREV
+----------------------------------------------------------
+
+
+OLD TEST BENCHMARKS
+EOF
+# go seems to have trouble with 'go test --bench=. ./...'
+go test --test.bench="$BENCH" 2>&1 | tee -a $COMMIT_FILE
+pushd layers
+go test --test.bench="$BENCH" 2>&1 | tee -a $COMMIT_FILE
+popd
+cat >> $COMMIT_FILE <<EOF
+
+
+OLD PCAP BENCHMARK
+EOF
+if [ "$BENCH" -eq ".*" ]; then
+  go run pcap/gopacket_benchmark/*.go 2>&1 | tee -a $COMMIT_FILE
+fi
+
+
+
+## Reset back to the most recent commit, edit the commit message by appending
+## benchmark results.
+git checkout $BRANCH
+git commit --amend -F $COMMIT_FILE
diff --git a/vendor/github.com/google/gopacket/ip4defrag/defrag.go b/vendor/github.com/google/gopacket/ip4defrag/defrag.go
new file mode 100644 (file)
index 0000000..9d3862f
--- /dev/null
@@ -0,0 +1,350 @@
+// Copyright 2013 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package ip4defrag implements a IPv4 defragmenter
+package ip4defrag
+
+import (
+       "container/list"
+       "errors"
+       "fmt"
+       "log"
+       "sync"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+)
+
+// Quick and Easy to use debug code to trace
+// how defrag works.
+var debug debugging = false // or flip to true
+type debugging bool
+
+func (d debugging) Printf(format string, args ...interface{}) {
+       if d {
+               log.Printf(format, args...)
+       }
+}
+
+// Constants determining how to handle fragments.
+const (
+       IPv4MinimumFragmentSize    = 576   // Minimum size of a single fragment
+       IPv4MaximumSize            = 65535 // Maximum size of a fragment (2^16)
+       IPv4MaximumFragmentOffset  = 8189  // Maximum offset of a fragment
+       IPv4MaximumFragmentListLen = 8     // Back out if we get more than this many fragments
+)
+
+// DefragIPv4 takes in an IPv4 packet with a fragment payload.
+//
+// It do not modify the IPv4 layer in place, 'in' remains untouched
+// It returns a ready-to be used IPv4 layer.
+//
+// If the passed-in IPv4 layer is NOT fragmented, it will
+// immediately return it without modifying the layer.
+//
+// If the IPv4 layer is a fragment and we don't have all
+// fragments, it will return nil and store whatever internal
+// information it needs to eventually defrag the packet.
+//
+// If the IPv4 layer is the last fragment needed to reconstruct
+// the packet, a new IPv4 layer will be returned, and will be set to
+// the entire defragmented packet,
+//
+// It use a map of all the running flows
+//
+// Usage example:
+//
+// func HandlePacket(in *layers.IPv4) err {
+//     defragger := ip4defrag.NewIPv4Defragmenter()
+//     in, err := defragger.DefragIPv4(in)
+//     if err != nil {
+//         return err
+//     } else if in == nil {
+//         return nil  // packet fragment, we don't have whole packet yet.
+//     }
+//     // At this point, we know that 'in' is defragmented.
+//     //It may be the same 'in' passed to
+//        // HandlePacket, or it may not, but we don't really care :)
+//        ... do stuff to 'in' ...
+//}
+//
+func (d *IPv4Defragmenter) DefragIPv4(in *layers.IPv4) (*layers.IPv4, error) {
+       return d.DefragIPv4WithTimestamp(in, time.Now())
+}
+
+// DefragIPv4WithTimestamp provides functionality of DefragIPv4 with
+// an additional timestamp parameter which is used for discarding
+// old fragments instead of time.Now()
+//
+// This is useful when operating on pcap files instead of live captured data
+//
+func (d *IPv4Defragmenter) DefragIPv4WithTimestamp(in *layers.IPv4, t time.Time) (*layers.IPv4, error) {
+       // check if we need to defrag
+       if st := d.dontDefrag(in); st == true {
+               debug.Printf("defrag: do nothing, do not need anything")
+               return in, nil
+       }
+       // perfom security checks
+       st, err := d.securityChecks(in)
+       if err != nil || st == false {
+               debug.Printf("defrag: alert security check")
+               return nil, err
+       }
+
+       // ok, got a fragment
+       debug.Printf("defrag: got a new fragment in.Id=%d in.FragOffset=%d in.Flags=%d\n",
+               in.Id, in.FragOffset*8, in.Flags)
+
+       // have we already seen a flow between src/dst with that Id?
+       ipf := newIPv4(in)
+       var fl *fragmentList
+       var exist bool
+       d.Lock()
+       fl, exist = d.ipFlows[ipf]
+       if !exist {
+               debug.Printf("defrag: unknown flow, creating a new one\n")
+               fl = new(fragmentList)
+               d.ipFlows[ipf] = fl
+       }
+       d.Unlock()
+       // insert, and if final build it
+       out, err2 := fl.insert(in, t)
+
+       // at last, if we hit the maximum frag list len
+       // without any defrag success, we just drop everything and
+       // raise an error
+       if out == nil && fl.List.Len()+1 > IPv4MaximumFragmentListLen {
+               d.flush(ipf)
+               return nil, fmt.Errorf("defrag: Fragment List hits its maximum"+
+                       "size(%d), without success. Flushing the list",
+                       IPv4MaximumFragmentListLen)
+       }
+
+       // if we got a packet, it's a new one, and he is defragmented
+       if out != nil {
+               // when defrag is done for a flow between two ip
+               // clean the list
+               d.flush(ipf)
+               return out, nil
+       }
+       return nil, err2
+}
+
+// DiscardOlderThan forgets all packets without any activity since
+// time t. It returns the number of FragmentList aka number of
+// fragment packets it has discarded.
+func (d *IPv4Defragmenter) DiscardOlderThan(t time.Time) int {
+       var nb int
+       d.Lock()
+       for k, v := range d.ipFlows {
+               if v.LastSeen.Before(t) {
+                       nb = nb + 1
+                       delete(d.ipFlows, k)
+               }
+       }
+       d.Unlock()
+       return nb
+}
+
+// flush the fragment list for a particular flow
+func (d *IPv4Defragmenter) flush(ipf ipv4) {
+       d.Lock()
+       fl := new(fragmentList)
+       d.ipFlows[ipf] = fl
+       d.Unlock()
+}
+
+// dontDefrag returns true if the IPv4 packet do not need
+// any defragmentation
+func (d *IPv4Defragmenter) dontDefrag(ip *layers.IPv4) bool {
+       // don't defrag packet with DF flag
+       if ip.Flags&layers.IPv4DontFragment != 0 {
+               return true
+       }
+       // don't defrag not fragmented ones
+       if ip.Flags&layers.IPv4MoreFragments == 0 && ip.FragOffset == 0 {
+               return true
+       }
+       return false
+}
+
+// securityChecks performs the needed security checks
+func (d *IPv4Defragmenter) securityChecks(ip *layers.IPv4) (bool, error) {
+       // don't allow too big fragment offset
+       if ip.FragOffset > IPv4MaximumFragmentOffset {
+               return false, fmt.Errorf("defrag: fragment offset too big "+
+                       "(handcrafted? %d > %d)", ip.FragOffset, IPv4MaximumFragmentOffset)
+       }
+       fragOffset := ip.FragOffset * 8
+
+       // don't allow fragment that would oversize an IP packet
+       if fragOffset+ip.Length > IPv4MaximumSize {
+               return false, fmt.Errorf("defrag: fragment will overrun "+
+                       "(handcrafted? %d > %d)", ip.FragOffset*8+ip.Length, IPv4MaximumSize)
+       }
+
+       return true, nil
+}
+
+// fragmentList holds a container/list used to contains IP
+// packets/fragments.  It stores internal counters to track the
+// maximum total of byte, and the current length it has received.
+// It also stores a flag to know if he has seen the last packet.
+type fragmentList struct {
+       List          list.List
+       Highest       uint16
+       Current       uint16
+       FinalReceived bool
+       LastSeen      time.Time
+}
+
+// insert insert an IPv4 fragment/packet into the Fragment List
+// It use the following strategy : we are inserting fragment based
+// on their offset, latest first. This is sometimes called BSD-Right.
+// See: http://www.sans.org/reading-room/whitepapers/detection/ip-fragment-reassembly-scapy-33969
+func (f *fragmentList) insert(in *layers.IPv4, t time.Time) (*layers.IPv4, error) {
+       // TODO: should keep a copy of *in in the list
+       // or not (ie the packet source is reliable) ? -> depends on Lazy / last packet
+       fragOffset := in.FragOffset * 8
+       if fragOffset >= f.Highest {
+               f.List.PushBack(in)
+       } else {
+               for e := f.List.Front(); e != nil; e = e.Next() {
+                       frag, _ := e.Value.(*layers.IPv4)
+                       if in.FragOffset == frag.FragOffset {
+                               // TODO: what if we receive a fragment
+                               // that begins with duplicate data but
+                               // *also* has new data? For example:
+                               //
+                               // AAAA
+                               //     BB
+                               //     BBCC
+                               //         DDDD
+                               //
+                               // In this situation we completely
+                               // ignore CC and the complete packet can
+                               // never be reassembled.
+                               debug.Printf("defrag: ignoring frag %d as we already have it (duplicate?)\n",
+                                       fragOffset)
+                               return nil, nil
+                       }
+                       if in.FragOffset < frag.FragOffset {
+                               debug.Printf("defrag: inserting frag %d before existing frag %d\n",
+                                       fragOffset, frag.FragOffset*8)
+                               f.List.InsertBefore(in, e)
+                               break
+                       }
+               }
+       }
+
+       f.LastSeen = t
+
+       fragLength := in.Length - 20
+       // After inserting the Fragment, we update the counters
+       if f.Highest < fragOffset+fragLength {
+               f.Highest = fragOffset + fragLength
+       }
+       f.Current = f.Current + fragLength
+
+       debug.Printf("defrag: insert ListLen: %d Highest:%d Current:%d\n",
+               f.List.Len(),
+               f.Highest, f.Current)
+
+       // Final Fragment ?
+       if in.Flags&layers.IPv4MoreFragments == 0 {
+               f.FinalReceived = true
+       }
+       // Ready to try defrag ?
+       if f.FinalReceived && f.Highest == f.Current {
+               return f.build(in)
+       }
+       return nil, nil
+}
+
+// Build builds the final datagram, modifying ip in place.
+// It puts priority to packet in the early position of the list.
+// See Insert for more details.
+func (f *fragmentList) build(in *layers.IPv4) (*layers.IPv4, error) {
+       var final []byte
+       var currentOffset uint16
+
+       debug.Printf("defrag: building the datagram \n")
+       for e := f.List.Front(); e != nil; e = e.Next() {
+               frag, _ := e.Value.(*layers.IPv4)
+               if frag.FragOffset*8 == currentOffset {
+                       debug.Printf("defrag: building - adding %d\n", frag.FragOffset*8)
+                       final = append(final, frag.Payload...)
+                       currentOffset = currentOffset + frag.Length - 20
+               } else if frag.FragOffset*8 < currentOffset {
+                       // overlapping fragment - let's take only what we need
+                       startAt := currentOffset - frag.FragOffset*8
+                       debug.Printf("defrag: building - overlapping, starting at %d\n",
+                               startAt)
+                       if startAt > frag.Length-20 {
+                               return nil, errors.New("defrag: building - invalid fragment")
+                       }
+                       final = append(final, frag.Payload[startAt:]...)
+                       currentOffset = currentOffset + frag.FragOffset*8
+               } else {
+                       // Houston - we have an hole !
+                       debug.Printf("defrag: hole found while building, " +
+                               "stopping the defrag process\n")
+                       return nil, errors.New("defrag: building - hole found")
+               }
+               debug.Printf("defrag: building - next is %d\n", currentOffset)
+       }
+
+       // TODO recompute IP Checksum
+       out := &layers.IPv4{
+               Version:    in.Version,
+               IHL:        in.IHL,
+               TOS:        in.TOS,
+               Length:     f.Highest,
+               Id:         0,
+               Flags:      0,
+               FragOffset: 0,
+               TTL:        in.TTL,
+               Protocol:   in.Protocol,
+               Checksum:   0,
+               SrcIP:      in.SrcIP,
+               DstIP:      in.DstIP,
+               Options:    in.Options,
+               Padding:    in.Padding,
+       }
+       out.Payload = final
+
+       return out, nil
+}
+
+// ipv4 is a struct to be used as a key.
+type ipv4 struct {
+       ip4 gopacket.Flow
+       id  uint16
+}
+
+// newIPv4 returns a new initialized IPv4 Flow
+func newIPv4(ip *layers.IPv4) ipv4 {
+       return ipv4{
+               ip4: ip.NetworkFlow(),
+               id:  ip.Id,
+       }
+}
+
+// IPv4Defragmenter is a struct which embedded a map of
+// all fragment/packet.
+type IPv4Defragmenter struct {
+       sync.RWMutex
+       ipFlows map[ipv4]*fragmentList
+}
+
+// NewIPv4Defragmenter returns a new IPv4Defragmenter
+// with an initialized map.
+func NewIPv4Defragmenter() *IPv4Defragmenter {
+       return &IPv4Defragmenter{
+               ipFlows: make(map[ipv4]*fragmentList),
+       }
+}
diff --git a/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go b/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go
new file mode 100644 (file)
index 0000000..1eb66d2
--- /dev/null
@@ -0,0 +1,1396 @@
+// Copyright 2013 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package ip4defrag
+
+import (
+       "bytes"
+       "fmt"
+       "net"
+       "testing"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/bytediff"
+       "github.com/google/gopacket/layers"
+)
+
+func TestNotFrag(t *testing.T) {
+       ip := layers.IPv4{
+               Version: 4,
+               TTL:     220,
+               SrcIP:   net.IPv4(1, 1, 1, 1),
+               DstIP:   net.IPv4(2, 2, 2, 2),
+               Flags:   layers.IPv4DontFragment,
+       }
+       defrag := NewIPv4Defragmenter()
+
+       out, err := defrag.DefragIPv4(&ip)
+       if out == nil || err != nil {
+               t.Errorf("defrag: this packet do not need to be defrag ['%s']", err)
+       }
+}
+
+func TestDefragPingMultipleFrags(t *testing.T) {
+       defrag := NewIPv4Defragmenter()
+
+       // We inject the 4 fragments and test the DefragIPv4 interface
+       gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+       gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+       gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+       gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3")
+       gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
+       ip := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4")
+
+       if len(ip.Payload) != 4508 {
+               t.Fatalf("defrag: expecting a packet of 4508 bytes, got %d", len(ip.Payload))
+       }
+
+       validPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...)
+       validPayload = append(validPayload, testPing1Frag3[34:]...)
+       validPayload = append(validPayload, testPing1Frag4[34:]...)
+
+       if bytes.Compare(validPayload, ip.Payload) != 0 {
+               fmt.Println(bytediff.BashOutput.String(
+                       bytediff.Diff(validPayload, ip.Payload)))
+               t.Errorf("defrag: payload is not correctly defragmented")
+       }
+}
+
+func TestDefragPing1(t *testing.T) {
+       defrag := NewIPv4Defragmenter()
+
+       // We inject the 4 fragments and test the DefragIPv4 interface
+       gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+       gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3")
+       gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
+       ip := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4")
+
+       if len(ip.Payload) != 4508 {
+               t.Fatalf("defrag: expecting a packet of 4508 bytes, got %d", len(ip.Payload))
+       }
+
+       validPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...)
+       validPayload = append(validPayload, testPing1Frag3[34:]...)
+       validPayload = append(validPayload, testPing1Frag4[34:]...)
+
+       if bytes.Compare(validPayload, ip.Payload) != 0 {
+               fmt.Println(bytediff.BashOutput.String(
+                       bytediff.Diff(validPayload, ip.Payload)))
+               t.Errorf("defrag: payload is not correctly defragmented")
+       }
+
+       // We redo the same test to handle duplication, and be sure
+       // that the internal list is correctly cleaned up.
+       gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+       gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3")
+       gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
+       ip2 := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4")
+
+       if bytes.Compare(ip2.Payload, ip.Payload) != 0 {
+               fmt.Println(bytediff.BashOutput.String(
+                       bytediff.Diff(validPayload, ip.Payload)))
+               t.Errorf("defrag: ip and ip2 payload are different")
+       }
+}
+
+func TestDefragPing1and2(t *testing.T) {
+       debug = false
+       defrag := NewIPv4Defragmenter()
+
+       // We inject the 8 mixed fragments from two "flows"
+       // and test the DefragIPv4 interface
+       gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+       gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3")
+       gentestDefrag(t, defrag, testPing2Frag3, false, "Ping2Frag3")
+       gentestDefrag(t, defrag, testPing2Frag4, false, "Ping2Frag4")
+       gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
+       gentestDefrag(t, defrag, testPing2Frag1, false, "Ping2Frag1")
+       ip := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4")
+
+       if len(ip.Payload) != 4508 {
+               t.Fatalf("defrag: expecting a packet Ping1 of 4508 bytes, got %d",
+                       len(ip.Payload))
+       }
+
+       validPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...)
+       validPayload = append(validPayload, testPing1Frag3[34:]...)
+       validPayload = append(validPayload, testPing1Frag4[34:]...)
+
+       if bytes.Compare(validPayload, ip.Payload) != 0 {
+               fmt.Println(bytediff.BashOutput.String(
+                       bytediff.Diff(validPayload, ip.Payload)))
+               t.Errorf("defrag: payload Ping1 is not correctly defragmented")
+       }
+
+       ip = gentestDefrag(t, defrag, testPing2Frag2, true, "Ping2Frag2")
+       if len(ip.Payload) != 4508 {
+               t.Fatalf("defrag: expecting a packet Ping2 of 4508 bytes, got %d",
+                       len(ip.Payload))
+       }
+
+       validPayload2 := append(testPing2Frag1[34:], testPing2Frag2[34:]...)
+       validPayload2 = append(validPayload2, testPing2Frag3[34:]...)
+       validPayload2 = append(validPayload2, testPing2Frag4[34:]...)
+
+       if bytes.Compare(validPayload2, ip.Payload) != 0 {
+               fmt.Println(bytediff.BashOutput.String(
+                       bytediff.Diff(validPayload2, ip.Payload)))
+               t.Errorf("defrag: payload Ping2 is not correctly defragmented")
+       }
+       debug = false
+}
+
+func TestDefragPingTooMuch(t *testing.T) {
+       defrag := NewIPv4Defragmenter()
+
+       ip1 := layers.IPv4{
+               Version:    4,
+               TTL:        15,
+               SrcIP:      net.IPv4(1, 1, 1, 1),
+               DstIP:      net.IPv4(2, 2, 2, 2),
+               Id:         0xcc,
+               FragOffset: 0,
+               Length:     500,
+               Flags:      layers.IPv4MoreFragments,
+       }
+       defrag.DefragIPv4(&ip1)
+       for i := 2; i < 8; i = i + 1 {
+               nip := ip1
+               nip.FragOffset = ip1.Length * uint16(i)
+               out, err := defrag.DefragIPv4(&nip)
+               if err != nil || out != nil {
+                       t.Fatalf("defrag: %s", err)
+               }
+
+       }
+       ip8 := ip1
+       ip8.FragOffset = 666
+
+       _, err := defrag.DefragIPv4(&ip8)
+       if err == nil {
+               t.Fatalf("defrag: Maximum number of fragments are supposed to be 8")
+       }
+}
+
+func gentestDefrag(t *testing.T, defrag *IPv4Defragmenter, buf []byte, expect bool, label string) *layers.IPv4 {
+       p := gopacket.NewPacket(buf, layers.LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       ipL := p.Layer(layers.LayerTypeIPv4)
+       in, _ := ipL.(*layers.IPv4)
+
+       out, err := defrag.DefragIPv4(in)
+       if err != nil {
+               t.Fatalf("defrag: %s", err)
+       }
+       status := false
+       if out != nil {
+               status = true
+       }
+       if status != expect {
+               t.Fatalf("defrag: a fragment was not detected (%s)", label)
+       }
+       return out
+}
+
+/* Frame 1-1 (1514 bytes) */
+var testPing1Frag1 = []byte{
+       0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+       0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+       0x05, 0xdc, 0xb3, 0xe1, 0x20, 0x00, 0x40, 0x01, /* .... .@. */
+       0xcf, 0x70, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* .p...... */
+       0x08, 0x08, 0x08, 0x00, 0x45, 0xa6, 0x14, 0xbf, /* ....E... */
+       0x00, 0x01, 0x9e, 0x3e, 0x20, 0x55, 0x00, 0x00, /* ...> U.. */
+       0x00, 0x00, 0x16, 0x91, 0x0d, 0x00, 0x00, 0x00, /* ........ */
+       0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, /* .. */
+}
+
+/* Frame (1514 bytes) */
+var testPing1Frag2 = []byte{
+       0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+       0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+       0x05, 0xdc, 0xb3, 0xe1, 0x20, 0xb9, 0x40, 0x01, /* .... .@. */
+       0xce, 0xb7, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+       0x08, 0x08, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, /* .. */
+}
+
+/* Frame (1514 bytes) */
+var testPing1Frag3 = []byte{
+       0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+       0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+       0x05, 0xdc, 0xb3, 0xe1, 0x21, 0x72, 0x40, 0x01, /* ....!r@. */
+       0xcd, 0xfe, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+       0x08, 0x08, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, /* NO */
+}
+
+/* Frame (102 bytes) */
+var testPing1Frag4 = []byte{
+       0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+       0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+       0x00, 0x58, 0xb3, 0xe1, 0x02, 0x2b, 0x40, 0x01, /* .X...+@. */
+       0xf2, 0xc9, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+       0x08, 0x08, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* ..PQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, /* ...... */
+}
+
+/* Frame (1514 bytes) */
+var testPing2Frag1 = []byte{
+       0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+       0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+       0x05, 0xdc, 0xb4, 0x9e, 0x20, 0x00, 0x40, 0x01, /* .... .@. */
+       0xce, 0xb3, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+       0x08, 0x08, 0x08, 0x00, 0x9e, 0xa0, 0x14, 0xbf, /* ........ */
+       0x00, 0x02, 0x9f, 0x3e, 0x20, 0x55, 0x00, 0x00, /* ...> U.. */
+       0x00, 0x00, 0xbc, 0x95, 0x0d, 0x00, 0x00, 0x00, /* ........ */
+       0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, /* .. */
+}
+
+/* Frame (1514 bytes) */
+var testPing2Frag2 = []byte{
+       0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+       0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+       0x05, 0xdc, 0xb4, 0x9e, 0x20, 0xb9, 0x40, 0x01, /* .... .@. */
+       0xcd, 0xfa, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+       0x08, 0x08, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, /* .. */
+}
+
+/* Frame (1514 bytes) */
+var testPing2Frag3 = []byte{
+       0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+       0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+       0x05, 0xdc, 0xb4, 0x9e, 0x21, 0x72, 0x40, 0x01, /* ....!r@. */
+       0xcd, 0x41, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* .A...... */
+       0x08, 0x08, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */
+       0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */
+       0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */
+       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */
+       0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */
+       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */
+       0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */
+       0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */
+       0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */
+       0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */
+       0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */
+       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */
+       0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */
+       0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */
+       0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */
+       0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */
+       0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */
+       0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */
+       0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */
+       0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */
+       0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */
+       0x4e, 0x4f, /* NO */
+}
+
+/* Frame (102 bytes) */
+var testPing2Frag4 = []byte{
+       0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */
+       0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */
+       0x00, 0x58, 0xb4, 0x9e, 0x02, 0x2b, 0x40, 0x01, /* .X...+@. */
+       0xf2, 0x0c, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */
+       0x08, 0x08, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* ..PQRSTU */
+       0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */
+       0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */
+       0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */
+       0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */
+       0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */
+       0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */
+       0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */
+       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, /* ...... */
+}
diff --git a/vendor/github.com/google/gopacket/layerclass.go b/vendor/github.com/google/gopacket/layerclass.go
new file mode 100644 (file)
index 0000000..775cd09
--- /dev/null
@@ -0,0 +1,107 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+// LayerClass is a set of LayerTypes, used for grabbing one of a number of
+// different types from a packet.
+type LayerClass interface {
+       // Contains returns true if the given layer type should be considered part
+       // of this layer class.
+       Contains(LayerType) bool
+       // LayerTypes returns the set of all layer types in this layer class.
+       // Note that this may not be a fast operation on all LayerClass
+       // implementations.
+       LayerTypes() []LayerType
+}
+
+// Contains implements LayerClass.
+func (l LayerType) Contains(a LayerType) bool {
+       return l == a
+}
+
+// LayerTypes implements LayerClass.
+func (l LayerType) LayerTypes() []LayerType {
+       return []LayerType{l}
+}
+
+// LayerClassSlice implements a LayerClass with a slice.
+type LayerClassSlice []bool
+
+// Contains returns true if the given layer type should be considered part
+// of this layer class.
+func (s LayerClassSlice) Contains(t LayerType) bool {
+       return int(t) < len(s) && s[t]
+}
+
+// LayerTypes returns all layer types in this LayerClassSlice.
+// Because of LayerClassSlice's implementation, this could be quite slow.
+func (s LayerClassSlice) LayerTypes() (all []LayerType) {
+       for i := 0; i < len(s); i++ {
+               if s[i] {
+                       all = append(all, LayerType(i))
+               }
+       }
+       return
+}
+
+// NewLayerClassSlice creates a new LayerClassSlice by creating a slice of
+// size max(types) and setting slice[t] to true for each type t.  Note, if
+// you implement your own LayerType and give it a high value, this WILL create
+// a very large slice.
+func NewLayerClassSlice(types []LayerType) LayerClassSlice {
+       var max LayerType
+       for _, typ := range types {
+               if typ > max {
+                       max = typ
+               }
+       }
+       t := make([]bool, int(max+1))
+       for _, typ := range types {
+               t[typ] = true
+       }
+       return t
+}
+
+// LayerClassMap implements a LayerClass with a map.
+type LayerClassMap map[LayerType]bool
+
+// Contains returns true if the given layer type should be considered part
+// of this layer class.
+func (m LayerClassMap) Contains(t LayerType) bool {
+       return m[t]
+}
+
+// LayerTypes returns all layer types in this LayerClassMap.
+func (m LayerClassMap) LayerTypes() (all []LayerType) {
+       for t := range m {
+               all = append(all, t)
+       }
+       return
+}
+
+// NewLayerClassMap creates a LayerClassMap and sets map[t] to true for each
+// type in types.
+func NewLayerClassMap(types []LayerType) LayerClassMap {
+       m := LayerClassMap{}
+       for _, typ := range types {
+               m[typ] = true
+       }
+       return m
+}
+
+// NewLayerClass creates a LayerClass, attempting to be smart about which type
+// it creates based on which types are passed in.
+func NewLayerClass(types []LayerType) LayerClass {
+       for _, typ := range types {
+               if typ > maxLayerType {
+                       // NewLayerClassSlice could create a very large object, so instead create
+                       // a map.
+                       return NewLayerClassMap(types)
+               }
+       }
+       return NewLayerClassSlice(types)
+}
diff --git a/vendor/github.com/google/gopacket/layers/.linted b/vendor/github.com/google/gopacket/layers/.linted
new file mode 100644 (file)
index 0000000..afe7689
--- /dev/null
@@ -0,0 +1,41 @@
+arp.go
+base.go
+base_test.go
+bfd.go
+cdp.go
+ctp.go
+decode_test.go
+dhcp_test.go
+dhcpv4.go
+dns.go
+dns_test.go
+doc.go
+dot11_test.go
+dot1q.go
+dot1q_test.go
+eapol.go
+etherip.go
+fddi.go
+gen.go
+gre.go
+gre_test.go
+iana_ports.go
+icmp6_test.go
+igmp_test.go
+ip4_test.go
+ipsec.go
+ipsec_test.go
+loopback.go
+mpls_test.go
+ntp_test.go
+ports.go
+ppp.go
+prism_test.go
+radiotap_test.go
+sflow_test.go
+tcp_test.go
+udp_test.go
+usb_test.go
+vrrp_test.go
+vxlan.go
+vxlan_test.go
diff --git a/vendor/github.com/google/gopacket/layers/arp.go b/vendor/github.com/google/gopacket/layers/arp.go
new file mode 100644 (file)
index 0000000..49e05ac
--- /dev/null
@@ -0,0 +1,109 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+
+       "github.com/google/gopacket"
+)
+
+// Potential values for ARP.Operation.
+const (
+       ARPRequest = 1
+       ARPReply   = 2
+)
+
+// ARP is a ARP packet header.
+type ARP struct {
+       BaseLayer
+       AddrType          LinkType
+       Protocol          EthernetType
+       HwAddressSize     uint8
+       ProtAddressSize   uint8
+       Operation         uint16
+       SourceHwAddress   []byte
+       SourceProtAddress []byte
+       DstHwAddress      []byte
+       DstProtAddress    []byte
+}
+
+// LayerType returns LayerTypeARP
+func (arp *ARP) LayerType() gopacket.LayerType { return LayerTypeARP }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (arp *ARP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       arp.AddrType = LinkType(binary.BigEndian.Uint16(data[0:2]))
+       arp.Protocol = EthernetType(binary.BigEndian.Uint16(data[2:4]))
+       arp.HwAddressSize = data[4]
+       arp.ProtAddressSize = data[5]
+       arp.Operation = binary.BigEndian.Uint16(data[6:8])
+       arp.SourceHwAddress = data[8 : 8+arp.HwAddressSize]
+       arp.SourceProtAddress = data[8+arp.HwAddressSize : 8+arp.HwAddressSize+arp.ProtAddressSize]
+       arp.DstHwAddress = data[8+arp.HwAddressSize+arp.ProtAddressSize : 8+2*arp.HwAddressSize+arp.ProtAddressSize]
+       arp.DstProtAddress = data[8+2*arp.HwAddressSize+arp.ProtAddressSize : 8+2*arp.HwAddressSize+2*arp.ProtAddressSize]
+
+       arpLength := 8 + 2*arp.HwAddressSize + 2*arp.ProtAddressSize
+       arp.Contents = data[:arpLength]
+       arp.Payload = data[arpLength:]
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (arp *ARP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       size := 8 + len(arp.SourceHwAddress) + len(arp.SourceProtAddress) + len(arp.DstHwAddress) + len(arp.DstProtAddress)
+       bytes, err := b.PrependBytes(size)
+       if err != nil {
+               return err
+       }
+       if opts.FixLengths {
+               if len(arp.SourceHwAddress) != len(arp.DstHwAddress) {
+                       return errors.New("mismatched hardware address sizes")
+               }
+               arp.HwAddressSize = uint8(len(arp.SourceHwAddress))
+               if len(arp.SourceProtAddress) != len(arp.DstProtAddress) {
+                       return errors.New("mismatched prot address sizes")
+               }
+               arp.ProtAddressSize = uint8(len(arp.SourceProtAddress))
+       }
+       binary.BigEndian.PutUint16(bytes, uint16(arp.AddrType))
+       binary.BigEndian.PutUint16(bytes[2:], uint16(arp.Protocol))
+       bytes[4] = arp.HwAddressSize
+       bytes[5] = arp.ProtAddressSize
+       binary.BigEndian.PutUint16(bytes[6:], arp.Operation)
+       start := 8
+       for _, addr := range [][]byte{
+               arp.SourceHwAddress,
+               arp.SourceProtAddress,
+               arp.DstHwAddress,
+               arp.DstProtAddress,
+       } {
+               copy(bytes[start:], addr)
+               start += len(addr)
+       }
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (arp *ARP) CanDecode() gopacket.LayerClass {
+       return LayerTypeARP
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (arp *ARP) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+func decodeARP(data []byte, p gopacket.PacketBuilder) error {
+
+       arp := &ARP{}
+       return decodingLayerDecoder(arp, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/base.go b/vendor/github.com/google/gopacket/layers/base.go
new file mode 100644 (file)
index 0000000..cd59b46
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+)
+
+// BaseLayer is a convenience struct which implements the LayerData and
+// LayerPayload functions of the Layer interface.
+type BaseLayer struct {
+       // Contents is the set of bytes that make up this layer.  IE: for an
+       // Ethernet packet, this would be the set of bytes making up the
+       // Ethernet frame.
+       Contents []byte
+       // Payload is the set of bytes contained by (but not part of) this
+       // Layer.  Again, to take Ethernet as an example, this would be the
+       // set of bytes encapsulated by the Ethernet protocol.
+       Payload []byte
+}
+
+// LayerContents returns the bytes of the packet layer.
+func (b *BaseLayer) LayerContents() []byte { return b.Contents }
+
+// LayerPayload returns the bytes contained within the packet layer.
+func (b *BaseLayer) LayerPayload() []byte { return b.Payload }
+
+type layerDecodingLayer interface {
+       gopacket.Layer
+       DecodeFromBytes([]byte, gopacket.DecodeFeedback) error
+       NextLayerType() gopacket.LayerType
+}
+
+func decodingLayerDecoder(d layerDecodingLayer, data []byte, p gopacket.PacketBuilder) error {
+       err := d.DecodeFromBytes(data, p)
+       if err != nil {
+               return err
+       }
+       p.AddLayer(d)
+       next := d.NextLayerType()
+       if next == gopacket.LayerTypeZero {
+               return nil
+       }
+       return p.NextDecoder(next)
+}
+
+// hacky way to zero out memory... there must be a better way?
+var lotsOfZeros [1024]byte
diff --git a/vendor/github.com/google/gopacket/layers/base_test.go b/vendor/github.com/google/gopacket/layers/base_test.go
new file mode 100644 (file)
index 0000000..4be7480
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This file contains some test helper functions.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "testing"
+)
+
+func min(a, b int) int {
+       if a < b {
+               return a
+       }
+       return b
+}
+
+func checkLayers(p gopacket.Packet, want []gopacket.LayerType, t *testing.T) {
+       layers := p.Layers()
+       t.Log("Checking packet layers, want", want)
+       for _, l := range layers {
+               t.Logf("  Got layer %v, %d bytes, payload of %d bytes", l.LayerType(),
+                       len(l.LayerContents()), len(l.LayerPayload()))
+       }
+       t.Log(p)
+       if len(layers) != len(want) {
+               t.Errorf("  Number of layers mismatch: got %d want %d", len(layers),
+                       len(want))
+               return
+       }
+       for i, l := range layers {
+               if l.LayerType() != want[i] {
+                       t.Errorf("  Layer %d mismatch: got %v want %v", i, l.LayerType(),
+                               want[i])
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/bfd.go b/vendor/github.com/google/gopacket/layers/bfd.go
new file mode 100644 (file)
index 0000000..43030fb
--- /dev/null
@@ -0,0 +1,481 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+
+       "github.com/google/gopacket"
+)
+
+// BFD Control Packet Format
+// -------------------------
+// The current version of BFD's RFC (RFC 5880) contains the following
+// diagram for the BFD Control packet format:
+//
+//      0                   1                   2                   3
+//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |Vers |  Diag   |Sta|P|F|C|A|D|M|  Detect Mult  |    Length     |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                       My Discriminator                        |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                      Your Discriminator                       |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                    Desired Min TX Interval                    |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                   Required Min RX Interval                    |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                 Required Min Echo RX Interval                 |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+//     An optional Authentication Section MAY be present:
+//
+//      0                   1                   2                   3
+//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |   Auth Type   |   Auth Len    |    Authentication Data...     |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+//
+//     Simple Password Authentication Section Format
+//     ---------------------------------------------
+//      0                   1                   2                   3
+//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |   Auth Type   |   Auth Len    |  Auth Key ID  |  Password...  |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                              ...                              |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+//
+//     Keyed MD5 and Meticulous Keyed MD5 Authentication Section Format
+//     ----------------------------------------------------------------
+//      0                   1                   2                   3
+//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |   Auth Type   |   Auth Len    |  Auth Key ID  |   Reserved    |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                        Sequence Number                        |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                      Auth Key/Digest...                       |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                              ...                              |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+//
+//     Keyed SHA1 and Meticulous Keyed SHA1 Authentication Section Format
+//     ------------------------------------------------------------------
+//      0                   1                   2                   3
+//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |   Auth Type   |   Auth Len    |  Auth Key ID  |   Reserved    |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                        Sequence Number                        |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                       Auth Key/Hash...                        |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                              ...                              |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+//     From https://tools.ietf.org/rfc/rfc5880.txt
+const bfdMinimumRecordSizeInBytes int = 24
+
+// BFDVersion represents the version as decoded from the BFD control message
+type BFDVersion uint8
+
+// BFDDiagnostic represents diagnostic infomation about a BFD session
+type BFDDiagnostic uint8
+
+// constants that define BFDDiagnostic flags
+const (
+       BFDDiagnosticNone               BFDDiagnostic = 0 // No Diagnostic
+       BFDDiagnosticTimeExpired        BFDDiagnostic = 1 // Control Detection Time Expired
+       BFDDiagnosticEchoFailed         BFDDiagnostic = 2 // Echo Function Failed
+       BFDDiagnosticNeighborSignalDown BFDDiagnostic = 3 // Neighbor Signaled Session Down
+       BFDDiagnosticForwardPlaneReset  BFDDiagnostic = 4 // Forwarding Plane Reset
+       BFDDiagnosticPathDown           BFDDiagnostic = 5 // Path Down
+       BFDDiagnosticConcatPathDown     BFDDiagnostic = 6 // Concatenated Path Down
+       BFDDiagnosticAdminDown          BFDDiagnostic = 7 // Administratively Down
+       BFDDiagnosticRevConcatPathDown  BFDDiagnostic = 8 // Reverse Concatenated Path Dow
+)
+
+// String returns a string version of BFDDiagnostic
+func (bd BFDDiagnostic) String() string {
+       switch bd {
+       default:
+               return "Unknown"
+       case BFDDiagnosticNone:
+               return "None"
+       case BFDDiagnosticTimeExpired:
+               return "Control Detection Time Expired"
+       case BFDDiagnosticEchoFailed:
+               return "Echo Function Failed"
+       case BFDDiagnosticNeighborSignalDown:
+               return "Neighbor Signaled Session Down"
+       case BFDDiagnosticForwardPlaneReset:
+               return "Forwarding Plane Reset"
+       case BFDDiagnosticPathDown:
+               return "Path Down"
+       case BFDDiagnosticConcatPathDown:
+               return "Concatenated Path Down"
+       case BFDDiagnosticAdminDown:
+               return "Administratively Down"
+       case BFDDiagnosticRevConcatPathDown:
+               return "Reverse Concatenated Path Down"
+       }
+}
+
+// BFDState represents the state of a BFD session
+type BFDState uint8
+
+// constants that define BFDState
+const (
+       BFDStateAdminDown BFDState = 0
+       BFDStateDown      BFDState = 1
+       BFDStateInit      BFDState = 2
+       BFDStateUp        BFDState = 3
+)
+
+// String returns a string version of BFDState
+func (s BFDState) String() string {
+       switch s {
+       default:
+               return "Unknown"
+       case BFDStateAdminDown:
+               return "Admin Down"
+       case BFDStateDown:
+               return "Down"
+       case BFDStateInit:
+               return "Init"
+       case BFDStateUp:
+               return "Up"
+       }
+}
+
+// BFDDetectMultiplier represents the negotiated transmit interval,
+// multiplied by this value, provides the Detection Time for the
+// receiving system in Asynchronous mode.
+type BFDDetectMultiplier uint8
+
+// BFDDiscriminator is a unique, nonzero discriminator value used
+// to demultiplex multiple BFD sessions between the same pair of systems.
+type BFDDiscriminator uint32
+
+// BFDTimeInterval represents a time interval in microseconds
+type BFDTimeInterval uint32
+
+// BFDAuthType represents the authentication used in the BFD session
+type BFDAuthType uint8
+
+// constants that define the BFDAuthType
+const (
+       BFDAuthTypeNone                BFDAuthType = 0 // No Auth
+       BFDAuthTypePassword            BFDAuthType = 1 // Simple Password
+       BFDAuthTypeKeyedMD5            BFDAuthType = 2 // Keyed MD5
+       BFDAuthTypeMeticulousKeyedMD5  BFDAuthType = 3 // Meticulous Keyed MD5
+       BFDAuthTypeKeyedSHA1           BFDAuthType = 4 // Keyed SHA1
+       BFDAuthTypeMeticulousKeyedSHA1 BFDAuthType = 5 // Meticulous Keyed SHA1
+)
+
+// String returns a string version of BFDAuthType
+func (at BFDAuthType) String() string {
+       switch at {
+       default:
+               return "Unknown"
+       case BFDAuthTypeNone:
+               return "No Authentication"
+       case BFDAuthTypePassword:
+               return "Simple Password"
+       case BFDAuthTypeKeyedMD5:
+               return "Keyed MD5"
+       case BFDAuthTypeMeticulousKeyedMD5:
+               return "Meticulous Keyed MD5"
+       case BFDAuthTypeKeyedSHA1:
+               return "Keyed SHA1"
+       case BFDAuthTypeMeticulousKeyedSHA1:
+               return "Meticulous Keyed SHA1"
+       }
+}
+
+// BFDAuthKeyID represents the authentication key ID in use for
+// this packet.  This allows multiple keys to be active simultaneously.
+type BFDAuthKeyID uint8
+
+// BFDAuthSequenceNumber represents the sequence number for this packet.
+// For Keyed Authentication, this value is incremented occasionally.  For
+// Meticulous Keyed Authentication, this value is incremented for each
+// successive packet transmitted for a session.  This provides protection
+// against replay attacks.
+type BFDAuthSequenceNumber uint32
+
+// BFDAuthData represents the authentication key or digest
+type BFDAuthData []byte
+
+// BFDAuthHeader represents authentication data used in the BFD session
+type BFDAuthHeader struct {
+       AuthType       BFDAuthType
+       KeyID          BFDAuthKeyID
+       SequenceNumber BFDAuthSequenceNumber
+       Data           BFDAuthData
+}
+
+// Length returns the data length of the BFDAuthHeader based on the
+// authentication type
+func (h *BFDAuthHeader) Length() int {
+       switch h.AuthType {
+       case BFDAuthTypePassword:
+               return 3 + len(h.Data)
+       case BFDAuthTypeKeyedMD5, BFDAuthTypeMeticulousKeyedMD5:
+               return 8 + len(h.Data)
+       case BFDAuthTypeKeyedSHA1, BFDAuthTypeMeticulousKeyedSHA1:
+               return 8 + len(h.Data)
+       default:
+               return 0
+       }
+}
+
+// BFD represents a BFD control message packet whose payload contains
+// the control information required to for a BFD session.
+//
+// References
+// ----------
+//
+// Wikipedia's BFD entry:
+//     https://en.wikipedia.org/wiki/Bidirectional_Forwarding_Detection
+//     This is the best place to get an overview of BFD.
+//
+// RFC 5880 "Bidirectional Forwarding Detection (BFD)" (2010)
+//     https://tools.ietf.org/html/rfc5880
+//     This is the original BFD specification.
+//
+// RFC 5881 "Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)" (2010)
+//     https://tools.ietf.org/html/rfc5881
+//     Describes the use of the Bidirectional Forwarding Detection (BFD)
+//     protocol over IPv4 and IPv6 for single IP hops.
+type BFD struct {
+       BaseLayer // Stores the packet bytes and payload bytes.
+
+       Version                   BFDVersion          // Version of the BFD protocol.
+       Diagnostic                BFDDiagnostic       // Diagnostic code for last state change
+       State                     BFDState            // Current state
+       Poll                      bool                // Requesting verification
+       Final                     bool                // Responding to a received BFD Control packet that had the Poll (P) bit set.
+       ControlPlaneIndependent   bool                // BFD implementation does not share fate with its control plane
+       AuthPresent               bool                // Authentication Section is present and the session is to be authenticated
+       Demand                    bool                // Demand mode is active
+       Multipoint                bool                // For future point-to-multipoint extensions. Must always be zero
+       DetectMultiplier          BFDDetectMultiplier // Detection time multiplier
+       MyDiscriminator           BFDDiscriminator    // A unique, nonzero discriminator value
+       YourDiscriminator         BFDDiscriminator    // discriminator received from the remote system.
+       DesiredMinTxInterval      BFDTimeInterval     // Minimum interval, in microseconds,  the local system would like to use when transmitting BFD Control packets
+       RequiredMinRxInterval     BFDTimeInterval     // Minimum interval, in microseconds, between received BFD Control packets that this system is capable of supporting
+       RequiredMinEchoRxInterval BFDTimeInterval     // Minimum interval, in microseconds, between received BFD Echo packets that this system is capable of supporting
+       AuthHeader                *BFDAuthHeader      // Authentication data, variable length.
+}
+
+// Length returns the data length of a BFD Control message which
+// changes based on the presence and type of authentication
+// contained in the message
+func (d *BFD) Length() int {
+       if d.AuthPresent && (d.AuthHeader != nil) {
+               return bfdMinimumRecordSizeInBytes + d.AuthHeader.Length()
+       }
+
+       return bfdMinimumRecordSizeInBytes
+}
+
+// LayerType returns the layer type of the BFD object, which is LayerTypeBFD.
+func (d *BFD) LayerType() gopacket.LayerType {
+       return LayerTypeBFD
+}
+
+// decodeBFD analyses a byte slice and attempts to decode it as a BFD
+// control packet
+//
+// If it succeeds, it loads p with information about the packet and returns nil.
+// If it fails, it returns an error (non nil).
+//
+// This function is employed in layertypes.go to register the BFD layer.
+func decodeBFD(data []byte, p gopacket.PacketBuilder) error {
+
+       // Attempt to decode the byte slice.
+       d := &BFD{}
+       err := d.DecodeFromBytes(data, p)
+       if err != nil {
+               return err
+       }
+
+       // If the decoding worked, add the layer to the packet and set it
+       // as the application layer too, if there isn't already one.
+       p.AddLayer(d)
+       p.SetApplicationLayer(d)
+
+       return nil
+}
+
+// DecodeFromBytes analyses a byte slice and attempts to decode it as a BFD
+// control packet.
+//
+// Upon succeeds, it loads the BFD object with information about the packet
+// and returns nil.
+// Upon failure, it returns an error (non nil).
+func (d *BFD) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+       // If the data block is too short to be a BFD record, then return an error.
+       if len(data) < bfdMinimumRecordSizeInBytes {
+               df.SetTruncated()
+               return errors.New("BFD packet too short")
+       }
+
+       pLen := uint8(data[3])
+       if len(data) != int(pLen) {
+               return errors.New("BFD packet length does not match")
+       }
+
+       // BFD type embeds type BaseLayer which contains two fields:
+       //    Contents is supposed to contain the bytes of the data at this level.
+       //    Payload is supposed to contain the payload of this level.
+       // Here we set the baselayer to be the bytes of the BFD record.
+       d.BaseLayer = BaseLayer{Contents: data[:len(data)]}
+
+       // Extract the fields from the block of bytes.
+       // To make sense of this, refer to the packet diagram
+       // above and the section on endian conventions.
+
+       // The first few fields are all packed into the first 32 bits. Unpack them.
+       d.Version = BFDVersion(((data[0] & 0xE0) >> 5))
+       d.Diagnostic = BFDDiagnostic(data[0] & 0x1F)
+       data = data[1:]
+
+       d.State = BFDState((data[0] & 0xC0) >> 6)
+       d.Poll = data[0]&0x20 != 0
+       d.Final = data[0]&0x10 != 0
+       d.ControlPlaneIndependent = data[0]&0x08 != 0
+       d.AuthPresent = data[0]&0x04 != 0
+       d.Demand = data[0]&0x02 != 0
+       d.Multipoint = data[0]&0x01 != 0
+       data = data[1:]
+
+       data, d.DetectMultiplier = data[1:], BFDDetectMultiplier(data[0])
+       data, _ = data[1:], uint8(data[0]) // Consume length
+
+       // The remaining fields can just be copied in big endian order.
+       data, d.MyDiscriminator = data[4:], BFDDiscriminator(binary.BigEndian.Uint32(data[:4]))
+       data, d.YourDiscriminator = data[4:], BFDDiscriminator(binary.BigEndian.Uint32(data[:4]))
+       data, d.DesiredMinTxInterval = data[4:], BFDTimeInterval(binary.BigEndian.Uint32(data[:4]))
+       data, d.RequiredMinRxInterval = data[4:], BFDTimeInterval(binary.BigEndian.Uint32(data[:4]))
+       data, d.RequiredMinEchoRxInterval = data[4:], BFDTimeInterval(binary.BigEndian.Uint32(data[:4]))
+
+       if d.AuthPresent && (len(data) > 2) {
+               d.AuthHeader = &BFDAuthHeader{}
+               data, d.AuthHeader.AuthType = data[1:], BFDAuthType(data[0])
+               data, _ = data[1:], uint8(data[0]) // Consume length
+               data, d.AuthHeader.KeyID = data[1:], BFDAuthKeyID(data[0])
+
+               switch d.AuthHeader.AuthType {
+               case BFDAuthTypePassword:
+                       d.AuthHeader.Data = BFDAuthData(data)
+               case BFDAuthTypeKeyedMD5, BFDAuthTypeMeticulousKeyedMD5:
+                       // Skipped reserved byte
+                       data, d.AuthHeader.SequenceNumber = data[5:], BFDAuthSequenceNumber(binary.BigEndian.Uint32(data[1:5]))
+                       d.AuthHeader.Data = BFDAuthData(data)
+               case BFDAuthTypeKeyedSHA1, BFDAuthTypeMeticulousKeyedSHA1:
+                       // Skipped reserved byte
+                       data, d.AuthHeader.SequenceNumber = data[5:], BFDAuthSequenceNumber(binary.BigEndian.Uint32(data[1:5]))
+                       d.AuthHeader.Data = BFDAuthData(data)
+               }
+       }
+
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (d *BFD) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       data, err := b.PrependBytes(bfdMinimumRecordSizeInBytes)
+       if err != nil {
+               return err
+       }
+
+       // Pack the first few fields into the first 32 bits.
+       data[0] = byte(byte(d.Version<<5) | byte(d.Diagnostic))
+       h := uint8(0)
+       h |= (uint8(d.State) << 6)
+       h |= (uint8(bool2uint8(d.Poll)) << 5)
+       h |= (uint8(bool2uint8(d.Final)) << 4)
+       h |= (uint8(bool2uint8(d.ControlPlaneIndependent)) << 3)
+       h |= (uint8(bool2uint8(d.AuthPresent)) << 2)
+       h |= (uint8(bool2uint8(d.Demand)) << 1)
+       h |= uint8(bool2uint8(d.Multipoint))
+       data[1] = byte(h)
+       data[2] = byte(d.DetectMultiplier)
+       data[3] = byte(d.Length())
+
+       // The remaining fields can just be copied in big endian order.
+       binary.BigEndian.PutUint32(data[4:], uint32(d.MyDiscriminator))
+       binary.BigEndian.PutUint32(data[8:], uint32(d.YourDiscriminator))
+       binary.BigEndian.PutUint32(data[12:], uint32(d.DesiredMinTxInterval))
+       binary.BigEndian.PutUint32(data[16:], uint32(d.RequiredMinRxInterval))
+       binary.BigEndian.PutUint32(data[20:], uint32(d.RequiredMinEchoRxInterval))
+
+       if d.AuthPresent && (d.AuthHeader != nil) {
+               auth, err := b.AppendBytes(int(d.AuthHeader.Length()))
+               if err != nil {
+                       return err
+               }
+
+               auth[0] = byte(d.AuthHeader.AuthType)
+               auth[1] = byte(d.AuthHeader.Length())
+               auth[2] = byte(d.AuthHeader.KeyID)
+
+               switch d.AuthHeader.AuthType {
+               case BFDAuthTypePassword:
+                       copy(auth[3:], d.AuthHeader.Data)
+               case BFDAuthTypeKeyedMD5, BFDAuthTypeMeticulousKeyedMD5:
+                       auth[3] = byte(0)
+                       binary.BigEndian.PutUint32(auth[4:], uint32(d.AuthHeader.SequenceNumber))
+                       copy(auth[8:], d.AuthHeader.Data)
+               case BFDAuthTypeKeyedSHA1, BFDAuthTypeMeticulousKeyedSHA1:
+                       auth[3] = byte(0)
+                       binary.BigEndian.PutUint32(auth[4:], uint32(d.AuthHeader.SequenceNumber))
+                       copy(auth[8:], d.AuthHeader.Data)
+               }
+       }
+
+       return nil
+}
+
+// CanDecode returns a set of layers that BFD objects can decode.
+// As BFD objects can only decide the BFD layer, we can return just that layer.
+// Apparently a single layer type implements LayerClass.
+func (d *BFD) CanDecode() gopacket.LayerClass {
+       return LayerTypeBFD
+}
+
+// NextLayerType specifies the next layer that GoPacket should attempt to
+// analyse after this (BFD) layer. As BFD packets do not contain any payload
+// bytes, there are no further layers to analyse.
+func (d *BFD) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypeZero
+}
+
+// Payload returns an empty byte slice as BFD packets do not carry a payload
+func (d *BFD) Payload() []byte {
+       return nil
+}
+
+// bool2uint8 converts a bool to uint8
+func bool2uint8(b bool) uint8 {
+       if b {
+               return 1
+       }
+       return 0
+}
diff --git a/vendor/github.com/google/gopacket/layers/bfd_test.go b/vendor/github.com/google/gopacket/layers/bfd_test.go
new file mode 100644 (file)
index 0000000..1ac84cb
--- /dev/null
@@ -0,0 +1,289 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+//******************************************************************************
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "reflect"
+       "testing"
+)
+
+//******************************************************************************
+
+// checkBFD() uses the bfd.go code to analyse the packet bytes as an BFD Control
+// packet and generate an BFD object. It then compares the generated BFD object
+// with the one provided and throws an error if there is any difference.
+// The desc argument is output with any failure message to identify the test.
+func checkBFD(desc string, t *testing.T, packetBytes []byte, pExpectedBFD *BFD) {
+
+       // Analyse the packet bytes, yielding a new packet object p.
+       p := gopacket.NewPacket(packetBytes, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Errorf("Failed to decode packet %s: %v", desc, p.ErrorLayer().Error())
+       }
+
+       // Ensure that the packet analysis yielded the correct set of layers:
+       //    Link Layer        = Ethernet.
+       //    Network Layer     = IPv4.
+       //    Transport Layer   = UDP.
+       //    Application Layer = BFD.
+       checkLayers(p, []gopacket.LayerType{
+               LayerTypeEthernet,
+               LayerTypeIPv4,
+               LayerTypeUDP,
+               LayerTypeBFD}, t)
+
+       // Select the Application (BFD) layer.
+       pResultBFD, ok := p.ApplicationLayer().(*BFD)
+       if !ok {
+               t.Error("No BFD layer type found in packet in " + desc + ".")
+       }
+
+       // Compare the generated BFD object with the expected BFD object.
+       if !reflect.DeepEqual(pResultBFD, pExpectedBFD) {
+               t.Errorf("BFD packet processing failed for packet "+desc+
+                       ":\ngot  :\n%#v\n\nwant :\n%#v\n\n", pResultBFD, pExpectedBFD)
+       }
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{}
+       err := pResultBFD.SerializeTo(buf, opts)
+       if err != nil {
+               t.Error(err)
+       }
+       if !reflect.DeepEqual(pResultBFD.Contents, buf.Bytes()) {
+               t.Errorf("BFD packet serialization failed for packet "+desc+
+                       ":\ngot  :\n%+v\n\nwant :\n%+v\n\n", buf.Bytes(), pResultBFD.Contents)
+       }
+
+}
+
+func TestBFDNoAuth(t *testing.T) {
+       // This test packet is based off of the first BFD packet in the BFD sample capture
+       // pcap file bfd-raw-auth-simple.pcap on the Wireshark sample captures page:
+       //
+       //    https://wiki.wireshark.org/SampleCaptures
+       //    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-simple.pcap
+       //
+       // Changed to remove the authentication header, and adjust all of the lengths
+       var testPacketBFD = []byte{
+               0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,
+               0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x58, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,
+               0x00, 0x01, 0xc0, 0x00, 0x0e, 0xc8, 0x00, 0x20, 0x72, 0x31, 0x20, 0x40, 0x05, 0x18, 0x00, 0x00,
+               0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,
+               0x00, 0x00, 0x01, 0x4e, 0x0a, 0x90, 0x40,
+       }
+
+       // Assemble the BFD object that we expect to emerge from this test.
+       pExpectedBFD := &BFD{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{
+                               0x20, 0x40, 0x05, 0x18, 0x00, 0x00, 0x00, 0x01,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,
+                               0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,
+                       },
+                       Payload: nil,
+               },
+               Version:    1,
+               Diagnostic: BFDDiagnosticNone,
+               State:      BFDStateDown,
+               Poll:       false,
+               Final:      false,
+               ControlPlaneIndependent:   false,
+               AuthPresent:               false,
+               Demand:                    false,
+               Multipoint:                false,
+               DetectMultiplier:          5,
+               MyDiscriminator:           1,
+               YourDiscriminator:         0,
+               DesiredMinTxInterval:      1000000,
+               RequiredMinRxInterval:     1000000,
+               RequiredMinEchoRxInterval: 0,
+               AuthHeader:                nil,
+       }
+
+       checkBFD("testNoAuth", t, testPacketBFD, pExpectedBFD)
+}
+
+//******************************************************************************
+
+func TestBFDAuthTypePassword(t *testing.T) {
+
+       // This test packet is the first BFD packet in the BFD sample capture
+       // pcap file bfd-raw-auth-simple.pcap on the Wireshark sample captures page:
+       //
+       //    https://wiki.wireshark.org/SampleCaptures
+       //    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-simple.pcap
+       var testPacketBFD = []byte{
+               0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,
+               0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x58, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,
+               0x00, 0x01, 0xc0, 0x00, 0x0e, 0xc8, 0x00, 0x29, 0x72, 0x31, 0x20, 0x44, 0x05, 0x21, 0x00, 0x00,
+               0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,
+               0x00, 0x00, 0x01, 0x09, 0x02, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x0a, 0x90, 0x40,
+       }
+
+       // Assemble the BFD object that we expect to emerge from this test.
+       pExpectedBFD := &BFD{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{
+                               0x20, 0x44, 0x05, 0x21, 0x00, 0x00, 0x00, 0x01,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,
+                               0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,
+                               0x01, 0x09, 0x02, 0x73, 0x65, 0x63, 0x72, 0x65,
+                               0x74,
+                       },
+                       Payload: nil,
+               },
+               Version:    1,
+               Diagnostic: BFDDiagnosticNone,
+               State:      BFDStateDown,
+               Poll:       false,
+               Final:      false,
+               ControlPlaneIndependent:   false,
+               AuthPresent:               true,
+               Demand:                    false,
+               Multipoint:                false,
+               DetectMultiplier:          5,
+               MyDiscriminator:           1,
+               YourDiscriminator:         0,
+               DesiredMinTxInterval:      1000000,
+               RequiredMinRxInterval:     1000000,
+               RequiredMinEchoRxInterval: 0,
+               AuthHeader: &BFDAuthHeader{
+                       AuthType:       BFDAuthTypePassword,
+                       KeyID:          2,
+                       SequenceNumber: 0,
+                       Data:           []byte{'s', 'e', 'c', 'r', 'e', 't'},
+               },
+       }
+
+       checkBFD("testBFDAuthTypePassword", t, testPacketBFD, pExpectedBFD)
+}
+
+//******************************************************************************
+
+func TestBFDAuthTypeKeyedMD5(t *testing.T) {
+
+       // This test packet is the first BFD packet in the BFD sample capture
+       // pcap file bfd-raw-auth-md5.pcap on the Wireshark sample captures page:
+       //
+       //    https://wiki.wireshark.org/SampleCaptures
+       //    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-md5.pcap
+       var testPacketBFD = []byte{
+               0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,
+               0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x48, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,
+               0x00, 0x01, 0x04, 0x00, 0x0e, 0xc8, 0x00, 0x38, 0x6a, 0xcc, 0x20, 0x44, 0x05, 0x30, 0x00, 0x00,
+               0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,
+               0x00, 0x00, 0x02, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+               0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x3c, 0xc3, 0xf8, 0x21,
+       }
+
+       // Assemble the BFD object that we expect to emerge from this test.
+       pExpectedBFD := &BFD{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{
+                               0x20, 0x44, 0x05, 0x30, 0x00, 0x00, 0x00, 0x01,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,
+                               0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,
+                               0x02, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05,
+                               0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+                               0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+                       },
+                       Payload: nil,
+               },
+               Version:    1,
+               Diagnostic: BFDDiagnosticNone,
+               State:      BFDStateDown,
+               Poll:       false,
+               Final:      false,
+               ControlPlaneIndependent:   false,
+               AuthPresent:               true,
+               Demand:                    false,
+               Multipoint:                false,
+               DetectMultiplier:          5,
+               MyDiscriminator:           1,
+               YourDiscriminator:         0,
+               DesiredMinTxInterval:      1000000,
+               RequiredMinRxInterval:     1000000,
+               RequiredMinEchoRxInterval: 0,
+               AuthHeader: &BFDAuthHeader{
+                       AuthType:       BFDAuthTypeKeyedMD5,
+                       KeyID:          2,
+                       SequenceNumber: 5,
+                       Data: []byte{
+                               0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+                               0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+                       },
+               },
+       }
+
+       checkBFD("testBFDAuthTypeKeyedMD5", t, testPacketBFD, pExpectedBFD)
+}
+
+//******************************************************************************
+
+func TestBFDAuthTypeMeticulousKeyedSHA1(t *testing.T) {
+
+       // This test packet is the first BFD packet in the BFD sample capture
+       // pcap file bfd-raw-auth-sha1.pcap on the Wireshark sample captures page:
+       //
+       //    https://wiki.wireshark.org/SampleCaptures
+       //    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-sha1.pcap
+       var testPacketBFD = []byte{
+               0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00,
+               0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x45, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00,
+               0x00, 0x01, 0x04, 0x00, 0x0e, 0xc8, 0x00, 0x3c, 0x37, 0x8a, 0x20, 0x44, 0x05, 0x34, 0x00, 0x00,
+               0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00,
+               0x00, 0x00, 0x05, 0x1c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+               0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0xea, 0x6d,
+               0x1f, 0x21,
+       }
+
+       // Assemble the BFD object that we expect to emerge from this test.
+       pExpectedBFD := &BFD{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{
+                               0x20, 0x44, 0x05, 0x34, 0x00, 0x00, 0x00, 0x01,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40,
+                               0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00,
+                               0x05, 0x1c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05,
+                               0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+                               0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+                               0x17, 0x18, 0x19, 0x1a,
+                       },
+                       Payload: nil,
+               },
+               Version:    1,
+               Diagnostic: BFDDiagnosticNone,
+               State:      BFDStateDown,
+               Poll:       false,
+               Final:      false,
+               ControlPlaneIndependent:   false,
+               AuthPresent:               true,
+               Demand:                    false,
+               Multipoint:                false,
+               DetectMultiplier:          5,
+               MyDiscriminator:           1,
+               YourDiscriminator:         0,
+               DesiredMinTxInterval:      1000000,
+               RequiredMinRxInterval:     1000000,
+               RequiredMinEchoRxInterval: 0,
+               AuthHeader: &BFDAuthHeader{
+                       AuthType:       BFDAuthTypeMeticulousKeyedSHA1,
+                       KeyID:          2,
+                       SequenceNumber: 5,
+                       Data: []byte{
+                               0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+                               0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+                               0x17, 0x18, 0x19, 0x1a,
+                       },
+               },
+       }
+
+       checkBFD("TestBFDAuthTypeMeticulousKeyedSHA1", t, testPacketBFD, pExpectedBFD)
+}
diff --git a/vendor/github.com/google/gopacket/layers/cdp.go b/vendor/github.com/google/gopacket/layers/cdp.go
new file mode 100644 (file)
index 0000000..d67203e
--- /dev/null
@@ -0,0 +1,651 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Enum types courtesy of...
+//   http://search.cpan.org/~mchapman/Net-CDP-0.09/lib/Net/CDP.pm
+//   https://code.google.com/p/ladvd/
+//   http://anonsvn.wireshark.org/viewvc/releases/wireshark-1.8.6/epan/dissectors/packet-cdp.c
+
+package layers
+
+import (
+       "encoding/binary"
+       "fmt"
+       "net"
+
+       "github.com/google/gopacket"
+)
+
+// CDPTLVType is the type of each TLV value in a CiscoDiscovery packet.
+type CDPTLVType uint16
+
+// CDPTLVType values.
+const (
+       CDPTLVDevID              CDPTLVType = 0x0001
+       CDPTLVAddress            CDPTLVType = 0x0002
+       CDPTLVPortID             CDPTLVType = 0x0003
+       CDPTLVCapabilities       CDPTLVType = 0x0004
+       CDPTLVVersion            CDPTLVType = 0x0005
+       CDPTLVPlatform           CDPTLVType = 0x0006
+       CDPTLVIPPrefix           CDPTLVType = 0x0007
+       CDPTLVHello              CDPTLVType = 0x0008
+       CDPTLVVTPDomain          CDPTLVType = 0x0009
+       CDPTLVNativeVLAN         CDPTLVType = 0x000a
+       CDPTLVFullDuplex         CDPTLVType = 0x000b
+       CDPTLVVLANReply          CDPTLVType = 0x000e
+       CDPTLVVLANQuery          CDPTLVType = 0x000f
+       CDPTLVPower              CDPTLVType = 0x0010
+       CDPTLVMTU                CDPTLVType = 0x0011
+       CDPTLVExtendedTrust      CDPTLVType = 0x0012
+       CDPTLVUntrustedCOS       CDPTLVType = 0x0013
+       CDPTLVSysName            CDPTLVType = 0x0014
+       CDPTLVSysOID             CDPTLVType = 0x0015
+       CDPTLVMgmtAddresses      CDPTLVType = 0x0016
+       CDPTLVLocation           CDPTLVType = 0x0017
+       CDPTLVExternalPortID     CDPTLVType = 0x0018
+       CDPTLVPowerRequested     CDPTLVType = 0x0019
+       CDPTLVPowerAvailable     CDPTLVType = 0x001a
+       CDPTLVPortUnidirectional CDPTLVType = 0x001b
+       CDPTLVEnergyWise         CDPTLVType = 0x001d
+       CDPTLVSparePairPOE       CDPTLVType = 0x001f
+)
+
+// CiscoDiscoveryValue is a TLV value inside a CiscoDiscovery packet layer.
+type CiscoDiscoveryValue struct {
+       Type   CDPTLVType
+       Length uint16
+       Value  []byte
+}
+
+// CiscoDiscovery is a packet layer containing the Cisco Discovery Protocol.
+// See http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#31885
+type CiscoDiscovery struct {
+       BaseLayer
+       Version  byte
+       TTL      byte
+       Checksum uint16
+       Values   []CiscoDiscoveryValue
+}
+
+// CDPCapability is the set of capabilities advertised by a CDP device.
+type CDPCapability uint32
+
+// CDPCapability values.
+const (
+       CDPCapMaskRouter     CDPCapability = 0x0001
+       CDPCapMaskTBBridge   CDPCapability = 0x0002
+       CDPCapMaskSPBridge   CDPCapability = 0x0004
+       CDPCapMaskSwitch     CDPCapability = 0x0008
+       CDPCapMaskHost       CDPCapability = 0x0010
+       CDPCapMaskIGMPFilter CDPCapability = 0x0020
+       CDPCapMaskRepeater   CDPCapability = 0x0040
+       CDPCapMaskPhone      CDPCapability = 0x0080
+       CDPCapMaskRemote     CDPCapability = 0x0100
+)
+
+// CDPCapabilities represents the capabilities of a device
+type CDPCapabilities struct {
+       L3Router        bool
+       TBBridge        bool
+       SPBridge        bool
+       L2Switch        bool
+       IsHost          bool
+       IGMPFilter      bool
+       L1Repeater      bool
+       IsPhone         bool
+       RemotelyManaged bool
+}
+
+// CDP Power-over-Ethernet values.
+const (
+       CDPPoEFourWire  byte = 0x01
+       CDPPoEPDArch    byte = 0x02
+       CDPPoEPDRequest byte = 0x04
+       CDPPoEPSE       byte = 0x08
+)
+
+// CDPSparePairPoE provides information on PoE.
+type CDPSparePairPoE struct {
+       PSEFourWire  bool // Supported / Not supported
+       PDArchShared bool // Shared / Independent
+       PDRequestOn  bool // On / Off
+       PSEOn        bool // On / Off
+}
+
+// CDPVLANDialogue encapsulates a VLAN Query/Reply
+type CDPVLANDialogue struct {
+       ID   uint8
+       VLAN uint16
+}
+
+// CDPPowerDialogue encapsulates a Power Query/Reply
+type CDPPowerDialogue struct {
+       ID     uint16
+       MgmtID uint16
+       Values []uint32
+}
+
+// CDPLocation provides location information for a CDP device.
+type CDPLocation struct {
+       Type     uint8 // Undocumented
+       Location string
+}
+
+// CDPHello is a Cisco Hello message (undocumented, hence the "Unknown" fields)
+type CDPHello struct {
+       OUI              []byte
+       ProtocolID       uint16
+       ClusterMaster    net.IP
+       Unknown1         net.IP
+       Version          byte
+       SubVersion       byte
+       Status           byte
+       Unknown2         byte
+       ClusterCommander net.HardwareAddr
+       SwitchMAC        net.HardwareAddr
+       Unknown3         byte
+       ManagementVLAN   uint16
+}
+
+// CDPEnergyWiseSubtype is used within CDP to define TLV values.
+type CDPEnergyWiseSubtype uint32
+
+// CDPEnergyWiseSubtype values.
+const (
+       CDPEnergyWiseRole    CDPEnergyWiseSubtype = 0x00000007
+       CDPEnergyWiseDomain  CDPEnergyWiseSubtype = 0x00000008
+       CDPEnergyWiseName    CDPEnergyWiseSubtype = 0x00000009
+       CDPEnergyWiseReplyTo CDPEnergyWiseSubtype = 0x00000017
+)
+
+// CDPEnergyWise is used by CDP to monitor and control power usage.
+type CDPEnergyWise struct {
+       EncryptedData  []byte
+       Unknown1       uint32
+       SequenceNumber uint32
+       ModelNumber    string
+       Unknown2       uint16
+       HardwareID     string
+       SerialNum      string
+       Unknown3       []byte
+       Role           string
+       Domain         string
+       Name           string
+       ReplyUnknown1  []byte
+       ReplyPort      []byte
+       ReplyAddress   []byte
+       ReplyUnknown2  []byte
+       ReplyUnknown3  []byte
+}
+
+// CiscoDiscoveryInfo represents the decoded details for a set of CiscoDiscoveryValues
+type CiscoDiscoveryInfo struct {
+       BaseLayer
+       CDPHello
+       DeviceID         string
+       Addresses        []net.IP
+       PortID           string
+       Capabilities     CDPCapabilities
+       Version          string
+       Platform         string
+       IPPrefixes       []net.IPNet
+       VTPDomain        string
+       NativeVLAN       uint16
+       FullDuplex       bool
+       VLANReply        CDPVLANDialogue
+       VLANQuery        CDPVLANDialogue
+       PowerConsumption uint16
+       MTU              uint32
+       ExtendedTrust    uint8
+       UntrustedCOS     uint8
+       SysName          string
+       SysOID           string
+       MgmtAddresses    []net.IP
+       Location         CDPLocation
+       PowerRequest     CDPPowerDialogue
+       PowerAvailable   CDPPowerDialogue
+       SparePairPoe     CDPSparePairPoE
+       EnergyWise       CDPEnergyWise
+       Unknown          []CiscoDiscoveryValue
+}
+
+// LayerType returns gopacket.LayerTypeCiscoDiscovery.
+func (c *CiscoDiscovery) LayerType() gopacket.LayerType {
+       return LayerTypeCiscoDiscovery
+}
+
+func decodeCiscoDiscovery(data []byte, p gopacket.PacketBuilder) error {
+       c := &CiscoDiscovery{
+               Version:  data[0],
+               TTL:      data[1],
+               Checksum: binary.BigEndian.Uint16(data[2:4]),
+       }
+       if c.Version != 1 && c.Version != 2 {
+               return fmt.Errorf("Invalid CiscoDiscovery version number %d", c.Version)
+       }
+       var err error
+       c.Values, err = decodeCiscoDiscoveryTLVs(data[4:])
+       if err != nil {
+               return err
+       }
+       c.Contents = data[0:4]
+       c.Payload = data[4:]
+       p.AddLayer(c)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeCiscoDiscoveryInfo))
+}
+
+// LayerType returns gopacket.LayerTypeCiscoDiscoveryInfo.
+func (c *CiscoDiscoveryInfo) LayerType() gopacket.LayerType {
+       return LayerTypeCiscoDiscoveryInfo
+}
+
+func decodeCiscoDiscoveryTLVs(data []byte) (values []CiscoDiscoveryValue, err error) {
+       for len(data) > 0 {
+               val := CiscoDiscoveryValue{
+                       Type:   CDPTLVType(binary.BigEndian.Uint16(data[:2])),
+                       Length: binary.BigEndian.Uint16(data[2:4]),
+               }
+               if val.Length < 4 {
+                       err = fmt.Errorf("Invalid CiscoDiscovery value length %d", val.Length)
+                       break
+               }
+               val.Value = data[4:val.Length]
+               values = append(values, val)
+               data = data[val.Length:]
+       }
+       return
+}
+
+func decodeCiscoDiscoveryInfo(data []byte, p gopacket.PacketBuilder) error {
+       var err error
+       info := &CiscoDiscoveryInfo{BaseLayer: BaseLayer{Contents: data}}
+       p.AddLayer(info)
+       values, err := decodeCiscoDiscoveryTLVs(data)
+       if err != nil { // Unlikely, as parent decode will fail, but better safe...
+               return err
+       }
+       for _, val := range values {
+               switch val.Type {
+               case CDPTLVDevID:
+                       info.DeviceID = string(val.Value)
+               case CDPTLVAddress:
+                       if err = checkCDPTLVLen(val, 4); err != nil {
+                               return err
+                       }
+                       info.Addresses, err = decodeAddresses(val.Value)
+                       if err != nil {
+                               return err
+                       }
+               case CDPTLVPortID:
+                       info.PortID = string(val.Value)
+               case CDPTLVCapabilities:
+                       if err = checkCDPTLVLen(val, 4); err != nil {
+                               return err
+                       }
+                       val := CDPCapability(binary.BigEndian.Uint32(val.Value[0:4]))
+                       info.Capabilities.L3Router = (val&CDPCapMaskRouter > 0)
+                       info.Capabilities.TBBridge = (val&CDPCapMaskTBBridge > 0)
+                       info.Capabilities.SPBridge = (val&CDPCapMaskSPBridge > 0)
+                       info.Capabilities.L2Switch = (val&CDPCapMaskSwitch > 0)
+                       info.Capabilities.IsHost = (val&CDPCapMaskHost > 0)
+                       info.Capabilities.IGMPFilter = (val&CDPCapMaskIGMPFilter > 0)
+                       info.Capabilities.L1Repeater = (val&CDPCapMaskRepeater > 0)
+                       info.Capabilities.IsPhone = (val&CDPCapMaskPhone > 0)
+                       info.Capabilities.RemotelyManaged = (val&CDPCapMaskRemote > 0)
+               case CDPTLVVersion:
+                       info.Version = string(val.Value)
+               case CDPTLVPlatform:
+                       info.Platform = string(val.Value)
+               case CDPTLVIPPrefix:
+                       v := val.Value
+                       l := len(v)
+                       if l%5 == 0 && l >= 5 {
+                               for len(v) > 0 {
+                                       _, ipnet, _ := net.ParseCIDR(fmt.Sprintf("%d.%d.%d.%d/%d", v[0], v[1], v[2], v[3], v[4]))
+                                       info.IPPrefixes = append(info.IPPrefixes, *ipnet)
+                                       v = v[5:]
+                               }
+                       } else {
+                               return fmt.Errorf("Invalid TLV %v length %d", val.Type, len(val.Value))
+                       }
+               case CDPTLVHello:
+                       if err = checkCDPTLVLen(val, 32); err != nil {
+                               return err
+                       }
+                       v := val.Value
+                       info.CDPHello.OUI = v[0:3]
+                       info.CDPHello.ProtocolID = binary.BigEndian.Uint16(v[3:5])
+                       info.CDPHello.ClusterMaster = v[5:9]
+                       info.CDPHello.Unknown1 = v[9:13]
+                       info.CDPHello.Version = v[13]
+                       info.CDPHello.SubVersion = v[14]
+                       info.CDPHello.Status = v[15]
+                       info.CDPHello.Unknown2 = v[16]
+                       info.CDPHello.ClusterCommander = v[17:23]
+                       info.CDPHello.SwitchMAC = v[23:29]
+                       info.CDPHello.Unknown3 = v[29]
+                       info.CDPHello.ManagementVLAN = binary.BigEndian.Uint16(v[30:32])
+               case CDPTLVVTPDomain:
+                       info.VTPDomain = string(val.Value)
+               case CDPTLVNativeVLAN:
+                       if err = checkCDPTLVLen(val, 2); err != nil {
+                               return err
+                       }
+                       info.NativeVLAN = binary.BigEndian.Uint16(val.Value[0:2])
+               case CDPTLVFullDuplex:
+                       if err = checkCDPTLVLen(val, 1); err != nil {
+                               return err
+                       }
+                       info.FullDuplex = (val.Value[0] == 1)
+               case CDPTLVVLANReply:
+                       if err = checkCDPTLVLen(val, 3); err != nil {
+                               return err
+                       }
+                       info.VLANReply.ID = uint8(val.Value[0])
+                       info.VLANReply.VLAN = binary.BigEndian.Uint16(val.Value[1:3])
+               case CDPTLVVLANQuery:
+                       if err = checkCDPTLVLen(val, 3); err != nil {
+                               return err
+                       }
+                       info.VLANQuery.ID = uint8(val.Value[0])
+                       info.VLANQuery.VLAN = binary.BigEndian.Uint16(val.Value[1:3])
+               case CDPTLVPower:
+                       if err = checkCDPTLVLen(val, 2); err != nil {
+                               return err
+                       }
+                       info.PowerConsumption = binary.BigEndian.Uint16(val.Value[0:2])
+               case CDPTLVMTU:
+                       if err = checkCDPTLVLen(val, 4); err != nil {
+                               return err
+                       }
+                       info.MTU = binary.BigEndian.Uint32(val.Value[0:4])
+               case CDPTLVExtendedTrust:
+                       if err = checkCDPTLVLen(val, 1); err != nil {
+                               return err
+                       }
+                       info.ExtendedTrust = uint8(val.Value[0])
+               case CDPTLVUntrustedCOS:
+                       if err = checkCDPTLVLen(val, 1); err != nil {
+                               return err
+                       }
+                       info.UntrustedCOS = uint8(val.Value[0])
+               case CDPTLVSysName:
+                       info.SysName = string(val.Value)
+               case CDPTLVSysOID:
+                       info.SysOID = string(val.Value)
+               case CDPTLVMgmtAddresses:
+                       if err = checkCDPTLVLen(val, 4); err != nil {
+                               return err
+                       }
+                       info.MgmtAddresses, err = decodeAddresses(val.Value)
+                       if err != nil {
+                               return err
+                       }
+               case CDPTLVLocation:
+                       if err = checkCDPTLVLen(val, 2); err != nil {
+                               return err
+                       }
+                       info.Location.Type = uint8(val.Value[0])
+                       info.Location.Location = string(val.Value[1:])
+
+                       //              case CDPTLVLExternalPortID:
+                       //                      Undocumented
+               case CDPTLVPowerRequested:
+                       if err = checkCDPTLVLen(val, 4); err != nil {
+                               return err
+                       }
+                       info.PowerRequest.ID = binary.BigEndian.Uint16(val.Value[0:2])
+                       info.PowerRequest.MgmtID = binary.BigEndian.Uint16(val.Value[2:4])
+                       for n := 4; n < len(val.Value); n += 4 {
+                               info.PowerRequest.Values = append(info.PowerRequest.Values, binary.BigEndian.Uint32(val.Value[n:n+4]))
+                       }
+               case CDPTLVPowerAvailable:
+                       if err = checkCDPTLVLen(val, 4); err != nil {
+                               return err
+                       }
+                       info.PowerAvailable.ID = binary.BigEndian.Uint16(val.Value[0:2])
+                       info.PowerAvailable.MgmtID = binary.BigEndian.Uint16(val.Value[2:4])
+                       for n := 4; n < len(val.Value); n += 4 {
+                               info.PowerAvailable.Values = append(info.PowerAvailable.Values, binary.BigEndian.Uint32(val.Value[n:n+4]))
+                       }
+                       //              case CDPTLVPortUnidirectional
+                       //                      Undocumented
+               case CDPTLVEnergyWise:
+                       if err = checkCDPTLVLen(val, 72); err != nil {
+                               return err
+                       }
+                       info.EnergyWise.EncryptedData = val.Value[0:20]
+                       info.EnergyWise.Unknown1 = binary.BigEndian.Uint32(val.Value[20:24])
+                       info.EnergyWise.SequenceNumber = binary.BigEndian.Uint32(val.Value[24:28])
+                       info.EnergyWise.ModelNumber = string(val.Value[28:44])
+                       info.EnergyWise.Unknown2 = binary.BigEndian.Uint16(val.Value[44:46])
+                       info.EnergyWise.HardwareID = string(val.Value[46:49])
+                       info.EnergyWise.SerialNum = string(val.Value[49:60])
+                       info.EnergyWise.Unknown3 = val.Value[60:68]
+                       tlvLen := binary.BigEndian.Uint16(val.Value[68:70])
+                       tlvNum := binary.BigEndian.Uint16(val.Value[70:72])
+                       data := val.Value[72:]
+                       if len(data) < int(tlvLen) {
+                               return fmt.Errorf("Invalid TLV length %d vs %d", tlvLen, len(data))
+                       }
+                       numSeen := 0
+                       for len(data) > 8 {
+                               numSeen++
+                               if numSeen > int(tlvNum) { // Too many TLV's ?
+                                       return fmt.Errorf("Too many TLV's - wanted %d, saw %d", tlvNum, numSeen)
+                               }
+                               tType := CDPEnergyWiseSubtype(binary.BigEndian.Uint32(data[0:4]))
+                               tLen := int(binary.BigEndian.Uint32(data[4:8]))
+                               if tLen > len(data)-8 {
+                                       return fmt.Errorf("Invalid TLV length %d vs %d", tLen, len(data)-8)
+                               }
+                               data = data[8:]
+                               switch tType {
+                               case CDPEnergyWiseRole:
+                                       info.EnergyWise.Role = string(data[:])
+                               case CDPEnergyWiseDomain:
+                                       info.EnergyWise.Domain = string(data[:])
+                               case CDPEnergyWiseName:
+                                       info.EnergyWise.Name = string(data[:])
+                               case CDPEnergyWiseReplyTo:
+                                       if len(data) >= 18 {
+                                               info.EnergyWise.ReplyUnknown1 = data[0:2]
+                                               info.EnergyWise.ReplyPort = data[2:4]
+                                               info.EnergyWise.ReplyAddress = data[4:8]
+                                               info.EnergyWise.ReplyUnknown2 = data[8:10]
+                                               info.EnergyWise.ReplyUnknown3 = data[10:14]
+                                       }
+                               }
+                               data = data[tLen:]
+                       }
+               case CDPTLVSparePairPOE:
+                       if err = checkCDPTLVLen(val, 1); err != nil {
+                               return err
+                       }
+                       v := val.Value[0]
+                       info.SparePairPoe.PSEFourWire = (v&CDPPoEFourWire > 0)
+                       info.SparePairPoe.PDArchShared = (v&CDPPoEPDArch > 0)
+                       info.SparePairPoe.PDRequestOn = (v&CDPPoEPDRequest > 0)
+                       info.SparePairPoe.PSEOn = (v&CDPPoEPSE > 0)
+               default:
+                       info.Unknown = append(info.Unknown, val)
+               }
+       }
+       return nil
+}
+
+// CDP Protocol Types
+const (
+       CDPProtocolTypeNLPID byte = 1
+       CDPProtocolType802_2 byte = 2
+)
+
+// CDPAddressType is used to define TLV values within CDP addresses.
+type CDPAddressType uint64
+
+// CDP Address types.
+const (
+       CDPAddressTypeCLNP      CDPAddressType = 0x81
+       CDPAddressTypeIPV4      CDPAddressType = 0xcc
+       CDPAddressTypeIPV6      CDPAddressType = 0xaaaa030000000800
+       CDPAddressTypeDECNET    CDPAddressType = 0xaaaa030000006003
+       CDPAddressTypeAPPLETALK CDPAddressType = 0xaaaa03000000809b
+       CDPAddressTypeIPX       CDPAddressType = 0xaaaa030000008137
+       CDPAddressTypeVINES     CDPAddressType = 0xaaaa0300000080c4
+       CDPAddressTypeXNS       CDPAddressType = 0xaaaa030000000600
+       CDPAddressTypeAPOLLO    CDPAddressType = 0xaaaa030000008019
+)
+
+func decodeAddresses(v []byte) (addresses []net.IP, err error) {
+       numaddr := int(binary.BigEndian.Uint32(v[0:4]))
+       if numaddr < 1 {
+               return nil, fmt.Errorf("Invalid Address TLV number %d", numaddr)
+       }
+       v = v[4:]
+       if len(v) < numaddr*8 {
+               return nil, fmt.Errorf("Invalid Address TLV length %d", len(v))
+       }
+       for i := 0; i < numaddr; i++ {
+               prottype := v[0]
+               if prottype != CDPProtocolTypeNLPID && prottype != CDPProtocolType802_2 { // invalid protocol type
+                       return nil, fmt.Errorf("Invalid Address Protocol %d", prottype)
+               }
+               protlen := int(v[1])
+               if (prottype == CDPProtocolTypeNLPID && protlen != 1) ||
+                       (prottype == CDPProtocolType802_2 && protlen != 3 && protlen != 8) { // invalid length
+                       return nil, fmt.Errorf("Invalid Address Protocol length %d", protlen)
+               }
+               plen := make([]byte, 8)
+               copy(plen[8-protlen:], v[2:2+protlen])
+               protocol := CDPAddressType(binary.BigEndian.Uint64(plen))
+               v = v[2+protlen:]
+               addrlen := binary.BigEndian.Uint16(v[0:2])
+               ab := v[2 : 2+addrlen]
+               if protocol == CDPAddressTypeIPV4 && addrlen == 4 {
+                       addresses = append(addresses, net.IPv4(ab[0], ab[1], ab[2], ab[3]))
+               } else if protocol == CDPAddressTypeIPV6 && addrlen == 16 {
+                       addresses = append(addresses, net.IP(ab))
+               } else {
+                       // only handle IPV4 & IPV6 for now
+               }
+               v = v[2+addrlen:]
+               if len(v) < 8 {
+                       break
+               }
+       }
+       return
+}
+
+func (t CDPTLVType) String() (s string) {
+       switch t {
+       case CDPTLVDevID:
+               s = "Device ID"
+       case CDPTLVAddress:
+               s = "Addresses"
+       case CDPTLVPortID:
+               s = "Port ID"
+       case CDPTLVCapabilities:
+               s = "Capabilities"
+       case CDPTLVVersion:
+               s = "Software Version"
+       case CDPTLVPlatform:
+               s = "Platform"
+       case CDPTLVIPPrefix:
+               s = "IP Prefix"
+       case CDPTLVHello:
+               s = "Protocol Hello"
+       case CDPTLVVTPDomain:
+               s = "VTP Management Domain"
+       case CDPTLVNativeVLAN:
+               s = "Native VLAN"
+       case CDPTLVFullDuplex:
+               s = "Full Duplex"
+       case CDPTLVVLANReply:
+               s = "VoIP VLAN Reply"
+       case CDPTLVVLANQuery:
+               s = "VLANQuery"
+       case CDPTLVPower:
+               s = "Power consumption"
+       case CDPTLVMTU:
+               s = "MTU"
+       case CDPTLVExtendedTrust:
+               s = "Extended Trust Bitmap"
+       case CDPTLVUntrustedCOS:
+               s = "Untrusted Port CoS"
+       case CDPTLVSysName:
+               s = "System Name"
+       case CDPTLVSysOID:
+               s = "System OID"
+       case CDPTLVMgmtAddresses:
+               s = "Management Addresses"
+       case CDPTLVLocation:
+               s = "Location"
+       case CDPTLVExternalPortID:
+               s = "External Port ID"
+       case CDPTLVPowerRequested:
+               s = "Power Requested"
+       case CDPTLVPowerAvailable:
+               s = "Power Available"
+       case CDPTLVPortUnidirectional:
+               s = "Port Unidirectional"
+       case CDPTLVEnergyWise:
+               s = "Energy Wise"
+       case CDPTLVSparePairPOE:
+               s = "Spare Pair POE"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (a CDPAddressType) String() (s string) {
+       switch a {
+       case CDPAddressTypeCLNP:
+               s = "Connectionless Network Protocol"
+       case CDPAddressTypeIPV4:
+               s = "IPv4"
+       case CDPAddressTypeIPV6:
+               s = "IPv6"
+       case CDPAddressTypeDECNET:
+               s = "DECnet Phase IV"
+       case CDPAddressTypeAPPLETALK:
+               s = "Apple Talk"
+       case CDPAddressTypeIPX:
+               s = "Novell IPX"
+       case CDPAddressTypeVINES:
+               s = "Banyan VINES"
+       case CDPAddressTypeXNS:
+               s = "Xerox Network Systems"
+       case CDPAddressTypeAPOLLO:
+               s = "Apollo"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t CDPEnergyWiseSubtype) String() (s string) {
+       switch t {
+       case CDPEnergyWiseRole:
+               s = "Role"
+       case CDPEnergyWiseDomain:
+               s = "Domain"
+       case CDPEnergyWiseName:
+               s = "Name"
+       case CDPEnergyWiseReplyTo:
+               s = "ReplyTo"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func checkCDPTLVLen(v CiscoDiscoveryValue, l int) (err error) {
+       if len(v.Value) < l {
+               err = fmt.Errorf("Invalid TLV %v length %d", v.Type, len(v.Value))
+       }
+       return
+}
diff --git a/vendor/github.com/google/gopacket/layers/ctp.go b/vendor/github.com/google/gopacket/layers/ctp.go
new file mode 100644 (file)
index 0000000..8287584
--- /dev/null
@@ -0,0 +1,109 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "fmt"
+       "github.com/google/gopacket"
+)
+
+// EthernetCTPFunction is the function code used by the EthernetCTP protocol to identify each
+// EthernetCTP layer.
+type EthernetCTPFunction uint16
+
+// EthernetCTPFunction values.
+const (
+       EthernetCTPFunctionReply       EthernetCTPFunction = 1
+       EthernetCTPFunctionForwardData EthernetCTPFunction = 2
+)
+
+// EthernetCTP implements the EthernetCTP protocol, see http://www.mit.edu/people/jhawk/ctp.html.
+// We split EthernetCTP up into the top-level EthernetCTP layer, followed by zero or more
+// EthernetCTPForwardData layers, followed by a final EthernetCTPReply layer.
+type EthernetCTP struct {
+       BaseLayer
+       SkipCount uint16
+}
+
+// LayerType returns gopacket.LayerTypeEthernetCTP.
+func (c *EthernetCTP) LayerType() gopacket.LayerType {
+       return LayerTypeEthernetCTP
+}
+
+// EthernetCTPForwardData is the ForwardData layer inside EthernetCTP.  See EthernetCTP's docs for more
+// details.
+type EthernetCTPForwardData struct {
+       BaseLayer
+       Function       EthernetCTPFunction
+       ForwardAddress []byte
+}
+
+// LayerType returns gopacket.LayerTypeEthernetCTPForwardData.
+func (c *EthernetCTPForwardData) LayerType() gopacket.LayerType {
+       return LayerTypeEthernetCTPForwardData
+}
+
+// ForwardEndpoint returns the EthernetCTPForwardData ForwardAddress as an endpoint.
+func (c *EthernetCTPForwardData) ForwardEndpoint() gopacket.Endpoint {
+       return gopacket.NewEndpoint(EndpointMAC, c.ForwardAddress)
+}
+
+// EthernetCTPReply is the Reply layer inside EthernetCTP.  See EthernetCTP's docs for more details.
+type EthernetCTPReply struct {
+       BaseLayer
+       Function      EthernetCTPFunction
+       ReceiptNumber uint16
+       Data          []byte
+}
+
+// LayerType returns gopacket.LayerTypeEthernetCTPReply.
+func (c *EthernetCTPReply) LayerType() gopacket.LayerType {
+       return LayerTypeEthernetCTPReply
+}
+
+// Payload returns the EthernetCTP reply's Data bytes.
+func (c *EthernetCTPReply) Payload() []byte { return c.Data }
+
+func decodeEthernetCTP(data []byte, p gopacket.PacketBuilder) error {
+       c := &EthernetCTP{
+               SkipCount: binary.LittleEndian.Uint16(data[:2]),
+               BaseLayer: BaseLayer{data[:2], data[2:]},
+       }
+       if c.SkipCount%2 != 0 {
+               return fmt.Errorf("EthernetCTP skip count is odd: %d", c.SkipCount)
+       }
+       p.AddLayer(c)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeEthernetCTPFromFunctionType))
+}
+
+// decodeEthernetCTPFromFunctionType reads in the first 2 bytes to determine the EthernetCTP
+// layer type to decode next, then decodes based on that.
+func decodeEthernetCTPFromFunctionType(data []byte, p gopacket.PacketBuilder) error {
+       function := EthernetCTPFunction(binary.LittleEndian.Uint16(data[:2]))
+       switch function {
+       case EthernetCTPFunctionReply:
+               reply := &EthernetCTPReply{
+                       Function:      function,
+                       ReceiptNumber: binary.LittleEndian.Uint16(data[2:4]),
+                       Data:          data[4:],
+                       BaseLayer:     BaseLayer{data, nil},
+               }
+               p.AddLayer(reply)
+               p.SetApplicationLayer(reply)
+               return nil
+       case EthernetCTPFunctionForwardData:
+               forward := &EthernetCTPForwardData{
+                       Function:       function,
+                       ForwardAddress: data[2:8],
+                       BaseLayer:      BaseLayer{data[:8], data[8:]},
+               }
+               p.AddLayer(forward)
+               return p.NextDecoder(gopacket.DecodeFunc(decodeEthernetCTPFromFunctionType))
+       }
+       return fmt.Errorf("Unknown EthernetCTP function type %v", function)
+}
diff --git a/vendor/github.com/google/gopacket/layers/decode_test.go b/vendor/github.com/google/gopacket/layers/decode_test.go
new file mode 100644 (file)
index 0000000..ecfbff7
--- /dev/null
@@ -0,0 +1,1234 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "bytes"
+       "encoding/hex"
+       "fmt"
+       "net"
+       "reflect"
+       "strings"
+       "testing"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/bytediff"
+)
+
+var testSimpleTCPPacket = []byte{
+       0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49,
+       0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06,
+       0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7,
+       0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18,
+       0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77,
+       0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,
+       0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f,
+       0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68,
+       0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
+       0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x61,
+       0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41,
+       0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,
+       0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20,
+       0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34,
+       0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69,
+       0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54,
+       0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63,
+       0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31,
+       0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20,
+       0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32,
+       0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65,
+       0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c,
+       0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d,
+       0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+       0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d,
+       0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e,
+       0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e,
+       0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70,
+       0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63,
+       0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61,
+       0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55,
+       0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a,
+       0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73,
+       0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39,
+       0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30,
+       0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a,
+       0x0d, 0x0a,
+}
+
+var testDecodeOptions = gopacket.DecodeOptions{
+       SkipDecodeRecovery: true,
+}
+
+// Benchmarks for actual gopacket code
+
+func BenchmarkLayerClassSliceContains(b *testing.B) {
+       lc := gopacket.NewLayerClassSlice([]gopacket.LayerType{LayerTypeTCP, LayerTypeEthernet})
+       for i := 0; i < b.N; i++ {
+               _ = lc.Contains(LayerTypeTCP)
+       }
+}
+
+func BenchmarkLayerClassMapContains(b *testing.B) {
+       lc := gopacket.NewLayerClassMap([]gopacket.LayerType{LayerTypeTCP, LayerTypeEthernet})
+       for i := 0; i < b.N; i++ {
+               _ = lc.Contains(LayerTypeTCP)
+       }
+}
+
+func BenchmarkLazyNoCopyEthLayer(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeEthernet)
+       }
+}
+
+func BenchmarkLazyNoCopyIPLayer(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeIPv4)
+       }
+}
+
+func BenchmarkLazyNoCopyTCPLayer(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeTCP)
+       }
+}
+
+func BenchmarkLazyNoCopyAllLayers(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layers()
+       }
+}
+
+func BenchmarkDefault(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.Default)
+       }
+}
+
+func getSerializeLayers() []gopacket.SerializableLayer {
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+       slayers := []gopacket.SerializableLayer{}
+       for _, l := range p.Layers() {
+               slayers = append(slayers, l.(gopacket.SerializableLayer))
+       }
+       p.Layer(LayerTypeTCP).(*TCP).SetNetworkLayerForChecksum(
+               p.NetworkLayer())
+       return slayers
+}
+
+func BenchmarkSerializeTcpNoOptions(b *testing.B) {
+       slayers := getSerializeLayers()
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{}
+       for i := 0; i < b.N; i++ {
+               gopacket.SerializeLayers(buf, opts, slayers...)
+       }
+}
+
+func BenchmarkSerializeTcpFixLengths(b *testing.B) {
+       slayers := getSerializeLayers()
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true}
+       for i := 0; i < b.N; i++ {
+               gopacket.SerializeLayers(buf, opts, slayers...)
+       }
+}
+
+func BenchmarkSerializeTcpComputeChecksums(b *testing.B) {
+       slayers := getSerializeLayers()
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{ComputeChecksums: true}
+       for i := 0; i < b.N; i++ {
+               gopacket.SerializeLayers(buf, opts, slayers...)
+       }
+}
+
+func BenchmarkSerializeTcpFixLengthsComputeChecksums(b *testing.B) {
+       slayers := getSerializeLayers()
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
+       for i := 0; i < b.N; i++ {
+               gopacket.SerializeLayers(buf, opts, slayers...)
+       }
+}
+
+func BenchmarkLazy(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.Lazy)
+       }
+}
+
+func BenchmarkNoCopy(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+func BenchmarkLazyNoCopy(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})
+       }
+}
+
+func BenchmarkKnownStack(b *testing.B) {
+       stack := []gopacket.DecodingLayer{&Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{}}
+       nf := gopacket.NilDecodeFeedback
+       for i := 0; i < b.N; i++ {
+               data := testSimpleTCPPacket[:]
+               for _, d := range stack {
+                       _ = d.DecodeFromBytes(data, nf)
+                       data = d.LayerPayload()
+               }
+       }
+}
+
+func BenchmarkDecodingLayerParserIgnorePanic(b *testing.B) {
+       decoded := make([]gopacket.LayerType, 0, 20)
+       dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{})
+       dlp.IgnorePanic = true
+       for i := 0; i < b.N; i++ {
+               dlp.DecodeLayers(testSimpleTCPPacket, &decoded)
+       }
+}
+
+func BenchmarkDecodingLayerParserHandlePanic(b *testing.B) {
+       decoded := make([]gopacket.LayerType, 0, 20)
+       dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{})
+       dlp.IgnorePanic = false
+       for i := 0; i < b.N; i++ {
+               dlp.DecodeLayers(testSimpleTCPPacket, &decoded)
+       }
+}
+
+func BenchmarkAlloc(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               _ = &TCP{}
+       }
+}
+
+func BenchmarkFlow(b *testing.B) {
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})
+       net := p.NetworkLayer()
+       for i := 0; i < b.N; i++ {
+               net.NetworkFlow()
+       }
+}
+
+func BenchmarkEndpoints(b *testing.B) {
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})
+       flow := p.NetworkLayer().NetworkFlow()
+       for i := 0; i < b.N; i++ {
+               flow.Endpoints()
+       }
+}
+
+func BenchmarkTCPLayerFromDecodedPacket(b *testing.B) {
+       b.StopTimer()
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+       b.StartTimer()
+       for i := 0; i < b.N; i++ {
+               _ = p.Layer(LayerTypeTCP)
+       }
+}
+
+func BenchmarkTCPLayerClassFromDecodedPacket(b *testing.B) {
+       b.StopTimer()
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+       lc := gopacket.NewLayerClass([]gopacket.LayerType{LayerTypeTCP})
+       b.StartTimer()
+       for i := 0; i < b.N; i++ {
+               _ = p.LayerClass(lc)
+       }
+}
+
+func BenchmarkTCPTransportLayerFromDecodedPacket(b *testing.B) {
+       b.StopTimer()
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+       b.StartTimer()
+       for i := 0; i < b.N; i++ {
+               _ = p.TransportLayer()
+       }
+}
+
+func testDecoder([]byte, gopacket.PacketBuilder) error {
+       return nil
+}
+
+func BenchmarkDecodeFuncCallOverheadDirectCall(b *testing.B) {
+       var data []byte
+       var pb gopacket.PacketBuilder
+       for i := 0; i < b.N; i++ {
+               _ = testDecoder(data, pb)
+       }
+}
+
+func BenchmarkDecodeFuncCallOverheadDecoderCall(b *testing.B) {
+       d := gopacket.DecodeFunc(testDecoder)
+       var data []byte
+       var pb gopacket.PacketBuilder
+       for i := 0; i < b.N; i++ {
+               _ = d.Decode(data, pb)
+       }
+}
+
+func BenchmarkDecodeFuncCallOverheadArrayCall(b *testing.B) {
+       EthernetTypeMetadata[1] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(testDecoder)}
+       d := EthernetType(1)
+       var data []byte
+       var pb gopacket.PacketBuilder
+       for i := 0; i < b.N; i++ {
+               _ = d.Decode(data, pb)
+       }
+}
+
+func BenchmarkFmtVerboseString(b *testing.B) {
+       b.StopTimer()
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+       b.StartTimer()
+       for i := 0; i < b.N; i++ {
+               _ = fmt.Sprintf("%#v", p)
+       }
+}
+
+func BenchmarkPacketString(b *testing.B) {
+       b.StopTimer()
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+       b.StartTimer()
+       for i := 0; i < b.N; i++ {
+               _ = p.String()
+       }
+}
+
+func BenchmarkPacketDumpString(b *testing.B) {
+       b.StopTimer()
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
+       b.StartTimer()
+       for i := 0; i < b.N; i++ {
+               _ = p.String()
+       }
+}
+
+// TestFlowMapKey makes sure a flow and an endpoint can be used as map keys.
+func TestFlowMapKey(t *testing.T) {
+       _ = map[gopacket.Flow]bool{}
+       _ = map[gopacket.Endpoint]bool{}
+       _ = map[[2]gopacket.Flow]bool{}
+}
+
+func TestDecodeSimpleTCPPacket(t *testing.T) {
+       equal := func(desc, want string, got fmt.Stringer) {
+               if want != got.String() {
+                       t.Errorf("%s: got %q want %q", desc, got.String(), want)
+               }
+       }
+       p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true})
+       if eth := p.LinkLayer(); eth == nil {
+               t.Error("No ethernet layer found")
+       } else {
+               equal("Eth Src", "bc:30:5b:e8:d3:49", eth.LinkFlow().Src())
+               equal("Eth Dst", "00:00:0c:9f:f0:20", eth.LinkFlow().Dst())
+       }
+       if net := p.NetworkLayer(); net == nil {
+               t.Error("No net layer found")
+       } else if ip, ok := net.(*IPv4); !ok {
+               t.Error("Net layer is not IP layer")
+       } else {
+               equal("IP Src", "172.17.81.73", net.NetworkFlow().Src())
+               equal("IP Dst", "173.222.254.225", net.NetworkFlow().Dst())
+               want := &IPv4{
+                       BaseLayer:  BaseLayer{testSimpleTCPPacket[14:34], testSimpleTCPPacket[34:]},
+                       Version:    4,
+                       IHL:        5,
+                       TOS:        0,
+                       Length:     420,
+                       Id:         14815,
+                       Flags:      0x02,
+                       FragOffset: 0,
+                       TTL:        64,
+                       Protocol:   6,
+                       Checksum:   0x555A,
+                       SrcIP:      []byte{172, 17, 81, 73},
+                       DstIP:      []byte{173, 222, 254, 225},
+               }
+               if !reflect.DeepEqual(ip, want) {
+                       t.Errorf("IP layer mismatch, \ngot  %#v\nwant %#v\n", ip, want)
+               }
+       }
+       if trans := p.TransportLayer(); trans == nil {
+               t.Error("No transport layer found")
+       } else if tcp, ok := trans.(*TCP); !ok {
+               t.Error("Transport layer is not TCP layer")
+       } else {
+               equal("TCP Src", "50679", trans.TransportFlow().Src())
+               equal("TCP Dst", "80", trans.TransportFlow().Dst())
+               want := &TCP{
+                       BaseLayer:  BaseLayer{testSimpleTCPPacket[34:66], testSimpleTCPPacket[66:]},
+                       SrcPort:    50679,
+                       DstPort:    80,
+                       Seq:        0xc57e0e48,
+                       Ack:        0x49074232,
+                       DataOffset: 8,
+                       ACK:        true,
+                       PSH:        true,
+                       Window:     0x73,
+                       Checksum:   0x9a8f,
+                       Urgent:     0,
+                       sPort:      []byte{0xc5, 0xf7},
+                       dPort:      []byte{0x0, 0x50},
+                       Options: []TCPOption{
+                               TCPOption{
+                                       OptionType:   0x1,
+                                       OptionLength: 0x1,
+                               },
+                               TCPOption{
+                                       OptionType:   0x1,
+                                       OptionLength: 0x1,
+                               },
+                               TCPOption{
+                                       OptionType:   0x8,
+                                       OptionLength: 0xa,
+                                       OptionData:   []byte{0x3, 0x77, 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a},
+                               },
+                       },
+                       opts: [4]TCPOption{
+                               TCPOption{
+                                       OptionType:   0x1,
+                                       OptionLength: 0x1,
+                               },
+                               TCPOption{
+                                       OptionType:   0x1,
+                                       OptionLength: 0x1,
+                               },
+                               TCPOption{
+                                       OptionType:   0x8,
+                                       OptionLength: 0xa,
+                                       OptionData:   []byte{0x3, 0x77, 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a},
+                               },
+                               TCPOption{},
+                       },
+               }
+               if !reflect.DeepEqual(tcp, want) {
+                       t.Errorf("TCP layer mismatch\ngot  %#v\nwant %#v", tcp, want)
+               }
+       }
+       if payload, ok := p.Layer(gopacket.LayerTypePayload).(*gopacket.Payload); payload == nil || !ok {
+               t.Error("No payload layer found")
+       } else {
+               if string(payload.Payload()) != "GET / HTTP/1.1\r\nHost: www.fish.com\r\nConnection: keep-alive\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Encoding: gzip,deflate,sdch\r\nAccept-Language: en-US,en;q=0.8\r\nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n\r\n" {
+                       t.Error("--- Payload STRING ---\n", string(payload.Payload()), "\n--- Payload BYTES ---\n", payload.Payload())
+               }
+       }
+
+       // Test re-serialization.
+       testSerialization(t, p, testSimpleTCPPacket)
+}
+
+type canSetNetLayer interface {
+       SetNetworkLayerForChecksum(gopacket.NetworkLayer) error
+}
+
+func testSerialization(t *testing.T, p gopacket.Packet, data []byte) {
+       for _, opts := range []gopacket.SerializeOptions{
+               gopacket.SerializeOptions{},
+               gopacket.SerializeOptions{FixLengths: true},
+               gopacket.SerializeOptions{ComputeChecksums: true},
+               gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true},
+       } {
+               testSerializationWithOpts(t, p, data, opts)
+       }
+}
+
+func testSerializationWithOpts(t *testing.T, p gopacket.Packet, data []byte, opts gopacket.SerializeOptions) {
+       // Test re-serialization.
+       slayers := []gopacket.SerializableLayer{}
+       for _, l := range p.Layers() {
+               slayers = append(slayers, l.(gopacket.SerializableLayer))
+               if h, ok := l.(canSetNetLayer); ok {
+                       if err := h.SetNetworkLayerForChecksum(p.NetworkLayer()); err != nil {
+                               t.Fatal("can't set network layer:", err)
+                       }
+               }
+       }
+       buf := gopacket.NewSerializeBuffer()
+       err := gopacket.SerializeLayers(buf, opts, slayers...)
+       if err != nil {
+               t.Errorf("unable to reserialize layers with opts %#v: %v", opts, err)
+       } else if !bytes.Equal(buf.Bytes(), data) {
+               t.Errorf("serialization failure with opts %#v:\n---want---\n%v\n---got---\n%v\nBASH-colorized diff, want->got:\n%v\n\n---PACKET---\n%v",
+                       opts, hex.Dump(data), hex.Dump(buf.Bytes()), bytediff.BashOutput.String(bytediff.Diff(data, buf.Bytes())), p)
+       }
+}
+
+// Makes sure packet payload doesn't display the 6 trailing null of this packet
+// as part of the payload.  They're actually the ethernet trailer.
+func TestDecodeSmallTCPPacketHasEmptyPayload(t *testing.T) {
+       smallPacket := []byte{
+               0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49, 0xb8, 0xac, 0x6f, 0x92, 0xd5, 0xbf,
+               0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x00, 0x40, 0x06,
+               0x3f, 0x9f, 0xac, 0x11, 0x51, 0xc5, 0xac, 0x11, 0x51, 0x49, 0x00, 0x63,
+               0x9a, 0xef, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc1, 0x27, 0x83, 0x50, 0x14,
+               0x00, 0x00, 0xc3, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       }
+       p := gopacket.NewPacket(smallPacket, LinkTypeEthernet, testDecodeOptions)
+
+       if payload := p.Layer(gopacket.LayerTypePayload); payload != nil {
+               t.Error("Payload found for empty TCP packet")
+       }
+
+       testSerialization(t, p, smallPacket)
+}
+
+func TestDecodeVLANPacket(t *testing.T) {
+       p := gopacket.NewPacket(
+               []byte{
+                       0x00, 0x10, 0xdb, 0xff, 0x10, 0x00, 0x00, 0x15, 0x2c, 0x9d, 0xcc, 0x00,
+                       0x81, 0x00, 0x01, 0xf7, 0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x29, 0x8d,
+                       0x40, 0x00, 0x7d, 0x06, 0x83, 0xa0, 0xac, 0x1b, 0xca, 0x8e, 0x45, 0x16,
+                       0x94, 0xe2, 0xd4, 0x0a, 0x00, 0x50, 0xdf, 0xab, 0x9c, 0xc6, 0xcd, 0x1e,
+                       0xe5, 0xd1, 0x50, 0x10, 0x01, 0x00, 0x5a, 0x74, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00,
+               }, LinkTypeEthernet, testDecodeOptions)
+       if err := p.ErrorLayer(); err != nil {
+               t.Error("Error while parsing vlan packet:", err)
+       }
+       if vlan := p.Layer(LayerTypeDot1Q); vlan == nil {
+               t.Error("Didn't detect vlan")
+       } else if _, ok := vlan.(*Dot1Q); !ok {
+               t.Error("LayerTypeDot1Q layer is not a Dot1Q object")
+       }
+       for i, l := range p.Layers() {
+               t.Logf("Layer %d: %#v", i, l)
+       }
+       want := []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeTCP}
+       checkLayers(p, want, t)
+}
+
+func TestDecodeSCTPPackets(t *testing.T) {
+       sctpPackets := [][]byte{
+               []byte{ // INIT
+                       0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+                       0x00, 0x44, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x22, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+                       0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x19, 0x6b, 0x0b, 0x40, 0x01, 0x00,
+                       0x00, 0x24, 0xb6, 0x96, 0xb0, 0x9e, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85,
+                       0x60, 0x23, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00,
+                       0x00, 0x04,
+               }, []byte{ // INIT ACK
+                       0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,
+                       0x01, 0x24, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xcd, 0x24, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,
+                       0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0x4b, 0xab, 0x40, 0x9a, 0x02, 0x00,
+                       0x01, 0x04, 0x32, 0x80, 0xfb, 0x42, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x85, 0x98,
+                       0xb1, 0x26, 0x00, 0x07, 0x00, 0xe8, 0xd3, 0x08, 0xce, 0xe2, 0x52, 0x95, 0xcc, 0x09, 0xa1, 0x4c,
+                       0x6f, 0xa7, 0x9e, 0xba, 0x03, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfb, 0x80, 0x32, 0x9e, 0xb0,
+                       0x96, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0xc2, 0x50, 0x00, 0x00,
+                       0x00, 0x00, 0x5e, 0x25, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x26, 0xb1,
+                       0x98, 0x85, 0x02, 0x00, 0x27, 0x0f, 0xac, 0x1d, 0x14, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22,
+                       0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x24, 0x6a, 0x72, 0x5c, 0x1c, 0x3c, 0xaa,
+                       0x7a, 0xcd, 0xd3, 0x8f, 0x52, 0x78, 0x7c, 0x77, 0xfd, 0x46, 0xbd, 0x72, 0x82, 0xc1, 0x1f, 0x70,
+                       0x44, 0xcc, 0xc7, 0x9b, 0x9b, 0x7b, 0x13, 0x54, 0x3f, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0xb6, 0x96,
+                       0xb0, 0x9e, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x0c,
+                       0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00,
+                       0x00, 0x04,
+               }, []byte{ // COOKIE ECHO, DATA
+                       0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+                       0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc3, 0x46, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+                       0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0x01, 0xf9, 0xf3, 0xa9, 0x0a, 0x00,
+                       0x00, 0xe8, 0xd3, 0x08, 0xce, 0xe2, 0x52, 0x95, 0xcc, 0x09, 0xa1, 0x4c, 0x6f, 0xa7, 0x9e, 0xba,
+                       0x03, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfb, 0x80, 0x32, 0x9e, 0xb0, 0x96, 0xb6, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0xc2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x25,
+                       0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x26, 0xb1, 0x98, 0x85, 0x02, 0x00,
+                       0x27, 0x0f, 0xac, 0x1d, 0x14, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22, 0x01, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x80, 0x02, 0x00, 0x24, 0x6a, 0x72, 0x5c, 0x1c, 0x3c, 0xaa, 0x7a, 0xcd, 0xd3, 0x8f,
+                       0x52, 0x78, 0x7c, 0x77, 0xfd, 0x46, 0xbd, 0x72, 0x82, 0xc1, 0x1f, 0x70, 0x44, 0xcc, 0xc7, 0x9b,
+                       0x9b, 0x7b, 0x13, 0x54, 0x3f, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0xb6, 0x96, 0xb0, 0x9e, 0x00, 0x01,
+                       0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x05,
+                       0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x16, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x6f, 0x21, 0x0a, 0x00, 0x00, 0x00,
+               }, []byte{ // COOKIE ACK, SACK
+                       0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,
+                       0x00, 0x34, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x14, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,
+                       0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xed, 0x64, 0x30, 0x98, 0x0b, 0x00,
+                       0x00, 0x04, 0x03, 0x00, 0x00, 0x10, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x00, 0xf3, 0xfa, 0x00, 0x00,
+                       0x00, 0x00,
+               }, []byte{ // DATA
+                       0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+                       0x00, 0x3c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x2a, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+                       0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0xa1, 0xe3, 0xb2, 0x31, 0x00, 0x03,
+                       0x00, 0x19, 0xdb, 0x85, 0x60, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x62, 0x69,
+                       0x7a, 0x7a, 0x6c, 0x65, 0x21, 0x0a, 0x00, 0x00, 0x00, 0x00,
+               }, []byte{ // SACK
+                       0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,
+                       0x00, 0x30, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x18, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,
+                       0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xfa, 0x49, 0x94, 0x3a, 0x03, 0x00,
+                       0x00, 0x10, 0xdb, 0x85, 0x60, 0x24, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00,
+               }, []byte{ // SHUTDOWN
+                       0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+                       0x00, 0x28, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x3e, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+                       0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0x3f, 0x29, 0x59, 0x23, 0x07, 0x00,
+                       0x00, 0x08, 0x85, 0x98, 0xb1, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               }, []byte{ // SHUTDOWN ACK
+                       0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20,
+                       0x00, 0x24, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x24, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d,
+                       0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xb2, 0xc8, 0x99, 0x24, 0x08, 0x00,
+                       0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               }, []byte{ // SHUTDOWN COMPLETE
+                       0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02,
+                       0x00, 0x24, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x42, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19,
+                       0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0xa8, 0xd1, 0x86, 0x85, 0x0e, 0x00,
+                       0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               }}
+       wantLayers := [][]gopacket.LayerType{
+               []gopacket.LayerType{LayerTypeSCTPInit},
+               []gopacket.LayerType{LayerTypeSCTPInitAck},
+               []gopacket.LayerType{LayerTypeSCTPCookieEcho, LayerTypeSCTPData, gopacket.LayerTypePayload},
+               []gopacket.LayerType{LayerTypeSCTPCookieAck, LayerTypeSCTPSack},
+               []gopacket.LayerType{LayerTypeSCTPData, gopacket.LayerTypePayload},
+               []gopacket.LayerType{LayerTypeSCTPSack},
+               []gopacket.LayerType{LayerTypeSCTPShutdown},
+               []gopacket.LayerType{LayerTypeSCTPShutdownAck},
+               []gopacket.LayerType{LayerTypeSCTPShutdownComplete},
+       }
+       for i, data := range sctpPackets {
+               p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+               for _, typ := range wantLayers[i] {
+                       if p.Layer(typ) == nil {
+                               t.Errorf("Packet %d missing layer type %v, got:", i, typ)
+                               for _, layer := range p.Layers() {
+                                       t.Errorf("\t%v", layer.LayerType())
+                               }
+                               if p.ErrorLayer() != nil {
+                                       t.Error("\tPacket layer error:", p.ErrorLayer().Error())
+                               }
+                       }
+               }
+               // Test re-serialization.
+               testSerializationWithOpts(t, p, data, gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true})
+       }
+}
+
+func TestDecodeCiscoDiscovery(t *testing.T) {
+       // http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=cdp_v2.pcap
+       data := []byte{
+               0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0x00, 0x0b, 0xbe, 0x18, 0x9a, 0x41, 0x01, 0xc3, 0xaa, 0xaa,
+               0x03, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x02, 0xb4, 0x09, 0xa0, 0x00, 0x01, 0x00, 0x0c, 0x6d, 0x79,
+               0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+               0xcc, 0x00, 0x04, 0xc0, 0xa8, 0x00, 0xfd, 0x00, 0x03, 0x00, 0x13, 0x46, 0x61, 0x73, 0x74, 0x45,
+               0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x30, 0x2f, 0x31, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00,
+               0x00, 0x28, 0x00, 0x05, 0x01, 0x14, 0x43, 0x69, 0x73, 0x63, 0x6f, 0x20, 0x49, 0x6e, 0x74, 0x65,
+               0x72, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
+               0x6e, 0x67, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
+               0x72, 0x65, 0x20, 0x0a, 0x49, 0x4f, 0x53, 0x20, 0x28, 0x74, 0x6d, 0x29, 0x20, 0x43, 0x32, 0x39,
+               0x35, 0x30, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x28, 0x43, 0x32, 0x39,
+               0x35, 0x30, 0x2d, 0x49, 0x36, 0x4b, 0x32, 0x4c, 0x32, 0x51, 0x34, 0x2d, 0x4d, 0x29, 0x2c, 0x20,
+               0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x32, 0x2e, 0x31, 0x28, 0x32, 0x32, 0x29,
+               0x45, 0x41, 0x31, 0x34, 0x2c, 0x20, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x20, 0x53, 0x4f,
+               0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x28, 0x66, 0x63, 0x31, 0x29, 0x0a, 0x54, 0x65, 0x63,
+               0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x3a, 0x20,
+               0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x69, 0x73, 0x63, 0x6f,
+               0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x65, 0x63, 0x68, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,
+               0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x31,
+               0x39, 0x38, 0x36, 0x2d, 0x32, 0x30, 0x31, 0x30, 0x20, 0x62, 0x79, 0x20, 0x63, 0x69, 0x73, 0x63,
+               0x6f, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x0a,
+               0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x54, 0x75, 0x65, 0x20, 0x32, 0x36, 0x2d,
+               0x4f, 0x63, 0x74, 0x2d, 0x31, 0x30, 0x20, 0x31, 0x30, 0x3a, 0x33, 0x35, 0x20, 0x62, 0x79, 0x20,
+               0x6e, 0x62, 0x75, 0x72, 0x72, 0x61, 0x00, 0x06, 0x00, 0x15, 0x63, 0x69, 0x73, 0x63, 0x6f, 0x20,
+               0x57, 0x53, 0x2d, 0x43, 0x32, 0x39, 0x35, 0x30, 0x2d, 0x31, 0x32, 0x00, 0x08, 0x00, 0x24, 0x00,
+               0x00, 0x0c, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x02, 0x20, 0xff,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xbe, 0x18, 0x9a, 0x40, 0xff, 0x00, 0x00, 0x00,
+               0x09, 0x00, 0x0c, 0x4d, 0x59, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x00, 0x0a, 0x00, 0x06, 0x00,
+               0x01, 0x00, 0x0b, 0x00, 0x05, 0x01, 0x00, 0x12, 0x00, 0x05, 0x00, 0x00, 0x13, 0x00, 0x05, 0x00,
+               0x00, 0x16, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0xcc, 0x00, 0x04, 0xc0, 0xa8, 0x00,
+               0xfd,
+       }
+       p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+       wantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSNAP, LayerTypeCiscoDiscovery, LayerTypeCiscoDiscoveryInfo}
+       checkLayers(p, wantLayers, t)
+
+       want := &CiscoDiscoveryInfo{
+               CDPHello: CDPHello{
+                       OUI:              []byte{0, 0, 12},
+                       ProtocolID:       274,
+                       ClusterMaster:    []byte{0, 0, 0, 0},
+                       Unknown1:         []byte{255, 255, 255, 255},
+                       Version:          1,
+                       SubVersion:       2,
+                       Status:           32,
+                       Unknown2:         255,
+                       ClusterCommander: net.HardwareAddr{0, 0, 0, 0, 0, 0},
+                       SwitchMAC:        net.HardwareAddr{0, 0x0b, 0xbe, 0x18, 0x9a, 0x40},
+                       Unknown3:         255,
+                       ManagementVLAN:   0,
+               },
+               DeviceID:      "myswitch",
+               Addresses:     []net.IP{net.IPv4(192, 168, 0, 253)},
+               PortID:        "FastEthernet0/1",
+               Capabilities:  CDPCapabilities{false, false, false, true, false, true, false, false, false},
+               Version:       "Cisco Internetwork Operating System Software \nIOS (tm) C2950 Software (C2950-I6K2L2Q4-M), Version 12.1(22)EA14, RELEASE SOFTWARE (fc1)\nTechnical Support: http://www.cisco.com/techsupport\nCopyright (c) 1986-2010 by cisco Systems, Inc.\nCompiled Tue 26-Oct-10 10:35 by nburra",
+               Platform:      "cisco WS-C2950-12",
+               VTPDomain:     "MYDOMAIN",
+               NativeVLAN:    1,
+               FullDuplex:    true,
+               MgmtAddresses: []net.IP{net.IPv4(192, 168, 0, 253)},
+               BaseLayer:     BaseLayer{Contents: data[26:]},
+       }
+       cdpL := p.Layer(LayerTypeCiscoDiscoveryInfo)
+       info, _ := cdpL.(*CiscoDiscoveryInfo)
+       if !reflect.DeepEqual(info, want) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", info, want)
+       }
+}
+
+func TestDecodeLinkLayerDiscovery(t *testing.T) {
+       // http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=lldp.detailed.pcap
+       data := []byte{
+               0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0,
+               0x88, 0xcc, 0x02, 0x07, 0x04, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0, 0x04,
+               0x04, 0x05, 0x31, 0x2f, 0x31, 0x06, 0x02, 0x00, 0x78, 0x08, 0x17, 0x53,
+               0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x38, 0x2d,
+               0x50, 0x6f, 0x72, 0x74, 0x20, 0x31, 0x30, 0x30, 0x31, 0x00, 0x0a, 0x0d,
+               0x53, 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x38,
+               0x00, 0x0c, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30,
+               0x2d, 0x34, 0x38, 0x20, 0x2d, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+               0x6e, 0x20, 0x37, 0x2e, 0x34, 0x65, 0x2e, 0x31, 0x20, 0x28, 0x42, 0x75,
+               0x69, 0x6c, 0x64, 0x20, 0x35, 0x29, 0x20, 0x62, 0x79, 0x20, 0x52, 0x65,
+               0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72,
+               0x20, 0x30, 0x35, 0x2f, 0x32, 0x37, 0x2f, 0x30, 0x35, 0x20, 0x30, 0x34,
+               0x3a, 0x35, 0x33, 0x3a, 0x31, 0x31, 0x00, 0x0e, 0x04, 0x00, 0x14, 0x00,
+               0x14, 0x10, 0x0e, 0x07, 0x06, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0, 0x02,
+               0x00, 0x00, 0x03, 0xe9, 0x00, 0xfe, 0x07, 0x00, 0x12, 0x0f, 0x02, 0x07,
+               0x01, 0x00, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x00, 0x00,
+               0x10, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
+               0xfe, 0x06, 0x00, 0x12, 0x0f, 0x04, 0x05, 0xf2, 0xfe, 0x06, 0x00, 0x80,
+               0xc2, 0x01, 0x01, 0xe8, 0xfe, 0x07, 0x00, 0x80, 0xc2, 0x02, 0x01, 0x00,
+               0x00, 0xfe, 0x17, 0x00, 0x80, 0xc2, 0x03, 0x01, 0xe8, 0x10, 0x76, 0x32,
+               0x2d, 0x30, 0x34, 0x38, 0x38, 0x2d, 0x30, 0x33, 0x2d, 0x30, 0x35, 0x30,
+               0x35, 0x00, 0xfe, 0x05, 0x00, 0x80, 0xc2, 0x04, 0x00, 0x00, 0x00,
+       }
+
+       p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+       wantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLinkLayerDiscovery, LayerTypeLinkLayerDiscoveryInfo}
+       checkLayers(p, wantLayers, t)
+       lldpL := p.Layer(LayerTypeLinkLayerDiscovery)
+       lldp := lldpL.(*LinkLayerDiscovery)
+       want := &LinkLayerDiscovery{
+               ChassisID: LLDPChassisID{LLDPChassisIDSubTypeMACAddr, []byte{0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0}},
+               PortID:    LLDPPortID{LLDPPortIDSubtypeIfaceName, []byte("1/1")},
+               TTL:       120,
+               BaseLayer: BaseLayer{Contents: data[14:]},
+       }
+       lldp.Values = nil // test these in next stage
+       if !reflect.DeepEqual(lldp, want) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", lldp, want)
+       }
+
+       infoL := p.Layer(LayerTypeLinkLayerDiscoveryInfo)
+       info := infoL.(*LinkLayerDiscoveryInfo)
+       wantinfo := &LinkLayerDiscoveryInfo{
+               PortDescription: "Summit300-48-Port 1001\x00",
+               SysName:         "Summit300-48\x00",
+               SysDescription:  "Summit300-48 - Version 7.4e.1 (Build 5) by Release_Master 05/27/05 04:53:11\x00",
+               SysCapabilities: LLDPSysCapabilities{
+                       SystemCap:  LLDPCapabilities{Bridge: true, Router: true},
+                       EnabledCap: LLDPCapabilities{Bridge: true, Router: true},
+               },
+               MgmtAddress: LLDPMgmtAddress{IANAAddressFamily802, []byte{0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0}, LLDPInterfaceSubtypeifIndex, 1001, ""},
+               OrgTLVs: []LLDPOrgSpecificTLV{
+                       LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x2, Info: []uint8{0x7, 0x1, 0x0}},
+                       LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x1, Info: []uint8{0x3, 0x6c, 0x0, 0x0, 0x10}},
+                       LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x3, Info: []uint8{0x1, 0x0, 0x0, 0x0, 0x0}},
+                       LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x4, Info: []uint8{0x5, 0xf2}},
+                       LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x1, Info: []uint8{0x1, 0xe8}},
+                       LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x2, Info: []uint8{0x1, 0x0, 0x0}},
+                       LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x3, Info: []uint8{0x1, 0xe8, 0x10, 0x76, 0x32, 0x2d, 0x30, 0x34, 0x38, 0x38, 0x2d, 0x30, 0x33, 0x2d, 0x30, 0x35, 0x30, 0x35, 0x0}},
+                       LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x4, Info: []uint8{0x0}},
+               },
+               Unknown: nil,
+       }
+       if !reflect.DeepEqual(info, wantinfo) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", info, wantinfo)
+       }
+       info8021, err := info.Decode8021()
+       if err != nil {
+               t.Errorf("8021 Values decode error: %v", err)
+       }
+       want8021 := LLDPInfo8021{
+               PVID:               488,
+               PPVIDs:             []PortProtocolVLANID{PortProtocolVLANID{false, false, 0}},
+               VLANNames:          []VLANName{VLANName{488, "v2-0488-03-0505\x00"}},
+               ProtocolIdentities: nil,
+               VIDUsageDigest:     0,
+               ManagementVID:      0,
+               LinkAggregation:    LLDPLinkAggregation{false, false, 0},
+       }
+       if !reflect.DeepEqual(info8021, want8021) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", info8021, want8021)
+       }
+       info8023, err := info.Decode8023()
+       if err != nil {
+               t.Errorf("8023 Values decode error: %v", err)
+       }
+       want8023 := LLDPInfo8023{
+               LinkAggregation:    LLDPLinkAggregation{true, false, 0},
+               MACPHYConfigStatus: LLDPMACPHYConfigStatus{true, true, 0x6c00, 0x0010},
+               PowerViaMDI:        LLDPPowerViaMDI8023{true, true, true, false, 1, 0, 0, 0, 0, 0, 0},
+               MTU:                1522,
+       }
+
+       if !reflect.DeepEqual(info8023, want8023) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", info8023, want8023)
+       }
+
+       // http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=lldpmed_civicloc.pcap
+       data = []byte{
+               0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x13, 0x21, 0x57, 0xca, 0x7f,
+               0x88, 0xcc, 0x02, 0x07, 0x04, 0x00, 0x13, 0x21, 0x57, 0xca, 0x40, 0x04,
+               0x02, 0x07, 0x31, 0x06, 0x02, 0x00, 0x78, 0x08, 0x01, 0x31, 0x0a, 0x1a,
+               0x50, 0x72, 0x6f, 0x43, 0x75, 0x72, 0x76, 0x65, 0x20, 0x53, 0x77, 0x69,
+               0x74, 0x63, 0x68, 0x20, 0x32, 0x36, 0x30, 0x30, 0x2d, 0x38, 0x2d, 0x50,
+               0x57, 0x52, 0x0c, 0x5f, 0x50, 0x72, 0x6f, 0x43, 0x75, 0x72, 0x76, 0x65,
+               0x20, 0x4a, 0x38, 0x37, 0x36, 0x32, 0x41, 0x20, 0x53, 0x77, 0x69, 0x74,
+               0x63, 0x68, 0x20, 0x32, 0x36, 0x30, 0x30, 0x2d, 0x38, 0x2d, 0x50, 0x57,
+               0x52, 0x2c, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+               0x48, 0x2e, 0x30, 0x38, 0x2e, 0x38, 0x39, 0x2c, 0x20, 0x52, 0x4f, 0x4d,
+               0x20, 0x48, 0x2e, 0x30, 0x38, 0x2e, 0x35, 0x58, 0x20, 0x28, 0x2f, 0x73,
+               0x77, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64,
+               0x2f, 0x66, 0x69, 0x73, 0x68, 0x28, 0x74, 0x73, 0x5f, 0x30, 0x38, 0x5f,
+               0x35, 0x29, 0x29, 0x0e, 0x04, 0x00, 0x14, 0x00, 0x04, 0x10, 0x0c, 0x05,
+               0x01, 0x0f, 0xff, 0x7a, 0x94, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+               0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x00, 0x00, 0x10, 0xfe, 0x07,
+               0x00, 0x12, 0xbb, 0x01, 0x00, 0x0f, 0x04, 0xfe, 0x08, 0x00, 0x12, 0xbb,
+               0x02, 0x01, 0x40, 0x65, 0xae, 0xfe, 0x2e, 0x00, 0x12, 0xbb, 0x03, 0x02,
+               0x28, 0x02, 0x55, 0x53, 0x01, 0x02, 0x43, 0x41, 0x03, 0x09, 0x52, 0x6f,
+               0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x06, 0x09, 0x46, 0x6f, 0x6f,
+               0x74, 0x68, 0x69, 0x6c, 0x6c, 0x73, 0x13, 0x04, 0x38, 0x30, 0x30, 0x30,
+               0x1a, 0x03, 0x52, 0x33, 0x4c, 0xfe, 0x07, 0x00, 0x12, 0xbb, 0x04, 0x03,
+               0x00, 0x41, 0x00, 0x00,
+       }
+
+       p = gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+       wantLayers = []gopacket.LayerType{LayerTypeEthernet, LayerTypeLinkLayerDiscovery, LayerTypeLinkLayerDiscoveryInfo}
+       checkLayers(p, wantLayers, t)
+       lldpL = p.Layer(LayerTypeLinkLayerDiscovery)
+       lldp = lldpL.(*LinkLayerDiscovery)
+       want = &LinkLayerDiscovery{
+               ChassisID: LLDPChassisID{LLDPChassisIDSubTypeMACAddr, []byte{0x00, 0x13, 0x21, 0x57, 0xca, 0x40}},
+               PortID:    LLDPPortID{LLDPPortIDSubtypeLocal, []byte("1")},
+               TTL:       120,
+               BaseLayer: BaseLayer{Contents: data[14:]},
+       }
+       lldp.Values = nil // test these in next stage
+       if !reflect.DeepEqual(lldp, want) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", lldp, want)
+       }
+
+       infoL = p.Layer(LayerTypeLinkLayerDiscoveryInfo)
+       info = infoL.(*LinkLayerDiscoveryInfo)
+       wantinfo = &LinkLayerDiscoveryInfo{
+               PortDescription: "1",
+               SysName:         "ProCurve Switch 2600-8-PWR",
+               SysDescription:  "ProCurve J8762A Switch 2600-8-PWR, revision H.08.89, ROM H.08.5X (/sw/code/build/fish(ts_08_5))",
+               SysCapabilities: LLDPSysCapabilities{
+                       SystemCap:  LLDPCapabilities{Bridge: true, Router: true},
+                       EnabledCap: LLDPCapabilities{Bridge: true},
+               },
+               MgmtAddress: LLDPMgmtAddress{IANAAddressFamilyIPV4, []byte{0x0f, 0xff, 0x7a, 0x94}, LLDPInterfaceSubtypeifIndex, 0, ""},
+               OrgTLVs: []LLDPOrgSpecificTLV{
+                       LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x1, Info: []uint8{0x3, 0x6c, 0x0, 0x0, 0x10}},
+                       LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x1, Info: []uint8{0x0, 0xf, 0x4}},
+                       LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x2, Info: []uint8{0x1, 0x40, 0x65, 0xae}},
+                       LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x3, Info: []uint8{0x2, 0x28, 0x2, 0x55, 0x53, 0x1, 0x2, 0x43, 0x41, 0x3, 0x9, 0x52, 0x6f, 0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x6, 0x9, 0x46, 0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6c, 0x6c, 0x73, 0x13, 0x4, 0x38, 0x30, 0x30, 0x30, 0x1a, 0x3, 0x52, 0x33, 0x4c}},
+                       LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x4, Info: []uint8{0x3, 0x0, 0x41}},
+               },
+               Unknown: nil,
+       }
+       if !reflect.DeepEqual(info, wantinfo) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", info, wantinfo)
+       }
+       info8023, err = info.Decode8023()
+       if err != nil {
+               t.Errorf("8023 Values decode error: %v", err)
+       }
+       want8023 = LLDPInfo8023{
+               MACPHYConfigStatus: LLDPMACPHYConfigStatus{true, true, 0x6c00, 0x0010},
+       }
+
+       if !reflect.DeepEqual(info8023, want8023) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", info8023, want8023)
+       }
+
+       infoMedia, err := info.DecodeMedia()
+       if err != nil {
+               t.Errorf("8023 Values decode error: %v", err)
+       }
+       wantMedia := LLDPInfoMedia{
+               MediaCapabilities: LLDPMediaCapabilities{true, true, true, true, false, false, LLDPMediaClassNetwork},
+               NetworkPolicy:     LLDPNetworkPolicy{LLDPAppTypeVoice, true, true, 50, 6, 46},
+               Location: LLDPLocation{Format: LLDPLocationFormatAddress, Address: LLDPLocationAddress{
+                       What:        LLDPLocationAddressWhatClient,
+                       CountryCode: "US",
+                       AddressLines: []LLDPLocationAddressLine{
+                               LLDPLocationAddressLine{LLDPLocationAddressTypeNational, "CA"},
+                               LLDPLocationAddressLine{LLDPLocationAddressTypeCity, "Roseville"},
+                               LLDPLocationAddressLine{LLDPLocationAddressTypeStreet, "Foothills"},
+                               LLDPLocationAddressLine{LLDPLocationAddressTypeHouseNum, "8000"},
+                               LLDPLocationAddressLine{LLDPLocationAddressTypeUnit, "R3L"},
+                       },
+               }},
+               PowerViaMDI: LLDPPowerViaMDI{0, 0, LLDPPowerPriorityLow, 6500},
+       }
+
+       if !reflect.DeepEqual(infoMedia, wantMedia) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", infoMedia, wantMedia)
+       }
+
+}
+
+func TestDecodeNortelDiscovery(t *testing.T) {
+       // http://www.thetechfirm.com/packets/nortel_btdp/btdp_nai.enc
+       data := []byte{
+               0x01, 0x00, 0x81, 0x00, 0x01, 0x00, 0x00, 0x04, 0x38, 0xe0, 0xcc, 0xde,
+               0x00, 0x13, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x81, 0x01, 0xa2, 0xac, 0x13,
+               0x58, 0x03, 0x00, 0x04, 0x15, 0x30, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x00,
+               0x00, 0x04, 0x38, 0xe0, 0xcc, 0xde, 0x80, 0x6a, 0x00, 0x01, 0x14, 0x00,
+               0x02, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       }
+       p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+       wantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSNAP, LayerTypeNortelDiscovery}
+       checkLayers(p, wantLayers, t)
+
+       want := &NortelDiscovery{
+               IPAddress: []byte{172, 19, 88, 3},
+               SegmentID: []byte{0x00, 0x04, 0x15},
+               Chassis:   NDPChassisBayStack450101001000Switches,
+               Backplane: NDPBackplaneEthernetFastEthernetGigabitEthernet,
+               State:     NDPStateHeartbeat,
+               NumLinks:  0,
+       }
+       ndpL := p.Layer(LayerTypeNortelDiscovery)
+       info, _ := ndpL.(*NortelDiscovery)
+       if !reflect.DeepEqual(info, want) {
+               t.Errorf("Values mismatch, \ngot  %#v\nwant %#v\n", info, want)
+       }
+}
+
+func TestDecodeIPv6Jumbogram(t *testing.T) {
+       // Haven't found any of these in the wild or on example pcaps online, so had
+       // to generate one myself via scapy.  Unfortunately, scapy can only
+       // str(packet) for packets with length < 65536, due to limitations in python's
+       // struct library, so I generated the header with:
+       // Ether() / IPv6(src='::1', dst='::2') / IPv6ExtHdrHopByHop(options=[Jumbo(jumboplen=70000)]) / TCP(sport=8888, dport=80)
+       // then added the payload manually ("payload" * 9996).  The checksums here are
+       // not correct, but we don't check, so who cares ;)
+       dataStr := "\x00\x1f\xca\xb3v@$\xbe\x05'\x0b\x17\x86\xdd`\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\xc2\x04\x00\x01\x11p\"\xb8\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00l\xd8\x00\x00"
+       payload := strings.Repeat("payload", 9996)
+       data := []byte(dataStr + payload)
+       p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeTCP, gopacket.LayerTypePayload}, t)
+       if p.ApplicationLayer() == nil {
+               t.Error("Packet has no application layer")
+       } else if string(p.ApplicationLayer().Payload()) != payload {
+               t.Errorf("Jumbogram payload wrong")
+       }
+       // Check truncated for jumbograms
+       data = data[:len(data)-1]
+       p = gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeTCP, gopacket.LayerTypePayload}, t)
+       if !p.Metadata().Truncated {
+               t.Error("Jumbogram should be truncated")
+       }
+}
+
+func TestDecodeUDPPacketTooSmall(t *testing.T) {
+       data := []byte{
+               0x00, 0x15, 0x2c, 0x9d, 0xcc, 0x00, 0x00, 0x10, 0xdb, 0xff, 0x10, 0x00, 0x81, 0x00, 0x01, 0xf7,
+               0x08, 0x00, 0x45, 0x60, 0x00, 0x3c, 0x0f, 0xa9, 0x00, 0x00, 0x6e, 0x11, 0x01, 0x0a, 0x47, 0xe6,
+               0xee, 0x2e, 0xac, 0x16, 0x59, 0x73, 0x00, 0x50, 0x00, 0x50, 0x00, 0x28, 0x4d, 0xad, 0x00, 0x67,
+               0x00, 0x01, 0x00, 0x72, 0xd5, 0xc7, 0xf1, 0x07, 0x00, 0x00, 0x01, 0x01, 0x00, 0x0d, 0x00, 0x00,
+               0x00, 0x14, 0x00, 0x00, 0x19, 0xba,
+       }
+       p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions)
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeUDP, gopacket.LayerTypePayload}, t)
+       if !p.Metadata().Truncated {
+               t.Error("UDP short packet should be truncated")
+       }
+}
+
+func TestDecodingLayerParserFullTCPPacket(t *testing.T) {
+       dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{})
+       decoded := make([]gopacket.LayerType, 1)
+       err := dlp.DecodeLayers(testSimpleTCPPacket, &decoded)
+       if err != nil {
+               t.Error("Error from dlp parser: ", err)
+       }
+       if len(decoded) != 4 {
+               t.Error("Expected 4 layers parsed, instead got ", len(decoded))
+       }
+}
+
+// testICMP is the packet:
+//   15:49:15.773265 IP 72.14.222.226 > 172.29.20.15: ICMP host 10.66.73.201 unreachable - admin prohibited filter, length 36
+//      0x0000:  24be 0527 0b17 001f cab3 75c0 0800 4500  $..'......u...E.
+//      0x0010:  0038 0000 0000 fc01 d7a7 480e dee2 ac1d  .8........H.....
+//      0x0020:  140f 030d 946e 0000 0000 4520 004d 0000  .....n....E..M..
+//      0x0030:  4000 3e11 2849 ac1d 140f 0a42 49c9 8ecc  @.>.(I.....BI...
+//      0x0040:  62e1 0039 769d                           b..9v.
+var testICMP = []byte{
+       0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0xd7, 0xa7, 0x48, 0x0e, 0xde, 0xe2, 0xac, 0x1d,
+       0x14, 0x0f, 0x03, 0x0d, 0x94, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x45, 0x20, 0x00, 0x4d, 0x00, 0x00,
+       0x40, 0x00, 0x3e, 0x11, 0x28, 0x49, 0xac, 0x1d, 0x14, 0x0f, 0x0a, 0x42, 0x49, 0xc9, 0x8e, 0xcc,
+       0x62, 0xe1, 0x00, 0x39, 0x76, 0x9d,
+}
+
+func TestICMP(t *testing.T) {
+       p := gopacket.NewPacket(testICMP, LinkTypeEthernet, testDecodeOptions)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       testSerialization(t, p, testICMP)
+}
+func BenchmarkDecodeICMP(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testICMP, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// testICMP6 is the packet:
+//   16:17:37.758937 IP6 fe80::21f:caff:feb3:75c0 > 2620:0:1005:0:26be:5ff:fe27:b17: ICMP6, neighbor solicitation, who has 2620:0:1005:0:26be:5ff:fe27:b17, length 32
+//      0x0000:  24be 0527 0b17 001f cab3 75c0 86dd 6e00  $..'......u...n.
+//      0x0010:  0000 0020 3aff fe80 0000 0000 0000 021f  ....:...........
+//      0x0020:  caff feb3 75c0 2620 0000 1005 0000 26be  ....u.&.......&.
+//      0x0030:  05ff fe27 0b17 8700 1eba 0000 0000 2620  ...'..........&.
+//      0x0040:  0000 1005 0000 26be 05ff fe27 0b17 0101  ......&....'....
+//      0x0050:  001f cab3 75c0                           ....u.
+var testICMP6 = []byte{
+       0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x86, 0xdd, 0x6e, 0x00,
+       0x00, 0x00, 0x00, 0x20, 0x3a, 0xff, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f,
+       0xca, 0xff, 0xfe, 0xb3, 0x75, 0xc0, 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe,
+       0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0x87, 0x00, 0x1e, 0xba, 0x00, 0x00, 0x00, 0x00, 0x26, 0x20,
+       0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0x01, 0x01,
+       0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0,
+}
+
+func TestICMP6(t *testing.T) {
+       p := gopacket.NewPacket(testICMP6, LinkTypeEthernet, testDecodeOptions)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, gopacket.LayerTypePayload}, t)
+       testSerialization(t, p, testICMP6)
+}
+func BenchmarkDecodeICMP6(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testICMP6, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// testMPLS is the packet:
+//   12:48:57.201014 MPLS (label 29, exp 0, [S], ttl 255) IP 10.1.2.1 > 10.34.0.1: ICMP echo request, id 2618, seq 1579, length 80
+//      0x0000:  0030 96e6 fc39 0030 9605 2838 8847 0001  .0...9.0..(8.G..
+//      0x0010:  d1ff 4500 0064 000b 0000 ff01 a569 0a01  ..E..d.......i..
+//      0x0020:  0201 0a22 0001 0800 3a76 0a3a 062b 0000  ..."....:v.:.+..
+//      0x0030:  0000 001f 3350 abcd abcd abcd abcd abcd  ....3P..........
+//      0x0040:  abcd abcd abcd abcd abcd abcd abcd abcd  ................
+//      0x0050:  abcd abcd abcd abcd abcd abcd abcd abcd  ................
+//      0x0060:  abcd abcd abcd abcd abcd abcd abcd abcd  ................
+//      0x0070:  abcd abcd abcd                           ......
+var testMPLS = []byte{
+       0x00, 0x30, 0x96, 0xe6, 0xfc, 0x39, 0x00, 0x30, 0x96, 0x05, 0x28, 0x38, 0x88, 0x47, 0x00, 0x01,
+       0xd1, 0xff, 0x45, 0x00, 0x00, 0x64, 0x00, 0x0b, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x69, 0x0a, 0x01,
+       0x02, 0x01, 0x0a, 0x22, 0x00, 0x01, 0x08, 0x00, 0x3a, 0x76, 0x0a, 0x3a, 0x06, 0x2b, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x1f, 0x33, 0x50, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+}
+
+func TestMPLS(t *testing.T) {
+       p := gopacket.NewPacket(testMPLS, LinkTypeEthernet, testDecodeOptions)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeMPLS, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       testSerialization(t, p, testMPLS)
+}
+func BenchmarkDecodeMPLS(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testMPLS, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// testPPPoEICMPv6 is the packet:
+//   07:43:31.091560 PPPoE  [ses 0x11] IP6 fe80::c801:eff:fe88:8 > ff02::1: ICMP6, neighbor advertisement, tgt is fe80::c801:eff:fe88:8, length 24
+//      0x0000:  cc05 0e88 0000 ca01 0e88 0006 8864 1100  .............d..
+//      0x0010:  0011 0042 0057 6e00 0000 0018 3aff fe80  ...B.Wn.....:...
+//      0x0020:  0000 0000 0000 c801 0eff fe88 0008 ff02  ................
+//      0x0030:  0000 0000 0000 0000 0000 0000 0001 8800  ................
+//      0x0040:  5083 8000 0000 fe80 0000 0000 0000 c801  P...............
+//      0x0050:  0eff fe88 0008                           ......
+var testPPPoEICMPv6 = []byte{
+       0xcc, 0x05, 0x0e, 0x88, 0x00, 0x00, 0xca, 0x01, 0x0e, 0x88, 0x00, 0x06, 0x88, 0x64, 0x11, 0x00,
+       0x00, 0x11, 0x00, 0x42, 0x00, 0x57, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0xfe, 0x80,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x0e, 0xff, 0xfe, 0x88, 0x00, 0x08, 0xff, 0x02,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x88, 0x00,
+       0x50, 0x83, 0x80, 0x00, 0x00, 0x00, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01,
+       0x0e, 0xff, 0xfe, 0x88, 0x00, 0x08,
+}
+
+func TestPPPoEICMPv6(t *testing.T) {
+       p := gopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, testDecodeOptions)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{
+               LayerTypeEthernet,
+               LayerTypePPPoE,
+               LayerTypePPP,
+               LayerTypeIPv6,
+               LayerTypeICMPv6,
+               gopacket.LayerTypePayload,
+       }, t)
+       testSerialization(t, p, testPPPoEICMPv6)
+}
+func BenchmarkDecodePPPoEICMPv6(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+var testPFLogUDP = []byte{
+       0x3d, 0x02, 0x00, 0x00, 0x65, 0x6e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xff, 0xff, 0xff, 0x7f,
+       0xa0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xb8, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+       0x45, 0x00, 0x00, 0x2c, 0x02, 0x16, 0x00, 0x00, 0x40, 0x11, 0x4e, 0xb0, 0xac, 0x17, 0xe8, 0xcc,
+       0xac, 0x17, 0xe8, 0xff, 0xf0, 0xff, 0x21, 0xa4, 0x00, 0x18, 0x2a, 0x25, 0x50, 0x4e, 0x4a, 0x50,
+       0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPFLogUDP(t *testing.T) {
+       p := gopacket.NewPacket(testPFLogUDP, LinkTypePFLog, testDecodeOptions)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{
+               LayerTypePFLog,
+               LayerTypeIPv4,
+               LayerTypeUDP,
+               gopacket.LayerTypePayload,
+       }, t)
+}
+
+func TestRegressionDot1QPriority(t *testing.T) {
+       d := &Dot1Q{
+               Priority: 2,
+       }
+       out := gopacket.NewSerializeBuffer()
+       gopacket.SerializeLayers(out, gopacket.SerializeOptions{}, d)
+       if err := d.DecodeFromBytes(out.Bytes(), gopacket.NilDecodeFeedback); err != nil {
+               t.Errorf("could not decode encoded dot1q")
+       } else if d.Priority != 2 {
+               t.Errorf("priority mismatch, want 2 got %d", d.Priority)
+       }
+}
+
+// testPacketMPLSInMPLS is the packet:
+//   15:27:44.753678 MPLS (label 18, exp 0, ttl 255) (label 16, exp 0, [S], ttl
+//   255) IP 10.31.0.1 > 10.34.0.1: ICMP echo request, id 3941, seq 4768, length
+//   80
+//      0x0000:  0030 96e6 fc39 0030 9605 2838 8847 0001  .0...9.0..(8.G..
+//      0x0010:  20ff 0001 01ff 4500 0064 0050 0000 ff01  ......E..d.P....
+//      0x0020:  a706 0a1f 0001 0a22 0001 0800 bd11 0f65  .......".......e
+//      0x0030:  12a0 0000 0000 0053 9ee0 abcd abcd abcd  .......S........
+//      0x0040:  abcd abcd abcd abcd abcd abcd abcd abcd  ................
+//      0x0050:  abcd abcd abcd abcd abcd abcd abcd abcd  ................
+//      0x0060:  abcd abcd abcd abcd abcd abcd abcd abcd  ................
+//      0x0070:  abcd abcd abcd abcd abcd                 ..........
+var testPacketMPLSInMPLS = []byte{
+       0x00, 0x30, 0x96, 0xe6, 0xfc, 0x39, 0x00, 0x30, 0x96, 0x05, 0x28, 0x38, 0x88, 0x47, 0x00, 0x01,
+       0x20, 0xff, 0x00, 0x01, 0x01, 0xff, 0x45, 0x00, 0x00, 0x64, 0x00, 0x50, 0x00, 0x00, 0xff, 0x01,
+       0xa7, 0x06, 0x0a, 0x1f, 0x00, 0x01, 0x0a, 0x22, 0x00, 0x01, 0x08, 0x00, 0xbd, 0x11, 0x0f, 0x65,
+       0x12, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x9e, 0xe0, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+}
+
+func TestPacketMPLSInMPLS(t *testing.T) {
+       p := gopacket.NewPacket(testPacketMPLSInMPLS, LinkTypeEthernet, testDecodeOptions)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{
+               LayerTypeEthernet,
+               LayerTypeMPLS,
+               LayerTypeMPLS,
+               LayerTypeIPv4,
+               LayerTypeICMPv4,
+               gopacket.LayerTypePayload}, t)
+}
+
+// testPacketIPv4Fragmented is the packet:
+//   22:11:26.616090 IP 10.1.1.1.31915 > 129.111.30.27.20197: UDP, length 28
+//      0x0000:  0000 39cf d9cd 0040 33d9 7cfd 0800 4500  ..9....@3.|...E.
+//      0x0010:  0038 00f2 2000 4011 af37 0a01 0101 816f  .8....@..7.....o
+//      0x0020:  1e1b 7cab 4ee5 0024 0000 0000 0000 0000  ..|.N..$........
+//      0x0030:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//      0x0040:  0000 0000 0000                           ......
+var testPacketIPv4Fragmented = []byte{
+       0x00, 0x00, 0x39, 0xcf, 0xd9, 0xcd, 0x00, 0x40, 0x33, 0xd9, 0x7c, 0xfd, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x38, 0x00, 0xf2, 0x20, 0x00, 0x40, 0x11, 0xaf, 0x37, 0x0a, 0x01, 0x01, 0x01, 0x81, 0x6f,
+       0x1e, 0x1b, 0x7c, 0xab, 0x4e, 0xe5, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketIPv4Fragmented(t *testing.T) {
+       p := gopacket.NewPacket(testPacketIPv4Fragmented, LinkTypeEthernet, testDecodeOptions)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, gopacket.LayerTypeFragment}, t)
+       testSerializationWithOpts(t, p, testPacketIPv4Fragmented, gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true})
+}
+
+// TestSCTPChunkBadLength tests for issue #146
+func TestSCTPChunkBadLength(t *testing.T) {
+       data := []byte(
+               "0000\xad9$e\x11\xe4\xaeo\b\x00E\x00\x018\xb4\xa3" +
+                       "\x00\x00Y\x84\xc4@\x11gz\xc0\xa8\xee\x01\xc0\xa8" +
+                       "\xeeD\x007le\x03\x01\xc0\f\xdf\b\x01\x00\x00")
+
+       // this panic'd previously due to a zero length chunk getting
+       // repeatedly read
+       gopacket.NewPacket(data, LinkTypeEthernet, gopacket.Default)
+}
+
+// TestSTP
+func TestSTP(t *testing.T) {
+       testSTPpacket := []byte{
+               0x01, 0x80, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x0E, 0x87, 0x85, 0x04, 0x00, 0x26, 0x42, 0x42,
+               0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x64, 0x00, 0x1C, 0x0E, 0x87, 0x78, 0x00, 0x00, 0x00,
+               0x00, 0x04, 0x80, 0x64, 0x00, 0x1C, 0x0E, 0x87, 0x85, 0x00, 0x80, 0x04, 0x01, 0x00, 0x14, 0x00,
+               0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       }
+       p := gopacket.NewPacket(testSTPpacket, LinkTypeEthernet, testDecodeOptions)
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSTP}, t)
+}
diff --git a/vendor/github.com/google/gopacket/layers/dhcp_test.go b/vendor/github.com/google/gopacket/layers/dhcp_test.go
new file mode 100644 (file)
index 0000000..c4975dc
--- /dev/null
@@ -0,0 +1,129 @@
+// Copyright 2016, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "bytes"
+       "net"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+func TestDHCPv4EncodeRequest(t *testing.T) {
+       dhcp := &DHCPv4{Operation: DHCPOpRequest, HardwareType: LinkTypeEthernet, Xid: 0x12345678,
+               ClientIP: net.IP{0, 0, 0, 0}, YourClientIP: net.IP{0, 0, 0, 0}, NextServerIP: net.IP{0, 0, 0, 0}, RelayAgentIP: net.IP{0, 0, 0, 0},
+               ClientHWAddr: net.HardwareAddr{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc},
+               ServerName:   make([]byte, 64), File: make([]byte, 128)}
+
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptMessageType, []byte{byte(DHCPMsgTypeDiscover)}))
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptHostname, []byte{'e', 'x', 'a', 'm', 'p', 'l', 'e', '.', 'c', 'o', 'm'}))
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptPad, nil))
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptParamsRequest,
+               []byte{byte(DHCPOptSubnetMask), byte(DHCPOptBroadcastAddr), byte(DHCPOptTimeOffset),
+                       byte(DHCPOptRouter), byte(DHCPOptDomainName), byte(DHCPOptDNS), byte(DHCPOptDomainSearch),
+                       byte(DHCPOptHostname), byte(DHCPOptNetBIOSTCPNS), byte(DHCPOptInterfaceMTU), byte(DHCPOptClasslessStaticRoute),
+                       byte(DHCPOptNTPServers)}))
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true}
+       err := gopacket.SerializeLayers(buf, opts, dhcp)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv4, testDecodeOptions)
+       dhcp2 := p2.Layer(LayerTypeDHCPv4).(*DHCPv4)
+       testDHCPEqual(t, dhcp, dhcp2)
+}
+
+func TestDHCPv4EncodeResponse(t *testing.T) {
+       dhcp := &DHCPv4{Operation: DHCPOpReply, HardwareType: LinkTypeEthernet, Xid: 0x12345678,
+               ClientIP: net.IP{0, 0, 0, 0}, YourClientIP: net.IP{192, 168, 0, 123}, NextServerIP: net.IP{192, 168, 0, 1}, RelayAgentIP: net.IP{0, 0, 0, 0},
+               ClientHWAddr: net.HardwareAddr{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc},
+               ServerName:   make([]byte, 64), File: make([]byte, 128)}
+
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptMessageType, []byte{byte(DHCPMsgTypeOffer)}))
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptSubnetMask, []byte{255, 255, 255, 0}))
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptPad, nil))
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptT1, []byte{0x00, 0x00, 0x0e, 0x10}))
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptT2, []byte{0x00, 0x00, 0x0e, 0x10}))
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptLeaseTime, []byte{0x00, 0x00, 0x0e, 0x10}))
+       dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptServerID, []byte{192, 168, 0, 1}))
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true}
+       err := gopacket.SerializeLayers(buf, opts, dhcp)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv4, testDecodeOptions)
+       dhcp2 := p2.Layer(LayerTypeDHCPv4).(*DHCPv4)
+       testDHCPEqual(t, dhcp, dhcp2)
+}
+
+func testDHCPEqual(t *testing.T, d1, d2 *DHCPv4) {
+       if d1.Operation != d2.Operation {
+               t.Errorf("expected Operation=%s, got %s", d1.Operation, d2.Operation)
+       }
+       if d1.HardwareType != d2.HardwareType {
+               t.Errorf("expected HardwareType=%s, got %s", d1.HardwareType, d2.HardwareType)
+       }
+       if d1.HardwareLen != d2.HardwareLen {
+               t.Errorf("expected HardwareLen=%v, got %v", d1.HardwareLen, d2.HardwareLen)
+       }
+       if d1.HardwareOpts != d2.HardwareOpts {
+               t.Errorf("expected HardwareOpts=%v, got %v", d1.HardwareOpts, d2.HardwareOpts)
+       }
+       if d1.Xid != d2.Xid {
+               t.Errorf("expected Xid=%v, got %v", d1.Xid, d2.Xid)
+       }
+       if d1.Secs != d2.Secs {
+               t.Errorf("expected Secs=%v, got %v", d1.Secs, d2.Secs)
+       }
+       if d1.Flags != d2.Flags {
+               t.Errorf("expected Flags=%v, got %v", d1.Flags, d2.Flags)
+       }
+       if !d1.ClientIP.Equal(d2.ClientIP) {
+               t.Errorf("expected ClientIP=%v, got %v", d1.ClientIP, d2.ClientIP)
+       }
+       if !d1.YourClientIP.Equal(d2.YourClientIP) {
+               t.Errorf("expected YourClientIP=%v, got %v", d1.YourClientIP, d2.YourClientIP)
+       }
+       if !d1.NextServerIP.Equal(d2.NextServerIP) {
+               t.Errorf("expected NextServerIP=%v, got %v", d1.NextServerIP, d2.NextServerIP)
+       }
+       if !d1.RelayAgentIP.Equal(d2.RelayAgentIP) {
+               t.Errorf("expected RelayAgentIP=%v, got %v", d1.RelayAgentIP, d2.RelayAgentIP)
+       }
+       if !bytes.Equal(d1.ClientHWAddr, d2.ClientHWAddr) {
+               t.Errorf("expected ClientHWAddr=%v, got %v", d1.ClientHWAddr, d2.ClientHWAddr)
+       }
+       if !bytes.Equal(d1.ServerName, d2.ServerName) {
+               t.Errorf("expected ServerName=%v, got %v", d1.ServerName, d2.ServerName)
+       }
+       if !bytes.Equal(d1.File, d2.File) {
+               t.Errorf("expected File=%v, got %v", d1.File, d2.File)
+       }
+       if len(d1.Options) != len(d2.Options) {
+               t.Errorf("expected %d options, got %d", len(d1.Options), len(d2.Options))
+       }
+
+       for i, o := range d1.Options {
+               testDHCPOptionEqual(t, i, o, d2.Options[i])
+       }
+}
+
+func testDHCPOptionEqual(t *testing.T, idx int, d1, d2 DHCPOption) {
+       if d1.Type != d2.Type {
+               t.Errorf("expection Options[%d].Type = %s, got %s", idx, d1.Type, d2.Type)
+       }
+       if !bytes.Equal(d1.Data, d2.Data) {
+               t.Errorf("expection Options[%d].Data to be = %v, got %v", idx, d1.Data, d2.Data)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/dhcpv4.go b/vendor/github.com/google/gopacket/layers/dhcpv4.go
new file mode 100644 (file)
index 0000000..761b201
--- /dev/null
@@ -0,0 +1,571 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "bytes"
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "net"
+
+       "github.com/google/gopacket"
+)
+
+// DHCPOp rerprents a bootp operation
+type DHCPOp byte
+
+// bootp operations
+const (
+       DHCPOpRequest DHCPOp = 1
+       DHCPOpReply   DHCPOp = 2
+)
+
+// String returns a string version of a DHCPOp.
+func (o DHCPOp) String() string {
+       switch o {
+       case DHCPOpRequest:
+               return "Request"
+       case DHCPOpReply:
+               return "Reply"
+       default:
+               return "Unknown"
+       }
+}
+
+// DHCPMsgType represents a DHCP operation
+type DHCPMsgType byte
+
+// Constants that represent DHCP operations
+const (
+       DHCPMsgTypeUnspecified DHCPMsgType = iota
+       DHCPMsgTypeDiscover
+       DHCPMsgTypeOffer
+       DHCPMsgTypeRequest
+       DHCPMsgTypeDecline
+       DHCPMsgTypeAck
+       DHCPMsgTypeNak
+       DHCPMsgTypeRelease
+       DHCPMsgTypeInform
+)
+
+// String returns a string version of a DHCPMsgType.
+func (o DHCPMsgType) String() string {
+       switch o {
+       case DHCPMsgTypeUnspecified:
+               return "Unspecified"
+       case DHCPMsgTypeDiscover:
+               return "Discover"
+       case DHCPMsgTypeOffer:
+               return "Offer"
+       case DHCPMsgTypeRequest:
+               return "Request"
+       case DHCPMsgTypeDecline:
+               return "Decline"
+       case DHCPMsgTypeAck:
+               return "Ack"
+       case DHCPMsgTypeNak:
+               return "Nak"
+       case DHCPMsgTypeRelease:
+               return "Release"
+       case DHCPMsgTypeInform:
+               return "Inform"
+       default:
+               return "Unknown"
+       }
+}
+
+//DHCPMagic is the RFC 2131 "magic cooke" for DHCP.
+var DHCPMagic uint32 = 0x63825363
+
+// DHCPv4 contains data for a single DHCP packet.
+type DHCPv4 struct {
+       BaseLayer
+       Operation    DHCPOp
+       HardwareType LinkType
+       HardwareLen  uint8
+       HardwareOpts uint8
+       Xid          uint32
+       Secs         uint16
+       Flags        uint16
+       ClientIP     net.IP
+       YourClientIP net.IP
+       NextServerIP net.IP
+       RelayAgentIP net.IP
+       ClientHWAddr net.HardwareAddr
+       ServerName   []byte
+       File         []byte
+       Options      DHCPOptions
+}
+
+// DHCPOptions is used to get nicely printed option lists which would normally
+// be cut off after 5 options.
+type DHCPOptions []DHCPOption
+
+// String returns a string version of the options list.
+func (o DHCPOptions) String() string {
+       buf := &bytes.Buffer{}
+       buf.WriteByte('[')
+       for i, opt := range o {
+               buf.WriteString(opt.String())
+               if i+1 != len(o) {
+                       buf.WriteString(", ")
+               }
+       }
+       buf.WriteByte(']')
+       return buf.String()
+}
+
+// LayerType returns gopacket.LayerTypeDHCPv4
+func (d *DHCPv4) LayerType() gopacket.LayerType { return LayerTypeDHCPv4 }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (d *DHCPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       d.Operation = DHCPOp(data[0])
+       d.HardwareType = LinkType(data[1])
+       d.HardwareLen = data[2]
+       d.HardwareOpts = data[3]
+       d.Xid = binary.BigEndian.Uint32(data[4:8])
+       d.Secs = binary.BigEndian.Uint16(data[8:10])
+       d.Flags = binary.BigEndian.Uint16(data[10:12])
+       d.ClientIP = net.IP(data[12:16])
+       d.YourClientIP = net.IP(data[16:20])
+       d.NextServerIP = net.IP(data[20:24])
+       d.RelayAgentIP = net.IP(data[24:28])
+       d.ClientHWAddr = net.HardwareAddr(data[28 : 28+d.HardwareLen])
+       d.ServerName = data[44:108]
+       d.File = data[108:236]
+       if binary.BigEndian.Uint32(data[236:240]) != DHCPMagic {
+               return errors.New("Bad DHCP header")
+       }
+
+       if len(data) <= 240 {
+               // DHCP Packet could have no option (??)
+               return nil
+       }
+
+       options := data[240:]
+
+       stop := len(options)
+       start := 0
+       for start < stop {
+               o := DHCPOption{}
+               if err := o.decode(options[start:]); err != nil {
+                       return err
+               }
+               if o.Type == DHCPOptEnd {
+                       break
+               }
+               d.Options = append(d.Options, o)
+               // Check if the option is a single byte pad
+               if o.Type == DHCPOptPad {
+                       start++
+               } else {
+                       start += int(o.Length) + 2
+               }
+       }
+       return nil
+}
+
+// Len returns the length of a DHCPv4 packet.
+func (d *DHCPv4) Len() uint16 {
+       n := uint16(240)
+       for _, o := range d.Options {
+               if o.Type == DHCPOptPad {
+                       n++
+               } else {
+                       n += uint16(o.Length) + 2
+               }
+       }
+       n++ // for opt end
+       return n
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (d *DHCPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       plen := int(d.Len())
+
+       data, err := b.PrependBytes(plen)
+       if err != nil {
+               return err
+       }
+
+       data[0] = byte(d.Operation)
+       data[1] = byte(d.HardwareType)
+       if opts.FixLengths {
+               d.HardwareLen = uint8(len(d.ClientHWAddr))
+       }
+       data[2] = d.HardwareLen
+       data[3] = d.HardwareOpts
+       binary.BigEndian.PutUint32(data[4:8], d.Xid)
+       binary.BigEndian.PutUint16(data[8:10], d.Secs)
+       binary.BigEndian.PutUint16(data[10:12], d.Flags)
+       copy(data[12:16], d.ClientIP.To4())
+       copy(data[16:20], d.YourClientIP.To4())
+       copy(data[20:24], d.NextServerIP.To4())
+       copy(data[24:28], d.RelayAgentIP.To4())
+       copy(data[28:44], d.ClientHWAddr)
+       copy(data[44:108], d.ServerName)
+       copy(data[108:236], d.File)
+       binary.BigEndian.PutUint32(data[236:240], DHCPMagic)
+
+       if len(d.Options) > 0 {
+               offset := 240
+               for _, o := range d.Options {
+                       if err := o.encode(data[offset:]); err != nil {
+                               return err
+                       }
+                       // A pad option is only a single byte
+                       if o.Type == DHCPOptPad {
+                               offset++
+                       } else {
+                               offset += 2 + len(o.Data)
+                       }
+               }
+               optend := NewDHCPOption(DHCPOptEnd, nil)
+               if err := optend.encode(data[offset:]); err != nil {
+                       return err
+               }
+       }
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (d *DHCPv4) CanDecode() gopacket.LayerClass {
+       return LayerTypeDHCPv4
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (d *DHCPv4) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+func decodeDHCPv4(data []byte, p gopacket.PacketBuilder) error {
+       dhcp := &DHCPv4{}
+       err := dhcp.DecodeFromBytes(data, p)
+       if err != nil {
+               return err
+       }
+       p.AddLayer(dhcp)
+       return p.NextDecoder(gopacket.LayerTypePayload)
+}
+
+// DHCPOpt represents a DHCP option or parameter from RFC-2132
+type DHCPOpt byte
+
+// Constants for the DHCPOpt options.
+const (
+       DHCPOptPad                   DHCPOpt = 0
+       DHCPOptSubnetMask            DHCPOpt = 1   // 4, net.IP
+       DHCPOptTimeOffset            DHCPOpt = 2   // 4, int32 (signed seconds from UTC)
+       DHCPOptRouter                DHCPOpt = 3   // n*4, [n]net.IP
+       DHCPOptTimeServer            DHCPOpt = 4   // n*4, [n]net.IP
+       DHCPOptNameServer            DHCPOpt = 5   // n*4, [n]net.IP
+       DHCPOptDNS                   DHCPOpt = 6   // n*4, [n]net.IP
+       DHCPOptLogServer             DHCPOpt = 7   // n*4, [n]net.IP
+       DHCPOptCookieServer          DHCPOpt = 8   // n*4, [n]net.IP
+       DHCPOptLPRServer             DHCPOpt = 9   // n*4, [n]net.IP
+       DHCPOptImpressServer         DHCPOpt = 10  // n*4, [n]net.IP
+       DHCPOptResLocServer          DHCPOpt = 11  // n*4, [n]net.IP
+       DHCPOptHostname              DHCPOpt = 12  // n, string
+       DHCPOptBootfileSize          DHCPOpt = 13  // 2, uint16
+       DHCPOptMeritDumpFile         DHCPOpt = 14  // >1, string
+       DHCPOptDomainName            DHCPOpt = 15  // n, string
+       DHCPOptSwapServer            DHCPOpt = 16  // n*4, [n]net.IP
+       DHCPOptRootPath              DHCPOpt = 17  // n, string
+       DHCPOptExtensionsPath        DHCPOpt = 18  // n, string
+       DHCPOptIPForwarding          DHCPOpt = 19  // 1, bool
+       DHCPOptSourceRouting         DHCPOpt = 20  // 1, bool
+       DHCPOptPolicyFilter          DHCPOpt = 21  // 8*n, [n]{net.IP/net.IP}
+       DHCPOptDatagramMTU           DHCPOpt = 22  // 2, uint16
+       DHCPOptDefaultTTL            DHCPOpt = 23  // 1, byte
+       DHCPOptPathMTUAgingTimeout   DHCPOpt = 24  // 4, uint32
+       DHCPOptPathPlateuTableOption DHCPOpt = 25  // 2*n, []uint16
+       DHCPOptInterfaceMTU          DHCPOpt = 26  // 2, uint16
+       DHCPOptAllSubsLocal          DHCPOpt = 27  // 1, bool
+       DHCPOptBroadcastAddr         DHCPOpt = 28  // 4, net.IP
+       DHCPOptMaskDiscovery         DHCPOpt = 29  // 1, bool
+       DHCPOptMaskSupplier          DHCPOpt = 30  // 1, bool
+       DHCPOptRouterDiscovery       DHCPOpt = 31  // 1, bool
+       DHCPOptSolicitAddr           DHCPOpt = 32  // 4, net.IP
+       DHCPOptStaticRoute           DHCPOpt = 33  // n*8, [n]{net.IP/net.IP} -- note the 2nd is router not mask
+       DHCPOptARPTrailers           DHCPOpt = 34  // 1, bool
+       DHCPOptARPTimeout            DHCPOpt = 35  // 4, uint32
+       DHCPOptEthernetEncap         DHCPOpt = 36  // 1, bool
+       DHCPOptTCPTTL                DHCPOpt = 37  // 1, byte
+       DHCPOptTCPKeepAliveInt       DHCPOpt = 38  // 4, uint32
+       DHCPOptTCPKeepAliveGarbage   DHCPOpt = 39  // 1, bool
+       DHCPOptNISDomain             DHCPOpt = 40  // n, string
+       DHCPOptNISServers            DHCPOpt = 41  // 4*n,  [n]net.IP
+       DHCPOptNTPServers            DHCPOpt = 42  // 4*n, [n]net.IP
+       DHCPOptVendorOption          DHCPOpt = 43  // n, [n]byte // may be encapsulated.
+       DHCPOptNetBIOSTCPNS          DHCPOpt = 44  // 4*n, [n]net.IP
+       DHCPOptNetBIOSTCPDDS         DHCPOpt = 45  // 4*n, [n]net.IP
+       DHCPOptNETBIOSTCPNodeType    DHCPOpt = 46  // 1, magic byte
+       DHCPOptNetBIOSTCPScope       DHCPOpt = 47  // n, string
+       DHCPOptXFontServer           DHCPOpt = 48  // n, string
+       DHCPOptXDisplayManager       DHCPOpt = 49  // n, string
+       DHCPOptRequestIP             DHCPOpt = 50  // 4, net.IP
+       DHCPOptLeaseTime             DHCPOpt = 51  // 4, uint32
+       DHCPOptExtOptions            DHCPOpt = 52  // 1, 1/2/3
+       DHCPOptMessageType           DHCPOpt = 53  // 1, 1-7
+       DHCPOptServerID              DHCPOpt = 54  // 4, net.IP
+       DHCPOptParamsRequest         DHCPOpt = 55  // n, []byte
+       DHCPOptMessage               DHCPOpt = 56  // n, 3
+       DHCPOptMaxMessageSize        DHCPOpt = 57  // 2, uint16
+       DHCPOptT1                    DHCPOpt = 58  // 4, uint32
+       DHCPOptT2                    DHCPOpt = 59  // 4, uint32
+       DHCPOptClassID               DHCPOpt = 60  // n, []byte
+       DHCPOptClientID              DHCPOpt = 61  // n >=  2, []byte
+       DHCPOptDomainSearch          DHCPOpt = 119 // n, string
+       DHCPOptSIPServers            DHCPOpt = 120 // n, url
+       DHCPOptClasslessStaticRoute  DHCPOpt = 121 //
+       DHCPOptEnd                   DHCPOpt = 255
+)
+
+// String returns a string version of a DHCPOpt.
+func (o DHCPOpt) String() string {
+       switch o {
+       case DHCPOptPad:
+               return "(padding)"
+       case DHCPOptSubnetMask:
+               return "SubnetMask"
+       case DHCPOptTimeOffset:
+               return "TimeOffset"
+       case DHCPOptRouter:
+               return "Router"
+       case DHCPOptTimeServer:
+               return "rfc868" // old time server protocol stringified to dissuade confusion w. NTP
+       case DHCPOptNameServer:
+               return "ien116" // obscure nameserver protocol stringified to dissuade confusion w. DNS
+       case DHCPOptDNS:
+               return "DNS"
+       case DHCPOptLogServer:
+               return "mitLCS" // MIT LCS server protocol yada yada w. Syslog
+       case DHCPOptCookieServer:
+               return "CookieServer"
+       case DHCPOptLPRServer:
+               return "LPRServer"
+       case DHCPOptImpressServer:
+               return "ImpressServer"
+       case DHCPOptResLocServer:
+               return "ResourceLocationServer"
+       case DHCPOptHostname:
+               return "Hostname"
+       case DHCPOptBootfileSize:
+               return "BootfileSize"
+       case DHCPOptMeritDumpFile:
+               return "MeritDumpFile"
+       case DHCPOptDomainName:
+               return "DomainName"
+       case DHCPOptSwapServer:
+               return "SwapServer"
+       case DHCPOptRootPath:
+               return "RootPath"
+       case DHCPOptExtensionsPath:
+               return "ExtensionsPath"
+       case DHCPOptIPForwarding:
+               return "IPForwarding"
+       case DHCPOptSourceRouting:
+               return "SourceRouting"
+       case DHCPOptPolicyFilter:
+               return "PolicyFilter"
+       case DHCPOptDatagramMTU:
+               return "DatagramMTU"
+       case DHCPOptDefaultTTL:
+               return "DefaultTTL"
+       case DHCPOptPathMTUAgingTimeout:
+               return "PathMTUAgingTimeout"
+       case DHCPOptPathPlateuTableOption:
+               return "PathPlateuTableOption"
+       case DHCPOptInterfaceMTU:
+               return "InterfaceMTU"
+       case DHCPOptAllSubsLocal:
+               return "AllSubsLocal"
+       case DHCPOptBroadcastAddr:
+               return "BroadcastAddress"
+       case DHCPOptMaskDiscovery:
+               return "MaskDiscovery"
+       case DHCPOptMaskSupplier:
+               return "MaskSupplier"
+       case DHCPOptRouterDiscovery:
+               return "RouterDiscovery"
+       case DHCPOptSolicitAddr:
+               return "SolicitAddr"
+       case DHCPOptStaticRoute:
+               return "StaticRoute"
+       case DHCPOptARPTrailers:
+               return "ARPTrailers"
+       case DHCPOptARPTimeout:
+               return "ARPTimeout"
+       case DHCPOptEthernetEncap:
+               return "EthernetEncap"
+       case DHCPOptTCPTTL:
+               return "TCPTTL"
+       case DHCPOptTCPKeepAliveInt:
+               return "TCPKeepAliveInt"
+       case DHCPOptTCPKeepAliveGarbage:
+               return "TCPKeepAliveGarbage"
+       case DHCPOptNISDomain:
+               return "NISDomain"
+       case DHCPOptNISServers:
+               return "NISServers"
+       case DHCPOptNTPServers:
+               return "NTPServers"
+       case DHCPOptVendorOption:
+               return "VendorOption"
+       case DHCPOptNetBIOSTCPNS:
+               return "NetBIOSOverTCPNS"
+       case DHCPOptNetBIOSTCPDDS:
+               return "NetBiosOverTCPDDS"
+       case DHCPOptNETBIOSTCPNodeType:
+               return "NetBIOSOverTCPNodeType"
+       case DHCPOptNetBIOSTCPScope:
+               return "NetBIOSOverTCPScope"
+       case DHCPOptXFontServer:
+               return "XFontServer"
+       case DHCPOptXDisplayManager:
+               return "XDisplayManager"
+       case DHCPOptEnd:
+               return "(end)"
+       case DHCPOptSIPServers:
+               return "SipServers"
+       case DHCPOptRequestIP:
+               return "RequestIP"
+       case DHCPOptLeaseTime:
+               return "LeaseTime"
+       case DHCPOptExtOptions:
+               return "ExtOpts"
+       case DHCPOptMessageType:
+               return "MessageType"
+       case DHCPOptServerID:
+               return "ServerID"
+       case DHCPOptParamsRequest:
+               return "ParamsRequest"
+       case DHCPOptMessage:
+               return "Message"
+       case DHCPOptMaxMessageSize:
+               return "MaxDHCPSize"
+       case DHCPOptT1:
+               return "Timer1"
+       case DHCPOptT2:
+               return "Timer2"
+       case DHCPOptClassID:
+               return "ClassID"
+       case DHCPOptClientID:
+               return "ClientID"
+       case DHCPOptDomainSearch:
+               return "DomainSearch"
+       case DHCPOptClasslessStaticRoute:
+               return "ClasslessStaticRoute"
+       default:
+               return "Unknown"
+       }
+}
+
+// DHCPOption rerpresents a DHCP option.
+type DHCPOption struct {
+       Type   DHCPOpt
+       Length uint8
+       Data   []byte
+}
+
+// String returns a string version of a DHCP Option.
+func (o DHCPOption) String() string {
+       switch o.Type {
+
+       case DHCPOptHostname, DHCPOptMeritDumpFile, DHCPOptDomainName, DHCPOptRootPath,
+               DHCPOptExtensionsPath, DHCPOptNISDomain, DHCPOptNetBIOSTCPScope, DHCPOptXFontServer,
+               DHCPOptXDisplayManager, DHCPOptMessage, DHCPOptDomainSearch: // string
+               return fmt.Sprintf("Option(%s:%s)", o.Type, string(o.Data))
+
+       case DHCPOptMessageType:
+               if len(o.Data) != 1 {
+                       return fmt.Sprintf("Option(%s:INVALID)", o.Type)
+               }
+               return fmt.Sprintf("Option(%s:%s)", o.Type, DHCPMsgType(o.Data[0]))
+
+       case DHCPOptSubnetMask, DHCPOptServerID, DHCPOptBroadcastAddr,
+               DHCPOptSolicitAddr, DHCPOptRequestIP: // net.IP
+               if len(o.Data) < 4 {
+                       return fmt.Sprintf("Option(%s:INVALID)", o.Type)
+               }
+               return fmt.Sprintf("Option(%s:%s)", o.Type, net.IP(o.Data))
+
+       case DHCPOptT1, DHCPOptT2, DHCPOptLeaseTime, DHCPOptPathMTUAgingTimeout,
+               DHCPOptARPTimeout, DHCPOptTCPKeepAliveInt: // uint32
+               if len(o.Data) != 4 {
+                       return fmt.Sprintf("Option(%s:INVALID)", o.Type)
+               }
+               return fmt.Sprintf("Option(%s:%d)", o.Type,
+                       uint32(o.Data[0])<<24|uint32(o.Data[1])<<16|uint32(o.Data[2])<<8|uint32(o.Data[3]))
+
+       case DHCPOptParamsRequest:
+               buf := &bytes.Buffer{}
+               buf.WriteString(fmt.Sprintf("Option(%s:", o.Type))
+               for i, v := range o.Data {
+                       buf.WriteString(DHCPOpt(v).String())
+                       if i+1 != len(o.Data) {
+                               buf.WriteByte(',')
+                       }
+               }
+               buf.WriteString(")")
+               return buf.String()
+
+       default:
+               return fmt.Sprintf("Option(%s:%v)", o.Type, o.Data)
+       }
+}
+
+// NewDHCPOption constructs a new DHCPOption with a given type and data.
+func NewDHCPOption(t DHCPOpt, data []byte) DHCPOption {
+       o := DHCPOption{Type: t}
+       if data != nil {
+               o.Data = data
+               o.Length = uint8(len(data))
+       }
+       return o
+}
+
+func (o *DHCPOption) encode(b []byte) error {
+       switch o.Type {
+       case DHCPOptPad, DHCPOptEnd:
+               b[0] = byte(o.Type)
+       default:
+               if o.Length > 253 {
+                       return errors.New("data too long to encode")
+               }
+               b[0] = byte(o.Type)
+               b[1] = o.Length
+               copy(b[2:], o.Data)
+       }
+       return nil
+}
+
+func (o *DHCPOption) decode(data []byte) error {
+       if len(data) < 1 {
+               // Pad/End have a length of 1
+               return errors.New("Not enough data to decode")
+       }
+       o.Type = DHCPOpt(data[0])
+       switch o.Type {
+       case DHCPOptPad, DHCPOptEnd:
+               o.Data = nil
+       default:
+               if len(data) < 3 {
+                       return errors.New("Not enough data to decode")
+               }
+               o.Length = data[1]
+               if o.Length > 253 {
+                       return errors.New("data too long to decode")
+               }
+               o.Data = data[2 : 2+o.Length]
+       }
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/dns.go b/vendor/github.com/google/gopacket/layers/dns.go
new file mode 100644 (file)
index 0000000..2368a28
--- /dev/null
@@ -0,0 +1,894 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "net"
+
+       "github.com/google/gopacket"
+)
+
+// DNSClass defines the class associated with a request/response.  Different DNS
+// classes can be thought of as an array of parallel namespace trees.
+type DNSClass uint16
+
+// DNSClass known values.
+const (
+       DNSClassIN  DNSClass = 1   // Internet
+       DNSClassCS  DNSClass = 2   // the CSNET class (Obsolete)
+       DNSClassCH  DNSClass = 3   // the CHAOS class
+       DNSClassHS  DNSClass = 4   // Hesiod [Dyer 87]
+       DNSClassAny DNSClass = 255 // AnyClass
+)
+
+func (dc DNSClass) String() string {
+       switch dc {
+       default:
+               return "Unknown"
+       case DNSClassIN:
+               return "IN"
+       case DNSClassCS:
+               return "CS"
+       case DNSClassCH:
+               return "CH"
+       case DNSClassHS:
+               return "HS"
+       case DNSClassAny:
+               return "Any"
+       }
+}
+
+// DNSType defines the type of data being requested/returned in a
+// question/answer.
+type DNSType uint16
+
+// DNSType known values.
+const (
+       DNSTypeA     DNSType = 1  // a host address
+       DNSTypeNS    DNSType = 2  // an authoritative name server
+       DNSTypeMD    DNSType = 3  // a mail destination (Obsolete - use MX)
+       DNSTypeMF    DNSType = 4  // a mail forwarder (Obsolete - use MX)
+       DNSTypeCNAME DNSType = 5  // the canonical name for an alias
+       DNSTypeSOA   DNSType = 6  // marks the start of a zone of authority
+       DNSTypeMB    DNSType = 7  // a mailbox domain name (EXPERIMENTAL)
+       DNSTypeMG    DNSType = 8  // a mail group member (EXPERIMENTAL)
+       DNSTypeMR    DNSType = 9  // a mail rename domain name (EXPERIMENTAL)
+       DNSTypeNULL  DNSType = 10 // a null RR (EXPERIMENTAL)
+       DNSTypeWKS   DNSType = 11 // a well known service description
+       DNSTypePTR   DNSType = 12 // a domain name pointer
+       DNSTypeHINFO DNSType = 13 // host information
+       DNSTypeMINFO DNSType = 14 // mailbox or mail list information
+       DNSTypeMX    DNSType = 15 // mail exchange
+       DNSTypeTXT   DNSType = 16 // text strings
+       DNSTypeAAAA  DNSType = 28 // a IPv6 host address [RFC3596]
+       DNSTypeSRV   DNSType = 33 // server discovery [RFC2782] [RFC6195]
+)
+
+func (dt DNSType) String() string {
+       switch dt {
+       default:
+               return "Unknown"
+       case DNSTypeA:
+               return "A"
+       case DNSTypeNS:
+               return "NS"
+       case DNSTypeMD:
+               return "MD"
+       case DNSTypeMF:
+               return "MF"
+       case DNSTypeCNAME:
+               return "CNAME"
+       case DNSTypeSOA:
+               return "SOA"
+       case DNSTypeMB:
+               return "MB"
+       case DNSTypeMG:
+               return "MG"
+       case DNSTypeMR:
+               return "MR"
+       case DNSTypeNULL:
+               return "NULL"
+       case DNSTypeWKS:
+               return "WKS"
+       case DNSTypePTR:
+               return "PTR"
+       case DNSTypeHINFO:
+               return "HINFO"
+       case DNSTypeMINFO:
+               return "MINFO"
+       case DNSTypeMX:
+               return "MX"
+       case DNSTypeTXT:
+               return "TXT"
+       case DNSTypeAAAA:
+               return "AAAA"
+       case DNSTypeSRV:
+               return "SRV"
+       }
+}
+
+// DNSResponseCode provides response codes for question answers.
+type DNSResponseCode uint8
+
+// DNSResponseCode known values.
+const (
+       DNSResponseCodeNoErr    DNSResponseCode = 0  // No error
+       DNSResponseCodeFormErr  DNSResponseCode = 1  // Format Error                       [RFC1035]
+       DNSResponseCodeServFail DNSResponseCode = 2  // Server Failure                     [RFC1035]
+       DNSResponseCodeNXDomain DNSResponseCode = 3  // Non-Existent Domain                [RFC1035]
+       DNSResponseCodeNotImp   DNSResponseCode = 4  // Not Implemented                    [RFC1035]
+       DNSResponseCodeRefused  DNSResponseCode = 5  // Query Refused                      [RFC1035]
+       DNSResponseCodeYXDomain DNSResponseCode = 6  // Name Exists when it should not     [RFC2136]
+       DNSResponseCodeYXRRSet  DNSResponseCode = 7  // RR Set Exists when it should not   [RFC2136]
+       DNSResponseCodeNXRRSet  DNSResponseCode = 8  // RR Set that should exist does not  [RFC2136]
+       DNSResponseCodeNotAuth  DNSResponseCode = 9  // Server Not Authoritative for zone  [RFC2136]
+       DNSResponseCodeNotZone  DNSResponseCode = 10 // Name not contained in zone         [RFC2136]
+       DNSResponseCodeBadVers  DNSResponseCode = 16 // Bad OPT Version                    [RFC2671]
+       DNSResponseCodeBadSig   DNSResponseCode = 16 // TSIG Signature Failure             [RFC2845]
+       DNSResponseCodeBadKey   DNSResponseCode = 17 // Key not recognized                 [RFC2845]
+       DNSResponseCodeBadTime  DNSResponseCode = 18 // Signature out of time window       [RFC2845]
+       DNSResponseCodeBadMode  DNSResponseCode = 19 // Bad TKEY Mode                      [RFC2930]
+       DNSResponseCodeBadName  DNSResponseCode = 20 // Duplicate key name                 [RFC2930]
+       DNSResponseCodeBadAlg   DNSResponseCode = 21 // Algorithm not supported            [RFC2930]
+       DNSResponseCodeBadTruc  DNSResponseCode = 22 // Bad Truncation                     [RFC4635]
+)
+
+func (drc DNSResponseCode) String() string {
+       switch drc {
+       default:
+               return "Unknown"
+       case DNSResponseCodeNoErr:
+               return "No Error"
+       case DNSResponseCodeFormErr:
+               return "Format Error"
+       case DNSResponseCodeServFail:
+               return "Server Failure "
+       case DNSResponseCodeNXDomain:
+               return "Non-Existent Domain"
+       case DNSResponseCodeNotImp:
+               return "Not Implemented"
+       case DNSResponseCodeRefused:
+               return "Query Refused"
+       case DNSResponseCodeYXDomain:
+               return "Name Exists when it should not"
+       case DNSResponseCodeYXRRSet:
+               return "RR Set Exists when it should not"
+       case DNSResponseCodeNXRRSet:
+               return "RR Set that should exist does not"
+       case DNSResponseCodeNotAuth:
+               return "Server Not Authoritative for zone"
+       case DNSResponseCodeNotZone:
+               return "Name not contained in zone"
+       case DNSResponseCodeBadVers:
+               return "Bad OPT Version"
+       case DNSResponseCodeBadKey:
+               return "Key not recognized"
+       case DNSResponseCodeBadTime:
+               return "Signature out of time window"
+       case DNSResponseCodeBadMode:
+               return "Bad TKEY Mode"
+       case DNSResponseCodeBadName:
+               return "Duplicate key name"
+       case DNSResponseCodeBadAlg:
+               return "Algorithm not supported"
+       case DNSResponseCodeBadTruc:
+               return "Bad Truncation"
+       }
+}
+
+// DNSOpCode defines a set of different operation types.
+type DNSOpCode uint8
+
+// DNSOpCode known values.
+const (
+       DNSOpCodeQuery  DNSOpCode = 0 // Query                  [RFC1035]
+       DNSOpCodeIQuery DNSOpCode = 1 // Inverse Query Obsolete [RFC3425]
+       DNSOpCodeStatus DNSOpCode = 2 // Status                 [RFC1035]
+       DNSOpCodeNotify DNSOpCode = 4 // Notify                 [RFC1996]
+       DNSOpCodeUpdate DNSOpCode = 5 // Update                 [RFC2136]
+)
+
+func (doc DNSOpCode) String() string {
+       switch doc {
+       default:
+               return "Unknown"
+       case DNSOpCodeQuery:
+               return "Query"
+       case DNSOpCodeIQuery:
+               return "Inverse Query"
+       case DNSOpCodeStatus:
+               return "Status"
+       case DNSOpCodeNotify:
+               return "Notify"
+       case DNSOpCodeUpdate:
+               return "Update"
+       }
+}
+
+// DNS is specified in RFC 1034 / RFC 1035
+// +---------------------+
+// |        Header       |
+// +---------------------+
+// |       Question      | the question for the name server
+// +---------------------+
+// |        Answer       | RRs answering the question
+// +---------------------+
+// |      Authority      | RRs pointing toward an authority
+// +---------------------+
+// |      Additional     | RRs holding additional information
+// +---------------------+
+//
+//  DNS Header
+//  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                      ID                       |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    QDCOUNT                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    ANCOUNT                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    NSCOUNT                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    ARCOUNT                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// DNS contains data from a single Domain Name Service packet.
+type DNS struct {
+       BaseLayer
+
+       // Header fields
+       ID     uint16
+       QR     bool
+       OpCode DNSOpCode
+
+       AA bool  // Authoritative answer
+       TC bool  // Truncated
+       RD bool  // Recursion desired
+       RA bool  // Recursion available
+       Z  uint8 // Resrved for future use
+
+       ResponseCode DNSResponseCode
+       QDCount      uint16 // Number of questions to expect
+       ANCount      uint16 // Number of answers to expect
+       NSCount      uint16 // Number of authorities to expect
+       ARCount      uint16 // Number of additional records to expect
+
+       // Entries
+       Questions   []DNSQuestion
+       Answers     []DNSResourceRecord
+       Authorities []DNSResourceRecord
+       Additionals []DNSResourceRecord
+
+       // buffer for doing name decoding.  We use a single reusable buffer to avoid
+       // name decoding on a single object via multiple DecodeFromBytes calls
+       // requiring constant allocation of small byte slices.
+       buffer []byte
+}
+
+// LayerType returns gopacket.LayerTypeDNS.
+func (d *DNS) LayerType() gopacket.LayerType { return LayerTypeDNS }
+
+// decodeDNS decodes the byte slice into a DNS type. It also
+// setups the application Layer in PacketBuilder.
+func decodeDNS(data []byte, p gopacket.PacketBuilder) error {
+       d := &DNS{}
+       err := d.DecodeFromBytes(data, p)
+       if err != nil {
+               return err
+       }
+       p.AddLayer(d)
+       p.SetApplicationLayer(d)
+       return nil
+}
+
+// DecodeFromBytes decodes the slice into the DNS struct.
+func (d *DNS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       d.buffer = d.buffer[:0]
+
+       if len(data) < 12 {
+               df.SetTruncated()
+               return errors.New("DNS packet too short")
+       }
+
+       // since there are no further layers, the baselayer's content is
+       // pointing to this layer
+       d.BaseLayer = BaseLayer{Contents: data[:len(data)]}
+       d.ID = binary.BigEndian.Uint16(data[:2])
+       d.QR = data[2]&0x80 != 0
+       d.OpCode = DNSOpCode(data[2]>>3) & 0x0F
+       d.AA = data[2]&0x04 != 0
+       d.TC = data[2]&0x02 != 0
+       d.RD = data[2]&0x01 != 0
+       d.RA = data[3]&0x80 != 0
+       d.Z = uint8(data[3]>>4) & 0x7
+       d.ResponseCode = DNSResponseCode(data[3] & 0xF)
+       d.QDCount = binary.BigEndian.Uint16(data[4:6])
+       d.ANCount = binary.BigEndian.Uint16(data[6:8])
+       d.NSCount = binary.BigEndian.Uint16(data[8:10])
+       d.ARCount = binary.BigEndian.Uint16(data[10:12])
+
+       d.Questions = d.Questions[:0]
+       d.Answers = d.Answers[:0]
+       d.Authorities = d.Authorities[:0]
+       d.Additionals = d.Additionals[:0]
+
+       offset := 12
+       var err error
+       for i := 0; i < int(d.QDCount); i++ {
+               var q DNSQuestion
+               if offset, err = q.decode(data, offset, df, &d.buffer); err != nil {
+                       return err
+               }
+               d.Questions = append(d.Questions, q)
+       }
+
+       // For some horrible reason, if we do the obvious thing in this loop:
+       //   var r DNSResourceRecord
+       //   if blah := r.decode(blah); err != nil {
+       //     return err
+       //   }
+       //   d.Foo = append(d.Foo, r)
+       // the Go compiler thinks that 'r' escapes to the heap, causing a malloc for
+       // every Answer, Authority, and Additional.  To get around this, we do
+       // something really silly:  we append an empty resource record to our slice,
+       // then use the last value in the slice to call decode.  Since the value is
+       // already in the slice, there's no WAY it can escape... on the other hand our
+       // code is MUCH uglier :(
+       for i := 0; i < int(d.ANCount); i++ {
+               d.Answers = append(d.Answers, DNSResourceRecord{})
+               if offset, err = d.Answers[i].decode(data, offset, df, &d.buffer); err != nil {
+                       d.Answers = d.Answers[:i] // strip off erroneous value
+                       return err
+               }
+       }
+       for i := 0; i < int(d.NSCount); i++ {
+               d.Authorities = append(d.Authorities, DNSResourceRecord{})
+               if offset, err = d.Authorities[i].decode(data, offset, df, &d.buffer); err != nil {
+                       d.Authorities = d.Authorities[:i] // strip off erroneous value
+                       return err
+               }
+       }
+       for i := 0; i < int(d.ARCount); i++ {
+               d.Additionals = append(d.Additionals, DNSResourceRecord{})
+               if offset, err = d.Additionals[i].decode(data, offset, df, &d.buffer); err != nil {
+                       d.Additionals = d.Additionals[:i] // strip off erroneous value
+                       return err
+               }
+       }
+
+       if uint16(len(d.Questions)) != d.QDCount {
+               return errors.New("Invalid query decoding, not the right number of questions")
+       } else if uint16(len(d.Answers)) != d.ANCount {
+               return errors.New("Invalid query decoding, not the right number of answers")
+       } else if uint16(len(d.Authorities)) != d.NSCount {
+               return errors.New("Invalid query decoding, not the right number of authorities")
+       } else if uint16(len(d.Additionals)) != d.ARCount {
+               return errors.New("Invalid query decoding, not the right number of additionals info")
+       }
+       return nil
+}
+
+// CanDecode implements gopacket.DecodingLayer.
+func (d *DNS) CanDecode() gopacket.LayerClass {
+       return LayerTypeDNS
+}
+
+// NextLayerType implements gopacket.DecodingLayer.
+func (d *DNS) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+// Payload returns nil.
+func (d *DNS) Payload() []byte {
+       return nil
+}
+
+func b2i(b bool) int {
+       if b {
+               return 1
+       }
+       return 0
+}
+
+func recSize(rr *DNSResourceRecord) int {
+       switch rr.Type {
+       case DNSTypeA:
+               return 4
+       case DNSTypeAAAA:
+               return 16
+       case DNSTypeNS:
+               return len(rr.NS) + 2
+       case DNSTypeCNAME:
+               return len(rr.CNAME) + 2
+       case DNSTypePTR:
+               return len(rr.PTR) + 2
+       case DNSTypeSOA:
+               return len(rr.SOA.MName) + 2 + len(rr.SOA.RName) + 2 + 20
+       case DNSTypeMX:
+               return 2 + len(rr.MX.Name) + 2
+       case DNSTypeTXT:
+               l := len(rr.TXTs)
+               for _, txt := range rr.TXTs {
+                       l += len(txt)
+               }
+               return l
+       case DNSTypeSRV:
+               return 6 + len(rr.SRV.Name) + 2
+       }
+
+       return 0
+}
+
+func computeSize(recs []DNSResourceRecord) int {
+       sz := 0
+       for _, rr := range recs {
+               sz += len(rr.Name) + 14
+               sz += recSize(&rr)
+       }
+       return sz
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+func (d *DNS) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       dsz := 0
+       for _, q := range d.Questions {
+               dsz += len(q.Name) + 6
+       }
+       dsz += computeSize(d.Answers)
+       dsz += computeSize(d.Authorities)
+       dsz += computeSize(d.Additionals)
+
+       bytes, err := b.PrependBytes(12 + dsz)
+       if err != nil {
+               return err
+       }
+       binary.BigEndian.PutUint16(bytes, d.ID)
+       bytes[2] = byte((b2i(d.QR) << 7) | (int(d.OpCode) << 3) | (b2i(d.AA) << 2) | (b2i(d.TC) << 1) | b2i(d.RD))
+       bytes[3] = byte((b2i(d.RA) << 7) | (int(d.Z) << 4) | int(d.ResponseCode))
+
+       if opts.FixLengths {
+               d.QDCount = uint16(len(d.Questions))
+               d.ANCount = uint16(len(d.Answers))
+               d.NSCount = uint16(len(d.Authorities))
+               d.ARCount = uint16(len(d.Additionals))
+       }
+       binary.BigEndian.PutUint16(bytes[4:], d.QDCount)
+       binary.BigEndian.PutUint16(bytes[6:], d.ANCount)
+       binary.BigEndian.PutUint16(bytes[8:], d.NSCount)
+       binary.BigEndian.PutUint16(bytes[10:], d.ARCount)
+
+       off := 12
+       for _, qd := range d.Questions {
+               n := qd.encode(bytes, off)
+               off += n
+       }
+
+       for i := range d.Answers {
+               // done this way so we can modify DNSResourceRecord to fix
+               // lengths if requested
+               qa := &d.Answers[i]
+               n, err := qa.encode(bytes, off, opts)
+               if err != nil {
+                       return err
+               }
+               off += n
+       }
+
+       for i := range d.Authorities {
+               qa := &d.Authorities[i]
+               n, err := qa.encode(bytes, off, opts)
+               if err != nil {
+                       return err
+               }
+               off += n
+       }
+       for i := range d.Additionals {
+               qa := &d.Additionals[i]
+               n, err := qa.encode(bytes, off, opts)
+               if err != nil {
+                       return err
+               }
+               off += n
+       }
+
+       return nil
+}
+
+var errMaxRecursion = errors.New("max DNS recursion level hit")
+
+const maxRecursionLevel = 255
+
+func decodeName(data []byte, offset int, buffer *[]byte, level int) ([]byte, int, error) {
+       if level > maxRecursionLevel {
+               return nil, 0, errMaxRecursion
+       } else if offset >= len(data) {
+               return nil, 0, errors.New("dns name offset too high")
+       } else if offset < 0 {
+               return nil, 0, errors.New("dns name offset is negative")
+       }
+       start := len(*buffer)
+       index := offset
+       if data[index] == 0x00 {
+               return nil, index + 1, nil
+       }
+loop:
+       for data[index] != 0x00 {
+               switch data[index] & 0xc0 {
+               default:
+                       /* RFC 1035
+                          A domain name represented as a sequence of labels, where
+                          each label consists of a length octet followed by that
+                          number of octets.  The domain name terminates with the
+                          zero length octet for the null label of the root.  Note
+                          that this field may be an odd number of octets; no
+                          padding is used.
+                       */
+                       index2 := index + int(data[index]) + 1
+                       if index2-offset > 255 {
+                               return nil, 0, errors.New("dns name is too long")
+                       } else if index2 < index+1 || index2 > len(data) {
+                               return nil, 0, errors.New("dns name uncomputable: invalid index")
+                       }
+                       *buffer = append(*buffer, '.')
+                       *buffer = append(*buffer, data[index+1:index2]...)
+                       index = index2
+
+               case 0xc0:
+                       /* RFC 1035
+                          The pointer takes the form of a two octet sequence.
+
+                          The first two bits are ones.  This allows a pointer to
+                          be distinguished from a label, since the label must
+                          begin with two zero bits because labels are restricted
+                          to 63 octets or less.  (The 10 and 01 combinations are
+                          reserved for future use.)  The OFFSET field specifies
+                          an offset from the start of the message (i.e., the
+                          first octet of the ID field in the domain header).  A
+                          zero offset specifies the first byte of the ID field,
+                          etc.
+
+                          The compression scheme allows a domain name in a message to be
+                          represented as either:
+                             - a sequence of labels ending in a zero octet
+                             - a pointer
+                             - a sequence of labels ending with a pointer
+                       */
+                       if index+2 > len(data) {
+                               return nil, 0, errors.New("dns offset pointer too high")
+                       }
+                       offsetp := int(binary.BigEndian.Uint16(data[index:index+2]) & 0x3fff)
+                       if offsetp > len(data) {
+                               return nil, 0, errors.New("dns offset pointer too high")
+                       }
+                       // This looks a little tricky, but actually isn't.  Because of how
+                       // decodeName is written, calling it appends the decoded name to the
+                       // current buffer.  We already have the start of the buffer, then, so
+                       // once this call is done buffer[start:] will contain our full name.
+                       _, _, err := decodeName(data, offsetp, buffer, level+1)
+                       if err != nil {
+                               return nil, 0, err
+                       }
+                       index++ // pointer is two bytes, so add an extra byte here.
+                       break loop
+               /* EDNS, or other DNS option ? */
+               case 0x40: // RFC 2673
+                       return nil, 0, fmt.Errorf("qname '0x40' - RFC 2673 unsupported yet (data=%x index=%d)",
+                               data[index], index)
+
+               case 0x80:
+                       return nil, 0, fmt.Errorf("qname '0x80' unsupported yet (data=%x index=%d)",
+                               data[index], index)
+               }
+               if index >= len(data) {
+                       return nil, 0, errors.New("dns index walked out of range")
+               }
+       }
+       if len(*buffer) <= start {
+               return nil, 0, errors.New("no dns data found for name")
+       }
+       return (*buffer)[start+1:], index + 1, nil
+}
+
+// DNSQuestion wraps a single request (question) within a DNS query.
+type DNSQuestion struct {
+       Name  []byte
+       Type  DNSType
+       Class DNSClass
+}
+
+func (q *DNSQuestion) decode(data []byte, offset int, df gopacket.DecodeFeedback, buffer *[]byte) (int, error) {
+       name, endq, err := decodeName(data, offset, buffer, 1)
+       if err != nil {
+               return 0, err
+       }
+
+       q.Name = name
+       q.Type = DNSType(binary.BigEndian.Uint16(data[endq : endq+2]))
+       q.Class = DNSClass(binary.BigEndian.Uint16(data[endq+2 : endq+4]))
+
+       return endq + 4, nil
+}
+
+func (q *DNSQuestion) encode(data []byte, offset int) int {
+       noff := encodeName(q.Name, data, offset)
+       binary.BigEndian.PutUint16(data[noff:], uint16(q.Type))
+       binary.BigEndian.PutUint16(data[noff+2:], uint16(q.Class))
+       return len(q.Name) + 6
+}
+
+//  DNSResourceRecord
+//  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                                               |
+//  /                                               /
+//  /                      NAME                     /
+//  |                                               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                      TYPE                     |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                     CLASS                     |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                      TTL                      |
+//  |                                               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   RDLENGTH                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
+//  /                     RDATA                     /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// DNSResourceRecord wraps the data from a single DNS resource within a
+// response.
+type DNSResourceRecord struct {
+       // Header
+       Name  []byte
+       Type  DNSType
+       Class DNSClass
+       TTL   uint32
+
+       // RDATA Raw Values
+       DataLength uint16
+       Data       []byte
+
+       // RDATA Decoded Values
+       IP             net.IP
+       NS, CNAME, PTR []byte
+       TXTs           [][]byte
+       SOA            DNSSOA
+       SRV            DNSSRV
+       MX             DNSMX
+
+       // Undecoded TXT for backward compatibility
+       TXT []byte
+}
+
+// decode decodes the resource record, returning the total length of the record.
+func (rr *DNSResourceRecord) decode(data []byte, offset int, df gopacket.DecodeFeedback, buffer *[]byte) (int, error) {
+       name, endq, err := decodeName(data, offset, buffer, 1)
+       if err != nil {
+               return 0, err
+       }
+
+       rr.Name = name
+       rr.Type = DNSType(binary.BigEndian.Uint16(data[endq : endq+2]))
+       rr.Class = DNSClass(binary.BigEndian.Uint16(data[endq+2 : endq+4]))
+       rr.TTL = binary.BigEndian.Uint32(data[endq+4 : endq+8])
+       rr.DataLength = binary.BigEndian.Uint16(data[endq+8 : endq+10])
+       end := endq + 10 + int(rr.DataLength)
+       if end > len(data) {
+               return 0, fmt.Errorf("resource record length exceeds data")
+       }
+       rr.Data = data[endq+10 : end]
+
+       if err = rr.decodeRData(data, endq+10, buffer); err != nil {
+               return 0, err
+       }
+
+       return endq + 10 + int(rr.DataLength), nil
+}
+
+func encodeName(name []byte, data []byte, offset int) int {
+       l := 0
+       for i := range name {
+               if name[i] == '.' {
+                       data[offset+i-l] = byte(l)
+                       l = 0
+               } else {
+                       // skip one to write the length
+                       data[offset+i+1] = name[i]
+                       l++
+               }
+       }
+       // length for final portion
+       data[offset+len(name)-l] = byte(l)
+       data[offset+len(name)+1] = 0x00 // terminal
+       return offset + len(name) + 2
+}
+
+func (rr *DNSResourceRecord) encode(data []byte, offset int, opts gopacket.SerializeOptions) (int, error) {
+
+       noff := encodeName(rr.Name, data, offset)
+
+       binary.BigEndian.PutUint16(data[noff:], uint16(rr.Type))
+       binary.BigEndian.PutUint16(data[noff+2:], uint16(rr.Class))
+       binary.BigEndian.PutUint32(data[noff+4:], uint32(rr.TTL))
+
+       switch rr.Type {
+       case DNSTypeA:
+               copy(data[noff+10:], rr.IP.To4())
+       case DNSTypeAAAA:
+               copy(data[noff+10:], rr.IP)
+       case DNSTypeNS:
+               encodeName(rr.NS, data, noff+10)
+       case DNSTypeCNAME:
+               encodeName(rr.CNAME, data, noff+10)
+       case DNSTypePTR:
+               encodeName(rr.PTR, data, noff+10)
+       case DNSTypeSOA:
+               noff2 := encodeName(rr.SOA.MName, data, noff+10)
+               noff2 = encodeName(rr.SOA.RName, data, noff2)
+               binary.BigEndian.PutUint32(data[noff2:], rr.SOA.Serial)
+               binary.BigEndian.PutUint32(data[noff2+4:], rr.SOA.Refresh)
+               binary.BigEndian.PutUint32(data[noff2+8:], rr.SOA.Retry)
+               binary.BigEndian.PutUint32(data[noff2+12:], rr.SOA.Expire)
+               binary.BigEndian.PutUint32(data[noff2+16:], rr.SOA.Minimum)
+       case DNSTypeMX:
+               binary.BigEndian.PutUint16(data[noff+10:], rr.MX.Preference)
+               encodeName(rr.MX.Name, data, noff+12)
+       case DNSTypeTXT:
+               noff2 := noff + 10
+               for _, txt := range rr.TXTs {
+                       data[noff2] = byte(len(txt))
+                       copy(data[noff2+1:], txt)
+                       noff2 += 1 + len(txt)
+               }
+       case DNSTypeSRV:
+               binary.BigEndian.PutUint16(data[noff+10:], rr.SRV.Priority)
+               binary.BigEndian.PutUint16(data[noff+12:], rr.SRV.Weight)
+               binary.BigEndian.PutUint16(data[noff+14:], rr.SRV.Port)
+               encodeName(rr.SRV.Name, data, noff+16)
+       default:
+               return 0, fmt.Errorf("serializing resource record of type %v not supported", rr.Type)
+       }
+
+       // DataLength
+       dSz := recSize(rr)
+       binary.BigEndian.PutUint16(data[noff+8:], uint16(dSz))
+
+       if opts.FixLengths {
+               rr.DataLength = uint16(dSz)
+       }
+
+       return len(rr.Name) + 1 + 11 + dSz, nil
+}
+
+func (rr *DNSResourceRecord) String() string {
+
+       if rr.Class == DNSClassIN {
+               switch rr.Type {
+               case DNSTypeA, DNSTypeAAAA:
+                       return rr.IP.String()
+               case DNSTypeNS:
+                       return "NS " + string(rr.NS)
+               case DNSTypeCNAME:
+                       return "CNAME " + string(rr.CNAME)
+               case DNSTypePTR:
+                       return "PTR " + string(rr.PTR)
+               case DNSTypeTXT:
+                       return "TXT " + string(rr.TXT)
+               }
+       }
+
+       return fmt.Sprintf("<%v, %v>", rr.Class, rr.Type)
+}
+
+func decodeCharacterStrings(data []byte) ([][]byte, error) {
+       strings := make([][]byte, 0, 1)
+       end := len(data)
+       for index, index2 := 0, 0; index != end; index = index2 {
+               index2 = index + 1 + int(data[index]) // index increases by 1..256 and does not overflow
+               if index2 > end {
+                       return nil, errors.New("Insufficient data for a <character-string>")
+               }
+               strings = append(strings, data[index+1:index2])
+       }
+       return strings, nil
+}
+
+func (rr *DNSResourceRecord) decodeRData(data []byte, offset int, buffer *[]byte) error {
+       switch rr.Type {
+       case DNSTypeA:
+               rr.IP = rr.Data
+       case DNSTypeAAAA:
+               rr.IP = rr.Data
+       case DNSTypeTXT, DNSTypeHINFO:
+               rr.TXT = rr.Data
+               txts, err := decodeCharacterStrings(rr.Data)
+               if err != nil {
+                       return err
+               }
+               rr.TXTs = txts
+       case DNSTypeNS:
+               name, _, err := decodeName(data, offset, buffer, 1)
+               if err != nil {
+                       return err
+               }
+               rr.NS = name
+       case DNSTypeCNAME:
+               name, _, err := decodeName(data, offset, buffer, 1)
+               if err != nil {
+                       return err
+               }
+               rr.CNAME = name
+       case DNSTypePTR:
+               name, _, err := decodeName(data, offset, buffer, 1)
+               if err != nil {
+                       return err
+               }
+               rr.PTR = name
+       case DNSTypeSOA:
+               name, endq, err := decodeName(data, offset, buffer, 1)
+               if err != nil {
+                       return err
+               }
+               rr.SOA.MName = name
+               name, endq, err = decodeName(data, endq, buffer, 1)
+               if err != nil {
+                       return err
+               }
+               rr.SOA.RName = name
+               rr.SOA.Serial = binary.BigEndian.Uint32(data[endq : endq+4])
+               rr.SOA.Refresh = binary.BigEndian.Uint32(data[endq+4 : endq+8])
+               rr.SOA.Retry = binary.BigEndian.Uint32(data[endq+8 : endq+12])
+               rr.SOA.Expire = binary.BigEndian.Uint32(data[endq+12 : endq+16])
+               rr.SOA.Minimum = binary.BigEndian.Uint32(data[endq+16 : endq+20])
+       case DNSTypeMX:
+               rr.MX.Preference = binary.BigEndian.Uint16(data[offset : offset+2])
+               name, _, err := decodeName(data, offset+2, buffer, 1)
+               if err != nil {
+                       return err
+               }
+               rr.MX.Name = name
+       case DNSTypeSRV:
+               rr.SRV.Priority = binary.BigEndian.Uint16(data[offset : offset+2])
+               rr.SRV.Weight = binary.BigEndian.Uint16(data[offset+2 : offset+4])
+               rr.SRV.Port = binary.BigEndian.Uint16(data[offset+4 : offset+6])
+               name, _, err := decodeName(data, offset+6, buffer, 1)
+               if err != nil {
+                       return err
+               }
+               rr.SRV.Name = name
+       }
+       return nil
+}
+
+// DNSSOA is a Start of Authority record.  Each domain requires a SOA record at
+// the cutover where a domain is delegated from its parent.
+type DNSSOA struct {
+       MName, RName                            []byte
+       Serial, Refresh, Retry, Expire, Minimum uint32
+}
+
+// DNSSRV is a Service record, defining a location (hostname/port) of a
+// server/service.
+type DNSSRV struct {
+       Priority, Weight, Port uint16
+       Name                   []byte
+}
+
+// DNSMX is a mail exchange record, defining a mail server for a recipient's
+// domain.
+type DNSMX struct {
+       Preference uint16
+       Name       []byte
+}
diff --git a/vendor/github.com/google/gopacket/layers/dns_test.go b/vendor/github.com/google/gopacket/layers/dns_test.go
new file mode 100644 (file)
index 0000000..264513b
--- /dev/null
@@ -0,0 +1,833 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "bytes"
+       "net"
+       "strings"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+// testPacketDNSRegression is the packet:
+//   11:08:05.708342 IP 109.194.160.4.57766 > 95.211.92.14.53: 63000% [1au] A? picslife.ru. (40)
+//      0x0000:  0022 19b6 7e22 000f 35bb 0b40 0800 4500  ."..~"..5..@..E.
+//      0x0010:  0044 89c4 0000 3811 2f3d 6dc2 a004 5fd3  .D....8./=m..._.
+//      0x0020:  5c0e e1a6 0035 0030 a597 f618 0010 0001  \....5.0........
+//      0x0030:  0000 0000 0001 0870 6963 736c 6966 6502  .......picslife.
+//      0x0040:  7275 0000 0100 0100 0029 1000 0000 8000  ru.......)......
+//      0x0050:  0000                                     ..
+var testPacketDNSRegression = []byte{
+       0x00, 0x22, 0x19, 0xb6, 0x7e, 0x22, 0x00, 0x0f, 0x35, 0xbb, 0x0b, 0x40, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x44, 0x89, 0xc4, 0x00, 0x00, 0x38, 0x11, 0x2f, 0x3d, 0x6d, 0xc2, 0xa0, 0x04, 0x5f, 0xd3,
+       0x5c, 0x0e, 0xe1, 0xa6, 0x00, 0x35, 0x00, 0x30, 0xa5, 0x97, 0xf6, 0x18, 0x00, 0x10, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x70, 0x69, 0x63, 0x73, 0x6c, 0x69, 0x66, 0x65, 0x02,
+       0x72, 0x75, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00,
+       0x00, 0x00,
+}
+
+func TestPacketDNSRegression(t *testing.T) {
+       p := gopacket.NewPacket(testPacketDNSRegression, LinkTypeEthernet, testDecodeOptions)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)
+}
+func BenchmarkDecodePacketDNSRegression(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketDNSRegression, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// response to `dig TXT google.com` over IPv4 link:
+var testParseDNSTypeTXTValue = `v=spf1 include:_spf.google.com ~all`
+var testParseDNSTypeTXT = []byte{
+       0x02, 0x00, 0x00, 0x00, // PF_INET
+       0x45, 0x00, 0x00, 0x73, 0x00, 0x00, 0x40, 0x00, 0x39, 0x11, 0x64, 0x98, 0xd0, 0x43, 0xde, 0xde,
+       0x0a, 0xba, 0x23, 0x06, 0x00, 0x35, 0x81, 0xb2, 0x00, 0x5f, 0xdc, 0xb5, 0x98, 0x71, 0x81, 0x80,
+       0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x03,
+       0x63, 0x6f, 0x6d, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00,
+       0x0e, 0x10, 0x00, 0x24, 0x23, 0x76, 0x3d, 0x73, 0x70, 0x66, 0x31, 0x20, 0x69, 0x6e, 0x63, 0x6c,
+       0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+       0x63, 0x6f, 0x6d, 0x20, 0x7e, 0x61, 0x6c, 0x6c, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00,
+}
+
+func TestParseDNSTypeTXT(t *testing.T) {
+       p := gopacket.NewPacket(testParseDNSTypeTXT, LinkTypeNull, testDecodeOptions)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeLoopback, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)
+       answers := p.Layer(LayerTypeDNS).(*DNS).Answers
+       if len(answers) != 1 {
+               t.Error("Failed to parse 1 DNS answer")
+       }
+       if len(answers[0].TXTs) != 1 {
+               t.Error("Failed to parse 1 TXT record")
+       }
+       txt := string(answers[0].TXTs[0])
+       if txt != testParseDNSTypeTXTValue {
+               t.Errorf("Incorrect TXT value, expected %q, got %q", testParseDNSTypeTXTValue, txt)
+       }
+}
+
+func testQuestionEqual(t *testing.T, i int, exp, got DNSQuestion) {
+       if !bytes.Equal(exp.Name, got.Name) {
+               t.Errorf("expected Questions[%d].Name = %v, got %v", i, string(exp.Name), string(got.Name))
+       }
+       if exp.Type != got.Type {
+               t.Errorf("expected Questions[%d].Type = %v, got %v", i, exp.Type, got.Type)
+       }
+       if exp.Class != got.Class {
+               t.Errorf("expected Questions[%d].Class = %v, got %v", i, exp.Class, got.Class)
+       }
+}
+
+func testResourceEqual(t *testing.T, i int, name string, exp, got DNSResourceRecord) {
+       if !bytes.Equal(exp.Name, got.Name) {
+               t.Errorf("expected %s[%d].Name = %v, got %v", name, i, string(exp.Name), string(got.Name))
+       }
+
+       if exp.Type != got.Type {
+               t.Errorf("expected %s[%d].Type = %v, got %v", name, i, exp.Type, got.Type)
+       }
+
+       if exp.Class != got.Class {
+               t.Errorf("expected %s[%d].Class = %v, got %v", name, i, exp.Class, got.Class)
+       }
+
+       if exp.TTL != got.TTL {
+               t.Errorf("expected %s[%d].TTL = %v, got %v", name, i, exp.TTL, got.TTL)
+       }
+       if exp.DataLength != got.DataLength {
+               t.Errorf("expected %s[%d].DataLength = %v, got %v", name, i, exp.DataLength, got.DataLength)
+       }
+
+       // we don't check .Data
+
+       if !exp.IP.Equal(got.IP) {
+               t.Errorf("expected %s[%d].IP = %v, got %v", name, i, exp.IP, got.IP)
+       }
+       if !bytes.Equal(exp.NS, got.NS) {
+               t.Errorf("expected %s[%d].NS = %v, got %v", name, i, exp.NS, got.NS)
+       }
+       if !bytes.Equal(exp.CNAME, got.CNAME) {
+               t.Errorf("expected %s[%d].CNAME = %v, got %v", name, i, exp.CNAME, got.CNAME)
+       }
+       if !bytes.Equal(exp.PTR, got.PTR) {
+               t.Errorf("expected %s[%d].PTR = %v, got %v", name, i, exp.PTR, got.PTR)
+       }
+       if len(exp.TXTs) != len(got.TXTs) {
+               t.Errorf("expected %s[%d].TXTs = %v, got %v", name, i, exp.TXTs, got.TXTs)
+       }
+       for j := range exp.TXTs {
+               if !bytes.Equal(exp.TXTs[j], got.TXTs[j]) {
+                       t.Errorf("expected %s[%d].TXTs[%d] = %v, got %v", name, i, j, exp.TXTs[j], got.TXTs[j])
+               }
+       }
+
+       // SOA
+       if !bytes.Equal(exp.SOA.MName, got.SOA.MName) {
+               t.Errorf("expected %s[%d].SOA.MName = %v, got %v", name, i, exp.SOA.MName, got.SOA.MName)
+       }
+       if !bytes.Equal(exp.SOA.RName, got.SOA.RName) {
+               t.Errorf("expected %s[%d].SOA.RName = %v, got %v", name, i, exp.SOA.RName, got.SOA.RName)
+       }
+       if exp.SOA.Serial != got.SOA.Serial {
+               t.Errorf("expected %s[%d].SOA.Serial = %v, got %v", name, i, exp.SOA.Serial, got.SOA.Serial)
+       }
+       if exp.SOA.Refresh != got.SOA.Refresh {
+               t.Errorf("expected %s[%d].SOA.Refresh = %v, got %v", name, i, exp.SOA.Refresh, got.SOA.Refresh)
+       }
+       if exp.SOA.Retry != got.SOA.Retry {
+               t.Errorf("expected %s[%d].SOA.Retry = %v, got %v", name, i, exp.SOA.Retry, got.SOA.Retry)
+       }
+       if exp.SOA.Expire != got.SOA.Expire {
+               t.Errorf("expected %s[%d].SOA.Expire = %v, got %v", name, i, exp.SOA.Expire, got.SOA.Expire)
+       }
+       if exp.SOA.Minimum != got.SOA.Minimum {
+               t.Errorf("expected %s[%d].SOA.Minimum = %v, got %v", name, i, exp.SOA.Minimum, got.SOA.Minimum)
+       }
+
+       // SRV
+       if !bytes.Equal(exp.SRV.Name, got.SRV.Name) {
+               t.Errorf("expected %s[%d].SRV.Name = %v, got %v", name, i, exp.SRV.Name, got.SRV.Name)
+       }
+       if exp.SRV.Weight != got.SRV.Weight {
+               t.Errorf("expected %s[%d].SRV.Weight = %v, got %v", name, i, exp.SRV.Weight, got.SRV.Weight)
+       }
+       if exp.SRV.Port != got.SRV.Port {
+               t.Errorf("expected %s[%d].SRV.Port = %v, got %v", name, i, exp.SRV.Port, got.SRV.Port)
+       }
+       // MX
+       if !bytes.Equal(exp.MX.Name, got.MX.Name) {
+               t.Errorf("expected %s[%d].MX.Name = %v, got %v", name, i, exp.MX.Name, got.MX.Name)
+       }
+       if exp.MX.Preference != got.MX.Preference {
+               t.Errorf("expected %s[%d].MX.Preference = %v, got %v", name, i, exp.MX.Preference, got.MX.Preference)
+       }
+}
+
+func testDNSEqual(t *testing.T, exp, got *DNS) {
+       if exp.ID != got.ID {
+               t.Errorf("expected ID = %v, got %v", exp.ID, got.ID)
+       }
+       if exp.AA != got.AA {
+               t.Errorf("expected AA = %v, got %v", exp.AA, got.AA)
+       }
+       if exp.OpCode != got.OpCode {
+               t.Errorf("expected OpCode = %v, got %v", exp.OpCode, got.OpCode)
+       }
+       if exp.AA != got.AA {
+               t.Errorf("expected AA = %v, got %v", exp.AA, got.AA)
+       }
+       if exp.TC != got.TC {
+               t.Errorf("expected TC = %v, got %v", exp.TC, got.TC)
+       }
+       if exp.RD != got.RD {
+               t.Errorf("expected RD = %v, got %v", exp.RD, got.RD)
+       }
+       if exp.RA != got.RA {
+               t.Errorf("expected RA = %v, got %v", exp.RA, got.RA)
+       }
+       if exp.Z != got.Z {
+               t.Errorf("expected Z = %v, got %v", exp.Z, got.Z)
+       }
+       if exp.ResponseCode != got.ResponseCode {
+               t.Errorf("expected ResponseCode = %v, got %v", exp.ResponseCode, got.ResponseCode)
+       }
+       if exp.QDCount != got.QDCount {
+               t.Errorf("expected QDCount = %v, got %v", exp.QDCount, got.QDCount)
+       }
+       if exp.ANCount != got.ANCount {
+               t.Errorf("expected ANCount = %v, got %v", exp.ANCount, got.ANCount)
+       }
+       if exp.ANCount != got.ANCount {
+               t.Errorf("expected ANCount = %v, got %v", exp.ANCount, got.ANCount)
+       }
+       if exp.NSCount != got.NSCount {
+               t.Errorf("expected NSCount = %v, got %v", exp.NSCount, got.NSCount)
+       }
+       if exp.ARCount != got.ARCount {
+               t.Errorf("expected ARCount = %v, got %v", exp.ARCount, got.ARCount)
+       }
+
+       if len(exp.Questions) != len(got.Questions) {
+               t.Errorf("expected %d Questions, got %d", len(exp.Questions), len(got.Questions))
+       }
+       for i := range exp.Questions {
+               testQuestionEqual(t, i, exp.Questions[i], got.Questions[i])
+       }
+
+       if len(exp.Answers) != len(got.Answers) {
+               t.Errorf("expected %d Answers, got %d", len(exp.Answers), len(got.Answers))
+       }
+       for i := range exp.Answers {
+               testResourceEqual(t, i, "Answers", exp.Answers[i], got.Answers[i])
+       }
+
+       if len(exp.Authorities) != len(got.Authorities) {
+               t.Errorf("expected %d Answers, got %d", len(exp.Authorities), len(got.Authorities))
+       }
+       for i := range exp.Authorities {
+               testResourceEqual(t, i, "Authorities", exp.Authorities[i], got.Authorities[i])
+       }
+
+       if len(exp.Additionals) != len(got.Additionals) {
+               t.Errorf("expected %d Additionals, got %d", len(exp.Additionals), len(got.Additionals))
+       }
+       for i := range exp.Additionals {
+               testResourceEqual(t, i, "Additionals", exp.Additionals[i], got.Additionals[i])
+       }
+}
+
+func TestDNSEncodeQuery(t *testing.T) {
+       dns := &DNS{ID: 1234, OpCode: DNSOpCodeQuery, RD: true}
+       dns.Questions = append(dns.Questions,
+               DNSQuestion{
+                       Name:  []byte("example1.com"),
+                       Type:  DNSTypeA,
+                       Class: DNSClassIN,
+               })
+
+       dns.Questions = append(dns.Questions,
+               DNSQuestion{
+                       Name:  []byte("example2.com"),
+                       Type:  DNSTypeA,
+                       Class: DNSClassIN,
+               })
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true}
+       err := gopacket.SerializeLayers(buf, opts, dns)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if int(dns.QDCount) != len(dns.Questions) {
+               t.Errorf("fix lengths did not adjust QDCount, expected %d got %d", len(dns.Questions), dns.QDCount)
+       }
+
+       p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDNS, testDecodeOptions)
+       dns2 := p2.Layer(LayerTypeDNS).(*DNS)
+       testDNSEqual(t, dns, dns2)
+}
+
+func TestDNSEncodeResponse(t *testing.T) {
+       dns := &DNS{ID: 1234, QR: true, OpCode: DNSOpCodeQuery,
+               AA: true, RD: true, RA: true}
+       dns.Questions = append(dns.Questions,
+               DNSQuestion{
+                       Name:  []byte("example1.com"),
+                       Type:  DNSTypeA,
+                       Class: DNSClassIN,
+               })
+       dns.Questions = append(dns.Questions,
+               DNSQuestion{
+                       Name:  []byte("www.example2.com"),
+                       Type:  DNSTypeAAAA,
+                       Class: DNSClassIN,
+               })
+
+       dns.Answers = append(dns.Answers,
+               DNSResourceRecord{
+                       Name:  []byte("example1.com"),
+                       Type:  DNSTypeA,
+                       Class: DNSClassIN,
+                       TTL:   1024,
+                       IP:    net.IP([]byte{1, 2, 3, 4}),
+               })
+
+       dns.Answers = append(dns.Answers,
+               DNSResourceRecord{
+                       Name:  []byte("www.example2.com"),
+                       Type:  DNSTypeAAAA,
+                       Class: DNSClassIN,
+                       TTL:   1024,
+                       IP:    net.IP([]byte{5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4}),
+               })
+
+       dns.Answers = append(dns.Answers,
+               DNSResourceRecord{
+                       Name:  []byte("www.example2.com"),
+                       Type:  DNSTypeCNAME,
+                       Class: DNSClassIN,
+                       TTL:   1024,
+                       CNAME: []byte("example2.com"),
+               })
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true}
+       err := gopacket.SerializeLayers(buf, opts, dns)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if int(dns.ANCount) != len(dns.Answers) {
+               t.Errorf("fix lengths did not adjust ANCount, expected %d got %d", len(dns.Answers), dns.ANCount)
+       }
+       for i, a := range dns.Answers {
+               if a.DataLength == 0 {
+                       t.Errorf("fix lengths did not adjust Answers[%d].DataLength", i)
+               }
+       }
+
+       p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDNS, testDecodeOptions)
+       dns2 := p2.Layer(LayerTypeDNS).(*DNS)
+       testDNSEqual(t, dns, dns2)
+}
+
+// testDNSMalformedPacket is the packet:
+//   10:30:00.389666 IP 10.77.43.131.60718 > 10.1.0.17.53: 18245 updateD [b2&3=0x5420] [18516a] [12064q] [21584n] [12081au][|domain]
+//     0x0000:  0000 0101 0000 4e96 1476 afa1 0800 4500  ......N..v....E.
+//     0x0010:  0039 d431 0000 f311 b3a0 0a4d 2b83 0a01  .9.1.......M+...
+//     0x0020:  0011 ed2e 0035 0025 0832 4745 5420 2f20  .....5.%.2GET./.
+//     0x0030:  4854 5450 2f31 2e31 0d0a 486f 7374 3a20  HTTP/1.1..Host:.
+//     0x0040:  7777 770d 0a0d 0a                        www....
+var testDNSMalformedPacket = []byte{
+       0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x4e, 0x96, 0x14, 0x76, 0xaf, 0xa1, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x39, 0xd4, 0x31, 0x00, 0x00, 0xf3, 0x11, 0xb3, 0xa0, 0x0a, 0x4d, 0x2b, 0x83, 0x0a, 0x01,
+       0x00, 0x11, 0xed, 0x2e, 0x00, 0x35, 0x00, 0x25, 0x08, 0x32, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20,
+       0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x20,
+       0x77, 0x77, 0x77, 0x0d, 0x0a, 0x0d, 0x0a,
+}
+
+func TestDNSMalformedPacket(t *testing.T) {
+       p := gopacket.NewPacket(testDNSMalformedPacket, LinkTypeEthernet, testDecodeOptions)
+       if errLayer := p.ErrorLayer(); errLayer == nil {
+               t.Error("No error layer on invalid DNS name")
+       } else if err := errLayer.Error(); !strings.Contains(err.Error(), "invalid index") {
+               t.Errorf("unexpected error message: %v", err)
+       }
+}
+
+// testDNSMalformedPacket2 is the packet:
+//   15:14:42.056054 IP 10.77.0.245.53 > 10.1.0.45.38769: 12625 zoneInit YXRRSet- [49833q],[|domain]
+//     0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U"..7."U.....E.
+//     0x0010:  0079 3767 4000 3911 f49d 0a4d 00f5 0a01  .y7g@.9....M....
+//     0x0020:  002d 0035 9771 0065 6377 3151 f057 c2a9  .-.5.q.ecw1Q.W..
+//     0x0030:  fc6e e86a beb0 f7d4 8599 373e b5f8 9db2  .n.j......7>....
+//     0x0040:  a399 21a1 9762 def1 def4 f5ab 5675 023e  ..!..b......Vu.>
+//     0x0050:  c9ca 304f 178a c2ad f2fc 677a 0e4c b892  ..0O......gz.L..
+//     0x0060:  ab71 09bb 1ea4 f7c4 fe47 7a39 868b 29a0  .q.......Gz9..).
+//     0x0070:  62c4 d184 5b4e 8817 4cc0 d1d0 d430 11d3  b...[N..L....0..
+//     0x0080:  d147 543f afc7 1a                        .GT?...
+var testDNSMalformedPacket2 = []byte{
+       0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x79, 0x37, 0x67, 0x40, 0x00, 0x39, 0x11, 0xf4, 0x9d, 0x0a, 0x4d, 0x00, 0xf5, 0x0a, 0x01,
+       0x00, 0x2d, 0x00, 0x35, 0x97, 0x71, 0x00, 0x65, 0x63, 0x77, 0x31, 0x51, 0xf0, 0x57, 0xc2, 0xa9,
+       0xfc, 0x6e, 0xe8, 0x6a, 0xbe, 0xb0, 0xf7, 0xd4, 0x85, 0x99, 0x37, 0x3e, 0xb5, 0xf8, 0x9d, 0xb2,
+       0xa3, 0x99, 0x21, 0xa1, 0x97, 0x62, 0xde, 0xf1, 0xde, 0xf4, 0xf5, 0xab, 0x56, 0x75, 0x02, 0x3e,
+       0xc9, 0xca, 0x30, 0x4f, 0x17, 0x8a, 0xc2, 0xad, 0xf2, 0xfc, 0x67, 0x7a, 0x0e, 0x4c, 0xb8, 0x92,
+       0xab, 0x71, 0x09, 0xbb, 0x1e, 0xa4, 0xf7, 0xc4, 0xfe, 0x47, 0x7a, 0x39, 0x86, 0x8b, 0x29, 0xa0,
+       0x62, 0xc4, 0xd1, 0x84, 0x5b, 0x4e, 0x88, 0x17, 0x4c, 0xc0, 0xd1, 0xd0, 0xd4, 0x30, 0x11, 0xd3,
+       0xd1, 0x47, 0x54, 0x3f, 0xaf, 0xc7, 0x1a,
+}
+
+func TestDNSMalformedPacket2(t *testing.T) {
+       p := gopacket.NewPacket(testDNSMalformedPacket2, LinkTypeEthernet, testDecodeOptions)
+       if errLayer := p.ErrorLayer(); errLayer == nil {
+               t.Error("No error layer on invalid DNS name")
+       } else if err := errLayer.Error(); !strings.Contains(err.Error(), "offset pointer too high") {
+               t.Errorf("unexpected error message: %v", err)
+       }
+}
+
+// testMalformedRootQuery is the packet:
+//   08:31:18.143065 IP 10.77.0.26.53 > 10.1.0.233.65071: 59508- 0/13/3 (508)
+//     0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U"..7."U.....E.
+//     0x0010:  0218 76b2 4000 7211 7ad2 0a4d 001a 0a01  ..v.@.r.z..M....
+//     0x0020:  00e9 0035 fe2f 0204 b8f5 e874 8100 0001  ...5./.....t....
+//     0x0030:  0000 000d 0003 0c61 786b 7663 6863 7063  .......axkvchcpc
+//     0x0040:  7073 6c0a 7878 7878 7878 7878 7878 036e  psl.xxxxxxxxxx.n
+//     0x0050:  6574 0000 0100 0100 0002 0001 0000 0e10  et..............
+//     0x0060:  0014 016d 0c72 6f6f 742d 7365 7276 6572  ...m.root-server
+//     0x0070:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x0080:  0014 0161 0c72 6f6f 742d 7365 7276 6572  ...a.root-server
+//     0x0090:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x00a0:  0014 0169 0c72 6f6f 742d 7365 7276 6572  ...i.root-server
+//     0x00b0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x00c0:  0014 0162 0c72 6f6f 742d 7365 7276 6572  ...b.root-server
+//     0x00d0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x00e0:  0014 016c 0c72 6f6f 742d 7365 7276 6572  ...l.root-server
+//     0x00f0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x0100:  0014 0166 0c72 6f6f 742d 7365 7276 6572  ...f.root-server
+//     0x0110:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x0120:  0014 0167 0c72 6f6f 742d 7365 7276 6572  ...g.root-server
+//     0x0130:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x0140:  0014 0164 0c72 6f6f 742d 7365 7276 6572  ...d.root-server
+//     0x0150:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x0160:  0014 0168 0c72 6f6f 742d 7365 7276 6572  ...h.root-server
+//     0x0170:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x0180:  0014 0165 0c72 6f6f 742d 7365 7276 6572  ...e.root-server
+//     0x0190:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x01a0:  0014 016a 0c72 6f6f 742d 7365 7276 6572  ...j.root-server
+//     0x01b0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x01c0:  0014 016b 0c72 6f6f 742d 7365 7276 6572  ...k.root-server
+//     0x01d0:  7303 6e65 7400 c02d 0002 0001 0000 0e10  s.net..-........
+//     0x01e0:  0014 0163 0c72 6f6f 742d 7365 7276 6572  ...c.root-server
+//     0x01f0:  7303 6e65 7400 c038 0001 0001 0000 0e10  s.net..8........
+//     0x0200:  0004 ca0c 1b21 c058 0001 0001 0000 0e10  .....!.X........
+//     0x0210:  0004 c629 0004 c078 0001 0001 0000 0e10  ...)...x........
+//     0x0220:  0004 c024 9411                           ...$..
+var testMalformedRootQuery = []byte{
+       0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+       0x02, 0x18, 0x76, 0xb2, 0x40, 0x00, 0x72, 0x11, 0x7a, 0xd2, 0x0a, 0x4d, 0x00, 0x1a, 0x0a, 0x01,
+       0x00, 0xe9, 0x00, 0x35, 0xfe, 0x2f, 0x02, 0x04, 0xb8, 0xf5, 0xe8, 0x74, 0x81, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x0d, 0x00, 0x03, 0x0c, 0x61, 0x78, 0x6b, 0x76, 0x63, 0x68, 0x63, 0x70, 0x63,
+       0x70, 0x73, 0x6c, 0x0a, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x03, 0x6e,
+       0x65, 0x74, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x6d, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x61, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x69, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x62, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x6c, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x66, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x67, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x64, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x68, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x65, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x6a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x6b, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x2d, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x14, 0x01, 0x63, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+       0x73, 0x03, 0x6e, 0x65, 0x74, 0x00, 0xc0, 0x38, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x04, 0xca, 0x0c, 0x1b, 0x21, 0xc0, 0x58, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x04, 0xc6, 0x29, 0x00, 0x04, 0xc0, 0x78, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x10,
+       0x00, 0x04, 0xc0, 0x24, 0x94, 0x11,
+}
+
+func TestMalformedRootQuery(t *testing.T) {
+       p := gopacket.NewPacket(testMalformedRootQuery, LinkTypeEthernet, testDecodeOptions)
+       if errLayer := p.ErrorLayer(); errLayer == nil {
+               t.Error("No error layer on invalid DNS name")
+       } else if err := errLayer.Error(); !strings.Contains(err.Error(), "no dns data found") {
+               t.Errorf("unexpected error message: %v", err)
+       }
+}
+
+// testAnotherMalformedDNS is the packet:
+//   10:52:13.690904 IP 10.77.0.29.53 > 10.1.0.6.42280: 13491 op6+% [b2&3=0x3313] [11720a] [23583q] [29742n] [52087au] Type22277 (Class 43688)? M- M-<.VM-^KM-wQM-s"M-^E^]M-+^Wx^P^@M-^\^\M-oM-FM-U^F^E7M-tM-^VM-^[M-F^H>G^FM-uM-^KM-_6GM-[M-jM-bM-^H]hM-^J.[|domain]
+//     0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U"..7."U.....E.
+//     0x0010:  05c1 2eea 4000 3611 fbd1 0a4d 001d 0a01  ....@.6....M....
+//     0x0020:  0006 0035 a528 05ad 00a2 34b3 3313 5c1f  ...5.(....4.3.\.
+//     0x0030:  2dc8 742e cb77 2da0 bc2e 568b f751 f322  -.t..w-...V..Q."
+//     0x0040:  851d ab17 7810 009c 1cef c6d5 0605 37f4  ....x.........7.
+//     0x0050:  969b c65e 483e 4706 f58b df36 47db eae2  ...^H>G....6G...
+//     0x0060:  885d 688a c5a5 5705 aaa8 95eb 93a4 d85a  .]h...W........Z
+//     0x0070:  c9af 261f 7816 a354 2d23 d84a 579c 4876  ..&.x..T-#.JW.Hv
+//     0x0080:  a391 43db 5c41 191a 92b8 dcdd 6839 eef5  ..C.\A......h9..
+//     0x0090:  728e 13e0 0679 6f47 88a0 25b9 44d8 f8e7  r....yoG..%.D...
+//     0x00a0:  8afe 0bfa f811 8da5 f8a3 1f8e d23b fe12  .............;..
+//     0x00b0:  d943 9327 92ad 4410 183e 688d b06d 5391  .C.'..D..>h..mS.
+//     0x00c0:  695b e49f 8f1e c075 d043 afe0 1174 9db0  i[.....u.C...t..
+//     0x00d0:  06b0 f01e b85b 3c84 945e 06d0 b20f 9eaa  .....[<..^......
+//     0x00e0:  123d 0ab0 2a55 309c 0ee9 3e5e db2f f377  .=..*U0...>^./.w
+//     0x00f0:  d7f1 9bae 373d 3316 0796 b80e dd18 5173  ....7=3.......Qs
+//     0x0100:  b28d 84fd 1812 d87b 42c8 5f11 4db6 b269  .......{B._.M..i
+//     0x0110:  1c42 4aea d5a4 644b 6c00 f0c0 fcee 71a7  .BJ...dKl.....q.
+//     0x0120:  e7f0 719c a207 dc5c a6fa f005 a338 7ff0  ..q....\.....8..
+//     0x0130:  5beb 3b4d 8952 2a46 d47b a5a2 e1fb 9e76  [.;M.R*F.{.....v
+//     0x0140:  c815 6258 50f4 6997 bad5 b479 2d06 ebbb  ..bXP.i....y-...
+//     0x0150:  2cac 2ecc e4f0 1f94 ce9f 186c 61da 9681  ,..........la...
+//     0x0160:  345c 4d88 efc7 037b fbe3 4402 ea06 2e5d  4\M....{..D....]
+//     0x0170:  2e6e 4860 e180 3ef7 c006 0ad1 ebb9 c4ff  .nH`..>.........
+//     0x0180:  dee2 f21c 02c2 751a ded8 ae2e 13a9 3fa2  ......u.......?.
+//     0x0190:  392a 8b54 11b2 2b4e 2bf1 4780 db9f 8c10  9*.T..+N+.G.....
+//     0x01a0:  ac6f 61b0 7b19 423f 07e5 4628 b870 f75d  .oa.{.B?..F(.p.]
+//     0x01b0:  09a3 63b2 77af 5985 a0ae 51d8 243f a7c8  ..c.w.Y...Q.$?..
+//     0x01c0:  ab08 7fc6 0217 c09f c412 0c45 e6aa 96bf  ...........E....
+//     0x01d0:  184c 4307 1f1f c4f4 7734 da31 2088 662b  .LC.....w4.1..f+
+//     0x01e0:  44c5 096f 1d1d 2dc5 ffd6 867d 9fc5 7b45  D..o..-....}..{E
+//     0x01f0:  f949 7dd9 38de 0d51 ac2a 32fc f50b 1bbe  .I}.8..Q.*2.....
+//     0x0200:  1c4b 5441 fbf3 0821 6c28 4530 5676 1d27  .KTA...!l(E0Vv.'
+//     0x0210:  5087 466c 3d5b 45a6 af7f 917a 6d43 66c2  P.Fl=[E....zmCf.
+//     0x0220:  036a 8bef ca60 9b13 8d29 9fda 82fa 01b1  .j...`...)......
+//     0x0230:  df8f 1f83 c71d 630f 349e 508c 9f7a e3da  ......c.4.P..z..
+//     0x0240:  a114 3622 9df8 9926 4dac 4150 d505 7b3a  ..6"...&M.AP..{:
+//     0x0250:  6fed fc75 6b4f 2d60 8a89 767d 9af0 896e  o..ukO-`..v}...n
+//     0x0260:  907d 1ada def3 345c 0d81 283c a24f fcbb  .}....4\..(<.O..
+//     0x0270:  bbdd b7b3 e3bb 9f1b d966 51b7 8217 7fa0  .........fQ.....
+//     0x0280:  e828 d3ca a6f1 532f 164e e405 bb3b 0de3  .(....S/.N...;..
+//     0x0290:  985d 6e89 d825 ebc6 d8ba 5190 a114 c6a3  .]n..%....Q.....
+//     0x02a0:  18b4 8aa7 181a 01ac cdc0 8048 ea72 a5e3  ...........H.r..
+//     0x02b0:  e37a dc57 65cd b787 39e6 c39e 317b 45d8  .z.We...9...1{E.
+//     0x02c0:  475c 05ba e8f8 8224 5a85 27b8 1584 8d78  G\.....$Z.'....x
+//     0x02d0:  62b6 6495 ac10 338f 1122 f2ff 043e 9e2a  b.d...3.."...>.*
+//     0x02e0:  1058 a910 5792 6fcd 9a96 6183 6708 8f70  .X..W.o...a.g..p
+//     0x02f0:  edc6 a67c 64ff 50fa 520b de94 c82c c4d6  ...|d.P.R....,..
+//     0x0300:  7d8f 0fd5 2f0d 9833 7c6c be10 a4e5 dc99  }.../..3|l......
+//     0x0310:  a467 ef5f b35b c11c e23c 131a 48b2 9cef  .g._.[...<..H...
+//     0x0320:  5a2f fece dd9e 2aea 0db9 faf3 a6ef b29d  Z/....*.........
+//     0x0330:  e85d a410 dd6a 6806 3fc6 1694 179f cb4b  .]...jh.?......K
+//     0x0340:  08c4 86b2 0713 cddb b257 d56b fe82 7d82  .........W.k..}.
+//     0x0350:  0d1f 6dc9 67b2 d2a1 6791 4f38 edf9 491f  ..m.g...g.O8..I.
+//     0x0360:  2c02 35f5 8165 ecc3 bc6a b631 3c7e 1ad4  ,.5..e...j.1<~..
+//     0x0370:  8e27 f962 f942 11b5 1b45 9bac b474 3c6e  .'.b.B...E...t<n
+//     0x0380:  6832 3075 be6d ac0d a8a0 7d47 a6ef 4e43  h20u.m....}G..NC
+//     0x0390:  6b9a 3097 8a8b 82a3 9515 362c f7d6 a37f  k.0.......6,....
+//     0x03a0:  7313 1199 a5f3 03dc bcc9 fb10 c23d eeb9  s............=..
+//     0x03b0:  78ff c8f3 0d38 9f74 ceec b7ae 63e3 3424  x....8.t....c.4$
+//     0x03c0:  b783 f106 011f 666b bf2d abc8 ea10 57a1  ......fk.-....W.
+//     0x03d0:  7cf2 4a3f 57ca 1386 bfba 27e5 4662 81c8  |.J?W.....'.Fb..
+//     0x03e0:  041e 1820 b3d5 c399 cd4d 222f 29f0 b994  .........M"/)...
+//     0x03f0:  865a e6e2 1686 3261 b0cd caaf 07ec d0bc  .Z....2a........
+//     0x0400:  afb8 3cf0 51c1 6c7a 6383 6b3a ff47 9551  ..<.Q.lzc.k:.G.Q
+//     0x0410:  1099 525f 355e 4684 bd34 ec12 88c9 dcc2  ..R_5^F..4......
+//     0x0420:  d11c 826d f1df 37e6 f08f 6ce8 817d bdc3  ...m..7...l..}..
+//     0x0430:  20b9 a274 c645 c67d f299 fef9 287f 09ee  ...t.E.}....(...
+//     0x0440:  ac67 6872 a126 b1d3 922c 4c2a 0ec9 b6d4  .ghr.&...,L*....
+//     0x0450:  fb59 6163 d1c4 1708 8d94 bc3d be5e ae29  .Yac.......=.^.)
+//     0x0460:  51ff a765 9df6 ae35 ed6b 0555 933f 3ed6  Q..e...5.k.U.?>.
+//     0x0470:  259b d93e f86f 6088 0c4e 357b 5c67 7d93  %..>.o`..N5{\g}.
+//     0x0480:  a695 1a42 e1e1 ef91 14d7 b7b7 0ca4 2dda  ...B..........-.
+//     0x0490:  6ac1 771e 25c1 a578 4ca8 6fd8 de04 1c09  j.w.%..xL.o.....
+//     0x04a0:  df49 f179 6a58 2b45 7231 307f bc67 e5e7  .I.yjX+Er10..g..
+//     0x04b0:  c5cd fec0 b021 508e 4fc5 f821 f734 90bc  .....!P.O..!.4..
+//     0x04c0:  c87f 14f1 2e5c d17b 1818 5b4a 6b68 0212  .....\.{..[Jkh..
+//     0x04d0:  1791 4a30 8518 99a9 b516 67e7 ed56 d1d1  ..J0......g..V..
+//     0x04e0:  239d dfda 11c5 0afe e58a b6e0 fb66 ab5c  #............f.\
+//     0x04f0:  f590 dcd6 457d 01d1 83f5 a9f0 cdb2 9c14  ....E}..........
+//     0x0500:  ff66 f10c d428 a07b 34e3 d600 91f2 aca7  .f...(.{4.......
+//     0x0510:  4e1f f3ac a96e 2aa3 ec9b 448c 748d f858  N....n*...D.t..X
+//     0x0520:  131c d496 af9b f5f0 d2f5 57ac 0b64 55a1  ..........W..dU.
+//     0x0530:  860e 5ad0 3e62 26b5 9e17 f51f 88c1 02e3  ..Z.>b&.........
+//     0x0540:  4a38 de70 3216 6f88 5d1e f429 ee19 4121  J8.p2.o.]..)..A!
+//     0x0550:  f571 84ac 3789 141f 1798 90b1 8373 2499  .q..7........s$.
+//     0x0560:  c131 b13f f3a3 9a07 aef1 bfe8 8cd7 8c2e  .1.?............
+//     0x0570:  ba35 dfc5 eb07 013c 7621 6481 bdfb 6233  .5.....<v!d...b3
+//     0x0580:  22e2 0f05 7e15 0417 67e4 2632 5207 28a6  "...~...g.&2R.(.
+//     0x0590:  8e88 9423 de54 5412 b53e fd8d d47a de58  ...#.TT..>...z.X
+//     0x05a0:  a1b2 6e08 d06d dc21 1eda 14a0 a2f7 1701  ..n..m.!........
+//     0x05b0:  a5e0 dfd7 871f 595d db43 70f5 bab3 b732  ......Y].Cp....2
+//     0x05c0:  6275 da15 b203 dac7 321f 8d61 11bd 30    bu......2..a..0
+var testAnotherMalformedDNS = []byte{
+       0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+       0x05, 0xc1, 0x2e, 0xea, 0x40, 0x00, 0x36, 0x11, 0xfb, 0xd1, 0x0a, 0x4d, 0x00, 0x1d, 0x0a, 0x01,
+       0x00, 0x06, 0x00, 0x35, 0xa5, 0x28, 0x05, 0xad, 0x00, 0xa2, 0x34, 0xb3, 0x33, 0x13, 0x5c, 0x1f,
+       0x2d, 0xc8, 0x74, 0x2e, 0xcb, 0x77, 0x2d, 0xa0, 0xbc, 0x2e, 0x56, 0x8b, 0xf7, 0x51, 0xf3, 0x22,
+       0x85, 0x1d, 0xab, 0x17, 0x78, 0x10, 0x00, 0x9c, 0x1c, 0xef, 0xc6, 0xd5, 0x06, 0x05, 0x37, 0xf4,
+       0x96, 0x9b, 0xc6, 0x5e, 0x48, 0x3e, 0x47, 0x06, 0xf5, 0x8b, 0xdf, 0x36, 0x47, 0xdb, 0xea, 0xe2,
+       0x88, 0x5d, 0x68, 0x8a, 0xc5, 0xa5, 0x57, 0x05, 0xaa, 0xa8, 0x95, 0xeb, 0x93, 0xa4, 0xd8, 0x5a,
+       0xc9, 0xaf, 0x26, 0x1f, 0x78, 0x16, 0xa3, 0x54, 0x2d, 0x23, 0xd8, 0x4a, 0x57, 0x9c, 0x48, 0x76,
+       0xa3, 0x91, 0x43, 0xdb, 0x5c, 0x41, 0x19, 0x1a, 0x92, 0xb8, 0xdc, 0xdd, 0x68, 0x39, 0xee, 0xf5,
+       0x72, 0x8e, 0x13, 0xe0, 0x06, 0x79, 0x6f, 0x47, 0x88, 0xa0, 0x25, 0xb9, 0x44, 0xd8, 0xf8, 0xe7,
+       0x8a, 0xfe, 0x0b, 0xfa, 0xf8, 0x11, 0x8d, 0xa5, 0xf8, 0xa3, 0x1f, 0x8e, 0xd2, 0x3b, 0xfe, 0x12,
+       0xd9, 0x43, 0x93, 0x27, 0x92, 0xad, 0x44, 0x10, 0x18, 0x3e, 0x68, 0x8d, 0xb0, 0x6d, 0x53, 0x91,
+       0x69, 0x5b, 0xe4, 0x9f, 0x8f, 0x1e, 0xc0, 0x75, 0xd0, 0x43, 0xaf, 0xe0, 0x11, 0x74, 0x9d, 0xb0,
+       0x06, 0xb0, 0xf0, 0x1e, 0xb8, 0x5b, 0x3c, 0x84, 0x94, 0x5e, 0x06, 0xd0, 0xb2, 0x0f, 0x9e, 0xaa,
+       0x12, 0x3d, 0x0a, 0xb0, 0x2a, 0x55, 0x30, 0x9c, 0x0e, 0xe9, 0x3e, 0x5e, 0xdb, 0x2f, 0xf3, 0x77,
+       0xd7, 0xf1, 0x9b, 0xae, 0x37, 0x3d, 0x33, 0x16, 0x07, 0x96, 0xb8, 0x0e, 0xdd, 0x18, 0x51, 0x73,
+       0xb2, 0x8d, 0x84, 0xfd, 0x18, 0x12, 0xd8, 0x7b, 0x42, 0xc8, 0x5f, 0x11, 0x4d, 0xb6, 0xb2, 0x69,
+       0x1c, 0x42, 0x4a, 0xea, 0xd5, 0xa4, 0x64, 0x4b, 0x6c, 0x00, 0xf0, 0xc0, 0xfc, 0xee, 0x71, 0xa7,
+       0xe7, 0xf0, 0x71, 0x9c, 0xa2, 0x07, 0xdc, 0x5c, 0xa6, 0xfa, 0xf0, 0x05, 0xa3, 0x38, 0x7f, 0xf0,
+       0x5b, 0xeb, 0x3b, 0x4d, 0x89, 0x52, 0x2a, 0x46, 0xd4, 0x7b, 0xa5, 0xa2, 0xe1, 0xfb, 0x9e, 0x76,
+       0xc8, 0x15, 0x62, 0x58, 0x50, 0xf4, 0x69, 0x97, 0xba, 0xd5, 0xb4, 0x79, 0x2d, 0x06, 0xeb, 0xbb,
+       0x2c, 0xac, 0x2e, 0xcc, 0xe4, 0xf0, 0x1f, 0x94, 0xce, 0x9f, 0x18, 0x6c, 0x61, 0xda, 0x96, 0x81,
+       0x34, 0x5c, 0x4d, 0x88, 0xef, 0xc7, 0x03, 0x7b, 0xfb, 0xe3, 0x44, 0x02, 0xea, 0x06, 0x2e, 0x5d,
+       0x2e, 0x6e, 0x48, 0x60, 0xe1, 0x80, 0x3e, 0xf7, 0xc0, 0x06, 0x0a, 0xd1, 0xeb, 0xb9, 0xc4, 0xff,
+       0xde, 0xe2, 0xf2, 0x1c, 0x02, 0xc2, 0x75, 0x1a, 0xde, 0xd8, 0xae, 0x2e, 0x13, 0xa9, 0x3f, 0xa2,
+       0x39, 0x2a, 0x8b, 0x54, 0x11, 0xb2, 0x2b, 0x4e, 0x2b, 0xf1, 0x47, 0x80, 0xdb, 0x9f, 0x8c, 0x10,
+       0xac, 0x6f, 0x61, 0xb0, 0x7b, 0x19, 0x42, 0x3f, 0x07, 0xe5, 0x46, 0x28, 0xb8, 0x70, 0xf7, 0x5d,
+       0x09, 0xa3, 0x63, 0xb2, 0x77, 0xaf, 0x59, 0x85, 0xa0, 0xae, 0x51, 0xd8, 0x24, 0x3f, 0xa7, 0xc8,
+       0xab, 0x08, 0x7f, 0xc6, 0x02, 0x17, 0xc0, 0x9f, 0xc4, 0x12, 0x0c, 0x45, 0xe6, 0xaa, 0x96, 0xbf,
+       0x18, 0x4c, 0x43, 0x07, 0x1f, 0x1f, 0xc4, 0xf4, 0x77, 0x34, 0xda, 0x31, 0x20, 0x88, 0x66, 0x2b,
+       0x44, 0xc5, 0x09, 0x6f, 0x1d, 0x1d, 0x2d, 0xc5, 0xff, 0xd6, 0x86, 0x7d, 0x9f, 0xc5, 0x7b, 0x45,
+       0xf9, 0x49, 0x7d, 0xd9, 0x38, 0xde, 0x0d, 0x51, 0xac, 0x2a, 0x32, 0xfc, 0xf5, 0x0b, 0x1b, 0xbe,
+       0x1c, 0x4b, 0x54, 0x41, 0xfb, 0xf3, 0x08, 0x21, 0x6c, 0x28, 0x45, 0x30, 0x56, 0x76, 0x1d, 0x27,
+       0x50, 0x87, 0x46, 0x6c, 0x3d, 0x5b, 0x45, 0xa6, 0xaf, 0x7f, 0x91, 0x7a, 0x6d, 0x43, 0x66, 0xc2,
+       0x03, 0x6a, 0x8b, 0xef, 0xca, 0x60, 0x9b, 0x13, 0x8d, 0x29, 0x9f, 0xda, 0x82, 0xfa, 0x01, 0xb1,
+       0xdf, 0x8f, 0x1f, 0x83, 0xc7, 0x1d, 0x63, 0x0f, 0x34, 0x9e, 0x50, 0x8c, 0x9f, 0x7a, 0xe3, 0xda,
+       0xa1, 0x14, 0x36, 0x22, 0x9d, 0xf8, 0x99, 0x26, 0x4d, 0xac, 0x41, 0x50, 0xd5, 0x05, 0x7b, 0x3a,
+       0x6f, 0xed, 0xfc, 0x75, 0x6b, 0x4f, 0x2d, 0x60, 0x8a, 0x89, 0x76, 0x7d, 0x9a, 0xf0, 0x89, 0x6e,
+       0x90, 0x7d, 0x1a, 0xda, 0xde, 0xf3, 0x34, 0x5c, 0x0d, 0x81, 0x28, 0x3c, 0xa2, 0x4f, 0xfc, 0xbb,
+       0xbb, 0xdd, 0xb7, 0xb3, 0xe3, 0xbb, 0x9f, 0x1b, 0xd9, 0x66, 0x51, 0xb7, 0x82, 0x17, 0x7f, 0xa0,
+       0xe8, 0x28, 0xd3, 0xca, 0xa6, 0xf1, 0x53, 0x2f, 0x16, 0x4e, 0xe4, 0x05, 0xbb, 0x3b, 0x0d, 0xe3,
+       0x98, 0x5d, 0x6e, 0x89, 0xd8, 0x25, 0xeb, 0xc6, 0xd8, 0xba, 0x51, 0x90, 0xa1, 0x14, 0xc6, 0xa3,
+       0x18, 0xb4, 0x8a, 0xa7, 0x18, 0x1a, 0x01, 0xac, 0xcd, 0xc0, 0x80, 0x48, 0xea, 0x72, 0xa5, 0xe3,
+       0xe3, 0x7a, 0xdc, 0x57, 0x65, 0xcd, 0xb7, 0x87, 0x39, 0xe6, 0xc3, 0x9e, 0x31, 0x7b, 0x45, 0xd8,
+       0x47, 0x5c, 0x05, 0xba, 0xe8, 0xf8, 0x82, 0x24, 0x5a, 0x85, 0x27, 0xb8, 0x15, 0x84, 0x8d, 0x78,
+       0x62, 0xb6, 0x64, 0x95, 0xac, 0x10, 0x33, 0x8f, 0x11, 0x22, 0xf2, 0xff, 0x04, 0x3e, 0x9e, 0x2a,
+       0x10, 0x58, 0xa9, 0x10, 0x57, 0x92, 0x6f, 0xcd, 0x9a, 0x96, 0x61, 0x83, 0x67, 0x08, 0x8f, 0x70,
+       0xed, 0xc6, 0xa6, 0x7c, 0x64, 0xff, 0x50, 0xfa, 0x52, 0x0b, 0xde, 0x94, 0xc8, 0x2c, 0xc4, 0xd6,
+       0x7d, 0x8f, 0x0f, 0xd5, 0x2f, 0x0d, 0x98, 0x33, 0x7c, 0x6c, 0xbe, 0x10, 0xa4, 0xe5, 0xdc, 0x99,
+       0xa4, 0x67, 0xef, 0x5f, 0xb3, 0x5b, 0xc1, 0x1c, 0xe2, 0x3c, 0x13, 0x1a, 0x48, 0xb2, 0x9c, 0xef,
+       0x5a, 0x2f, 0xfe, 0xce, 0xdd, 0x9e, 0x2a, 0xea, 0x0d, 0xb9, 0xfa, 0xf3, 0xa6, 0xef, 0xb2, 0x9d,
+       0xe8, 0x5d, 0xa4, 0x10, 0xdd, 0x6a, 0x68, 0x06, 0x3f, 0xc6, 0x16, 0x94, 0x17, 0x9f, 0xcb, 0x4b,
+       0x08, 0xc4, 0x86, 0xb2, 0x07, 0x13, 0xcd, 0xdb, 0xb2, 0x57, 0xd5, 0x6b, 0xfe, 0x82, 0x7d, 0x82,
+       0x0d, 0x1f, 0x6d, 0xc9, 0x67, 0xb2, 0xd2, 0xa1, 0x67, 0x91, 0x4f, 0x38, 0xed, 0xf9, 0x49, 0x1f,
+       0x2c, 0x02, 0x35, 0xf5, 0x81, 0x65, 0xec, 0xc3, 0xbc, 0x6a, 0xb6, 0x31, 0x3c, 0x7e, 0x1a, 0xd4,
+       0x8e, 0x27, 0xf9, 0x62, 0xf9, 0x42, 0x11, 0xb5, 0x1b, 0x45, 0x9b, 0xac, 0xb4, 0x74, 0x3c, 0x6e,
+       0x68, 0x32, 0x30, 0x75, 0xbe, 0x6d, 0xac, 0x0d, 0xa8, 0xa0, 0x7d, 0x47, 0xa6, 0xef, 0x4e, 0x43,
+       0x6b, 0x9a, 0x30, 0x97, 0x8a, 0x8b, 0x82, 0xa3, 0x95, 0x15, 0x36, 0x2c, 0xf7, 0xd6, 0xa3, 0x7f,
+       0x73, 0x13, 0x11, 0x99, 0xa5, 0xf3, 0x03, 0xdc, 0xbc, 0xc9, 0xfb, 0x10, 0xc2, 0x3d, 0xee, 0xb9,
+       0x78, 0xff, 0xc8, 0xf3, 0x0d, 0x38, 0x9f, 0x74, 0xce, 0xec, 0xb7, 0xae, 0x63, 0xe3, 0x34, 0x24,
+       0xb7, 0x83, 0xf1, 0x06, 0x01, 0x1f, 0x66, 0x6b, 0xbf, 0x2d, 0xab, 0xc8, 0xea, 0x10, 0x57, 0xa1,
+       0x7c, 0xf2, 0x4a, 0x3f, 0x57, 0xca, 0x13, 0x86, 0xbf, 0xba, 0x27, 0xe5, 0x46, 0x62, 0x81, 0xc8,
+       0x04, 0x1e, 0x18, 0x20, 0xb3, 0xd5, 0xc3, 0x99, 0xcd, 0x4d, 0x22, 0x2f, 0x29, 0xf0, 0xb9, 0x94,
+       0x86, 0x5a, 0xe6, 0xe2, 0x16, 0x86, 0x32, 0x61, 0xb0, 0xcd, 0xca, 0xaf, 0x07, 0xec, 0xd0, 0xbc,
+       0xaf, 0xb8, 0x3c, 0xf0, 0x51, 0xc1, 0x6c, 0x7a, 0x63, 0x83, 0x6b, 0x3a, 0xff, 0x47, 0x95, 0x51,
+       0x10, 0x99, 0x52, 0x5f, 0x35, 0x5e, 0x46, 0x84, 0xbd, 0x34, 0xec, 0x12, 0x88, 0xc9, 0xdc, 0xc2,
+       0xd1, 0x1c, 0x82, 0x6d, 0xf1, 0xdf, 0x37, 0xe6, 0xf0, 0x8f, 0x6c, 0xe8, 0x81, 0x7d, 0xbd, 0xc3,
+       0x20, 0xb9, 0xa2, 0x74, 0xc6, 0x45, 0xc6, 0x7d, 0xf2, 0x99, 0xfe, 0xf9, 0x28, 0x7f, 0x09, 0xee,
+       0xac, 0x67, 0x68, 0x72, 0xa1, 0x26, 0xb1, 0xd3, 0x92, 0x2c, 0x4c, 0x2a, 0x0e, 0xc9, 0xb6, 0xd4,
+       0xfb, 0x59, 0x61, 0x63, 0xd1, 0xc4, 0x17, 0x08, 0x8d, 0x94, 0xbc, 0x3d, 0xbe, 0x5e, 0xae, 0x29,
+       0x51, 0xff, 0xa7, 0x65, 0x9d, 0xf6, 0xae, 0x35, 0xed, 0x6b, 0x05, 0x55, 0x93, 0x3f, 0x3e, 0xd6,
+       0x25, 0x9b, 0xd9, 0x3e, 0xf8, 0x6f, 0x60, 0x88, 0x0c, 0x4e, 0x35, 0x7b, 0x5c, 0x67, 0x7d, 0x93,
+       0xa6, 0x95, 0x1a, 0x42, 0xe1, 0xe1, 0xef, 0x91, 0x14, 0xd7, 0xb7, 0xb7, 0x0c, 0xa4, 0x2d, 0xda,
+       0x6a, 0xc1, 0x77, 0x1e, 0x25, 0xc1, 0xa5, 0x78, 0x4c, 0xa8, 0x6f, 0xd8, 0xde, 0x04, 0x1c, 0x09,
+       0xdf, 0x49, 0xf1, 0x79, 0x6a, 0x58, 0x2b, 0x45, 0x72, 0x31, 0x30, 0x7f, 0xbc, 0x67, 0xe5, 0xe7,
+       0xc5, 0xcd, 0xfe, 0xc0, 0xb0, 0x21, 0x50, 0x8e, 0x4f, 0xc5, 0xf8, 0x21, 0xf7, 0x34, 0x90, 0xbc,
+       0xc8, 0x7f, 0x14, 0xf1, 0x2e, 0x5c, 0xd1, 0x7b, 0x18, 0x18, 0x5b, 0x4a, 0x6b, 0x68, 0x02, 0x12,
+       0x17, 0x91, 0x4a, 0x30, 0x85, 0x18, 0x99, 0xa9, 0xb5, 0x16, 0x67, 0xe7, 0xed, 0x56, 0xd1, 0xd1,
+       0x23, 0x9d, 0xdf, 0xda, 0x11, 0xc5, 0x0a, 0xfe, 0xe5, 0x8a, 0xb6, 0xe0, 0xfb, 0x66, 0xab, 0x5c,
+       0xf5, 0x90, 0xdc, 0xd6, 0x45, 0x7d, 0x01, 0xd1, 0x83, 0xf5, 0xa9, 0xf0, 0xcd, 0xb2, 0x9c, 0x14,
+       0xff, 0x66, 0xf1, 0x0c, 0xd4, 0x28, 0xa0, 0x7b, 0x34, 0xe3, 0xd6, 0x00, 0x91, 0xf2, 0xac, 0xa7,
+       0x4e, 0x1f, 0xf3, 0xac, 0xa9, 0x6e, 0x2a, 0xa3, 0xec, 0x9b, 0x44, 0x8c, 0x74, 0x8d, 0xf8, 0x58,
+       0x13, 0x1c, 0xd4, 0x96, 0xaf, 0x9b, 0xf5, 0xf0, 0xd2, 0xf5, 0x57, 0xac, 0x0b, 0x64, 0x55, 0xa1,
+       0x86, 0x0e, 0x5a, 0xd0, 0x3e, 0x62, 0x26, 0xb5, 0x9e, 0x17, 0xf5, 0x1f, 0x88, 0xc1, 0x02, 0xe3,
+       0x4a, 0x38, 0xde, 0x70, 0x32, 0x16, 0x6f, 0x88, 0x5d, 0x1e, 0xf4, 0x29, 0xee, 0x19, 0x41, 0x21,
+       0xf5, 0x71, 0x84, 0xac, 0x37, 0x89, 0x14, 0x1f, 0x17, 0x98, 0x90, 0xb1, 0x83, 0x73, 0x24, 0x99,
+       0xc1, 0x31, 0xb1, 0x3f, 0xf3, 0xa3, 0x9a, 0x07, 0xae, 0xf1, 0xbf, 0xe8, 0x8c, 0xd7, 0x8c, 0x2e,
+       0xba, 0x35, 0xdf, 0xc5, 0xeb, 0x07, 0x01, 0x3c, 0x76, 0x21, 0x64, 0x81, 0xbd, 0xfb, 0x62, 0x33,
+       0x22, 0xe2, 0x0f, 0x05, 0x7e, 0x15, 0x04, 0x17, 0x67, 0xe4, 0x26, 0x32, 0x52, 0x07, 0x28, 0xa6,
+       0x8e, 0x88, 0x94, 0x23, 0xde, 0x54, 0x54, 0x12, 0xb5, 0x3e, 0xfd, 0x8d, 0xd4, 0x7a, 0xde, 0x58,
+       0xa1, 0xb2, 0x6e, 0x08, 0xd0, 0x6d, 0xdc, 0x21, 0x1e, 0xda, 0x14, 0xa0, 0xa2, 0xf7, 0x17, 0x01,
+       0xa5, 0xe0, 0xdf, 0xd7, 0x87, 0x1f, 0x59, 0x5d, 0xdb, 0x43, 0x70, 0xf5, 0xba, 0xb3, 0xb7, 0x32,
+       0x62, 0x75, 0xda, 0x15, 0xb2, 0x03, 0xda, 0xc7, 0x32, 0x1f, 0x8d, 0x61, 0x11, 0xbd, 0x30,
+}
+
+func TestAnotherMalformedDNS(t *testing.T) {
+       p := gopacket.NewPacket(testAnotherMalformedDNS, LinkTypeEthernet, testDecodeOptions)
+       if errLayer := p.ErrorLayer(); errLayer == nil {
+               t.Error("No error layer on invalid DNS name")
+       } else if err := errLayer.Error(); !strings.Contains(err.Error(), "offset too high") {
+               t.Errorf("unexpected error message: %v", err)
+       }
+}
+
+// testMalformedDNSAgain is the packet:
+//   12:14:52.702061 IP 10.77.0.4.53 > 10.1.0.41.61610: 12529 updateDA [b2&3=0x5cad] [38274a] [61303q] [1718n] [14913au][|domain]
+//     0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U"..7."U.....E.
+//     0x0010:  0091 2dff 0000 7811 ffe2 0a4d 0004 0a01  ..-...x....M....
+//     0x0020:  0029 0035 f0aa 007d 5b53 30f1 5cad ef77  .).5...}[S0.\..w
+//     0x0030:  9582 06b6 3a41 357a 8cef cdc0 a732 b800  ....:A5z.....2..
+//     0x0040:  466e 1c30 2e75 95ac c03d 1ed4 8635 2d09  Fn.0.u...=...5-.
+//     0x0050:  2fee 3a82 b4f0 427e 2b6b f870 cc7f c9a1  /.:...B~+k.p....
+//     0x0060:  e6f1 a761 97ec 2ff7 d248 4d95 321c 6e4e  ...a../..HM.2.nN
+//     0x0070:  57fa 6d3d 9ec0 fe3a 6f1e e634 4396 b494  W.m=...:o..4C...
+//     0x0080:  8b7a a929 d7e1 da7c c346 ca77 4890 6bf3  .z.)...|.F.wH.k.
+//     0x0090:  5ecb 7e97 c49d 3564 984f bf7c 8ac1 dd    ^.~...5d.O.|...
+var testMalformedDNSAgain = []byte{
+       0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x91, 0x2d, 0xff, 0x00, 0x00, 0x78, 0x11, 0xff, 0xe2, 0x0a, 0x4d, 0x00, 0x04, 0x0a, 0x01,
+       0x00, 0x29, 0x00, 0x35, 0xf0, 0xaa, 0x00, 0x7d, 0x5b, 0x53, 0x30, 0xf1, 0x5c, 0xad, 0xef, 0x77,
+       0x95, 0x82, 0x06, 0xb6, 0x3a, 0x41, 0x35, 0x7a, 0x8c, 0xef, 0xcd, 0xc0, 0xa7, 0x32, 0xb8, 0x00,
+       0x46, 0x6e, 0x1c, 0x30, 0x2e, 0x75, 0x95, 0xac, 0xc0, 0x3d, 0x1e, 0xd4, 0x86, 0x35, 0x2d, 0x09,
+       0x2f, 0xee, 0x3a, 0x82, 0xb4, 0xf0, 0x42, 0x7e, 0x2b, 0x6b, 0xf8, 0x70, 0xcc, 0x7f, 0xc9, 0xa1,
+       0xe6, 0xf1, 0xa7, 0x61, 0x97, 0xec, 0x2f, 0xf7, 0xd2, 0x48, 0x4d, 0x95, 0x32, 0x1c, 0x6e, 0x4e,
+       0x57, 0xfa, 0x6d, 0x3d, 0x9e, 0xc0, 0xfe, 0x3a, 0x6f, 0x1e, 0xe6, 0x34, 0x43, 0x96, 0xb4, 0x94,
+       0x8b, 0x7a, 0xa9, 0x29, 0xd7, 0xe1, 0xda, 0x7c, 0xc3, 0x46, 0xca, 0x77, 0x48, 0x90, 0x6b, 0xf3,
+       0x5e, 0xcb, 0x7e, 0x97, 0xc4, 0x9d, 0x35, 0x64, 0x98, 0x4f, 0xbf, 0x7c, 0x8a, 0xc1, 0xdd,
+}
+
+func TestMalformedDNSAgain(t *testing.T) {
+       p := gopacket.NewPacket(testMalformedDNSAgain, LinkTypeEthernet, testDecodeOptions)
+       if errLayer := p.ErrorLayer(); errLayer == nil {
+               t.Error("No error layer on invalid DNS name")
+       } else if err := errLayer.Error(); !strings.Contains(err.Error(), "walked out of range") {
+               t.Errorf("unexpected error message: %v", err)
+       }
+}
+
+// testMalformedDNSOhGodMakeItStop is the packet:
+//   15:08:24.430906 IP 10.77.0.19.53 > 10.1.0.19.50635: 12397 zoneInit% [b2&3=0x7232] [47729a] [46283q] [60247n] [61718au][|domain]
+//     0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U"..7."U.....E.
+//     0x0010:  0079 c51c 4000 3511 6be4 0a4d 0013 0a01  .y..@.5.k..M....
+//     0x0020:  0013 0035 c5cb 0065 ef45 306d 7232 b4cb  ...5...e.E0mr2..
+//     0x0030:  ba71 eb57 f116 3994 e000 4626 0534 66cc  .q.W..9...F&.4f.
+//     0x0040:  7b32 24f2 eece bca7 20e2 9a2a e1ce e737  {2$........*...7
+//     0x0050:  ac39 5fae 72ec c3ec 284f ca4a 171f 466d  .9_.r...(O.J..Fm
+//     0x0060:  f6c6 84d7 e795 310f 26df 9b59 6db9 21cf  ......1.&..Ym.!.
+//     0x0070:  15cb 30a3 c4cf df23 805a ed1a 0584 4fc3  ..0....#.Z....O.
+//     0x0080:  7fa3 3cb4 e04f e9                        ..<..O.
+var testMalformedDNSOhGodMakeItStop = []byte{
+       0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x79, 0xc5, 0x1c, 0x40, 0x00, 0x35, 0x11, 0x6b, 0xe4, 0x0a, 0x4d, 0x00, 0x13, 0x0a, 0x01,
+       0x00, 0x13, 0x00, 0x35, 0xc5, 0xcb, 0x00, 0x65, 0xef, 0x45, 0x30, 0x6d, 0x72, 0x32, 0xb4, 0xcb,
+       0xba, 0x71, 0xeb, 0x57, 0xf1, 0x16, 0x39, 0x94, 0xe0, 0x00, 0x46, 0x26, 0x05, 0x34, 0x66, 0xcc,
+       0x7b, 0x32, 0x24, 0xf2, 0xee, 0xce, 0xbc, 0xa7, 0x20, 0xe2, 0x9a, 0x2a, 0xe1, 0xce, 0xe7, 0x37,
+       0xac, 0x39, 0x5f, 0xae, 0x72, 0xec, 0xc3, 0xec, 0x28, 0x4f, 0xca, 0x4a, 0x17, 0x1f, 0x46, 0x6d,
+       0xf6, 0xc6, 0x84, 0xd7, 0xe7, 0x95, 0x31, 0x0f, 0x26, 0xdf, 0x9b, 0x59, 0x6d, 0xb9, 0x21, 0xcf,
+       0x15, 0xcb, 0x30, 0xa3, 0xc4, 0xcf, 0xdf, 0x23, 0x80, 0x5a, 0xed, 0x1a, 0x05, 0x84, 0x4f, 0xc3,
+       0x7f, 0xa3, 0x3c, 0xb4, 0xe0, 0x4f, 0xe9,
+}
+
+func TestMalformedDNSOhGodMakeItStop(t *testing.T) {
+       p := gopacket.NewPacket(testMalformedDNSOhGodMakeItStop, LinkTypeEthernet, testDecodeOptions)
+       if errLayer := p.ErrorLayer(); errLayer == nil {
+               t.Error("No error layer on invalid DNS name")
+       } else if err := errLayer.Error(); !strings.Contains(err.Error(), "offset pointer too high") {
+               t.Errorf("unexpected error message: %v", err)
+       }
+}
+
+// testPacketDNSPanic7 is the packet:
+//   07:56:25.174747 IP 10.77.0.11.53 > 10.1.0.67.55777: 41808*-| 3/7/0 TXT "google-site-verification=DC2uC-T8kD33lINhNzfo0bNBrw-vrCXs5BPF5BXY56g", TXT "v=spf1 include:spf-a.outlook.com include:spf-b.outlook.com ip4:157.55.9.128/25 include:spf.protection.outlook.com include:spf-a.hotmail.com include:_spf-ssg-b.microsoft.com include:_spf-ssg-c.microsoft.com ~all", TXT "google-site-verification=0iLWhIMhXEkeWwWfFU4ursTn-_OvoOjaA0Lr7Pg1sEM" (512)
+//     0x0000:  0055 22af c637 0022 55ac deac 0800 4500  .U"..7."U.....E.
+//     0x0010:  021c b5ca 4000 fa11 b46a 0a4d 000b 0a01  ....@....j.M....
+//     0x0020:  0043 0035 d9e1 0208 afd6 a350 8600 0001  .C.5.......P....
+//     0x0030:  0003 0007 0000 076f 7574 6c6f 6f6b 0363  .......outlook.c
+//     0x0040:  6f6d 0000 1000 01c0 0c00 1000 0100 0001  om..............
+//     0x0050:  2c00 4544 676f 6f67 6c65 2d73 6974 652d  ,.EDgoogle-site-
+//     0x0060:  7665 7269 6669 6361 7469 6f6e 3d44 4332  verification=DC2
+//     0x0070:  7543 2d54 386b 4433 336c 494e 684e 7a66  uC-T8kD33lINhNzf
+//     0x0080:  6f30 624e 4272 772d 7672 4358 7335 4250  o0bNBrw-vrCXs5BP
+//     0x0090:  4635 4258 5935 3667 c00c 0010 0001 0000  F5BXY56g........
+//     0x00a0:  012c 00d3 d276 3d73 7066 3120 696e 636c  .,...v=spf1.incl
+//     0x00b0:  7564 653a 7370 662d 612e 6f75 746c 6f6f  ude:spf-a.outloo
+//     0x00c0:  6b2e 636f 6d20 696e 636c 7564 653a 7370  k.com.include:sp
+//     0x00d0:  662d 622e 6f75 746c 6f6f 6b2e 636f 6d20  f-b.outlook.com.
+//     0x00e0:  6970 343a 3135 372e 3535 2e39 2e31 3238  ip4:157.55.9.128
+//     0x00f0:  2f32 3520 696e 636c 7564 653a 7370 662e  /25.include:spf.
+//     0x0100:  7072 6f74 6563 7469 6f6e 2e6f 7574 6c6f  protection.outlo
+//     0x0110:  6f6b 2e63 6f6d 2069 6e63 6c75 6465 3a73  ok.com.include:s
+//     0x0120:  7066 2d61 2e68 6f74 6d61 696c 2e63 6f6d  pf-a.hotmail.com
+//     0x0130:  2069 6e63 6c75 6465 3a5f 7370 662d 7373  .include:_spf-ss
+//     0x0140:  672d 622e 6d69 6372 6f73 6f66 742e 636f  g-b.microsoft.co
+//     0x0150:  6d20 696e 636c 7564 653a 5f73 7066 2d73  m.include:_spf-s
+//     0x0160:  7367 2d63 2e6d 6963 726f 736f 6674 2e63  sg-c.microsoft.c
+//     0x0170:  6f6d 207e 616c 6cc0 0c00 1000 0100 0001  om.~all.........
+//     0x0180:  2c00 4544 676f 6f67 6c65 2d73 6974 652d  ,.EDgoogle-site-
+//     0x0190:  7665 7269 6669 6361 7469 6f6e 3d30 694c  verification=0iL
+//     0x01a0:  5768 494d 6858 456b 6557 7757 6646 5534  WhIMhXEkeWwWfFU4
+//     0x01b0:  7572 7354 6e2d 5f4f 766f 4f6a 6141 304c  ursTn-_OvoOjaA0L
+//     0x01c0:  7237 5067 3173 454d c00c 0002 0001 0002  r7Pg1sEM........
+//     0x01d0:  a300 000e 036e 7332 046d 7366 7403 6e65  .....ns2.msft.ne
+//     0x01e0:  7400 c00c 0002 0001 0002 a300 0006 036e  t..............n
+//     0x01f0:  7334 c1ae c00c 0002 0001 0002 a300 0006  s4..............
+//     0x0200:  036e 7331 c1ae c00c 0002 0001 0002 a300  .ns1............
+//     0x0210:  0006 036e 7333 c1ae c00c 0002 0001 0002  ...ns3..........
+//     0x0220:  a300 0015 046e 7331 610d                 .....ns1a.
+var testPacketDNSPanic7 = []byte{
+       0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00,
+       0x02, 0x1c, 0xb5, 0xca, 0x40, 0x00, 0xfa, 0x11, 0xb4, 0x6a, 0x0a, 0x4d, 0x00, 0x0b, 0x0a, 0x01,
+       0x00, 0x43, 0x00, 0x35, 0xd9, 0xe1, 0x02, 0x08, 0xaf, 0xd6, 0xa3, 0x50, 0x86, 0x00, 0x00, 0x01,
+       0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x07, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x03, 0x63,
+       0x6f, 0x6d, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01,
+       0x2c, 0x00, 0x45, 0x44, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2d, 0x73, 0x69, 0x74, 0x65, 0x2d,
+       0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x44, 0x43, 0x32,
+       0x75, 0x43, 0x2d, 0x54, 0x38, 0x6b, 0x44, 0x33, 0x33, 0x6c, 0x49, 0x4e, 0x68, 0x4e, 0x7a, 0x66,
+       0x6f, 0x30, 0x62, 0x4e, 0x42, 0x72, 0x77, 0x2d, 0x76, 0x72, 0x43, 0x58, 0x73, 0x35, 0x42, 0x50,
+       0x46, 0x35, 0x42, 0x58, 0x59, 0x35, 0x36, 0x67, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00,
+       0x01, 0x2c, 0x00, 0xd3, 0xd2, 0x76, 0x3d, 0x73, 0x70, 0x66, 0x31, 0x20, 0x69, 0x6e, 0x63, 0x6c,
+       0x75, 0x64, 0x65, 0x3a, 0x73, 0x70, 0x66, 0x2d, 0x61, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f,
+       0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70,
+       0x66, 0x2d, 0x62, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20,
+       0x69, 0x70, 0x34, 0x3a, 0x31, 0x35, 0x37, 0x2e, 0x35, 0x35, 0x2e, 0x39, 0x2e, 0x31, 0x32, 0x38,
+       0x2f, 0x32, 0x35, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70, 0x66, 0x2e,
+       0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f,
+       0x6f, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73,
+       0x70, 0x66, 0x2d, 0x61, 0x2e, 0x68, 0x6f, 0x74, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x63, 0x6f, 0x6d,
+       0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2d, 0x73, 0x73,
+       0x67, 0x2d, 0x62, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f,
+       0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2d, 0x73,
+       0x73, 0x67, 0x2d, 0x63, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63,
+       0x6f, 0x6d, 0x20, 0x7e, 0x61, 0x6c, 0x6c, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01,
+       0x2c, 0x00, 0x45, 0x44, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2d, 0x73, 0x69, 0x74, 0x65, 0x2d,
+       0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x30, 0x69, 0x4c,
+       0x57, 0x68, 0x49, 0x4d, 0x68, 0x58, 0x45, 0x6b, 0x65, 0x57, 0x77, 0x57, 0x66, 0x46, 0x55, 0x34,
+       0x75, 0x72, 0x73, 0x54, 0x6e, 0x2d, 0x5f, 0x4f, 0x76, 0x6f, 0x4f, 0x6a, 0x61, 0x41, 0x30, 0x4c,
+       0x72, 0x37, 0x50, 0x67, 0x31, 0x73, 0x45, 0x4d, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02,
+       0xa3, 0x00, 0x00, 0x0e, 0x03, 0x6e, 0x73, 0x32, 0x04, 0x6d, 0x73, 0x66, 0x74, 0x03, 0x6e, 0x65,
+       0x74, 0x00, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e,
+       0x73, 0x34, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06,
+       0x03, 0x6e, 0x73, 0x31, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00,
+       0x00, 0x06, 0x03, 0x6e, 0x73, 0x33, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02,
+       0xa3, 0x00, 0x00, 0x15, 0x04, 0x6e, 0x73, 0x31, 0x61, 0x0d,
+}
+
+func TestPacketDNSPanic7(t *testing.T) {
+       p := gopacket.NewPacket(testPacketDNSPanic7, LinkTypeEthernet, testDecodeOptions)
+       if errLayer := p.ErrorLayer(); errLayer == nil {
+               t.Error("No error layer on invalid DNS name")
+       } else if err := errLayer.Error(); !strings.Contains(err.Error(), "resource record length exceeds data") {
+               t.Errorf("unexpected error message: %v", err)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/doc.go b/vendor/github.com/google/gopacket/layers/doc.go
new file mode 100644 (file)
index 0000000..3c882c3
--- /dev/null
@@ -0,0 +1,61 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*
+Package layers provides decoding layers for many common protocols.
+
+The layers package contains decode implementations for a number of different
+types of packet layers.  Users of gopacket will almost always want to also use
+layers to actually decode packet data into useful pieces. To see the set of
+protocols that gopacket/layers is currently able to decode,
+look at the set of LayerTypes defined in the Variables sections. The
+layers package also defines endpoints for many of the common packet layers
+that have source/destination addresses associated with them, for example IPv4/6
+(IPs) and TCP/UDP (ports).
+Finally, layers contains a number of useful enumerations (IPProtocol,
+EthernetType, LinkType, PPPType, etc...).  Many of these implement the
+gopacket.Decoder interface, so they can be passed into gopacket as decoders.
+
+Most common protocol layers are named using acronyms or other industry-common
+names (IPv4, TCP, PPP).  Some of the less common ones have their names expanded
+(CiscoDiscoveryProtocol).
+For certain protocols, sub-parts of the protocol are split out into their own
+layers (SCTP, for example).  This is done mostly in cases where portions of the
+protocol may fulfill the capabilities of interesting layers (SCTPData implements
+ApplicationLayer, while base SCTP implements TransportLayer), or possibly
+because splitting a protocol into a few layers makes decoding easier.
+
+This package is meant to be used with its parent,
+http://github.com/google/gopacket.
+
+Port Types
+
+Instead of using raw uint16 or uint8 values for ports, we use a different port
+type for every protocol, for example TCPPort and UDPPort.  This allows us to
+override string behavior for each port, which we do by setting up port name
+maps (TCPPortNames, UDPPortNames, etc...).  Well-known ports are annotated with
+their protocol names, and their String function displays these names:
+
+  p := TCPPort(80)
+  fmt.Printf("Number: %d  String: %v", p, p)
+  // Prints: "Number: 80  String: 80(http)"
+
+Modifying Decode Behavior
+
+layers links together decoding through its enumerations.  For example, after
+decoding layer type Ethernet, it uses Ethernet.EthernetType as its next decoder.
+All enumerations that act as decoders, like EthernetType, can be modified by
+users depending on their preferences.  For example, if you have a spiffy new
+IPv4 decoder that works way better than the one built into layers, you can do
+this:
+
+ var mySpiffyIPv4Decoder gopacket.Decoder = ...
+ layers.EthernetTypeMetadata[EthernetTypeIPv4].DecodeWith = mySpiffyIPv4Decoder
+
+This will make all future ethernet packets use your new decoder to decode IPv4
+packets, instead of the built-in decoder used by gopacket.
+*/
+package layers
diff --git a/vendor/github.com/google/gopacket/layers/dot11.go b/vendor/github.com/google/gopacket/layers/dot11.go
new file mode 100644 (file)
index 0000000..1b53026
--- /dev/null
@@ -0,0 +1,1430 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// See http://standards.ieee.org/findstds/standard/802.11-2012.html for info on
+// all of the layers in this file.
+
+package layers
+
+import (
+       "bytes"
+       "encoding/binary"
+       "fmt"
+       "hash/crc32"
+       "net"
+
+       "github.com/google/gopacket"
+)
+
+// Dot11Flags contains the set of 8 flags in the IEEE 802.11 frame control
+// header, all in one place.
+type Dot11Flags uint8
+
+const (
+       Dot11FlagsToDS Dot11Flags = 1 << iota
+       Dot11FlagsFromDS
+       Dot11FlagsMF
+       Dot11FlagsRetry
+       Dot11FlagsPowerManagement
+       Dot11FlagsMD
+       Dot11FlagsWEP
+       Dot11FlagsOrder
+)
+
+func (d Dot11Flags) ToDS() bool {
+       return d&Dot11FlagsToDS != 0
+}
+func (d Dot11Flags) FromDS() bool {
+       return d&Dot11FlagsFromDS != 0
+}
+func (d Dot11Flags) MF() bool {
+       return d&Dot11FlagsMF != 0
+}
+func (d Dot11Flags) Retry() bool {
+       return d&Dot11FlagsRetry != 0
+}
+func (d Dot11Flags) PowerManagement() bool {
+       return d&Dot11FlagsPowerManagement != 0
+}
+func (d Dot11Flags) MD() bool {
+       return d&Dot11FlagsMD != 0
+}
+func (d Dot11Flags) WEP() bool {
+       return d&Dot11FlagsWEP != 0
+}
+func (d Dot11Flags) Order() bool {
+       return d&Dot11FlagsOrder != 0
+}
+
+// String provides a human readable string for Dot11Flags.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11Flags value, not its string.
+func (a Dot11Flags) String() string {
+       var out bytes.Buffer
+       if a.ToDS() {
+               out.WriteString("TO-DS,")
+       }
+       if a.FromDS() {
+               out.WriteString("FROM-DS,")
+       }
+       if a.MF() {
+               out.WriteString("MF,")
+       }
+       if a.Retry() {
+               out.WriteString("Retry,")
+       }
+       if a.PowerManagement() {
+               out.WriteString("PowerManagement,")
+       }
+       if a.MD() {
+               out.WriteString("MD,")
+       }
+       if a.WEP() {
+               out.WriteString("WEP,")
+       }
+       if a.Order() {
+               out.WriteString("Order,")
+       }
+
+       if length := out.Len(); length > 0 {
+               return string(out.Bytes()[:length-1]) // strip final comma
+       }
+       return ""
+}
+
+type Dot11Reason uint16
+
+// TODO: Verify these reasons, and append more reasons if necessary.
+
+const (
+       Dot11ReasonReserved          Dot11Reason = 1
+       Dot11ReasonUnspecified       Dot11Reason = 2
+       Dot11ReasonAuthExpired       Dot11Reason = 3
+       Dot11ReasonDeauthStLeaving   Dot11Reason = 4
+       Dot11ReasonInactivity        Dot11Reason = 5
+       Dot11ReasonApFull            Dot11Reason = 6
+       Dot11ReasonClass2FromNonAuth Dot11Reason = 7
+       Dot11ReasonClass3FromNonAss  Dot11Reason = 8
+       Dot11ReasonDisasStLeaving    Dot11Reason = 9
+       Dot11ReasonStNotAuth         Dot11Reason = 10
+)
+
+// String provides a human readable string for Dot11Reason.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11Reason value, not its string.
+func (a Dot11Reason) String() string {
+       switch a {
+       case Dot11ReasonReserved:
+               return "Reserved"
+       case Dot11ReasonUnspecified:
+               return "Unspecified"
+       case Dot11ReasonAuthExpired:
+               return "Auth. expired"
+       case Dot11ReasonDeauthStLeaving:
+               return "Deauth. st. leaving"
+       case Dot11ReasonInactivity:
+               return "Inactivity"
+       case Dot11ReasonApFull:
+               return "Ap. full"
+       case Dot11ReasonClass2FromNonAuth:
+               return "Class2 from non auth."
+       case Dot11ReasonClass3FromNonAss:
+               return "Class3 from non ass."
+       case Dot11ReasonDisasStLeaving:
+               return "Disass st. leaving"
+       case Dot11ReasonStNotAuth:
+               return "St. not auth."
+       default:
+               return "Unknown reason"
+       }
+}
+
+type Dot11Status uint16
+
+const (
+       Dot11StatusSuccess                      Dot11Status = 0
+       Dot11StatusFailure                      Dot11Status = 1  // Unspecified failure
+       Dot11StatusCannotSupportAllCapabilities Dot11Status = 10 // Cannot support all requested capabilities in the Capability Information field
+       Dot11StatusInabilityExistsAssociation   Dot11Status = 11 // Reassociation denied due to inability to confirm that association exists
+       Dot11StatusAssociationDenied            Dot11Status = 12 // Association denied due to reason outside the scope of this standard
+       Dot11StatusAlgorithmUnsupported         Dot11Status = 13 // Responding station does not support the specified authentication algorithm
+       Dot11StatusOufOfExpectedSequence        Dot11Status = 14 // Received an Authentication frame with authentication transaction sequence number out of expected sequence
+       Dot11StatusChallengeFailure             Dot11Status = 15 // Authentication rejected because of challenge failure
+       Dot11StatusTimeout                      Dot11Status = 16 // Authentication rejected due to timeout waiting for next frame in sequence
+       Dot11StatusAPUnableToHandle             Dot11Status = 17 // Association denied because AP is unable to handle additional associated stations
+       Dot11StatusRateUnsupported              Dot11Status = 18 // Association denied due to requesting station not supporting all of the data rates in the BSSBasicRateSet parameter
+)
+
+// String provides a human readable string for Dot11Status.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11Status value, not its string.
+func (a Dot11Status) String() string {
+       switch a {
+       case Dot11StatusSuccess:
+               return "success"
+       case Dot11StatusFailure:
+               return "failure"
+       case Dot11StatusCannotSupportAllCapabilities:
+               return "cannot-support-all-capabilities"
+       case Dot11StatusInabilityExistsAssociation:
+               return "inability-exists-association"
+       case Dot11StatusAssociationDenied:
+               return "association-denied"
+       case Dot11StatusAlgorithmUnsupported:
+               return "algorithm-unsupported"
+       case Dot11StatusOufOfExpectedSequence:
+               return "out-of-expected-sequence"
+       case Dot11StatusChallengeFailure:
+               return "challenge-failure"
+       case Dot11StatusTimeout:
+               return "timeout"
+       case Dot11StatusAPUnableToHandle:
+               return "ap-unable-to-handle"
+       case Dot11StatusRateUnsupported:
+               return "rate-unsupported"
+       default:
+               return "unknown status"
+       }
+}
+
+type Dot11AckPolicy uint8
+
+const (
+       Dot11AckPolicyNormal     Dot11AckPolicy = 0
+       Dot11AckPolicyNone       Dot11AckPolicy = 1
+       Dot11AckPolicyNoExplicit Dot11AckPolicy = 2
+       Dot11AckPolicyBlock      Dot11AckPolicy = 3
+)
+
+// String provides a human readable string for Dot11AckPolicy.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11AckPolicy value, not its string.
+func (a Dot11AckPolicy) String() string {
+       switch a {
+       case Dot11AckPolicyNormal:
+               return "normal-ack"
+       case Dot11AckPolicyNone:
+               return "no-ack"
+       case Dot11AckPolicyNoExplicit:
+               return "no-explicit-ack"
+       case Dot11AckPolicyBlock:
+               return "block-ack"
+       default:
+               return "unknown-ack-policy"
+       }
+}
+
+type Dot11Algorithm uint16
+
+const (
+       Dot11AlgorithmOpen      Dot11Algorithm = 0
+       Dot11AlgorithmSharedKey Dot11Algorithm = 1
+)
+
+// String provides a human readable string for Dot11Algorithm.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11Algorithm value, not its string.
+func (a Dot11Algorithm) String() string {
+       switch a {
+       case Dot11AlgorithmOpen:
+               return "open"
+       case Dot11AlgorithmSharedKey:
+               return "shared-key"
+       default:
+               return "unknown-algorithm"
+       }
+}
+
+type Dot11InformationElementID uint8
+
+// TODO: Verify these element ids, and append more ids if more.
+
+const (
+       Dot11InformationElementIDSSID          Dot11InformationElementID = 0
+       Dot11InformationElementIDRates         Dot11InformationElementID = 1
+       Dot11InformationElementIDFHSet         Dot11InformationElementID = 2
+       Dot11InformationElementIDDSSet         Dot11InformationElementID = 3
+       Dot11InformationElementIDCFSet         Dot11InformationElementID = 4
+       Dot11InformationElementIDTIM           Dot11InformationElementID = 5
+       Dot11InformationElementIDIBSSSet       Dot11InformationElementID = 6
+       Dot11InformationElementIDChallenge     Dot11InformationElementID = 16
+       Dot11InformationElementIDERPInfo       Dot11InformationElementID = 42
+       Dot11InformationElementIDQOSCapability Dot11InformationElementID = 46
+       Dot11InformationElementIDERPInfo2      Dot11InformationElementID = 47
+       Dot11InformationElementIDRSNInfo       Dot11InformationElementID = 48
+       Dot11InformationElementIDESRates       Dot11InformationElementID = 50
+       Dot11InformationElementIDVendor        Dot11InformationElementID = 221
+       Dot11InformationElementIDReserved      Dot11InformationElementID = 68
+)
+
+// String provides a human readable string for Dot11InformationElementID.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the Dot11InformationElementID value,
+// not its string.
+func (a Dot11InformationElementID) String() string {
+       switch a {
+       case Dot11InformationElementIDSSID:
+               return "SSID"
+       case Dot11InformationElementIDRates:
+               return "Rates"
+       case Dot11InformationElementIDFHSet:
+               return "FHset"
+       case Dot11InformationElementIDDSSet:
+               return "DSset"
+       case Dot11InformationElementIDCFSet:
+               return "CFset"
+       case Dot11InformationElementIDTIM:
+               return "TIM"
+       case Dot11InformationElementIDIBSSSet:
+               return "IBSSset"
+       case Dot11InformationElementIDChallenge:
+               return "Challenge"
+       case Dot11InformationElementIDERPInfo:
+               return "ERPinfo"
+       case Dot11InformationElementIDQOSCapability:
+               return "QOS capability"
+       case Dot11InformationElementIDERPInfo2:
+               return "ERPinfo2"
+       case Dot11InformationElementIDRSNInfo:
+               return "RSNinfo"
+       case Dot11InformationElementIDESRates:
+               return "ESrates"
+       case Dot11InformationElementIDVendor:
+               return "Vendor"
+       case Dot11InformationElementIDReserved:
+               return "Reserved"
+       default:
+               return "Unknown information element id"
+       }
+}
+
+// Dot11 provides an IEEE 802.11 base packet header.
+// See http://standards.ieee.org/findstds/standard/802.11-2012.html
+// for excrutiating detail.
+type Dot11 struct {
+       BaseLayer
+       Type           Dot11Type
+       Proto          uint8
+       Flags          Dot11Flags
+       DurationID     uint16
+       Address1       net.HardwareAddr
+       Address2       net.HardwareAddr
+       Address3       net.HardwareAddr
+       Address4       net.HardwareAddr
+       SequenceNumber uint16
+       FragmentNumber uint16
+       Checksum       uint32
+}
+
+func decodeDot11(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11) LayerType() gopacket.LayerType  { return LayerTypeDot11 }
+func (m *Dot11) CanDecode() gopacket.LayerClass { return LayerTypeDot11 }
+func (m *Dot11) NextLayerType() gopacket.LayerType {
+       if m.Flags.WEP() {
+               return (LayerTypeDot11WEP)
+       }
+
+       return m.Type.LayerType()
+}
+
+func (m *Dot11) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 10 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11 length %v too short, %v required", len(data), 10)
+       }
+       m.Type = Dot11Type((data[0])&0xFC) >> 2
+
+       m.Proto = uint8(data[0]) & 0x0003
+       m.Flags = Dot11Flags(data[1])
+       m.DurationID = binary.LittleEndian.Uint16(data[2:4])
+       m.Address1 = net.HardwareAddr(data[4:10])
+
+       offset := 10
+
+       mainType := m.Type.MainType()
+
+       switch mainType {
+       case Dot11TypeCtrl:
+               switch m.Type {
+               case Dot11TypeCtrlRTS, Dot11TypeCtrlPowersavePoll, Dot11TypeCtrlCFEnd, Dot11TypeCtrlCFEndAck:
+                       if len(data) < offset+6 {
+                               df.SetTruncated()
+                               return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+6)
+                       }
+                       m.Address2 = net.HardwareAddr(data[offset : offset+6])
+                       offset += 6
+               }
+       case Dot11TypeMgmt, Dot11TypeData:
+               if len(data) < offset+14 {
+                       df.SetTruncated()
+                       return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+14)
+               }
+               m.Address2 = net.HardwareAddr(data[offset : offset+6])
+               offset += 6
+               m.Address3 = net.HardwareAddr(data[offset : offset+6])
+               offset += 6
+
+               m.SequenceNumber = (binary.LittleEndian.Uint16(data[offset:offset+2]) & 0xFFF0) >> 4
+               m.FragmentNumber = (binary.LittleEndian.Uint16(data[offset:offset+2]) & 0x000F)
+               offset += 2
+       }
+
+       if mainType == Dot11TypeData && m.Flags.FromDS() && m.Flags.ToDS() {
+               if len(data) < offset+6 {
+                       df.SetTruncated()
+                       return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+6)
+               }
+               m.Address4 = net.HardwareAddr(data[offset : offset+6])
+               offset += 6
+       }
+
+       m.BaseLayer = BaseLayer{Contents: data[0:offset], Payload: data[offset : len(data)-4]}
+       m.Checksum = binary.LittleEndian.Uint32(data[len(data)-4 : len(data)])
+       return nil
+}
+
+func (m *Dot11) ChecksumValid() bool {
+       // only for CTRL and MGMT frames
+       h := crc32.NewIEEE()
+       h.Write(m.Contents)
+       h.Write(m.Payload)
+       return m.Checksum == h.Sum32()
+}
+
+func (m Dot11) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf, err := b.PrependBytes(24)
+
+       if err != nil {
+               return err
+       }
+
+       buf[0] = (uint8(m.Type) << 2) | m.Proto
+       buf[1] = uint8(m.Flags)
+
+       binary.LittleEndian.PutUint16(buf[2:4], m.DurationID)
+
+       copy(buf[4:10], m.Address1)
+
+       offset := 10
+
+       switch m.Type.MainType() {
+       case Dot11TypeCtrl:
+               switch m.Type {
+               case Dot11TypeCtrlRTS, Dot11TypeCtrlPowersavePoll, Dot11TypeCtrlCFEnd, Dot11TypeCtrlCFEndAck:
+                       copy(buf[offset:offset+6], m.Address2)
+                       offset += 6
+               }
+       case Dot11TypeMgmt, Dot11TypeData:
+               copy(buf[offset:offset+6], m.Address2)
+               offset += 6
+               copy(buf[offset:offset+6], m.Address3)
+               offset += 6
+
+               binary.LittleEndian.PutUint16(buf[offset:offset+2], (m.SequenceNumber<<4)|m.FragmentNumber)
+               offset += 2
+       }
+
+       if m.Type.MainType() == Dot11TypeData && m.Flags.FromDS() && m.Flags.ToDS() {
+               copy(buf[offset:offset+6], m.Address4)
+               offset += 6
+       }
+
+       return nil
+}
+
+// Dot11Mgmt is a base for all IEEE 802.11 management layers.
+type Dot11Mgmt struct {
+       BaseLayer
+}
+
+func (m *Dot11Mgmt) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }
+func (m *Dot11Mgmt) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.Contents = data
+       return nil
+}
+
+// Dot11Ctrl is a base for all IEEE 802.11 control layers.
+type Dot11Ctrl struct {
+       BaseLayer
+}
+
+func (m *Dot11Ctrl) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }
+
+func (m *Dot11Ctrl) LayerType() gopacket.LayerType  { return LayerTypeDot11Ctrl }
+func (m *Dot11Ctrl) CanDecode() gopacket.LayerClass { return LayerTypeDot11Ctrl }
+func (m *Dot11Ctrl) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.Contents = data
+       return nil
+}
+
+func decodeDot11Ctrl(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11Ctrl{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+// Dot11WEP contains WEP encrpted IEEE 802.11 data.
+type Dot11WEP struct {
+       BaseLayer
+}
+
+func (m *Dot11WEP) NextLayerType() gopacket.LayerType { return LayerTypeLLC }
+
+func (m *Dot11WEP) LayerType() gopacket.LayerType  { return LayerTypeDot11WEP }
+func (m *Dot11WEP) CanDecode() gopacket.LayerClass { return LayerTypeDot11WEP }
+func (m *Dot11WEP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.Contents = data
+       return nil
+}
+
+func decodeDot11WEP(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11WEP{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+// Dot11Data is a base for all IEEE 802.11 data layers.
+type Dot11Data struct {
+       BaseLayer
+}
+
+func (m *Dot11Data) NextLayerType() gopacket.LayerType { return LayerTypeLLC }
+
+func (m *Dot11Data) LayerType() gopacket.LayerType  { return LayerTypeDot11Data }
+func (m *Dot11Data) CanDecode() gopacket.LayerClass { return LayerTypeDot11Data }
+func (m *Dot11Data) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.Payload = data
+       return nil
+}
+
+func decodeDot11Data(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11Data{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+type Dot11DataCFAck struct {
+       Dot11Data
+}
+
+func decodeDot11DataCFAck(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataCFAck{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFAck) LayerType() gopacket.LayerType  { return LayerTypeDot11DataCFAck }
+func (m *Dot11DataCFAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFAck }
+func (m *Dot11DataCFAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFPoll struct {
+       Dot11Data
+}
+
+func decodeDot11DataCFPoll(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataCFPoll{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFPoll) LayerType() gopacket.LayerType  { return LayerTypeDot11DataCFPoll }
+func (m *Dot11DataCFPoll) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFPoll }
+func (m *Dot11DataCFPoll) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFAckPoll struct {
+       Dot11Data
+}
+
+func decodeDot11DataCFAckPoll(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataCFAckPoll{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFAckPoll) LayerType() gopacket.LayerType  { return LayerTypeDot11DataCFAckPoll }
+func (m *Dot11DataCFAckPoll) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFAckPoll }
+func (m *Dot11DataCFAckPoll) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataNull struct {
+       Dot11Data
+}
+
+func decodeDot11DataNull(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataNull{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataNull) LayerType() gopacket.LayerType  { return LayerTypeDot11DataNull }
+func (m *Dot11DataNull) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataNull }
+func (m *Dot11DataNull) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFAckNoData struct {
+       Dot11Data
+}
+
+func decodeDot11DataCFAckNoData(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataCFAckNoData{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFAckNoData) LayerType() gopacket.LayerType  { return LayerTypeDot11DataCFAckNoData }
+func (m *Dot11DataCFAckNoData) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFAckNoData }
+func (m *Dot11DataCFAckNoData) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFPollNoData struct {
+       Dot11Data
+}
+
+func decodeDot11DataCFPollNoData(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataCFPollNoData{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFPollNoData) LayerType() gopacket.LayerType  { return LayerTypeDot11DataCFPollNoData }
+func (m *Dot11DataCFPollNoData) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataCFPollNoData }
+func (m *Dot11DataCFPollNoData) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataCFAckPollNoData struct {
+       Dot11Data
+}
+
+func decodeDot11DataCFAckPollNoData(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataCFAckPollNoData{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataCFAckPollNoData) LayerType() gopacket.LayerType {
+       return LayerTypeDot11DataCFAckPollNoData
+}
+func (m *Dot11DataCFAckPollNoData) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11DataCFAckPollNoData
+}
+func (m *Dot11DataCFAckPollNoData) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Data.DecodeFromBytes(data, df)
+}
+
+type Dot11DataQOS struct {
+       Dot11Ctrl
+       TID       uint8 /* Traffic IDentifier */
+       EOSP      bool  /* End of service period */
+       AckPolicy Dot11AckPolicy
+       TXOP      uint8
+}
+
+func (m *Dot11DataQOS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 4 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11DataQOS length %v too short, %v required", len(data), 4)
+       }
+       m.TID = (uint8(data[0]) & 0x0F)
+       m.EOSP = (uint8(data[0]) & 0x10) == 0x10
+       m.AckPolicy = Dot11AckPolicy((uint8(data[0]) & 0x60) >> 5)
+       m.TXOP = uint8(data[1])
+       // TODO: Mesh Control bytes 2:4
+       m.BaseLayer = BaseLayer{Contents: data[0:4], Payload: data[4:]}
+       return nil
+}
+
+type Dot11DataQOSData struct {
+       Dot11DataQOS
+}
+
+func decodeDot11DataQOSData(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataQOSData{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSData) LayerType() gopacket.LayerType  { return LayerTypeDot11DataQOSData }
+func (m *Dot11DataQOSData) CanDecode() gopacket.LayerClass { return LayerTypeDot11DataQOSData }
+
+func (m *Dot11DataQOSData) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11Data
+}
+
+type Dot11DataQOSDataCFAck struct {
+       Dot11DataQOS
+}
+
+func decodeDot11DataQOSDataCFAck(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataQOSDataCFAck{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSDataCFAck) LayerType() gopacket.LayerType     { return LayerTypeDot11DataQOSDataCFAck }
+func (m *Dot11DataQOSDataCFAck) CanDecode() gopacket.LayerClass    { return LayerTypeDot11DataQOSDataCFAck }
+func (m *Dot11DataQOSDataCFAck) NextLayerType() gopacket.LayerType { return LayerTypeDot11DataCFAck }
+
+type Dot11DataQOSDataCFPoll struct {
+       Dot11DataQOS
+}
+
+func decodeDot11DataQOSDataCFPoll(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataQOSDataCFPoll{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSDataCFPoll) LayerType() gopacket.LayerType {
+       return LayerTypeDot11DataQOSDataCFPoll
+}
+func (m *Dot11DataQOSDataCFPoll) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11DataQOSDataCFPoll
+}
+func (m *Dot11DataQOSDataCFPoll) NextLayerType() gopacket.LayerType { return LayerTypeDot11DataCFPoll }
+
+type Dot11DataQOSDataCFAckPoll struct {
+       Dot11DataQOS
+}
+
+func decodeDot11DataQOSDataCFAckPoll(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataQOSDataCFAckPoll{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSDataCFAckPoll) LayerType() gopacket.LayerType {
+       return LayerTypeDot11DataQOSDataCFAckPoll
+}
+func (m *Dot11DataQOSDataCFAckPoll) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11DataQOSDataCFAckPoll
+}
+func (m *Dot11DataQOSDataCFAckPoll) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11DataCFAckPoll
+}
+
+type Dot11DataQOSNull struct {
+       Dot11DataQOS
+}
+
+func decodeDot11DataQOSNull(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataQOSNull{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSNull) LayerType() gopacket.LayerType     { return LayerTypeDot11DataQOSNull }
+func (m *Dot11DataQOSNull) CanDecode() gopacket.LayerClass    { return LayerTypeDot11DataQOSNull }
+func (m *Dot11DataQOSNull) NextLayerType() gopacket.LayerType { return LayerTypeDot11DataNull }
+
+type Dot11DataQOSCFPollNoData struct {
+       Dot11DataQOS
+}
+
+func decodeDot11DataQOSCFPollNoData(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataQOSCFPollNoData{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSCFPollNoData) LayerType() gopacket.LayerType {
+       return LayerTypeDot11DataQOSCFPollNoData
+}
+func (m *Dot11DataQOSCFPollNoData) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11DataQOSCFPollNoData
+}
+func (m *Dot11DataQOSCFPollNoData) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11DataCFPollNoData
+}
+
+type Dot11DataQOSCFAckPollNoData struct {
+       Dot11DataQOS
+}
+
+func decodeDot11DataQOSCFAckPollNoData(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11DataQOSCFAckPollNoData{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11DataQOSCFAckPollNoData) LayerType() gopacket.LayerType {
+       return LayerTypeDot11DataQOSCFAckPollNoData
+}
+func (m *Dot11DataQOSCFAckPollNoData) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11DataQOSCFAckPollNoData
+}
+func (m *Dot11DataQOSCFAckPollNoData) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11DataCFAckPollNoData
+}
+
+type Dot11InformationElement struct {
+       BaseLayer
+       ID     Dot11InformationElementID
+       Length uint8
+       OUI    []byte
+       Info   []byte
+}
+
+func (m *Dot11InformationElement) LayerType() gopacket.LayerType {
+       return LayerTypeDot11InformationElement
+}
+func (m *Dot11InformationElement) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11InformationElement
+}
+
+func (m *Dot11InformationElement) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11InformationElement
+}
+
+func (m *Dot11InformationElement) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 2 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11InformationElement length %v too short, %v required", len(data), 2)
+       }
+       m.ID = Dot11InformationElementID(data[0])
+       m.Length = data[1]
+       offset := int(2)
+
+       if len(data) < offset+int(m.Length) {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11InformationElement length %v too short, %v required", len(data), offset+int(m.Length))
+       }
+       if m.ID == 221 {
+               // Vendor extension
+               m.OUI = data[offset : offset+4]
+               m.Info = data[offset+4 : offset+int(m.Length)]
+       } else {
+               m.Info = data[offset : offset+int(m.Length)]
+       }
+
+       offset += int(m.Length)
+
+       m.BaseLayer = BaseLayer{Contents: data[:offset], Payload: data[offset:]}
+       return nil
+}
+
+func (d *Dot11InformationElement) String() string {
+       if d.ID == 0 {
+               return fmt.Sprintf("802.11 Information Element (SSID: %v)", string(d.Info))
+       } else if d.ID == 1 {
+               rates := ""
+               for i := 0; i < len(d.Info); i++ {
+                       if d.Info[i]&0x80 == 0 {
+                               rates += fmt.Sprintf("%.1f ", float32(d.Info[i])*0.5)
+                       } else {
+                               rates += fmt.Sprintf("%.1f* ", float32(d.Info[i]&0x7F)*0.5)
+                       }
+               }
+               return fmt.Sprintf("802.11 Information Element (Rates: %s Mbit)", rates)
+       } else if d.ID == 221 {
+               return fmt.Sprintf("802.11 Information Element (Vendor: ID: %v, Length: %v, OUI: %X, Info: %X)", d.ID, d.Length, d.OUI, d.Info)
+       } else {
+               return fmt.Sprintf("802.11 Information Element (ID: %v, Length: %v, Info: %X)", d.ID, d.Length, d.Info)
+       }
+}
+
+func (m Dot11InformationElement) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       length := len(m.Info) + len(m.OUI)
+       if buf, err := b.PrependBytes(2 + length); err != nil {
+               return err
+       } else {
+               buf[0] = uint8(m.ID)
+               buf[1] = uint8(length)
+               copy(buf[2:], m.OUI)
+               copy(buf[2+len(m.OUI):], m.Info)
+       }
+       return nil
+}
+
+func decodeDot11InformationElement(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11InformationElement{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+type Dot11CtrlCTS struct {
+       Dot11Ctrl
+}
+
+func decodeDot11CtrlCTS(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11CtrlCTS{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlCTS) LayerType() gopacket.LayerType {
+       return LayerTypeDot11CtrlCTS
+}
+func (m *Dot11CtrlCTS) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11CtrlCTS
+}
+func (m *Dot11CtrlCTS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlRTS struct {
+       Dot11Ctrl
+}
+
+func decodeDot11CtrlRTS(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11CtrlRTS{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlRTS) LayerType() gopacket.LayerType {
+       return LayerTypeDot11CtrlRTS
+}
+func (m *Dot11CtrlRTS) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11CtrlRTS
+}
+func (m *Dot11CtrlRTS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlBlockAckReq struct {
+       Dot11Ctrl
+}
+
+func decodeDot11CtrlBlockAckReq(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11CtrlBlockAckReq{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlBlockAckReq) LayerType() gopacket.LayerType {
+       return LayerTypeDot11CtrlBlockAckReq
+}
+func (m *Dot11CtrlBlockAckReq) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11CtrlBlockAckReq
+}
+func (m *Dot11CtrlBlockAckReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlBlockAck struct {
+       Dot11Ctrl
+}
+
+func decodeDot11CtrlBlockAck(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11CtrlBlockAck{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlBlockAck) LayerType() gopacket.LayerType  { return LayerTypeDot11CtrlBlockAck }
+func (m *Dot11CtrlBlockAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11CtrlBlockAck }
+func (m *Dot11CtrlBlockAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlPowersavePoll struct {
+       Dot11Ctrl
+}
+
+func decodeDot11CtrlPowersavePoll(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11CtrlPowersavePoll{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlPowersavePoll) LayerType() gopacket.LayerType {
+       return LayerTypeDot11CtrlPowersavePoll
+}
+func (m *Dot11CtrlPowersavePoll) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11CtrlPowersavePoll
+}
+func (m *Dot11CtrlPowersavePoll) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlAck struct {
+       Dot11Ctrl
+}
+
+func decodeDot11CtrlAck(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11CtrlAck{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlAck) LayerType() gopacket.LayerType  { return LayerTypeDot11CtrlAck }
+func (m *Dot11CtrlAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11CtrlAck }
+func (m *Dot11CtrlAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlCFEnd struct {
+       Dot11Ctrl
+}
+
+func decodeDot11CtrlCFEnd(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11CtrlCFEnd{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlCFEnd) LayerType() gopacket.LayerType {
+       return LayerTypeDot11CtrlCFEnd
+}
+func (m *Dot11CtrlCFEnd) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11CtrlCFEnd
+}
+func (m *Dot11CtrlCFEnd) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11CtrlCFEndAck struct {
+       Dot11Ctrl
+}
+
+func decodeDot11CtrlCFEndAck(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11CtrlCFEndAck{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11CtrlCFEndAck) LayerType() gopacket.LayerType {
+       return LayerTypeDot11CtrlCFEndAck
+}
+func (m *Dot11CtrlCFEndAck) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11CtrlCFEndAck
+}
+func (m *Dot11CtrlCFEndAck) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       return m.Dot11Ctrl.DecodeFromBytes(data, df)
+}
+
+type Dot11MgmtAssociationReq struct {
+       Dot11Mgmt
+       CapabilityInfo uint16
+       ListenInterval uint16
+}
+
+func decodeDot11MgmtAssociationReq(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtAssociationReq{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtAssociationReq) LayerType() gopacket.LayerType {
+       return LayerTypeDot11MgmtAssociationReq
+}
+func (m *Dot11MgmtAssociationReq) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11MgmtAssociationReq
+}
+func (m *Dot11MgmtAssociationReq) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11InformationElement
+}
+func (m *Dot11MgmtAssociationReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 4 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11MgmtAssociationReq length %v too short, %v required", len(data), 4)
+       }
+       m.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])
+       m.ListenInterval = binary.LittleEndian.Uint16(data[2:4])
+       m.Payload = data[4:]
+       return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtAssociationReq) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf, err := b.PrependBytes(4)
+
+       if err != nil {
+               return err
+       }
+
+       binary.LittleEndian.PutUint16(buf[0:2], m.CapabilityInfo)
+       binary.LittleEndian.PutUint16(buf[2:4], m.ListenInterval)
+
+       return nil
+}
+
+type Dot11MgmtAssociationResp struct {
+       Dot11Mgmt
+       CapabilityInfo uint16
+       Status         Dot11Status
+       AID            uint16
+}
+
+func decodeDot11MgmtAssociationResp(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtAssociationResp{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtAssociationResp) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11MgmtAssociationResp
+}
+func (m *Dot11MgmtAssociationResp) LayerType() gopacket.LayerType {
+       return LayerTypeDot11MgmtAssociationResp
+}
+func (m *Dot11MgmtAssociationResp) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11InformationElement
+}
+func (m *Dot11MgmtAssociationResp) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 6 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11MgmtAssociationResp length %v too short, %v required", len(data), 6)
+       }
+       m.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])
+       m.Status = Dot11Status(binary.LittleEndian.Uint16(data[2:4]))
+       m.AID = binary.LittleEndian.Uint16(data[4:6])
+       m.Payload = data[6:]
+       return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtAssociationResp) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf, err := b.PrependBytes(6)
+
+       if err != nil {
+               return err
+       }
+
+       binary.LittleEndian.PutUint16(buf[0:2], m.CapabilityInfo)
+       binary.LittleEndian.PutUint16(buf[2:4], uint16(m.Status))
+       binary.LittleEndian.PutUint16(buf[4:6], m.AID)
+
+       return nil
+}
+
+type Dot11MgmtReassociationReq struct {
+       Dot11Mgmt
+       CapabilityInfo   uint16
+       ListenInterval   uint16
+       CurrentApAddress net.HardwareAddr
+}
+
+func decodeDot11MgmtReassociationReq(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtReassociationReq{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtReassociationReq) LayerType() gopacket.LayerType {
+       return LayerTypeDot11MgmtReassociationReq
+}
+func (m *Dot11MgmtReassociationReq) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11MgmtReassociationReq
+}
+func (m *Dot11MgmtReassociationReq) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11InformationElement
+}
+func (m *Dot11MgmtReassociationReq) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 10 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11MgmtReassociationReq length %v too short, %v required", len(data), 10)
+       }
+       m.CapabilityInfo = binary.LittleEndian.Uint16(data[0:2])
+       m.ListenInterval = binary.LittleEndian.Uint16(data[2:4])
+       m.CurrentApAddress = net.HardwareAddr(data[4:10])
+       m.Payload = data[10:]
+       return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtReassociationReq) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf, err := b.PrependBytes(10)
+
+       if err != nil {
+               return err
+       }
+
+       binary.LittleEndian.PutUint16(buf[0:2], m.CapabilityInfo)
+       binary.LittleEndian.PutUint16(buf[2:4], m.ListenInterval)
+
+       copy(buf[4:10], m.CurrentApAddress)
+
+       return nil
+}
+
+type Dot11MgmtReassociationResp struct {
+       Dot11Mgmt
+}
+
+func decodeDot11MgmtReassociationResp(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtReassociationResp{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtReassociationResp) LayerType() gopacket.LayerType {
+       return LayerTypeDot11MgmtReassociationResp
+}
+func (m *Dot11MgmtReassociationResp) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11MgmtReassociationResp
+}
+func (m *Dot11MgmtReassociationResp) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11InformationElement
+}
+
+type Dot11MgmtProbeReq struct {
+       Dot11Mgmt
+}
+
+func decodeDot11MgmtProbeReq(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtProbeReq{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtProbeReq) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtProbeReq }
+func (m *Dot11MgmtProbeReq) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtProbeReq }
+func (m *Dot11MgmtProbeReq) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11InformationElement
+}
+
+type Dot11MgmtProbeResp struct {
+       Dot11Mgmt
+       Timestamp uint64
+       Interval  uint16
+       Flags     uint16
+}
+
+func decodeDot11MgmtProbeResp(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtProbeResp{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtProbeResp) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtProbeResp }
+func (m *Dot11MgmtProbeResp) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtProbeResp }
+func (m *Dot11MgmtProbeResp) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 12 {
+               df.SetTruncated()
+
+               return fmt.Errorf("Dot11MgmtProbeResp length %v too short, %v required", len(data), 12)
+       }
+
+       m.Timestamp = binary.LittleEndian.Uint64(data[0:8])
+       m.Interval = binary.LittleEndian.Uint16(data[8:10])
+       m.Flags = binary.LittleEndian.Uint16(data[10:12])
+       m.Payload = data[12:]
+
+       return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m *Dot11MgmtProbeResp) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11InformationElement
+}
+
+func (m Dot11MgmtProbeResp) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf, err := b.PrependBytes(12)
+
+       if err != nil {
+               return err
+       }
+
+       binary.LittleEndian.PutUint64(buf[0:8], m.Timestamp)
+       binary.LittleEndian.PutUint16(buf[8:10], m.Interval)
+       binary.LittleEndian.PutUint16(buf[10:12], m.Flags)
+
+       return nil
+}
+
+type Dot11MgmtMeasurementPilot struct {
+       Dot11Mgmt
+}
+
+func decodeDot11MgmtMeasurementPilot(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtMeasurementPilot{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtMeasurementPilot) LayerType() gopacket.LayerType {
+       return LayerTypeDot11MgmtMeasurementPilot
+}
+func (m *Dot11MgmtMeasurementPilot) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11MgmtMeasurementPilot
+}
+
+type Dot11MgmtBeacon struct {
+       Dot11Mgmt
+       Timestamp uint64
+       Interval  uint16
+       Flags     uint16
+}
+
+func decodeDot11MgmtBeacon(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtBeacon{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtBeacon) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtBeacon }
+func (m *Dot11MgmtBeacon) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtBeacon }
+func (m *Dot11MgmtBeacon) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 12 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11MgmtBeacon length %v too short, %v required", len(data), 12)
+       }
+       m.Timestamp = binary.LittleEndian.Uint64(data[0:8])
+       m.Interval = binary.LittleEndian.Uint16(data[8:10])
+       m.Flags = binary.LittleEndian.Uint16(data[10:12])
+       m.Payload = data[12:]
+       return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m *Dot11MgmtBeacon) NextLayerType() gopacket.LayerType { return LayerTypeDot11InformationElement }
+
+func (m Dot11MgmtBeacon) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf, err := b.PrependBytes(12)
+
+       if err != nil {
+               return err
+       }
+
+       binary.LittleEndian.PutUint64(buf[0:8], m.Timestamp)
+       binary.LittleEndian.PutUint16(buf[8:10], m.Interval)
+       binary.LittleEndian.PutUint16(buf[10:12], m.Flags)
+
+       return nil
+}
+
+type Dot11MgmtATIM struct {
+       Dot11Mgmt
+}
+
+func decodeDot11MgmtATIM(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtATIM{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtATIM) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtATIM }
+func (m *Dot11MgmtATIM) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtATIM }
+
+type Dot11MgmtDisassociation struct {
+       Dot11Mgmt
+       Reason Dot11Reason
+}
+
+func decodeDot11MgmtDisassociation(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtDisassociation{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtDisassociation) LayerType() gopacket.LayerType {
+       return LayerTypeDot11MgmtDisassociation
+}
+func (m *Dot11MgmtDisassociation) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11MgmtDisassociation
+}
+func (m *Dot11MgmtDisassociation) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 2 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11MgmtDisassociation length %v too short, %v required", len(data), 2)
+       }
+       m.Reason = Dot11Reason(binary.LittleEndian.Uint16(data[0:2]))
+       return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtDisassociation) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf, err := b.PrependBytes(2)
+
+       if err != nil {
+               return err
+       }
+
+       binary.LittleEndian.PutUint16(buf[0:2], uint16(m.Reason))
+
+       return nil
+}
+
+type Dot11MgmtAuthentication struct {
+       Dot11Mgmt
+       Algorithm Dot11Algorithm
+       Sequence  uint16
+       Status    Dot11Status
+}
+
+func decodeDot11MgmtAuthentication(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtAuthentication{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtAuthentication) LayerType() gopacket.LayerType {
+       return LayerTypeDot11MgmtAuthentication
+}
+func (m *Dot11MgmtAuthentication) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11MgmtAuthentication
+}
+func (m *Dot11MgmtAuthentication) NextLayerType() gopacket.LayerType {
+       return LayerTypeDot11InformationElement
+}
+func (m *Dot11MgmtAuthentication) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 6 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11MgmtAuthentication length %v too short, %v required", len(data), 6)
+       }
+       m.Algorithm = Dot11Algorithm(binary.LittleEndian.Uint16(data[0:2]))
+       m.Sequence = binary.LittleEndian.Uint16(data[2:4])
+       m.Status = Dot11Status(binary.LittleEndian.Uint16(data[4:6]))
+       m.Payload = data[6:]
+       return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtAuthentication) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf, err := b.PrependBytes(6)
+
+       if err != nil {
+               return err
+       }
+
+       binary.LittleEndian.PutUint16(buf[0:2], uint16(m.Algorithm))
+       binary.LittleEndian.PutUint16(buf[2:4], m.Sequence)
+       binary.LittleEndian.PutUint16(buf[4:6], uint16(m.Status))
+
+       return nil
+}
+
+type Dot11MgmtDeauthentication struct {
+       Dot11Mgmt
+       Reason Dot11Reason
+}
+
+func decodeDot11MgmtDeauthentication(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtDeauthentication{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtDeauthentication) LayerType() gopacket.LayerType {
+       return LayerTypeDot11MgmtDeauthentication
+}
+func (m *Dot11MgmtDeauthentication) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot11MgmtDeauthentication
+}
+func (m *Dot11MgmtDeauthentication) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 2 {
+               df.SetTruncated()
+               return fmt.Errorf("Dot11MgmtDeauthentication length %v too short, %v required", len(data), 2)
+       }
+       m.Reason = Dot11Reason(binary.LittleEndian.Uint16(data[0:2]))
+       return m.Dot11Mgmt.DecodeFromBytes(data, df)
+}
+
+func (m Dot11MgmtDeauthentication) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf, err := b.PrependBytes(2)
+
+       if err != nil {
+               return err
+       }
+
+       binary.LittleEndian.PutUint16(buf[0:2], uint16(m.Reason))
+
+       return nil
+}
+
+type Dot11MgmtAction struct {
+       Dot11Mgmt
+}
+
+func decodeDot11MgmtAction(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtAction{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtAction) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtAction }
+func (m *Dot11MgmtAction) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtAction }
+
+type Dot11MgmtActionNoAck struct {
+       Dot11Mgmt
+}
+
+func decodeDot11MgmtActionNoAck(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtActionNoAck{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtActionNoAck) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtActionNoAck }
+func (m *Dot11MgmtActionNoAck) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtActionNoAck }
+
+type Dot11MgmtArubaWLAN struct {
+       Dot11Mgmt
+}
+
+func decodeDot11MgmtArubaWLAN(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot11MgmtArubaWLAN{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *Dot11MgmtArubaWLAN) LayerType() gopacket.LayerType  { return LayerTypeDot11MgmtArubaWLAN }
+func (m *Dot11MgmtArubaWLAN) CanDecode() gopacket.LayerClass { return LayerTypeDot11MgmtArubaWLAN }
diff --git a/vendor/github.com/google/gopacket/layers/dot11_test.go b/vendor/github.com/google/gopacket/layers/dot11_test.go
new file mode 100644 (file)
index 0000000..b0299fc
--- /dev/null
@@ -0,0 +1,495 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "bytes"
+       "net"
+       "reflect"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+// Generator: python layers/test_creator.py --layerType=LayerTypeRadioTap --linkType=LinkTypeIEEE80211Radio --name=Dot11%s ~/Downloads/mesh.pcap
+// http://wiki.wireshark.org/SampleCaptures#Sample_Captures
+
+// testPacketDot11CtrlCTS is the packet:
+//   09:28:41.830560 20604983us tsft short preamble 24.0 Mb/s 5240 MHz 11a -79dB signal -92dB noise antenna 1 Clear-To-Send RA:d8:a2:5e:97:61:c1
+//     0x0000:  0000 1900 6f08 0000 3768 3a01 0000 0000  ....o...7h:.....
+//     0x0010:  1230 7814 4001 b1a4 01c4 0094 00d8 a25e  .0x.@..........^
+//     0x0020:  9761 c136 5095 8e                        .a.6P..
+
+var testPacketDot11CtrlCTS = []byte{
+       0x00, 0x00, 0x19, 0x00, 0x6f, 0x08, 0x00, 0x00, 0x37, 0x68, 0x3a, 0x01, 0x00, 0x00, 0x00, 0x00,
+       0x12, 0x30, 0x78, 0x14, 0x40, 0x01, 0xb1, 0xa4, 0x01, 0xc4, 0x00, 0x94, 0x00, 0xd8, 0xa2, 0x5e,
+       0x97, 0x61, 0xc1, 0x36, 0x50, 0x95, 0x8e,
+}
+
+func TestPacketDot11CtrlCTS(t *testing.T) {
+       p := gopacket.NewPacket(testPacketDot11CtrlCTS, LinkTypeIEEE80211Radio, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
+
+       if got, ok := p.Layer(LayerTypeRadioTap).(*RadioTap); ok {
+               want := &RadioTap{
+                       BaseLayer: BaseLayer{
+                               Contents: []uint8{0x0, 0x0, 0x19, 0x0, 0x6f, 0x8, 0x0, 0x0, 0x37, 0x68, 0x3a, 0x1, 0x0, 0x0, 0x0, 0x0, 0x12, 0x30, 0x78, 0x14, 0x40, 0x1, 0xb1, 0xa4, 0x1},
+                               Payload:  []uint8{0xc4, 0x0, 0x94, 0x0, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1, 0x36, 0x50, 0x95, 0x8e},
+                       },
+                       Version:          0x0,
+                       Length:           0x19,
+                       Present:          0x86f,
+                       TSFT:             0x13a6837,
+                       Flags:            0x12,
+                       Rate:             0x30,
+                       ChannelFrequency: 0x1478,
+                       ChannelFlags:     0x140,
+                       FHSS:             0x0,
+                       DBMAntennaSignal: -79,
+                       DBMAntennaNoise:  -92,
+                       LockQuality:      0x0,
+                       TxAttenuation:    0x0,
+                       DBTxAttenuation:  0x0,
+                       DBMTxPower:       0,
+                       Antenna:          1,
+                       DBAntennaSignal:  0x0,
+                       DBAntennaNoise:   0x0,
+               }
+
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("RadioTap packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       }
+
+       if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
+               if !got.ChecksumValid() {
+                       t.Errorf("Dot11 packet processing failed:\nchecksum failed. got  :\n%#v\n\n", got)
+               }
+
+               want := &Dot11{
+                       BaseLayer: BaseLayer{
+                               Contents: []uint8{0xc4, 0x0, 0x94, 0x0, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1},
+                               Payload:  []uint8{},
+                       },
+                       Type:       Dot11TypeCtrlCTS,
+                       Proto:      0x0,
+                       Flags:      0x0,
+                       DurationID: 0x94,
+                       Address1:   net.HardwareAddr{0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1}, // check
+                       Address2:   net.HardwareAddr(nil),
+                       Address3:   net.HardwareAddr(nil),
+                       Address4:   net.HardwareAddr(nil),
+                       Checksum:   0x8e955036,
+               }
+
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("Dot11 packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       }
+}
+
+func BenchmarkDecodePacketDot11CtrlCTS(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketDot11CtrlCTS, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+       }
+}
+
+// testPacketDot11MgmtBeacon is the packet:
+//   15:44:56.531833 6.0 Mb/s 2412 MHz 11g -81dB signal antenna 5 Beacon (Wi2) [6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0 Mbit] ESS CH: 1
+//     0x0000:  0000 1200 2e48 0000 100c 6c09 c000 af05  .....H....l.....
+//     0x0010:  0000 8000 0000 ffff ffff ffff c08a de01  ................
+//     0x0020:  11b8 c08a de01 11b8 f097 80f1 30bc 1300  ............0...
+//     0x0030:  0000 6400 2104 0003 5769 3201 088c 1298  ..d.!...Wi2.....
+//     0x0040:  24b0 4860 6c03 0101 0504 0001 0000 2a01  $.H`l.........*.
+//     0x0050:  00dd 1800 50f2 0201 0181 0007 a400 0023  ....P..........#
+//     0x0060:  a400 0042 435e 0062 322f 00dd 1e00 904c  ...BC^.b2/.....L
+//     0x0070:  338c 011b ffff 0000 0000 0000 0000 0000  3...............
+//     0x0080:  1000 0000 0000 0000 0000 002d 1a8c 011b  ...........-....
+//     0x0090:  ffff 0000 0000 0000 0000 0000 1000 0000  ................
+//     0x00a0:  0000 0000 0000 00dd 1a00 904c 3401 0000  ...........L4...
+//     0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x00c0:  0000 003d 1601 0000 0000 0000 0000 0000  ...=............
+//     0x00d0:  0000 0000 0000 0000 0000 007f 0400 0000  ................
+//     0x00e0:  00dd 0800 1392 0100 0185 0094 0b90 15    ...............
+var testPacketDot11MgmtBeacon = []byte{
+       0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x0c, 0x6c, 0x09, 0xc0, 0x00, 0xaf, 0x05,
+       0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x8a, 0xde, 0x01,
+       0x11, 0xb8, 0xc0, 0x8a, 0xde, 0x01, 0x11, 0xb8, 0xf0, 0x97, 0x80, 0xf1, 0x30, 0xbc, 0x13, 0x00,
+       0x00, 0x00, 0x64, 0x00, 0x21, 0x04, 0x00, 0x03, 0x57, 0x69, 0x32, 0x01, 0x08, 0x8c, 0x12, 0x98,
+       0x24, 0xb0, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x01, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x2a, 0x01,
+       0x00, 0xdd, 0x18, 0x00, 0x50, 0xf2, 0x02, 0x01, 0x01, 0x81, 0x00, 0x07, 0xa4, 0x00, 0x00, 0x23,
+       0xa4, 0x00, 0x00, 0x42, 0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00, 0xdd, 0x1e, 0x00, 0x90, 0x4c,
+       0x33, 0x8c, 0x01, 0x1b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x1a, 0x8c, 0x01, 0x1b,
+       0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x1a, 0x00, 0x90, 0x4c, 0x34, 0x01, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x3d, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x04, 0x00, 0x00, 0x00,
+       0x00, 0xdd, 0x08, 0x00, 0x13, 0x92, 0x01, 0x00, 0x01, 0x85, 0x00, 0x94, 0x0b, 0x90, 0x15,
+}
+
+func TestPacketDot11MgmtBeacon(t *testing.T) {
+       p := gopacket.NewPacket(testPacketDot11MgmtBeacon, LinkTypeIEEE80211Radio, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       expectedLayers := []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11MgmtBeacon}
+       for i := 0; i < 12; i++ {
+               expectedLayers = append(expectedLayers, LayerTypeDot11InformationElement)
+       }
+       checkLayers(p, expectedLayers, t)
+
+       if p.Layer(LayerTypeDot11).(*Dot11).SequenceNumber != 2431 {
+               t.Error("dot11 invalid sequence number")
+       }
+       if p.Layer(LayerTypeDot11).(*Dot11).FragmentNumber != 0 {
+               t.Error("dot11 invalid fragment number")
+       }
+       if _, ok := p.Layer(LayerTypeDot11MgmtBeacon).(*Dot11MgmtBeacon); !ok {
+               t.Errorf("dot11 management beacon frame was expected")
+       }
+}
+
+func BenchmarkDecodePacketDot11MgmtBeacon(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketDot11MgmtBeacon, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+       }
+}
+
+// testPacketDot11DataQOSData is the packet:
+//   06:14:27.838634 638790765us tsft short preamble 54.0 Mb/s -51dB signal -96dB noise antenna 2 5180 MHz 11a CF +QoS ARP, Request who-has 140.180.51.68 tell 169.254.247.0, length 28
+//     0x0000:  0000 2000 6708 0400 6d2c 1326 0000 0000  ....g...m,.&....
+//     0x0010:  226c cda0 0200 0000 4001 0000 3c14 2411  "l......@...<.$.
+//     0x0020:  8801 2c00 0603 7f07 a016 0019 e3d3 5352  ..,...........SR
+//     0x0030:  ffff ffff ffff 5064 0000 50aa aaaa 0300  ......Pd..P.....
+//     0x0040:  0000 0806 0001 0800 0604 0001 0019 e3d3  ................
+//     0x0050:  5352 a9fe f700 0000 0000 0000 8cb4 3344  SR............3D
+var testPacketDot11DataQOSData = []byte{
+       0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x6d, 0x2c, 0x13, 0x26, 0x00, 0x00, 0x00, 0x00,
+       0x22, 0x6c, 0xcd, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,
+       0x88, 0x01, 0x2c, 0x00, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x64, 0x00, 0x00, 0x50, 0xaa, 0xaa, 0xaa, 0x03, 0x00,
+       0x00, 0x00, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x19, 0xe3, 0xd3,
+       0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xb4, 0x33, 0x44,
+}
+
+func TestPacketDot11DataQOSData(t *testing.T) {
+       p := gopacket.NewPacket(testPacketDot11DataQOSData, LinkTypeIEEE80211Radio, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11DataQOSData, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeARP}, t)
+
+       if got, ok := p.Layer(LayerTypeARP).(*ARP); ok {
+               want := &ARP{BaseLayer: BaseLayer{
+                       Contents: []uint8{0x0, 0x1, 0x8, 0x0, 0x6, 0x4, 0x0, 0x1, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xb4, 0x33, 0x44},
+                       Payload:  []uint8{},
+               },
+                       AddrType:          0x1,
+                       Protocol:          0x800,
+                       HwAddressSize:     0x6,
+                       ProtAddressSize:   0x4,
+                       Operation:         0x1,
+                       SourceHwAddress:   []uint8{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
+                       SourceProtAddress: []uint8{0xa9, 0xfe, 0xf7, 0x0},
+                       DstHwAddress:      []uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
+                       DstProtAddress:    []uint8{0x8c, 0xb4, 0x33, 0x44},
+               }
+
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("ARP packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       }
+}
+func BenchmarkDecodePacketDot11DataQOSData(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketDot11DataQOSData, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+       }
+}
+
+// testPacketDot11MgmtAction is the packet:
+//   15:54:43.236460 1.0 Mb/s 2412 MHz 11b -67dB signal antenna 5 Action (8e:3a:e3:44:ac:c6): Spectrum Management Act#4
+//     0x0000:  0000 1200 2e48 0000 1002 6c09 a000 bd05  .....H....l.....
+//     0x0010:  0000 d000 0000 ffff ffff ffff 8e3a e344  .............:.D
+//     0x0020:  acc6 8e3a e344 acc6 001b 0004 2503 0001  ...:.D......%...
+//     0x0030:  0055 39f0 33                             .U9.3
+var testPacketDot11MgmtAction = []byte{
+       0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xbd, 0x05,
+       0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x3a, 0xe3, 0x44,
+       0xac, 0xc6, 0x8e, 0x3a, 0xe3, 0x44, 0xac, 0xc6, 0x00, 0x1b, 0x00, 0x04, 0x25, 0x03, 0x00, 0x01,
+       0x00, 0x55, 0x39, 0xf0, 0x33,
+}
+
+func TestPacketDot11MgmtAction(t *testing.T) {
+       p := gopacket.NewPacket(testPacketDot11MgmtAction, LinkTypeIEEE80211Radio, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11MgmtAction}, t)
+       if got, ok := p.Layer(LayerTypeDot11).(*Dot11); !ok {
+               t.Errorf("dot11 frame was not parsed")
+       } else if !got.ChecksumValid() {
+               t.Errorf("Dot11 packet processing failed: checksum failed")
+       }
+       if got, ok := p.Layer(LayerTypeDot11MgmtAction).(*Dot11MgmtAction); !ok {
+               t.Errorf("management action frame was not parsed")
+       } else if got.Contents[0] != 0 {
+               t.Errorf("action category was not spectrum management")
+       }
+}
+
+func BenchmarkDecodePacketDot11MgmtAction(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketDot11MgmtAction, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+       }
+}
+
+// testPacketDot11CtrlAck is the packet:
+//   06:14:27.838669 638758038us tsft short preamble 24.0 Mb/s -39dB signal -96dB noise antenna 2 5180 MHz 11a Acknowledgment RA:00:19:e3:d3:53:52
+//     0x0000:  0000 2000 6708 0400 96ac 1226 0000 0000  ....g......&....
+//     0x0010:  2230 d9a0 0200 0000 4001 0000 3c14 2411  "0......@...<.$.
+//     0x0020:  d400 0000 0019 e3d3 5352 46e9 7687       ........SRF.v.
+var testPacketDot11CtrlAck = []byte{
+       0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x96, 0xac, 0x12, 0x26, 0x00, 0x00, 0x00, 0x00,
+       0x32, 0x30, 0xd9, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,
+       0xd4, 0x00, 0x00, 0x00, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x46, 0xe9, 0x76, 0x87,
+}
+
+func TestPacketDot11CtrlAck(t *testing.T) {
+       p := gopacket.NewPacket(testPacketDot11CtrlAck, LinkTypeIEEE80211Radio, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
+
+       if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
+               if !got.ChecksumValid() {
+                       t.Errorf("Dot11 packet processing failed:\nchecksum failed. got  :\n%#v\n\n", got)
+               }
+       }
+
+       if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
+               if !got.ChecksumValid() {
+                       t.Errorf("Dot11 packet processing failed:\nchecksum failed. got  :\n%#v\n\n", got)
+               }
+               want := &Dot11{
+                       BaseLayer: BaseLayer{
+                               Contents: []uint8{0xd4, 0x0, 0x0, 0x0, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
+                               Payload:  []uint8{},
+                       },
+                       Type:       Dot11TypeCtrlAck,
+                       Proto:      0x0,
+                       Flags:      0x0,
+                       DurationID: 0x0,
+                       Address1:   net.HardwareAddr{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
+                       Address2:   net.HardwareAddr(nil),
+                       Address3:   net.HardwareAddr(nil),
+                       Address4:   net.HardwareAddr(nil),
+                       Checksum:   0x8776e946,
+               }
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("Dot11 packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       }
+}
+func BenchmarkDecodePacketDot11CtrlAck(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketDot11CtrlAck, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+       }
+}
+
+// testPacketDot11DataARP is the packet:
+//   06:14:11.512316 622463798us tsft short preamble 6.0 Mb/s -39dB signal -96dB noise antenna 2 5180 MHz 11a ARP, Request who-has 67.8.14.54 tell 169.254.247.0, length 28
+//     0x0000:  0000 2000 6708 0400 360b 1a25 0000 0000  ....g...6..%....
+//     0x0010:  220c d9a0 0200 0000 4001 0000 3c14 2411  ".......@...<.$.
+//     0x0020:  0802 0000 ffff ffff ffff 0603 7f07 a016  ................
+//     0x0030:  0019 e3d3 5352 e07f aaaa 0300 0000 0806  ....SR..........
+//     0x0040:  0001 0800 0604 0001 0019 e3d3 5352 a9fe  ............SR..
+//     0x0050:  f700 0000 0000 0000 4308 0e36            ........C..6
+var testPacketDot11DataARP = []byte{
+       0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x36, 0x0b, 0x1a, 0x25, 0x00, 0x00, 0x00, 0x00,
+       0x22, 0x0c, 0xd9, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,
+       0x08, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16,
+       0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xe0, 0x7f, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06,
+       0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe,
+       0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x08, 0x0e, 0x36,
+}
+
+func TestPacketDot11DataARP(t *testing.T) {
+       p := gopacket.NewPacket(testPacketDot11DataARP, LinkTypeIEEE80211Radio, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeARP}, t)
+
+       if got, ok := p.Layer(LayerTypeARP).(*ARP); ok {
+               want := &ARP{
+                       BaseLayer: BaseLayer{
+                               Contents: []uint8{0x0, 0x1, 0x8, 0x0, 0x6, 0x4, 0x0, 0x1, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x8, 0xe, 0x36},
+                               Payload:  []uint8{},
+                       },
+                       AddrType:          0x1,
+                       Protocol:          0x800,
+                       HwAddressSize:     0x6,
+                       ProtAddressSize:   0x4,
+                       Operation:         0x1,
+                       SourceHwAddress:   []uint8{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52},
+                       SourceProtAddress: []uint8{0xa9, 0xfe, 0xf7, 0x0},
+                       DstHwAddress:      []uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
+                       DstProtAddress:    []uint8{0x43, 0x8, 0xe, 0x36},
+               }
+
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("ARP packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       }
+}
+
+func BenchmarkDecodePacketDot11DataARP(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketDot11DataARP, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+       }
+}
+
+// testPacketDot11DataIP is the packet:
+//   06:14:21.388622 632340487us tsft short preamble 6.0 Mb/s -40dB signal -96dB noise antenna 1 5180 MHz 11a IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:19:e3:d3:53:52, length 300
+//     0x0000:  0000 2000 6708 0400 07c0 b025 0000 0000  ....g......%....
+//     0x0010:  220c d8a0 0100 0000 4001 0000 3c14 2411  ".......@...<.$.
+//     0x0020:  0802 0000 ffff ffff ffff 0603 7f07 a016  ................
+//     0x0030:  0019 e3d3 5352 4095 aaaa 0300 0000 0800  ....SR@.........
+//     0x0040:  4500 0148 c514 0000 ff11 f590 0000 0000  E..H............
+//     0x0050:  ffff ffff 0044 0043 0134 2b39 0101 0600  .....D.C.4+9....
+//     0x0060:  131f 8c43 003c 0000 0000 0000 0000 0000  ...C.<..........
+//     0x0070:  0000 0000 0000 0000 0019 e3d3 5352 0000  ............SR..
+//     0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x0100:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x0110:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x0120:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x0130:  0000 0000 0000 0000 0000 0000 0000 0000  ................
+//     0x0140:  0000 0000 0000 0000 6382 5363 3501 0137  ........c.Sc5..7
+//     0x0150:  0a01 0306 0f77 5ffc 2c2e 2f39 0205 dc3d  .....w_.,./9...=
+//     0x0160:  0701 0019 e3d3 5352 3304 0076 a700 0c0b  ......SR3..v....
+//     0x0170:  4d61 6369 6e74 6f73 682d 34ff 0000 0000  Macintosh-4.....
+//     0x0180:  0000 0000 0000 0000                      ........
+var testPacketDot11DataIP = []byte{
+       0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x07, 0xc0, 0xb0, 0x25, 0x00, 0x00, 0x00, 0x00,
+       0x22, 0x0c, 0xd8, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11,
+       0x08, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16,
+       0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x40, 0x95, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00,
+       0x45, 0x00, 0x01, 0x48, 0xc5, 0x14, 0x00, 0x00, 0xff, 0x11, 0xf5, 0x90, 0x00, 0x00, 0x00, 0x00,
+       0xff, 0xff, 0xff, 0xff, 0x00, 0x44, 0x00, 0x43, 0x01, 0x34, 0x2b, 0x39, 0x01, 0x01, 0x06, 0x00,
+       0x13, 0x1f, 0x8c, 0x43, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x82, 0x53, 0x63, 0x35, 0x01, 0x01, 0x37,
+       0x0a, 0x01, 0x03, 0x06, 0x0f, 0x77, 0x5f, 0xfc, 0x2c, 0x2e, 0x2f, 0x39, 0x02, 0x05, 0xdc, 0x3d,
+       0x07, 0x01, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x33, 0x04, 0x00, 0x76, 0xa7, 0x00, 0x0c, 0x0b,
+       0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x2d, 0x34, 0xff, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketDot11DataIP(t *testing.T) {
+       p := gopacket.NewPacket(testPacketDot11DataIP, LinkTypeIEEE80211Radio, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeIPv4, LayerTypeUDP, LayerTypeDHCPv4}, t)
+}
+func BenchmarkDecodePacketDot11DataIP(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketDot11DataIP, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+       }
+}
+
+// Encrypted
+
+/// testPacketP6196 is the packet:
+//   09:28:41.830631 20605036us tsft wep -69dB signal -92dB noise antenna 1 5240 MHz 11a ht/40- 162.0 Mb/s MCS 12 40 MHz lon GI mixed BCC FEC [bit 20] CF +QoS Data IV:50a9 Pad 20 KeyID 0
+//     0x0000:  0000 3000 6b08 1c00 6c68 3a01 0000 0000  ..0.k...lh:.....
+//     0x0010:  1400 7814 4001 bba4 0160 0e1a 4001 0400  ..x.@....`..@...
+//     0x0020:  7814 3022 1f01 0cff b10d 0000 0400 0000  x.0"............
+//     0x0030:  8841 2c00 0025 9c42 c262 d8a2 5e97 61c1  .A,..%.B.b..^.a.
+//     0x0040:  0025 9c42 c25f 10db 0000 a950 0020 0000  .%.B._.....P....
+//     0x0050:  0000 f8ab a97e 3fbd d6e1 785b 0040 5f15  .....~?...x[.@_.
+//     0x0060:  7123 8711 bd1f ffb9 e5b3 84bb ec2a 0a90  q#...........*..
+//     0x0070:  d0a0 1a6f 9033 1083 5179 a0da f833 3a00  ...o.3..Qy...3:.
+//     0x0080:  5471 f596 539b 1823 a33c 4908 545c 266a  Tq..S..#.<I.T\&j
+//     0x0090:  8540 515a 1da9 c49e a85a fbf7 de09 7f9c  .@QZ.....Z......
+//     0x00a0:  6f35 0b8b 6831 2c10 43dc 8983 b1d9 dd29  o5..h1,.C......)
+//     0x00b0:  7395 65b9 4b43 b391 16ec 4201 86c9 ca    s.e.KC....B....
+var testPacketP6196 = []byte{
+       0x00, 0x00, 0x30, 0x00, 0x6b, 0x08, 0x1c, 0x00, 0x6c, 0x68, 0x3a, 0x01, 0x00, 0x00, 0x00, 0x00,
+       0x14, 0x00, 0x78, 0x14, 0x40, 0x01, 0xbb, 0xa4, 0x01, 0x60, 0x0e, 0x1a, 0x40, 0x01, 0x04, 0x00,
+       0x78, 0x14, 0x30, 0x22, 0x1f, 0x01, 0x0c, 0xff, 0xb1, 0x0d, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+       0x88, 0x41, 0x2c, 0x00, 0x00, 0x25, 0x9c, 0x42, 0xc2, 0x62, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1,
+       0x00, 0x25, 0x9c, 0x42, 0xc2, 0x5f, 0x10, 0xdb, 0x00, 0x00, 0xa9, 0x50, 0x00, 0x20, 0x00, 0x00,
+       0x00, 0x00, 0xf8, 0xab, 0xa9, 0x7e, 0x3f, 0xbd, 0xd6, 0xe1, 0x78, 0x5b, 0x00, 0x40, 0x5f, 0x15,
+       0x71, 0x23, 0x87, 0x11, 0xbd, 0x1f, 0xff, 0xb9, 0xe5, 0xb3, 0x84, 0xbb, 0xec, 0x2a, 0x0a, 0x90,
+       0xd0, 0xa0, 0x1a, 0x6f, 0x90, 0x33, 0x10, 0x83, 0x51, 0x79, 0xa0, 0xda, 0xf8, 0x33, 0x3a, 0x00,
+       0x54, 0x71, 0xf5, 0x96, 0x53, 0x9b, 0x18, 0x23, 0xa3, 0x3c, 0x49, 0x08, 0x54, 0x5c, 0x26, 0x6a,
+       0x85, 0x40, 0x51, 0x5a, 0x1d, 0xa9, 0xc4, 0x9e, 0xa8, 0x5a, 0xfb, 0xf7, 0xde, 0x09, 0x7f, 0x9c,
+       0x6f, 0x35, 0x0b, 0x8b, 0x68, 0x31, 0x2c, 0x10, 0x43, 0xdc, 0x89, 0x83, 0xb1, 0xd9, 0xdd, 0x29,
+       0x73, 0x95, 0x65, 0xb9, 0x4b, 0x43, 0xb3, 0x91, 0x16, 0xec, 0x42, 0x01, 0x86, 0xc9, 0xca,
+}
+
+func TestPacketP6196(t *testing.T) {
+       p := gopacket.NewPacket(testPacketP6196, LinkTypeIEEE80211Radio, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+
+       checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11WEP}, t)
+}
+
+func BenchmarkDecodePacketP6196(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketP6196, LinkTypeIEEE80211Radio, gopacket.NoCopy)
+       }
+}
+
+func TestInformationElement(t *testing.T) {
+       bin := []byte{
+               0, 0,
+               0, 2, 1, 3,
+               221, 5, 1, 2, 3, 4, 5,
+       }
+       pkt := gopacket.NewPacket(bin, LayerTypeDot11InformationElement, gopacket.NoCopy)
+
+       buf := gopacket.NewSerializeBuffer()
+       var sLayers []gopacket.SerializableLayer
+       for _, l := range pkt.Layers() {
+               sLayers = append(sLayers, l.(*Dot11InformationElement))
+       }
+       if err := gopacket.SerializeLayers(buf, gopacket.SerializeOptions{}, sLayers...); err != nil {
+               t.Error(err.Error())
+       }
+       if !bytes.Equal(bin, buf.Bytes()) {
+               t.Error("build failed")
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/dot1q.go b/vendor/github.com/google/gopacket/layers/dot1q.go
new file mode 100644 (file)
index 0000000..47f93d7
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "fmt"
+       "github.com/google/gopacket"
+)
+
+// Dot1Q is the packet layer for 802.1Q VLAN headers.
+type Dot1Q struct {
+       BaseLayer
+       Priority       uint8
+       DropEligible   bool
+       VLANIdentifier uint16
+       Type           EthernetType
+}
+
+// LayerType returns gopacket.LayerTypeDot1Q
+func (d *Dot1Q) LayerType() gopacket.LayerType { return LayerTypeDot1Q }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (d *Dot1Q) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       d.Priority = (data[0] & 0xE0) >> 5
+       d.DropEligible = data[0]&0x10 != 0
+       d.VLANIdentifier = binary.BigEndian.Uint16(data[:2]) & 0x0FFF
+       d.Type = EthernetType(binary.BigEndian.Uint16(data[2:4]))
+       d.BaseLayer = BaseLayer{Contents: data[:4], Payload: data[4:]}
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (d *Dot1Q) CanDecode() gopacket.LayerClass {
+       return LayerTypeDot1Q
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (d *Dot1Q) NextLayerType() gopacket.LayerType {
+       return d.Type.LayerType()
+}
+
+func decodeDot1Q(data []byte, p gopacket.PacketBuilder) error {
+       d := &Dot1Q{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (d *Dot1Q) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(4)
+       if err != nil {
+               return err
+       }
+       if d.VLANIdentifier > 0xFFF {
+               return fmt.Errorf("vlan identifier %v is too high", d.VLANIdentifier)
+       }
+       firstBytes := uint16(d.Priority)<<13 | d.VLANIdentifier
+       if d.DropEligible {
+               firstBytes |= 0x1000
+       }
+       binary.BigEndian.PutUint16(bytes, firstBytes)
+       binary.BigEndian.PutUint16(bytes[2:], uint16(d.Type))
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/dot1q_test.go b/vendor/github.com/google/gopacket/layers/dot1q_test.go
new file mode 100644 (file)
index 0000000..4a409c7
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+       "fmt"
+       "reflect"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+// test harness to ensure the dot1q layer can be encoded/decoded properly
+// return error if decoded data not match.
+func testEncodeDecodeDot1Q(dot1Q *Dot1Q) error {
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{}
+       expectedDot1Q := dot1Q
+
+       err := dot1Q.SerializeTo(buf, opts)
+       if err != nil {
+               return err
+       }
+
+       newDot1q := &Dot1Q{}
+       err = newDot1q.DecodeFromBytes(buf.Bytes(), gopacket.NilDecodeFeedback)
+       if err != nil {
+               return err
+       }
+       newDot1q.BaseLayer = BaseLayer{}
+
+       if !reflect.DeepEqual(expectedDot1Q, newDot1q) {
+               return fmt.Errorf("Expect %v actual %v", expectedDot1Q, newDot1q)
+       }
+       return nil
+
+}
+
+// Test to ensure what has been encode can be decoded
+func TestEncodeDecodeDot1Q(t *testing.T) {
+       dot1Qs := []*Dot1Q{
+               &Dot1Q{
+                       Priority:       uint8(3),
+                       VLANIdentifier: uint16(30),
+               },
+               &Dot1Q{
+                       Priority:       uint8(0x07),
+                       DropEligible:   true,
+                       VLANIdentifier: uint16(0xFFF),
+               },
+       }
+
+       for i, curTest := range dot1Qs {
+               err := testEncodeDecodeDot1Q(curTest)
+               if err != nil {
+                       t.Error("Error with item ", i, " with error message :", err)
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/eap.go b/vendor/github.com/google/gopacket/layers/eap.go
new file mode 100644 (file)
index 0000000..250f857
--- /dev/null
@@ -0,0 +1,106 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "fmt"
+       "github.com/google/gopacket"
+)
+
+type EAPCode uint8
+type EAPType uint8
+
+const (
+       EAPCodeRequest  EAPCode = 1
+       EAPCodeResponse EAPCode = 2
+       EAPCodeSuccess  EAPCode = 3
+       EAPCodeFailure  EAPCode = 4
+
+       // EAPTypeNone means that this EAP layer has no Type or TypeData.
+       // Success and Failure EAPs will have this set.
+       EAPTypeNone EAPType = 0
+
+       EAPTypeIdentity     EAPType = 1
+       EAPTypeNotification EAPType = 2
+       EAPTypeNACK         EAPType = 3
+       EAPTypeOTP          EAPType = 4
+       EAPTypeTokenCard    EAPType = 5
+)
+
+// EAP defines an Extensible Authentication Protocol (rfc 3748) layer.
+type EAP struct {
+       BaseLayer
+       Code     EAPCode
+       Id       uint8
+       Length   uint16
+       Type     EAPType
+       TypeData []byte
+}
+
+// LayerType returns LayerTypeEAP.
+func (e *EAP) LayerType() gopacket.LayerType { return LayerTypeEAP }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (e *EAP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       e.Code = EAPCode(data[0])
+       e.Id = data[1]
+       e.Length = binary.BigEndian.Uint16(data[2:4])
+       switch {
+       case e.Length > 4:
+               e.Type = EAPType(data[4])
+               e.TypeData = data[5:]
+       case e.Length == 4:
+               e.Type = 0
+               e.TypeData = nil
+       default:
+               return fmt.Errorf("invalid EAP length %d", e.Length)
+       }
+       e.BaseLayer.Contents = data[:e.Length]
+       e.BaseLayer.Payload = data[e.Length:] // Should be 0 bytes
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (e *EAP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       if opts.FixLengths {
+               e.Length = uint16(len(e.TypeData) + 1)
+       }
+       size := len(e.TypeData) + 4
+       if size > 4 {
+               size++
+       }
+       bytes, err := b.PrependBytes(size)
+       if err != nil {
+               return err
+       }
+       bytes[0] = byte(e.Code)
+       bytes[1] = e.Id
+       binary.BigEndian.PutUint16(bytes[2:], e.Length)
+       if size > 4 {
+               bytes[4] = byte(e.Type)
+               copy(bytes[5:], e.TypeData)
+       }
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (e *EAP) CanDecode() gopacket.LayerClass {
+       return LayerTypeEAP
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (e *EAP) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypeZero
+}
+
+func decodeEAP(data []byte, p gopacket.PacketBuilder) error {
+       e := &EAP{}
+       return decodingLayerDecoder(e, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/eapol.go b/vendor/github.com/google/gopacket/layers/eapol.go
new file mode 100644 (file)
index 0000000..041cd59
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "github.com/google/gopacket"
+)
+
+// EAPOL defines an EAP over LAN (802.1x) layer.
+type EAPOL struct {
+       BaseLayer
+       Version uint8
+       Type    EAPOLType
+       Length  uint16
+}
+
+// LayerType returns LayerTypeEAPOL.
+func (e *EAPOL) LayerType() gopacket.LayerType { return LayerTypeEAPOL }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (e *EAPOL) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       e.Version = data[0]
+       e.Type = EAPOLType(data[1])
+       e.Length = binary.BigEndian.Uint16(data[2:4])
+       e.BaseLayer = BaseLayer{data[:4], data[4:]}
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer
+func (e *EAPOL) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, _ := b.PrependBytes(4)
+       bytes[0] = e.Version
+       bytes[1] = byte(e.Type)
+       binary.BigEndian.PutUint16(bytes[2:], e.Length)
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (e *EAPOL) CanDecode() gopacket.LayerClass {
+       return LayerTypeEAPOL
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (e *EAPOL) NextLayerType() gopacket.LayerType {
+       return e.Type.LayerType()
+}
+
+func decodeEAPOL(data []byte, p gopacket.PacketBuilder) error {
+       e := &EAPOL{}
+       return decodingLayerDecoder(e, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/endpoints.go b/vendor/github.com/google/gopacket/layers/endpoints.go
new file mode 100644 (file)
index 0000000..4c91cc3
--- /dev/null
@@ -0,0 +1,97 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "github.com/google/gopacket"
+       "net"
+       "strconv"
+)
+
+var (
+       // We use two different endpoint types for IPv4 vs IPv6 addresses, so that
+       // ordering with endpointA.LessThan(endpointB) sanely groups all IPv4
+       // addresses and all IPv6 addresses, such that IPv6 > IPv4 for all addresses.
+       EndpointIPv4 = gopacket.RegisterEndpointType(1, gopacket.EndpointTypeMetadata{Name: "IPv4", Formatter: func(b []byte) string {
+               return net.IP(b).String()
+       }})
+       EndpointIPv6 = gopacket.RegisterEndpointType(2, gopacket.EndpointTypeMetadata{Name: "IPv6", Formatter: func(b []byte) string {
+               return net.IP(b).String()
+       }})
+
+       EndpointMAC = gopacket.RegisterEndpointType(3, gopacket.EndpointTypeMetadata{Name: "MAC", Formatter: func(b []byte) string {
+               return net.HardwareAddr(b).String()
+       }})
+       EndpointTCPPort = gopacket.RegisterEndpointType(4, gopacket.EndpointTypeMetadata{Name: "TCP", Formatter: func(b []byte) string {
+               return strconv.Itoa(int(binary.BigEndian.Uint16(b)))
+       }})
+       EndpointUDPPort = gopacket.RegisterEndpointType(5, gopacket.EndpointTypeMetadata{Name: "UDP", Formatter: func(b []byte) string {
+               return strconv.Itoa(int(binary.BigEndian.Uint16(b)))
+       }})
+       EndpointSCTPPort = gopacket.RegisterEndpointType(6, gopacket.EndpointTypeMetadata{Name: "SCTP", Formatter: func(b []byte) string {
+               return strconv.Itoa(int(binary.BigEndian.Uint16(b)))
+       }})
+       EndpointRUDPPort = gopacket.RegisterEndpointType(7, gopacket.EndpointTypeMetadata{Name: "RUDP", Formatter: func(b []byte) string {
+               return strconv.Itoa(int(b[0]))
+       }})
+       EndpointUDPLitePort = gopacket.RegisterEndpointType(8, gopacket.EndpointTypeMetadata{Name: "UDPLite", Formatter: func(b []byte) string {
+               return strconv.Itoa(int(binary.BigEndian.Uint16(b)))
+       }})
+       EndpointPPP = gopacket.RegisterEndpointType(9, gopacket.EndpointTypeMetadata{Name: "PPP", Formatter: func([]byte) string {
+               return "point"
+       }})
+)
+
+// NewIPEndpoint creates a new IP (v4 or v6) endpoint from a net.IP address.
+// It returns gopacket.InvalidEndpoint if the IP address is invalid.
+func NewIPEndpoint(a net.IP) gopacket.Endpoint {
+       ipv4 := a.To4()
+       if ipv4 != nil {
+               return gopacket.NewEndpoint(EndpointIPv4, []byte(ipv4))
+       }
+
+       ipv6 := a.To16()
+       if ipv6 != nil {
+               return gopacket.NewEndpoint(EndpointIPv6, []byte(ipv6))
+       }
+
+       return gopacket.InvalidEndpoint
+}
+
+// NewMACEndpoint returns a new MAC address endpoint.
+func NewMACEndpoint(a net.HardwareAddr) gopacket.Endpoint {
+       return gopacket.NewEndpoint(EndpointMAC, []byte(a))
+}
+func newPortEndpoint(t gopacket.EndpointType, p uint16) gopacket.Endpoint {
+       return gopacket.NewEndpoint(t, []byte{byte(p >> 8), byte(p)})
+}
+
+// NewTCPPortEndpoint returns an endpoint based on a TCP port.
+func NewTCPPortEndpoint(p TCPPort) gopacket.Endpoint {
+       return newPortEndpoint(EndpointTCPPort, uint16(p))
+}
+
+// NewUDPPortEndpoint returns an endpoint based on a UDP port.
+func NewUDPPortEndpoint(p UDPPort) gopacket.Endpoint {
+       return newPortEndpoint(EndpointUDPPort, uint16(p))
+}
+
+// NewSCTPPortEndpoint returns an endpoint based on a SCTP port.
+func NewSCTPPortEndpoint(p SCTPPort) gopacket.Endpoint {
+       return newPortEndpoint(EndpointSCTPPort, uint16(p))
+}
+
+// NewRUDPPortEndpoint returns an endpoint based on a RUDP port.
+func NewRUDPPortEndpoint(p RUDPPort) gopacket.Endpoint {
+       return gopacket.NewEndpoint(EndpointRUDPPort, []byte{byte(p)})
+}
+
+// NewUDPLitePortEndpoint returns an endpoint based on a UDPLite port.
+func NewUDPLitePortEndpoint(p UDPLitePort) gopacket.Endpoint {
+       return newPortEndpoint(EndpointUDPLitePort, uint16(p))
+}
diff --git a/vendor/github.com/google/gopacket/layers/endpoints_test.go b/vendor/github.com/google/gopacket/layers/endpoints_test.go
new file mode 100644 (file)
index 0000000..906762a
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2017, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "net"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+func TestNewIPEndpoint(t *testing.T) {
+       cases := []struct {
+               ip           net.IP
+               endpointType gopacket.EndpointType
+       }{
+               {net.ParseIP("192.168.0.1").To4(), EndpointIPv4},
+               {net.ParseIP("192.168.0.1").To16(), EndpointIPv4},
+               {net.ParseIP("2001:0db8:85a3:0000:0000:8a2e:0370:7334"), EndpointIPv6},
+       }
+
+       for _, c := range cases {
+               endpoint := NewIPEndpoint(c.ip)
+               if endpoint == gopacket.InvalidEndpoint {
+                       t.Errorf("Failed to create an IP endpoint for %s (%d-bytes)",
+                               c.ip, len(c.ip))
+               }
+               if endpoint.EndpointType() != c.endpointType {
+                       t.Errorf("Wrong endpoint type created for %s (%d-bytes): expected %s, got %s",
+                               c.ip, len(c.ip), c.endpointType, endpoint.EndpointType())
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/enums.go b/vendor/github.com/google/gopacket/layers/enums.go
new file mode 100644 (file)
index 0000000..0ea2058
--- /dev/null
@@ -0,0 +1,564 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "errors"
+       "fmt"
+
+       "github.com/google/gopacket"
+)
+
+// EnumMetadata keeps track of a set of metadata for each enumeration value
+// for protocol enumerations.
+type EnumMetadata struct {
+       // DecodeWith is the decoder to use to decode this protocol's data.
+       DecodeWith gopacket.Decoder
+       // Name is the name of the enumeration value.
+       Name string
+       // LayerType is the layer type implied by the given enum.
+       LayerType gopacket.LayerType
+}
+
+// errorFunc returns a decoder that spits out a specific error message.
+func errorFunc(msg string) gopacket.Decoder {
+       var e = errors.New(msg)
+       return gopacket.DecodeFunc(func([]byte, gopacket.PacketBuilder) error {
+               return e
+       })
+}
+
+// EthernetType is an enumeration of ethernet type values, and acts as a decoder
+// for any type it supports.
+type EthernetType uint16
+
+const (
+       // EthernetTypeLLC is not an actual ethernet type.  It is instead a
+       // placeholder we use in Ethernet frames that use the 802.3 standard of
+       // srcmac|dstmac|length|LLC instead of srcmac|dstmac|ethertype.
+       EthernetTypeLLC                         EthernetType = 0
+       EthernetTypeIPv4                        EthernetType = 0x0800
+       EthernetTypeARP                         EthernetType = 0x0806
+       EthernetTypeIPv6                        EthernetType = 0x86DD
+       EthernetTypeCiscoDiscovery              EthernetType = 0x2000
+       EthernetTypeNortelDiscovery             EthernetType = 0x01a2
+       EthernetTypeTransparentEthernetBridging EthernetType = 0x6558
+       EthernetTypeDot1Q                       EthernetType = 0x8100
+       EthernetTypePPPoEDiscovery              EthernetType = 0x8863
+       EthernetTypePPPoESession                EthernetType = 0x8864
+       EthernetTypeMPLSUnicast                 EthernetType = 0x8847
+       EthernetTypeMPLSMulticast               EthernetType = 0x8848
+       EthernetTypeEAPOL                       EthernetType = 0x888e
+       EthernetTypeQinQ                        EthernetType = 0x88a8
+       EthernetTypeLinkLayerDiscovery          EthernetType = 0x88cc
+       EthernetTypeEthernetCTP                 EthernetType = 0x9000
+)
+
+// IPProtocol is an enumeration of IP protocol values, and acts as a decoder
+// for any type it supports.
+type IPProtocol uint8
+
+const (
+       IPProtocolIPv6HopByHop    IPProtocol = 0
+       IPProtocolICMPv4          IPProtocol = 1
+       IPProtocolIGMP            IPProtocol = 2
+       IPProtocolIPv4            IPProtocol = 4
+       IPProtocolTCP             IPProtocol = 6
+       IPProtocolUDP             IPProtocol = 17
+       IPProtocolRUDP            IPProtocol = 27
+       IPProtocolIPv6            IPProtocol = 41
+       IPProtocolIPv6Routing     IPProtocol = 43
+       IPProtocolIPv6Fragment    IPProtocol = 44
+       IPProtocolGRE             IPProtocol = 47
+       IPProtocolESP             IPProtocol = 50
+       IPProtocolAH              IPProtocol = 51
+       IPProtocolICMPv6          IPProtocol = 58
+       IPProtocolNoNextHeader    IPProtocol = 59
+       IPProtocolIPv6Destination IPProtocol = 60
+       IPProtocolOSPF            IPProtocol = 89
+       IPProtocolIPIP            IPProtocol = 94
+       IPProtocolEtherIP         IPProtocol = 97
+       IPProtocolVRRP            IPProtocol = 112
+       IPProtocolSCTP            IPProtocol = 132
+       IPProtocolUDPLite         IPProtocol = 136
+       IPProtocolMPLSInIP        IPProtocol = 137
+)
+
+// LinkType is an enumeration of link types, and acts as a decoder for any
+// link type it supports.
+type LinkType uint8
+
+const (
+       // According to pcap-linktype(7) and http://www.tcpdump.org/linktypes.html
+       LinkTypeNull           LinkType = 0
+       LinkTypeEthernet       LinkType = 1
+       LinkTypeAX25           LinkType = 3
+       LinkTypeTokenRing      LinkType = 6
+       LinkTypeArcNet         LinkType = 7
+       LinkTypeSLIP           LinkType = 8
+       LinkTypePPP            LinkType = 9
+       LinkTypeFDDI           LinkType = 10
+       LinkTypePPP_HDLC       LinkType = 50
+       LinkTypePPPEthernet    LinkType = 51
+       LinkTypeATM_RFC1483    LinkType = 100
+       LinkTypeRaw            LinkType = 101
+       LinkTypeC_HDLC         LinkType = 104
+       LinkTypeIEEE802_11     LinkType = 105
+       LinkTypeFRelay         LinkType = 107
+       LinkTypeLoop           LinkType = 108
+       LinkTypeLinuxSLL       LinkType = 113
+       LinkTypeLTalk          LinkType = 114
+       LinkTypePFLog          LinkType = 117
+       LinkTypePrismHeader    LinkType = 119
+       LinkTypeIPOverFC       LinkType = 122
+       LinkTypeSunATM         LinkType = 123
+       LinkTypeIEEE80211Radio LinkType = 127
+       LinkTypeARCNetLinux    LinkType = 129
+       LinkTypeIPOver1394     LinkType = 138
+       LinkTypeMTP2Phdr       LinkType = 139
+       LinkTypeMTP2           LinkType = 140
+       LinkTypeMTP3           LinkType = 141
+       LinkTypeSCCP           LinkType = 142
+       LinkTypeDOCSIS         LinkType = 143
+       LinkTypeLinuxIRDA      LinkType = 144
+       LinkTypeLinuxLAPD      LinkType = 177
+       LinkTypeLinuxUSB       LinkType = 220
+       LinkTypeIPv4           LinkType = 228
+       LinkTypeIPv6           LinkType = 229
+)
+
+// PPPoECode is the PPPoE code enum, taken from http://tools.ietf.org/html/rfc2516
+type PPPoECode uint8
+
+const (
+       PPPoECodePADI    PPPoECode = 0x09
+       PPPoECodePADO    PPPoECode = 0x07
+       PPPoECodePADR    PPPoECode = 0x19
+       PPPoECodePADS    PPPoECode = 0x65
+       PPPoECodePADT    PPPoECode = 0xA7
+       PPPoECodeSession PPPoECode = 0x00
+)
+
+// PPPType is an enumeration of PPP type values, and acts as a decoder for any
+// type it supports.
+type PPPType uint16
+
+const (
+       PPPTypeIPv4          PPPType = 0x0021
+       PPPTypeIPv6          PPPType = 0x0057
+       PPPTypeMPLSUnicast   PPPType = 0x0281
+       PPPTypeMPLSMulticast PPPType = 0x0283
+)
+
+// SCTPChunkType is an enumeration of chunk types inside SCTP packets.
+type SCTPChunkType uint8
+
+const (
+       SCTPChunkTypeData             SCTPChunkType = 0
+       SCTPChunkTypeInit             SCTPChunkType = 1
+       SCTPChunkTypeInitAck          SCTPChunkType = 2
+       SCTPChunkTypeSack             SCTPChunkType = 3
+       SCTPChunkTypeHeartbeat        SCTPChunkType = 4
+       SCTPChunkTypeHeartbeatAck     SCTPChunkType = 5
+       SCTPChunkTypeAbort            SCTPChunkType = 6
+       SCTPChunkTypeShutdown         SCTPChunkType = 7
+       SCTPChunkTypeShutdownAck      SCTPChunkType = 8
+       SCTPChunkTypeError            SCTPChunkType = 9
+       SCTPChunkTypeCookieEcho       SCTPChunkType = 10
+       SCTPChunkTypeCookieAck        SCTPChunkType = 11
+       SCTPChunkTypeShutdownComplete SCTPChunkType = 14
+)
+
+// FDDIFrameControl is an enumeration of FDDI frame control bytes.
+type FDDIFrameControl uint8
+
+const (
+       FDDIFrameControlLLC FDDIFrameControl = 0x50
+)
+
+// EAPOLType is an enumeration of EAPOL packet types.
+type EAPOLType uint8
+
+const (
+       EAPOLTypeEAP      EAPOLType = 0
+       EAPOLTypeStart    EAPOLType = 1
+       EAPOLTypeLogOff   EAPOLType = 2
+       EAPOLTypeKey      EAPOLType = 3
+       EAPOLTypeASFAlert EAPOLType = 4
+)
+
+// ProtocolFamily is the set of values defined as PF_* in sys/socket.h
+type ProtocolFamily uint8
+
+const (
+       ProtocolFamilyIPv4 ProtocolFamily = 2
+       // BSDs use different values for INET6... glory be.  These values taken from
+       // tcpdump 4.3.0.
+       ProtocolFamilyIPv6BSD     ProtocolFamily = 24
+       ProtocolFamilyIPv6FreeBSD ProtocolFamily = 28
+       ProtocolFamilyIPv6Darwin  ProtocolFamily = 30
+       ProtocolFamilyIPv6Linux   ProtocolFamily = 10
+)
+
+// Dot11Type is a combination of IEEE 802.11 frame's Type and Subtype fields.
+// By combining these two fields together into a single type, we're able to
+// provide a String function that correctly displays the subtype given the
+// top-level type.
+//
+// If you just care about the top-level type, use the MainType function.
+type Dot11Type uint8
+
+// MainType strips the subtype information from the given type,
+// returning just the overarching type (Mgmt, Ctrl, Data, Reserved).
+func (d Dot11Type) MainType() Dot11Type {
+       return d & dot11TypeMask
+}
+
+const (
+       Dot11TypeMgmt     Dot11Type = 0x00
+       Dot11TypeCtrl     Dot11Type = 0x01
+       Dot11TypeData     Dot11Type = 0x02
+       Dot11TypeReserved Dot11Type = 0x03
+       dot11TypeMask               = 0x03
+
+       // The following are type/subtype conglomerations.
+
+       // Management
+       Dot11TypeMgmtAssociationReq    Dot11Type = 0x00
+       Dot11TypeMgmtAssociationResp   Dot11Type = 0x04
+       Dot11TypeMgmtReassociationReq  Dot11Type = 0x08
+       Dot11TypeMgmtReassociationResp Dot11Type = 0x0c
+       Dot11TypeMgmtProbeReq          Dot11Type = 0x10
+       Dot11TypeMgmtProbeResp         Dot11Type = 0x14
+       Dot11TypeMgmtMeasurementPilot  Dot11Type = 0x18
+       Dot11TypeMgmtBeacon            Dot11Type = 0x20
+       Dot11TypeMgmtATIM              Dot11Type = 0x24
+       Dot11TypeMgmtDisassociation    Dot11Type = 0x28
+       Dot11TypeMgmtAuthentication    Dot11Type = 0x2c
+       Dot11TypeMgmtDeauthentication  Dot11Type = 0x30
+       Dot11TypeMgmtAction            Dot11Type = 0x34
+       Dot11TypeMgmtActionNoAck       Dot11Type = 0x38
+
+       // Control
+       Dot11TypeCtrlWrapper       Dot11Type = 0x1d
+       Dot11TypeCtrlBlockAckReq   Dot11Type = 0x21
+       Dot11TypeCtrlBlockAck      Dot11Type = 0x25
+       Dot11TypeCtrlPowersavePoll Dot11Type = 0x29
+       Dot11TypeCtrlRTS           Dot11Type = 0x2d
+       Dot11TypeCtrlCTS           Dot11Type = 0x31
+       Dot11TypeCtrlAck           Dot11Type = 0x35
+       Dot11TypeCtrlCFEnd         Dot11Type = 0x39
+       Dot11TypeCtrlCFEndAck      Dot11Type = 0x3d
+
+       // Data
+       Dot11TypeDataCFAck              Dot11Type = 0x06
+       Dot11TypeDataCFPoll             Dot11Type = 0x0a
+       Dot11TypeDataCFAckPoll          Dot11Type = 0x0e
+       Dot11TypeDataNull               Dot11Type = 0x12
+       Dot11TypeDataCFAckNoData        Dot11Type = 0x16
+       Dot11TypeDataCFPollNoData       Dot11Type = 0x1a
+       Dot11TypeDataCFAckPollNoData    Dot11Type = 0x1e
+       Dot11TypeDataQOSData            Dot11Type = 0x22
+       Dot11TypeDataQOSDataCFAck       Dot11Type = 0x26
+       Dot11TypeDataQOSDataCFPoll      Dot11Type = 0x2a
+       Dot11TypeDataQOSDataCFAckPoll   Dot11Type = 0x2e
+       Dot11TypeDataQOSNull            Dot11Type = 0x32
+       Dot11TypeDataQOSCFPollNoData    Dot11Type = 0x3a
+       Dot11TypeDataQOSCFAckPollNoData Dot11Type = 0x3e
+)
+
+var (
+       // Each of the following arrays contains mappings of how to handle enum
+       // values for various enum types in gopacket/layers.
+       //
+       // So, EthernetTypeMetadata[2] contains information on how to handle EthernetType
+       // 2, including which name to give it and which decoder to use to decode
+       // packet data of that type.  These arrays are filled by default with all of the
+       // protocols gopacket/layers knows how to handle, but users of the library can
+       // add new decoders or override existing ones.  For example, if you write a better
+       // TCP decoder, you can override IPProtocolMetadata[IPProtocolTCP].DecodeWith
+       // with your new decoder, and all gopacket/layers decoding will use your new
+       // decoder whenever they encounter that IPProtocol.
+       EthernetTypeMetadata     [65536]EnumMetadata
+       IPProtocolMetadata       [256]EnumMetadata
+       SCTPChunkTypeMetadata    [256]EnumMetadata
+       PPPTypeMetadata          [65536]EnumMetadata
+       PPPoECodeMetadata        [256]EnumMetadata
+       LinkTypeMetadata         [256]EnumMetadata
+       FDDIFrameControlMetadata [256]EnumMetadata
+       EAPOLTypeMetadata        [256]EnumMetadata
+       ProtocolFamilyMetadata   [256]EnumMetadata
+       Dot11TypeMetadata        [256]EnumMetadata
+       USBTypeMetadata          [256]EnumMetadata
+)
+
+func (a EthernetType) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return EthernetTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a EthernetType) String() string {
+       return EthernetTypeMetadata[a].Name
+}
+func (a EthernetType) LayerType() gopacket.LayerType {
+       return EthernetTypeMetadata[a].LayerType
+}
+func (a IPProtocol) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return IPProtocolMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a IPProtocol) String() string {
+       return IPProtocolMetadata[a].Name
+}
+func (a IPProtocol) LayerType() gopacket.LayerType {
+       return IPProtocolMetadata[a].LayerType
+}
+func (a SCTPChunkType) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return SCTPChunkTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a SCTPChunkType) String() string {
+       return SCTPChunkTypeMetadata[a].Name
+}
+func (a PPPType) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return PPPTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a PPPType) String() string {
+       return PPPTypeMetadata[a].Name
+}
+func (a LinkType) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return LinkTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a LinkType) String() string {
+       return LinkTypeMetadata[a].Name
+}
+func (a PPPoECode) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return PPPoECodeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a PPPoECode) String() string {
+       return PPPoECodeMetadata[a].Name
+}
+func (a FDDIFrameControl) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return FDDIFrameControlMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a FDDIFrameControl) String() string {
+       return FDDIFrameControlMetadata[a].Name
+}
+func (a EAPOLType) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return EAPOLTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a EAPOLType) String() string {
+       return EAPOLTypeMetadata[a].Name
+}
+func (a EAPOLType) LayerType() gopacket.LayerType {
+       return EAPOLTypeMetadata[a].LayerType
+}
+func (a ProtocolFamily) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return ProtocolFamilyMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a ProtocolFamily) String() string {
+       return ProtocolFamilyMetadata[a].Name
+}
+func (a ProtocolFamily) LayerType() gopacket.LayerType {
+       return ProtocolFamilyMetadata[a].LayerType
+}
+func (a Dot11Type) Decode(data []byte, p gopacket.PacketBuilder) error {
+       return Dot11TypeMetadata[a].DecodeWith.Decode(data, p)
+}
+func (a Dot11Type) String() string {
+       return Dot11TypeMetadata[a].Name
+}
+func (a Dot11Type) LayerType() gopacket.LayerType {
+       return Dot11TypeMetadata[a].LayerType
+}
+
+// Decode a raw v4 or v6 IP packet.
+func decodeIPv4or6(data []byte, p gopacket.PacketBuilder) error {
+       version := data[0] >> 4
+       switch version {
+       case 4:
+               return decodeIPv4(data, p)
+       case 6:
+               return decodeIPv6(data, p)
+       }
+       return fmt.Errorf("Invalid IP packet version %v", version)
+}
+
+func init() {
+       // Here we link up all enumerations with their respective names and decoders.
+       for i := 0; i < 65536; i++ {
+               EthernetTypeMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode ethernet type %d", i)),
+                       Name:       fmt.Sprintf("UnknownEthernetType(%d)", i),
+               }
+               PPPTypeMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode PPP type %d", i)),
+                       Name:       fmt.Sprintf("UnknownPPPType(%d)", i),
+               }
+       }
+       for i := 0; i < 256; i++ {
+               IPProtocolMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode IP protocol %d", i)),
+                       Name:       fmt.Sprintf("UnknownIPProtocol(%d)", i),
+               }
+               SCTPChunkTypeMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode SCTP chunk type %d", i)),
+                       Name:       fmt.Sprintf("UnknownSCTPChunkType(%d)", i),
+               }
+               PPPoECodeMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode PPPoE code %d", i)),
+                       Name:       fmt.Sprintf("UnknownPPPoECode(%d)", i),
+               }
+               LinkTypeMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode link type %d", i)),
+                       Name:       fmt.Sprintf("UnknownLinkType(%d)", i),
+               }
+               FDDIFrameControlMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode FDDI frame control %d", i)),
+                       Name:       fmt.Sprintf("UnknownFDDIFrameControl(%d)", i),
+               }
+               EAPOLTypeMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode EAPOL type %d", i)),
+                       Name:       fmt.Sprintf("UnknownEAPOLType(%d)", i),
+               }
+               ProtocolFamilyMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode protocol family %d", i)),
+                       Name:       fmt.Sprintf("UnknownProtocolFamily(%d)", i),
+               }
+               Dot11TypeMetadata[i] = EnumMetadata{
+                       DecodeWith: errorFunc(fmt.Sprintf("Unable to decode Dot11 type %d", i)),
+                       Name:       fmt.Sprintf("UnknownDot11Type(%d)", i),
+               }
+       }
+
+       EthernetTypeMetadata[EthernetTypeLLC] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLLC), Name: "LLC", LayerType: LayerTypeLLC}
+       EthernetTypeMetadata[EthernetTypeIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4", LayerType: LayerTypeIPv4}
+       EthernetTypeMetadata[EthernetTypeIPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+       EthernetTypeMetadata[EthernetTypeARP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeARP), Name: "ARP", LayerType: LayerTypeARP}
+       EthernetTypeMetadata[EthernetTypeDot1Q] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot1Q), Name: "Dot1Q", LayerType: LayerTypeDot1Q}
+       EthernetTypeMetadata[EthernetTypePPPoEDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPPoE), Name: "PPPoEDiscovery", LayerType: LayerTypePPPoE}
+       EthernetTypeMetadata[EthernetTypePPPoESession] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPPoE), Name: "PPPoESession", LayerType: LayerTypePPPoE}
+       EthernetTypeMetadata[EthernetTypeEthernetCTP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEthernetCTP), Name: "EthernetCTP", LayerType: LayerTypeEthernetCTP}
+       EthernetTypeMetadata[EthernetTypeCiscoDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeCiscoDiscovery), Name: "CiscoDiscovery", LayerType: LayerTypeCiscoDiscovery}
+       EthernetTypeMetadata[EthernetTypeNortelDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeNortelDiscovery), Name: "NortelDiscovery", LayerType: LayerTypeNortelDiscovery}
+       EthernetTypeMetadata[EthernetTypeLinkLayerDiscovery] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLinkLayerDiscovery), Name: "LinkLayerDiscovery", LayerType: LayerTypeLinkLayerDiscovery}
+       EthernetTypeMetadata[EthernetTypeMPLSUnicast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLSUnicast", LayerType: LayerTypeMPLS}
+       EthernetTypeMetadata[EthernetTypeMPLSMulticast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLSMulticast", LayerType: LayerTypeMPLS}
+       EthernetTypeMetadata[EthernetTypeEAPOL] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEAPOL), Name: "EAPOL", LayerType: LayerTypeEAPOL}
+       EthernetTypeMetadata[EthernetTypeQinQ] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot1Q), Name: "Dot1Q", LayerType: LayerTypeDot1Q}
+       EthernetTypeMetadata[EthernetTypeTransparentEthernetBridging] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEthernet), Name: "TransparentEthernetBridging", LayerType: LayerTypeEthernet}
+
+       IPProtocolMetadata[IPProtocolIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4", LayerType: LayerTypeIPv4}
+       IPProtocolMetadata[IPProtocolTCP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeTCP), Name: "TCP", LayerType: LayerTypeTCP}
+       IPProtocolMetadata[IPProtocolUDP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUDP), Name: "UDP", LayerType: LayerTypeUDP}
+       IPProtocolMetadata[IPProtocolICMPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeICMPv4), Name: "ICMPv4", LayerType: LayerTypeICMPv4}
+       IPProtocolMetadata[IPProtocolICMPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeICMPv6), Name: "ICMPv6", LayerType: LayerTypeICMPv6}
+       IPProtocolMetadata[IPProtocolSCTP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTP), Name: "SCTP", LayerType: LayerTypeSCTP}
+       IPProtocolMetadata[IPProtocolIPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+       IPProtocolMetadata[IPProtocolIPIP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4", LayerType: LayerTypeIPv4}
+       IPProtocolMetadata[IPProtocolEtherIP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEtherIP), Name: "EtherIP", LayerType: LayerTypeEtherIP}
+       IPProtocolMetadata[IPProtocolRUDP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeRUDP), Name: "RUDP", LayerType: LayerTypeRUDP}
+       IPProtocolMetadata[IPProtocolGRE] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeGRE), Name: "GRE", LayerType: LayerTypeGRE}
+       IPProtocolMetadata[IPProtocolIPv6HopByHop] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6HopByHop), Name: "IPv6HopByHop", LayerType: LayerTypeIPv6HopByHop}
+       IPProtocolMetadata[IPProtocolIPv6Routing] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6Routing), Name: "IPv6Routing", LayerType: LayerTypeIPv6Routing}
+       IPProtocolMetadata[IPProtocolIPv6Fragment] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6Fragment), Name: "IPv6Fragment", LayerType: LayerTypeIPv6Fragment}
+       IPProtocolMetadata[IPProtocolIPv6Destination] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6Destination), Name: "IPv6Destination", LayerType: LayerTypeIPv6Destination}
+       IPProtocolMetadata[IPProtocolOSPF] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeOSPF), Name: "OSPF", LayerType: LayerTypeOSPF}
+       IPProtocolMetadata[IPProtocolAH] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPSecAH), Name: "IPSecAH", LayerType: LayerTypeIPSecAH}
+       IPProtocolMetadata[IPProtocolESP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPSecESP), Name: "IPSecESP", LayerType: LayerTypeIPSecESP}
+       IPProtocolMetadata[IPProtocolUDPLite] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUDPLite), Name: "UDPLite", LayerType: LayerTypeUDPLite}
+       IPProtocolMetadata[IPProtocolMPLSInIP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLS", LayerType: LayerTypeMPLS}
+       IPProtocolMetadata[IPProtocolNoNextHeader] = EnumMetadata{DecodeWith: gopacket.DecodePayload, Name: "NoNextHeader", LayerType: gopacket.LayerTypePayload}
+       IPProtocolMetadata[IPProtocolIGMP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIGMP), Name: "IGMP", LayerType: LayerTypeIGMP}
+       IPProtocolMetadata[IPProtocolVRRP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeVRRP), Name: "VRRP", LayerType: LayerTypeVRRP}
+
+       SCTPChunkTypeMetadata[SCTPChunkTypeData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPData), Name: "Data"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeInit] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPInit), Name: "Init"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeInitAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPInit), Name: "InitAck"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeSack] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPSack), Name: "Sack"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeHeartbeat] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPHeartbeat), Name: "Heartbeat"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeHeartbeatAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPHeartbeat), Name: "HeartbeatAck"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeAbort] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPError), Name: "Abort"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeError] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPError), Name: "Error"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeShutdown] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPShutdown), Name: "Shutdown"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeShutdownAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPShutdownAck), Name: "ShutdownAck"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeCookieEcho] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPCookieEcho), Name: "CookieEcho"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeCookieAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPEmptyLayer), Name: "CookieAck"}
+       SCTPChunkTypeMetadata[SCTPChunkTypeShutdownComplete] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeSCTPEmptyLayer), Name: "ShutdownComplete"}
+
+       PPPTypeMetadata[PPPTypeIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4"}
+       PPPTypeMetadata[PPPTypeIPv6] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6"}
+       PPPTypeMetadata[PPPTypeMPLSUnicast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLSUnicast"}
+       PPPTypeMetadata[PPPTypeMPLSMulticast] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeMPLS), Name: "MPLSMulticast"}
+
+       PPPoECodeMetadata[PPPoECodeSession] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPP), Name: "PPP"}
+
+       LinkTypeMetadata[LinkTypeEthernet] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEthernet), Name: "Ethernet"}
+       LinkTypeMetadata[LinkTypePPP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPP), Name: "PPP"}
+       LinkTypeMetadata[LinkTypeFDDI] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeFDDI), Name: "FDDI"}
+       LinkTypeMetadata[LinkTypeNull] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLoopback), Name: "Null"}
+       LinkTypeMetadata[LinkTypeIEEE802_11] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11), Name: "Dot11"}
+       LinkTypeMetadata[LinkTypeLoop] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLoopback), Name: "Loop"}
+       LinkTypeMetadata[LinkTypeIEEE802_11] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11), Name: "802.11"}
+       LinkTypeMetadata[LinkTypeRaw] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4or6), Name: "Raw"}
+       LinkTypeMetadata[LinkTypePFLog] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePFLog), Name: "PFLog"}
+       LinkTypeMetadata[LinkTypeIEEE80211Radio] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeRadioTap), Name: "RadioTap"}
+       LinkTypeMetadata[LinkTypeLinuxUSB] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSB), Name: "USB"}
+       LinkTypeMetadata[LinkTypeLinuxSLL] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLinuxSLL), Name: "Linux SLL"}
+       LinkTypeMetadata[LinkTypePrismHeader] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePrismHeader), Name: "Prism"}
+
+       FDDIFrameControlMetadata[FDDIFrameControlLLC] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLLC), Name: "LLC"}
+
+       EAPOLTypeMetadata[EAPOLTypeEAP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEAP), Name: "EAP", LayerType: LayerTypeEAP}
+
+       ProtocolFamilyMetadata[ProtocolFamilyIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4", LayerType: LayerTypeIPv4}
+       ProtocolFamilyMetadata[ProtocolFamilyIPv6BSD] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+       ProtocolFamilyMetadata[ProtocolFamilyIPv6FreeBSD] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+       ProtocolFamilyMetadata[ProtocolFamilyIPv6Darwin] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+       ProtocolFamilyMetadata[ProtocolFamilyIPv6Linux] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
+
+       Dot11TypeMetadata[Dot11TypeMgmtAssociationReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAssociationReq), Name: "MgmtAssociationReq", LayerType: LayerTypeDot11MgmtAssociationReq}
+       Dot11TypeMetadata[Dot11TypeMgmtAssociationResp] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAssociationResp), Name: "MgmtAssociationResp", LayerType: LayerTypeDot11MgmtAssociationResp}
+       Dot11TypeMetadata[Dot11TypeMgmtReassociationReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtReassociationReq), Name: "MgmtReassociationReq", LayerType: LayerTypeDot11MgmtReassociationReq}
+       Dot11TypeMetadata[Dot11TypeMgmtReassociationResp] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtReassociationResp), Name: "MgmtReassociationResp", LayerType: LayerTypeDot11MgmtReassociationResp}
+       Dot11TypeMetadata[Dot11TypeMgmtProbeReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtProbeReq), Name: "MgmtProbeReq", LayerType: LayerTypeDot11MgmtProbeReq}
+       Dot11TypeMetadata[Dot11TypeMgmtProbeResp] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtProbeResp), Name: "MgmtProbeResp", LayerType: LayerTypeDot11MgmtProbeResp}
+       Dot11TypeMetadata[Dot11TypeMgmtMeasurementPilot] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtMeasurementPilot), Name: "MgmtMeasurementPilot", LayerType: LayerTypeDot11MgmtMeasurementPilot}
+       Dot11TypeMetadata[Dot11TypeMgmtBeacon] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtBeacon), Name: "MgmtBeacon", LayerType: LayerTypeDot11MgmtBeacon}
+       Dot11TypeMetadata[Dot11TypeMgmtATIM] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtATIM), Name: "MgmtATIM", LayerType: LayerTypeDot11MgmtATIM}
+       Dot11TypeMetadata[Dot11TypeMgmtDisassociation] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtDisassociation), Name: "MgmtDisassociation", LayerType: LayerTypeDot11MgmtDisassociation}
+       Dot11TypeMetadata[Dot11TypeMgmtAuthentication] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAuthentication), Name: "MgmtAuthentication", LayerType: LayerTypeDot11MgmtAuthentication}
+       Dot11TypeMetadata[Dot11TypeMgmtDeauthentication] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtDeauthentication), Name: "MgmtDeauthentication", LayerType: LayerTypeDot11MgmtDeauthentication}
+       Dot11TypeMetadata[Dot11TypeMgmtAction] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtAction), Name: "MgmtAction", LayerType: LayerTypeDot11MgmtAction}
+       Dot11TypeMetadata[Dot11TypeMgmtActionNoAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11MgmtActionNoAck), Name: "MgmtActionNoAck", LayerType: LayerTypeDot11MgmtActionNoAck}
+       Dot11TypeMetadata[Dot11TypeCtrl] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11Ctrl), Name: "Ctrl", LayerType: LayerTypeDot11Ctrl}
+       Dot11TypeMetadata[Dot11TypeCtrlWrapper] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11Ctrl), Name: "CtrlWrapper", LayerType: LayerTypeDot11Ctrl}
+       Dot11TypeMetadata[Dot11TypeCtrlBlockAckReq] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlBlockAckReq), Name: "CtrlBlockAckReq", LayerType: LayerTypeDot11CtrlBlockAckReq}
+       Dot11TypeMetadata[Dot11TypeCtrlBlockAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlBlockAck), Name: "CtrlBlockAck", LayerType: LayerTypeDot11CtrlBlockAck}
+       Dot11TypeMetadata[Dot11TypeCtrlPowersavePoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlPowersavePoll), Name: "CtrlPowersavePoll", LayerType: LayerTypeDot11CtrlPowersavePoll}
+       Dot11TypeMetadata[Dot11TypeCtrlRTS] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlRTS), Name: "CtrlRTS", LayerType: LayerTypeDot11CtrlRTS}
+       Dot11TypeMetadata[Dot11TypeCtrlCTS] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlCTS), Name: "CtrlCTS", LayerType: LayerTypeDot11CtrlCTS}
+       Dot11TypeMetadata[Dot11TypeCtrlAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlAck), Name: "CtrlAck", LayerType: LayerTypeDot11CtrlAck}
+       Dot11TypeMetadata[Dot11TypeCtrlCFEnd] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlCFEnd), Name: "CtrlCFEnd", LayerType: LayerTypeDot11CtrlCFEnd}
+       Dot11TypeMetadata[Dot11TypeCtrlCFEndAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11CtrlCFEndAck), Name: "CtrlCFEndAck", LayerType: LayerTypeDot11CtrlCFEndAck}
+       Dot11TypeMetadata[Dot11TypeData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11Data), Name: "Data", LayerType: LayerTypeDot11Data}
+       Dot11TypeMetadata[Dot11TypeDataCFAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAck), Name: "DataCFAck", LayerType: LayerTypeDot11DataCFAck}
+       Dot11TypeMetadata[Dot11TypeDataCFPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFPoll), Name: "DataCFPoll", LayerType: LayerTypeDot11DataCFPoll}
+       Dot11TypeMetadata[Dot11TypeDataCFAckPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAckPoll), Name: "DataCFAckPoll", LayerType: LayerTypeDot11DataCFAckPoll}
+       Dot11TypeMetadata[Dot11TypeDataNull] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataNull), Name: "DataNull", LayerType: LayerTypeDot11DataNull}
+       Dot11TypeMetadata[Dot11TypeDataCFAckNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAckNoData), Name: "DataCFAckNoData", LayerType: LayerTypeDot11DataCFAckNoData}
+       Dot11TypeMetadata[Dot11TypeDataCFPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFPollNoData), Name: "DataCFPollNoData", LayerType: LayerTypeDot11DataCFPollNoData}
+       Dot11TypeMetadata[Dot11TypeDataCFAckPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataCFAckPollNoData), Name: "DataCFAckPollNoData", LayerType: LayerTypeDot11DataCFAckPollNoData}
+       Dot11TypeMetadata[Dot11TypeDataQOSData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSData), Name: "DataQOSData", LayerType: LayerTypeDot11DataQOSData}
+       Dot11TypeMetadata[Dot11TypeDataQOSDataCFAck] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAck), Name: "DataQOSDataCFAck", LayerType: LayerTypeDot11DataQOSDataCFAck}
+       Dot11TypeMetadata[Dot11TypeDataQOSDataCFPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSDataCFPoll), Name: "DataQOSDataCFPoll", LayerType: LayerTypeDot11DataQOSDataCFPoll}
+       Dot11TypeMetadata[Dot11TypeDataQOSDataCFAckPoll] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAckPoll), Name: "DataQOSDataCFAckPoll", LayerType: LayerTypeDot11DataQOSDataCFAckPoll}
+       Dot11TypeMetadata[Dot11TypeDataQOSNull] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSNull), Name: "DataQOSNull", LayerType: LayerTypeDot11DataQOSNull}
+       Dot11TypeMetadata[Dot11TypeDataQOSCFPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSCFPollNoData), Name: "DataQOSCFPollNoData", LayerType: LayerTypeDot11DataQOSCFPollNoData}
+       Dot11TypeMetadata[Dot11TypeDataQOSCFAckPollNoData] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeDot11DataQOSCFAckPollNoData), Name: "DataQOSCFAckPollNoData", LayerType: LayerTypeDot11DataQOSCFAckPollNoData}
+
+       USBTypeMetadata[USBTransportTypeInterrupt] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBInterrupt), Name: "Interrupt", LayerType: LayerTypeUSBInterrupt}
+       USBTypeMetadata[USBTransportTypeControl] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBControl), Name: "Control", LayerType: LayerTypeUSBControl}
+       USBTypeMetadata[USBTransportTypeBulk] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBBulk), Name: "Bulk", LayerType: LayerTypeUSBBulk}
+}
diff --git a/vendor/github.com/google/gopacket/layers/etherip.go b/vendor/github.com/google/gopacket/layers/etherip.go
new file mode 100644 (file)
index 0000000..5b7b722
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "github.com/google/gopacket"
+)
+
+// EtherIP is the struct for storing RFC 3378 EtherIP packet headers.
+type EtherIP struct {
+       BaseLayer
+       Version  uint8
+       Reserved uint16
+}
+
+// LayerType returns gopacket.LayerTypeEtherIP.
+func (e *EtherIP) LayerType() gopacket.LayerType { return LayerTypeEtherIP }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (e *EtherIP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       e.Version = data[0] >> 4
+       e.Reserved = binary.BigEndian.Uint16(data[:2]) & 0x0fff
+       e.BaseLayer = BaseLayer{data[:2], data[2:]}
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (e *EtherIP) CanDecode() gopacket.LayerClass {
+       return LayerTypeEtherIP
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (e *EtherIP) NextLayerType() gopacket.LayerType {
+       return LayerTypeEthernet
+}
+
+func decodeEtherIP(data []byte, p gopacket.PacketBuilder) error {
+       e := &EtherIP{}
+       return decodingLayerDecoder(e, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/ethernet.go b/vendor/github.com/google/gopacket/layers/ethernet.go
new file mode 100644 (file)
index 0000000..4eebf8c
--- /dev/null
@@ -0,0 +1,122 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "github.com/google/gopacket"
+       "net"
+)
+
+// EthernetBroadcast is the broadcast MAC address used by Ethernet.
+var EthernetBroadcast = net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
+
+// Ethernet is the layer for Ethernet frame headers.
+type Ethernet struct {
+       BaseLayer
+       SrcMAC, DstMAC net.HardwareAddr
+       EthernetType   EthernetType
+       // Length is only set if a length field exists within this header.  Ethernet
+       // headers follow two different standards, one that uses an EthernetType, the
+       // other which defines a length the follows with a LLC header (802.3).  If the
+       // former is the case, we set EthernetType and Length stays 0.  In the latter
+       // case, we set Length and EthernetType = EthernetTypeLLC.
+       Length uint16
+}
+
+// LayerType returns LayerTypeEthernet
+func (e *Ethernet) LayerType() gopacket.LayerType { return LayerTypeEthernet }
+
+func (e *Ethernet) LinkFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointMAC, e.SrcMAC, e.DstMAC)
+}
+
+func (eth *Ethernet) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 14 {
+               return errors.New("Ethernet packet too small")
+       }
+       eth.DstMAC = net.HardwareAddr(data[0:6])
+       eth.SrcMAC = net.HardwareAddr(data[6:12])
+       eth.EthernetType = EthernetType(binary.BigEndian.Uint16(data[12:14]))
+       eth.BaseLayer = BaseLayer{data[:14], data[14:]}
+       if eth.EthernetType < 0x0600 {
+               eth.Length = uint16(eth.EthernetType)
+               eth.EthernetType = EthernetTypeLLC
+               if cmp := len(eth.Payload) - int(eth.Length); cmp < 0 {
+                       df.SetTruncated()
+               } else if cmp > 0 {
+                       // Strip off bytes at the end, since we have too many bytes
+                       eth.Payload = eth.Payload[:len(eth.Payload)-cmp]
+               }
+               //      fmt.Println(eth)
+       }
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (eth *Ethernet) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       if len(eth.DstMAC) != 6 {
+               return fmt.Errorf("invalid dst MAC: %v", eth.DstMAC)
+       }
+       if len(eth.SrcMAC) != 6 {
+               return fmt.Errorf("invalid src MAC: %v", eth.SrcMAC)
+       }
+       payload := b.Bytes()
+       bytes, err := b.PrependBytes(14)
+       if err != nil {
+               return err
+       }
+       copy(bytes, eth.DstMAC)
+       copy(bytes[6:], eth.SrcMAC)
+       if eth.Length != 0 || eth.EthernetType == EthernetTypeLLC {
+               if opts.FixLengths {
+                       eth.Length = uint16(len(payload))
+               }
+               if eth.EthernetType != EthernetTypeLLC {
+                       return fmt.Errorf("ethernet type %v not compatible with length value %v", eth.EthernetType, eth.Length)
+               } else if eth.Length > 0x0600 {
+                       return fmt.Errorf("invalid ethernet length %v", eth.Length)
+               }
+               binary.BigEndian.PutUint16(bytes[12:], eth.Length)
+       } else {
+               binary.BigEndian.PutUint16(bytes[12:], uint16(eth.EthernetType))
+       }
+       length := len(b.Bytes())
+       if length < 60 {
+               // Pad out to 60 bytes.
+               padding, err := b.AppendBytes(60 - length)
+               if err != nil {
+                       return err
+               }
+               copy(padding, lotsOfZeros[:])
+       }
+       return nil
+}
+
+func (eth *Ethernet) CanDecode() gopacket.LayerClass {
+       return LayerTypeEthernet
+}
+
+func (eth *Ethernet) NextLayerType() gopacket.LayerType {
+       return eth.EthernetType.LayerType()
+}
+
+func decodeEthernet(data []byte, p gopacket.PacketBuilder) error {
+       eth := &Ethernet{}
+       err := eth.DecodeFromBytes(data, p)
+       if err != nil {
+               return err
+       }
+       p.AddLayer(eth)
+       p.SetLinkLayer(eth)
+       return p.NextDecoder(eth.EthernetType)
+}
diff --git a/vendor/github.com/google/gopacket/layers/fddi.go b/vendor/github.com/google/gopacket/layers/fddi.go
new file mode 100644 (file)
index 0000000..ed9e195
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "net"
+)
+
+// FDDI contains the header for FDDI frames.
+type FDDI struct {
+       BaseLayer
+       FrameControl   FDDIFrameControl
+       Priority       uint8
+       SrcMAC, DstMAC net.HardwareAddr
+}
+
+// LayerType returns LayerTypeFDDI.
+func (f *FDDI) LayerType() gopacket.LayerType { return LayerTypeFDDI }
+
+// LinkFlow returns a new flow of type EndpointMAC.
+func (f *FDDI) LinkFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointMAC, f.SrcMAC, f.DstMAC)
+}
+
+func decodeFDDI(data []byte, p gopacket.PacketBuilder) error {
+       f := &FDDI{
+               FrameControl: FDDIFrameControl(data[0] & 0xF8),
+               Priority:     data[0] & 0x07,
+               SrcMAC:       net.HardwareAddr(data[1:7]),
+               DstMAC:       net.HardwareAddr(data[7:13]),
+               BaseLayer:    BaseLayer{data[:13], data[13:]},
+       }
+       p.SetLinkLayer(f)
+       p.AddLayer(f)
+       return p.NextDecoder(f.FrameControl)
+}
diff --git a/vendor/github.com/google/gopacket/layers/gen.go b/vendor/github.com/google/gopacket/layers/gen.go
new file mode 100644 (file)
index 0000000..ab7a0c0
--- /dev/null
@@ -0,0 +1,109 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build ignore
+
+// This binary pulls known ports from IANA, and uses them to populate
+// iana_ports.go's TCPPortNames and UDPPortNames maps.
+//
+//  go run gen.go | gofmt > iana_ports.go
+package main
+
+import (
+       "bytes"
+       "encoding/xml"
+       "flag"
+       "fmt"
+       "io/ioutil"
+       "net/http"
+       "os"
+       "strconv"
+       "time"
+)
+
+const fmtString = `// Copyright 2012 Google, Inc. All rights reserved.
+
+package layers
+
+// Created by gen.go, don't edit manually
+// Generated at %s
+// Fetched from %q
+
+// TCPPortNames contains the port names for all TCP ports.
+var TCPPortNames = tcpPortNames
+
+// UDPPortNames contains the port names for all UDP ports.
+var UDPPortNames = udpPortNames
+
+// SCTPPortNames contains the port names for all SCTP ports.
+var SCTPPortNames = sctpPortNames
+
+var tcpPortNames = map[TCPPort]string{
+%s}
+var udpPortNames = map[UDPPort]string{
+%s}
+var sctpPortNames = map[SCTPPort]string{
+%s}
+`
+
+var url = flag.String("url", "http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml", "URL to grab port numbers from")
+
+func main() {
+       fmt.Fprintf(os.Stderr, "Fetching ports from %q\n", *url)
+       resp, err := http.Get(*url)
+       if err != nil {
+               panic(err)
+       }
+       defer resp.Body.Close()
+       body, err := ioutil.ReadAll(resp.Body)
+       if err != nil {
+               panic(err)
+       }
+       fmt.Fprintln(os.Stderr, "Parsing XML")
+       var registry struct {
+               Records []struct {
+                       Protocol string `xml:"protocol"`
+                       Number   string `xml:"number"`
+                       Name     string `xml:"name"`
+               } `xml:"record"`
+       }
+       xml.Unmarshal(body, &registry)
+       var tcpPorts bytes.Buffer
+       var udpPorts bytes.Buffer
+       var sctpPorts bytes.Buffer
+       done := map[string]map[int]bool{
+               "tcp":  map[int]bool{},
+               "udp":  map[int]bool{},
+               "sctp": map[int]bool{},
+       }
+       for _, r := range registry.Records {
+               port, err := strconv.Atoi(r.Number)
+               if err != nil {
+                       continue
+               }
+               if r.Name == "" {
+                       continue
+               }
+               var b *bytes.Buffer
+               switch r.Protocol {
+               case "tcp":
+                       b = &tcpPorts
+               case "udp":
+                       b = &udpPorts
+               case "sctp":
+                       b = &sctpPorts
+               default:
+                       continue
+               }
+               if done[r.Protocol][port] {
+                       continue
+               }
+               done[r.Protocol][port] = true
+               fmt.Fprintf(b, "\t%d: %q,\n", port, r.Name)
+       }
+       fmt.Fprintln(os.Stderr, "Writing results to stdout")
+       fmt.Printf(fmtString, time.Now(), *url, tcpPorts.String(), udpPorts.String(), sctpPorts.String())
+}
diff --git a/vendor/github.com/google/gopacket/layers/gen_linted.sh b/vendor/github.com/google/gopacket/layers/gen_linted.sh
new file mode 100644 (file)
index 0000000..75c701f
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+for i in *.go; do golint $i | grep -q . || echo $i; done > .linted
diff --git a/vendor/github.com/google/gopacket/layers/geneve.go b/vendor/github.com/google/gopacket/layers/geneve.go
new file mode 100644 (file)
index 0000000..6dc05cf
--- /dev/null
@@ -0,0 +1,98 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+
+       "github.com/google/gopacket"
+)
+
+// Geneve is specifed here https://tools.ietf.org/html/draft-ietf-nvo3-geneve-03
+// Geneve Header:
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |        Virtual Network Identifier (VNI)       |    Reserved   |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                    Variable Length Options                    |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+type Geneve struct {
+       BaseLayer
+       Version        uint8        // 2 bits
+       OptionsLength  uint8        // 6 bits
+       OAMPacket      bool         // 1 bits
+       CriticalOption bool         // 1 bits
+       Protocol       EthernetType // 16 bits
+       VNI            uint32       // 24bits
+       Options        []*GeneveOption
+}
+
+// Geneve Tunnel Options
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |          Option Class         |      Type     |R|R|R| Length  |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                      Variable Option Data                     |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+type GeneveOption struct {
+       Class  uint16 // 16 bits
+       Type   uint8  // 8 bits
+       Flags  uint8  // 3 bits
+       Length uint8  // 5 bits
+       Data   []byte
+}
+
+// LayerType returns LayerTypeGeneve
+func (gn *Geneve) LayerType() gopacket.LayerType { return LayerTypeGeneve }
+
+func decodeGeneveOption(data []byte, gn *Geneve) (*GeneveOption, uint8) {
+       opt := &GeneveOption{}
+
+       opt.Class = binary.BigEndian.Uint16(data[0:1])
+       opt.Type = data[2]
+       opt.Flags = data[3] >> 4
+       opt.Length = data[3] & 0xf
+
+       copy(opt.Data, data[4:opt.Length])
+
+       return opt, 4 + opt.Length
+}
+
+func (gn *Geneve) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       gn.Version = data[0] >> 7
+       gn.OptionsLength = data[0] & 0x3f
+
+       gn.OAMPacket = data[1]&0x80 > 0
+       gn.CriticalOption = data[1]&0x40 > 0
+       gn.Protocol = EthernetType(binary.BigEndian.Uint16(data[2:4]))
+
+       var buf [4]byte
+       copy(buf[1:], data[4:7])
+       gn.VNI = binary.BigEndian.Uint32(buf[:])
+
+       offset, length := uint8(8), gn.OptionsLength
+       for length > 0 {
+               opt, len := decodeGeneveOption(data[offset:], gn)
+               gn.Options = append(gn.Options, opt)
+
+               length -= len
+               offset += len
+       }
+
+       gn.BaseLayer = BaseLayer{data[:offset], data[offset:]}
+
+       return nil
+}
+
+func (gn *Geneve) NextLayerType() gopacket.LayerType {
+       return gn.Protocol.LayerType()
+}
+
+func decodeGeneve(data []byte, p gopacket.PacketBuilder) error {
+       gn := &Geneve{}
+       return decodingLayerDecoder(gn, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/geneve_test.go b/vendor/github.com/google/gopacket/layers/geneve_test.go
new file mode 100644 (file)
index 0000000..ee34d52
--- /dev/null
@@ -0,0 +1,108 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "reflect"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+var testPacketGeneve1 = []byte{
+       0x00, 0x04, 0x00, 0x01, 0x00, 0x06, 0xfa, 0x16, 0x3e, 0x23, 0xd3, 0x42,
+       0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x00, 0x86, 0x87, 0x39, 0x40, 0x00,
+       0x40, 0x11, 0x31, 0x35, 0xc0, 0xa8, 0x00, 0x53, 0xc0, 0xa8, 0x00, 0x55,
+       0x31, 0x57, 0x17, 0xc1, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x65, 0x58,
+       0x00, 0x00, 0x00, 0x00, 0xba, 0x09, 0x60, 0x5f, 0xa0, 0x91, 0xa2, 0xfe,
+       0x54, 0x48, 0x88, 0x51, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x01, 0xf6,
+       0x40, 0x00, 0x40, 0x01, 0xb7, 0x5f, 0xc0, 0xa8, 0x00, 0x01, 0xc0, 0xa8,
+       0x00, 0x02, 0x08, 0x00, 0x79, 0xdf, 0x0c, 0xfa, 0x63, 0xc4, 0x03, 0x0b,
+       0x50, 0x58, 0x00, 0x00, 0x00, 0x00, 0xee, 0x2b, 0x0d, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
+       0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
+       0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
+       0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+var testPacketGeneve2 = []byte{
+       0x12, 0xbe, 0x4e, 0xb6, 0xa7, 0xc7, 0x02, 0x88, 0x0a, 0x81, 0xbd, 0x6d,
+       0x08, 0x00, 0x45, 0x00, 0x00, 0x86, 0x20, 0xf2, 0x00, 0x00, 0x40, 0x11,
+       0x01, 0x52, 0xac, 0x10, 0x00, 0x01, 0xac, 0x10, 0x00, 0x02, 0x40, 0xa6,
+       0x17, 0xc1, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x65, 0x58, 0x00, 0x00,
+       0x0a, 0x00, 0xd2, 0x8c, 0xdb, 0x12, 0x53, 0xd5, 0x8e, 0xab, 0xa2, 0xa5,
+       0x02, 0xf7, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x38, 0x1a, 0x40, 0x00,
+       0x40, 0x01, 0x81, 0x3b, 0xc0, 0xa8, 0x00, 0x01, 0xc0, 0xa8, 0x00, 0x02,
+       0x08, 0x00, 0xdd, 0x9d, 0x7e, 0xde, 0x02, 0xc3, 0xcb, 0x07, 0x51, 0x58,
+       0x00, 0x00, 0x00, 0x00, 0xba, 0x8d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b,
+       0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+       0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
+       0x34, 0x35, 0x36, 0x37,
+}
+
+func TestDecodeGeneve1(t *testing.T) {
+       p := gopacket.NewPacket(testPacketGeneve1, LinkTypeLinuxSLL, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{
+               LayerTypeLinuxSLL, LayerTypeIPv4, LayerTypeUDP, LayerTypeGeneve,
+               LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload,
+       }, t)
+       if got, ok := p.Layer(LayerTypeGeneve).(*Geneve); ok {
+               want := &Geneve{
+                       BaseLayer: BaseLayer{
+                               Contents: testPacketGeneve1[44:52],
+                               Payload:  testPacketGeneve1[52:150],
+                       },
+                       Version:        0x0,
+                       OptionsLength:  0x0,
+                       OAMPacket:      false,
+                       CriticalOption: false,
+                       Protocol:       EthernetTypeTransparentEthernetBridging,
+                       VNI:            0x0,
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("Geneve layer mismatch, \nwant %#v\ngot  %#v\n", want, got)
+               }
+       }
+}
+
+func TestDecodeGeneve2(t *testing.T) {
+       p := gopacket.NewPacket(testPacketGeneve2, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{
+               LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeGeneve,
+               LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload,
+       }, t)
+       if got, ok := p.Layer(LayerTypeGeneve).(*Geneve); ok {
+               want := &Geneve{
+                       BaseLayer: BaseLayer{
+                               Contents: testPacketGeneve2[42:50],
+                               Payload:  testPacketGeneve2[50:148],
+                       },
+                       Version:        0x0,
+                       OptionsLength:  0x0,
+                       OAMPacket:      false,
+                       CriticalOption: false,
+                       Protocol:       EthernetTypeTransparentEthernetBridging,
+                       VNI:            0xa,
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("Geneve layer mismatch, \nwant %#v\ngot  %#v\n", want, got)
+               }
+       }
+}
+
+func BenchmarkDecodeGeneve1(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketGeneve1, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/gre.go b/vendor/github.com/google/gopacket/layers/gre.go
new file mode 100644 (file)
index 0000000..15d5290
--- /dev/null
@@ -0,0 +1,185 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+
+       "github.com/google/gopacket"
+)
+
+// GRE is a Generic Routing Encapsulation header.
+type GRE struct {
+       BaseLayer
+       ChecksumPresent, RoutingPresent, KeyPresent, SeqPresent, StrictSourceRoute bool
+       RecursionControl, Flags, Version                                           uint8
+       Protocol                                                                   EthernetType
+       Checksum, Offset                                                           uint16
+       Key, Seq                                                                   uint32
+       *GRERouting
+}
+
+// GRERouting is GRE routing information, present if the RoutingPresent flag is
+// set.
+type GRERouting struct {
+       AddressFamily        uint16
+       SREOffset, SRELength uint8
+       RoutingInformation   []byte
+       Next                 *GRERouting
+}
+
+// LayerType returns gopacket.LayerTypeGRE.
+func (g *GRE) LayerType() gopacket.LayerType { return LayerTypeGRE }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (g *GRE) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       g.ChecksumPresent = data[0]&0x80 != 0
+       g.RoutingPresent = data[0]&0x40 != 0
+       g.KeyPresent = data[0]&0x20 != 0
+       g.SeqPresent = data[0]&0x10 != 0
+       g.StrictSourceRoute = data[0]&0x08 != 0
+       g.RecursionControl = data[0] & 0x7
+       g.Flags = data[1] >> 3
+       g.Version = data[1] & 0x7
+       g.Protocol = EthernetType(binary.BigEndian.Uint16(data[2:4]))
+       offset := 4
+       if g.ChecksumPresent || g.RoutingPresent {
+               g.Checksum = binary.BigEndian.Uint16(data[offset : offset+2])
+               g.Offset = binary.BigEndian.Uint16(data[offset+2 : offset+4])
+               offset += 4
+       }
+       if g.KeyPresent {
+               g.Key = binary.BigEndian.Uint32(data[offset : offset+4])
+               offset += 4
+       }
+       if g.SeqPresent {
+               g.Seq = binary.BigEndian.Uint32(data[offset : offset+4])
+               offset += 4
+       }
+       if g.RoutingPresent {
+               tail := &g.GRERouting
+               for {
+                       sre := &GRERouting{
+                               AddressFamily: binary.BigEndian.Uint16(data[offset : offset+2]),
+                               SREOffset:     data[offset+2],
+                               SRELength:     data[offset+3],
+                       }
+                       sre.RoutingInformation = data[offset+4 : offset+4+int(sre.SRELength)]
+                       offset += 4 + int(sre.SRELength)
+                       if sre.AddressFamily == 0 && sre.SRELength == 0 {
+                               break
+                       }
+                       (*tail) = sre
+                       tail = &sre.Next
+               }
+       }
+       g.BaseLayer = BaseLayer{data[:offset], data[offset:]}
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the SerializationBuffer,
+// implementing gopacket.SerializableLayer. See the docs for gopacket.SerializableLayer for more info.
+func (g *GRE) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       size := 4
+       if g.ChecksumPresent || g.RoutingPresent {
+               size += 4
+       }
+       if g.KeyPresent {
+               size += 4
+       }
+       if g.SeqPresent {
+               size += 4
+       }
+       if g.RoutingPresent {
+               r := g.GRERouting
+               for r != nil {
+                       size += 4 + int(r.SRELength)
+                       r = r.Next
+               }
+               size += 4
+       }
+       buf, err := b.PrependBytes(size)
+       if err != nil {
+               return err
+       }
+       // Reset any potentially dirty memory in the first 2 bytes, as these use OR to set flags.
+       buf[0] = 0
+       buf[1] = 0
+       if g.ChecksumPresent {
+               buf[0] |= 0x80
+       }
+       if g.RoutingPresent {
+               buf[0] |= 0x40
+       }
+       if g.KeyPresent {
+               buf[0] |= 0x20
+       }
+       if g.SeqPresent {
+               buf[0] |= 0x10
+       }
+       if g.StrictSourceRoute {
+               buf[0] |= 0x08
+       }
+       buf[0] |= g.RecursionControl
+       buf[1] |= g.Flags << 3
+       buf[1] |= g.Version
+       binary.BigEndian.PutUint16(buf[2:4], uint16(g.Protocol))
+       offset := 4
+       if g.ChecksumPresent || g.RoutingPresent {
+               // Don't write the checksum value yet, as we may need to compute it,
+               // which requires the entire header be complete.
+               // Instead we zeroize the memory in case it is dirty.
+               buf[offset] = 0
+               buf[offset+1] = 0
+               binary.BigEndian.PutUint16(buf[offset+2:offset+4], g.Offset)
+               offset += 4
+       }
+       if g.KeyPresent {
+               binary.BigEndian.PutUint32(buf[offset:offset+4], g.Key)
+               offset += 4
+       }
+       if g.SeqPresent {
+               binary.BigEndian.PutUint32(buf[offset:offset+4], g.Seq)
+               offset += 4
+       }
+       if g.RoutingPresent {
+               sre := g.GRERouting
+               for sre != nil {
+                       binary.BigEndian.PutUint16(buf[offset:offset+2], sre.AddressFamily)
+                       buf[offset+2] = sre.SREOffset
+                       buf[offset+3] = sre.SRELength
+                       copy(buf[offset+4:offset+4+int(sre.SRELength)], sre.RoutingInformation)
+                       offset += 4 + int(sre.SRELength)
+                       sre = sre.Next
+               }
+               // Terminate routing field with a "NULL" SRE.
+               binary.BigEndian.PutUint32(buf[offset:offset+4], 0)
+       }
+       if g.ChecksumPresent {
+               if opts.ComputeChecksums {
+                       g.Checksum = tcpipChecksum(b.Bytes(), 0)
+               }
+
+               binary.BigEndian.PutUint16(buf[4:6], g.Checksum)
+       }
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (g *GRE) CanDecode() gopacket.LayerClass {
+       return LayerTypeGRE
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (g *GRE) NextLayerType() gopacket.LayerType {
+       return g.Protocol.LayerType()
+}
+
+func decodeGRE(data []byte, p gopacket.PacketBuilder) error {
+       g := &GRE{}
+       return decodingLayerDecoder(g, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/gre_test.go b/vendor/github.com/google/gopacket/layers/gre_test.go
new file mode 100644 (file)
index 0000000..af2e38e
--- /dev/null
@@ -0,0 +1,389 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+       "fmt"
+       "net"
+       "reflect"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+// testPacketGRE is the packet:
+//   15:08:08.003196 IP 192.168.1.1 > 192.168.1.2: GREv0, length 88: IP 172.16.1.1 > 172.16.2.1: ICMP echo request, id 4724, seq 1, length 64
+//      0x0000:  3a56 6b69 595e 8e7a 12c3 a971 0800 4500  :VkiY^.z...q..E.
+//      0x0010:  006c 843c 4000 402f 32d3 c0a8 0101 c0a8  .l.<@.@/2.......
+//      0x0020:  0102 0000 0800 4500 0054 0488 4000 4001  ......E..T..@.@.
+//      0x0030:  dafe ac10 0101 ac10 0201 0800 82c4 1274  ...............t
+//      0x0040:  0001 c892 a354 0000 0000 380c 0000 0000  .....T....8.....
+//      0x0050:  0000 1011 1213 1415 1617 1819 1a1b 1c1d  ................
+//      0x0060:  1e1f 2021 2223 2425 2627 2829 2a2b 2c2d  ...!"#$%&'()*+,-
+//      0x0070:  2e2f 3031 3233 3435 3637                 ./01234567
+var testPacketGRE = []byte{
+       0x3a, 0x56, 0x6b, 0x69, 0x59, 0x5e, 0x8e, 0x7a, 0x12, 0xc3, 0xa9, 0x71, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x6c, 0x84, 0x3c, 0x40, 0x00, 0x40, 0x2f, 0x32, 0xd3, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,
+       0x01, 0x02, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x04, 0x88, 0x40, 0x00, 0x40, 0x01,
+       0xda, 0xfe, 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x02, 0x01, 0x08, 0x00, 0x82, 0xc4, 0x12, 0x74,
+       0x00, 0x01, 0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketGRE(t *testing.T) {
+       p := gopacket.NewPacket(testPacketGRE, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       if got, ok := p.Layer(LayerTypeGRE).(*GRE); ok {
+               want := &GRE{
+                       BaseLayer: BaseLayer{testPacketGRE[34:38], testPacketGRE[38:]},
+                       Protocol:  EthernetTypeIPv4,
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("GRE layer mismatch, \nwant %#v\ngot  %#v\n", want, got)
+               }
+       }
+}
+
+func BenchmarkDecodePacketGRE(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketGRE, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+var testIPv4OverGRE = []gopacket.SerializableLayer{
+       &Ethernet{
+               SrcMAC:       net.HardwareAddr{142, 122, 18, 195, 169, 113},
+               DstMAC:       net.HardwareAddr{58, 86, 107, 105, 89, 94},
+               EthernetType: EthernetTypeIPv4,
+       },
+       &IPv4{
+               Version:  4,
+               SrcIP:    net.IP{192, 168, 1, 1},
+               DstIP:    net.IP{192, 168, 1, 2},
+               Protocol: IPProtocolGRE,
+               Flags:    IPv4DontFragment,
+               TTL:      64,
+               Id:       33852,
+               IHL:      5,
+       },
+       &GRE{
+               Protocol: EthernetTypeIPv4,
+       },
+       &IPv4{
+               Version:  4,
+               SrcIP:    net.IP{172, 16, 1, 1},
+               DstIP:    net.IP{172, 16, 2, 1},
+               Protocol: IPProtocolICMPv4,
+               Flags:    IPv4DontFragment,
+               TTL:      64,
+               IHL:      5,
+               Id:       1160,
+       },
+       &ICMPv4{
+               TypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),
+               Id:       4724,
+               Seq:      1,
+       },
+       gopacket.Payload{
+               0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+               0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+               0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+       },
+}
+
+func TestIPv4OverGREEncode(t *testing.T) {
+       b := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{
+               ComputeChecksums: true,
+               FixLengths:       true,
+       }
+       if err := gopacket.SerializeLayers(b, opts, testIPv4OverGRE...); err != nil {
+               t.Errorf("Unable to serialize: %v", err)
+       }
+       p := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       if got, want := b.Bytes(), testPacketGRE; !reflect.DeepEqual(want, got) {
+               t.Errorf("Encoding mismatch, \nwant: %v\ngot %v\n", want, got)
+       }
+}
+
+func BenchmarkEncodePacketGRE(b *testing.B) {
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{
+               ComputeChecksums: true,
+               FixLengths:       true,
+       }
+       for i := 0; i < b.N; i++ {
+               gopacket.SerializeLayers(buf, opts, testIPv4OverGRE...)
+               buf.Clear()
+       }
+}
+
+// testPacketEthernetOverGRE is the packet:
+//   11:01:38.124768 IP 192.168.1.1 > 192.168.1.2: GREv0, length 102: IP 172.16.1.1 > 172.16.1.2: ICMP echo request, id 3842, seq 1, length 64
+//      0x0000:  ea6b 4cd3 5513 d6b9 d880 56ef 0800 4500  .kL.U.....V...E.
+//      0x0010:  007a 0acd 4000 402f ac34 c0a8 0101 c0a8  .z..@.@/.4......
+//      0x0020:  0102 0000 6558 aa6a 36e6 c630 6e32 3ec7  ....eX.j6..0n2>.
+//      0x0030:  9def 0800 4500 0054 d970 4000 4001 0715  ....E..T.p@.@...
+//      0x0040:  ac10 0101 ac10 0102 0800 3f15 0f02 0001  ..........?.....
+//      0x0050:  82d9 b154 0000 0000 b5e6 0100 0000 0000  ...T............
+//      0x0060:  1011 1213 1415 1617 1819 1a1b 1c1d 1e1f  ................
+//      0x0070:  2021 2223 2425 2627 2829 2a2b 2c2d 2e2f  .!"#$%&'()*+,-./
+//      0x0080:  3031 3233 3435 3637                      01234567
+var testPacketEthernetOverGRE = []byte{
+       0xea, 0x6b, 0x4c, 0xd3, 0x55, 0x13, 0xd6, 0xb9, 0xd8, 0x80, 0x56, 0xef, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x7a, 0x0a, 0xcd, 0x40, 0x00, 0x40, 0x2f, 0xac, 0x34, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,
+       0x01, 0x02, 0x00, 0x00, 0x65, 0x58, 0xaa, 0x6a, 0x36, 0xe6, 0xc6, 0x30, 0x6e, 0x32, 0x3e, 0xc7,
+       0x9d, 0xef, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0xd9, 0x70, 0x40, 0x00, 0x40, 0x01, 0x07, 0x15,
+       0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x01, 0x02, 0x08, 0x00, 0x3f, 0x15, 0x0f, 0x02, 0x00, 0x01,
+       0x82, 0xd9, 0xb1, 0x54, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+       0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+       0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketEthernetOverGRE(t *testing.T) {
+       p := gopacket.NewPacket(testPacketEthernetOverGRE, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       if got, ok := p.Layer(LayerTypeGRE).(*GRE); ok {
+               want := &GRE{
+                       BaseLayer: BaseLayer{testPacketEthernetOverGRE[34:38], testPacketEthernetOverGRE[38:]},
+                       Protocol:  EthernetTypeTransparentEthernetBridging,
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("GRE layer mismatch, \nwant %#v\ngot  %#v\n", want, got)
+               }
+       }
+}
+
+func BenchmarkDecodePacketEthernetOverGRE(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketEthernetOverGRE, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+var testEthernetOverGRE = []gopacket.SerializableLayer{
+       &Ethernet{
+               SrcMAC:       net.HardwareAddr{0xd6, 0xb9, 0xd8, 0x80, 0x56, 0xef},
+               DstMAC:       net.HardwareAddr{0xea, 0x6b, 0x4c, 0xd3, 0x55, 0x13},
+               EthernetType: EthernetTypeIPv4,
+       },
+       &IPv4{
+               Version:  4,
+               SrcIP:    net.IP{192, 168, 1, 1},
+               DstIP:    net.IP{192, 168, 1, 2},
+               Protocol: IPProtocolGRE,
+               Flags:    IPv4DontFragment,
+               TTL:      64,
+               Id:       2765,
+               IHL:      5,
+       },
+       &GRE{
+               Protocol: EthernetTypeTransparentEthernetBridging,
+       },
+       &Ethernet{
+               SrcMAC:       net.HardwareAddr{0x6e, 0x32, 0x3e, 0xc7, 0x9d, 0xef},
+               DstMAC:       net.HardwareAddr{0xaa, 0x6a, 0x36, 0xe6, 0xc6, 0x30},
+               EthernetType: EthernetTypeIPv4,
+       },
+       &IPv4{
+               Version:  4,
+               SrcIP:    net.IP{172, 16, 1, 1},
+               DstIP:    net.IP{172, 16, 1, 2},
+               Protocol: IPProtocolICMPv4,
+               Flags:    IPv4DontFragment,
+               TTL:      64,
+               IHL:      5,
+               Id:       55664,
+       },
+       &ICMPv4{
+               TypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),
+               Id:       3842,
+               Seq:      1,
+       },
+       gopacket.Payload{
+               0x82, 0xd9, 0xb1, 0x54, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+               0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+               0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+       },
+}
+
+func TestEthernetOverGREEncode(t *testing.T) {
+       b := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{
+               ComputeChecksums: true,
+               FixLengths:       true,
+       }
+       if err := gopacket.SerializeLayers(b, opts, testEthernetOverGRE...); err != nil {
+               t.Errorf("Unable to serialize: %v", err)
+       }
+       p := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       if got, want := b.Bytes(), testPacketEthernetOverGRE; !reflect.DeepEqual(want, got) {
+               t.Errorf("Encoding mismatch, \nwant: %v\ngot %v\n", want, got)
+       }
+}
+
+func BenchmarkEncodePacketEthernetOverGRE(b *testing.B) {
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{
+               ComputeChecksums: true,
+               FixLengths:       true,
+       }
+       for i := 0; i < b.N; i++ {
+               gopacket.SerializeLayers(buf, opts, testEthernetOverGRE...)
+               buf.Clear()
+       }
+}
+
+var testGREChecksum = map[uint16][]gopacket.SerializableLayer{
+       0x77ff: {
+               &Ethernet{
+                       SrcMAC:       net.HardwareAddr{0xc2, 0x00, 0x57, 0x75, 0x00, 0x00},
+                       DstMAC:       net.HardwareAddr{0xc2, 0x01, 0x57, 0x75, 0x00, 0x00},
+                       EthernetType: EthernetTypeIPv4,
+               },
+               &IPv4{
+                       Version:  4,
+                       SrcIP:    net.IP{10, 0, 0, 1},
+                       DstIP:    net.IP{10, 0, 0, 2},
+                       Protocol: IPProtocolGRE,
+                       TTL:      255,
+                       Id:       10,
+                       IHL:      5,
+               },
+               &GRE{
+                       Protocol:        EthernetTypeIPv4,
+                       ChecksumPresent: true,
+               },
+               &IPv4{
+                       Version:  4,
+                       SrcIP:    net.IP{1, 1, 1, 1},
+                       DstIP:    net.IP{2, 2, 2, 2},
+                       Protocol: IPProtocolICMPv4,
+                       TTL:      255,
+                       IHL:      5,
+                       Id:       10,
+               },
+               &ICMPv4{
+                       TypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0),
+                       Id:       2,
+                       Seq:      0,
+               },
+               gopacket.Payload{
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xbe, 0x70, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+               },
+       },
+       0x8475: {
+               &Ethernet{
+                       SrcMAC:       net.HardwareAddr{0xc2, 0x00, 0x57, 0x75, 0x00, 0x00},
+                       DstMAC:       net.HardwareAddr{0xc2, 0x01, 0x57, 0x75, 0x00, 0x00},
+                       EthernetType: EthernetTypeIPv4,
+               },
+               &IPv4{
+                       Version:  4,
+                       SrcIP:    net.IP{10, 0, 0, 1},
+                       DstIP:    net.IP{10, 0, 0, 2},
+                       Protocol: IPProtocolGRE,
+                       TTL:      255,
+                       Id:       10,
+                       IHL:      5,
+               },
+               &GRE{
+                       Protocol:        EthernetTypeIPv4,
+                       ChecksumPresent: true,
+               },
+               &IPv4{
+                       Version:  4,
+                       SrcIP:    net.IP{2, 3, 4, 5},
+                       DstIP:    net.IP{2, 3, 4, 50},
+                       Protocol: IPProtocolUDP,
+                       TTL:      1,
+                       IHL:      5,
+                       Flags:    IPv4DontFragment,
+                       Id:       964,
+               },
+               &UDP{
+                       SrcPort: 41781,
+                       DstPort: 33434,
+               },
+               gopacket.Payload{
+                       0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+                       0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+               },
+       },
+}
+
+func TestGREChecksum(t *testing.T) {
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{
+               ComputeChecksums: true,
+               FixLengths:       true,
+       }
+       for cksum, packet := range testGREChecksum {
+               buf.Clear()
+               if err := setNetworkLayer(packet); err != nil {
+                       t.Errorf("Failed to set network layer: %v", err)
+                       continue
+               }
+               if err := gopacket.SerializeLayers(buf, opts, packet...); err != nil {
+                       t.Errorf("Failed to serialize packet: %v", err)
+                       continue
+               }
+               p := gopacket.NewPacket(buf.Bytes(), LinkTypeEthernet, gopacket.Default)
+               t.Log(p)
+               if p.ErrorLayer() != nil {
+                       t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+                       continue
+               }
+               if got, ok := p.Layer(LayerTypeGRE).(*GRE); ok {
+                       if got.Checksum != cksum {
+                               t.Errorf("Incorrect checksum calculated for GRE packet: want %v, got %v", cksum, got.Checksum)
+                       }
+               }
+       }
+}
+
+func setNetworkLayer(layers []gopacket.SerializableLayer) error {
+       type setNetworkLayerForChecksum interface {
+               SetNetworkLayerForChecksum(gopacket.NetworkLayer) error
+       }
+       var l gopacket.NetworkLayer
+       for _, layer := range layers {
+               if n, ok := layer.(gopacket.NetworkLayer); ok {
+                       l = n
+               }
+               if s, ok := layer.(setNetworkLayerForChecksum); ok {
+                       if l == nil {
+                               return fmt.Errorf("no enclosing network layer found before: %v", s)
+                       }
+                       if err := s.SetNetworkLayerForChecksum(l); err != nil {
+                               return fmt.Errorf("failed to set network layer(%v) on layer(%v): %v", l, s, err)
+                       }
+               }
+       }
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/iana_ports.go b/vendor/github.com/google/gopacket/layers/iana_ports.go
new file mode 100644 (file)
index 0000000..c217a69
--- /dev/null
@@ -0,0 +1,11350 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+
+package layers
+
+// Created by gen.go, don't edit manually
+// Generated at 2017-09-19 13:08:22.987239325 -0600 MDT
+// Fetched from "http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml"
+
+// TCPPortNames contains the port names for all TCP ports.
+var TCPPortNames = tcpPortNames
+
+// UDPPortNames contains the port names for all UDP ports.
+var UDPPortNames = udpPortNames
+
+// SCTPPortNames contains the port names for all SCTP ports.
+var SCTPPortNames = sctpPortNames
+
+var tcpPortNames = map[TCPPort]string{
+       1:     "tcpmux",
+       2:     "compressnet",
+       3:     "compressnet",
+       5:     "rje",
+       7:     "echo",
+       9:     "discard",
+       11:    "systat",
+       13:    "daytime",
+       17:    "qotd",
+       18:    "msp",
+       19:    "chargen",
+       20:    "ftp-data",
+       21:    "ftp",
+       22:    "ssh",
+       23:    "telnet",
+       25:    "smtp",
+       27:    "nsw-fe",
+       29:    "msg-icp",
+       31:    "msg-auth",
+       33:    "dsp",
+       37:    "time",
+       38:    "rap",
+       39:    "rlp",
+       41:    "graphics",
+       42:    "name",
+       43:    "nicname",
+       44:    "mpm-flags",
+       45:    "mpm",
+       46:    "mpm-snd",
+       48:    "auditd",
+       49:    "tacacs",
+       50:    "re-mail-ck",
+       52:    "xns-time",
+       53:    "domain",
+       54:    "xns-ch",
+       55:    "isi-gl",
+       56:    "xns-auth",
+       58:    "xns-mail",
+       62:    "acas",
+       63:    "whoispp",
+       64:    "covia",
+       65:    "tacacs-ds",
+       66:    "sql-net",
+       67:    "bootps",
+       68:    "bootpc",
+       69:    "tftp",
+       70:    "gopher",
+       71:    "netrjs-1",
+       72:    "netrjs-2",
+       73:    "netrjs-3",
+       74:    "netrjs-4",
+       76:    "deos",
+       78:    "vettcp",
+       79:    "finger",
+       80:    "http",
+       82:    "xfer",
+       83:    "mit-ml-dev",
+       84:    "ctf",
+       85:    "mit-ml-dev",
+       86:    "mfcobol",
+       88:    "kerberos",
+       89:    "su-mit-tg",
+       90:    "dnsix",
+       91:    "mit-dov",
+       92:    "npp",
+       93:    "dcp",
+       94:    "objcall",
+       95:    "supdup",
+       96:    "dixie",
+       97:    "swift-rvf",
+       98:    "tacnews",
+       99:    "metagram",
+       101:   "hostname",
+       102:   "iso-tsap",
+       103:   "gppitnp",
+       104:   "acr-nema",
+       105:   "cso",
+       106:   "3com-tsmux",
+       107:   "rtelnet",
+       108:   "snagas",
+       109:   "pop2",
+       110:   "pop3",
+       111:   "sunrpc",
+       112:   "mcidas",
+       113:   "ident",
+       115:   "sftp",
+       116:   "ansanotify",
+       117:   "uucp-path",
+       118:   "sqlserv",
+       119:   "nntp",
+       120:   "cfdptkt",
+       121:   "erpc",
+       122:   "smakynet",
+       123:   "ntp",
+       124:   "ansatrader",
+       125:   "locus-map",
+       126:   "nxedit",
+       127:   "locus-con",
+       128:   "gss-xlicen",
+       129:   "pwdgen",
+       130:   "cisco-fna",
+       131:   "cisco-tna",
+       132:   "cisco-sys",
+       133:   "statsrv",
+       134:   "ingres-net",
+       135:   "epmap",
+       136:   "profile",
+       137:   "netbios-ns",
+       138:   "netbios-dgm",
+       139:   "netbios-ssn",
+       140:   "emfis-data",
+       141:   "emfis-cntl",
+       142:   "bl-idm",
+       143:   "imap",
+       144:   "uma",
+       145:   "uaac",
+       146:   "iso-tp0",
+       147:   "iso-ip",
+       148:   "jargon",
+       149:   "aed-512",
+       150:   "sql-net",
+       151:   "hems",
+       152:   "bftp",
+       153:   "sgmp",
+       154:   "netsc-prod",
+       155:   "netsc-dev",
+       156:   "sqlsrv",
+       157:   "knet-cmp",
+       158:   "pcmail-srv",
+       159:   "nss-routing",
+       160:   "sgmp-traps",
+       161:   "snmp",
+       162:   "snmptrap",
+       163:   "cmip-man",
+       164:   "cmip-agent",
+       165:   "xns-courier",
+       166:   "s-net",
+       167:   "namp",
+       168:   "rsvd",
+       169:   "send",
+       170:   "print-srv",
+       171:   "multiplex",
+       172:   "cl-1",
+       173:   "xyplex-mux",
+       174:   "mailq",
+       175:   "vmnet",
+       176:   "genrad-mux",
+       177:   "xdmcp",
+       178:   "nextstep",
+       179:   "bgp",
+       180:   "ris",
+       181:   "unify",
+       182:   "audit",
+       183:   "ocbinder",
+       184:   "ocserver",
+       185:   "remote-kis",
+       186:   "kis",
+       187:   "aci",
+       188:   "mumps",
+       189:   "qft",
+       190:   "gacp",
+       191:   "prospero",
+       192:   "osu-nms",
+       193:   "srmp",
+       194:   "irc",
+       195:   "dn6-nlm-aud",
+       196:   "dn6-smm-red",
+       197:   "dls",
+       198:   "dls-mon",
+       199:   "smux",
+       200:   "src",
+       201:   "at-rtmp",
+       202:   "at-nbp",
+       203:   "at-3",
+       204:   "at-echo",
+       205:   "at-5",
+       206:   "at-zis",
+       207:   "at-7",
+       208:   "at-8",
+       209:   "qmtp",
+       210:   "z39-50",
+       211:   "914c-g",
+       212:   "anet",
+       213:   "ipx",
+       214:   "vmpwscs",
+       215:   "softpc",
+       216:   "CAIlic",
+       217:   "dbase",
+       218:   "mpp",
+       219:   "uarps",
+       220:   "imap3",
+       221:   "fln-spx",
+       222:   "rsh-spx",
+       223:   "cdc",
+       224:   "masqdialer",
+       242:   "direct",
+       243:   "sur-meas",
+       244:   "inbusiness",
+       245:   "link",
+       246:   "dsp3270",
+       247:   "subntbcst-tftp",
+       248:   "bhfhs",
+       256:   "rap",
+       257:   "set",
+       259:   "esro-gen",
+       260:   "openport",
+       261:   "nsiiops",
+       262:   "arcisdms",
+       263:   "hdap",
+       264:   "bgmp",
+       265:   "x-bone-ctl",
+       266:   "sst",
+       267:   "td-service",
+       268:   "td-replica",
+       269:   "manet",
+       271:   "pt-tls",
+       280:   "http-mgmt",
+       281:   "personal-link",
+       282:   "cableport-ax",
+       283:   "rescap",
+       284:   "corerjd",
+       286:   "fxp",
+       287:   "k-block",
+       308:   "novastorbakcup",
+       309:   "entrusttime",
+       310:   "bhmds",
+       311:   "asip-webadmin",
+       312:   "vslmp",
+       313:   "magenta-logic",
+       314:   "opalis-robot",
+       315:   "dpsi",
+       316:   "decauth",
+       317:   "zannet",
+       318:   "pkix-timestamp",
+       319:   "ptp-event",
+       320:   "ptp-general",
+       321:   "pip",
+       322:   "rtsps",
+       323:   "rpki-rtr",
+       324:   "rpki-rtr-tls",
+       333:   "texar",
+       344:   "pdap",
+       345:   "pawserv",
+       346:   "zserv",
+       347:   "fatserv",
+       348:   "csi-sgwp",
+       349:   "mftp",
+       350:   "matip-type-a",
+       351:   "matip-type-b",
+       352:   "dtag-ste-sb",
+       353:   "ndsauth",
+       354:   "bh611",
+       355:   "datex-asn",
+       356:   "cloanto-net-1",
+       357:   "bhevent",
+       358:   "shrinkwrap",
+       359:   "nsrmp",
+       360:   "scoi2odialog",
+       361:   "semantix",
+       362:   "srssend",
+       363:   "rsvp-tunnel",
+       364:   "aurora-cmgr",
+       365:   "dtk",
+       366:   "odmr",
+       367:   "mortgageware",
+       368:   "qbikgdp",
+       369:   "rpc2portmap",
+       370:   "codaauth2",
+       371:   "clearcase",
+       372:   "ulistproc",
+       373:   "legent-1",
+       374:   "legent-2",
+       375:   "hassle",
+       376:   "nip",
+       377:   "tnETOS",
+       378:   "dsETOS",
+       379:   "is99c",
+       380:   "is99s",
+       381:   "hp-collector",
+       382:   "hp-managed-node",
+       383:   "hp-alarm-mgr",
+       384:   "arns",
+       385:   "ibm-app",
+       386:   "asa",
+       387:   "aurp",
+       388:   "unidata-ldm",
+       389:   "ldap",
+       390:   "uis",
+       391:   "synotics-relay",
+       392:   "synotics-broker",
+       393:   "meta5",
+       394:   "embl-ndt",
+       395:   "netcp",
+       396:   "netware-ip",
+       397:   "mptn",
+       398:   "kryptolan",
+       399:   "iso-tsap-c2",
+       400:   "osb-sd",
+       401:   "ups",
+       402:   "genie",
+       403:   "decap",
+       404:   "nced",
+       405:   "ncld",
+       406:   "imsp",
+       407:   "timbuktu",
+       408:   "prm-sm",
+       409:   "prm-nm",
+       410:   "decladebug",
+       411:   "rmt",
+       412:   "synoptics-trap",
+       413:   "smsp",
+       414:   "infoseek",
+       415:   "bnet",
+       416:   "silverplatter",
+       417:   "onmux",
+       418:   "hyper-g",
+       419:   "ariel1",
+       420:   "smpte",
+       421:   "ariel2",
+       422:   "ariel3",
+       423:   "opc-job-start",
+       424:   "opc-job-track",
+       425:   "icad-el",
+       426:   "smartsdp",
+       427:   "svrloc",
+       428:   "ocs-cmu",
+       429:   "ocs-amu",
+       430:   "utmpsd",
+       431:   "utmpcd",
+       432:   "iasd",
+       433:   "nnsp",
+       434:   "mobileip-agent",
+       435:   "mobilip-mn",
+       436:   "dna-cml",
+       437:   "comscm",
+       438:   "dsfgw",
+       439:   "dasp",
+       440:   "sgcp",
+       441:   "decvms-sysmgt",
+       442:   "cvc-hostd",
+       443:   "https",
+       444:   "snpp",
+       445:   "microsoft-ds",
+       446:   "ddm-rdb",
+       447:   "ddm-dfm",
+       448:   "ddm-ssl",
+       449:   "as-servermap",
+       450:   "tserver",
+       451:   "sfs-smp-net",
+       452:   "sfs-config",
+       453:   "creativeserver",
+       454:   "contentserver",
+       455:   "creativepartnr",
+       456:   "macon-tcp",
+       457:   "scohelp",
+       458:   "appleqtc",
+       459:   "ampr-rcmd",
+       460:   "skronk",
+       461:   "datasurfsrv",
+       462:   "datasurfsrvsec",
+       463:   "alpes",
+       464:   "kpasswd",
+       465:   "urd",
+       466:   "digital-vrc",
+       467:   "mylex-mapd",
+       468:   "photuris",
+       469:   "rcp",
+       470:   "scx-proxy",
+       471:   "mondex",
+       472:   "ljk-login",
+       473:   "hybrid-pop",
+       474:   "tn-tl-w1",
+       475:   "tcpnethaspsrv",
+       476:   "tn-tl-fd1",
+       477:   "ss7ns",
+       478:   "spsc",
+       479:   "iafserver",
+       480:   "iafdbase",
+       481:   "ph",
+       482:   "bgs-nsi",
+       483:   "ulpnet",
+       484:   "integra-sme",
+       485:   "powerburst",
+       486:   "avian",
+       487:   "saft",
+       488:   "gss-http",
+       489:   "nest-protocol",
+       490:   "micom-pfs",
+       491:   "go-login",
+       492:   "ticf-1",
+       493:   "ticf-2",
+       494:   "pov-ray",
+       495:   "intecourier",
+       496:   "pim-rp-disc",
+       497:   "retrospect",
+       498:   "siam",
+       499:   "iso-ill",
+       500:   "isakmp",
+       501:   "stmf",
+       502:   "mbap",
+       503:   "intrinsa",
+       504:   "citadel",
+       505:   "mailbox-lm",
+       506:   "ohimsrv",
+       507:   "crs",
+       508:   "xvttp",
+       509:   "snare",
+       510:   "fcp",
+       511:   "passgo",
+       512:   "exec",
+       513:   "login",
+       514:   "shell",
+       515:   "printer",
+       516:   "videotex",
+       517:   "talk",
+       518:   "ntalk",
+       519:   "utime",
+       520:   "efs",
+       521:   "ripng",
+       522:   "ulp",
+       523:   "ibm-db2",
+       524:   "ncp",
+       525:   "timed",
+       526:   "tempo",
+       527:   "stx",
+       528:   "custix",
+       529:   "irc-serv",
+       530:   "courier",
+       531:   "conference",
+       532:   "netnews",
+       533:   "netwall",
+       534:   "windream",
+       535:   "iiop",
+       536:   "opalis-rdv",
+       537:   "nmsp",
+       538:   "gdomap",
+       539:   "apertus-ldp",
+       540:   "uucp",
+       541:   "uucp-rlogin",
+       542:   "commerce",
+       543:   "klogin",
+       544:   "kshell",
+       545:   "appleqtcsrvr",
+       546:   "dhcpv6-client",
+       547:   "dhcpv6-server",
+       548:   "afpovertcp",
+       549:   "idfp",
+       550:   "new-rwho",
+       551:   "cybercash",
+       552:   "devshr-nts",
+       553:   "pirp",
+       554:   "rtsp",
+       555:   "dsf",
+       556:   "remotefs",
+       557:   "openvms-sysipc",
+       558:   "sdnskmp",
+       559:   "teedtap",
+       560:   "rmonitor",
+       561:   "monitor",
+       562:   "chshell",
+       563:   "nntps",
+       564:   "9pfs",
+       565:   "whoami",
+       566:   "streettalk",
+       567:   "banyan-rpc",
+       568:   "ms-shuttle",
+       569:   "ms-rome",
+       570:   "meter",
+       571:   "meter",
+       572:   "sonar",
+       573:   "banyan-vip",
+       574:   "ftp-agent",
+       575:   "vemmi",
+       576:   "ipcd",
+       577:   "vnas",
+       578:   "ipdd",
+       579:   "decbsrv",
+       580:   "sntp-heartbeat",
+       581:   "bdp",
+       582:   "scc-security",
+       583:   "philips-vc",
+       584:   "keyserver",
+       586:   "password-chg",
+       587:   "submission",
+       588:   "cal",
+       589:   "eyelink",
+       590:   "tns-cml",
+       591:   "http-alt",
+       592:   "eudora-set",
+       593:   "http-rpc-epmap",
+       594:   "tpip",
+       595:   "cab-protocol",
+       596:   "smsd",
+       597:   "ptcnameservice",
+       598:   "sco-websrvrmg3",
+       599:   "acp",
+       600:   "ipcserver",
+       601:   "syslog-conn",
+       602:   "xmlrpc-beep",
+       603:   "idxp",
+       604:   "tunnel",
+       605:   "soap-beep",
+       606:   "urm",
+       607:   "nqs",
+       608:   "sift-uft",
+       609:   "npmp-trap",
+       610:   "npmp-local",
+       611:   "npmp-gui",
+       612:   "hmmp-ind",
+       613:   "hmmp-op",
+       614:   "sshell",
+       615:   "sco-inetmgr",
+       616:   "sco-sysmgr",
+       617:   "sco-dtmgr",
+       618:   "dei-icda",
+       619:   "compaq-evm",
+       620:   "sco-websrvrmgr",
+       621:   "escp-ip",
+       622:   "collaborator",
+       623:   "oob-ws-http",
+       624:   "cryptoadmin",
+       625:   "dec-dlm",
+       626:   "asia",
+       627:   "passgo-tivoli",
+       628:   "qmqp",
+       629:   "3com-amp3",
+       630:   "rda",
+       631:   "ipp",
+       632:   "bmpp",
+       633:   "servstat",
+       634:   "ginad",
+       635:   "rlzdbase",
+       636:   "ldaps",
+       637:   "lanserver",
+       638:   "mcns-sec",
+       639:   "msdp",
+       640:   "entrust-sps",
+       641:   "repcmd",
+       642:   "esro-emsdp",
+       643:   "sanity",
+       644:   "dwr",
+       645:   "pssc",
+       646:   "ldp",
+       647:   "dhcp-failover",
+       648:   "rrp",
+       649:   "cadview-3d",
+       650:   "obex",
+       651:   "ieee-mms",
+       652:   "hello-port",
+       653:   "repscmd",
+       654:   "aodv",
+       655:   "tinc",
+       656:   "spmp",
+       657:   "rmc",
+       658:   "tenfold",
+       660:   "mac-srvr-admin",
+       661:   "hap",
+       662:   "pftp",
+       663:   "purenoise",
+       664:   "oob-ws-https",
+       665:   "sun-dr",
+       666:   "mdqs",
+       667:   "disclose",
+       668:   "mecomm",
+       669:   "meregister",
+       670:   "vacdsm-sws",
+       671:   "vacdsm-app",
+       672:   "vpps-qua",
+       673:   "cimplex",
+       674:   "acap",
+       675:   "dctp",
+       676:   "vpps-via",
+       677:   "vpp",
+       678:   "ggf-ncp",
+       679:   "mrm",
+       680:   "entrust-aaas",
+       681:   "entrust-aams",
+       682:   "xfr",
+       683:   "corba-iiop",
+       684:   "corba-iiop-ssl",
+       685:   "mdc-portmapper",
+       686:   "hcp-wismar",
+       687:   "asipregistry",
+       688:   "realm-rusd",
+       689:   "nmap",
+       690:   "vatp",
+       691:   "msexch-routing",
+       692:   "hyperwave-isp",
+       693:   "connendp",
+       694:   "ha-cluster",
+       695:   "ieee-mms-ssl",
+       696:   "rushd",
+       697:   "uuidgen",
+       698:   "olsr",
+       699:   "accessnetwork",
+       700:   "epp",
+       701:   "lmp",
+       702:   "iris-beep",
+       704:   "elcsd",
+       705:   "agentx",
+       706:   "silc",
+       707:   "borland-dsj",
+       709:   "entrust-kmsh",
+       710:   "entrust-ash",
+       711:   "cisco-tdp",
+       712:   "tbrpf",
+       713:   "iris-xpc",
+       714:   "iris-xpcs",
+       715:   "iris-lwz",
+       729:   "netviewdm1",
+       730:   "netviewdm2",
+       731:   "netviewdm3",
+       741:   "netgw",
+       742:   "netrcs",
+       744:   "flexlm",
+       747:   "fujitsu-dev",
+       748:   "ris-cm",
+       749:   "kerberos-adm",
+       750:   "rfile",
+       751:   "pump",
+       752:   "qrh",
+       753:   "rrh",
+       754:   "tell",
+       758:   "nlogin",
+       759:   "con",
+       760:   "ns",
+       761:   "rxe",
+       762:   "quotad",
+       763:   "cycleserv",
+       764:   "omserv",
+       765:   "webster",
+       767:   "phonebook",
+       769:   "vid",
+       770:   "cadlock",
+       771:   "rtip",
+       772:   "cycleserv2",
+       773:   "submit",
+       774:   "rpasswd",
+       775:   "entomb",
+       776:   "wpages",
+       777:   "multiling-http",
+       780:   "wpgs",
+       800:   "mdbs-daemon",
+       801:   "device",
+       802:   "mbap-s",
+       810:   "fcp-udp",
+       828:   "itm-mcell-s",
+       829:   "pkix-3-ca-ra",
+       830:   "netconf-ssh",
+       831:   "netconf-beep",
+       832:   "netconfsoaphttp",
+       833:   "netconfsoapbeep",
+       847:   "dhcp-failover2",
+       848:   "gdoi",
+       853:   "domain-s",
+       854:   "dlep",
+       860:   "iscsi",
+       861:   "owamp-control",
+       862:   "twamp-control",
+       873:   "rsync",
+       886:   "iclcnet-locate",
+       887:   "iclcnet-svinfo",
+       888:   "accessbuilder",
+       900:   "omginitialrefs",
+       901:   "smpnameres",
+       902:   "ideafarm-door",
+       903:   "ideafarm-panic",
+       910:   "kink",
+       911:   "xact-backup",
+       912:   "apex-mesh",
+       913:   "apex-edge",
+       953:   "rndc",
+       989:   "ftps-data",
+       990:   "ftps",
+       991:   "nas",
+       992:   "telnets",
+       993:   "imaps",
+       995:   "pop3s",
+       996:   "vsinet",
+       997:   "maitrd",
+       998:   "busboy",
+       999:   "garcon",
+       1000:  "cadlock2",
+       1001:  "webpush",
+       1010:  "surf",
+       1021:  "exp1",
+       1022:  "exp2",
+       1025:  "blackjack",
+       1026:  "cap",
+       1029:  "solid-mux",
+       1033:  "netinfo-local",
+       1034:  "activesync",
+       1035:  "mxxrlogin",
+       1036:  "nsstp",
+       1037:  "ams",
+       1038:  "mtqp",
+       1039:  "sbl",
+       1040:  "netarx",
+       1041:  "danf-ak2",
+       1042:  "afrog",
+       1043:  "boinc-client",
+       1044:  "dcutility",
+       1045:  "fpitp",
+       1046:  "wfremotertm",
+       1047:  "neod1",
+       1048:  "neod2",
+       1049:  "td-postman",
+       1050:  "cma",
+       1051:  "optima-vnet",
+       1052:  "ddt",
+       1053:  "remote-as",
+       1054:  "brvread",
+       1055:  "ansyslmd",
+       1056:  "vfo",
+       1057:  "startron",
+       1058:  "nim",
+       1059:  "nimreg",
+       1060:  "polestar",
+       1061:  "kiosk",
+       1062:  "veracity",
+       1063:  "kyoceranetdev",
+       1064:  "jstel",
+       1065:  "syscomlan",
+       1066:  "fpo-fns",
+       1067:  "instl-boots",
+       1068:  "instl-bootc",
+       1069:  "cognex-insight",
+       1070:  "gmrupdateserv",
+       1071:  "bsquare-voip",
+       1072:  "cardax",
+       1073:  "bridgecontrol",
+       1074:  "warmspotMgmt",
+       1075:  "rdrmshc",
+       1076:  "dab-sti-c",
+       1077:  "imgames",
+       1078:  "avocent-proxy",
+       1079:  "asprovatalk",
+       1080:  "socks",
+       1081:  "pvuniwien",
+       1082:  "amt-esd-prot",
+       1083:  "ansoft-lm-1",
+       1084:  "ansoft-lm-2",
+       1085:  "webobjects",
+       1086:  "cplscrambler-lg",
+       1087:  "cplscrambler-in",
+       1088:  "cplscrambler-al",
+       1089:  "ff-annunc",
+       1090:  "ff-fms",
+       1091:  "ff-sm",
+       1092:  "obrpd",
+       1093:  "proofd",
+       1094:  "rootd",
+       1095:  "nicelink",
+       1096:  "cnrprotocol",
+       1097:  "sunclustermgr",
+       1098:  "rmiactivation",
+       1099:  "rmiregistry",
+       1100:  "mctp",
+       1101:  "pt2-discover",
+       1102:  "adobeserver-1",
+       1103:  "adobeserver-2",
+       1104:  "xrl",
+       1105:  "ftranhc",
+       1106:  "isoipsigport-1",
+       1107:  "isoipsigport-2",
+       1108:  "ratio-adp",
+       1110:  "webadmstart",
+       1111:  "lmsocialserver",
+       1112:  "icp",
+       1113:  "ltp-deepspace",
+       1114:  "mini-sql",
+       1115:  "ardus-trns",
+       1116:  "ardus-cntl",
+       1117:  "ardus-mtrns",
+       1118:  "sacred",
+       1119:  "bnetgame",
+       1120:  "bnetfile",
+       1121:  "rmpp",
+       1122:  "availant-mgr",
+       1123:  "murray",
+       1124:  "hpvmmcontrol",
+       1125:  "hpvmmagent",
+       1126:  "hpvmmdata",
+       1127:  "kwdb-commn",
+       1128:  "saphostctrl",
+       1129:  "saphostctrls",
+       1130:  "casp",
+       1131:  "caspssl",
+       1132:  "kvm-via-ip",
+       1133:  "dfn",
+       1134:  "aplx",
+       1135:  "omnivision",
+       1136:  "hhb-gateway",
+       1137:  "trim",
+       1138:  "encrypted-admin",
+       1139:  "evm",
+       1140:  "autonoc",
+       1141:  "mxomss",
+       1142:  "edtools",
+       1143:  "imyx",
+       1144:  "fuscript",
+       1145:  "x9-icue",
+       1146:  "audit-transfer",
+       1147:  "capioverlan",
+       1148:  "elfiq-repl",
+       1149:  "bvtsonar",
+       1150:  "blaze",
+       1151:  "unizensus",
+       1152:  "winpoplanmess",
+       1153:  "c1222-acse",
+       1154:  "resacommunity",
+       1155:  "nfa",
+       1156:  "iascontrol-oms",
+       1157:  "iascontrol",
+       1158:  "dbcontrol-oms",
+       1159:  "oracle-oms",
+       1160:  "olsv",
+       1161:  "health-polling",
+       1162:  "health-trap",
+       1163:  "sddp",
+       1164:  "qsm-proxy",
+       1165:  "qsm-gui",
+       1166:  "qsm-remote",
+       1167:  "cisco-ipsla",
+       1168:  "vchat",
+       1169:  "tripwire",
+       1170:  "atc-lm",
+       1171:  "atc-appserver",
+       1172:  "dnap",
+       1173:  "d-cinema-rrp",
+       1174:  "fnet-remote-ui",
+       1175:  "dossier",
+       1176:  "indigo-server",
+       1177:  "dkmessenger",
+       1178:  "sgi-storman",
+       1179:  "b2n",
+       1180:  "mc-client",
+       1181:  "3comnetman",
+       1182:  "accelenet",
+       1183:  "llsurfup-http",
+       1184:  "llsurfup-https",
+       1185:  "catchpole",
+       1186:  "mysql-cluster",
+       1187:  "alias",
+       1188:  "hp-webadmin",
+       1189:  "unet",
+       1190:  "commlinx-avl",
+       1191:  "gpfs",
+       1192:  "caids-sensor",
+       1193:  "fiveacross",
+       1194:  "openvpn",
+       1195:  "rsf-1",
+       1196:  "netmagic",
+       1197:  "carrius-rshell",
+       1198:  "cajo-discovery",
+       1199:  "dmidi",
+       1200:  "scol",
+       1201:  "nucleus-sand",
+       1202:  "caiccipc",
+       1203:  "ssslic-mgr",
+       1204:  "ssslog-mgr",
+       1205:  "accord-mgc",
+       1206:  "anthony-data",
+       1207:  "metasage",
+       1208:  "seagull-ais",
+       1209:  "ipcd3",
+       1210:  "eoss",
+       1211:  "groove-dpp",
+       1212:  "lupa",
+       1213:  "mpc-lifenet",
+       1214:  "kazaa",
+       1215:  "scanstat-1",
+       1216:  "etebac5",
+       1217:  "hpss-ndapi",
+       1218:  "aeroflight-ads",
+       1219:  "aeroflight-ret",
+       1220:  "qt-serveradmin",
+       1221:  "sweetware-apps",
+       1222:  "nerv",
+       1223:  "tgp",
+       1224:  "vpnz",
+       1225:  "slinkysearch",
+       1226:  "stgxfws",
+       1227:  "dns2go",
+       1228:  "florence",
+       1229:  "zented",
+       1230:  "periscope",
+       1231:  "menandmice-lpm",
+       1232:  "first-defense",
+       1233:  "univ-appserver",
+       1234:  "search-agent",
+       1235:  "mosaicsyssvc1",
+       1236:  "bvcontrol",
+       1237:  "tsdos390",
+       1238:  "hacl-qs",
+       1239:  "nmsd",
+       1240:  "instantia",
+       1241:  "nessus",
+       1242:  "nmasoverip",
+       1243:  "serialgateway",
+       1244:  "isbconference1",
+       1245:  "isbconference2",
+       1246:  "payrouter",
+       1247:  "visionpyramid",
+       1248:  "hermes",
+       1249:  "mesavistaco",
+       1250:  "swldy-sias",
+       1251:  "servergraph",
+       1252:  "bspne-pcc",
+       1253:  "q55-pcc",
+       1254:  "de-noc",
+       1255:  "de-cache-query",
+       1256:  "de-server",
+       1257:  "shockwave2",
+       1258:  "opennl",
+       1259:  "opennl-voice",
+       1260:  "ibm-ssd",
+       1261:  "mpshrsv",
+       1262:  "qnts-orb",
+       1263:  "dka",
+       1264:  "prat",
+       1265:  "dssiapi",
+       1266:  "dellpwrappks",
+       1267:  "epc",
+       1268:  "propel-msgsys",
+       1269:  "watilapp",
+       1270:  "opsmgr",
+       1271:  "excw",
+       1272:  "cspmlockmgr",
+       1273:  "emc-gateway",
+       1274:  "t1distproc",
+       1275:  "ivcollector",
+       1277:  "miva-mqs",
+       1278:  "dellwebadmin-1",
+       1279:  "dellwebadmin-2",
+       1280:  "pictrography",
+       1281:  "healthd",
+       1282:  "emperion",
+       1283:  "productinfo",
+       1284:  "iee-qfx",
+       1285:  "neoiface",
+       1286:  "netuitive",
+       1287:  "routematch",
+       1288:  "navbuddy",
+       1289:  "jwalkserver",
+       1290:  "winjaserver",
+       1291:  "seagulllms",
+       1292:  "dsdn",
+       1293:  "pkt-krb-ipsec",
+       1294:  "cmmdriver",
+       1295:  "ehtp",
+       1296:  "dproxy",
+       1297:  "sdproxy",
+       1298:  "lpcp",
+       1299:  "hp-sci",
+       1300:  "h323hostcallsc",
+       1301:  "ci3-software-1",
+       1302:  "ci3-software-2",
+       1303:  "sftsrv",
+       1304:  "boomerang",
+       1305:  "pe-mike",
+       1306:  "re-conn-proto",
+       1307:  "pacmand",
+       1308:  "odsi",
+       1309:  "jtag-server",
+       1310:  "husky",
+       1311:  "rxmon",
+       1312:  "sti-envision",
+       1313:  "bmc-patroldb",
+       1314:  "pdps",
+       1315:  "els",
+       1316:  "exbit-escp",
+       1317:  "vrts-ipcserver",
+       1318:  "krb5gatekeeper",
+       1319:  "amx-icsp",
+       1320:  "amx-axbnet",
+       1321:  "pip",
+       1322:  "novation",
+       1323:  "brcd",
+       1324:  "delta-mcp",
+       1325:  "dx-instrument",
+       1326:  "wimsic",
+       1327:  "ultrex",
+       1328:  "ewall",
+       1329:  "netdb-export",
+       1330:  "streetperfect",
+       1331:  "intersan",
+       1332:  "pcia-rxp-b",
+       1333:  "passwrd-policy",
+       1334:  "writesrv",
+       1335:  "digital-notary",
+       1336:  "ischat",
+       1337:  "menandmice-dns",
+       1338:  "wmc-log-svc",
+       1339:  "kjtsiteserver",
+       1340:  "naap",
+       1341:  "qubes",
+       1342:  "esbroker",
+       1343:  "re101",
+       1344:  "icap",
+       1345:  "vpjp",
+       1346:  "alta-ana-lm",
+       1347:  "bbn-mmc",
+       1348:  "bbn-mmx",
+       1349:  "sbook",
+       1350:  "editbench",
+       1351:  "equationbuilder",
+       1352:  "lotusnote",
+       1353:  "relief",
+       1354:  "XSIP-network",
+       1355:  "intuitive-edge",
+       1356:  "cuillamartin",
+       1357:  "pegboard",
+       1358:  "connlcli",
+       1359:  "ftsrv",
+       1360:  "mimer",
+       1361:  "linx",
+       1362:  "timeflies",
+       1363:  "ndm-requester",
+       1364:  "ndm-server",
+       1365:  "adapt-sna",
+       1366:  "netware-csp",
+       1367:  "dcs",
+       1368:  "screencast",
+       1369:  "gv-us",
+       1370:  "us-gv",
+       1371:  "fc-cli",
+       1372:  "fc-ser",
+       1373:  "chromagrafx",
+       1374:  "molly",
+       1375:  "bytex",
+       1376:  "ibm-pps",
+       1377:  "cichlid",
+       1378:  "elan",
+       1379:  "dbreporter",
+       1380:  "telesis-licman",
+       1381:  "apple-licman",
+       1382:  "udt-os",
+       1383:  "gwha",
+       1384:  "os-licman",
+       1385:  "atex-elmd",
+       1386:  "checksum",
+       1387:  "cadsi-lm",
+       1388:  "objective-dbc",
+       1389:  "iclpv-dm",
+       1390:  "iclpv-sc",
+       1391:  "iclpv-sas",
+       1392:  "iclpv-pm",
+       1393:  "iclpv-nls",
+       1394:  "iclpv-nlc",
+       1395:  "iclpv-wsm",
+       1396:  "dvl-activemail",
+       1397:  "audio-activmail",
+       1398:  "video-activmail",
+       1399:  "cadkey-licman",
+       1400:  "cadkey-tablet",
+       1401:  "goldleaf-licman",
+       1402:  "prm-sm-np",
+       1403:  "prm-nm-np",
+       1404:  "igi-lm",
+       1405:  "ibm-res",
+       1406:  "netlabs-lm",
+       1407:  "tibet-server",
+       1408:  "sophia-lm",
+       1409:  "here-lm",
+       1410:  "hiq",
+       1411:  "af",
+       1412:  "innosys",
+       1413:  "innosys-acl",
+       1414:  "ibm-mqseries",
+       1415:  "dbstar",
+       1416:  "novell-lu6-2",
+       1417:  "timbuktu-srv1",
+       1418:  "timbuktu-srv2",
+       1419:  "timbuktu-srv3",
+       1420:  "timbuktu-srv4",
+       1421:  "gandalf-lm",
+       1422:  "autodesk-lm",
+       1423:  "essbase",
+       1424:  "hybrid",
+       1425:  "zion-lm",
+       1426:  "sais",
+       1427:  "mloadd",
+       1428:  "informatik-lm",
+       1429:  "nms",
+       1430:  "tpdu",
+       1431:  "rgtp",
+       1432:  "blueberry-lm",
+       1433:  "ms-sql-s",
+       1434:  "ms-sql-m",
+       1435:  "ibm-cics",
+       1436:  "saism",
+       1437:  "tabula",
+       1438:  "eicon-server",
+       1439:  "eicon-x25",
+       1440:  "eicon-slp",
+       1441:  "cadis-1",
+       1442:  "cadis-2",
+       1443:  "ies-lm",
+       1444:  "marcam-lm",
+       1445:  "proxima-lm",
+       1446:  "ora-lm",
+       1447:  "apri-lm",
+       1448:  "oc-lm",
+       1449:  "peport",
+       1450:  "dwf",
+       1451:  "infoman",
+       1452:  "gtegsc-lm",
+       1453:  "genie-lm",
+       1454:  "interhdl-elmd",
+       1455:  "esl-lm",
+       1456:  "dca",
+       1457:  "valisys-lm",
+       1458:  "nrcabq-lm",
+       1459:  "proshare1",
+       1460:  "proshare2",
+       1461:  "ibm-wrless-lan",
+       1462:  "world-lm",
+       1463:  "nucleus",
+       1464:  "msl-lmd",
+       1465:  "pipes",
+       1466:  "oceansoft-lm",
+       1467:  "csdmbase",
+       1468:  "csdm",
+       1469:  "aal-lm",
+       1470:  "uaiact",
+       1471:  "csdmbase",
+       1472:  "csdm",
+       1473:  "openmath",
+       1474:  "telefinder",
+       1475:  "taligent-lm",
+       1476:  "clvm-cfg",
+       1477:  "ms-sna-server",
+       1478:  "ms-sna-base",
+       1479:  "dberegister",
+       1480:  "pacerforum",
+       1481:  "airs",
+       1482:  "miteksys-lm",
+       1483:  "afs",
+       1484:  "confluent",
+       1485:  "lansource",
+       1486:  "nms-topo-serv",
+       1487:  "localinfosrvr",
+       1488:  "docstor",
+       1489:  "dmdocbroker",
+       1490:  "insitu-conf",
+       1492:  "stone-design-1",
+       1493:  "netmap-lm",
+       1494:  "ica",
+       1495:  "cvc",
+       1496:  "liberty-lm",
+       1497:  "rfx-lm",
+       1498:  "sybase-sqlany",
+       1499:  "fhc",
+       1500:  "vlsi-lm",
+       1501:  "saiscm",
+       1502:  "shivadiscovery",
+       1503:  "imtc-mcs",
+       1504:  "evb-elm",
+       1505:  "funkproxy",
+       1506:  "utcd",
+       1507:  "symplex",
+       1508:  "diagmond",
+       1509:  "robcad-lm",
+       1510:  "mvx-lm",
+       1511:  "3l-l1",
+       1512:  "wins",
+       1513:  "fujitsu-dtc",
+       1514:  "fujitsu-dtcns",
+       1515:  "ifor-protocol",
+       1516:  "vpad",
+       1517:  "vpac",
+       1518:  "vpvd",
+       1519:  "vpvc",
+       1520:  "atm-zip-office",
+       1521:  "ncube-lm",
+       1522:  "ricardo-lm",
+       1523:  "cichild-lm",
+       1524:  "ingreslock",
+       1525:  "orasrv",
+       1526:  "pdap-np",
+       1527:  "tlisrv",
+       1529:  "coauthor",
+       1530:  "rap-service",
+       1531:  "rap-listen",
+       1532:  "miroconnect",
+       1533:  "virtual-places",
+       1534:  "micromuse-lm",
+       1535:  "ampr-info",
+       1536:  "ampr-inter",
+       1537:  "sdsc-lm",
+       1538:  "3ds-lm",
+       1539:  "intellistor-lm",
+       1540:  "rds",
+       1541:  "rds2",
+       1542:  "gridgen-elmd",
+       1543:  "simba-cs",
+       1544:  "aspeclmd",
+       1545:  "vistium-share",
+       1546:  "abbaccuray",
+       1547:  "laplink",
+       1548:  "axon-lm",
+       1549:  "shivahose",
+       1550:  "3m-image-lm",
+       1551:  "hecmtl-db",
+       1552:  "pciarray",
+       1553:  "sna-cs",
+       1554:  "caci-lm",
+       1555:  "livelan",
+       1556:  "veritas-pbx",
+       1557:  "arbortext-lm",
+       1558:  "xingmpeg",
+       1559:  "web2host",
+       1560:  "asci-val",
+       1561:  "facilityview",
+       1562:  "pconnectmgr",
+       1563:  "cadabra-lm",
+       1564:  "pay-per-view",
+       1565:  "winddlb",
+       1566:  "corelvideo",
+       1567:  "jlicelmd",
+       1568:  "tsspmap",
+       1569:  "ets",
+       1570:  "orbixd",
+       1571:  "rdb-dbs-disp",
+       1572:  "chip-lm",
+       1573:  "itscomm-ns",
+       1574:  "mvel-lm",
+       1575:  "oraclenames",
+       1576:  "moldflow-lm",
+       1577:  "hypercube-lm",
+       1578:  "jacobus-lm",
+       1579:  "ioc-sea-lm",
+       1580:  "tn-tl-r1",
+       1581:  "mil-2045-47001",
+       1582:  "msims",
+       1583:  "simbaexpress",
+       1584:  "tn-tl-fd2",
+       1585:  "intv",
+       1586:  "ibm-abtact",
+       1587:  "pra-elmd",
+       1588:  "triquest-lm",
+       1589:  "vqp",
+       1590:  "gemini-lm",
+       1591:  "ncpm-pm",
+       1592:  "commonspace",
+       1593:  "mainsoft-lm",
+       1594:  "sixtrak",
+       1595:  "radio",
+       1596:  "radio-sm",
+       1597:  "orbplus-iiop",
+       1598:  "picknfs",
+       1599:  "simbaservices",
+       1600:  "issd",
+       1601:  "aas",
+       1602:  "inspect",
+       1603:  "picodbc",
+       1604:  "icabrowser",
+       1605:  "slp",
+       1606:  "slm-api",
+       1607:  "stt",
+       1608:  "smart-lm",
+       1609:  "isysg-lm",
+       1610:  "taurus-wh",
+       1611:  "ill",
+       1612:  "netbill-trans",
+       1613:  "netbill-keyrep",
+       1614:  "netbill-cred",
+       1615:  "netbill-auth",
+       1616:  "netbill-prod",
+       1617:  "nimrod-agent",
+       1618:  "skytelnet",
+       1619:  "xs-openstorage",
+       1620:  "faxportwinport",
+       1621:  "softdataphone",
+       1622:  "ontime",
+       1623:  "jaleosnd",
+       1624:  "udp-sr-port",
+       1625:  "svs-omagent",
+       1626:  "shockwave",
+       1627:  "t128-gateway",
+       1628:  "lontalk-norm",
+       1629:  "lontalk-urgnt",
+       1630:  "oraclenet8cman",
+       1631:  "visitview",
+       1632:  "pammratc",
+       1633:  "pammrpc",
+       1634:  "loaprobe",
+       1635:  "edb-server1",
+       1636:  "isdc",
+       1637:  "islc",
+       1638:  "ismc",
+       1639:  "cert-initiator",
+       1640:  "cert-responder",
+       1641:  "invision",
+       1642:  "isis-am",
+       1643:  "isis-ambc",
+       1644:  "saiseh",
+       1645:  "sightline",
+       1646:  "sa-msg-port",
+       1647:  "rsap",
+       1648:  "concurrent-lm",
+       1649:  "kermit",
+       1650:  "nkd",
+       1651:  "shiva-confsrvr",
+       1652:  "xnmp",
+       1653:  "alphatech-lm",
+       1654:  "stargatealerts",
+       1655:  "dec-mbadmin",
+       1656:  "dec-mbadmin-h",
+       1657:  "fujitsu-mmpdc",
+       1658:  "sixnetudr",
+       1659:  "sg-lm",
+       1660:  "skip-mc-gikreq",
+       1661:  "netview-aix-1",
+       1662:  "netview-aix-2",
+       1663:  "netview-aix-3",
+       1664:  "netview-aix-4",
+       1665:  "netview-aix-5",
+       1666:  "netview-aix-6",
+       1667:  "netview-aix-7",
+       1668:  "netview-aix-8",
+       1669:  "netview-aix-9",
+       1670:  "netview-aix-10",
+       1671:  "netview-aix-11",
+       1672:  "netview-aix-12",
+       1673:  "proshare-mc-1",
+       1674:  "proshare-mc-2",
+       1675:  "pdp",
+       1676:  "netcomm1",
+       1677:  "groupwise",
+       1678:  "prolink",
+       1679:  "darcorp-lm",
+       1680:  "microcom-sbp",
+       1681:  "sd-elmd",
+       1682:  "lanyon-lantern",
+       1683:  "ncpm-hip",
+       1684:  "snaresecure",
+       1685:  "n2nremote",
+       1686:  "cvmon",
+       1687:  "nsjtp-ctrl",
+       1688:  "nsjtp-data",
+       1689:  "firefox",
+       1690:  "ng-umds",
+       1691:  "empire-empuma",
+       1692:  "sstsys-lm",
+       1693:  "rrirtr",
+       1694:  "rrimwm",
+       1695:  "rrilwm",
+       1696:  "rrifmm",
+       1697:  "rrisat",
+       1698:  "rsvp-encap-1",
+       1699:  "rsvp-encap-2",
+       1700:  "mps-raft",
+       1701:  "l2f",
+       1702:  "deskshare",
+       1703:  "hb-engine",
+       1704:  "bcs-broker",
+       1705:  "slingshot",
+       1706:  "jetform",
+       1707:  "vdmplay",
+       1708:  "gat-lmd",
+       1709:  "centra",
+       1710:  "impera",
+       1711:  "pptconference",
+       1712:  "registrar",
+       1713:  "conferencetalk",
+       1714:  "sesi-lm",
+       1715:  "houdini-lm",
+       1716:  "xmsg",
+       1717:  "fj-hdnet",
+       1718:  "h323gatedisc",
+       1719:  "h323gatestat",
+       1720:  "h323hostcall",
+       1721:  "caicci",
+       1722:  "hks-lm",
+       1723:  "pptp",
+       1724:  "csbphonemaster",
+       1725:  "iden-ralp",
+       1726:  "iberiagames",
+       1727:  "winddx",
+       1728:  "telindus",
+       1729:  "citynl",
+       1730:  "roketz",
+       1731:  "msiccp",
+       1732:  "proxim",
+       1733:  "siipat",
+       1734:  "cambertx-lm",
+       1735:  "privatechat",
+       1736:  "street-stream",
+       1737:  "ultimad",
+       1738:  "gamegen1",
+       1739:  "webaccess",
+       1740:  "encore",
+       1741:  "cisco-net-mgmt",
+       1742:  "3Com-nsd",
+       1743:  "cinegrfx-lm",
+       1744:  "ncpm-ft",
+       1745:  "remote-winsock",
+       1746:  "ftrapid-1",
+       1747:  "ftrapid-2",
+       1748:  "oracle-em1",
+       1749:  "aspen-services",
+       1750:  "sslp",
+       1751:  "swiftnet",
+       1752:  "lofr-lm",
+       1753:  "predatar-comms",
+       1754:  "oracle-em2",
+       1755:  "ms-streaming",
+       1756:  "capfast-lmd",
+       1757:  "cnhrp",
+       1758:  "tftp-mcast",
+       1759:  "spss-lm",
+       1760:  "www-ldap-gw",
+       1761:  "cft-0",
+       1762:  "cft-1",
+       1763:  "cft-2",
+       1764:  "cft-3",
+       1765:  "cft-4",
+       1766:  "cft-5",
+       1767:  "cft-6",
+       1768:  "cft-7",
+       1769:  "bmc-net-adm",
+       1770:  "bmc-net-svc",
+       1771:  "vaultbase",
+       1772:  "essweb-gw",
+       1773:  "kmscontrol",
+       1774:  "global-dtserv",
+       1775:  "vdab",
+       1776:  "femis",
+       1777:  "powerguardian",
+       1778:  "prodigy-intrnet",
+       1779:  "pharmasoft",
+       1780:  "dpkeyserv",
+       1781:  "answersoft-lm",
+       1782:  "hp-hcip",
+       1784:  "finle-lm",
+       1785:  "windlm",
+       1786:  "funk-logger",
+       1787:  "funk-license",
+       1788:  "psmond",
+       1789:  "hello",
+       1790:  "nmsp",
+       1791:  "ea1",
+       1792:  "ibm-dt-2",
+       1793:  "rsc-robot",
+       1794:  "cera-bcm",
+       1795:  "dpi-proxy",
+       1796:  "vocaltec-admin",
+       1797:  "uma",
+       1798:  "etp",
+       1799:  "netrisk",
+       1800:  "ansys-lm",
+       1801:  "msmq",
+       1802:  "concomp1",
+       1803:  "hp-hcip-gwy",
+       1804:  "enl",
+       1805:  "enl-name",
+       1806:  "musiconline",
+       1807:  "fhsp",
+       1808:  "oracle-vp2",
+       1809:  "oracle-vp1",
+       1810:  "jerand-lm",
+       1811:  "scientia-sdb",
+       1812:  "radius",
+       1813:  "radius-acct",
+       1814:  "tdp-suite",
+       1815:  "mmpft",
+       1816:  "harp",
+       1817:  "rkb-oscs",
+       1818:  "etftp",
+       1819:  "plato-lm",
+       1820:  "mcagent",
+       1821:  "donnyworld",
+       1822:  "es-elmd",
+       1823:  "unisys-lm",
+       1824:  "metrics-pas",
+       1825:  "direcpc-video",
+       1826:  "ardt",
+       1827:  "asi",
+       1828:  "itm-mcell-u",
+       1829:  "optika-emedia",
+       1830:  "net8-cman",
+       1831:  "myrtle",
+       1832:  "tht-treasure",
+       1833:  "udpradio",
+       1834:  "ardusuni",
+       1835:  "ardusmul",
+       1836:  "ste-smsc",
+       1837:  "csoft1",
+       1838:  "talnet",
+       1839:  "netopia-vo1",
+       1840:  "netopia-vo2",
+       1841:  "netopia-vo3",
+       1842:  "netopia-vo4",
+       1843:  "netopia-vo5",
+       1844:  "direcpc-dll",
+       1845:  "altalink",
+       1846:  "tunstall-pnc",
+       1847:  "slp-notify",
+       1848:  "fjdocdist",
+       1849:  "alpha-sms",
+       1850:  "gsi",
+       1851:  "ctcd",
+       1852:  "virtual-time",
+       1853:  "vids-avtp",
+       1854:  "buddy-draw",
+       1855:  "fiorano-rtrsvc",
+       1856:  "fiorano-msgsvc",
+       1857:  "datacaptor",
+       1858:  "privateark",
+       1859:  "gammafetchsvr",
+       1860:  "sunscalar-svc",
+       1861:  "lecroy-vicp",
+       1862:  "mysql-cm-agent",
+       1863:  "msnp",
+       1864:  "paradym-31port",
+       1865:  "entp",
+       1866:  "swrmi",
+       1867:  "udrive",
+       1868:  "viziblebrowser",
+       1869:  "transact",
+       1870:  "sunscalar-dns",
+       1871:  "canocentral0",
+       1872:  "canocentral1",
+       1873:  "fjmpjps",
+       1874:  "fjswapsnp",
+       1875:  "westell-stats",
+       1876:  "ewcappsrv",
+       1877:  "hp-webqosdb",
+       1878:  "drmsmc",
+       1879:  "nettgain-nms",
+       1880:  "vsat-control",
+       1881:  "ibm-mqseries2",
+       1882:  "ecsqdmn",
+       1883:  "mqtt",
+       1884:  "idmaps",
+       1885:  "vrtstrapserver",
+       1886:  "leoip",
+       1887:  "filex-lport",
+       1888:  "ncconfig",
+       1889:  "unify-adapter",
+       1890:  "wilkenlistener",
+       1891:  "childkey-notif",
+       1892:  "childkey-ctrl",
+       1893:  "elad",
+       1894:  "o2server-port",
+       1896:  "b-novative-ls",
+       1897:  "metaagent",
+       1898:  "cymtec-port",
+       1899:  "mc2studios",
+       1900:  "ssdp",
+       1901:  "fjicl-tep-a",
+       1902:  "fjicl-tep-b",
+       1903:  "linkname",
+       1904:  "fjicl-tep-c",
+       1905:  "sugp",
+       1906:  "tpmd",
+       1907:  "intrastar",
+       1908:  "dawn",
+       1909:  "global-wlink",
+       1910:  "ultrabac",
+       1911:  "mtp",
+       1912:  "rhp-iibp",
+       1913:  "armadp",
+       1914:  "elm-momentum",
+       1915:  "facelink",
+       1916:  "persona",
+       1917:  "noagent",
+       1918:  "can-nds",
+       1919:  "can-dch",
+       1920:  "can-ferret",
+       1921:  "noadmin",
+       1922:  "tapestry",
+       1923:  "spice",
+       1924:  "xiip",
+       1925:  "discovery-port",
+       1926:  "egs",
+       1927:  "videte-cipc",
+       1928:  "emsd-port",
+       1929:  "bandwiz-system",
+       1930:  "driveappserver",
+       1931:  "amdsched",
+       1932:  "ctt-broker",
+       1933:  "xmapi",
+       1934:  "xaapi",
+       1935:  "macromedia-fcs",
+       1936:  "jetcmeserver",
+       1937:  "jwserver",
+       1938:  "jwclient",
+       1939:  "jvserver",
+       1940:  "jvclient",
+       1941:  "dic-aida",
+       1942:  "res",
+       1943:  "beeyond-media",
+       1944:  "close-combat",
+       1945:  "dialogic-elmd",
+       1946:  "tekpls",
+       1947:  "sentinelsrm",
+       1948:  "eye2eye",
+       1949:  "ismaeasdaqlive",
+       1950:  "ismaeasdaqtest",
+       1951:  "bcs-lmserver",
+       1952:  "mpnjsc",
+       1953:  "rapidbase",
+       1954:  "abr-api",
+       1955:  "abr-secure",
+       1956:  "vrtl-vmf-ds",
+       1957:  "unix-status",
+       1958:  "dxadmind",
+       1959:  "simp-all",
+       1960:  "nasmanager",
+       1961:  "bts-appserver",
+       1962:  "biap-mp",
+       1963:  "webmachine",
+       1964:  "solid-e-engine",
+       1965:  "tivoli-npm",
+       1966:  "slush",
+       1967:  "sns-quote",
+       1968:  "lipsinc",
+       1969:  "lipsinc1",
+       1970:  "netop-rc",
+       1971:  "netop-school",
+       1972:  "intersys-cache",
+       1973:  "dlsrap",
+       1974:  "drp",
+       1975:  "tcoflashagent",
+       1976:  "tcoregagent",
+       1977:  "tcoaddressbook",
+       1978:  "unisql",
+       1979:  "unisql-java",
+       1980:  "pearldoc-xact",
+       1981:  "p2pq",
+       1982:  "estamp",
+       1983:  "lhtp",
+       1984:  "bb",
+       1985:  "hsrp",
+       1986:  "licensedaemon",
+       1987:  "tr-rsrb-p1",
+       1988:  "tr-rsrb-p2",
+       1989:  "tr-rsrb-p3",
+       1990:  "stun-p1",
+       1991:  "stun-p2",
+       1992:  "stun-p3",
+       1993:  "snmp-tcp-port",
+       1994:  "stun-port",
+       1995:  "perf-port",
+       1996:  "tr-rsrb-port",
+       1997:  "gdp-port",
+       1998:  "x25-svc-port",
+       1999:  "tcp-id-port",
+       2000:  "cisco-sccp",
+       2001:  "dc",
+       2002:  "globe",
+       2003:  "brutus",
+       2004:  "mailbox",
+       2005:  "berknet",
+       2006:  "invokator",
+       2007:  "dectalk",
+       2008:  "conf",
+       2009:  "news",
+       2010:  "search",
+       2011:  "raid-cc",
+       2012:  "ttyinfo",
+       2013:  "raid-am",
+       2014:  "troff",
+       2015:  "cypress",
+       2016:  "bootserver",
+       2017:  "cypress-stat",
+       2018:  "terminaldb",
+       2019:  "whosockami",
+       2020:  "xinupageserver",
+       2021:  "servexec",
+       2022:  "down",
+       2023:  "xinuexpansion3",
+       2024:  "xinuexpansion4",
+       2025:  "ellpack",
+       2026:  "scrabble",
+       2027:  "shadowserver",
+       2028:  "submitserver",
+       2029:  "hsrpv6",
+       2030:  "device2",
+       2031:  "mobrien-chat",
+       2032:  "blackboard",
+       2033:  "glogger",
+       2034:  "scoremgr",
+       2035:  "imsldoc",
+       2036:  "e-dpnet",
+       2037:  "applus",
+       2038:  "objectmanager",
+       2039:  "prizma",
+       2040:  "lam",
+       2041:  "interbase",
+       2042:  "isis",
+       2043:  "isis-bcast",
+       2044:  "rimsl",
+       2045:  "cdfunc",
+       2046:  "sdfunc",
+       2047:  "dls",
+       2048:  "dls-monitor",
+       2049:  "shilp",
+       2050:  "av-emb-config",
+       2051:  "epnsdp",
+       2052:  "clearvisn",
+       2053:  "lot105-ds-upd",
+       2054:  "weblogin",
+       2055:  "iop",
+       2056:  "omnisky",
+       2057:  "rich-cp",
+       2058:  "newwavesearch",
+       2059:  "bmc-messaging",
+       2060:  "teleniumdaemon",
+       2061:  "netmount",
+       2062:  "icg-swp",
+       2063:  "icg-bridge",
+       2064:  "icg-iprelay",
+       2065:  "dlsrpn",
+       2066:  "aura",
+       2067:  "dlswpn",
+       2068:  "avauthsrvprtcl",
+       2069:  "event-port",
+       2070:  "ah-esp-encap",
+       2071:  "acp-port",
+       2072:  "msync",
+       2073:  "gxs-data-port",
+       2074:  "vrtl-vmf-sa",
+       2075:  "newlixengine",
+       2076:  "newlixconfig",
+       2077:  "tsrmagt",
+       2078:  "tpcsrvr",
+       2079:  "idware-router",
+       2080:  "autodesk-nlm",
+       2081:  "kme-trap-port",
+       2082:  "infowave",
+       2083:  "radsec",
+       2084:  "sunclustergeo",
+       2085:  "ada-cip",
+       2086:  "gnunet",
+       2087:  "eli",
+       2088:  "ip-blf",
+       2089:  "sep",
+       2090:  "lrp",
+       2091:  "prp",
+       2092:  "descent3",
+       2093:  "nbx-cc",
+       2094:  "nbx-au",
+       2095:  "nbx-ser",
+       2096:  "nbx-dir",
+       2097:  "jetformpreview",
+       2098:  "dialog-port",
+       2099:  "h2250-annex-g",
+       2100:  "amiganetfs",
+       2101:  "rtcm-sc104",
+       2102:  "zephyr-srv",
+       2103:  "zephyr-clt",
+       2104:  "zephyr-hm",
+       2105:  "minipay",
+       2106:  "mzap",
+       2107:  "bintec-admin",
+       2108:  "comcam",
+       2109:  "ergolight",
+       2110:  "umsp",
+       2111:  "dsatp",
+       2112:  "idonix-metanet",
+       2113:  "hsl-storm",
+       2114:  "newheights",
+       2115:  "kdm",
+       2116:  "ccowcmr",
+       2117:  "mentaclient",
+       2118:  "mentaserver",
+       2119:  "gsigatekeeper",
+       2120:  "qencp",
+       2121:  "scientia-ssdb",
+       2122:  "caupc-remote",
+       2123:  "gtp-control",
+       2124:  "elatelink",
+       2125:  "lockstep",
+       2126:  "pktcable-cops",
+       2127:  "index-pc-wb",
+       2128:  "net-steward",
+       2129:  "cs-live",
+       2130:  "xds",
+       2131:  "avantageb2b",
+       2132:  "solera-epmap",
+       2133:  "zymed-zpp",
+       2134:  "avenue",
+       2135:  "gris",
+       2136:  "appworxsrv",
+       2137:  "connect",
+       2138:  "unbind-cluster",
+       2139:  "ias-auth",
+       2140:  "ias-reg",
+       2141:  "ias-admind",
+       2142:  "tdmoip",
+       2143:  "lv-jc",
+       2144:  "lv-ffx",
+       2145:  "lv-pici",
+       2146:  "lv-not",
+       2147:  "lv-auth",
+       2148:  "veritas-ucl",
+       2149:  "acptsys",
+       2150:  "dynamic3d",
+       2151:  "docent",
+       2152:  "gtp-user",
+       2153:  "ctlptc",
+       2154:  "stdptc",
+       2155:  "brdptc",
+       2156:  "trp",
+       2157:  "xnds",
+       2158:  "touchnetplus",
+       2159:  "gdbremote",
+       2160:  "apc-2160",
+       2161:  "apc-2161",
+       2162:  "navisphere",
+       2163:  "navisphere-sec",
+       2164:  "ddns-v3",
+       2165:  "x-bone-api",
+       2166:  "iwserver",
+       2167:  "raw-serial",
+       2168:  "easy-soft-mux",
+       2169:  "brain",
+       2170:  "eyetv",
+       2171:  "msfw-storage",
+       2172:  "msfw-s-storage",
+       2173:  "msfw-replica",
+       2174:  "msfw-array",
+       2175:  "airsync",
+       2176:  "rapi",
+       2177:  "qwave",
+       2178:  "bitspeer",
+       2179:  "vmrdp",
+       2180:  "mc-gt-srv",
+       2181:  "eforward",
+       2182:  "cgn-stat",
+       2183:  "cgn-config",
+       2184:  "nvd",
+       2185:  "onbase-dds",
+       2186:  "gtaua",
+       2187:  "ssmc",
+       2188:  "radware-rpm",
+       2189:  "radware-rpm-s",
+       2190:  "tivoconnect",
+       2191:  "tvbus",
+       2192:  "asdis",
+       2193:  "drwcs",
+       2197:  "mnp-exchange",
+       2198:  "onehome-remote",
+       2199:  "onehome-help",
+       2200:  "ici",
+       2201:  "ats",
+       2202:  "imtc-map",
+       2203:  "b2-runtime",
+       2204:  "b2-license",
+       2205:  "jps",
+       2206:  "hpocbus",
+       2207:  "hpssd",
+       2208:  "hpiod",
+       2209:  "rimf-ps",
+       2210:  "noaaport",
+       2211:  "emwin",
+       2212:  "leecoposserver",
+       2213:  "kali",
+       2214:  "rpi",
+       2215:  "ipcore",
+       2216:  "vtu-comms",
+       2217:  "gotodevice",
+       2218:  "bounzza",
+       2219:  "netiq-ncap",
+       2220:  "netiq",
+       2221:  "ethernet-ip-s",
+       2222:  "EtherNet-IP-1",
+       2223:  "rockwell-csp2",
+       2224:  "efi-mg",
+       2225:  "rcip-itu",
+       2226:  "di-drm",
+       2227:  "di-msg",
+       2228:  "ehome-ms",
+       2229:  "datalens",
+       2230:  "queueadm",
+       2231:  "wimaxasncp",
+       2232:  "ivs-video",
+       2233:  "infocrypt",
+       2234:  "directplay",
+       2235:  "sercomm-wlink",
+       2236:  "nani",
+       2237:  "optech-port1-lm",
+       2238:  "aviva-sna",
+       2239:  "imagequery",
+       2240:  "recipe",
+       2241:  "ivsd",
+       2242:  "foliocorp",
+       2243:  "magicom",
+       2244:  "nmsserver",
+       2245:  "hao",
+       2246:  "pc-mta-addrmap",
+       2247:  "antidotemgrsvr",
+       2248:  "ums",
+       2249:  "rfmp",
+       2250:  "remote-collab",
+       2251:  "dif-port",
+       2252:  "njenet-ssl",
+       2253:  "dtv-chan-req",
+       2254:  "seispoc",
+       2255:  "vrtp",
+       2256:  "pcc-mfp",
+       2257:  "simple-tx-rx",
+       2258:  "rcts",
+       2260:  "apc-2260",
+       2261:  "comotionmaster",
+       2262:  "comotionback",
+       2263:  "ecwcfg",
+       2264:  "apx500api-1",
+       2265:  "apx500api-2",
+       2266:  "mfserver",
+       2267:  "ontobroker",
+       2268:  "amt",
+       2269:  "mikey",
+       2270:  "starschool",
+       2271:  "mmcals",
+       2272:  "mmcal",
+       2273:  "mysql-im",
+       2274:  "pcttunnell",
+       2275:  "ibridge-data",
+       2276:  "ibridge-mgmt",
+       2277:  "bluectrlproxy",
+       2278:  "s3db",
+       2279:  "xmquery",
+       2280:  "lnvpoller",
+       2281:  "lnvconsole",
+       2282:  "lnvalarm",
+       2283:  "lnvstatus",
+       2284:  "lnvmaps",
+       2285:  "lnvmailmon",
+       2286:  "nas-metering",
+       2287:  "dna",
+       2288:  "netml",
+       2289:  "dict-lookup",
+       2290:  "sonus-logging",
+       2291:  "eapsp",
+       2292:  "mib-streaming",
+       2293:  "npdbgmngr",
+       2294:  "konshus-lm",
+       2295:  "advant-lm",
+       2296:  "theta-lm",
+       2297:  "d2k-datamover1",
+       2298:  "d2k-datamover2",
+       2299:  "pc-telecommute",
+       2300:  "cvmmon",
+       2301:  "cpq-wbem",
+       2302:  "binderysupport",
+       2303:  "proxy-gateway",
+       2304:  "attachmate-uts",
+       2305:  "mt-scaleserver",
+       2306:  "tappi-boxnet",
+       2307:  "pehelp",
+       2308:  "sdhelp",
+       2309:  "sdserver",
+       2310:  "sdclient",
+       2311:  "messageservice",
+       2312:  "wanscaler",
+       2313:  "iapp",
+       2314:  "cr-websystems",
+       2315:  "precise-sft",
+       2316:  "sent-lm",
+       2317:  "attachmate-g32",
+       2318:  "cadencecontrol",
+       2319:  "infolibria",
+       2320:  "siebel-ns",
+       2321:  "rdlap",
+       2322:  "ofsd",
+       2323:  "3d-nfsd",
+       2324:  "cosmocall",
+       2325:  "ansysli",
+       2326:  "idcp",
+       2327:  "xingcsm",
+       2328:  "netrix-sftm",
+       2329:  "nvd",
+       2330:  "tscchat",
+       2331:  "agentview",
+       2332:  "rcc-host",
+       2333:  "snapp",
+       2334:  "ace-client",
+       2335:  "ace-proxy",
+       2336:  "appleugcontrol",
+       2337:  "ideesrv",
+       2338:  "norton-lambert",
+       2339:  "3com-webview",
+       2340:  "wrs-registry",
+       2341:  "xiostatus",
+       2342:  "manage-exec",
+       2343:  "nati-logos",
+       2344:  "fcmsys",
+       2345:  "dbm",
+       2346:  "redstorm-join",
+       2347:  "redstorm-find",
+       2348:  "redstorm-info",
+       2349:  "redstorm-diag",
+       2350:  "psbserver",
+       2351:  "psrserver",
+       2352:  "pslserver",
+       2353:  "pspserver",
+       2354:  "psprserver",
+       2355:  "psdbserver",
+       2356:  "gxtelmd",
+       2357:  "unihub-server",
+       2358:  "futrix",
+       2359:  "flukeserver",
+       2360:  "nexstorindltd",
+       2361:  "tl1",
+       2362:  "digiman",
+       2363:  "mediacntrlnfsd",
+       2364:  "oi-2000",
+       2365:  "dbref",
+       2366:  "qip-login",
+       2367:  "service-ctrl",
+       2368:  "opentable",
+       2370:  "l3-hbmon",
+       2371:  "hp-rda",
+       2372:  "lanmessenger",
+       2373:  "remographlm",
+       2374:  "hydra",
+       2375:  "docker",
+       2376:  "docker-s",
+       2377:  "swarm",
+       2379:  "etcd-client",
+       2380:  "etcd-server",
+       2381:  "compaq-https",
+       2382:  "ms-olap3",
+       2383:  "ms-olap4",
+       2384:  "sd-request",
+       2385:  "sd-data",
+       2386:  "virtualtape",
+       2387:  "vsamredirector",
+       2388:  "mynahautostart",
+       2389:  "ovsessionmgr",
+       2390:  "rsmtp",
+       2391:  "3com-net-mgmt",
+       2392:  "tacticalauth",
+       2393:  "ms-olap1",
+       2394:  "ms-olap2",
+       2395:  "lan900-remote",
+       2396:  "wusage",
+       2397:  "ncl",
+       2398:  "orbiter",
+       2399:  "fmpro-fdal",
+       2400:  "opequus-server",
+       2401:  "cvspserver",
+       2402:  "taskmaster2000",
+       2403:  "taskmaster2000",
+       2404:  "iec-104",
+       2405:  "trc-netpoll",
+       2406:  "jediserver",
+       2407:  "orion",
+       2408:  "railgun-webaccl",
+       2409:  "sns-protocol",
+       2410:  "vrts-registry",
+       2411:  "netwave-ap-mgmt",
+       2412:  "cdn",
+       2413:  "orion-rmi-reg",
+       2414:  "beeyond",
+       2415:  "codima-rtp",
+       2416:  "rmtserver",
+       2417:  "composit-server",
+       2418:  "cas",
+       2419:  "attachmate-s2s",
+       2420:  "dslremote-mgmt",
+       2421:  "g-talk",
+       2422:  "crmsbits",
+       2423:  "rnrp",
+       2424:  "kofax-svr",
+       2425:  "fjitsuappmgr",
+       2426:  "vcmp",
+       2427:  "mgcp-gateway",
+       2428:  "ott",
+       2429:  "ft-role",
+       2430:  "venus",
+       2431:  "venus-se",
+       2432:  "codasrv",
+       2433:  "codasrv-se",
+       2434:  "pxc-epmap",
+       2435:  "optilogic",
+       2436:  "topx",
+       2437:  "unicontrol",
+       2438:  "msp",
+       2439:  "sybasedbsynch",
+       2440:  "spearway",
+       2441:  "pvsw-inet",
+       2442:  "netangel",
+       2443:  "powerclientcsf",
+       2444:  "btpp2sectrans",
+       2445:  "dtn1",
+       2446:  "bues-service",
+       2447:  "ovwdb",
+       2448:  "hpppssvr",
+       2449:  "ratl",
+       2450:  "netadmin",
+       2451:  "netchat",
+       2452:  "snifferclient",
+       2453:  "madge-ltd",
+       2454:  "indx-dds",
+       2455:  "wago-io-system",
+       2456:  "altav-remmgt",
+       2457:  "rapido-ip",
+       2458:  "griffin",
+       2459:  "community",
+       2460:  "ms-theater",
+       2461:  "qadmifoper",
+       2462:  "qadmifevent",
+       2463:  "lsi-raid-mgmt",
+       2464:  "direcpc-si",
+       2465:  "lbm",
+       2466:  "lbf",
+       2467:  "high-criteria",
+       2468:  "qip-msgd",
+       2469:  "mti-tcs-comm",
+       2470:  "taskman-port",
+       2471:  "seaodbc",
+       2472:  "c3",
+       2473:  "aker-cdp",
+       2474:  "vitalanalysis",
+       2475:  "ace-server",
+       2476:  "ace-svr-prop",
+       2477:  "ssm-cvs",
+       2478:  "ssm-cssps",
+       2479:  "ssm-els",
+       2480:  "powerexchange",
+       2481:  "giop",
+       2482:  "giop-ssl",
+       2483:  "ttc",
+       2484:  "ttc-ssl",
+       2485:  "netobjects1",
+       2486:  "netobjects2",
+       2487:  "pns",
+       2488:  "moy-corp",
+       2489:  "tsilb",
+       2490:  "qip-qdhcp",
+       2491:  "conclave-cpp",
+       2492:  "groove",
+       2493:  "talarian-mqs",
+       2494:  "bmc-ar",
+       2495:  "fast-rem-serv",
+       2496:  "dirgis",
+       2497:  "quaddb",
+       2498:  "odn-castraq",
+       2499:  "unicontrol",
+       2500:  "rtsserv",
+       2501:  "rtsclient",
+       2502:  "kentrox-prot",
+       2503:  "nms-dpnss",
+       2504:  "wlbs",
+       2505:  "ppcontrol",
+       2506:  "jbroker",
+       2507:  "spock",
+       2508:  "jdatastore",
+       2509:  "fjmpss",
+       2510:  "fjappmgrbulk",
+       2511:  "metastorm",
+       2512:  "citrixima",
+       2513:  "citrixadmin",
+       2514:  "facsys-ntp",
+       2515:  "facsys-router",
+       2516:  "maincontrol",
+       2517:  "call-sig-trans",
+       2518:  "willy",
+       2519:  "globmsgsvc",
+       2520:  "pvsw",
+       2521:  "adaptecmgr",
+       2522:  "windb",
+       2523:  "qke-llc-v3",
+       2524:  "optiwave-lm",
+       2525:  "ms-v-worlds",
+       2526:  "ema-sent-lm",
+       2527:  "iqserver",
+       2528:  "ncr-ccl",
+       2529:  "utsftp",
+       2530:  "vrcommerce",
+       2531:  "ito-e-gui",
+       2532:  "ovtopmd",
+       2533:  "snifferserver",
+       2534:  "combox-web-acc",
+       2535:  "madcap",
+       2536:  "btpp2audctr1",
+       2537:  "upgrade",
+       2538:  "vnwk-prapi",
+       2539:  "vsiadmin",
+       2540:  "lonworks",
+       2541:  "lonworks2",
+       2542:  "udrawgraph",
+       2543:  "reftek",
+       2544:  "novell-zen",
+       2545:  "sis-emt",
+       2546:  "vytalvaultbrtp",
+       2547:  "vytalvaultvsmp",
+       2548:  "vytalvaultpipe",
+       2549:  "ipass",
+       2550:  "ads",
+       2551:  "isg-uda-server",
+       2552:  "call-logging",
+       2553:  "efidiningport",
+       2554:  "vcnet-link-v10",
+       2555:  "compaq-wcp",
+       2556:  "nicetec-nmsvc",
+       2557:  "nicetec-mgmt",
+       2558:  "pclemultimedia",
+       2559:  "lstp",
+       2560:  "labrat",
+       2561:  "mosaixcc",
+       2562:  "delibo",
+       2563:  "cti-redwood",
+       2564:  "hp-3000-telnet",
+       2565:  "coord-svr",
+       2566:  "pcs-pcw",
+       2567:  "clp",
+       2568:  "spamtrap",
+       2569:  "sonuscallsig",
+       2570:  "hs-port",
+       2571:  "cecsvc",
+       2572:  "ibp",
+       2573:  "trustestablish",
+       2574:  "blockade-bpsp",
+       2575:  "hl7",
+       2576:  "tclprodebugger",
+       2577:  "scipticslsrvr",
+       2578:  "rvs-isdn-dcp",
+       2579:  "mpfoncl",
+       2580:  "tributary",
+       2581:  "argis-te",
+       2582:  "argis-ds",
+       2583:  "mon",
+       2584:  "cyaserv",
+       2585:  "netx-server",
+       2586:  "netx-agent",
+       2587:  "masc",
+       2588:  "privilege",
+       2589:  "quartus-tcl",
+       2590:  "idotdist",
+       2591:  "maytagshuffle",
+       2592:  "netrek",
+       2593:  "mns-mail",
+       2594:  "dts",
+       2595:  "worldfusion1",
+       2596:  "worldfusion2",
+       2597:  "homesteadglory",
+       2598:  "citriximaclient",
+       2599:  "snapd",
+       2600:  "hpstgmgr",
+       2601:  "discp-client",
+       2602:  "discp-server",
+       2603:  "servicemeter",
+       2604:  "nsc-ccs",
+       2605:  "nsc-posa",
+       2606:  "netmon",
+       2607:  "connection",
+       2608:  "wag-service",
+       2609:  "system-monitor",
+       2610:  "versa-tek",
+       2611:  "lionhead",
+       2612:  "qpasa-agent",
+       2613:  "smntubootstrap",
+       2614:  "neveroffline",
+       2615:  "firepower",
+       2616:  "appswitch-emp",
+       2617:  "cmadmin",
+       2618:  "priority-e-com",
+       2619:  "bruce",
+       2620:  "lpsrecommender",
+       2621:  "miles-apart",
+       2622:  "metricadbc",
+       2623:  "lmdp",
+       2624:  "aria",
+       2625:  "blwnkl-port",
+       2626:  "gbjd816",
+       2627:  "moshebeeri",
+       2628:  "dict",
+       2629:  "sitaraserver",
+       2630:  "sitaramgmt",
+       2631:  "sitaradir",
+       2632:  "irdg-post",
+       2633:  "interintelli",
+       2634:  "pk-electronics",
+       2635:  "backburner",
+       2636:  "solve",
+       2637:  "imdocsvc",
+       2638:  "sybaseanywhere",
+       2639:  "aminet",
+       2640:  "ami-control",
+       2641:  "hdl-srv",
+       2642:  "tragic",
+       2643:  "gte-samp",
+       2644:  "travsoft-ipx-t",
+       2645:  "novell-ipx-cmd",
+       2646:  "and-lm",
+       2647:  "syncserver",
+       2648:  "upsnotifyprot",
+       2649:  "vpsipport",
+       2650:  "eristwoguns",
+       2651:  "ebinsite",
+       2652:  "interpathpanel",
+       2653:  "sonus",
+       2654:  "corel-vncadmin",
+       2655:  "unglue",
+       2656:  "kana",
+       2657:  "sns-dispatcher",
+       2658:  "sns-admin",
+       2659:  "sns-query",
+       2660:  "gcmonitor",
+       2661:  "olhost",
+       2662:  "bintec-capi",
+       2663:  "bintec-tapi",
+       2664:  "patrol-mq-gm",
+       2665:  "patrol-mq-nm",
+       2666:  "extensis",
+       2667:  "alarm-clock-s",
+       2668:  "alarm-clock-c",
+       2669:  "toad",
+       2670:  "tve-announce",
+       2671:  "newlixreg",
+       2672:  "nhserver",
+       2673:  "firstcall42",
+       2674:  "ewnn",
+       2675:  "ttc-etap",
+       2676:  "simslink",
+       2677:  "gadgetgate1way",
+       2678:  "gadgetgate2way",
+       2679:  "syncserverssl",
+       2680:  "pxc-sapxom",
+       2681:  "mpnjsomb",
+       2683:  "ncdloadbalance",
+       2684:  "mpnjsosv",
+       2685:  "mpnjsocl",
+       2686:  "mpnjsomg",
+       2687:  "pq-lic-mgmt",
+       2688:  "md-cg-http",
+       2689:  "fastlynx",
+       2690:  "hp-nnm-data",
+       2691:  "itinternet",
+       2692:  "admins-lms",
+       2694:  "pwrsevent",
+       2695:  "vspread",
+       2696:  "unifyadmin",
+       2697:  "oce-snmp-trap",
+       2698:  "mck-ivpip",
+       2699:  "csoft-plusclnt",
+       2700:  "tqdata",
+       2701:  "sms-rcinfo",
+       2702:  "sms-xfer",
+       2703:  "sms-chat",
+       2704:  "sms-remctrl",
+       2705:  "sds-admin",
+       2706:  "ncdmirroring",
+       2707:  "emcsymapiport",
+       2708:  "banyan-net",
+       2709:  "supermon",
+       2710:  "sso-service",
+       2711:  "sso-control",
+       2712:  "aocp",
+       2713:  "raventbs",
+       2714:  "raventdm",
+       2715:  "hpstgmgr2",
+       2716:  "inova-ip-disco",
+       2717:  "pn-requester",
+       2718:  "pn-requester2",
+       2719:  "scan-change",
+       2720:  "wkars",
+       2721:  "smart-diagnose",
+       2722:  "proactivesrvr",
+       2723:  "watchdog-nt",
+       2724:  "qotps",
+       2725:  "msolap-ptp2",
+       2726:  "tams",
+       2727:  "mgcp-callagent",
+       2728:  "sqdr",
+       2729:  "tcim-control",
+       2730:  "nec-raidplus",
+       2731:  "fyre-messanger",
+       2732:  "g5m",
+       2733:  "signet-ctf",
+       2734:  "ccs-software",
+       2735:  "netiq-mc",
+       2736:  "radwiz-nms-srv",
+       2737:  "srp-feedback",
+       2738:  "ndl-tcp-ois-gw",
+       2739:  "tn-timing",
+       2740:  "alarm",
+       2741:  "tsb",
+       2742:  "tsb2",
+       2743:  "murx",
+       2744:  "honyaku",
+       2745:  "urbisnet",
+       2746:  "cpudpencap",
+       2747:  "fjippol-swrly",
+       2748:  "fjippol-polsvr",
+       2749:  "fjippol-cnsl",
+       2750:  "fjippol-port1",
+       2751:  "fjippol-port2",
+       2752:  "rsisysaccess",
+       2753:  "de-spot",
+       2754:  "apollo-cc",
+       2755:  "expresspay",
+       2756:  "simplement-tie",
+       2757:  "cnrp",
+       2758:  "apollo-status",
+       2759:  "apollo-gms",
+       2760:  "sabams",
+       2761:  "dicom-iscl",
+       2762:  "dicom-tls",
+       2763:  "desktop-dna",
+       2764:  "data-insurance",
+       2765:  "qip-audup",
+       2766:  "compaq-scp",
+       2767:  "uadtc",
+       2768:  "uacs",
+       2769:  "exce",
+       2770:  "veronica",
+       2771:  "vergencecm",
+       2772:  "auris",
+       2773:  "rbakcup1",
+       2774:  "rbakcup2",
+       2775:  "smpp",
+       2776:  "ridgeway1",
+       2777:  "ridgeway2",
+       2778:  "gwen-sonya",
+       2779:  "lbc-sync",
+       2780:  "lbc-control",
+       2781:  "whosells",
+       2782:  "everydayrc",
+       2783:  "aises",
+       2784:  "www-dev",
+       2785:  "aic-np",
+       2786:  "aic-oncrpc",
+       2787:  "piccolo",
+       2788:  "fryeserv",
+       2789:  "media-agent",
+       2790:  "plgproxy",
+       2791:  "mtport-regist",
+       2792:  "f5-globalsite",
+       2793:  "initlsmsad",
+       2795:  "livestats",
+       2796:  "ac-tech",
+       2797:  "esp-encap",
+       2798:  "tmesis-upshot",
+       2799:  "icon-discover",
+       2800:  "acc-raid",
+       2801:  "igcp",
+       2802:  "veritas-tcp1",
+       2803:  "btprjctrl",
+       2804:  "dvr-esm",
+       2805:  "wta-wsp-s",
+       2806:  "cspuni",
+       2807:  "cspmulti",
+       2808:  "j-lan-p",
+       2809:  "corbaloc",
+       2810:  "netsteward",
+       2811:  "gsiftp",
+       2812:  "atmtcp",
+       2813:  "llm-pass",
+       2814:  "llm-csv",
+       2815:  "lbc-measure",
+       2816:  "lbc-watchdog",
+       2817:  "nmsigport",
+       2818:  "rmlnk",
+       2819:  "fc-faultnotify",
+       2820:  "univision",
+       2821:  "vrts-at-port",
+       2822:  "ka0wuc",
+       2823:  "cqg-netlan",
+       2824:  "cqg-netlan-1",
+       2826:  "slc-systemlog",
+       2827:  "slc-ctrlrloops",
+       2828:  "itm-lm",
+       2829:  "silkp1",
+       2830:  "silkp2",
+       2831:  "silkp3",
+       2832:  "silkp4",
+       2833:  "glishd",
+       2834:  "evtp",
+       2835:  "evtp-data",
+       2836:  "catalyst",
+       2837:  "repliweb",
+       2838:  "starbot",
+       2839:  "nmsigport",
+       2840:  "l3-exprt",
+       2841:  "l3-ranger",
+       2842:  "l3-hawk",
+       2843:  "pdnet",
+       2844:  "bpcp-poll",
+       2845:  "bpcp-trap",
+       2846:  "aimpp-hello",
+       2847:  "aimpp-port-req",
+       2848:  "amt-blc-port",
+       2849:  "fxp",
+       2850:  "metaconsole",
+       2851:  "webemshttp",
+       2852:  "bears-01",
+       2853:  "ispipes",
+       2854:  "infomover",
+       2855:  "msrp",
+       2856:  "cesdinv",
+       2857:  "simctlp",
+       2858:  "ecnp",
+       2859:  "activememory",
+       2860:  "dialpad-voice1",
+       2861:  "dialpad-voice2",
+       2862:  "ttg-protocol",
+       2863:  "sonardata",
+       2864:  "astromed-main",
+       2865:  "pit-vpn",
+       2866:  "iwlistener",
+       2867:  "esps-portal",
+       2868:  "npep-messaging",
+       2869:  "icslap",
+       2870:  "daishi",
+       2871:  "msi-selectplay",
+       2872:  "radix",
+       2874:  "dxmessagebase1",
+       2875:  "dxmessagebase2",
+       2876:  "sps-tunnel",
+       2877:  "bluelance",
+       2878:  "aap",
+       2879:  "ucentric-ds",
+       2880:  "synapse",
+       2881:  "ndsp",
+       2882:  "ndtp",
+       2883:  "ndnp",
+       2884:  "flashmsg",
+       2885:  "topflow",
+       2886:  "responselogic",
+       2887:  "aironetddp",
+       2888:  "spcsdlobby",
+       2889:  "rsom",
+       2890:  "cspclmulti",
+       2891:  "cinegrfx-elmd",
+       2892:  "snifferdata",
+       2893:  "vseconnector",
+       2894:  "abacus-remote",
+       2895:  "natuslink",
+       2896:  "ecovisiong6-1",
+       2897:  "citrix-rtmp",
+       2898:  "appliance-cfg",
+       2899:  "powergemplus",
+       2900:  "quicksuite",
+       2901:  "allstorcns",
+       2902:  "netaspi",
+       2903:  "suitcase",
+       2904:  "m2ua",
+       2905:  "m3ua",
+       2906:  "caller9",
+       2907:  "webmethods-b2b",
+       2908:  "mao",
+       2909:  "funk-dialout",
+       2910:  "tdaccess",
+       2911:  "blockade",
+       2912:  "epicon",
+       2913:  "boosterware",
+       2914:  "gamelobby",
+       2915:  "tksocket",
+       2916:  "elvin-server",
+       2917:  "elvin-client",
+       2918:  "kastenchasepad",
+       2919:  "roboer",
+       2920:  "roboeda",
+       2921:  "cesdcdman",
+       2922:  "cesdcdtrn",
+       2923:  "wta-wsp-wtp-s",
+       2924:  "precise-vip",
+       2926:  "mobile-file-dl",
+       2927:  "unimobilectrl",
+       2928:  "redstone-cpss",
+       2929:  "amx-webadmin",
+       2930:  "amx-weblinx",
+       2931:  "circle-x",
+       2932:  "incp",
+       2933:  "4-tieropmgw",
+       2934:  "4-tieropmcli",
+       2935:  "qtp",
+       2936:  "otpatch",
+       2937:  "pnaconsult-lm",
+       2938:  "sm-pas-1",
+       2939:  "sm-pas-2",
+       2940:  "sm-pas-3",
+       2941:  "sm-pas-4",
+       2942:  "sm-pas-5",
+       2943:  "ttnrepository",
+       2944:  "megaco-h248",
+       2945:  "h248-binary",
+       2946:  "fjsvmpor",
+       2947:  "gpsd",
+       2948:  "wap-push",
+       2949:  "wap-pushsecure",
+       2950:  "esip",
+       2951:  "ottp",
+       2952:  "mpfwsas",
+       2953:  "ovalarmsrv",
+       2954:  "ovalarmsrv-cmd",
+       2955:  "csnotify",
+       2956:  "ovrimosdbman",
+       2957:  "jmact5",
+       2958:  "jmact6",
+       2959:  "rmopagt",
+       2960:  "dfoxserver",
+       2961:  "boldsoft-lm",
+       2962:  "iph-policy-cli",
+       2963:  "iph-policy-adm",
+       2964:  "bullant-srap",
+       2965:  "bullant-rap",
+       2966:  "idp-infotrieve",
+       2967:  "ssc-agent",
+       2968:  "enpp",
+       2969:  "essp",
+       2970:  "index-net",
+       2971:  "netclip",
+       2972:  "pmsm-webrctl",
+       2973:  "svnetworks",
+       2974:  "signal",
+       2975:  "fjmpcm",
+       2976:  "cns-srv-port",
+       2977:  "ttc-etap-ns",
+       2978:  "ttc-etap-ds",
+       2979:  "h263-video",
+       2980:  "wimd",
+       2981:  "mylxamport",
+       2982:  "iwb-whiteboard",
+       2983:  "netplan",
+       2984:  "hpidsadmin",
+       2985:  "hpidsagent",
+       2986:  "stonefalls",
+       2987:  "identify",
+       2988:  "hippad",
+       2989:  "zarkov",
+       2990:  "boscap",
+       2991:  "wkstn-mon",
+       2992:  "avenyo",
+       2993:  "veritas-vis1",
+       2994:  "veritas-vis2",
+       2995:  "idrs",
+       2996:  "vsixml",
+       2997:  "rebol",
+       2998:  "realsecure",
+       2999:  "remoteware-un",
+       3000:  "hbci",
+       3001:  "origo-native",
+       3002:  "exlm-agent",
+       3003:  "cgms",
+       3004:  "csoftragent",
+       3005:  "geniuslm",
+       3006:  "ii-admin",
+       3007:  "lotusmtap",
+       3008:  "midnight-tech",
+       3009:  "pxc-ntfy",
+       3010:  "gw",
+       3011:  "trusted-web",
+       3012:  "twsdss",
+       3013:  "gilatskysurfer",
+       3014:  "broker-service",
+       3015:  "nati-dstp",
+       3016:  "notify-srvr",
+       3017:  "event-listener",
+       3018:  "srvc-registry",
+       3019:  "resource-mgr",
+       3020:  "cifs",
+       3021:  "agriserver",
+       3022:  "csregagent",
+       3023:  "magicnotes",
+       3024:  "nds-sso",
+       3025:  "arepa-raft",
+       3026:  "agri-gateway",
+       3027:  "LiebDevMgmt-C",
+       3028:  "LiebDevMgmt-DM",
+       3029:  "LiebDevMgmt-A",
+       3030:  "arepa-cas",
+       3031:  "eppc",
+       3032:  "redwood-chat",
+       3033:  "pdb",
+       3034:  "osmosis-aeea",
+       3035:  "fjsv-gssagt",
+       3036:  "hagel-dump",
+       3037:  "hp-san-mgmt",
+       3038:  "santak-ups",
+       3039:  "cogitate",
+       3040:  "tomato-springs",
+       3041:  "di-traceware",
+       3042:  "journee",
+       3043:  "brp",
+       3044:  "epp",
+       3045:  "responsenet",
+       3046:  "di-ase",
+       3047:  "hlserver",
+       3048:  "pctrader",
+       3049:  "nsws",
+       3050:  "gds-db",
+       3051:  "galaxy-server",
+       3052:  "apc-3052",
+       3053:  "dsom-server",
+       3054:  "amt-cnf-prot",
+       3055:  "policyserver",
+       3056:  "cdl-server",
+       3057:  "goahead-fldup",
+       3058:  "videobeans",
+       3059:  "qsoft",
+       3060:  "interserver",
+       3061:  "cautcpd",
+       3062:  "ncacn-ip-tcp",
+       3063:  "ncadg-ip-udp",
+       3064:  "rprt",
+       3065:  "slinterbase",
+       3066:  "netattachsdmp",
+       3067:  "fjhpjp",
+       3068:  "ls3bcast",
+       3069:  "ls3",
+       3070:  "mgxswitch",
+       3071:  "xplat-replicate",
+       3072:  "csd-monitor",
+       3073:  "vcrp",
+       3074:  "xbox",
+       3075:  "orbix-locator",
+       3076:  "orbix-config",
+       3077:  "orbix-loc-ssl",
+       3078:  "orbix-cfg-ssl",
+       3079:  "lv-frontpanel",
+       3080:  "stm-pproc",
+       3081:  "tl1-lv",
+       3082:  "tl1-raw",
+       3083:  "tl1-telnet",
+       3084:  "itm-mccs",
+       3085:  "pcihreq",
+       3086:  "jdl-dbkitchen",
+       3087:  "asoki-sma",
+       3088:  "xdtp",
+       3089:  "ptk-alink",
+       3090:  "stss",
+       3091:  "1ci-smcs",
+       3093:  "rapidmq-center",
+       3094:  "rapidmq-reg",
+       3095:  "panasas",
+       3096:  "ndl-aps",
+       3098:  "umm-port",
+       3099:  "chmd",
+       3100:  "opcon-xps",
+       3101:  "hp-pxpib",
+       3102:  "slslavemon",
+       3103:  "autocuesmi",
+       3104:  "autocuelog",
+       3105:  "cardbox",
+       3106:  "cardbox-http",
+       3107:  "business",
+       3108:  "geolocate",
+       3109:  "personnel",
+       3110:  "sim-control",
+       3111:  "wsynch",
+       3112:  "ksysguard",
+       3113:  "cs-auth-svr",
+       3114:  "ccmad",
+       3115:  "mctet-master",
+       3116:  "mctet-gateway",
+       3117:  "mctet-jserv",
+       3118:  "pkagent",
+       3119:  "d2000kernel",
+       3120:  "d2000webserver",
+       3121:  "pcmk-remote",
+       3122:  "vtr-emulator",
+       3123:  "edix",
+       3124:  "beacon-port",
+       3125:  "a13-an",
+       3127:  "ctx-bridge",
+       3128:  "ndl-aas",
+       3129:  "netport-id",
+       3130:  "icpv2",
+       3131:  "netbookmark",
+       3132:  "ms-rule-engine",
+       3133:  "prism-deploy",
+       3134:  "ecp",
+       3135:  "peerbook-port",
+       3136:  "grubd",
+       3137:  "rtnt-1",
+       3138:  "rtnt-2",
+       3139:  "incognitorv",
+       3140:  "ariliamulti",
+       3141:  "vmodem",
+       3142:  "rdc-wh-eos",
+       3143:  "seaview",
+       3144:  "tarantella",
+       3145:  "csi-lfap",
+       3146:  "bears-02",
+       3147:  "rfio",
+       3148:  "nm-game-admin",
+       3149:  "nm-game-server",
+       3150:  "nm-asses-admin",
+       3151:  "nm-assessor",
+       3152:  "feitianrockey",
+       3153:  "s8-client-port",
+       3154:  "ccmrmi",
+       3155:  "jpegmpeg",
+       3156:  "indura",
+       3157:  "e3consultants",
+       3158:  "stvp",
+       3159:  "navegaweb-port",
+       3160:  "tip-app-server",
+       3161:  "doc1lm",
+       3162:  "sflm",
+       3163:  "res-sap",
+       3164:  "imprs",
+       3165:  "newgenpay",
+       3166:  "sossecollector",
+       3167:  "nowcontact",
+       3168:  "poweronnud",
+       3169:  "serverview-as",
+       3170:  "serverview-asn",
+       3171:  "serverview-gf",
+       3172:  "serverview-rm",
+       3173:  "serverview-icc",
+       3174:  "armi-server",
+       3175:  "t1-e1-over-ip",
+       3176:  "ars-master",
+       3177:  "phonex-port",
+       3178:  "radclientport",
+       3179:  "h2gf-w-2m",
+       3180:  "mc-brk-srv",
+       3181:  "bmcpatrolagent",
+       3182:  "bmcpatrolrnvu",
+       3183:  "cops-tls",
+       3184:  "apogeex-port",
+       3185:  "smpppd",
+       3186:  "iiw-port",
+       3187:  "odi-port",
+       3188:  "brcm-comm-port",
+       3189:  "pcle-infex",
+       3190:  "csvr-proxy",
+       3191:  "csvr-sslproxy",
+       3192:  "firemonrcc",
+       3193:  "spandataport",
+       3194:  "magbind",
+       3195:  "ncu-1",
+       3196:  "ncu-2",
+       3197:  "embrace-dp-s",
+       3198:  "embrace-dp-c",
+       3199:  "dmod-workspace",
+       3200:  "tick-port",
+       3201:  "cpq-tasksmart",
+       3202:  "intraintra",
+       3203:  "netwatcher-mon",
+       3204:  "netwatcher-db",
+       3205:  "isns",
+       3206:  "ironmail",
+       3207:  "vx-auth-port",
+       3208:  "pfu-prcallback",
+       3209:  "netwkpathengine",
+       3210:  "flamenco-proxy",
+       3211:  "avsecuremgmt",
+       3212:  "surveyinst",
+       3213:  "neon24x7",
+       3214:  "jmq-daemon-1",
+       3215:  "jmq-daemon-2",
+       3216:  "ferrari-foam",
+       3217:  "unite",
+       3218:  "smartpackets",
+       3219:  "wms-messenger",
+       3220:  "xnm-ssl",
+       3221:  "xnm-clear-text",
+       3222:  "glbp",
+       3223:  "digivote",
+       3224:  "aes-discovery",
+       3225:  "fcip-port",
+       3226:  "isi-irp",
+       3227:  "dwnmshttp",
+       3228:  "dwmsgserver",
+       3229:  "global-cd-port",
+       3230:  "sftdst-port",
+       3231:  "vidigo",
+       3232:  "mdtp",
+       3233:  "whisker",
+       3234:  "alchemy",
+       3235:  "mdap-port",
+       3236:  "apparenet-ts",
+       3237:  "apparenet-tps",
+       3238:  "apparenet-as",
+       3239:  "apparenet-ui",
+       3240:  "triomotion",
+       3241:  "sysorb",
+       3242:  "sdp-id-port",
+       3243:  "timelot",
+       3244:  "onesaf",
+       3245:  "vieo-fe",
+       3246:  "dvt-system",
+       3247:  "dvt-data",
+       3248:  "procos-lm",
+       3249:  "ssp",
+       3250:  "hicp",
+       3251:  "sysscanner",
+       3252:  "dhe",
+       3253:  "pda-data",
+       3254:  "pda-sys",
+       3255:  "semaphore",
+       3256:  "cpqrpm-agent",
+       3257:  "cpqrpm-server",
+       3258:  "ivecon-port",
+       3259:  "epncdp2",
+       3260:  "iscsi-target",
+       3261:  "winshadow",
+       3262:  "necp",
+       3263:  "ecolor-imager",
+       3264:  "ccmail",
+       3265:  "altav-tunnel",
+       3266:  "ns-cfg-server",
+       3267:  "ibm-dial-out",
+       3268:  "msft-gc",
+       3269:  "msft-gc-ssl",
+       3270:  "verismart",
+       3271:  "csoft-prev",
+       3272:  "user-manager",
+       3273:  "sxmp",
+       3274:  "ordinox-server",
+       3275:  "samd",
+       3276:  "maxim-asics",
+       3277:  "awg-proxy",
+       3278:  "lkcmserver",
+       3279:  "admind",
+       3280:  "vs-server",
+       3281:  "sysopt",
+       3282:  "datusorb",
+       3283:  "Apple Remote Desktop (Net Assistant)",
+       3284:  "4talk",
+       3285:  "plato",
+       3286:  "e-net",
+       3287:  "directvdata",
+       3288:  "cops",
+       3289:  "enpc",
+       3290:  "caps-lm",
+       3291:  "sah-lm",
+       3292:  "cart-o-rama",
+       3293:  "fg-fps",
+       3294:  "fg-gip",
+       3295:  "dyniplookup",
+       3296:  "rib-slm",
+       3297:  "cytel-lm",
+       3298:  "deskview",
+       3299:  "pdrncs",
+       3300:  "ceph",
+       3302:  "mcs-fastmail",
+       3303:  "opsession-clnt",
+       3304:  "opsession-srvr",
+       3305:  "odette-ftp",
+       3306:  "mysql",
+       3307:  "opsession-prxy",
+       3308:  "tns-server",
+       3309:  "tns-adv",
+       3310:  "dyna-access",
+       3311:  "mcns-tel-ret",
+       3312:  "appman-server",
+       3313:  "uorb",
+       3314:  "uohost",
+       3315:  "cdid",
+       3316:  "aicc-cmi",
+       3317:  "vsaiport",
+       3318:  "ssrip",
+       3319:  "sdt-lmd",
+       3320:  "officelink2000",
+       3321:  "vnsstr",
+       3326:  "sftu",
+       3327:  "bbars",
+       3328:  "egptlm",
+       3329:  "hp-device-disc",
+       3330:  "mcs-calypsoicf",
+       3331:  "mcs-messaging",
+       3332:  "mcs-mailsvr",
+       3333:  "dec-notes",
+       3334:  "directv-web",
+       3335:  "directv-soft",
+       3336:  "directv-tick",
+       3337:  "directv-catlg",
+       3338:  "anet-b",
+       3339:  "anet-l",
+       3340:  "anet-m",
+       3341:  "anet-h",
+       3342:  "webtie",
+       3343:  "ms-cluster-net",
+       3344:  "bnt-manager",
+       3345:  "influence",
+       3346:  "trnsprntproxy",
+       3347:  "phoenix-rpc",
+       3348:  "pangolin-laser",
+       3349:  "chevinservices",
+       3350:  "findviatv",
+       3351:  "btrieve",
+       3352:  "ssql",
+       3353:  "fatpipe",
+       3354:  "suitjd",
+       3355:  "ordinox-dbase",
+       3356:  "upnotifyps",
+       3357:  "adtech-test",
+       3358:  "mpsysrmsvr",
+       3359:  "wg-netforce",
+       3360:  "kv-server",
+       3361:  "kv-agent",
+       3362:  "dj-ilm",
+       3363:  "nati-vi-server",
+       3364:  "creativeserver",
+       3365:  "contentserver",
+       3366:  "creativepartnr",
+       3372:  "tip2",
+       3373:  "lavenir-lm",
+       3374:  "cluster-disc",
+       3375:  "vsnm-agent",
+       3376:  "cdbroker",
+       3377:  "cogsys-lm",
+       3378:  "wsicopy",
+       3379:  "socorfs",
+       3380:  "sns-channels",
+       3381:  "geneous",
+       3382:  "fujitsu-neat",
+       3383:  "esp-lm",
+       3384:  "hp-clic",
+       3385:  "qnxnetman",
+       3386:  "gprs-data",
+       3387:  "backroomnet",
+       3388:  "cbserver",
+       3389:  "ms-wbt-server",
+       3390:  "dsc",
+       3391:  "savant",
+       3392:  "efi-lm",
+       3393:  "d2k-tapestry1",
+       3394:  "d2k-tapestry2",
+       3395:  "dyna-lm",
+       3396:  "printer-agent",
+       3397:  "cloanto-lm",
+       3398:  "mercantile",
+       3399:  "csms",
+       3400:  "csms2",
+       3401:  "filecast",
+       3402:  "fxaengine-net",
+       3405:  "nokia-ann-ch1",
+       3406:  "nokia-ann-ch2",
+       3407:  "ldap-admin",
+       3408:  "BESApi",
+       3409:  "networklens",
+       3410:  "networklenss",
+       3411:  "biolink-auth",
+       3412:  "xmlblaster",
+       3413:  "svnet",
+       3414:  "wip-port",
+       3415:  "bcinameservice",
+       3416:  "commandport",
+       3417:  "csvr",
+       3418:  "rnmap",
+       3419:  "softaudit",
+       3420:  "ifcp-port",
+       3421:  "bmap",
+       3422:  "rusb-sys-port",
+       3423:  "xtrm",
+       3424:  "xtrms",
+       3425:  "agps-port",
+       3426:  "arkivio",
+       3427:  "websphere-snmp",
+       3428:  "twcss",
+       3429:  "gcsp",
+       3430:  "ssdispatch",
+       3431:  "ndl-als",
+       3432:  "osdcp",
+       3433:  "opnet-smp",
+       3434:  "opencm",
+       3435:  "pacom",
+       3436:  "gc-config",
+       3437:  "autocueds",
+       3438:  "spiral-admin",
+       3439:  "hri-port",
+       3440:  "ans-console",
+       3441:  "connect-client",
+       3442:  "connect-server",
+       3443:  "ov-nnm-websrv",
+       3444:  "denali-server",
+       3445:  "monp",
+       3446:  "3comfaxrpc",
+       3447:  "directnet",
+       3448:  "dnc-port",
+       3449:  "hotu-chat",
+       3450:  "castorproxy",
+       3451:  "asam",
+       3452:  "sabp-signal",
+       3453:  "pscupd",
+       3454:  "mira",
+       3455:  "prsvp",
+       3456:  "vat",
+       3457:  "vat-control",
+       3458:  "d3winosfi",
+       3459:  "integral",
+       3460:  "edm-manager",
+       3461:  "edm-stager",
+       3462:  "edm-std-notify",
+       3463:  "edm-adm-notify",
+       3464:  "edm-mgr-sync",
+       3465:  "edm-mgr-cntrl",
+       3466:  "workflow",
+       3467:  "rcst",
+       3468:  "ttcmremotectrl",
+       3469:  "pluribus",
+       3470:  "jt400",
+       3471:  "jt400-ssl",
+       3472:  "jaugsremotec-1",
+       3473:  "jaugsremotec-2",
+       3474:  "ttntspauto",
+       3475:  "genisar-port",
+       3476:  "nppmp",
+       3477:  "ecomm",
+       3478:  "stun",
+       3479:  "twrpc",
+       3480:  "plethora",
+       3481:  "cleanerliverc",
+       3482:  "vulture",
+       3483:  "slim-devices",
+       3484:  "gbs-stp",
+       3485:  "celatalk",
+       3486:  "ifsf-hb-port",
+       3487:  "ltctcp",
+       3488:  "fs-rh-srv",
+       3489:  "dtp-dia",
+       3490:  "colubris",
+       3491:  "swr-port",
+       3492:  "tvdumtray-port",
+       3493:  "nut",
+       3494:  "ibm3494",
+       3495:  "seclayer-tcp",
+       3496:  "seclayer-tls",
+       3497:  "ipether232port",
+       3498:  "dashpas-port",
+       3499:  "sccip-media",
+       3500:  "rtmp-port",
+       3501:  "isoft-p2p",
+       3502:  "avinstalldisc",
+       3503:  "lsp-ping",
+       3504:  "ironstorm",
+       3505:  "ccmcomm",
+       3506:  "apc-3506",
+       3507:  "nesh-broker",
+       3508:  "interactionweb",
+       3509:  "vt-ssl",
+       3510:  "xss-port",
+       3511:  "webmail-2",
+       3512:  "aztec",
+       3513:  "arcpd",
+       3514:  "must-p2p",
+       3515:  "must-backplane",
+       3516:  "smartcard-port",
+       3517:  "802-11-iapp",
+       3518:  "artifact-msg",
+       3519:  "nvmsgd",
+       3520:  "galileolog",
+       3521:  "mc3ss",
+       3522:  "nssocketport",
+       3523:  "odeumservlink",
+       3524:  "ecmport",
+       3525:  "eisport",
+       3526:  "starquiz-port",
+       3527:  "beserver-msg-q",
+       3528:  "jboss-iiop",
+       3529:  "jboss-iiop-ssl",
+       3530:  "gf",
+       3531:  "joltid",
+       3532:  "raven-rmp",
+       3533:  "raven-rdp",
+       3534:  "urld-port",
+       3535:  "ms-la",
+       3536:  "snac",
+       3537:  "ni-visa-remote",
+       3538:  "ibm-diradm",
+       3539:  "ibm-diradm-ssl",
+       3540:  "pnrp-port",
+       3541:  "voispeed-port",
+       3542:  "hacl-monitor",
+       3543:  "qftest-lookup",
+       3544:  "teredo",
+       3545:  "camac",
+       3547:  "symantec-sim",
+       3548:  "interworld",
+       3549:  "tellumat-nms",
+       3550:  "ssmpp",
+       3551:  "apcupsd",
+       3552:  "taserver",
+       3553:  "rbr-discovery",
+       3554:  "questnotify",
+       3555:  "razor",
+       3556:  "sky-transport",
+       3557:  "personalos-001",
+       3558:  "mcp-port",
+       3559:  "cctv-port",
+       3560:  "iniserve-port",
+       3561:  "bmc-onekey",
+       3562:  "sdbproxy",
+       3563:  "watcomdebug",
+       3564:  "esimport",
+       3565:  "m2pa",
+       3566:  "quest-data-hub",
+       3567:  "dof-eps",
+       3568:  "dof-tunnel-sec",
+       3569:  "mbg-ctrl",
+       3570:  "mccwebsvr-port",
+       3571:  "megardsvr-port",
+       3572:  "megaregsvrport",
+       3573:  "tag-ups-1",
+       3574:  "dmaf-server",
+       3575:  "ccm-port",
+       3576:  "cmc-port",
+       3577:  "config-port",
+       3578:  "data-port",
+       3579:  "ttat3lb",
+       3580:  "nati-svrloc",
+       3581:  "kfxaclicensing",
+       3582:  "press",
+       3583:  "canex-watch",
+       3584:  "u-dbap",
+       3585:  "emprise-lls",
+       3586:  "emprise-lsc",
+       3587:  "p2pgroup",
+       3588:  "sentinel",
+       3589:  "isomair",
+       3590:  "wv-csp-sms",
+       3591:  "gtrack-server",
+       3592:  "gtrack-ne",
+       3593:  "bpmd",
+       3594:  "mediaspace",
+       3595:  "shareapp",
+       3596:  "iw-mmogame",
+       3597:  "a14",
+       3598:  "a15",
+       3599:  "quasar-server",
+       3600:  "trap-daemon",
+       3601:  "visinet-gui",
+       3602:  "infiniswitchcl",
+       3603:  "int-rcv-cntrl",
+       3604:  "bmc-jmx-port",
+       3605:  "comcam-io",
+       3606:  "splitlock",
+       3607:  "precise-i3",
+       3608:  "trendchip-dcp",
+       3609:  "cpdi-pidas-cm",
+       3610:  "echonet",
+       3611:  "six-degrees",
+       3612:  "hp-dataprotect",
+       3613:  "alaris-disc",
+       3614:  "sigma-port",
+       3615:  "start-network",
+       3616:  "cd3o-protocol",
+       3617:  "sharp-server",
+       3618:  "aairnet-1",
+       3619:  "aairnet-2",
+       3620:  "ep-pcp",
+       3621:  "ep-nsp",
+       3622:  "ff-lr-port",
+       3623:  "haipe-discover",
+       3624:  "dist-upgrade",
+       3625:  "volley",
+       3626:  "bvcdaemon-port",
+       3627:  "jamserverport",
+       3628:  "ept-machine",
+       3629:  "escvpnet",
+       3630:  "cs-remote-db",
+       3631:  "cs-services",
+       3632:  "distcc",
+       3633:  "wacp",
+       3634:  "hlibmgr",
+       3635:  "sdo",
+       3636:  "servistaitsm",
+       3637:  "scservp",
+       3638:  "ehp-backup",
+       3639:  "xap-ha",
+       3640:  "netplay-port1",
+       3641:  "netplay-port2",
+       3642:  "juxml-port",
+       3643:  "audiojuggler",
+       3644:  "ssowatch",
+       3645:  "cyc",
+       3646:  "xss-srv-port",
+       3647:  "splitlock-gw",
+       3648:  "fjcp",
+       3649:  "nmmp",
+       3650:  "prismiq-plugin",
+       3651:  "xrpc-registry",
+       3652:  "vxcrnbuport",
+       3653:  "tsp",
+       3654:  "vaprtm",
+       3655:  "abatemgr",
+       3656:  "abatjss",
+       3657:  "immedianet-bcn",
+       3658:  "ps-ams",
+       3659:  "apple-sasl",
+       3660:  "can-nds-ssl",
+       3661:  "can-ferret-ssl",
+       3662:  "pserver",
+       3663:  "dtp",
+       3664:  "ups-engine",
+       3665:  "ent-engine",
+       3666:  "eserver-pap",
+       3667:  "infoexch",
+       3668:  "dell-rm-port",
+       3669:  "casanswmgmt",
+       3670:  "smile",
+       3671:  "efcp",
+       3672:  "lispworks-orb",
+       3673:  "mediavault-gui",
+       3674:  "wininstall-ipc",
+       3675:  "calltrax",
+       3676:  "va-pacbase",
+       3677:  "roverlog",
+       3678:  "ipr-dglt",
+       3679:  "Escale (Newton Dock)",
+       3680:  "npds-tracker",
+       3681:  "bts-x73",
+       3682:  "cas-mapi",
+       3683:  "bmc-ea",
+       3684:  "faxstfx-port",
+       3685:  "dsx-agent",
+       3686:  "tnmpv2",
+       3687:  "simple-push",
+       3688:  "simple-push-s",
+       3689:  "daap",
+       3690:  "svn",
+       3691:  "magaya-network",
+       3692:  "intelsync",
+       3693:  "easl",
+       3695:  "bmc-data-coll",
+       3696:  "telnetcpcd",
+       3697:  "nw-license",
+       3698:  "sagectlpanel",
+       3699:  "kpn-icw",
+       3700:  "lrs-paging",
+       3701:  "netcelera",
+       3702:  "ws-discovery",
+       3703:  "adobeserver-3",
+       3704:  "adobeserver-4",
+       3705:  "adobeserver-5",
+       3706:  "rt-event",
+       3707:  "rt-event-s",
+       3708:  "sun-as-iiops",
+       3709:  "ca-idms",
+       3710:  "portgate-auth",
+       3711:  "edb-server2",
+       3712:  "sentinel-ent",
+       3713:  "tftps",
+       3714:  "delos-dms",
+       3715:  "anoto-rendezv",
+       3716:  "wv-csp-sms-cir",
+       3717:  "wv-csp-udp-cir",
+       3718:  "opus-services",
+       3719:  "itelserverport",
+       3720:  "ufastro-instr",
+       3721:  "xsync",
+       3722:  "xserveraid",
+       3723:  "sychrond",
+       3724:  "blizwow",
+       3725:  "na-er-tip",
+       3726:  "array-manager",
+       3727:  "e-mdu",
+       3728:  "e-woa",
+       3729:  "fksp-audit",
+       3730:  "client-ctrl",
+       3731:  "smap",
+       3732:  "m-wnn",
+       3733:  "multip-msg",
+       3734:  "synel-data",
+       3735:  "pwdis",
+       3736:  "rs-rmi",
+       3737:  "xpanel",
+       3738:  "versatalk",
+       3739:  "launchbird-lm",
+       3740:  "heartbeat",
+       3741:  "wysdma",
+       3742:  "cst-port",
+       3743:  "ipcs-command",
+       3744:  "sasg",
+       3745:  "gw-call-port",
+       3746:  "linktest",
+       3747:  "linktest-s",
+       3748:  "webdata",
+       3749:  "cimtrak",
+       3750:  "cbos-ip-port",
+       3751:  "gprs-cube",
+       3752:  "vipremoteagent",
+       3753:  "nattyserver",
+       3754:  "timestenbroker",
+       3755:  "sas-remote-hlp",
+       3756:  "canon-capt",
+       3757:  "grf-port",
+       3758:  "apw-registry",
+       3759:  "exapt-lmgr",
+       3760:  "adtempusclient",
+       3761:  "gsakmp",
+       3762:  "gbs-smp",
+       3763:  "xo-wave",
+       3764:  "mni-prot-rout",
+       3765:  "rtraceroute",
+       3766:  "sitewatch-s",
+       3767:  "listmgr-port",
+       3768:  "rblcheckd",
+       3769:  "haipe-otnk",
+       3770:  "cindycollab",
+       3771:  "paging-port",
+       3772:  "ctp",
+       3773:  "ctdhercules",
+       3774:  "zicom",
+       3775:  "ispmmgr",
+       3776:  "dvcprov-port",
+       3777:  "jibe-eb",
+       3778:  "c-h-it-port",
+       3779:  "cognima",
+       3780:  "nnp",
+       3781:  "abcvoice-port",
+       3782:  "iso-tp0s",
+       3783:  "bim-pem",
+       3784:  "bfd-control",
+       3785:  "bfd-echo",
+       3786:  "upstriggervsw",
+       3787:  "fintrx",
+       3788:  "isrp-port",
+       3789:  "remotedeploy",
+       3790:  "quickbooksrds",
+       3791:  "tvnetworkvideo",
+       3792:  "sitewatch",
+       3793:  "dcsoftware",
+       3794:  "jaus",
+       3795:  "myblast",
+       3796:  "spw-dialer",
+       3797:  "idps",
+       3798:  "minilock",
+       3799:  "radius-dynauth",
+       3800:  "pwgpsi",
+       3801:  "ibm-mgr",
+       3802:  "vhd",
+       3803:  "soniqsync",
+       3804:  "iqnet-port",
+       3805:  "tcpdataserver",
+       3806:  "wsmlb",
+       3807:  "spugna",
+       3808:  "sun-as-iiops-ca",
+       3809:  "apocd",
+       3810:  "wlanauth",
+       3811:  "amp",
+       3812:  "neto-wol-server",
+       3813:  "rap-ip",
+       3814:  "neto-dcs",
+       3815:  "lansurveyorxml",
+       3816:  "sunlps-http",
+       3817:  "tapeware",
+       3818:  "crinis-hb",
+       3819:  "epl-slp",
+       3820:  "scp",
+       3821:  "pmcp",
+       3822:  "acp-discovery",
+       3823:  "acp-conduit",
+       3824:  "acp-policy",
+       3825:  "ffserver",
+       3826:  "warmux",
+       3827:  "netmpi",
+       3828:  "neteh",
+       3829:  "neteh-ext",
+       3830:  "cernsysmgmtagt",
+       3831:  "dvapps",
+       3832:  "xxnetserver",
+       3833:  "aipn-auth",
+       3834:  "spectardata",
+       3835:  "spectardb",
+       3836:  "markem-dcp",
+       3837:  "mkm-discovery",
+       3838:  "sos",
+       3839:  "amx-rms",
+       3840:  "flirtmitmir",
+       3841:  "shiprush-db-svr",
+       3842:  "nhci",
+       3843:  "quest-agent",
+       3844:  "rnm",
+       3845:  "v-one-spp",
+       3846:  "an-pcp",
+       3847:  "msfw-control",
+       3848:  "item",
+       3849:  "spw-dnspreload",
+       3850:  "qtms-bootstrap",
+       3851:  "spectraport",
+       3852:  "sse-app-config",
+       3853:  "sscan",
+       3854:  "stryker-com",
+       3855:  "opentrac",
+       3856:  "informer",
+       3857:  "trap-port",
+       3858:  "trap-port-mom",
+       3859:  "nav-port",
+       3860:  "sasp",
+       3861:  "winshadow-hd",
+       3862:  "giga-pocket",
+       3863:  "asap-tcp",
+       3864:  "asap-tcp-tls",
+       3865:  "xpl",
+       3866:  "dzdaemon",
+       3867:  "dzoglserver",
+       3868:  "diameter",
+       3869:  "ovsam-mgmt",
+       3870:  "ovsam-d-agent",
+       3871:  "avocent-adsap",
+       3872:  "oem-agent",
+       3873:  "fagordnc",
+       3874:  "sixxsconfig",
+       3875:  "pnbscada",
+       3876:  "dl-agent",
+       3877:  "xmpcr-interface",
+       3878:  "fotogcad",
+       3879:  "appss-lm",
+       3880:  "igrs",
+       3881:  "idac",
+       3882:  "msdts1",
+       3883:  "vrpn",
+       3884:  "softrack-meter",
+       3885:  "topflow-ssl",
+       3886:  "nei-management",
+       3887:  "ciphire-data",
+       3888:  "ciphire-serv",
+       3889:  "dandv-tester",
+       3890:  "ndsconnect",
+       3891:  "rtc-pm-port",
+       3892:  "pcc-image-port",
+       3893:  "cgi-starapi",
+       3894:  "syam-agent",
+       3895:  "syam-smc",
+       3896:  "sdo-tls",
+       3897:  "sdo-ssh",
+       3898:  "senip",
+       3899:  "itv-control",
+       3900:  "udt-os",
+       3901:  "nimsh",
+       3902:  "nimaux",
+       3903:  "charsetmgr",
+       3904:  "omnilink-port",
+       3905:  "mupdate",
+       3906:  "topovista-data",
+       3907:  "imoguia-port",
+       3908:  "hppronetman",
+       3909:  "surfcontrolcpa",
+       3910:  "prnrequest",
+       3911:  "prnstatus",
+       3912:  "gbmt-stars",
+       3913:  "listcrt-port",
+       3914:  "listcrt-port-2",
+       3915:  "agcat",
+       3916:  "wysdmc",
+       3917:  "aftmux",
+       3918:  "pktcablemmcops",
+       3919:  "hyperip",
+       3920:  "exasoftport1",
+       3921:  "herodotus-net",
+       3922:  "sor-update",
+       3923:  "symb-sb-port",
+       3924:  "mpl-gprs-port",
+       3925:  "zmp",
+       3926:  "winport",
+       3927:  "natdataservice",
+       3928:  "netboot-pxe",
+       3929:  "smauth-port",
+       3930:  "syam-webserver",
+       3931:  "msr-plugin-port",
+       3932:  "dyn-site",
+       3933:  "plbserve-port",
+       3934:  "sunfm-port",
+       3935:  "sdp-portmapper",
+       3936:  "mailprox",
+       3937:  "dvbservdsc",
+       3938:  "dbcontrol-agent",
+       3939:  "aamp",
+       3940:  "xecp-node",
+       3941:  "homeportal-web",
+       3942:  "srdp",
+       3943:  "tig",
+       3944:  "sops",
+       3945:  "emcads",
+       3946:  "backupedge",
+       3947:  "ccp",
+       3948:  "apdap",
+       3949:  "drip",
+       3950:  "namemunge",
+       3951:  "pwgippfax",
+       3952:  "i3-sessionmgr",
+       3953:  "xmlink-connect",
+       3954:  "adrep",
+       3955:  "p2pcommunity",
+       3956:  "gvcp",
+       3957:  "mqe-broker",
+       3958:  "mqe-agent",
+       3959:  "treehopper",
+       3960:  "bess",
+       3961:  "proaxess",
+       3962:  "sbi-agent",
+       3963:  "thrp",
+       3964:  "sasggprs",
+       3965:  "ati-ip-to-ncpe",
+       3966:  "bflckmgr",
+       3967:  "ppsms",
+       3968:  "ianywhere-dbns",
+       3969:  "landmarks",
+       3970:  "lanrevagent",
+       3971:  "lanrevserver",
+       3972:  "iconp",
+       3973:  "progistics",
+       3974:  "citysearch",
+       3975:  "airshot",
+       3976:  "opswagent",
+       3977:  "opswmanager",
+       3978:  "secure-cfg-svr",
+       3979:  "smwan",
+       3980:  "acms",
+       3981:  "starfish",
+       3982:  "eis",
+       3983:  "eisp",
+       3984:  "mapper-nodemgr",
+       3985:  "mapper-mapethd",
+       3986:  "mapper-ws-ethd",
+       3987:  "centerline",
+       3988:  "dcs-config",
+       3989:  "bv-queryengine",
+       3990:  "bv-is",
+       3991:  "bv-smcsrv",
+       3992:  "bv-ds",
+       3993:  "bv-agent",
+       3995:  "iss-mgmt-ssl",
+       3996:  "abcsoftware",
+       3997:  "agentsease-db",
+       3998:  "dnx",
+       3999:  "nvcnet",
+       4000:  "terabase",
+       4001:  "newoak",
+       4002:  "pxc-spvr-ft",
+       4003:  "pxc-splr-ft",
+       4004:  "pxc-roid",
+       4005:  "pxc-pin",
+       4006:  "pxc-spvr",
+       4007:  "pxc-splr",
+       4008:  "netcheque",
+       4009:  "chimera-hwm",
+       4010:  "samsung-unidex",
+       4011:  "altserviceboot",
+       4012:  "pda-gate",
+       4013:  "acl-manager",
+       4014:  "taiclock",
+       4015:  "talarian-mcast1",
+       4016:  "talarian-mcast2",
+       4017:  "talarian-mcast3",
+       4018:  "talarian-mcast4",
+       4019:  "talarian-mcast5",
+       4020:  "trap",
+       4021:  "nexus-portal",
+       4022:  "dnox",
+       4023:  "esnm-zoning",
+       4024:  "tnp1-port",
+       4025:  "partimage",
+       4026:  "as-debug",
+       4027:  "bxp",
+       4028:  "dtserver-port",
+       4029:  "ip-qsig",
+       4030:  "jdmn-port",
+       4031:  "suucp",
+       4032:  "vrts-auth-port",
+       4033:  "sanavigator",
+       4034:  "ubxd",
+       4035:  "wap-push-http",
+       4036:  "wap-push-https",
+       4037:  "ravehd",
+       4038:  "fazzt-ptp",
+       4039:  "fazzt-admin",
+       4040:  "yo-main",
+       4041:  "houston",
+       4042:  "ldxp",
+       4043:  "nirp",
+       4044:  "ltp",
+       4045:  "npp",
+       4046:  "acp-proto",
+       4047:  "ctp-state",
+       4049:  "wafs",
+       4050:  "cisco-wafs",
+       4051:  "cppdp",
+       4052:  "interact",
+       4053:  "ccu-comm-1",
+       4054:  "ccu-comm-2",
+       4055:  "ccu-comm-3",
+       4056:  "lms",
+       4057:  "wfm",
+       4058:  "kingfisher",
+       4059:  "dlms-cosem",
+       4060:  "dsmeter-iatc",
+       4061:  "ice-location",
+       4062:  "ice-slocation",
+       4063:  "ice-router",
+       4064:  "ice-srouter",
+       4065:  "avanti-cdp",
+       4066:  "pmas",
+       4067:  "idp",
+       4068:  "ipfltbcst",
+       4069:  "minger",
+       4070:  "tripe",
+       4071:  "aibkup",
+       4072:  "zieto-sock",
+       4073:  "iRAPP",
+       4074:  "cequint-cityid",
+       4075:  "perimlan",
+       4076:  "seraph",
+       4078:  "cssp",
+       4079:  "santools",
+       4080:  "lorica-in",
+       4081:  "lorica-in-sec",
+       4082:  "lorica-out",
+       4083:  "lorica-out-sec",
+       4085:  "ezmessagesrv",
+       4087:  "applusservice",
+       4088:  "npsp",
+       4089:  "opencore",
+       4090:  "omasgport",
+       4091:  "ewinstaller",
+       4092:  "ewdgs",
+       4093:  "pvxpluscs",
+       4094:  "sysrqd",
+       4095:  "xtgui",
+       4096:  "bre",
+       4097:  "patrolview",
+       4098:  "drmsfsd",
+       4099:  "dpcp",
+       4100:  "igo-incognito",
+       4101:  "brlp-0",
+       4102:  "brlp-1",
+       4103:  "brlp-2",
+       4104:  "brlp-3",
+       4105:  "shofar",
+       4106:  "synchronite",
+       4107:  "j-ac",
+       4108:  "accel",
+       4109:  "izm",
+       4110:  "g2tag",
+       4111:  "xgrid",
+       4112:  "apple-vpns-rp",
+       4113:  "aipn-reg",
+       4114:  "jomamqmonitor",
+       4115:  "cds",
+       4116:  "smartcard-tls",
+       4117:  "hillrserv",
+       4118:  "netscript",
+       4119:  "assuria-slm",
+       4121:  "e-builder",
+       4122:  "fprams",
+       4123:  "z-wave",
+       4124:  "tigv2",
+       4125:  "opsview-envoy",
+       4126:  "ddrepl",
+       4127:  "unikeypro",
+       4128:  "nufw",
+       4129:  "nuauth",
+       4130:  "fronet",
+       4131:  "stars",
+       4132:  "nuts-dem",
+       4133:  "nuts-bootp",
+       4134:  "nifty-hmi",
+       4135:  "cl-db-attach",
+       4136:  "cl-db-request",
+       4137:  "cl-db-remote",
+       4138:  "nettest",
+       4139:  "thrtx",
+       4140:  "cedros-fds",
+       4141:  "oirtgsvc",
+       4142:  "oidocsvc",
+       4143:  "oidsr",
+       4145:  "vvr-control",
+       4146:  "tgcconnect",
+       4147:  "vrxpservman",
+       4148:  "hhb-handheld",
+       4149:  "agslb",
+       4150:  "PowerAlert-nsa",
+       4151:  "menandmice-noh",
+       4152:  "idig-mux",
+       4153:  "mbl-battd",
+       4154:  "atlinks",
+       4155:  "bzr",
+       4156:  "stat-results",
+       4157:  "stat-scanner",
+       4158:  "stat-cc",
+       4159:  "nss",
+       4160:  "jini-discovery",
+       4161:  "omscontact",
+       4162:  "omstopology",
+       4163:  "silverpeakpeer",
+       4164:  "silverpeakcomm",
+       4165:  "altcp",
+       4166:  "joost",
+       4167:  "ddgn",
+       4168:  "pslicser",
+       4169:  "iadt",
+       4170:  "d-cinema-csp",
+       4171:  "ml-svnet",
+       4172:  "pcoip",
+       4174:  "smcluster",
+       4175:  "bccp",
+       4176:  "tl-ipcproxy",
+       4177:  "wello",
+       4178:  "storman",
+       4179:  "MaxumSP",
+       4180:  "httpx",
+       4181:  "macbak",
+       4182:  "pcptcpservice",
+       4183:  "cyborgnet",
+       4184:  "universe-suite",
+       4185:  "wcpp",
+       4186:  "boxbackupstore",
+       4187:  "csc-proxy",
+       4188:  "vatata",
+       4189:  "pcep",
+       4190:  "sieve",
+       4192:  "azeti",
+       4193:  "pvxplusio",
+       4197:  "hctl",
+       4199:  "eims-admin",
+       4300:  "corelccam",
+       4301:  "d-data",
+       4302:  "d-data-control",
+       4303:  "srcp",
+       4304:  "owserver",
+       4305:  "batman",
+       4306:  "pinghgl",
+       4307:  "trueconf",
+       4308:  "compx-lockview",
+       4309:  "dserver",
+       4310:  "mirrtex",
+       4311:  "p6ssmc",
+       4312:  "pscl-mgt",
+       4313:  "perrla",
+       4314:  "choiceview-agt",
+       4316:  "choiceview-clt",
+       4320:  "fdt-rcatp",
+       4321:  "rwhois",
+       4322:  "trim-event",
+       4323:  "trim-ice",
+       4325:  "geognosisman",
+       4326:  "geognosis",
+       4327:  "jaxer-web",
+       4328:  "jaxer-manager",
+       4329:  "publiqare-sync",
+       4330:  "dey-sapi",
+       4331:  "ktickets-rest",
+       4333:  "ahsp",
+       4334:  "netconf-ch-ssh",
+       4335:  "netconf-ch-tls",
+       4336:  "restconf-ch-tls",
+       4340:  "gaia",
+       4341:  "lisp-data",
+       4342:  "lisp-cons",
+       4343:  "unicall",
+       4344:  "vinainstall",
+       4345:  "m4-network-as",
+       4346:  "elanlm",
+       4347:  "lansurveyor",
+       4348:  "itose",
+       4349:  "fsportmap",
+       4350:  "net-device",
+       4351:  "plcy-net-svcs",
+       4352:  "pjlink",
+       4353:  "f5-iquery",
+       4354:  "qsnet-trans",
+       4355:  "qsnet-workst",
+       4356:  "qsnet-assist",
+       4357:  "qsnet-cond",
+       4358:  "qsnet-nucl",
+       4359:  "omabcastltkm",
+       4360:  "matrix-vnet",
+       4368:  "wxbrief",
+       4369:  "epmd",
+       4370:  "elpro-tunnel",
+       4371:  "l2c-control",
+       4372:  "l2c-data",
+       4373:  "remctl",
+       4374:  "psi-ptt",
+       4375:  "tolteces",
+       4376:  "bip",
+       4377:  "cp-spxsvr",
+       4378:  "cp-spxdpy",
+       4379:  "ctdb",
+       4389:  "xandros-cms",
+       4390:  "wiegand",
+       4391:  "apwi-imserver",
+       4392:  "apwi-rxserver",
+       4393:  "apwi-rxspooler",
+       4395:  "omnivisionesx",
+       4396:  "fly",
+       4400:  "ds-srv",
+       4401:  "ds-srvr",
+       4402:  "ds-clnt",
+       4403:  "ds-user",
+       4404:  "ds-admin",
+       4405:  "ds-mail",
+       4406:  "ds-slp",
+       4407:  "nacagent",
+       4408:  "slscc",
+       4409:  "netcabinet-com",
+       4410:  "itwo-server",
+       4411:  "found",
+       4413:  "avi-nms",
+       4414:  "updog",
+       4415:  "brcd-vr-req",
+       4416:  "pjj-player",
+       4417:  "workflowdir",
+       4419:  "cbp",
+       4420:  "nvm-express",
+       4421:  "scaleft",
+       4422:  "tsepisp",
+       4423:  "thingkit",
+       4425:  "netrockey6",
+       4426:  "beacon-port-2",
+       4427:  "drizzle",
+       4428:  "omviserver",
+       4429:  "omviagent",
+       4430:  "rsqlserver",
+       4431:  "wspipe",
+       4432:  "l-acoustics",
+       4433:  "vop",
+       4442:  "saris",
+       4443:  "pharos",
+       4444:  "krb524",
+       4445:  "upnotifyp",
+       4446:  "n1-fwp",
+       4447:  "n1-rmgmt",
+       4448:  "asc-slmd",
+       4449:  "privatewire",
+       4450:  "camp",
+       4451:  "ctisystemmsg",
+       4452:  "ctiprogramload",
+       4453:  "nssalertmgr",
+       4454:  "nssagentmgr",
+       4455:  "prchat-user",
+       4456:  "prchat-server",
+       4457:  "prRegister",
+       4458:  "mcp",
+       4484:  "hpssmgmt",
+       4485:  "assyst-dr",
+       4486:  "icms",
+       4487:  "prex-tcp",
+       4488:  "awacs-ice",
+       4500:  "ipsec-nat-t",
+       4535:  "ehs",
+       4536:  "ehs-ssl",
+       4537:  "wssauthsvc",
+       4538:  "swx-gate",
+       4545:  "worldscores",
+       4546:  "sf-lm",
+       4547:  "lanner-lm",
+       4548:  "synchromesh",
+       4549:  "aegate",
+       4550:  "gds-adppiw-db",
+       4551:  "ieee-mih",
+       4552:  "menandmice-mon",
+       4553:  "icshostsvc",
+       4554:  "msfrs",
+       4555:  "rsip",
+       4556:  "dtn-bundle",
+       4559:  "hylafax",
+       4563:  "amahi-anywhere",
+       4566:  "kwtc",
+       4567:  "tram",
+       4568:  "bmc-reporting",
+       4569:  "iax",
+       4570:  "deploymentmap",
+       4573:  "cardifftec-back",
+       4590:  "rid",
+       4591:  "l3t-at-an",
+       4593:  "ipt-anri-anri",
+       4594:  "ias-session",
+       4595:  "ias-paging",
+       4596:  "ias-neighbor",
+       4597:  "a21-an-1xbs",
+       4598:  "a16-an-an",
+       4599:  "a17-an-an",
+       4600:  "piranha1",
+       4601:  "piranha2",
+       4602:  "mtsserver",
+       4603:  "menandmice-upg",
+       4604:  "irp",
+       4605:  "sixchat",
+       4658:  "playsta2-app",
+       4659:  "playsta2-lob",
+       4660:  "smaclmgr",
+       4661:  "kar2ouche",
+       4662:  "oms",
+       4663:  "noteit",
+       4664:  "ems",
+       4665:  "contclientms",
+       4666:  "eportcomm",
+       4667:  "mmacomm",
+       4668:  "mmaeds",
+       4669:  "eportcommdata",
+       4670:  "light",
+       4671:  "acter",
+       4672:  "rfa",
+       4673:  "cxws",
+       4674:  "appiq-mgmt",
+       4675:  "dhct-status",
+       4676:  "dhct-alerts",
+       4677:  "bcs",
+       4678:  "traversal",
+       4679:  "mgesupervision",
+       4680:  "mgemanagement",
+       4681:  "parliant",
+       4682:  "finisar",
+       4683:  "spike",
+       4684:  "rfid-rp1",
+       4685:  "autopac",
+       4686:  "msp-os",
+       4687:  "nst",
+       4688:  "mobile-p2p",
+       4689:  "altovacentral",
+       4690:  "prelude",
+       4691:  "mtn",
+       4692:  "conspiracy",
+       4700:  "netxms-agent",
+       4701:  "netxms-mgmt",
+       4702:  "netxms-sync",
+       4703:  "npqes-test",
+       4704:  "assuria-ins",
+       4711:  "trinity-dist",
+       4725:  "truckstar",
+       4727:  "fcis",
+       4728:  "capmux",
+       4730:  "gearman",
+       4731:  "remcap",
+       4733:  "resorcs",
+       4737:  "ipdr-sp",
+       4738:  "solera-lpn",
+       4739:  "ipfix",
+       4740:  "ipfixs",
+       4741:  "lumimgrd",
+       4742:  "sicct",
+       4743:  "openhpid",
+       4744:  "ifsp",
+       4745:  "fmp",
+       4749:  "profilemac",
+       4750:  "ssad",
+       4751:  "spocp",
+       4752:  "snap",
+       4753:  "simon",
+       4756:  "RDCenter",
+       4774:  "converge",
+       4784:  "bfd-multi-ctl",
+       4786:  "smart-install",
+       4787:  "sia-ctrl-plane",
+       4788:  "xmcp",
+       4800:  "iims",
+       4801:  "iwec",
+       4802:  "ilss",
+       4803:  "notateit",
+       4827:  "htcp",
+       4837:  "varadero-0",
+       4838:  "varadero-1",
+       4839:  "varadero-2",
+       4840:  "opcua-tcp",
+       4841:  "quosa",
+       4842:  "gw-asv",
+       4843:  "opcua-tls",
+       4844:  "gw-log",
+       4845:  "wcr-remlib",
+       4846:  "contamac-icm",
+       4847:  "wfc",
+       4848:  "appserv-http",
+       4849:  "appserv-https",
+       4850:  "sun-as-nodeagt",
+       4851:  "derby-repli",
+       4867:  "unify-debug",
+       4868:  "phrelay",
+       4869:  "phrelaydbg",
+       4870:  "cc-tracking",
+       4871:  "wired",
+       4876:  "tritium-can",
+       4877:  "lmcs",
+       4879:  "wsdl-event",
+       4880:  "hislip",
+       4883:  "wmlserver",
+       4884:  "hivestor",
+       4885:  "abbs",
+       4894:  "lyskom",
+       4899:  "radmin-port",
+       4900:  "hfcs",
+       4901:  "flr-agent",
+       4902:  "magiccontrol",
+       4912:  "lutap",
+       4913:  "lutcp",
+       4914:  "bones",
+       4915:  "frcs",
+       4940:  "eq-office-4940",
+       4941:  "eq-office-4941",
+       4942:  "eq-office-4942",
+       4949:  "munin",
+       4950:  "sybasesrvmon",
+       4951:  "pwgwims",
+       4952:  "sagxtsds",
+       4953:  "dbsyncarbiter",
+       4969:  "ccss-qmm",
+       4970:  "ccss-qsm",
+       4971:  "burp",
+       4984:  "webyast",
+       4985:  "gerhcs",
+       4986:  "mrip",
+       4987:  "smar-se-port1",
+       4988:  "smar-se-port2",
+       4989:  "parallel",
+       4990:  "busycal",
+       4991:  "vrt",
+       4999:  "hfcs-manager",
+       5000:  "commplex-main",
+       5001:  "commplex-link",
+       5002:  "rfe",
+       5003:  "fmpro-internal",
+       5004:  "avt-profile-1",
+       5005:  "avt-profile-2",
+       5006:  "wsm-server",
+       5007:  "wsm-server-ssl",
+       5008:  "synapsis-edge",
+       5009:  "winfs",
+       5010:  "telelpathstart",
+       5011:  "telelpathattack",
+       5012:  "nsp",
+       5013:  "fmpro-v6",
+       5015:  "fmwp",
+       5020:  "zenginkyo-1",
+       5021:  "zenginkyo-2",
+       5022:  "mice",
+       5023:  "htuilsrv",
+       5024:  "scpi-telnet",
+       5025:  "scpi-raw",
+       5026:  "strexec-d",
+       5027:  "strexec-s",
+       5028:  "qvr",
+       5029:  "infobright",
+       5030:  "surfpass",
+       5032:  "signacert-agent",
+       5033:  "jtnetd-server",
+       5034:  "jtnetd-status",
+       5042:  "asnaacceler8db",
+       5043:  "swxadmin",
+       5044:  "lxi-evntsvc",
+       5045:  "osp",
+       5048:  "texai",
+       5049:  "ivocalize",
+       5050:  "mmcc",
+       5051:  "ita-agent",
+       5052:  "ita-manager",
+       5053:  "rlm",
+       5054:  "rlm-admin",
+       5055:  "unot",
+       5056:  "intecom-ps1",
+       5057:  "intecom-ps2",
+       5059:  "sds",
+       5060:  "sip",
+       5061:  "sips",
+       5062:  "na-localise",
+       5063:  "csrpc",
+       5064:  "ca-1",
+       5065:  "ca-2",
+       5066:  "stanag-5066",
+       5067:  "authentx",
+       5068:  "bitforestsrv",
+       5069:  "i-net-2000-npr",
+       5070:  "vtsas",
+       5071:  "powerschool",
+       5072:  "ayiya",
+       5073:  "tag-pm",
+       5074:  "alesquery",
+       5075:  "pvaccess",
+       5080:  "onscreen",
+       5081:  "sdl-ets",
+       5082:  "qcp",
+       5083:  "qfp",
+       5084:  "llrp",
+       5085:  "encrypted-llrp",
+       5086:  "aprigo-cs",
+       5087:  "biotic",
+       5093:  "sentinel-lm",
+       5094:  "hart-ip",
+       5099:  "sentlm-srv2srv",
+       5100:  "socalia",
+       5101:  "talarian-tcp",
+       5102:  "oms-nonsecure",
+       5103:  "actifio-c2c",
+       5106:  "actifioudsagent",
+       5107:  "actifioreplic",
+       5111:  "taep-as-svc",
+       5112:  "pm-cmdsvr",
+       5114:  "ev-services",
+       5115:  "autobuild",
+       5117:  "gradecam",
+       5120:  "barracuda-bbs",
+       5133:  "nbt-pc",
+       5134:  "ppactivation",
+       5135:  "erp-scale",
+       5137:  "ctsd",
+       5145:  "rmonitor-secure",
+       5146:  "social-alarm",
+       5150:  "atmp",
+       5151:  "esri-sde",
+       5152:  "sde-discovery",
+       5153:  "toruxserver",
+       5154:  "bzflag",
+       5155:  "asctrl-agent",
+       5156:  "rugameonline",
+       5157:  "mediat",
+       5161:  "snmpssh",
+       5162:  "snmpssh-trap",
+       5163:  "sbackup",
+       5164:  "vpa",
+       5165:  "ife-icorp",
+       5166:  "winpcs",
+       5167:  "scte104",
+       5168:  "scte30",
+       5172:  "pcoip-mgmt",
+       5190:  "aol",
+       5191:  "aol-1",
+       5192:  "aol-2",
+       5193:  "aol-3",
+       5194:  "cpscomm",
+       5195:  "ampl-lic",
+       5196:  "ampl-tableproxy",
+       5197:  "tunstall-lwp",
+       5200:  "targus-getdata",
+       5201:  "targus-getdata1",
+       5202:  "targus-getdata2",
+       5203:  "targus-getdata3",
+       5209:  "nomad",
+       5215:  "noteza",
+       5221:  "3exmp",
+       5222:  "xmpp-client",
+       5223:  "hpvirtgrp",
+       5224:  "hpvirtctrl",
+       5225:  "hp-server",
+       5226:  "hp-status",
+       5227:  "perfd",
+       5228:  "hpvroom",
+       5229:  "jaxflow",
+       5230:  "jaxflow-data",
+       5231:  "crusecontrol",
+       5232:  "csedaemon",
+       5233:  "enfs",
+       5234:  "eenet",
+       5235:  "galaxy-network",
+       5236:  "padl2sim",
+       5237:  "mnet-discovery",
+       5245:  "downtools",
+       5248:  "caacws",
+       5249:  "caaclang2",
+       5250:  "soagateway",
+       5251:  "caevms",
+       5252:  "movaz-ssc",
+       5253:  "kpdp",
+       5254:  "logcabin",
+       5264:  "3com-njack-1",
+       5265:  "3com-njack-2",
+       5269:  "xmpp-server",
+       5270:  "cartographerxmp",
+       5271:  "cuelink",
+       5272:  "pk",
+       5280:  "xmpp-bosh",
+       5281:  "undo-lm",
+       5282:  "transmit-port",
+       5298:  "presence",
+       5299:  "nlg-data",
+       5300:  "hacl-hb",
+       5301:  "hacl-gs",
+       5302:  "hacl-cfg",
+       5303:  "hacl-probe",
+       5304:  "hacl-local",
+       5305:  "hacl-test",
+       5306:  "sun-mc-grp",
+       5307:  "sco-aip",
+       5308:  "cfengine",
+       5309:  "jprinter",
+       5310:  "outlaws",
+       5312:  "permabit-cs",
+       5313:  "rrdp",
+       5314:  "opalis-rbt-ipc",
+       5315:  "hacl-poll",
+       5316:  "hpbladems",
+       5317:  "hpdevms",
+       5318:  "pkix-cmc",
+       5320:  "bsfserver-zn",
+       5321:  "bsfsvr-zn-ssl",
+       5343:  "kfserver",
+       5344:  "xkotodrcp",
+       5349:  "stuns",
+       5352:  "dns-llq",
+       5353:  "mdns",
+       5354:  "mdnsresponder",
+       5355:  "llmnr",
+       5356:  "ms-smlbiz",
+       5357:  "wsdapi",
+       5358:  "wsdapi-s",
+       5359:  "ms-alerter",
+       5360:  "ms-sideshow",
+       5361:  "ms-s-sideshow",
+       5362:  "serverwsd2",
+       5363:  "net-projection",
+       5397:  "stresstester",
+       5398:  "elektron-admin",
+       5399:  "securitychase",
+       5400:  "excerpt",
+       5401:  "excerpts",
+       5402:  "mftp",
+       5403:  "hpoms-ci-lstn",
+       5404:  "hpoms-dps-lstn",
+       5405:  "netsupport",
+       5406:  "systemics-sox",
+       5407:  "foresyte-clear",
+       5408:  "foresyte-sec",
+       5409:  "salient-dtasrv",
+       5410:  "salient-usrmgr",
+       5411:  "actnet",
+       5412:  "continuus",
+       5413:  "wwiotalk",
+       5414:  "statusd",
+       5415:  "ns-server",
+       5416:  "sns-gateway",
+       5417:  "sns-agent",
+       5418:  "mcntp",
+       5419:  "dj-ice",
+       5420:  "cylink-c",
+       5421:  "netsupport2",
+       5422:  "salient-mux",
+       5423:  "virtualuser",
+       5424:  "beyond-remote",
+       5425:  "br-channel",
+       5426:  "devbasic",
+       5427:  "sco-peer-tta",
+       5428:  "telaconsole",
+       5429:  "base",
+       5430:  "radec-corp",
+       5431:  "park-agent",
+       5432:  "postgresql",
+       5433:  "pyrrho",
+       5434:  "sgi-arrayd",
+       5435:  "sceanics",
+       5443:  "spss",
+       5445:  "smbdirect",
+       5450:  "tiepie",
+       5453:  "surebox",
+       5454:  "apc-5454",
+       5455:  "apc-5455",
+       5456:  "apc-5456",
+       5461:  "silkmeter",
+       5462:  "ttl-publisher",
+       5463:  "ttlpriceproxy",
+       5464:  "quailnet",
+       5465:  "netops-broker",
+       5470:  "apsolab-col",
+       5471:  "apsolab-cols",
+       5472:  "apsolab-tag",
+       5473:  "apsolab-tags",
+       5475:  "apsolab-data",
+       5500:  "fcp-addr-srvr1",
+       5501:  "fcp-addr-srvr2",
+       5502:  "fcp-srvr-inst1",
+       5503:  "fcp-srvr-inst2",
+       5504:  "fcp-cics-gw1",
+       5505:  "checkoutdb",
+       5506:  "amc",
+       5507:  "psl-management",
+       5550:  "cbus",
+       5553:  "sgi-eventmond",
+       5554:  "sgi-esphttp",
+       5555:  "personal-agent",
+       5556:  "freeciv",
+       5557:  "farenet",
+       5565:  "hpe-dp-bura",
+       5566:  "westec-connect",
+       5567:  "dof-dps-mc-sec",
+       5568:  "sdt",
+       5569:  "rdmnet-ctrl",
+       5573:  "sdmmp",
+       5574:  "lsi-bobcat",
+       5575:  "ora-oap",
+       5579:  "fdtracks",
+       5580:  "tmosms0",
+       5581:  "tmosms1",
+       5582:  "fac-restore",
+       5583:  "tmo-icon-sync",
+       5584:  "bis-web",
+       5585:  "bis-sync",
+       5586:  "att-mt-sms",
+       5597:  "ininmessaging",
+       5598:  "mctfeed",
+       5599:  "esinstall",
+       5600:  "esmmanager",
+       5601:  "esmagent",
+       5602:  "a1-msc",
+       5603:  "a1-bs",
+       5604:  "a3-sdunode",
+       5605:  "a4-sdunode",
+       5618:  "efr",
+       5627:  "ninaf",
+       5628:  "htrust",
+       5629:  "symantec-sfdb",
+       5630:  "precise-comm",
+       5631:  "pcanywheredata",
+       5632:  "pcanywherestat",
+       5633:  "beorl",
+       5634:  "xprtld",
+       5635:  "sfmsso",
+       5636:  "sfm-db-server",
+       5637:  "cssc",
+       5638:  "flcrs",
+       5639:  "ics",
+       5646:  "vfmobile",
+       5666:  "nrpe",
+       5670:  "filemq",
+       5671:  "amqps",
+       5672:  "amqp",
+       5673:  "jms",
+       5674:  "hyperscsi-port",
+       5675:  "v5ua",
+       5676:  "raadmin",
+       5677:  "questdb2-lnchr",
+       5678:  "rrac",
+       5679:  "dccm",
+       5680:  "auriga-router",
+       5681:  "ncxcp",
+       5688:  "ggz",
+       5689:  "qmvideo",
+       5693:  "rbsystem",
+       5696:  "kmip",
+       5700:  "supportassist",
+       5705:  "storageos",
+       5713:  "proshareaudio",
+       5714:  "prosharevideo",
+       5715:  "prosharedata",
+       5716:  "prosharerequest",
+       5717:  "prosharenotify",
+       5718:  "dpm",
+       5719:  "dpm-agent",
+       5720:  "ms-licensing",
+       5721:  "dtpt",
+       5722:  "msdfsr",
+       5723:  "omhs",
+       5724:  "omsdk",
+       5725:  "ms-ilm",
+       5726:  "ms-ilm-sts",
+       5727:  "asgenf",
+       5728:  "io-dist-data",
+       5729:  "openmail",
+       5730:  "unieng",
+       5741:  "ida-discover1",
+       5742:  "ida-discover2",
+       5743:  "watchdoc-pod",
+       5744:  "watchdoc",
+       5745:  "fcopy-server",
+       5746:  "fcopys-server",
+       5747:  "tunatic",
+       5748:  "tunalyzer",
+       5750:  "rscd",
+       5755:  "openmailg",
+       5757:  "x500ms",
+       5766:  "openmailns",
+       5767:  "s-openmail",
+       5768:  "openmailpxy",
+       5769:  "spramsca",
+       5770:  "spramsd",
+       5771:  "netagent",
+       5777:  "dali-port",
+       5780:  "vts-rpc",
+       5781:  "3par-evts",
+       5782:  "3par-mgmt",
+       5783:  "3par-mgmt-ssl",
+       5785:  "3par-rcopy",
+       5793:  "xtreamx",
+       5813:  "icmpd",
+       5814:  "spt-automation",
+       5841:  "shiprush-d-ch",
+       5842:  "reversion",
+       5859:  "wherehoo",
+       5863:  "ppsuitemsg",
+       5868:  "diameters",
+       5883:  "jute",
+       5900:  "rfb",
+       5910:  "cm",
+       5911:  "cpdlc",
+       5912:  "fis",
+       5913:  "ads-c",
+       5963:  "indy",
+       5968:  "mppolicy-v5",
+       5969:  "mppolicy-mgr",
+       5984:  "couchdb",
+       5985:  "wsman",
+       5986:  "wsmans",
+       5987:  "wbem-rmi",
+       5988:  "wbem-http",
+       5989:  "wbem-https",
+       5990:  "wbem-exp-https",
+       5991:  "nuxsl",
+       5992:  "consul-insight",
+       5993:  "cim-rs",
+       5999:  "cvsup",
+       6064:  "ndl-ahp-svc",
+       6065:  "winpharaoh",
+       6066:  "ewctsp",
+       6068:  "gsmp-ancp",
+       6069:  "trip",
+       6070:  "messageasap",
+       6071:  "ssdtp",
+       6072:  "diagnose-proc",
+       6073:  "directplay8",
+       6074:  "max",
+       6075:  "dpm-acm",
+       6076:  "msft-dpm-cert",
+       6077:  "iconstructsrv",
+       6084:  "reload-config",
+       6085:  "konspire2b",
+       6086:  "pdtp",
+       6087:  "ldss",
+       6088:  "doglms",
+       6099:  "raxa-mgmt",
+       6100:  "synchronet-db",
+       6101:  "synchronet-rtc",
+       6102:  "synchronet-upd",
+       6103:  "rets",
+       6104:  "dbdb",
+       6105:  "primaserver",
+       6106:  "mpsserver",
+       6107:  "etc-control",
+       6108:  "sercomm-scadmin",
+       6109:  "globecast-id",
+       6110:  "softcm",
+       6111:  "spc",
+       6112:  "dtspcd",
+       6113:  "dayliteserver",
+       6114:  "wrspice",
+       6115:  "xic",
+       6116:  "xtlserv",
+       6117:  "daylitetouch",
+       6121:  "spdy",
+       6122:  "bex-webadmin",
+       6123:  "backup-express",
+       6124:  "pnbs",
+       6130:  "damewaremobgtwy",
+       6133:  "nbt-wol",
+       6140:  "pulsonixnls",
+       6141:  "meta-corp",
+       6142:  "aspentec-lm",
+       6143:  "watershed-lm",
+       6144:  "statsci1-lm",
+       6145:  "statsci2-lm",
+       6146:  "lonewolf-lm",
+       6147:  "montage-lm",
+       6148:  "ricardo-lm",
+       6149:  "tal-pod",
+       6159:  "efb-aci",
+       6160:  "ecmp",
+       6161:  "patrol-ism",
+       6162:  "patrol-coll",
+       6163:  "pscribe",
+       6200:  "lm-x",
+       6209:  "qmtps",
+       6222:  "radmind",
+       6241:  "jeol-nsdtp-1",
+       6242:  "jeol-nsdtp-2",
+       6243:  "jeol-nsdtp-3",
+       6244:  "jeol-nsdtp-4",
+       6251:  "tl1-raw-ssl",
+       6252:  "tl1-ssh",
+       6253:  "crip",
+       6267:  "gld",
+       6268:  "grid",
+       6269:  "grid-alt",
+       6300:  "bmc-grx",
+       6301:  "bmc-ctd-ldap",
+       6306:  "ufmp",
+       6315:  "scup",
+       6316:  "abb-escp",
+       6317:  "nav-data-cmd",
+       6320:  "repsvc",
+       6321:  "emp-server1",
+       6322:  "emp-server2",
+       6324:  "hrd-ncs",
+       6325:  "dt-mgmtsvc",
+       6326:  "dt-vra",
+       6343:  "sflow",
+       6344:  "streletz",
+       6346:  "gnutella-svc",
+       6347:  "gnutella-rtr",
+       6350:  "adap",
+       6355:  "pmcs",
+       6360:  "metaedit-mu",
+       6370:  "metaedit-se",
+       6379:  "redis",
+       6382:  "metatude-mds",
+       6389:  "clariion-evr01",
+       6390:  "metaedit-ws",
+       6417:  "faxcomservice",
+       6418:  "syserverremote",
+       6419:  "svdrp",
+       6420:  "nim-vdrshell",
+       6421:  "nim-wan",
+       6432:  "pgbouncer",
+       6442:  "tarp",
+       6443:  "sun-sr-https",
+       6444:  "sge-qmaster",
+       6445:  "sge-execd",
+       6446:  "mysql-proxy",
+       6455:  "skip-cert-recv",
+       6456:  "skip-cert-send",
+       6464:  "ieee11073-20701",
+       6471:  "lvision-lm",
+       6480:  "sun-sr-http",
+       6481:  "servicetags",
+       6482:  "ldoms-mgmt",
+       6483:  "SunVTS-RMI",
+       6484:  "sun-sr-jms",
+       6485:  "sun-sr-iiop",
+       6486:  "sun-sr-iiops",
+       6487:  "sun-sr-iiop-aut",
+       6488:  "sun-sr-jmx",
+       6489:  "sun-sr-admin",
+       6500:  "boks",
+       6501:  "boks-servc",
+       6502:  "boks-servm",
+       6503:  "boks-clntd",
+       6505:  "badm-priv",
+       6506:  "badm-pub",
+       6507:  "bdir-priv",
+       6508:  "bdir-pub",
+       6509:  "mgcs-mfp-port",
+       6510:  "mcer-port",
+       6513:  "netconf-tls",
+       6514:  "syslog-tls",
+       6515:  "elipse-rec",
+       6543:  "lds-distrib",
+       6544:  "lds-dump",
+       6547:  "apc-6547",
+       6548:  "apc-6548",
+       6549:  "apc-6549",
+       6550:  "fg-sysupdate",
+       6551:  "sum",
+       6558:  "xdsxdm",
+       6566:  "sane-port",
+       6568:  "canit-store",
+       6579:  "affiliate",
+       6580:  "parsec-master",
+       6581:  "parsec-peer",
+       6582:  "parsec-game",
+       6583:  "joaJewelSuite",
+       6600:  "mshvlm",
+       6601:  "mstmg-sstp",
+       6602:  "wsscomfrmwk",
+       6619:  "odette-ftps",
+       6620:  "kftp-data",
+       6621:  "kftp",
+       6622:  "mcftp",
+       6623:  "ktelnet",
+       6624:  "datascaler-db",
+       6625:  "datascaler-ctl",
+       6626:  "wago-service",
+       6627:  "nexgen",
+       6628:  "afesc-mc",
+       6629:  "nexgen-aux",
+       6632:  "mxodbc-connect",
+       6640:  "ovsdb",
+       6653:  "openflow",
+       6655:  "pcs-sf-ui-man",
+       6656:  "emgmsg",
+       6670:  "vocaltec-gold",
+       6671:  "p4p-portal",
+       6672:  "vision-server",
+       6673:  "vision-elmd",
+       6678:  "vfbp",
+       6679:  "osaut",
+       6687:  "clever-ctrace",
+       6688:  "clever-tcpip",
+       6689:  "tsa",
+       6690:  "cleverdetect",
+       6697:  "ircs-u",
+       6701:  "kti-icad-srvr",
+       6702:  "e-design-net",
+       6703:  "e-design-web",
+       6714:  "ibprotocol",
+       6715:  "fibotrader-com",
+       6716:  "princity-agent",
+       6767:  "bmc-perf-agent",
+       6768:  "bmc-perf-mgrd",
+       6769:  "adi-gxp-srvprt",
+       6770:  "plysrv-http",
+       6771:  "plysrv-https",
+       6777:  "ntz-tracker",
+       6778:  "ntz-p2p-storage",
+       6785:  "dgpf-exchg",
+       6786:  "smc-jmx",
+       6787:  "smc-admin",
+       6788:  "smc-http",
+       6789:  "radg",
+       6790:  "hnmp",
+       6791:  "hnm",
+       6801:  "acnet",
+       6817:  "pentbox-sim",
+       6831:  "ambit-lm",
+       6841:  "netmo-default",
+       6842:  "netmo-http",
+       6850:  "iccrushmore",
+       6868:  "acctopus-cc",
+       6888:  "muse",
+       6900:  "rtimeviewer",
+       6901:  "jetstream",
+       6935:  "ethoscan",
+       6936:  "xsmsvc",
+       6946:  "bioserver",
+       6951:  "otlp",
+       6961:  "jmact3",
+       6962:  "jmevt2",
+       6963:  "swismgr1",
+       6964:  "swismgr2",
+       6965:  "swistrap",
+       6966:  "swispol",
+       6969:  "acmsoda",
+       6970:  "conductor",
+       6997:  "MobilitySrv",
+       6998:  "iatp-highpri",
+       6999:  "iatp-normalpri",
+       7000:  "afs3-fileserver",
+       7001:  "afs3-callback",
+       7002:  "afs3-prserver",
+       7003:  "afs3-vlserver",
+       7004:  "afs3-kaserver",
+       7005:  "afs3-volser",
+       7006:  "afs3-errors",
+       7007:  "afs3-bos",
+       7008:  "afs3-update",
+       7009:  "afs3-rmtsys",
+       7010:  "ups-onlinet",
+       7011:  "talon-disc",
+       7012:  "talon-engine",
+       7013:  "microtalon-dis",
+       7014:  "microtalon-com",
+       7015:  "talon-webserver",
+       7016:  "spg",
+       7017:  "grasp",
+       7018:  "fisa-svc",
+       7019:  "doceri-ctl",
+       7020:  "dpserve",
+       7021:  "dpserveadmin",
+       7022:  "ctdp",
+       7023:  "ct2nmcs",
+       7024:  "vmsvc",
+       7025:  "vmsvc-2",
+       7030:  "op-probe",
+       7031:  "iposplanet",
+       7070:  "arcp",
+       7071:  "iwg1",
+       7073:  "martalk",
+       7080:  "empowerid",
+       7099:  "lazy-ptop",
+       7100:  "font-service",
+       7101:  "elcn",
+       7117:  "rothaga",
+       7121:  "virprot-lm",
+       7128:  "scenidm",
+       7129:  "scenccs",
+       7161:  "cabsm-comm",
+       7162:  "caistoragemgr",
+       7163:  "cacsambroker",
+       7164:  "fsr",
+       7165:  "doc-server",
+       7166:  "aruba-server",
+       7167:  "casrmagent",
+       7168:  "cnckadserver",
+       7169:  "ccag-pib",
+       7170:  "nsrp",
+       7171:  "drm-production",
+       7172:  "metalbend",
+       7173:  "zsecure",
+       7174:  "clutild",
+       7200:  "fodms",
+       7201:  "dlip",
+       7202:  "pon-ictp",
+       7215:  "PS-Server",
+       7216:  "PS-Capture-Pro",
+       7227:  "ramp",
+       7228:  "citrixupp",
+       7229:  "citrixuppg",
+       7236:  "display",
+       7237:  "pads",
+       7244:  "frc-hicp",
+       7262:  "cnap",
+       7272:  "watchme-7272",
+       7273:  "oma-rlp",
+       7274:  "oma-rlp-s",
+       7275:  "oma-ulp",
+       7276:  "oma-ilp",
+       7277:  "oma-ilp-s",
+       7278:  "oma-dcdocbs",
+       7279:  "ctxlic",
+       7280:  "itactionserver1",
+       7281:  "itactionserver2",
+       7282:  "mzca-action",
+       7283:  "genstat",
+       7365:  "lcm-server",
+       7391:  "mindfilesys",
+       7392:  "mrssrendezvous",
+       7393:  "nfoldman",
+       7394:  "fse",
+       7395:  "winqedit",
+       7397:  "hexarc",
+       7400:  "rtps-discovery",
+       7401:  "rtps-dd-ut",
+       7402:  "rtps-dd-mt",
+       7410:  "ionixnetmon",
+       7411:  "daqstream",
+       7421:  "mtportmon",
+       7426:  "pmdmgr",
+       7427:  "oveadmgr",
+       7428:  "ovladmgr",
+       7429:  "opi-sock",
+       7430:  "xmpv7",
+       7431:  "pmd",
+       7437:  "faximum",
+       7443:  "oracleas-https",
+       7471:  "sttunnel",
+       7473:  "rise",
+       7474:  "neo4j",
+       7478:  "openit",
+       7491:  "telops-lmd",
+       7500:  "silhouette",
+       7501:  "ovbus",
+       7508:  "adcp",
+       7509:  "acplt",
+       7510:  "ovhpas",
+       7511:  "pafec-lm",
+       7542:  "saratoga",
+       7543:  "atul",
+       7544:  "nta-ds",
+       7545:  "nta-us",
+       7546:  "cfs",
+       7547:  "cwmp",
+       7548:  "tidp",
+       7549:  "nls-tl",
+       7551:  "controlone-con",
+       7560:  "sncp",
+       7563:  "cfw",
+       7566:  "vsi-omega",
+       7569:  "dell-eql-asm",
+       7570:  "aries-kfinder",
+       7574:  "coherence",
+       7588:  "sun-lm",
+       7606:  "mipi-debug",
+       7624:  "indi",
+       7626:  "simco",
+       7627:  "soap-http",
+       7628:  "zen-pawn",
+       7629:  "xdas",
+       7630:  "hawk",
+       7631:  "tesla-sys-msg",
+       7633:  "pmdfmgt",
+       7648:  "cuseeme",
+       7672:  "imqstomp",
+       7673:  "imqstomps",
+       7674:  "imqtunnels",
+       7675:  "imqtunnel",
+       7676:  "imqbrokerd",
+       7677:  "sun-user-https",
+       7680:  "pando-pub",
+       7683:  "dmt",
+       7687:  "bolt",
+       7689:  "collaber",
+       7697:  "klio",
+       7700:  "em7-secom",
+       7707:  "sync-em7",
+       7708:  "scinet",
+       7720:  "medimageportal",
+       7724:  "nsdeepfreezectl",
+       7725:  "nitrogen",
+       7726:  "freezexservice",
+       7727:  "trident-data",
+       7728:  "osvr",
+       7734:  "smip",
+       7738:  "aiagent",
+       7741:  "scriptview",
+       7742:  "msss",
+       7743:  "sstp-1",
+       7744:  "raqmon-pdu",
+       7747:  "prgp",
+       7775:  "inetfs",
+       7777:  "cbt",
+       7778:  "interwise",
+       7779:  "vstat",
+       7781:  "accu-lmgr",
+       7786:  "minivend",
+       7787:  "popup-reminders",
+       7789:  "office-tools",
+       7794:  "q3ade",
+       7797:  "pnet-conn",
+       7798:  "pnet-enc",
+       7799:  "altbsdp",
+       7800:  "asr",
+       7801:  "ssp-client",
+       7810:  "rbt-wanopt",
+       7845:  "apc-7845",
+       7846:  "apc-7846",
+       7847:  "csoauth",
+       7869:  "mobileanalyzer",
+       7870:  "rbt-smc",
+       7871:  "mdm",
+       7878:  "owms",
+       7880:  "pss",
+       7887:  "ubroker",
+       7900:  "mevent",
+       7901:  "tnos-sp",
+       7902:  "tnos-dp",
+       7903:  "tnos-dps",
+       7913:  "qo-secure",
+       7932:  "t2-drm",
+       7933:  "t2-brm",
+       7962:  "generalsync",
+       7967:  "supercell",
+       7979:  "micromuse-ncps",
+       7980:  "quest-vista",
+       7981:  "sossd-collect",
+       7982:  "sossd-agent",
+       7997:  "pushns",
+       7999:  "irdmi2",
+       8000:  "irdmi",
+       8001:  "vcom-tunnel",
+       8002:  "teradataordbms",
+       8003:  "mcreport",
+       8005:  "mxi",
+       8006:  "wpl-analytics",
+       8007:  "warppipe",
+       8008:  "http-alt",
+       8019:  "qbdb",
+       8020:  "intu-ec-svcdisc",
+       8021:  "intu-ec-client",
+       8022:  "oa-system",
+       8025:  "ca-audit-da",
+       8026:  "ca-audit-ds",
+       8032:  "pro-ed",
+       8033:  "mindprint",
+       8034:  "vantronix-mgmt",
+       8040:  "ampify",
+       8041:  "enguity-xccetp",
+       8042:  "fs-agent",
+       8043:  "fs-server",
+       8044:  "fs-mgmt",
+       8051:  "rocrail",
+       8052:  "senomix01",
+       8053:  "senomix02",
+       8054:  "senomix03",
+       8055:  "senomix04",
+       8056:  "senomix05",
+       8057:  "senomix06",
+       8058:  "senomix07",
+       8059:  "senomix08",
+       8066:  "toad-bi-appsrvr",
+       8067:  "infi-async",
+       8070:  "ucs-isc",
+       8074:  "gadugadu",
+       8077:  "mles",
+       8080:  "http-alt",
+       8081:  "sunproxyadmin",
+       8082:  "us-cli",
+       8083:  "us-srv",
+       8086:  "d-s-n",
+       8087:  "simplifymedia",
+       8088:  "radan-http",
+       8090:  "opsmessaging",
+       8091:  "jamlink",
+       8097:  "sac",
+       8100:  "xprint-server",
+       8101:  "ldoms-migr",
+       8102:  "kz-migr",
+       8115:  "mtl8000-matrix",
+       8116:  "cp-cluster",
+       8117:  "purityrpc",
+       8118:  "privoxy",
+       8121:  "apollo-data",
+       8122:  "apollo-admin",
+       8128:  "paycash-online",
+       8129:  "paycash-wbp",
+       8130:  "indigo-vrmi",
+       8131:  "indigo-vbcp",
+       8132:  "dbabble",
+       8140:  "puppet",
+       8148:  "isdd",
+       8153:  "quantastor",
+       8160:  "patrol",
+       8161:  "patrol-snmp",
+       8162:  "lpar2rrd",
+       8181:  "intermapper",
+       8182:  "vmware-fdm",
+       8183:  "proremote",
+       8184:  "itach",
+       8190:  "gcp-rphy",
+       8191:  "limnerpressure",
+       8192:  "spytechphone",
+       8194:  "blp1",
+       8195:  "blp2",
+       8199:  "vvr-data",
+       8200:  "trivnet1",
+       8201:  "trivnet2",
+       8204:  "lm-perfworks",
+       8205:  "lm-instmgr",
+       8206:  "lm-dta",
+       8207:  "lm-sserver",
+       8208:  "lm-webwatcher",
+       8230:  "rexecj",
+       8243:  "synapse-nhttps",
+       8270:  "robot-remote",
+       8276:  "pando-sec",
+       8280:  "synapse-nhttp",
+       8282:  "libelle",
+       8292:  "blp3",
+       8293:  "hiperscan-id",
+       8294:  "blp4",
+       8300:  "tmi",
+       8301:  "amberon",
+       8313:  "hub-open-net",
+       8320:  "tnp-discover",
+       8321:  "tnp",
+       8322:  "garmin-marine",
+       8351:  "server-find",
+       8376:  "cruise-enum",
+       8377:  "cruise-swroute",
+       8378:  "cruise-config",
+       8379:  "cruise-diags",
+       8380:  "cruise-update",
+       8383:  "m2mservices",
+       8400:  "cvd",
+       8401:  "sabarsd",
+       8402:  "abarsd",
+       8403:  "admind",
+       8404:  "svcloud",
+       8405:  "svbackup",
+       8415:  "dlpx-sp",
+       8416:  "espeech",
+       8417:  "espeech-rtp",
+       8423:  "aritts",
+       8442:  "cybro-a-bus",
+       8443:  "pcsync-https",
+       8444:  "pcsync-http",
+       8445:  "copy",
+       8450:  "npmp",
+       8457:  "nexentamv",
+       8470:  "cisco-avp",
+       8471:  "pim-port",
+       8472:  "otv",
+       8473:  "vp2p",
+       8474:  "noteshare",
+       8500:  "fmtp",
+       8501:  "cmtp-mgt",
+       8502:  "ftnmtp",
+       8554:  "rtsp-alt",
+       8555:  "d-fence",
+       8567:  "dof-tunnel",
+       8600:  "asterix",
+       8610:  "canon-mfnp",
+       8611:  "canon-bjnp1",
+       8612:  "canon-bjnp2",
+       8613:  "canon-bjnp3",
+       8614:  "canon-bjnp4",
+       8615:  "imink",
+       8665:  "monetra",
+       8666:  "monetra-admin",
+       8675:  "msi-cps-rm",
+       8686:  "sun-as-jmxrmi",
+       8688:  "openremote-ctrl",
+       8699:  "vnyx",
+       8711:  "nvc",
+       8733:  "ibus",
+       8750:  "dey-keyneg",
+       8763:  "mc-appserver",
+       8764:  "openqueue",
+       8765:  "ultraseek-http",
+       8766:  "amcs",
+       8770:  "dpap",
+       8778:  "uec",
+       8786:  "msgclnt",
+       8787:  "msgsrvr",
+       8793:  "acd-pm",
+       8800:  "sunwebadmin",
+       8804:  "truecm",
+       8873:  "dxspider",
+       8880:  "cddbp-alt",
+       8881:  "galaxy4d",
+       8883:  "secure-mqtt",
+       8888:  "ddi-tcp-1",
+       8889:  "ddi-tcp-2",
+       8890:  "ddi-tcp-3",
+       8891:  "ddi-tcp-4",
+       8892:  "ddi-tcp-5",
+       8893:  "ddi-tcp-6",
+       8894:  "ddi-tcp-7",
+       8899:  "ospf-lite",
+       8900:  "jmb-cds1",
+       8901:  "jmb-cds2",
+       8910:  "manyone-http",
+       8911:  "manyone-xml",
+       8912:  "wcbackup",
+       8913:  "dragonfly",
+       8937:  "twds",
+       8953:  "ub-dns-control",
+       8954:  "cumulus-admin",
+       8980:  "nod-provider",
+       8989:  "sunwebadmins",
+       8990:  "http-wmap",
+       8991:  "https-wmap",
+       8997:  "oracle-ms-ens",
+       8998:  "canto-roboflow",
+       8999:  "bctp",
+       9000:  "cslistener",
+       9001:  "etlservicemgr",
+       9002:  "dynamid",
+       9005:  "golem",
+       9008:  "ogs-server",
+       9009:  "pichat",
+       9010:  "sdr",
+       9020:  "tambora",
+       9021:  "panagolin-ident",
+       9022:  "paragent",
+       9023:  "swa-1",
+       9024:  "swa-2",
+       9025:  "swa-3",
+       9026:  "swa-4",
+       9050:  "versiera",
+       9051:  "fio-cmgmt",
+       9060:  "CardWeb-IO",
+       9080:  "glrpc",
+       9083:  "emc-pp-mgmtsvc",
+       9084:  "aurora",
+       9085:  "ibm-rsyscon",
+       9086:  "net2display",
+       9087:  "classic",
+       9088:  "sqlexec",
+       9089:  "sqlexec-ssl",
+       9090:  "websm",
+       9091:  "xmltec-xmlmail",
+       9092:  "XmlIpcRegSvc",
+       9093:  "copycat",
+       9100:  "hp-pdl-datastr",
+       9101:  "bacula-dir",
+       9102:  "bacula-fd",
+       9103:  "bacula-sd",
+       9104:  "peerwire",
+       9105:  "xadmin",
+       9106:  "astergate",
+       9107:  "astergatefax",
+       9119:  "mxit",
+       9122:  "grcmp",
+       9123:  "grcp",
+       9131:  "dddp",
+       9160:  "apani1",
+       9161:  "apani2",
+       9162:  "apani3",
+       9163:  "apani4",
+       9164:  "apani5",
+       9191:  "sun-as-jpda",
+       9200:  "wap-wsp",
+       9201:  "wap-wsp-wtp",
+       9202:  "wap-wsp-s",
+       9203:  "wap-wsp-wtp-s",
+       9204:  "wap-vcard",
+       9205:  "wap-vcal",
+       9206:  "wap-vcard-s",
+       9207:  "wap-vcal-s",
+       9208:  "rjcdb-vcards",
+       9209:  "almobile-system",
+       9210:  "oma-mlp",
+       9211:  "oma-mlp-s",
+       9212:  "serverviewdbms",
+       9213:  "serverstart",
+       9214:  "ipdcesgbs",
+       9215:  "insis",
+       9216:  "acme",
+       9217:  "fsc-port",
+       9222:  "teamcoherence",
+       9255:  "mon",
+       9278:  "pegasus",
+       9279:  "pegasus-ctl",
+       9280:  "pgps",
+       9281:  "swtp-port1",
+       9282:  "swtp-port2",
+       9283:  "callwaveiam",
+       9284:  "visd",
+       9285:  "n2h2server",
+       9287:  "cumulus",
+       9292:  "armtechdaemon",
+       9293:  "storview",
+       9294:  "armcenterhttp",
+       9295:  "armcenterhttps",
+       9300:  "vrace",
+       9306:  "sphinxql",
+       9312:  "sphinxapi",
+       9318:  "secure-ts",
+       9321:  "guibase",
+       9343:  "mpidcmgr",
+       9344:  "mphlpdmc",
+       9345:  "rancher",
+       9346:  "ctechlicensing",
+       9374:  "fjdmimgr",
+       9380:  "boxp",
+       9387:  "d2dconfig",
+       9388:  "d2ddatatrans",
+       9389:  "adws",
+       9390:  "otp",
+       9396:  "fjinvmgr",
+       9397:  "mpidcagt",
+       9400:  "sec-t4net-srv",
+       9401:  "sec-t4net-clt",
+       9402:  "sec-pc2fax-srv",
+       9418:  "git",
+       9443:  "tungsten-https",
+       9444:  "wso2esb-console",
+       9445:  "mindarray-ca",
+       9450:  "sntlkeyssrvr",
+       9500:  "ismserver",
+       9535:  "mngsuite",
+       9536:  "laes-bf",
+       9555:  "trispen-sra",
+       9592:  "ldgateway",
+       9593:  "cba8",
+       9594:  "msgsys",
+       9595:  "pds",
+       9596:  "mercury-disc",
+       9597:  "pd-admin",
+       9598:  "vscp",
+       9599:  "robix",
+       9600:  "micromuse-ncpw",
+       9612:  "streamcomm-ds",
+       9614:  "iadt-tls",
+       9616:  "erunbook-agent",
+       9617:  "erunbook-server",
+       9618:  "condor",
+       9628:  "odbcpathway",
+       9629:  "uniport",
+       9630:  "peoctlr",
+       9631:  "peocoll",
+       9640:  "pqsflows",
+       9666:  "zoomcp",
+       9667:  "xmms2",
+       9668:  "tec5-sdctp",
+       9694:  "client-wakeup",
+       9695:  "ccnx",
+       9700:  "board-roar",
+       9747:  "l5nas-parchan",
+       9750:  "board-voip",
+       9753:  "rasadv",
+       9762:  "tungsten-http",
+       9800:  "davsrc",
+       9801:  "sstp-2",
+       9802:  "davsrcs",
+       9875:  "sapv1",
+       9876:  "sd",
+       9888:  "cyborg-systems",
+       9889:  "gt-proxy",
+       9898:  "monkeycom",
+       9900:  "iua",
+       9909:  "domaintime",
+       9911:  "sype-transport",
+       9925:  "xybrid-cloud",
+       9950:  "apc-9950",
+       9951:  "apc-9951",
+       9952:  "apc-9952",
+       9953:  "acis",
+       9954:  "hinp",
+       9955:  "alljoyn-stm",
+       9966:  "odnsp",
+       9978:  "xybrid-rt",
+       9979:  "visweather",
+       9981:  "pumpkindb",
+       9987:  "dsm-scm-target",
+       9988:  "nsesrvr",
+       9990:  "osm-appsrvr",
+       9991:  "osm-oev",
+       9992:  "palace-1",
+       9993:  "palace-2",
+       9994:  "palace-3",
+       9995:  "palace-4",
+       9996:  "palace-5",
+       9997:  "palace-6",
+       9998:  "distinct32",
+       9999:  "distinct",
+       10000: "ndmp",
+       10001: "scp-config",
+       10002: "documentum",
+       10003: "documentum-s",
+       10004: "emcrmirccd",
+       10005: "emcrmird",
+       10006: "netapp-sync",
+       10007: "mvs-capacity",
+       10008: "octopus",
+       10009: "swdtp-sv",
+       10010: "rxapi",
+       10020: "abb-hw",
+       10050: "zabbix-agent",
+       10051: "zabbix-trapper",
+       10055: "qptlmd",
+       10080: "amanda",
+       10081: "famdc",
+       10100: "itap-ddtp",
+       10101: "ezmeeting-2",
+       10102: "ezproxy-2",
+       10103: "ezrelay",
+       10104: "swdtp",
+       10107: "bctp-server",
+       10110: "nmea-0183",
+       10113: "netiq-endpoint",
+       10114: "netiq-qcheck",
+       10115: "netiq-endpt",
+       10116: "netiq-voipa",
+       10117: "iqrm",
+       10125: "cimple",
+       10128: "bmc-perf-sd",
+       10129: "bmc-gms",
+       10160: "qb-db-server",
+       10161: "snmptls",
+       10162: "snmptls-trap",
+       10200: "trisoap",
+       10201: "rsms",
+       10252: "apollo-relay",
+       10260: "axis-wimp-port",
+       10261: "tile-ml",
+       10288: "blocks",
+       10321: "cosir",
+       10540: "MOS-lower",
+       10541: "MOS-upper",
+       10542: "MOS-aux",
+       10543: "MOS-soap",
+       10544: "MOS-soap-opt",
+       10548: "serverdocs",
+       10631: "printopia",
+       10800: "gap",
+       10805: "lpdg",
+       10809: "nbd",
+       10860: "helix",
+       10880: "bveapi",
+       10933: "octopustentacle",
+       10990: "rmiaux",
+       11000: "irisa",
+       11001: "metasys",
+       11095: "weave",
+       11103: "origo-sync",
+       11104: "netapp-icmgmt",
+       11105: "netapp-icdata",
+       11106: "sgi-lk",
+       11109: "sgi-dmfmgr",
+       11110: "sgi-soap",
+       11111: "vce",
+       11112: "dicom",
+       11161: "suncacao-snmp",
+       11162: "suncacao-jmxmp",
+       11163: "suncacao-rmi",
+       11164: "suncacao-csa",
+       11165: "suncacao-websvc",
+       11172: "oemcacao-jmxmp",
+       11173: "t5-straton",
+       11174: "oemcacao-rmi",
+       11175: "oemcacao-websvc",
+       11201: "smsqp",
+       11202: "dcsl-backup",
+       11208: "wifree",
+       11211: "memcache",
+       11319: "imip",
+       11320: "imip-channels",
+       11321: "arena-server",
+       11367: "atm-uhas",
+       11371: "hkp",
+       11489: "asgcypresstcps",
+       11600: "tempest-port",
+       11623: "emc-xsw-dconfig",
+       11720: "h323callsigalt",
+       11723: "emc-xsw-dcache",
+       11751: "intrepid-ssl",
+       11796: "lanschool",
+       11876: "xoraya",
+       11967: "sysinfo-sp",
+       12000: "entextxid",
+       12001: "entextnetwk",
+       12002: "entexthigh",
+       12003: "entextmed",
+       12004: "entextlow",
+       12005: "dbisamserver1",
+       12006: "dbisamserver2",
+       12007: "accuracer",
+       12008: "accuracer-dbms",
+       12010: "edbsrvr",
+       12012: "vipera",
+       12013: "vipera-ssl",
+       12109: "rets-ssl",
+       12121: "nupaper-ss",
+       12168: "cawas",
+       12172: "hivep",
+       12300: "linogridengine",
+       12302: "rads",
+       12321: "warehouse-sss",
+       12322: "warehouse",
+       12345: "italk",
+       12753: "tsaf",
+       12865: "netperf",
+       13160: "i-zipqd",
+       13216: "bcslogc",
+       13217: "rs-pias",
+       13218: "emc-vcas-tcp",
+       13223: "powwow-client",
+       13224: "powwow-server",
+       13400: "doip-data",
+       13720: "bprd",
+       13721: "bpdbm",
+       13722: "bpjava-msvc",
+       13724: "vnetd",
+       13782: "bpcd",
+       13783: "vopied",
+       13785: "nbdb",
+       13786: "nomdb",
+       13818: "dsmcc-config",
+       13819: "dsmcc-session",
+       13820: "dsmcc-passthru",
+       13821: "dsmcc-download",
+       13822: "dsmcc-ccp",
+       13823: "bmdss",
+       13894: "ucontrol",
+       13929: "dta-systems",
+       13930: "medevolve",
+       14000: "scotty-ft",
+       14001: "sua",
+       14033: "sage-best-com1",
+       14034: "sage-best-com2",
+       14141: "vcs-app",
+       14142: "icpp",
+       14143: "icpps",
+       14145: "gcm-app",
+       14149: "vrts-tdd",
+       14150: "vcscmd",
+       14154: "vad",
+       14250: "cps",
+       14414: "ca-web-update",
+       14500: "xpra",
+       14936: "hde-lcesrvr-1",
+       14937: "hde-lcesrvr-2",
+       15000: "hydap",
+       15002: "onep-tls",
+       15345: "xpilot",
+       15363: "3link",
+       15555: "cisco-snat",
+       15660: "bex-xr",
+       15740: "ptp",
+       15999: "programmar",
+       16000: "fmsas",
+       16001: "fmsascon",
+       16002: "gsms",
+       16020: "jwpc",
+       16021: "jwpc-bin",
+       16161: "sun-sea-port",
+       16162: "solaris-audit",
+       16309: "etb4j",
+       16310: "pduncs",
+       16311: "pdefmns",
+       16360: "netserialext1",
+       16361: "netserialext2",
+       16367: "netserialext3",
+       16368: "netserialext4",
+       16384: "connected",
+       16385: "rdgs",
+       16619: "xoms",
+       16665: "axon-tunnel",
+       16789: "cadsisvr",
+       16900: "newbay-snc-mc",
+       16950: "sgcip",
+       16991: "intel-rci-mp",
+       16992: "amt-soap-http",
+       16993: "amt-soap-https",
+       16994: "amt-redir-tcp",
+       16995: "amt-redir-tls",
+       17007: "isode-dua",
+       17184: "vestasdlp",
+       17185: "soundsvirtual",
+       17219: "chipper",
+       17220: "avtp",
+       17221: "avdecc",
+       17223: "isa100-gci",
+       17225: "trdp-md",
+       17234: "integrius-stp",
+       17235: "ssh-mgmt",
+       17500: "db-lsp",
+       17555: "ailith",
+       17729: "ea",
+       17754: "zep",
+       17755: "zigbee-ip",
+       17756: "zigbee-ips",
+       17777: "sw-orion",
+       18000: "biimenu",
+       18104: "radpdf",
+       18136: "racf",
+       18181: "opsec-cvp",
+       18182: "opsec-ufp",
+       18183: "opsec-sam",
+       18184: "opsec-lea",
+       18185: "opsec-omi",
+       18186: "ohsc",
+       18187: "opsec-ela",
+       18241: "checkpoint-rtm",
+       18242: "iclid",
+       18243: "clusterxl",
+       18262: "gv-pf",
+       18463: "ac-cluster",
+       18634: "rds-ib",
+       18635: "rds-ip",
+       18668: "vdmmesh",
+       18769: "ique",
+       18881: "infotos",
+       18888: "apc-necmp",
+       19000: "igrid",
+       19007: "scintilla",
+       19020: "j-link",
+       19191: "opsec-uaa",
+       19194: "ua-secureagent",
+       19220: "cora",
+       19283: "keysrvr",
+       19315: "keyshadow",
+       19398: "mtrgtrans",
+       19410: "hp-sco",
+       19411: "hp-sca",
+       19412: "hp-sessmon",
+       19539: "fxuptp",
+       19540: "sxuptp",
+       19541: "jcp",
+       19998: "iec-104-sec",
+       19999: "dnp-sec",
+       20000: "dnp",
+       20001: "microsan",
+       20002: "commtact-http",
+       20003: "commtact-https",
+       20005: "openwebnet",
+       20013: "ss-idi",
+       20014: "opendeploy",
+       20034: "nburn-id",
+       20046: "tmophl7mts",
+       20048: "mountd",
+       20049: "nfsrdma",
+       20057: "avesterra",
+       20167: "tolfab",
+       20202: "ipdtp-port",
+       20222: "ipulse-ics",
+       20480: "emwavemsg",
+       20670: "track",
+       20999: "athand-mmp",
+       21000: "irtrans",
+       21010: "notezilla-lan",
+       21221: "aigairserver",
+       21553: "rdm-tfs",
+       21554: "dfserver",
+       21590: "vofr-gateway",
+       21800: "tvpm",
+       21845: "webphone",
+       21846: "netspeak-is",
+       21847: "netspeak-cs",
+       21848: "netspeak-acd",
+       21849: "netspeak-cps",
+       22000: "snapenetio",
+       22001: "optocontrol",
+       22002: "optohost002",
+       22003: "optohost003",
+       22004: "optohost004",
+       22005: "optohost004",
+       22125: "dcap",
+       22128: "gsidcap",
+       22222: "easyengine",
+       22273: "wnn6",
+       22305: "cis",
+       22335: "shrewd-control",
+       22343: "cis-secure",
+       22347: "wibukey",
+       22350: "codemeter",
+       22351: "codemeter-cmwan",
+       22537: "caldsoft-backup",
+       22555: "vocaltec-wconf",
+       22763: "talikaserver",
+       22800: "aws-brf",
+       22951: "brf-gw",
+       23000: "inovaport1",
+       23001: "inovaport2",
+       23002: "inovaport3",
+       23003: "inovaport4",
+       23004: "inovaport5",
+       23005: "inovaport6",
+       23053: "gntp",
+       23294: "5afe-dir",
+       23333: "elxmgmt",
+       23400: "novar-dbase",
+       23401: "novar-alarm",
+       23402: "novar-global",
+       23456: "aequus",
+       23457: "aequus-alt",
+       23546: "areaguard-neo",
+       24000: "med-ltp",
+       24001: "med-fsp-rx",
+       24002: "med-fsp-tx",
+       24003: "med-supp",
+       24004: "med-ovw",
+       24005: "med-ci",
+       24006: "med-net-svc",
+       24242: "filesphere",
+       24249: "vista-4gl",
+       24321: "ild",
+       24386: "intel-rci",
+       24465: "tonidods",
+       24554: "binkp",
+       24577: "bilobit",
+       24666: "sdtvwcam",
+       24676: "canditv",
+       24677: "flashfiler",
+       24678: "proactivate",
+       24680: "tcc-http",
+       24754: "cslg",
+       24922: "find",
+       25000: "icl-twobase1",
+       25001: "icl-twobase2",
+       25002: "icl-twobase3",
+       25003: "icl-twobase4",
+       25004: "icl-twobase5",
+       25005: "icl-twobase6",
+       25006: "icl-twobase7",
+       25007: "icl-twobase8",
+       25008: "icl-twobase9",
+       25009: "icl-twobase10",
+       25576: "sauterdongle",
+       25604: "idtp",
+       25793: "vocaltec-hos",
+       25900: "tasp-net",
+       25901: "niobserver",
+       25902: "nilinkanalyst",
+       25903: "niprobe",
+       26000: "quake",
+       26133: "scscp",
+       26208: "wnn6-ds",
+       26257: "cockroach",
+       26260: "ezproxy",
+       26261: "ezmeeting",
+       26262: "k3software-svr",
+       26263: "k3software-cli",
+       26486: "exoline-tcp",
+       26487: "exoconfig",
+       26489: "exonet",
+       27345: "imagepump",
+       27442: "jesmsjc",
+       27504: "kopek-httphead",
+       27782: "ars-vista",
+       27876: "astrolink",
+       27999: "tw-auth-key",
+       28000: "nxlmd",
+       28001: "pqsp",
+       28200: "voxelstorm",
+       28240: "siemensgsm",
+       28589: "bosswave",
+       29167: "otmp",
+       29999: "bingbang",
+       30000: "ndmps",
+       30001: "pago-services1",
+       30002: "pago-services2",
+       30003: "amicon-fpsu-ra",
+       30100: "rwp",
+       30260: "kingdomsonline",
+       30400: "gs-realtime",
+       30999: "ovobs",
+       31016: "ka-sddp",
+       31020: "autotrac-acp",
+       31400: "pace-licensed",
+       31416: "xqosd",
+       31457: "tetrinet",
+       31620: "lm-mon",
+       31685: "dsx-monitor",
+       31765: "gamesmith-port",
+       31948: "iceedcp-tx",
+       31949: "iceedcp-rx",
+       32034: "iracinghelper",
+       32249: "t1distproc60",
+       32400: "plex",
+       32483: "apm-link",
+       32635: "sec-ntb-clnt",
+       32636: "DMExpress",
+       32767: "filenet-powsrm",
+       32768: "filenet-tms",
+       32769: "filenet-rpc",
+       32770: "filenet-nch",
+       32771: "filenet-rmi",
+       32772: "filenet-pa",
+       32773: "filenet-cm",
+       32774: "filenet-re",
+       32775: "filenet-pch",
+       32776: "filenet-peior",
+       32777: "filenet-obrok",
+       32801: "mlsn",
+       32811: "retp",
+       32896: "idmgratm",
+       33060: "mysqlx",
+       33123: "aurora-balaena",
+       33331: "diamondport",
+       33333: "dgi-serv",
+       33334: "speedtrace",
+       33434: "traceroute",
+       33656: "snip-slave",
+       34249: "turbonote-2",
+       34378: "p-net-local",
+       34379: "p-net-remote",
+       34567: "dhanalakshmi",
+       34962: "profinet-rt",
+       34963: "profinet-rtm",
+       34964: "profinet-cm",
+       34980: "ethercat",
+       35000: "heathview",
+       35001: "rt-viewer",
+       35002: "rt-sound",
+       35003: "rt-devicemapper",
+       35004: "rt-classmanager",
+       35005: "rt-labtracker",
+       35006: "rt-helper",
+       35100: "axio-disc",
+       35354: "kitim",
+       35355: "altova-lm",
+       35356: "guttersnex",
+       35357: "openstack-id",
+       36001: "allpeers",
+       36524: "febooti-aw",
+       36602: "observium-agent",
+       36700: "mapx",
+       36865: "kastenxpipe",
+       37475: "neckar",
+       37483: "gdrive-sync",
+       37601: "eftp",
+       37654: "unisys-eportal",
+       38000: "ivs-database",
+       38001: "ivs-insertion",
+       38002: "cresco-control",
+       38201: "galaxy7-data",
+       38202: "fairview",
+       38203: "agpolicy",
+       38800: "sruth",
+       38865: "secrmmsafecopya",
+       39681: "turbonote-1",
+       40000: "safetynetp",
+       40404: "sptx",
+       40841: "cscp",
+       40842: "csccredir",
+       40843: "csccfirewall",
+       41111: "fs-qos",
+       41121: "tentacle",
+       41230: "z-wave-s",
+       41794: "crestron-cip",
+       41795: "crestron-ctp",
+       41796: "crestron-cips",
+       41797: "crestron-ctps",
+       42508: "candp",
+       42509: "candrp",
+       42510: "caerpc",
+       43000: "recvr-rc",
+       43188: "reachout",
+       43189: "ndm-agent-port",
+       43190: "ip-provision",
+       43191: "noit-transport",
+       43210: "shaperai",
+       43439: "eq3-update",
+       43440: "ew-mgmt",
+       43441: "ciscocsdb",
+       44123: "z-wave-tunnel",
+       44321: "pmcd",
+       44322: "pmcdproxy",
+       44323: "pmwebapi",
+       44444: "cognex-dataman",
+       44553: "rbr-debug",
+       44818: "EtherNet-IP-2",
+       44900: "m3da",
+       45000: "asmp",
+       45001: "asmps",
+       45002: "rs-status",
+       45045: "synctest",
+       45054: "invision-ag",
+       45514: "cloudcheck",
+       45678: "eba",
+       45824: "dai-shell",
+       45825: "qdb2service",
+       45966: "ssr-servermgr",
+       46336: "inedo",
+       46998: "spremotetablet",
+       46999: "mediabox",
+       47000: "mbus",
+       47001: "winrm",
+       47557: "dbbrowse",
+       47624: "directplaysrvr",
+       47806: "ap",
+       47808: "bacnet",
+       48000: "nimcontroller",
+       48001: "nimspooler",
+       48002: "nimhub",
+       48003: "nimgtw",
+       48004: "nimbusdb",
+       48005: "nimbusdbctrl",
+       48049: "3gpp-cbsp",
+       48050: "weandsf",
+       48128: "isnetserv",
+       48129: "blp5",
+       48556: "com-bardac-dw",
+       48619: "iqobject",
+       48653: "robotraconteur",
+       49000: "matahari",
+       49001: "nusrp",
+}
+var udpPortNames = map[UDPPort]string{
+       1:     "tcpmux",
+       2:     "compressnet",
+       3:     "compressnet",
+       5:     "rje",
+       7:     "echo",
+       9:     "discard",
+       11:    "systat",
+       13:    "daytime",
+       17:    "qotd",
+       18:    "msp",
+       19:    "chargen",
+       20:    "ftp-data",
+       21:    "ftp",
+       22:    "ssh",
+       23:    "telnet",
+       25:    "smtp",
+       27:    "nsw-fe",
+       29:    "msg-icp",
+       31:    "msg-auth",
+       33:    "dsp",
+       37:    "time",
+       38:    "rap",
+       39:    "rlp",
+       41:    "graphics",
+       42:    "name",
+       43:    "nicname",
+       44:    "mpm-flags",
+       45:    "mpm",
+       46:    "mpm-snd",
+       48:    "auditd",
+       49:    "tacacs",
+       50:    "re-mail-ck",
+       52:    "xns-time",
+       53:    "domain",
+       54:    "xns-ch",
+       55:    "isi-gl",
+       56:    "xns-auth",
+       58:    "xns-mail",
+       62:    "acas",
+       63:    "whoispp",
+       64:    "covia",
+       65:    "tacacs-ds",
+       66:    "sql-net",
+       67:    "bootps",
+       68:    "bootpc",
+       69:    "tftp",
+       70:    "gopher",
+       71:    "netrjs-1",
+       72:    "netrjs-2",
+       73:    "netrjs-3",
+       74:    "netrjs-4",
+       76:    "deos",
+       78:    "vettcp",
+       79:    "finger",
+       80:    "http",
+       82:    "xfer",
+       83:    "mit-ml-dev",
+       84:    "ctf",
+       85:    "mit-ml-dev",
+       86:    "mfcobol",
+       88:    "kerberos",
+       89:    "su-mit-tg",
+       90:    "dnsix",
+       91:    "mit-dov",
+       92:    "npp",
+       93:    "dcp",
+       94:    "objcall",
+       95:    "supdup",
+       96:    "dixie",
+       97:    "swift-rvf",
+       98:    "tacnews",
+       99:    "metagram",
+       101:   "hostname",
+       102:   "iso-tsap",
+       103:   "gppitnp",
+       104:   "acr-nema",
+       105:   "cso",
+       106:   "3com-tsmux",
+       107:   "rtelnet",
+       108:   "snagas",
+       109:   "pop2",
+       110:   "pop3",
+       111:   "sunrpc",
+       112:   "mcidas",
+       113:   "auth",
+       115:   "sftp",
+       116:   "ansanotify",
+       117:   "uucp-path",
+       118:   "sqlserv",
+       119:   "nntp",
+       120:   "cfdptkt",
+       121:   "erpc",
+       122:   "smakynet",
+       123:   "ntp",
+       124:   "ansatrader",
+       125:   "locus-map",
+       126:   "nxedit",
+       127:   "locus-con",
+       128:   "gss-xlicen",
+       129:   "pwdgen",
+       130:   "cisco-fna",
+       131:   "cisco-tna",
+       132:   "cisco-sys",
+       133:   "statsrv",
+       134:   "ingres-net",
+       135:   "epmap",
+       136:   "profile",
+       137:   "netbios-ns",
+       138:   "netbios-dgm",
+       139:   "netbios-ssn",
+       140:   "emfis-data",
+       141:   "emfis-cntl",
+       142:   "bl-idm",
+       143:   "imap",
+       144:   "uma",
+       145:   "uaac",
+       146:   "iso-tp0",
+       147:   "iso-ip",
+       148:   "jargon",
+       149:   "aed-512",
+       150:   "sql-net",
+       151:   "hems",
+       152:   "bftp",
+       153:   "sgmp",
+       154:   "netsc-prod",
+       155:   "netsc-dev",
+       156:   "sqlsrv",
+       157:   "knet-cmp",
+       158:   "pcmail-srv",
+       159:   "nss-routing",
+       160:   "sgmp-traps",
+       161:   "snmp",
+       162:   "snmptrap",
+       163:   "cmip-man",
+       164:   "cmip-agent",
+       165:   "xns-courier",
+       166:   "s-net",
+       167:   "namp",
+       168:   "rsvd",
+       169:   "send",
+       170:   "print-srv",
+       171:   "multiplex",
+       172:   "cl-1",
+       173:   "xyplex-mux",
+       174:   "mailq",
+       175:   "vmnet",
+       176:   "genrad-mux",
+       177:   "xdmcp",
+       178:   "nextstep",
+       179:   "bgp",
+       180:   "ris",
+       181:   "unify",
+       182:   "audit",
+       183:   "ocbinder",
+       184:   "ocserver",
+       185:   "remote-kis",
+       186:   "kis",
+       187:   "aci",
+       188:   "mumps",
+       189:   "qft",
+       190:   "gacp",
+       191:   "prospero",
+       192:   "osu-nms",
+       193:   "srmp",
+       194:   "irc",
+       195:   "dn6-nlm-aud",
+       196:   "dn6-smm-red",
+       197:   "dls",
+       198:   "dls-mon",
+       199:   "smux",
+       200:   "src",
+       201:   "at-rtmp",
+       202:   "at-nbp",
+       203:   "at-3",
+       204:   "at-echo",
+       205:   "at-5",
+       206:   "at-zis",
+       207:   "at-7",
+       208:   "at-8",
+       209:   "qmtp",
+       210:   "z39-50",
+       211:   "914c-g",
+       212:   "anet",
+       213:   "ipx",
+       214:   "vmpwscs",
+       215:   "softpc",
+       216:   "CAIlic",
+       217:   "dbase",
+       218:   "mpp",
+       219:   "uarps",
+       220:   "imap3",
+       221:   "fln-spx",
+       222:   "rsh-spx",
+       223:   "cdc",
+       224:   "masqdialer",
+       242:   "direct",
+       243:   "sur-meas",
+       244:   "inbusiness",
+       245:   "link",
+       246:   "dsp3270",
+       247:   "subntbcst-tftp",
+       248:   "bhfhs",
+       256:   "rap",
+       257:   "set",
+       259:   "esro-gen",
+       260:   "openport",
+       261:   "nsiiops",
+       262:   "arcisdms",
+       263:   "hdap",
+       264:   "bgmp",
+       265:   "x-bone-ctl",
+       266:   "sst",
+       267:   "td-service",
+       268:   "td-replica",
+       269:   "manet",
+       270:   "gist",
+       280:   "http-mgmt",
+       281:   "personal-link",
+       282:   "cableport-ax",
+       283:   "rescap",
+       284:   "corerjd",
+       286:   "fxp",
+       287:   "k-block",
+       308:   "novastorbakcup",
+       309:   "entrusttime",
+       310:   "bhmds",
+       311:   "asip-webadmin",
+       312:   "vslmp",
+       313:   "magenta-logic",
+       314:   "opalis-robot",
+       315:   "dpsi",
+       316:   "decauth",
+       317:   "zannet",
+       318:   "pkix-timestamp",
+       319:   "ptp-event",
+       320:   "ptp-general",
+       321:   "pip",
+       322:   "rtsps",
+       333:   "texar",
+       344:   "pdap",
+       345:   "pawserv",
+       346:   "zserv",
+       347:   "fatserv",
+       348:   "csi-sgwp",
+       349:   "mftp",
+       350:   "matip-type-a",
+       351:   "matip-type-b",
+       352:   "dtag-ste-sb",
+       353:   "ndsauth",
+       354:   "bh611",
+       355:   "datex-asn",
+       356:   "cloanto-net-1",
+       357:   "bhevent",
+       358:   "shrinkwrap",
+       359:   "nsrmp",
+       360:   "scoi2odialog",
+       361:   "semantix",
+       362:   "srssend",
+       363:   "rsvp-tunnel",
+       364:   "aurora-cmgr",
+       365:   "dtk",
+       366:   "odmr",
+       367:   "mortgageware",
+       368:   "qbikgdp",
+       369:   "rpc2portmap",
+       370:   "codaauth2",
+       371:   "clearcase",
+       372:   "ulistproc",
+       373:   "legent-1",
+       374:   "legent-2",
+       375:   "hassle",
+       376:   "nip",
+       377:   "tnETOS",
+       378:   "dsETOS",
+       379:   "is99c",
+       380:   "is99s",
+       381:   "hp-collector",
+       382:   "hp-managed-node",
+       383:   "hp-alarm-mgr",
+       384:   "arns",
+       385:   "ibm-app",
+       386:   "asa",
+       387:   "aurp",
+       388:   "unidata-ldm",
+       389:   "ldap",
+       390:   "uis",
+       391:   "synotics-relay",
+       392:   "synotics-broker",
+       393:   "meta5",
+       394:   "embl-ndt",
+       395:   "netcp",
+       396:   "netware-ip",
+       397:   "mptn",
+       398:   "kryptolan",
+       399:   "iso-tsap-c2",
+       400:   "osb-sd",
+       401:   "ups",
+       402:   "genie",
+       403:   "decap",
+       404:   "nced",
+       405:   "ncld",
+       406:   "imsp",
+       407:   "timbuktu",
+       408:   "prm-sm",
+       409:   "prm-nm",
+       410:   "decladebug",
+       411:   "rmt",
+       412:   "synoptics-trap",
+       413:   "smsp",
+       414:   "infoseek",
+       415:   "bnet",
+       416:   "silverplatter",
+       417:   "onmux",
+       418:   "hyper-g",
+       419:   "ariel1",
+       420:   "smpte",
+       421:   "ariel2",
+       422:   "ariel3",
+       423:   "opc-job-start",
+       424:   "opc-job-track",
+       425:   "icad-el",
+       426:   "smartsdp",
+       427:   "svrloc",
+       428:   "ocs-cmu",
+       429:   "ocs-amu",
+       430:   "utmpsd",
+       431:   "utmpcd",
+       432:   "iasd",
+       433:   "nnsp",
+       434:   "mobileip-agent",
+       435:   "mobilip-mn",
+       436:   "dna-cml",
+       437:   "comscm",
+       438:   "dsfgw",
+       439:   "dasp",
+       440:   "sgcp",
+       441:   "decvms-sysmgt",
+       442:   "cvc-hostd",
+       443:   "https",
+       444:   "snpp",
+       445:   "microsoft-ds",
+       446:   "ddm-rdb",
+       447:   "ddm-dfm",
+       448:   "ddm-ssl",
+       449:   "as-servermap",
+       450:   "tserver",
+       451:   "sfs-smp-net",
+       452:   "sfs-config",
+       453:   "creativeserver",
+       454:   "contentserver",
+       455:   "creativepartnr",
+       456:   "macon-udp",
+       457:   "scohelp",
+       458:   "appleqtc",
+       459:   "ampr-rcmd",
+       460:   "skronk",
+       461:   "datasurfsrv",
+       462:   "datasurfsrvsec",
+       463:   "alpes",
+       464:   "kpasswd",
+       465:   "igmpv3lite",
+       466:   "digital-vrc",
+       467:   "mylex-mapd",
+       468:   "photuris",
+       469:   "rcp",
+       470:   "scx-proxy",
+       471:   "mondex",
+       472:   "ljk-login",
+       473:   "hybrid-pop",
+       474:   "tn-tl-w2",
+       475:   "tcpnethaspsrv",
+       476:   "tn-tl-fd1",
+       477:   "ss7ns",
+       478:   "spsc",
+       479:   "iafserver",
+       480:   "iafdbase",
+       481:   "ph",
+       482:   "bgs-nsi",
+       483:   "ulpnet",
+       484:   "integra-sme",
+       485:   "powerburst",
+       486:   "avian",
+       487:   "saft",
+       488:   "gss-http",
+       489:   "nest-protocol",
+       490:   "micom-pfs",
+       491:   "go-login",
+       492:   "ticf-1",
+       493:   "ticf-2",
+       494:   "pov-ray",
+       495:   "intecourier",
+       496:   "pim-rp-disc",
+       497:   "retrospect",
+       498:   "siam",
+       499:   "iso-ill",
+       500:   "isakmp",
+       501:   "stmf",
+       502:   "mbap",
+       503:   "intrinsa",
+       504:   "citadel",
+       505:   "mailbox-lm",
+       506:   "ohimsrv",
+       507:   "crs",
+       508:   "xvttp",
+       509:   "snare",
+       510:   "fcp",
+       511:   "passgo",
+       512:   "comsat",
+       513:   "who",
+       514:   "syslog",
+       515:   "printer",
+       516:   "videotex",
+       517:   "talk",
+       518:   "ntalk",
+       519:   "utime",
+       520:   "router",
+       521:   "ripng",
+       522:   "ulp",
+       523:   "ibm-db2",
+       524:   "ncp",
+       525:   "timed",
+       526:   "tempo",
+       527:   "stx",
+       528:   "custix",
+       529:   "irc-serv",
+       530:   "courier",
+       531:   "conference",
+       532:   "netnews",
+       533:   "netwall",
+       534:   "windream",
+       535:   "iiop",
+       536:   "opalis-rdv",
+       537:   "nmsp",
+       538:   "gdomap",
+       539:   "apertus-ldp",
+       540:   "uucp",
+       541:   "uucp-rlogin",
+       542:   "commerce",
+       543:   "klogin",
+       544:   "kshell",
+       545:   "appleqtcsrvr",
+       546:   "dhcpv6-client",
+       547:   "dhcpv6-server",
+       548:   "afpovertcp",
+       549:   "idfp",
+       550:   "new-rwho",
+       551:   "cybercash",
+       552:   "devshr-nts",
+       553:   "pirp",
+       554:   "rtsp",
+       555:   "dsf",
+       556:   "remotefs",
+       557:   "openvms-sysipc",
+       558:   "sdnskmp",
+       559:   "teedtap",
+       560:   "rmonitor",
+       561:   "monitor",
+       562:   "chshell",
+       563:   "nntps",
+       564:   "9pfs",
+       565:   "whoami",
+       566:   "streettalk",
+       567:   "banyan-rpc",
+       568:   "ms-shuttle",
+       569:   "ms-rome",
+       570:   "meter",
+       571:   "meter",
+       572:   "sonar",
+       573:   "banyan-vip",
+       574:   "ftp-agent",
+       575:   "vemmi",
+       576:   "ipcd",
+       577:   "vnas",
+       578:   "ipdd",
+       579:   "decbsrv",
+       580:   "sntp-heartbeat",
+       581:   "bdp",
+       582:   "scc-security",
+       583:   "philips-vc",
+       584:   "keyserver",
+       586:   "password-chg",
+       587:   "submission",
+       588:   "cal",
+       589:   "eyelink",
+       590:   "tns-cml",
+       591:   "http-alt",
+       592:   "eudora-set",
+       593:   "http-rpc-epmap",
+       594:   "tpip",
+       595:   "cab-protocol",
+       596:   "smsd",
+       597:   "ptcnameservice",
+       598:   "sco-websrvrmg3",
+       599:   "acp",
+       600:   "ipcserver",
+       601:   "syslog-conn",
+       602:   "xmlrpc-beep",
+       603:   "idxp",
+       604:   "tunnel",
+       605:   "soap-beep",
+       606:   "urm",
+       607:   "nqs",
+       608:   "sift-uft",
+       609:   "npmp-trap",
+       610:   "npmp-local",
+       611:   "npmp-gui",
+       612:   "hmmp-ind",
+       613:   "hmmp-op",
+       614:   "sshell",
+       615:   "sco-inetmgr",
+       616:   "sco-sysmgr",
+       617:   "sco-dtmgr",
+       618:   "dei-icda",
+       619:   "compaq-evm",
+       620:   "sco-websrvrmgr",
+       621:   "escp-ip",
+       622:   "collaborator",
+       623:   "asf-rmcp",
+       624:   "cryptoadmin",
+       625:   "dec-dlm",
+       626:   "asia",
+       627:   "passgo-tivoli",
+       628:   "qmqp",
+       629:   "3com-amp3",
+       630:   "rda",
+       631:   "ipp",
+       632:   "bmpp",
+       633:   "servstat",
+       634:   "ginad",
+       635:   "rlzdbase",
+       636:   "ldaps",
+       637:   "lanserver",
+       638:   "mcns-sec",
+       639:   "msdp",
+       640:   "entrust-sps",
+       641:   "repcmd",
+       642:   "esro-emsdp",
+       643:   "sanity",
+       644:   "dwr",
+       645:   "pssc",
+       646:   "ldp",
+       647:   "dhcp-failover",
+       648:   "rrp",
+       649:   "cadview-3d",
+       650:   "obex",
+       651:   "ieee-mms",
+       652:   "hello-port",
+       653:   "repscmd",
+       654:   "aodv",
+       655:   "tinc",
+       656:   "spmp",
+       657:   "rmc",
+       658:   "tenfold",
+       660:   "mac-srvr-admin",
+       661:   "hap",
+       662:   "pftp",
+       663:   "purenoise",
+       664:   "asf-secure-rmcp",
+       665:   "sun-dr",
+       666:   "mdqs",
+       667:   "disclose",
+       668:   "mecomm",
+       669:   "meregister",
+       670:   "vacdsm-sws",
+       671:   "vacdsm-app",
+       672:   "vpps-qua",
+       673:   "cimplex",
+       674:   "acap",
+       675:   "dctp",
+       676:   "vpps-via",
+       677:   "vpp",
+       678:   "ggf-ncp",
+       679:   "mrm",
+       680:   "entrust-aaas",
+       681:   "entrust-aams",
+       682:   "xfr",
+       683:   "corba-iiop",
+       684:   "corba-iiop-ssl",
+       685:   "mdc-portmapper",
+       686:   "hcp-wismar",
+       687:   "asipregistry",
+       688:   "realm-rusd",
+       689:   "nmap",
+       690:   "vatp",
+       691:   "msexch-routing",
+       692:   "hyperwave-isp",
+       693:   "connendp",
+       694:   "ha-cluster",
+       695:   "ieee-mms-ssl",
+       696:   "rushd",
+       697:   "uuidgen",
+       698:   "olsr",
+       699:   "accessnetwork",
+       700:   "epp",
+       701:   "lmp",
+       702:   "iris-beep",
+       704:   "elcsd",
+       705:   "agentx",
+       706:   "silc",
+       707:   "borland-dsj",
+       709:   "entrust-kmsh",
+       710:   "entrust-ash",
+       711:   "cisco-tdp",
+       712:   "tbrpf",
+       713:   "iris-xpc",
+       714:   "iris-xpcs",
+       715:   "iris-lwz",
+       716:   "pana",
+       729:   "netviewdm1",
+       730:   "netviewdm2",
+       731:   "netviewdm3",
+       741:   "netgw",
+       742:   "netrcs",
+       744:   "flexlm",
+       747:   "fujitsu-dev",
+       748:   "ris-cm",
+       749:   "kerberos-adm",
+       750:   "loadav",
+       751:   "pump",
+       752:   "qrh",
+       753:   "rrh",
+       754:   "tell",
+       758:   "nlogin",
+       759:   "con",
+       760:   "ns",
+       761:   "rxe",
+       762:   "quotad",
+       763:   "cycleserv",
+       764:   "omserv",
+       765:   "webster",
+       767:   "phonebook",
+       769:   "vid",
+       770:   "cadlock",
+       771:   "rtip",
+       772:   "cycleserv2",
+       773:   "notify",
+       774:   "acmaint-dbd",
+       775:   "acmaint-transd",
+       776:   "wpages",
+       777:   "multiling-http",
+       780:   "wpgs",
+       800:   "mdbs-daemon",
+       801:   "device",
+       802:   "mbap-s",
+       810:   "fcp-udp",
+       828:   "itm-mcell-s",
+       829:   "pkix-3-ca-ra",
+       830:   "netconf-ssh",
+       831:   "netconf-beep",
+       832:   "netconfsoaphttp",
+       833:   "netconfsoapbeep",
+       847:   "dhcp-failover2",
+       848:   "gdoi",
+       853:   "domain-s",
+       854:   "dlep",
+       860:   "iscsi",
+       861:   "owamp-control",
+       862:   "twamp-control",
+       873:   "rsync",
+       886:   "iclcnet-locate",
+       887:   "iclcnet-svinfo",
+       888:   "accessbuilder",
+       900:   "omginitialrefs",
+       901:   "smpnameres",
+       902:   "ideafarm-door",
+       903:   "ideafarm-panic",
+       910:   "kink",
+       911:   "xact-backup",
+       912:   "apex-mesh",
+       913:   "apex-edge",
+       989:   "ftps-data",
+       990:   "ftps",
+       991:   "nas",
+       992:   "telnets",
+       993:   "imaps",
+       995:   "pop3s",
+       996:   "vsinet",
+       997:   "maitrd",
+       998:   "puparp",
+       999:   "applix",
+       1000:  "cadlock2",
+       1010:  "surf",
+       1021:  "exp1",
+       1022:  "exp2",
+       1025:  "blackjack",
+       1026:  "cap",
+       1027:  "6a44",
+       1029:  "solid-mux",
+       1033:  "netinfo-local",
+       1034:  "activesync",
+       1035:  "mxxrlogin",
+       1036:  "nsstp",
+       1037:  "ams",
+       1038:  "mtqp",
+       1039:  "sbl",
+       1040:  "netarx",
+       1041:  "danf-ak2",
+       1042:  "afrog",
+       1043:  "boinc-client",
+       1044:  "dcutility",
+       1045:  "fpitp",
+       1046:  "wfremotertm",
+       1047:  "neod1",
+       1048:  "neod2",
+       1049:  "td-postman",
+       1050:  "cma",
+       1051:  "optima-vnet",
+       1052:  "ddt",
+       1053:  "remote-as",
+       1054:  "brvread",
+       1055:  "ansyslmd",
+       1056:  "vfo",
+       1057:  "startron",
+       1058:  "nim",
+       1059:  "nimreg",
+       1060:  "polestar",
+       1061:  "kiosk",
+       1062:  "veracity",
+       1063:  "kyoceranetdev",
+       1064:  "jstel",
+       1065:  "syscomlan",
+       1066:  "fpo-fns",
+       1067:  "instl-boots",
+       1068:  "instl-bootc",
+       1069:  "cognex-insight",
+       1070:  "gmrupdateserv",
+       1071:  "bsquare-voip",
+       1072:  "cardax",
+       1073:  "bridgecontrol",
+       1074:  "warmspotMgmt",
+       1075:  "rdrmshc",
+       1076:  "dab-sti-c",
+       1077:  "imgames",
+       1078:  "avocent-proxy",
+       1079:  "asprovatalk",
+       1080:  "socks",
+       1081:  "pvuniwien",
+       1082:  "amt-esd-prot",
+       1083:  "ansoft-lm-1",
+       1084:  "ansoft-lm-2",
+       1085:  "webobjects",
+       1086:  "cplscrambler-lg",
+       1087:  "cplscrambler-in",
+       1088:  "cplscrambler-al",
+       1089:  "ff-annunc",
+       1090:  "ff-fms",
+       1091:  "ff-sm",
+       1092:  "obrpd",
+       1093:  "proofd",
+       1094:  "rootd",
+       1095:  "nicelink",
+       1096:  "cnrprotocol",
+       1097:  "sunclustermgr",
+       1098:  "rmiactivation",
+       1099:  "rmiregistry",
+       1100:  "mctp",
+       1101:  "pt2-discover",
+       1102:  "adobeserver-1",
+       1103:  "adobeserver-2",
+       1104:  "xrl",
+       1105:  "ftranhc",
+       1106:  "isoipsigport-1",
+       1107:  "isoipsigport-2",
+       1108:  "ratio-adp",
+       1110:  "nfsd-keepalive",
+       1111:  "lmsocialserver",
+       1112:  "icp",
+       1113:  "ltp-deepspace",
+       1114:  "mini-sql",
+       1115:  "ardus-trns",
+       1116:  "ardus-cntl",
+       1117:  "ardus-mtrns",
+       1118:  "sacred",
+       1119:  "bnetgame",
+       1120:  "bnetfile",
+       1121:  "rmpp",
+       1122:  "availant-mgr",
+       1123:  "murray",
+       1124:  "hpvmmcontrol",
+       1125:  "hpvmmagent",
+       1126:  "hpvmmdata",
+       1127:  "kwdb-commn",
+       1128:  "saphostctrl",
+       1129:  "saphostctrls",
+       1130:  "casp",
+       1131:  "caspssl",
+       1132:  "kvm-via-ip",
+       1133:  "dfn",
+       1134:  "aplx",
+       1135:  "omnivision",
+       1136:  "hhb-gateway",
+       1137:  "trim",
+       1138:  "encrypted-admin",
+       1139:  "evm",
+       1140:  "autonoc",
+       1141:  "mxomss",
+       1142:  "edtools",
+       1143:  "imyx",
+       1144:  "fuscript",
+       1145:  "x9-icue",
+       1146:  "audit-transfer",
+       1147:  "capioverlan",
+       1148:  "elfiq-repl",
+       1149:  "bvtsonar",
+       1150:  "blaze",
+       1151:  "unizensus",
+       1152:  "winpoplanmess",
+       1153:  "c1222-acse",
+       1154:  "resacommunity",
+       1155:  "nfa",
+       1156:  "iascontrol-oms",
+       1157:  "iascontrol",
+       1158:  "dbcontrol-oms",
+       1159:  "oracle-oms",
+       1160:  "olsv",
+       1161:  "health-polling",
+       1162:  "health-trap",
+       1163:  "sddp",
+       1164:  "qsm-proxy",
+       1165:  "qsm-gui",
+       1166:  "qsm-remote",
+       1167:  "cisco-ipsla",
+       1168:  "vchat",
+       1169:  "tripwire",
+       1170:  "atc-lm",
+       1171:  "atc-appserver",
+       1172:  "dnap",
+       1173:  "d-cinema-rrp",
+       1174:  "fnet-remote-ui",
+       1175:  "dossier",
+       1176:  "indigo-server",
+       1177:  "dkmessenger",
+       1178:  "sgi-storman",
+       1179:  "b2n",
+       1180:  "mc-client",
+       1181:  "3comnetman",
+       1182:  "accelenet-data",
+       1183:  "llsurfup-http",
+       1184:  "llsurfup-https",
+       1185:  "catchpole",
+       1186:  "mysql-cluster",
+       1187:  "alias",
+       1188:  "hp-webadmin",
+       1189:  "unet",
+       1190:  "commlinx-avl",
+       1191:  "gpfs",
+       1192:  "caids-sensor",
+       1193:  "fiveacross",
+       1194:  "openvpn",
+       1195:  "rsf-1",
+       1196:  "netmagic",
+       1197:  "carrius-rshell",
+       1198:  "cajo-discovery",
+       1199:  "dmidi",
+       1200:  "scol",
+       1201:  "nucleus-sand",
+       1202:  "caiccipc",
+       1203:  "ssslic-mgr",
+       1204:  "ssslog-mgr",
+       1205:  "accord-mgc",
+       1206:  "anthony-data",
+       1207:  "metasage",
+       1208:  "seagull-ais",
+       1209:  "ipcd3",
+       1210:  "eoss",
+       1211:  "groove-dpp",
+       1212:  "lupa",
+       1213:  "mpc-lifenet",
+       1214:  "kazaa",
+       1215:  "scanstat-1",
+       1216:  "etebac5",
+       1217:  "hpss-ndapi",
+       1218:  "aeroflight-ads",
+       1219:  "aeroflight-ret",
+       1220:  "qt-serveradmin",
+       1221:  "sweetware-apps",
+       1222:  "nerv",
+       1223:  "tgp",
+       1224:  "vpnz",
+       1225:  "slinkysearch",
+       1226:  "stgxfws",
+       1227:  "dns2go",
+       1228:  "florence",
+       1229:  "zented",
+       1230:  "periscope",
+       1231:  "menandmice-lpm",
+       1232:  "first-defense",
+       1233:  "univ-appserver",
+       1234:  "search-agent",
+       1235:  "mosaicsyssvc1",
+       1236:  "bvcontrol",
+       1237:  "tsdos390",
+       1238:  "hacl-qs",
+       1239:  "nmsd",
+       1240:  "instantia",
+       1241:  "nessus",
+       1242:  "nmasoverip",
+       1243:  "serialgateway",
+       1244:  "isbconference1",
+       1245:  "isbconference2",
+       1246:  "payrouter",
+       1247:  "visionpyramid",
+       1248:  "hermes",
+       1249:  "mesavistaco",
+       1250:  "swldy-sias",
+       1251:  "servergraph",
+       1252:  "bspne-pcc",
+       1253:  "q55-pcc",
+       1254:  "de-noc",
+       1255:  "de-cache-query",
+       1256:  "de-server",
+       1257:  "shockwave2",
+       1258:  "opennl",
+       1259:  "opennl-voice",
+       1260:  "ibm-ssd",
+       1261:  "mpshrsv",
+       1262:  "qnts-orb",
+       1263:  "dka",
+       1264:  "prat",
+       1265:  "dssiapi",
+       1266:  "dellpwrappks",
+       1267:  "epc",
+       1268:  "propel-msgsys",
+       1269:  "watilapp",
+       1270:  "opsmgr",
+       1271:  "excw",
+       1272:  "cspmlockmgr",
+       1273:  "emc-gateway",
+       1274:  "t1distproc",
+       1275:  "ivcollector",
+       1277:  "miva-mqs",
+       1278:  "dellwebadmin-1",
+       1279:  "dellwebadmin-2",
+       1280:  "pictrography",
+       1281:  "healthd",
+       1282:  "emperion",
+       1283:  "productinfo",
+       1284:  "iee-qfx",
+       1285:  "neoiface",
+       1286:  "netuitive",
+       1287:  "routematch",
+       1288:  "navbuddy",
+       1289:  "jwalkserver",
+       1290:  "winjaserver",
+       1291:  "seagulllms",
+       1292:  "dsdn",
+       1293:  "pkt-krb-ipsec",
+       1294:  "cmmdriver",
+       1295:  "ehtp",
+       1296:  "dproxy",
+       1297:  "sdproxy",
+       1298:  "lpcp",
+       1299:  "hp-sci",
+       1300:  "h323hostcallsc",
+       1301:  "ci3-software-1",
+       1302:  "ci3-software-2",
+       1303:  "sftsrv",
+       1304:  "boomerang",
+       1305:  "pe-mike",
+       1306:  "re-conn-proto",
+       1307:  "pacmand",
+       1308:  "odsi",
+       1309:  "jtag-server",
+       1310:  "husky",
+       1311:  "rxmon",
+       1312:  "sti-envision",
+       1313:  "bmc-patroldb",
+       1314:  "pdps",
+       1315:  "els",
+       1316:  "exbit-escp",
+       1317:  "vrts-ipcserver",
+       1318:  "krb5gatekeeper",
+       1319:  "amx-icsp",
+       1320:  "amx-axbnet",
+       1321:  "pip",
+       1322:  "novation",
+       1323:  "brcd",
+       1324:  "delta-mcp",
+       1325:  "dx-instrument",
+       1326:  "wimsic",
+       1327:  "ultrex",
+       1328:  "ewall",
+       1329:  "netdb-export",
+       1330:  "streetperfect",
+       1331:  "intersan",
+       1332:  "pcia-rxp-b",
+       1333:  "passwrd-policy",
+       1334:  "writesrv",
+       1335:  "digital-notary",
+       1336:  "ischat",
+       1337:  "menandmice-dns",
+       1338:  "wmc-log-svc",
+       1339:  "kjtsiteserver",
+       1340:  "naap",
+       1341:  "qubes",
+       1342:  "esbroker",
+       1343:  "re101",
+       1344:  "icap",
+       1345:  "vpjp",
+       1346:  "alta-ana-lm",
+       1347:  "bbn-mmc",
+       1348:  "bbn-mmx",
+       1349:  "sbook",
+       1350:  "editbench",
+       1351:  "equationbuilder",
+       1352:  "lotusnote",
+       1353:  "relief",
+       1354:  "XSIP-network",
+       1355:  "intuitive-edge",
+       1356:  "cuillamartin",
+       1357:  "pegboard",
+       1358:  "connlcli",
+       1359:  "ftsrv",
+       1360:  "mimer",
+       1361:  "linx",
+       1362:  "timeflies",
+       1363:  "ndm-requester",
+       1364:  "ndm-server",
+       1365:  "adapt-sna",
+       1366:  "netware-csp",
+       1367:  "dcs",
+       1368:  "screencast",
+       1369:  "gv-us",
+       1370:  "us-gv",
+       1371:  "fc-cli",
+       1372:  "fc-ser",
+       1373:  "chromagrafx",
+       1374:  "molly",
+       1375:  "bytex",
+       1376:  "ibm-pps",
+       1377:  "cichlid",
+       1378:  "elan",
+       1379:  "dbreporter",
+       1380:  "telesis-licman",
+       1381:  "apple-licman",
+       1382:  "udt-os",
+       1383:  "gwha",
+       1384:  "os-licman",
+       1385:  "atex-elmd",
+       1386:  "checksum",
+       1387:  "cadsi-lm",
+       1388:  "objective-dbc",
+       1389:  "iclpv-dm",
+       1390:  "iclpv-sc",
+       1391:  "iclpv-sas",
+       1392:  "iclpv-pm",
+       1393:  "iclpv-nls",
+       1394:  "iclpv-nlc",
+       1395:  "iclpv-wsm",
+       1396:  "dvl-activemail",
+       1397:  "audio-activmail",
+       1398:  "video-activmail",
+       1399:  "cadkey-licman",
+       1400:  "cadkey-tablet",
+       1401:  "goldleaf-licman",
+       1402:  "prm-sm-np",
+       1403:  "prm-nm-np",
+       1404:  "igi-lm",
+       1405:  "ibm-res",
+       1406:  "netlabs-lm",
+       1408:  "sophia-lm",
+       1409:  "here-lm",
+       1410:  "hiq",
+       1411:  "af",
+       1412:  "innosys",
+       1413:  "innosys-acl",
+       1414:  "ibm-mqseries",
+       1415:  "dbstar",
+       1416:  "novell-lu6-2",
+       1417:  "timbuktu-srv1",
+       1418:  "timbuktu-srv2",
+       1419:  "timbuktu-srv3",
+       1420:  "timbuktu-srv4",
+       1421:  "gandalf-lm",
+       1422:  "autodesk-lm",
+       1423:  "essbase",
+       1424:  "hybrid",
+       1425:  "zion-lm",
+       1426:  "sais",
+       1427:  "mloadd",
+       1428:  "informatik-lm",
+       1429:  "nms",
+       1430:  "tpdu",
+       1431:  "rgtp",
+       1432:  "blueberry-lm",
+       1433:  "ms-sql-s",
+       1434:  "ms-sql-m",
+       1435:  "ibm-cics",
+       1436:  "saism",
+       1437:  "tabula",
+       1438:  "eicon-server",
+       1439:  "eicon-x25",
+       1440:  "eicon-slp",
+       1441:  "cadis-1",
+       1442:  "cadis-2",
+       1443:  "ies-lm",
+       1444:  "marcam-lm",
+       1445:  "proxima-lm",
+       1446:  "ora-lm",
+       1447:  "apri-lm",
+       1448:  "oc-lm",
+       1449:  "peport",
+       1450:  "dwf",
+       1451:  "infoman",
+       1452:  "gtegsc-lm",
+       1453:  "genie-lm",
+       1454:  "interhdl-elmd",
+       1455:  "esl-lm",
+       1456:  "dca",
+       1457:  "valisys-lm",
+       1458:  "nrcabq-lm",
+       1459:  "proshare1",
+       1460:  "proshare2",
+       1461:  "ibm-wrless-lan",
+       1462:  "world-lm",
+       1463:  "nucleus",
+       1464:  "msl-lmd",
+       1465:  "pipes",
+       1466:  "oceansoft-lm",
+       1467:  "csdmbase",
+       1468:  "csdm",
+       1469:  "aal-lm",
+       1470:  "uaiact",
+       1471:  "csdmbase",
+       1472:  "csdm",
+       1473:  "openmath",
+       1474:  "telefinder",
+       1475:  "taligent-lm",
+       1476:  "clvm-cfg",
+       1477:  "ms-sna-server",
+       1478:  "ms-sna-base",
+       1479:  "dberegister",
+       1480:  "pacerforum",
+       1481:  "airs",
+       1482:  "miteksys-lm",
+       1483:  "afs",
+       1484:  "confluent",
+       1485:  "lansource",
+       1486:  "nms-topo-serv",
+       1487:  "localinfosrvr",
+       1488:  "docstor",
+       1489:  "dmdocbroker",
+       1490:  "insitu-conf",
+       1492:  "stone-design-1",
+       1493:  "netmap-lm",
+       1494:  "ica",
+       1495:  "cvc",
+       1496:  "liberty-lm",
+       1497:  "rfx-lm",
+       1498:  "sybase-sqlany",
+       1499:  "fhc",
+       1500:  "vlsi-lm",
+       1501:  "saiscm",
+       1502:  "shivadiscovery",
+       1503:  "imtc-mcs",
+       1504:  "evb-elm",
+       1505:  "funkproxy",
+       1506:  "utcd",
+       1507:  "symplex",
+       1508:  "diagmond",
+       1509:  "robcad-lm",
+       1510:  "mvx-lm",
+       1511:  "3l-l1",
+       1512:  "wins",
+       1513:  "fujitsu-dtc",
+       1514:  "fujitsu-dtcns",
+       1515:  "ifor-protocol",
+       1516:  "vpad",
+       1517:  "vpac",
+       1518:  "vpvd",
+       1519:  "vpvc",
+       1520:  "atm-zip-office",
+       1521:  "ncube-lm",
+       1522:  "ricardo-lm",
+       1523:  "cichild-lm",
+       1524:  "ingreslock",
+       1525:  "orasrv",
+       1526:  "pdap-np",
+       1527:  "tlisrv",
+       1528:  "ngr-t",
+       1529:  "coauthor",
+       1530:  "rap-service",
+       1531:  "rap-listen",
+       1532:  "miroconnect",
+       1533:  "virtual-places",
+       1534:  "micromuse-lm",
+       1535:  "ampr-info",
+       1536:  "ampr-inter",
+       1537:  "sdsc-lm",
+       1538:  "3ds-lm",
+       1539:  "intellistor-lm",
+       1540:  "rds",
+       1541:  "rds2",
+       1542:  "gridgen-elmd",
+       1543:  "simba-cs",
+       1544:  "aspeclmd",
+       1545:  "vistium-share",
+       1546:  "abbaccuray",
+       1547:  "laplink",
+       1548:  "axon-lm",
+       1549:  "shivasound",
+       1550:  "3m-image-lm",
+       1551:  "hecmtl-db",
+       1552:  "pciarray",
+       1553:  "sna-cs",
+       1554:  "caci-lm",
+       1555:  "livelan",
+       1556:  "veritas-pbx",
+       1557:  "arbortext-lm",
+       1558:  "xingmpeg",
+       1559:  "web2host",
+       1560:  "asci-val",
+       1561:  "facilityview",
+       1562:  "pconnectmgr",
+       1563:  "cadabra-lm",
+       1564:  "pay-per-view",
+       1565:  "winddlb",
+       1566:  "corelvideo",
+       1567:  "jlicelmd",
+       1568:  "tsspmap",
+       1569:  "ets",
+       1570:  "orbixd",
+       1571:  "rdb-dbs-disp",
+       1572:  "chip-lm",
+       1573:  "itscomm-ns",
+       1574:  "mvel-lm",
+       1575:  "oraclenames",
+       1576:  "moldflow-lm",
+       1577:  "hypercube-lm",
+       1578:  "jacobus-lm",
+       1579:  "ioc-sea-lm",
+       1580:  "tn-tl-r2",
+       1581:  "mil-2045-47001",
+       1582:  "msims",
+       1583:  "simbaexpress",
+       1584:  "tn-tl-fd2",
+       1585:  "intv",
+       1586:  "ibm-abtact",
+       1587:  "pra-elmd",
+       1588:  "triquest-lm",
+       1589:  "vqp",
+       1590:  "gemini-lm",
+       1591:  "ncpm-pm",
+       1592:  "commonspace",
+       1593:  "mainsoft-lm",
+       1594:  "sixtrak",
+       1595:  "radio",
+       1596:  "radio-bc",
+       1597:  "orbplus-iiop",
+       1598:  "picknfs",
+       1599:  "simbaservices",
+       1600:  "issd",
+       1601:  "aas",
+       1602:  "inspect",
+       1603:  "picodbc",
+       1604:  "icabrowser",
+       1605:  "slp",
+       1606:  "slm-api",
+       1607:  "stt",
+       1608:  "smart-lm",
+       1609:  "isysg-lm",
+       1610:  "taurus-wh",
+       1611:  "ill",
+       1612:  "netbill-trans",
+       1613:  "netbill-keyrep",
+       1614:  "netbill-cred",
+       1615:  "netbill-auth",
+       1616:  "netbill-prod",
+       1617:  "nimrod-agent",
+       1618:  "skytelnet",
+       1619:  "xs-openstorage",
+       1620:  "faxportwinport",
+       1621:  "softdataphone",
+       1622:  "ontime",
+       1623:  "jaleosnd",
+       1624:  "udp-sr-port",
+       1625:  "svs-omagent",
+       1626:  "shockwave",
+       1627:  "t128-gateway",
+       1628:  "lontalk-norm",
+       1629:  "lontalk-urgnt",
+       1630:  "oraclenet8cman",
+       1631:  "visitview",
+       1632:  "pammratc",
+       1633:  "pammrpc",
+       1634:  "loaprobe",
+       1635:  "edb-server1",
+       1636:  "isdc",
+       1637:  "islc",
+       1638:  "ismc",
+       1639:  "cert-initiator",
+       1640:  "cert-responder",
+       1641:  "invision",
+       1642:  "isis-am",
+       1643:  "isis-ambc",
+       1644:  "saiseh",
+       1645:  "sightline",
+       1646:  "sa-msg-port",
+       1647:  "rsap",
+       1648:  "concurrent-lm",
+       1649:  "kermit",
+       1650:  "nkd",
+       1651:  "shiva-confsrvr",
+       1652:  "xnmp",
+       1653:  "alphatech-lm",
+       1654:  "stargatealerts",
+       1655:  "dec-mbadmin",
+       1656:  "dec-mbadmin-h",
+       1657:  "fujitsu-mmpdc",
+       1658:  "sixnetudr",
+       1659:  "sg-lm",
+       1660:  "skip-mc-gikreq",
+       1661:  "netview-aix-1",
+       1662:  "netview-aix-2",
+       1663:  "netview-aix-3",
+       1664:  "netview-aix-4",
+       1665:  "netview-aix-5",
+       1666:  "netview-aix-6",
+       1667:  "netview-aix-7",
+       1668:  "netview-aix-8",
+       1669:  "netview-aix-9",
+       1670:  "netview-aix-10",
+       1671:  "netview-aix-11",
+       1672:  "netview-aix-12",
+       1673:  "proshare-mc-1",
+       1674:  "proshare-mc-2",
+       1675:  "pdp",
+       1676:  "netcomm2",
+       1677:  "groupwise",
+       1678:  "prolink",
+       1679:  "darcorp-lm",
+       1680:  "microcom-sbp",
+       1681:  "sd-elmd",
+       1682:  "lanyon-lantern",
+       1683:  "ncpm-hip",
+       1684:  "snaresecure",
+       1685:  "n2nremote",
+       1686:  "cvmon",
+       1687:  "nsjtp-ctrl",
+       1688:  "nsjtp-data",
+       1689:  "firefox",
+       1690:  "ng-umds",
+       1691:  "empire-empuma",
+       1692:  "sstsys-lm",
+       1693:  "rrirtr",
+       1694:  "rrimwm",
+       1695:  "rrilwm",
+       1696:  "rrifmm",
+       1697:  "rrisat",
+       1698:  "rsvp-encap-1",
+       1699:  "rsvp-encap-2",
+       1700:  "mps-raft",
+       1701:  "l2f",
+       1702:  "deskshare",
+       1703:  "hb-engine",
+       1704:  "bcs-broker",
+       1705:  "slingshot",
+       1706:  "jetform",
+       1707:  "vdmplay",
+       1708:  "gat-lmd",
+       1709:  "centra",
+       1710:  "impera",
+       1711:  "pptconference",
+       1712:  "registrar",
+       1713:  "conferencetalk",
+       1714:  "sesi-lm",
+       1715:  "houdini-lm",
+       1716:  "xmsg",
+       1717:  "fj-hdnet",
+       1718:  "h323gatedisc",
+       1719:  "h323gatestat",
+       1720:  "h323hostcall",
+       1721:  "caicci",
+       1722:  "hks-lm",
+       1723:  "pptp",
+       1724:  "csbphonemaster",
+       1725:  "iden-ralp",
+       1726:  "iberiagames",
+       1727:  "winddx",
+       1728:  "telindus",
+       1729:  "citynl",
+       1730:  "roketz",
+       1731:  "msiccp",
+       1732:  "proxim",
+       1733:  "siipat",
+       1734:  "cambertx-lm",
+       1735:  "privatechat",
+       1736:  "street-stream",
+       1737:  "ultimad",
+       1738:  "gamegen1",
+       1739:  "webaccess",
+       1740:  "encore",
+       1741:  "cisco-net-mgmt",
+       1742:  "3Com-nsd",
+       1743:  "cinegrfx-lm",
+       1744:  "ncpm-ft",
+       1745:  "remote-winsock",
+       1746:  "ftrapid-1",
+       1747:  "ftrapid-2",
+       1748:  "oracle-em1",
+       1749:  "aspen-services",
+       1750:  "sslp",
+       1751:  "swiftnet",
+       1752:  "lofr-lm",
+       1754:  "oracle-em2",
+       1755:  "ms-streaming",
+       1756:  "capfast-lmd",
+       1757:  "cnhrp",
+       1758:  "tftp-mcast",
+       1759:  "spss-lm",
+       1760:  "www-ldap-gw",
+       1761:  "cft-0",
+       1762:  "cft-1",
+       1763:  "cft-2",
+       1764:  "cft-3",
+       1765:  "cft-4",
+       1766:  "cft-5",
+       1767:  "cft-6",
+       1768:  "cft-7",
+       1769:  "bmc-net-adm",
+       1770:  "bmc-net-svc",
+       1771:  "vaultbase",
+       1772:  "essweb-gw",
+       1773:  "kmscontrol",
+       1774:  "global-dtserv",
+       1776:  "femis",
+       1777:  "powerguardian",
+       1778:  "prodigy-intrnet",
+       1779:  "pharmasoft",
+       1780:  "dpkeyserv",
+       1781:  "answersoft-lm",
+       1782:  "hp-hcip",
+       1784:  "finle-lm",
+       1785:  "windlm",
+       1786:  "funk-logger",
+       1787:  "funk-license",
+       1788:  "psmond",
+       1789:  "hello",
+       1790:  "nmsp",
+       1791:  "ea1",
+       1792:  "ibm-dt-2",
+       1793:  "rsc-robot",
+       1794:  "cera-bcm",
+       1795:  "dpi-proxy",
+       1796:  "vocaltec-admin",
+       1797:  "uma",
+       1798:  "etp",
+       1799:  "netrisk",
+       1800:  "ansys-lm",
+       1801:  "msmq",
+       1802:  "concomp1",
+       1803:  "hp-hcip-gwy",
+       1804:  "enl",
+       1805:  "enl-name",
+       1806:  "musiconline",
+       1807:  "fhsp",
+       1808:  "oracle-vp2",
+       1809:  "oracle-vp1",
+       1810:  "jerand-lm",
+       1811:  "scientia-sdb",
+       1812:  "radius",
+       1813:  "radius-acct",
+       1814:  "tdp-suite",
+       1815:  "mmpft",
+       1816:  "harp",
+       1817:  "rkb-oscs",
+       1818:  "etftp",
+       1819:  "plato-lm",
+       1820:  "mcagent",
+       1821:  "donnyworld",
+       1822:  "es-elmd",
+       1823:  "unisys-lm",
+       1824:  "metrics-pas",
+       1825:  "direcpc-video",
+       1826:  "ardt",
+       1827:  "asi",
+       1828:  "itm-mcell-u",
+       1829:  "optika-emedia",
+       1830:  "net8-cman",
+       1831:  "myrtle",
+       1832:  "tht-treasure",
+       1833:  "udpradio",
+       1834:  "ardusuni",
+       1835:  "ardusmul",
+       1836:  "ste-smsc",
+       1837:  "csoft1",
+       1838:  "talnet",
+       1839:  "netopia-vo1",
+       1840:  "netopia-vo2",
+       1841:  "netopia-vo3",
+       1842:  "netopia-vo4",
+       1843:  "netopia-vo5",
+       1844:  "direcpc-dll",
+       1845:  "altalink",
+       1846:  "tunstall-pnc",
+       1847:  "slp-notify",
+       1848:  "fjdocdist",
+       1849:  "alpha-sms",
+       1850:  "gsi",
+       1851:  "ctcd",
+       1852:  "virtual-time",
+       1853:  "vids-avtp",
+       1854:  "buddy-draw",
+       1855:  "fiorano-rtrsvc",
+       1856:  "fiorano-msgsvc",
+       1857:  "datacaptor",
+       1858:  "privateark",
+       1859:  "gammafetchsvr",
+       1860:  "sunscalar-svc",
+       1861:  "lecroy-vicp",
+       1862:  "mysql-cm-agent",
+       1863:  "msnp",
+       1864:  "paradym-31port",
+       1865:  "entp",
+       1866:  "swrmi",
+       1867:  "udrive",
+       1868:  "viziblebrowser",
+       1869:  "transact",
+       1870:  "sunscalar-dns",
+       1871:  "canocentral0",
+       1872:  "canocentral1",
+       1873:  "fjmpjps",
+       1874:  "fjswapsnp",
+       1875:  "westell-stats",
+       1876:  "ewcappsrv",
+       1877:  "hp-webqosdb",
+       1878:  "drmsmc",
+       1879:  "nettgain-nms",
+       1880:  "vsat-control",
+       1881:  "ibm-mqseries2",
+       1882:  "ecsqdmn",
+       1883:  "mqtt",
+       1884:  "idmaps",
+       1885:  "vrtstrapserver",
+       1886:  "leoip",
+       1887:  "filex-lport",
+       1888:  "ncconfig",
+       1889:  "unify-adapter",
+       1890:  "wilkenlistener",
+       1891:  "childkey-notif",
+       1892:  "childkey-ctrl",
+       1893:  "elad",
+       1894:  "o2server-port",
+       1896:  "b-novative-ls",
+       1897:  "metaagent",
+       1898:  "cymtec-port",
+       1899:  "mc2studios",
+       1900:  "ssdp",
+       1901:  "fjicl-tep-a",
+       1902:  "fjicl-tep-b",
+       1903:  "linkname",
+       1904:  "fjicl-tep-c",
+       1905:  "sugp",
+       1906:  "tpmd",
+       1907:  "intrastar",
+       1908:  "dawn",
+       1909:  "global-wlink",
+       1910:  "ultrabac",
+       1911:  "mtp",
+       1912:  "rhp-iibp",
+       1913:  "armadp",
+       1914:  "elm-momentum",
+       1915:  "facelink",
+       1916:  "persona",
+       1917:  "noagent",
+       1918:  "can-nds",
+       1919:  "can-dch",
+       1920:  "can-ferret",
+       1921:  "noadmin",
+       1922:  "tapestry",
+       1923:  "spice",
+       1924:  "xiip",
+       1925:  "discovery-port",
+       1926:  "egs",
+       1927:  "videte-cipc",
+       1928:  "emsd-port",
+       1929:  "bandwiz-system",
+       1930:  "driveappserver",
+       1931:  "amdsched",
+       1932:  "ctt-broker",
+       1933:  "xmapi",
+       1934:  "xaapi",
+       1935:  "macromedia-fcs",
+       1936:  "jetcmeserver",
+       1937:  "jwserver",
+       1938:  "jwclient",
+       1939:  "jvserver",
+       1940:  "jvclient",
+       1941:  "dic-aida",
+       1942:  "res",
+       1943:  "beeyond-media",
+       1944:  "close-combat",
+       1945:  "dialogic-elmd",
+       1946:  "tekpls",
+       1947:  "sentinelsrm",
+       1948:  "eye2eye",
+       1949:  "ismaeasdaqlive",
+       1950:  "ismaeasdaqtest",
+       1951:  "bcs-lmserver",
+       1952:  "mpnjsc",
+       1953:  "rapidbase",
+       1954:  "abr-api",
+       1955:  "abr-secure",
+       1956:  "vrtl-vmf-ds",
+       1957:  "unix-status",
+       1958:  "dxadmind",
+       1959:  "simp-all",
+       1960:  "nasmanager",
+       1961:  "bts-appserver",
+       1962:  "biap-mp",
+       1963:  "webmachine",
+       1964:  "solid-e-engine",
+       1965:  "tivoli-npm",
+       1966:  "slush",
+       1967:  "sns-quote",
+       1968:  "lipsinc",
+       1969:  "lipsinc1",
+       1970:  "netop-rc",
+       1971:  "netop-school",
+       1972:  "intersys-cache",
+       1973:  "dlsrap",
+       1974:  "drp",
+       1975:  "tcoflashagent",
+       1976:  "tcoregagent",
+       1977:  "tcoaddressbook",
+       1978:  "unisql",
+       1979:  "unisql-java",
+       1980:  "pearldoc-xact",
+       1981:  "p2pq",
+       1982:  "estamp",
+       1983:  "lhtp",
+       1984:  "bb",
+       1985:  "hsrp",
+       1986:  "licensedaemon",
+       1987:  "tr-rsrb-p1",
+       1988:  "tr-rsrb-p2",
+       1989:  "tr-rsrb-p3",
+       1990:  "stun-p1",
+       1991:  "stun-p2",
+       1992:  "stun-p3",
+       1993:  "snmp-tcp-port",
+       1994:  "stun-port",
+       1995:  "perf-port",
+       1996:  "tr-rsrb-port",
+       1997:  "gdp-port",
+       1998:  "x25-svc-port",
+       1999:  "tcp-id-port",
+       2000:  "cisco-sccp",
+       2001:  "wizard",
+       2002:  "globe",
+       2003:  "brutus",
+       2004:  "emce",
+       2005:  "oracle",
+       2006:  "raid-cd",
+       2007:  "raid-am",
+       2008:  "terminaldb",
+       2009:  "whosockami",
+       2010:  "pipe-server",
+       2011:  "servserv",
+       2012:  "raid-ac",
+       2013:  "raid-cd",
+       2014:  "raid-sf",
+       2015:  "raid-cs",
+       2016:  "bootserver",
+       2017:  "bootclient",
+       2018:  "rellpack",
+       2019:  "about",
+       2020:  "xinupageserver",
+       2021:  "xinuexpansion1",
+       2022:  "xinuexpansion2",
+       2023:  "xinuexpansion3",
+       2024:  "xinuexpansion4",
+       2025:  "xribs",
+       2026:  "scrabble",
+       2027:  "shadowserver",
+       2028:  "submitserver",
+       2029:  "hsrpv6",
+       2030:  "device2",
+       2031:  "mobrien-chat",
+       2032:  "blackboard",
+       2033:  "glogger",
+       2034:  "scoremgr",
+       2035:  "imsldoc",
+       2036:  "e-dpnet",
+       2037:  "applus",
+       2038:  "objectmanager",
+       2039:  "prizma",
+       2040:  "lam",
+       2041:  "interbase",
+       2042:  "isis",
+       2043:  "isis-bcast",
+       2044:  "rimsl",
+       2045:  "cdfunc",
+       2046:  "sdfunc",
+       2047:  "dls",
+       2048:  "dls-monitor",
+       2049:  "shilp",
+       2050:  "av-emb-config",
+       2051:  "epnsdp",
+       2052:  "clearvisn",
+       2053:  "lot105-ds-upd",
+       2054:  "weblogin",
+       2055:  "iop",
+       2056:  "omnisky",
+       2057:  "rich-cp",
+       2058:  "newwavesearch",
+       2059:  "bmc-messaging",
+       2060:  "teleniumdaemon",
+       2061:  "netmount",
+       2062:  "icg-swp",
+       2063:  "icg-bridge",
+       2064:  "icg-iprelay",
+       2065:  "dlsrpn",
+       2066:  "aura",
+       2067:  "dlswpn",
+       2068:  "avauthsrvprtcl",
+       2069:  "event-port",
+       2070:  "ah-esp-encap",
+       2071:  "acp-port",
+       2072:  "msync",
+       2073:  "gxs-data-port",
+       2074:  "vrtl-vmf-sa",
+       2075:  "newlixengine",
+       2076:  "newlixconfig",
+       2077:  "tsrmagt",
+       2078:  "tpcsrvr",
+       2079:  "idware-router",
+       2080:  "autodesk-nlm",
+       2081:  "kme-trap-port",
+       2082:  "infowave",
+       2083:  "radsec",
+       2084:  "sunclustergeo",
+       2085:  "ada-cip",
+       2086:  "gnunet",
+       2087:  "eli",
+       2088:  "ip-blf",
+       2089:  "sep",
+       2090:  "lrp",
+       2091:  "prp",
+       2092:  "descent3",
+       2093:  "nbx-cc",
+       2094:  "nbx-au",
+       2095:  "nbx-ser",
+       2096:  "nbx-dir",
+       2097:  "jetformpreview",
+       2098:  "dialog-port",
+       2099:  "h2250-annex-g",
+       2100:  "amiganetfs",
+       2101:  "rtcm-sc104",
+       2102:  "zephyr-srv",
+       2103:  "zephyr-clt",
+       2104:  "zephyr-hm",
+       2105:  "minipay",
+       2106:  "mzap",
+       2107:  "bintec-admin",
+       2108:  "comcam",
+       2109:  "ergolight",
+       2110:  "umsp",
+       2111:  "dsatp",
+       2112:  "idonix-metanet",
+       2113:  "hsl-storm",
+       2114:  "newheights",
+       2115:  "kdm",
+       2116:  "ccowcmr",
+       2117:  "mentaclient",
+       2118:  "mentaserver",
+       2119:  "gsigatekeeper",
+       2120:  "qencp",
+       2121:  "scientia-ssdb",
+       2122:  "caupc-remote",
+       2123:  "gtp-control",
+       2124:  "elatelink",
+       2125:  "lockstep",
+       2126:  "pktcable-cops",
+       2127:  "index-pc-wb",
+       2128:  "net-steward",
+       2129:  "cs-live",
+       2130:  "xds",
+       2131:  "avantageb2b",
+       2132:  "solera-epmap",
+       2133:  "zymed-zpp",
+       2134:  "avenue",
+       2135:  "gris",
+       2136:  "appworxsrv",
+       2137:  "connect",
+       2138:  "unbind-cluster",
+       2139:  "ias-auth",
+       2140:  "ias-reg",
+       2141:  "ias-admind",
+       2142:  "tdmoip",
+       2143:  "lv-jc",
+       2144:  "lv-ffx",
+       2145:  "lv-pici",
+       2146:  "lv-not",
+       2147:  "lv-auth",
+       2148:  "veritas-ucl",
+       2149:  "acptsys",
+       2150:  "dynamic3d",
+       2151:  "docent",
+       2152:  "gtp-user",
+       2153:  "ctlptc",
+       2154:  "stdptc",
+       2155:  "brdptc",
+       2156:  "trp",
+       2157:  "xnds",
+       2158:  "touchnetplus",
+       2159:  "gdbremote",
+       2160:  "apc-2160",
+       2161:  "apc-2161",
+       2162:  "navisphere",
+       2163:  "navisphere-sec",
+       2164:  "ddns-v3",
+       2165:  "x-bone-api",
+       2166:  "iwserver",
+       2167:  "raw-serial",
+       2168:  "easy-soft-mux",
+       2169:  "brain",
+       2170:  "eyetv",
+       2171:  "msfw-storage",
+       2172:  "msfw-s-storage",
+       2173:  "msfw-replica",
+       2174:  "msfw-array",
+       2175:  "airsync",
+       2176:  "rapi",
+       2177:  "qwave",
+       2178:  "bitspeer",
+       2179:  "vmrdp",
+       2180:  "mc-gt-srv",
+       2181:  "eforward",
+       2182:  "cgn-stat",
+       2183:  "cgn-config",
+       2184:  "nvd",
+       2185:  "onbase-dds",
+       2186:  "gtaua",
+       2187:  "ssmd",
+       2190:  "tivoconnect",
+       2191:  "tvbus",
+       2192:  "asdis",
+       2193:  "drwcs",
+       2197:  "mnp-exchange",
+       2198:  "onehome-remote",
+       2199:  "onehome-help",
+       2200:  "ici",
+       2201:  "ats",
+       2202:  "imtc-map",
+       2203:  "b2-runtime",
+       2204:  "b2-license",
+       2205:  "jps",
+       2206:  "hpocbus",
+       2207:  "hpssd",
+       2208:  "hpiod",
+       2209:  "rimf-ps",
+       2210:  "noaaport",
+       2211:  "emwin",
+       2212:  "leecoposserver",
+       2213:  "kali",
+       2214:  "rpi",
+       2215:  "ipcore",
+       2216:  "vtu-comms",
+       2217:  "gotodevice",
+       2218:  "bounzza",
+       2219:  "netiq-ncap",
+       2220:  "netiq",
+       2221:  "ethernet-ip-s",
+       2222:  "EtherNet-IP-1",
+       2223:  "rockwell-csp2",
+       2224:  "efi-mg",
+       2226:  "di-drm",
+       2227:  "di-msg",
+       2228:  "ehome-ms",
+       2229:  "datalens",
+       2230:  "queueadm",
+       2231:  "wimaxasncp",
+       2232:  "ivs-video",
+       2233:  "infocrypt",
+       2234:  "directplay",
+       2235:  "sercomm-wlink",
+       2236:  "nani",
+       2237:  "optech-port1-lm",
+       2238:  "aviva-sna",
+       2239:  "imagequery",
+       2240:  "recipe",
+       2241:  "ivsd",
+       2242:  "foliocorp",
+       2243:  "magicom",
+       2244:  "nmsserver",
+       2245:  "hao",
+       2246:  "pc-mta-addrmap",
+       2247:  "antidotemgrsvr",
+       2248:  "ums",
+       2249:  "rfmp",
+       2250:  "remote-collab",
+       2251:  "dif-port",
+       2252:  "njenet-ssl",
+       2253:  "dtv-chan-req",
+       2254:  "seispoc",
+       2255:  "vrtp",
+       2256:  "pcc-mfp",
+       2257:  "simple-tx-rx",
+       2258:  "rcts",
+       2260:  "apc-2260",
+       2261:  "comotionmaster",
+       2262:  "comotionback",
+       2263:  "ecwcfg",
+       2264:  "apx500api-1",
+       2265:  "apx500api-2",
+       2266:  "mfserver",
+       2267:  "ontobroker",
+       2268:  "amt",
+       2269:  "mikey",
+       2270:  "starschool",
+       2271:  "mmcals",
+       2272:  "mmcal",
+       2273:  "mysql-im",
+       2274:  "pcttunnell",
+       2275:  "ibridge-data",
+       2276:  "ibridge-mgmt",
+       2277:  "bluectrlproxy",
+       2278:  "s3db",
+       2279:  "xmquery",
+       2280:  "lnvpoller",
+       2281:  "lnvconsole",
+       2282:  "lnvalarm",
+       2283:  "lnvstatus",
+       2284:  "lnvmaps",
+       2285:  "lnvmailmon",
+       2286:  "nas-metering",
+       2287:  "dna",
+       2288:  "netml",
+       2289:  "dict-lookup",
+       2290:  "sonus-logging",
+       2291:  "eapsp",
+       2292:  "mib-streaming",
+       2293:  "npdbgmngr",
+       2294:  "konshus-lm",
+       2295:  "advant-lm",
+       2296:  "theta-lm",
+       2297:  "d2k-datamover1",
+       2298:  "d2k-datamover2",
+       2299:  "pc-telecommute",
+       2300:  "cvmmon",
+       2301:  "cpq-wbem",
+       2302:  "binderysupport",
+       2303:  "proxy-gateway",
+       2304:  "attachmate-uts",
+       2305:  "mt-scaleserver",
+       2306:  "tappi-boxnet",
+       2307:  "pehelp",
+       2308:  "sdhelp",
+       2309:  "sdserver",
+       2310:  "sdclient",
+       2311:  "messageservice",
+       2312:  "wanscaler",
+       2313:  "iapp",
+       2314:  "cr-websystems",
+       2315:  "precise-sft",
+       2316:  "sent-lm",
+       2317:  "attachmate-g32",
+       2318:  "cadencecontrol",
+       2319:  "infolibria",
+       2320:  "siebel-ns",
+       2321:  "rdlap",
+       2322:  "ofsd",
+       2323:  "3d-nfsd",
+       2324:  "cosmocall",
+       2325:  "ansysli",
+       2326:  "idcp",
+       2327:  "xingcsm",
+       2328:  "netrix-sftm",
+       2329:  "nvd",
+       2330:  "tscchat",
+       2331:  "agentview",
+       2332:  "rcc-host",
+       2333:  "snapp",
+       2334:  "ace-client",
+       2335:  "ace-proxy",
+       2336:  "appleugcontrol",
+       2337:  "ideesrv",
+       2338:  "norton-lambert",
+       2339:  "3com-webview",
+       2340:  "wrs-registry",
+       2341:  "xiostatus",
+       2342:  "manage-exec",
+       2343:  "nati-logos",
+       2344:  "fcmsys",
+       2345:  "dbm",
+       2346:  "redstorm-join",
+       2347:  "redstorm-find",
+       2348:  "redstorm-info",
+       2349:  "redstorm-diag",
+       2350:  "psbserver",
+       2351:  "psrserver",
+       2352:  "pslserver",
+       2353:  "pspserver",
+       2354:  "psprserver",
+       2355:  "psdbserver",
+       2356:  "gxtelmd",
+       2357:  "unihub-server",
+       2358:  "futrix",
+       2359:  "flukeserver",
+       2360:  "nexstorindltd",
+       2361:  "tl1",
+       2362:  "digiman",
+       2363:  "mediacntrlnfsd",
+       2364:  "oi-2000",
+       2365:  "dbref",
+       2366:  "qip-login",
+       2367:  "service-ctrl",
+       2368:  "opentable",
+       2370:  "l3-hbmon",
+       2372:  "lanmessenger",
+       2381:  "compaq-https",
+       2382:  "ms-olap3",
+       2383:  "ms-olap4",
+       2384:  "sd-capacity",
+       2385:  "sd-data",
+       2386:  "virtualtape",
+       2387:  "vsamredirector",
+       2388:  "mynahautostart",
+       2389:  "ovsessionmgr",
+       2390:  "rsmtp",
+       2391:  "3com-net-mgmt",
+       2392:  "tacticalauth",
+       2393:  "ms-olap1",
+       2394:  "ms-olap2",
+       2395:  "lan900-remote",
+       2396:  "wusage",
+       2397:  "ncl",
+       2398:  "orbiter",
+       2399:  "fmpro-fdal",
+       2400:  "opequus-server",
+       2401:  "cvspserver",
+       2402:  "taskmaster2000",
+       2403:  "taskmaster2000",
+       2404:  "iec-104",
+       2405:  "trc-netpoll",
+       2406:  "jediserver",
+       2407:  "orion",
+       2409:  "sns-protocol",
+       2410:  "vrts-registry",
+       2411:  "netwave-ap-mgmt",
+       2412:  "cdn",
+       2413:  "orion-rmi-reg",
+       2414:  "beeyond",
+       2415:  "codima-rtp",
+       2416:  "rmtserver",
+       2417:  "composit-server",
+       2418:  "cas",
+       2419:  "attachmate-s2s",
+       2420:  "dslremote-mgmt",
+       2421:  "g-talk",
+       2422:  "crmsbits",
+       2423:  "rnrp",
+       2424:  "kofax-svr",
+       2425:  "fjitsuappmgr",
+       2426:  "vcmp",
+       2427:  "mgcp-gateway",
+       2428:  "ott",
+       2429:  "ft-role",
+       2430:  "venus",
+       2431:  "venus-se",
+       2432:  "codasrv",
+       2433:  "codasrv-se",
+       2434:  "pxc-epmap",
+       2435:  "optilogic",
+       2436:  "topx",
+       2437:  "unicontrol",
+       2438:  "msp",
+       2439:  "sybasedbsynch",
+       2440:  "spearway",
+       2441:  "pvsw-inet",
+       2442:  "netangel",
+       2443:  "powerclientcsf",
+       2444:  "btpp2sectrans",
+       2445:  "dtn1",
+       2446:  "bues-service",
+       2447:  "ovwdb",
+       2448:  "hpppssvr",
+       2449:  "ratl",
+       2450:  "netadmin",
+       2451:  "netchat",
+       2452:  "snifferclient",
+       2453:  "madge-ltd",
+       2454:  "indx-dds",
+       2455:  "wago-io-system",
+       2456:  "altav-remmgt",
+       2457:  "rapido-ip",
+       2458:  "griffin",
+       2459:  "community",
+       2460:  "ms-theater",
+       2461:  "qadmifoper",
+       2462:  "qadmifevent",
+       2463:  "lsi-raid-mgmt",
+       2464:  "direcpc-si",
+       2465:  "lbm",
+       2466:  "lbf",
+       2467:  "high-criteria",
+       2468:  "qip-msgd",
+       2469:  "mti-tcs-comm",
+       2470:  "taskman-port",
+       2471:  "seaodbc",
+       2472:  "c3",
+       2473:  "aker-cdp",
+       2474:  "vitalanalysis",
+       2475:  "ace-server",
+       2476:  "ace-svr-prop",
+       2477:  "ssm-cvs",
+       2478:  "ssm-cssps",
+       2479:  "ssm-els",
+       2480:  "powerexchange",
+       2481:  "giop",
+       2482:  "giop-ssl",
+       2483:  "ttc",
+       2484:  "ttc-ssl",
+       2485:  "netobjects1",
+       2486:  "netobjects2",
+       2487:  "pns",
+       2488:  "moy-corp",
+       2489:  "tsilb",
+       2490:  "qip-qdhcp",
+       2491:  "conclave-cpp",
+       2492:  "groove",
+       2493:  "talarian-mqs",
+       2494:  "bmc-ar",
+       2495:  "fast-rem-serv",
+       2496:  "dirgis",
+       2497:  "quaddb",
+       2498:  "odn-castraq",
+       2499:  "unicontrol",
+       2500:  "rtsserv",
+       2501:  "rtsclient",
+       2502:  "kentrox-prot",
+       2503:  "nms-dpnss",
+       2504:  "wlbs",
+       2505:  "ppcontrol",
+       2506:  "jbroker",
+       2507:  "spock",
+       2508:  "jdatastore",
+       2509:  "fjmpss",
+       2510:  "fjappmgrbulk",
+       2511:  "metastorm",
+       2512:  "citrixima",
+       2513:  "citrixadmin",
+       2514:  "facsys-ntp",
+       2515:  "facsys-router",
+       2516:  "maincontrol",
+       2517:  "call-sig-trans",
+       2518:  "willy",
+       2519:  "globmsgsvc",
+       2520:  "pvsw",
+       2521:  "adaptecmgr",
+       2522:  "windb",
+       2523:  "qke-llc-v3",
+       2524:  "optiwave-lm",
+       2525:  "ms-v-worlds",
+       2526:  "ema-sent-lm",
+       2527:  "iqserver",
+       2528:  "ncr-ccl",
+       2529:  "utsftp",
+       2530:  "vrcommerce",
+       2531:  "ito-e-gui",
+       2532:  "ovtopmd",
+       2533:  "snifferserver",
+       2534:  "combox-web-acc",
+       2535:  "madcap",
+       2536:  "btpp2audctr1",
+       2537:  "upgrade",
+       2538:  "vnwk-prapi",
+       2539:  "vsiadmin",
+       2540:  "lonworks",
+       2541:  "lonworks2",
+       2542:  "udrawgraph",
+       2543:  "reftek",
+       2544:  "novell-zen",
+       2545:  "sis-emt",
+       2546:  "vytalvaultbrtp",
+       2547:  "vytalvaultvsmp",
+       2548:  "vytalvaultpipe",
+       2549:  "ipass",
+       2550:  "ads",
+       2551:  "isg-uda-server",
+       2552:  "call-logging",
+       2553:  "efidiningport",
+       2554:  "vcnet-link-v10",
+       2555:  "compaq-wcp",
+       2556:  "nicetec-nmsvc",
+       2557:  "nicetec-mgmt",
+       2558:  "pclemultimedia",
+       2559:  "lstp",
+       2560:  "labrat",
+       2561:  "mosaixcc",
+       2562:  "delibo",
+       2563:  "cti-redwood",
+       2564:  "hp-3000-telnet",
+       2565:  "coord-svr",
+       2566:  "pcs-pcw",
+       2567:  "clp",
+       2568:  "spamtrap",
+       2569:  "sonuscallsig",
+       2570:  "hs-port",
+       2571:  "cecsvc",
+       2572:  "ibp",
+       2573:  "trustestablish",
+       2574:  "blockade-bpsp",
+       2575:  "hl7",
+       2576:  "tclprodebugger",
+       2577:  "scipticslsrvr",
+       2578:  "rvs-isdn-dcp",
+       2579:  "mpfoncl",
+       2580:  "tributary",
+       2581:  "argis-te",
+       2582:  "argis-ds",
+       2583:  "mon",
+       2584:  "cyaserv",
+       2585:  "netx-server",
+       2586:  "netx-agent",
+       2587:  "masc",
+       2588:  "privilege",
+       2589:  "quartus-tcl",
+       2590:  "idotdist",
+       2591:  "maytagshuffle",
+       2592:  "netrek",
+       2593:  "mns-mail",
+       2594:  "dts",
+       2595:  "worldfusion1",
+       2596:  "worldfusion2",
+       2597:  "homesteadglory",
+       2598:  "citriximaclient",
+       2599:  "snapd",
+       2600:  "hpstgmgr",
+       2601:  "discp-client",
+       2602:  "discp-server",
+       2603:  "servicemeter",
+       2604:  "nsc-ccs",
+       2605:  "nsc-posa",
+       2606:  "netmon",
+       2607:  "connection",
+       2608:  "wag-service",
+       2609:  "system-monitor",
+       2610:  "versa-tek",
+       2611:  "lionhead",
+       2612:  "qpasa-agent",
+       2613:  "smntubootstrap",
+       2614:  "neveroffline",
+       2615:  "firepower",
+       2616:  "appswitch-emp",
+       2617:  "cmadmin",
+       2618:  "priority-e-com",
+       2619:  "bruce",
+       2620:  "lpsrecommender",
+       2621:  "miles-apart",
+       2622:  "metricadbc",
+       2623:  "lmdp",
+       2624:  "aria",
+       2625:  "blwnkl-port",
+       2626:  "gbjd816",
+       2627:  "moshebeeri",
+       2628:  "dict",
+       2629:  "sitaraserver",
+       2630:  "sitaramgmt",
+       2631:  "sitaradir",
+       2632:  "irdg-post",
+       2633:  "interintelli",
+       2634:  "pk-electronics",
+       2635:  "backburner",
+       2636:  "solve",
+       2637:  "imdocsvc",
+       2638:  "sybaseanywhere",
+       2639:  "aminet",
+       2640:  "ami-control",
+       2641:  "hdl-srv",
+       2642:  "tragic",
+       2643:  "gte-samp",
+       2644:  "travsoft-ipx-t",
+       2645:  "novell-ipx-cmd",
+       2646:  "and-lm",
+       2647:  "syncserver",
+       2648:  "upsnotifyprot",
+       2649:  "vpsipport",
+       2650:  "eristwoguns",
+       2651:  "ebinsite",
+       2652:  "interpathpanel",
+       2653:  "sonus",
+       2654:  "corel-vncadmin",
+       2655:  "unglue",
+       2656:  "kana",
+       2657:  "sns-dispatcher",
+       2658:  "sns-admin",
+       2659:  "sns-query",
+       2660:  "gcmonitor",
+       2661:  "olhost",
+       2662:  "bintec-capi",
+       2663:  "bintec-tapi",
+       2664:  "patrol-mq-gm",
+       2665:  "patrol-mq-nm",
+       2666:  "extensis",
+       2667:  "alarm-clock-s",
+       2668:  "alarm-clock-c",
+       2669:  "toad",
+       2670:  "tve-announce",
+       2671:  "newlixreg",
+       2672:  "nhserver",
+       2673:  "firstcall42",
+       2674:  "ewnn",
+       2675:  "ttc-etap",
+       2676:  "simslink",
+       2677:  "gadgetgate1way",
+       2678:  "gadgetgate2way",
+       2679:  "syncserverssl",
+       2680:  "pxc-sapxom",
+       2681:  "mpnjsomb",
+       2683:  "ncdloadbalance",
+       2684:  "mpnjsosv",
+       2685:  "mpnjsocl",
+       2686:  "mpnjsomg",
+       2687:  "pq-lic-mgmt",
+       2688:  "md-cg-http",
+       2689:  "fastlynx",
+       2690:  "hp-nnm-data",
+       2691:  "itinternet",
+       2692:  "admins-lms",
+       2694:  "pwrsevent",
+       2695:  "vspread",
+       2696:  "unifyadmin",
+       2697:  "oce-snmp-trap",
+       2698:  "mck-ivpip",
+       2699:  "csoft-plusclnt",
+       2700:  "tqdata",
+       2701:  "sms-rcinfo",
+       2702:  "sms-xfer",
+       2703:  "sms-chat",
+       2704:  "sms-remctrl",
+       2705:  "sds-admin",
+       2706:  "ncdmirroring",
+       2707:  "emcsymapiport",
+       2708:  "banyan-net",
+       2709:  "supermon",
+       2710:  "sso-service",
+       2711:  "sso-control",
+       2712:  "aocp",
+       2713:  "raventbs",
+       2714:  "raventdm",
+       2715:  "hpstgmgr2",
+       2716:  "inova-ip-disco",
+       2717:  "pn-requester",
+       2718:  "pn-requester2",
+       2719:  "scan-change",
+       2720:  "wkars",
+       2721:  "smart-diagnose",
+       2722:  "proactivesrvr",
+       2723:  "watchdog-nt",
+       2724:  "qotps",
+       2725:  "msolap-ptp2",
+       2726:  "tams",
+       2727:  "mgcp-callagent",
+       2728:  "sqdr",
+       2729:  "tcim-control",
+       2730:  "nec-raidplus",
+       2731:  "fyre-messanger",
+       2732:  "g5m",
+       2733:  "signet-ctf",
+       2734:  "ccs-software",
+       2735:  "netiq-mc",
+       2736:  "radwiz-nms-srv",
+       2737:  "srp-feedback",
+       2738:  "ndl-tcp-ois-gw",
+       2739:  "tn-timing",
+       2740:  "alarm",
+       2741:  "tsb",
+       2742:  "tsb2",
+       2743:  "murx",
+       2744:  "honyaku",
+       2745:  "urbisnet",
+       2746:  "cpudpencap",
+       2747:  "fjippol-swrly",
+       2748:  "fjippol-polsvr",
+       2749:  "fjippol-cnsl",
+       2750:  "fjippol-port1",
+       2751:  "fjippol-port2",
+       2752:  "rsisysaccess",
+       2753:  "de-spot",
+       2754:  "apollo-cc",
+       2755:  "expresspay",
+       2756:  "simplement-tie",
+       2757:  "cnrp",
+       2758:  "apollo-status",
+       2759:  "apollo-gms",
+       2760:  "sabams",
+       2761:  "dicom-iscl",
+       2762:  "dicom-tls",
+       2763:  "desktop-dna",
+       2764:  "data-insurance",
+       2765:  "qip-audup",
+       2766:  "compaq-scp",
+       2767:  "uadtc",
+       2768:  "uacs",
+       2769:  "exce",
+       2770:  "veronica",
+       2771:  "vergencecm",
+       2772:  "auris",
+       2773:  "rbakcup1",
+       2774:  "rbakcup2",
+       2775:  "smpp",
+       2776:  "ridgeway1",
+       2777:  "ridgeway2",
+       2778:  "gwen-sonya",
+       2779:  "lbc-sync",
+       2780:  "lbc-control",
+       2781:  "whosells",
+       2782:  "everydayrc",
+       2783:  "aises",
+       2784:  "www-dev",
+       2785:  "aic-np",
+       2786:  "aic-oncrpc",
+       2787:  "piccolo",
+       2788:  "fryeserv",
+       2789:  "media-agent",
+       2790:  "plgproxy",
+       2791:  "mtport-regist",
+       2792:  "f5-globalsite",
+       2793:  "initlsmsad",
+       2795:  "livestats",
+       2796:  "ac-tech",
+       2797:  "esp-encap",
+       2798:  "tmesis-upshot",
+       2799:  "icon-discover",
+       2800:  "acc-raid",
+       2801:  "igcp",
+       2802:  "veritas-udp1",
+       2803:  "btprjctrl",
+       2804:  "dvr-esm",
+       2805:  "wta-wsp-s",
+       2806:  "cspuni",
+       2807:  "cspmulti",
+       2808:  "j-lan-p",
+       2809:  "corbaloc",
+       2810:  "netsteward",
+       2811:  "gsiftp",
+       2812:  "atmtcp",
+       2813:  "llm-pass",
+       2814:  "llm-csv",
+       2815:  "lbc-measure",
+       2816:  "lbc-watchdog",
+       2817:  "nmsigport",
+       2818:  "rmlnk",
+       2819:  "fc-faultnotify",
+       2820:  "univision",
+       2821:  "vrts-at-port",
+       2822:  "ka0wuc",
+       2823:  "cqg-netlan",
+       2824:  "cqg-netlan-1",
+       2826:  "slc-systemlog",
+       2827:  "slc-ctrlrloops",
+       2828:  "itm-lm",
+       2829:  "silkp1",
+       2830:  "silkp2",
+       2831:  "silkp3",
+       2832:  "silkp4",
+       2833:  "glishd",
+       2834:  "evtp",
+       2835:  "evtp-data",
+       2836:  "catalyst",
+       2837:  "repliweb",
+       2838:  "starbot",
+       2839:  "nmsigport",
+       2840:  "l3-exprt",
+       2841:  "l3-ranger",
+       2842:  "l3-hawk",
+       2843:  "pdnet",
+       2844:  "bpcp-poll",
+       2845:  "bpcp-trap",
+       2846:  "aimpp-hello",
+       2847:  "aimpp-port-req",
+       2848:  "amt-blc-port",
+       2849:  "fxp",
+       2850:  "metaconsole",
+       2851:  "webemshttp",
+       2852:  "bears-01",
+       2853:  "ispipes",
+       2854:  "infomover",
+       2856:  "cesdinv",
+       2857:  "simctlp",
+       2858:  "ecnp",
+       2859:  "activememory",
+       2860:  "dialpad-voice1",
+       2861:  "dialpad-voice2",
+       2862:  "ttg-protocol",
+       2863:  "sonardata",
+       2864:  "astromed-main",
+       2865:  "pit-vpn",
+       2866:  "iwlistener",
+       2867:  "esps-portal",
+       2868:  "npep-messaging",
+       2869:  "icslap",
+       2870:  "daishi",
+       2871:  "msi-selectplay",
+       2872:  "radix",
+       2874:  "dxmessagebase1",
+       2875:  "dxmessagebase2",
+       2876:  "sps-tunnel",
+       2877:  "bluelance",
+       2878:  "aap",
+       2879:  "ucentric-ds",
+       2880:  "synapse",
+       2881:  "ndsp",
+       2882:  "ndtp",
+       2883:  "ndnp",
+       2884:  "flashmsg",
+       2885:  "topflow",
+       2886:  "responselogic",
+       2887:  "aironetddp",
+       2888:  "spcsdlobby",
+       2889:  "rsom",
+       2890:  "cspclmulti",
+       2891:  "cinegrfx-elmd",
+       2892:  "snifferdata",
+       2893:  "vseconnector",
+       2894:  "abacus-remote",
+       2895:  "natuslink",
+       2896:  "ecovisiong6-1",
+       2897:  "citrix-rtmp",
+       2898:  "appliance-cfg",
+       2899:  "powergemplus",
+       2900:  "quicksuite",
+       2901:  "allstorcns",
+       2902:  "netaspi",
+       2903:  "suitcase",
+       2904:  "m2ua",
+       2906:  "caller9",
+       2907:  "webmethods-b2b",
+       2908:  "mao",
+       2909:  "funk-dialout",
+       2910:  "tdaccess",
+       2911:  "blockade",
+       2912:  "epicon",
+       2913:  "boosterware",
+       2914:  "gamelobby",
+       2915:  "tksocket",
+       2916:  "elvin-server",
+       2917:  "elvin-client",
+       2918:  "kastenchasepad",
+       2919:  "roboer",
+       2920:  "roboeda",
+       2921:  "cesdcdman",
+       2922:  "cesdcdtrn",
+       2923:  "wta-wsp-wtp-s",
+       2924:  "precise-vip",
+       2926:  "mobile-file-dl",
+       2927:  "unimobilectrl",
+       2928:  "redstone-cpss",
+       2929:  "amx-webadmin",
+       2930:  "amx-weblinx",
+       2931:  "circle-x",
+       2932:  "incp",
+       2933:  "4-tieropmgw",
+       2934:  "4-tieropmcli",
+       2935:  "qtp",
+       2936:  "otpatch",
+       2937:  "pnaconsult-lm",
+       2938:  "sm-pas-1",
+       2939:  "sm-pas-2",
+       2940:  "sm-pas-3",
+       2941:  "sm-pas-4",
+       2942:  "sm-pas-5",
+       2943:  "ttnrepository",
+       2944:  "megaco-h248",
+       2945:  "h248-binary",
+       2946:  "fjsvmpor",
+       2947:  "gpsd",
+       2948:  "wap-push",
+       2949:  "wap-pushsecure",
+       2950:  "esip",
+       2951:  "ottp",
+       2952:  "mpfwsas",
+       2953:  "ovalarmsrv",
+       2954:  "ovalarmsrv-cmd",
+       2955:  "csnotify",
+       2956:  "ovrimosdbman",
+       2957:  "jmact5",
+       2958:  "jmact6",
+       2959:  "rmopagt",
+       2960:  "dfoxserver",
+       2961:  "boldsoft-lm",
+       2962:  "iph-policy-cli",
+       2963:  "iph-policy-adm",
+       2964:  "bullant-srap",
+       2965:  "bullant-rap",
+       2966:  "idp-infotrieve",
+       2967:  "ssc-agent",
+       2968:  "enpp",
+       2969:  "essp",
+       2970:  "index-net",
+       2971:  "netclip",
+       2972:  "pmsm-webrctl",
+       2973:  "svnetworks",
+       2974:  "signal",
+       2975:  "fjmpcm",
+       2976:  "cns-srv-port",
+       2977:  "ttc-etap-ns",
+       2978:  "ttc-etap-ds",
+       2979:  "h263-video",
+       2980:  "wimd",
+       2981:  "mylxamport",
+       2982:  "iwb-whiteboard",
+       2983:  "netplan",
+       2984:  "hpidsadmin",
+       2985:  "hpidsagent",
+       2986:  "stonefalls",
+       2987:  "identify",
+       2988:  "hippad",
+       2989:  "zarkov",
+       2990:  "boscap",
+       2991:  "wkstn-mon",
+       2992:  "avenyo",
+       2993:  "veritas-vis1",
+       2994:  "veritas-vis2",
+       2995:  "idrs",
+       2996:  "vsixml",
+       2997:  "rebol",
+       2998:  "realsecure",
+       2999:  "remoteware-un",
+       3000:  "hbci",
+       3002:  "exlm-agent",
+       3003:  "cgms",
+       3004:  "csoftragent",
+       3005:  "geniuslm",
+       3006:  "ii-admin",
+       3007:  "lotusmtap",
+       3008:  "midnight-tech",
+       3009:  "pxc-ntfy",
+       3010:  "ping-pong",
+       3011:  "trusted-web",
+       3012:  "twsdss",
+       3013:  "gilatskysurfer",
+       3014:  "broker-service",
+       3015:  "nati-dstp",
+       3016:  "notify-srvr",
+       3017:  "event-listener",
+       3018:  "srvc-registry",
+       3019:  "resource-mgr",
+       3020:  "cifs",
+       3021:  "agriserver",
+       3022:  "csregagent",
+       3023:  "magicnotes",
+       3024:  "nds-sso",
+       3025:  "arepa-raft",
+       3026:  "agri-gateway",
+       3027:  "LiebDevMgmt-C",
+       3028:  "LiebDevMgmt-DM",
+       3029:  "LiebDevMgmt-A",
+       3030:  "arepa-cas",
+       3031:  "eppc",
+       3032:  "redwood-chat",
+       3033:  "pdb",
+       3034:  "osmosis-aeea",
+       3035:  "fjsv-gssagt",
+       3036:  "hagel-dump",
+       3037:  "hp-san-mgmt",
+       3038:  "santak-ups",
+       3039:  "cogitate",
+       3040:  "tomato-springs",
+       3041:  "di-traceware",
+       3042:  "journee",
+       3043:  "brp",
+       3044:  "epp",
+       3045:  "responsenet",
+       3046:  "di-ase",
+       3047:  "hlserver",
+       3048:  "pctrader",
+       3049:  "nsws",
+       3050:  "gds-db",
+       3051:  "galaxy-server",
+       3052:  "apc-3052",
+       3053:  "dsom-server",
+       3054:  "amt-cnf-prot",
+       3055:  "policyserver",
+       3056:  "cdl-server",
+       3057:  "goahead-fldup",
+       3058:  "videobeans",
+       3059:  "qsoft",
+       3060:  "interserver",
+       3061:  "cautcpd",
+       3062:  "ncacn-ip-tcp",
+       3063:  "ncadg-ip-udp",
+       3064:  "rprt",
+       3065:  "slinterbase",
+       3066:  "netattachsdmp",
+       3067:  "fjhpjp",
+       3068:  "ls3bcast",
+       3069:  "ls3",
+       3070:  "mgxswitch",
+       3072:  "csd-monitor",
+       3073:  "vcrp",
+       3074:  "xbox",
+       3075:  "orbix-locator",
+       3076:  "orbix-config",
+       3077:  "orbix-loc-ssl",
+       3078:  "orbix-cfg-ssl",
+       3079:  "lv-frontpanel",
+       3080:  "stm-pproc",
+       3081:  "tl1-lv",
+       3082:  "tl1-raw",
+       3083:  "tl1-telnet",
+       3084:  "itm-mccs",
+       3085:  "pcihreq",
+       3086:  "jdl-dbkitchen",
+       3087:  "asoki-sma",
+       3088:  "xdtp",
+       3089:  "ptk-alink",
+       3090:  "stss",
+       3091:  "1ci-smcs",
+       3093:  "rapidmq-center",
+       3094:  "rapidmq-reg",
+       3095:  "panasas",
+       3096:  "ndl-aps",
+       3098:  "umm-port",
+       3099:  "chmd",
+       3100:  "opcon-xps",
+       3101:  "hp-pxpib",
+       3102:  "slslavemon",
+       3103:  "autocuesmi",
+       3104:  "autocuetime",
+       3105:  "cardbox",
+       3106:  "cardbox-http",
+       3107:  "business",
+       3108:  "geolocate",
+       3109:  "personnel",
+       3110:  "sim-control",
+       3111:  "wsynch",
+       3112:  "ksysguard",
+       3113:  "cs-auth-svr",
+       3114:  "ccmad",
+       3115:  "mctet-master",
+       3116:  "mctet-gateway",
+       3117:  "mctet-jserv",
+       3118:  "pkagent",
+       3119:  "d2000kernel",
+       3120:  "d2000webserver",
+       3122:  "vtr-emulator",
+       3123:  "edix",
+       3124:  "beacon-port",
+       3125:  "a13-an",
+       3127:  "ctx-bridge",
+       3128:  "ndl-aas",
+       3129:  "netport-id",
+       3130:  "icpv2",
+       3131:  "netbookmark",
+       3132:  "ms-rule-engine",
+       3133:  "prism-deploy",
+       3134:  "ecp",
+       3135:  "peerbook-port",
+       3136:  "grubd",
+       3137:  "rtnt-1",
+       3138:  "rtnt-2",
+       3139:  "incognitorv",
+       3140:  "ariliamulti",
+       3141:  "vmodem",
+       3142:  "rdc-wh-eos",
+       3143:  "seaview",
+       3144:  "tarantella",
+       3145:  "csi-lfap",
+       3146:  "bears-02",
+       3147:  "rfio",
+       3148:  "nm-game-admin",
+       3149:  "nm-game-server",
+       3150:  "nm-asses-admin",
+       3151:  "nm-assessor",
+       3152:  "feitianrockey",
+       3153:  "s8-client-port",
+       3154:  "ccmrmi",
+       3155:  "jpegmpeg",
+       3156:  "indura",
+       3157:  "e3consultants",
+       3158:  "stvp",
+       3159:  "navegaweb-port",
+       3160:  "tip-app-server",
+       3161:  "doc1lm",
+       3162:  "sflm",
+       3163:  "res-sap",
+       3164:  "imprs",
+       3165:  "newgenpay",
+       3166:  "sossecollector",
+       3167:  "nowcontact",
+       3168:  "poweronnud",
+       3169:  "serverview-as",
+       3170:  "serverview-asn",
+       3171:  "serverview-gf",
+       3172:  "serverview-rm",
+       3173:  "serverview-icc",
+       3174:  "armi-server",
+       3175:  "t1-e1-over-ip",
+       3176:  "ars-master",
+       3177:  "phonex-port",
+       3178:  "radclientport",
+       3179:  "h2gf-w-2m",
+       3180:  "mc-brk-srv",
+       3181:  "bmcpatrolagent",
+       3182:  "bmcpatrolrnvu",
+       3183:  "cops-tls",
+       3184:  "apogeex-port",
+       3185:  "smpppd",
+       3186:  "iiw-port",
+       3187:  "odi-port",
+       3188:  "brcm-comm-port",
+       3189:  "pcle-infex",
+       3190:  "csvr-proxy",
+       3191:  "csvr-sslproxy",
+       3192:  "firemonrcc",
+       3193:  "spandataport",
+       3194:  "magbind",
+       3195:  "ncu-1",
+       3196:  "ncu-2",
+       3197:  "embrace-dp-s",
+       3198:  "embrace-dp-c",
+       3199:  "dmod-workspace",
+       3200:  "tick-port",
+       3201:  "cpq-tasksmart",
+       3202:  "intraintra",
+       3203:  "netwatcher-mon",
+       3204:  "netwatcher-db",
+       3205:  "isns",
+       3206:  "ironmail",
+       3207:  "vx-auth-port",
+       3208:  "pfu-prcallback",
+       3209:  "netwkpathengine",
+       3210:  "flamenco-proxy",
+       3211:  "avsecuremgmt",
+       3212:  "surveyinst",
+       3213:  "neon24x7",
+       3214:  "jmq-daemon-1",
+       3215:  "jmq-daemon-2",
+       3216:  "ferrari-foam",
+       3217:  "unite",
+       3218:  "smartpackets",
+       3219:  "wms-messenger",
+       3220:  "xnm-ssl",
+       3221:  "xnm-clear-text",
+       3222:  "glbp",
+       3223:  "digivote",
+       3224:  "aes-discovery",
+       3225:  "fcip-port",
+       3226:  "isi-irp",
+       3227:  "dwnmshttp",
+       3228:  "dwmsgserver",
+       3229:  "global-cd-port",
+       3230:  "sftdst-port",
+       3231:  "vidigo",
+       3232:  "mdtp",
+       3233:  "whisker",
+       3234:  "alchemy",
+       3235:  "mdap-port",
+       3236:  "apparenet-ts",
+       3237:  "apparenet-tps",
+       3238:  "apparenet-as",
+       3239:  "apparenet-ui",
+       3240:  "triomotion",
+       3241:  "sysorb",
+       3242:  "sdp-id-port",
+       3243:  "timelot",
+       3244:  "onesaf",
+       3245:  "vieo-fe",
+       3246:  "dvt-system",
+       3247:  "dvt-data",
+       3248:  "procos-lm",
+       3249:  "ssp",
+       3250:  "hicp",
+       3251:  "sysscanner",
+       3252:  "dhe",
+       3253:  "pda-data",
+       3254:  "pda-sys",
+       3255:  "semaphore",
+       3256:  "cpqrpm-agent",
+       3257:  "cpqrpm-server",
+       3258:  "ivecon-port",
+       3259:  "epncdp2",
+       3260:  "iscsi-target",
+       3261:  "winshadow",
+       3262:  "necp",
+       3263:  "ecolor-imager",
+       3264:  "ccmail",
+       3265:  "altav-tunnel",
+       3266:  "ns-cfg-server",
+       3267:  "ibm-dial-out",
+       3268:  "msft-gc",
+       3269:  "msft-gc-ssl",
+       3270:  "verismart",
+       3271:  "csoft-prev",
+       3272:  "user-manager",
+       3273:  "sxmp",
+       3274:  "ordinox-server",
+       3275:  "samd",
+       3276:  "maxim-asics",
+       3277:  "awg-proxy",
+       3278:  "lkcmserver",
+       3279:  "admind",
+       3280:  "vs-server",
+       3281:  "sysopt",
+       3282:  "datusorb",
+       3283:  "Apple Remote Desktop (Net Assistant)",
+       3284:  "4talk",
+       3285:  "plato",
+       3286:  "e-net",
+       3287:  "directvdata",
+       3288:  "cops",
+       3289:  "enpc",
+       3290:  "caps-lm",
+       3291:  "sah-lm",
+       3292:  "cart-o-rama",
+       3293:  "fg-fps",
+       3294:  "fg-gip",
+       3295:  "dyniplookup",
+       3296:  "rib-slm",
+       3297:  "cytel-lm",
+       3298:  "deskview",
+       3299:  "pdrncs",
+       3302:  "mcs-fastmail",
+       3303:  "opsession-clnt",
+       3304:  "opsession-srvr",
+       3305:  "odette-ftp",
+       3306:  "mysql",
+       3307:  "opsession-prxy",
+       3308:  "tns-server",
+       3309:  "tns-adv",
+       3310:  "dyna-access",
+       3311:  "mcns-tel-ret",
+       3312:  "appman-server",
+       3313:  "uorb",
+       3314:  "uohost",
+       3315:  "cdid",
+       3316:  "aicc-cmi",
+       3317:  "vsaiport",
+       3318:  "ssrip",
+       3319:  "sdt-lmd",
+       3320:  "officelink2000",
+       3321:  "vnsstr",
+       3326:  "sftu",
+       3327:  "bbars",
+       3328:  "egptlm",
+       3329:  "hp-device-disc",
+       3330:  "mcs-calypsoicf",
+       3331:  "mcs-messaging",
+       3332:  "mcs-mailsvr",
+       3333:  "dec-notes",
+       3334:  "directv-web",
+       3335:  "directv-soft",
+       3336:  "directv-tick",
+       3337:  "directv-catlg",
+       3338:  "anet-b",
+       3339:  "anet-l",
+       3340:  "anet-m",
+       3341:  "anet-h",
+       3342:  "webtie",
+       3343:  "ms-cluster-net",
+       3344:  "bnt-manager",
+       3345:  "influence",
+       3346:  "trnsprntproxy",
+       3347:  "phoenix-rpc",
+       3348:  "pangolin-laser",
+       3349:  "chevinservices",
+       3350:  "findviatv",
+       3351:  "btrieve",
+       3352:  "ssql",
+       3353:  "fatpipe",
+       3354:  "suitjd",
+       3355:  "ordinox-dbase",
+       3356:  "upnotifyps",
+       3357:  "adtech-test",
+       3358:  "mpsysrmsvr",
+       3359:  "wg-netforce",
+       3360:  "kv-server",
+       3361:  "kv-agent",
+       3362:  "dj-ilm",
+       3363:  "nati-vi-server",
+       3364:  "creativeserver",
+       3365:  "contentserver",
+       3366:  "creativepartnr",
+       3372:  "tip2",
+       3373:  "lavenir-lm",
+       3374:  "cluster-disc",
+       3375:  "vsnm-agent",
+       3376:  "cdbroker",
+       3377:  "cogsys-lm",
+       3378:  "wsicopy",
+       3379:  "socorfs",
+       3380:  "sns-channels",
+       3381:  "geneous",
+       3382:  "fujitsu-neat",
+       3383:  "esp-lm",
+       3384:  "hp-clic",
+       3385:  "qnxnetman",
+       3386:  "gprs-sig",
+       3387:  "backroomnet",
+       3388:  "cbserver",
+       3389:  "ms-wbt-server",
+       3390:  "dsc",
+       3391:  "savant",
+       3392:  "efi-lm",
+       3393:  "d2k-tapestry1",
+       3394:  "d2k-tapestry2",
+       3395:  "dyna-lm",
+       3396:  "printer-agent",
+       3397:  "cloanto-lm",
+       3398:  "mercantile",
+       3399:  "csms",
+       3400:  "csms2",
+       3401:  "filecast",
+       3402:  "fxaengine-net",
+       3405:  "nokia-ann-ch1",
+       3406:  "nokia-ann-ch2",
+       3407:  "ldap-admin",
+       3408:  "BESApi",
+       3409:  "networklens",
+       3410:  "networklenss",
+       3411:  "biolink-auth",
+       3412:  "xmlblaster",
+       3413:  "svnet",
+       3414:  "wip-port",
+       3415:  "bcinameservice",
+       3416:  "commandport",
+       3417:  "csvr",
+       3418:  "rnmap",
+       3419:  "softaudit",
+       3420:  "ifcp-port",
+       3421:  "bmap",
+       3422:  "rusb-sys-port",
+       3423:  "xtrm",
+       3424:  "xtrms",
+       3425:  "agps-port",
+       3426:  "arkivio",
+       3427:  "websphere-snmp",
+       3428:  "twcss",
+       3429:  "gcsp",
+       3430:  "ssdispatch",
+       3431:  "ndl-als",
+       3432:  "osdcp",
+       3433:  "opnet-smp",
+       3434:  "opencm",
+       3435:  "pacom",
+       3436:  "gc-config",
+       3437:  "autocueds",
+       3438:  "spiral-admin",
+       3439:  "hri-port",
+       3440:  "ans-console",
+       3441:  "connect-client",
+       3442:  "connect-server",
+       3443:  "ov-nnm-websrv",
+       3444:  "denali-server",
+       3445:  "monp",
+       3446:  "3comfaxrpc",
+       3447:  "directnet",
+       3448:  "dnc-port",
+       3449:  "hotu-chat",
+       3450:  "castorproxy",
+       3451:  "asam",
+       3452:  "sabp-signal",
+       3453:  "pscupd",
+       3454:  "mira",
+       3455:  "prsvp",
+       3456:  "vat",
+       3457:  "vat-control",
+       3458:  "d3winosfi",
+       3459:  "integral",
+       3460:  "edm-manager",
+       3461:  "edm-stager",
+       3462:  "edm-std-notify",
+       3463:  "edm-adm-notify",
+       3464:  "edm-mgr-sync",
+       3465:  "edm-mgr-cntrl",
+       3466:  "workflow",
+       3467:  "rcst",
+       3468:  "ttcmremotectrl",
+       3469:  "pluribus",
+       3470:  "jt400",
+       3471:  "jt400-ssl",
+       3472:  "jaugsremotec-1",
+       3473:  "jaugsremotec-2",
+       3474:  "ttntspauto",
+       3475:  "genisar-port",
+       3476:  "nppmp",
+       3477:  "ecomm",
+       3478:  "stun",
+       3479:  "twrpc",
+       3480:  "plethora",
+       3481:  "cleanerliverc",
+       3482:  "vulture",
+       3483:  "slim-devices",
+       3484:  "gbs-stp",
+       3485:  "celatalk",
+       3486:  "ifsf-hb-port",
+       3487:  "ltcudp",
+       3488:  "fs-rh-srv",
+       3489:  "dtp-dia",
+       3490:  "colubris",
+       3491:  "swr-port",
+       3492:  "tvdumtray-port",
+       3493:  "nut",
+       3494:  "ibm3494",
+       3495:  "seclayer-tcp",
+       3496:  "seclayer-tls",
+       3497:  "ipether232port",
+       3498:  "dashpas-port",
+       3499:  "sccip-media",
+       3500:  "rtmp-port",
+       3501:  "isoft-p2p",
+       3502:  "avinstalldisc",
+       3503:  "lsp-ping",
+       3504:  "ironstorm",
+       3505:  "ccmcomm",
+       3506:  "apc-3506",
+       3507:  "nesh-broker",
+       3508:  "interactionweb",
+       3509:  "vt-ssl",
+       3510:  "xss-port",
+       3511:  "webmail-2",
+       3512:  "aztec",
+       3513:  "arcpd",
+       3514:  "must-p2p",
+       3515:  "must-backplane",
+       3516:  "smartcard-port",
+       3517:  "802-11-iapp",
+       3518:  "artifact-msg",
+       3519:  "galileo",
+       3520:  "galileolog",
+       3521:  "mc3ss",
+       3522:  "nssocketport",
+       3523:  "odeumservlink",
+       3524:  "ecmport",
+       3525:  "eisport",
+       3526:  "starquiz-port",
+       3527:  "beserver-msg-q",
+       3528:  "jboss-iiop",
+       3529:  "jboss-iiop-ssl",
+       3530:  "gf",
+       3531:  "joltid",
+       3532:  "raven-rmp",
+       3533:  "raven-rdp",
+       3534:  "urld-port",
+       3535:  "ms-la",
+       3536:  "snac",
+       3537:  "ni-visa-remote",
+       3538:  "ibm-diradm",
+       3539:  "ibm-diradm-ssl",
+       3540:  "pnrp-port",
+       3541:  "voispeed-port",
+       3542:  "hacl-monitor",
+       3543:  "qftest-lookup",
+       3544:  "teredo",
+       3545:  "camac",
+       3547:  "symantec-sim",
+       3548:  "interworld",
+       3549:  "tellumat-nms",
+       3550:  "ssmpp",
+       3551:  "apcupsd",
+       3552:  "taserver",
+       3553:  "rbr-discovery",
+       3554:  "questnotify",
+       3555:  "razor",
+       3556:  "sky-transport",
+       3557:  "personalos-001",
+       3558:  "mcp-port",
+       3559:  "cctv-port",
+       3560:  "iniserve-port",
+       3561:  "bmc-onekey",
+       3562:  "sdbproxy",
+       3563:  "watcomdebug",
+       3564:  "esimport",
+       3567:  "dof-eps",
+       3568:  "dof-tunnel-sec",
+       3569:  "mbg-ctrl",
+       3570:  "mccwebsvr-port",
+       3571:  "megardsvr-port",
+       3572:  "megaregsvrport",
+       3573:  "tag-ups-1",
+       3574:  "dmaf-caster",
+       3575:  "ccm-port",
+       3576:  "cmc-port",
+       3577:  "config-port",
+       3578:  "data-port",
+       3579:  "ttat3lb",
+       3580:  "nati-svrloc",
+       3581:  "kfxaclicensing",
+       3582:  "press",
+       3583:  "canex-watch",
+       3584:  "u-dbap",
+       3585:  "emprise-lls",
+       3586:  "emprise-lsc",
+       3587:  "p2pgroup",
+       3588:  "sentinel",
+       3589:  "isomair",
+       3590:  "wv-csp-sms",
+       3591:  "gtrack-server",
+       3592:  "gtrack-ne",
+       3593:  "bpmd",
+       3594:  "mediaspace",
+       3595:  "shareapp",
+       3596:  "iw-mmogame",
+       3597:  "a14",
+       3598:  "a15",
+       3599:  "quasar-server",
+       3600:  "trap-daemon",
+       3601:  "visinet-gui",
+       3602:  "infiniswitchcl",
+       3603:  "int-rcv-cntrl",
+       3604:  "bmc-jmx-port",
+       3605:  "comcam-io",
+       3606:  "splitlock",
+       3607:  "precise-i3",
+       3608:  "trendchip-dcp",
+       3609:  "cpdi-pidas-cm",
+       3610:  "echonet",
+       3611:  "six-degrees",
+       3612:  "hp-dataprotect",
+       3613:  "alaris-disc",
+       3614:  "sigma-port",
+       3615:  "start-network",
+       3616:  "cd3o-protocol",
+       3617:  "sharp-server",
+       3618:  "aairnet-1",
+       3619:  "aairnet-2",
+       3620:  "ep-pcp",
+       3621:  "ep-nsp",
+       3622:  "ff-lr-port",
+       3623:  "haipe-discover",
+       3624:  "dist-upgrade",
+       3625:  "volley",
+       3626:  "bvcdaemon-port",
+       3627:  "jamserverport",
+       3628:  "ept-machine",
+       3629:  "escvpnet",
+       3630:  "cs-remote-db",
+       3631:  "cs-services",
+       3632:  "distcc",
+       3633:  "wacp",
+       3634:  "hlibmgr",
+       3635:  "sdo",
+       3636:  "servistaitsm",
+       3637:  "scservp",
+       3638:  "ehp-backup",
+       3639:  "xap-ha",
+       3640:  "netplay-port1",
+       3641:  "netplay-port2",
+       3642:  "juxml-port",
+       3643:  "audiojuggler",
+       3644:  "ssowatch",
+       3645:  "cyc",
+       3646:  "xss-srv-port",
+       3647:  "splitlock-gw",
+       3648:  "fjcp",
+       3649:  "nmmp",
+       3650:  "prismiq-plugin",
+       3651:  "xrpc-registry",
+       3652:  "vxcrnbuport",
+       3653:  "tsp",
+       3654:  "vaprtm",
+       3655:  "abatemgr",
+       3656:  "abatjss",
+       3657:  "immedianet-bcn",
+       3658:  "ps-ams",
+       3659:  "apple-sasl",
+       3660:  "can-nds-ssl",
+       3661:  "can-ferret-ssl",
+       3662:  "pserver",
+       3663:  "dtp",
+       3664:  "ups-engine",
+       3665:  "ent-engine",
+       3666:  "eserver-pap",
+       3667:  "infoexch",
+       3668:  "dell-rm-port",
+       3669:  "casanswmgmt",
+       3670:  "smile",
+       3671:  "efcp",
+       3672:  "lispworks-orb",
+       3673:  "mediavault-gui",
+       3674:  "wininstall-ipc",
+       3675:  "calltrax",
+       3676:  "va-pacbase",
+       3677:  "roverlog",
+       3678:  "ipr-dglt",
+       3679:  "Escale (Newton Dock)",
+       3680:  "npds-tracker",
+       3681:  "bts-x73",
+       3682:  "cas-mapi",
+       3683:  "bmc-ea",
+       3684:  "faxstfx-port",
+       3685:  "dsx-agent",
+       3686:  "tnmpv2",
+       3687:  "simple-push",
+       3688:  "simple-push-s",
+       3689:  "daap",
+       3690:  "svn",
+       3691:  "magaya-network",
+       3692:  "intelsync",
+       3695:  "bmc-data-coll",
+       3696:  "telnetcpcd",
+       3697:  "nw-license",
+       3698:  "sagectlpanel",
+       3699:  "kpn-icw",
+       3700:  "lrs-paging",
+       3701:  "netcelera",
+       3702:  "ws-discovery",
+       3703:  "adobeserver-3",
+       3704:  "adobeserver-4",
+       3705:  "adobeserver-5",
+       3706:  "rt-event",
+       3707:  "rt-event-s",
+       3708:  "sun-as-iiops",
+       3709:  "ca-idms",
+       3710:  "portgate-auth",
+       3711:  "edb-server2",
+       3712:  "sentinel-ent",
+       3713:  "tftps",
+       3714:  "delos-dms",
+       3715:  "anoto-rendezv",
+       3716:  "wv-csp-sms-cir",
+       3717:  "wv-csp-udp-cir",
+       3718:  "opus-services",
+       3719:  "itelserverport",
+       3720:  "ufastro-instr",
+       3721:  "xsync",
+       3722:  "xserveraid",
+       3723:  "sychrond",
+       3724:  "blizwow",
+       3725:  "na-er-tip",
+       3726:  "array-manager",
+       3727:  "e-mdu",
+       3728:  "e-woa",
+       3729:  "fksp-audit",
+       3730:  "client-ctrl",
+       3731:  "smap",
+       3732:  "m-wnn",
+       3733:  "multip-msg",
+       3734:  "synel-data",
+       3735:  "pwdis",
+       3736:  "rs-rmi",
+       3738:  "versatalk",
+       3739:  "launchbird-lm",
+       3740:  "heartbeat",
+       3741:  "wysdma",
+       3742:  "cst-port",
+       3743:  "ipcs-command",
+       3744:  "sasg",
+       3745:  "gw-call-port",
+       3746:  "linktest",
+       3747:  "linktest-s",
+       3748:  "webdata",
+       3749:  "cimtrak",
+       3750:  "cbos-ip-port",
+       3751:  "gprs-cube",
+       3752:  "vipremoteagent",
+       3753:  "nattyserver",
+       3754:  "timestenbroker",
+       3755:  "sas-remote-hlp",
+       3756:  "canon-capt",
+       3757:  "grf-port",
+       3758:  "apw-registry",
+       3759:  "exapt-lmgr",
+       3760:  "adtempusclient",
+       3761:  "gsakmp",
+       3762:  "gbs-smp",
+       3763:  "xo-wave",
+       3764:  "mni-prot-rout",
+       3765:  "rtraceroute",
+       3767:  "listmgr-port",
+       3768:  "rblcheckd",
+       3769:  "haipe-otnk",
+       3770:  "cindycollab",
+       3771:  "paging-port",
+       3772:  "ctp",
+       3773:  "ctdhercules",
+       3774:  "zicom",
+       3775:  "ispmmgr",
+       3776:  "dvcprov-port",
+       3777:  "jibe-eb",
+       3778:  "c-h-it-port",
+       3779:  "cognima",
+       3780:  "nnp",
+       3781:  "abcvoice-port",
+       3782:  "iso-tp0s",
+       3783:  "bim-pem",
+       3784:  "bfd-control",
+       3785:  "bfd-echo",
+       3786:  "upstriggervsw",
+       3787:  "fintrx",
+       3788:  "isrp-port",
+       3789:  "remotedeploy",
+       3790:  "quickbooksrds",
+       3791:  "tvnetworkvideo",
+       3792:  "sitewatch",
+       3793:  "dcsoftware",
+       3794:  "jaus",
+       3795:  "myblast",
+       3796:  "spw-dialer",
+       3797:  "idps",
+       3798:  "minilock",
+       3799:  "radius-dynauth",
+       3800:  "pwgpsi",
+       3801:  "ibm-mgr",
+       3802:  "vhd",
+       3803:  "soniqsync",
+       3804:  "iqnet-port",
+       3805:  "tcpdataserver",
+       3806:  "wsmlb",
+       3807:  "spugna",
+       3808:  "sun-as-iiops-ca",
+       3809:  "apocd",
+       3810:  "wlanauth",
+       3811:  "amp",
+       3812:  "neto-wol-server",
+       3813:  "rap-ip",
+       3814:  "neto-dcs",
+       3815:  "lansurveyorxml",
+       3816:  "sunlps-http",
+       3817:  "tapeware",
+       3818:  "crinis-hb",
+       3819:  "epl-slp",
+       3820:  "scp",
+       3821:  "pmcp",
+       3822:  "acp-discovery",
+       3823:  "acp-conduit",
+       3824:  "acp-policy",
+       3825:  "ffserver",
+       3826:  "warmux",
+       3827:  "netmpi",
+       3828:  "neteh",
+       3829:  "neteh-ext",
+       3830:  "cernsysmgmtagt",
+       3831:  "dvapps",
+       3832:  "xxnetserver",
+       3833:  "aipn-auth",
+       3834:  "spectardata",
+       3835:  "spectardb",
+       3836:  "markem-dcp",
+       3837:  "mkm-discovery",
+       3838:  "sos",
+       3839:  "amx-rms",
+       3840:  "flirtmitmir",
+       3842:  "nhci",
+       3843:  "quest-agent",
+       3844:  "rnm",
+       3845:  "v-one-spp",
+       3846:  "an-pcp",
+       3847:  "msfw-control",
+       3848:  "item",
+       3849:  "spw-dnspreload",
+       3850:  "qtms-bootstrap",
+       3851:  "spectraport",
+       3852:  "sse-app-config",
+       3853:  "sscan",
+       3854:  "stryker-com",
+       3855:  "opentrac",
+       3856:  "informer",
+       3857:  "trap-port",
+       3858:  "trap-port-mom",
+       3859:  "nav-port",
+       3860:  "sasp",
+       3861:  "winshadow-hd",
+       3862:  "giga-pocket",
+       3863:  "asap-udp",
+       3865:  "xpl",
+       3866:  "dzdaemon",
+       3867:  "dzoglserver",
+       3869:  "ovsam-mgmt",
+       3870:  "ovsam-d-agent",
+       3871:  "avocent-adsap",
+       3872:  "oem-agent",
+       3873:  "fagordnc",
+       3874:  "sixxsconfig",
+       3875:  "pnbscada",
+       3876:  "dl-agent",
+       3877:  "xmpcr-interface",
+       3878:  "fotogcad",
+       3879:  "appss-lm",
+       3880:  "igrs",
+       3881:  "idac",
+       3882:  "msdts1",
+       3883:  "vrpn",
+       3884:  "softrack-meter",
+       3885:  "topflow-ssl",
+       3886:  "nei-management",
+       3887:  "ciphire-data",
+       3888:  "ciphire-serv",
+       3889:  "dandv-tester",
+       3890:  "ndsconnect",
+       3891:  "rtc-pm-port",
+       3892:  "pcc-image-port",
+       3893:  "cgi-starapi",
+       3894:  "syam-agent",
+       3895:  "syam-smc",
+       3896:  "sdo-tls",
+       3897:  "sdo-ssh",
+       3898:  "senip",
+       3899:  "itv-control",
+       3900:  "udt-os",
+       3901:  "nimsh",
+       3902:  "nimaux",
+       3903:  "charsetmgr",
+       3904:  "omnilink-port",
+       3905:  "mupdate",
+       3906:  "topovista-data",
+       3907:  "imoguia-port",
+       3908:  "hppronetman",
+       3909:  "surfcontrolcpa",
+       3910:  "prnrequest",
+       3911:  "prnstatus",
+       3912:  "gbmt-stars",
+       3913:  "listcrt-port",
+       3914:  "listcrt-port-2",
+       3915:  "agcat",
+       3916:  "wysdmc",
+       3917:  "aftmux",
+       3918:  "pktcablemmcops",
+       3919:  "hyperip",
+       3920:  "exasoftport1",
+       3921:  "herodotus-net",
+       3922:  "sor-update",
+       3923:  "symb-sb-port",
+       3924:  "mpl-gprs-port",
+       3925:  "zmp",
+       3926:  "winport",
+       3927:  "natdataservice",
+       3928:  "netboot-pxe",
+       3929:  "smauth-port",
+       3930:  "syam-webserver",
+       3931:  "msr-plugin-port",
+       3932:  "dyn-site",
+       3933:  "plbserve-port",
+       3934:  "sunfm-port",
+       3935:  "sdp-portmapper",
+       3936:  "mailprox",
+       3937:  "dvbservdsc",
+       3938:  "dbcontrol-agent",
+       3939:  "aamp",
+       3940:  "xecp-node",
+       3941:  "homeportal-web",
+       3942:  "srdp",
+       3943:  "tig",
+       3944:  "sops",
+       3945:  "emcads",
+       3946:  "backupedge",
+       3947:  "ccp",
+       3948:  "apdap",
+       3949:  "drip",
+       3950:  "namemunge",
+       3951:  "pwgippfax",
+       3952:  "i3-sessionmgr",
+       3953:  "xmlink-connect",
+       3954:  "adrep",
+       3955:  "p2pcommunity",
+       3956:  "gvcp",
+       3957:  "mqe-broker",
+       3958:  "mqe-agent",
+       3959:  "treehopper",
+       3960:  "bess",
+       3961:  "proaxess",
+       3962:  "sbi-agent",
+       3963:  "thrp",
+       3964:  "sasggprs",
+       3965:  "ati-ip-to-ncpe",
+       3966:  "bflckmgr",
+       3967:  "ppsms",
+       3968:  "ianywhere-dbns",
+       3969:  "landmarks",
+       3970:  "lanrevagent",
+       3971:  "lanrevserver",
+       3972:  "iconp",
+       3973:  "progistics",
+       3974:  "citysearch",
+       3975:  "airshot",
+       3976:  "opswagent",
+       3977:  "opswmanager",
+       3978:  "secure-cfg-svr",
+       3979:  "smwan",
+       3980:  "acms",
+       3981:  "starfish",
+       3982:  "eis",
+       3983:  "eisp",
+       3984:  "mapper-nodemgr",
+       3985:  "mapper-mapethd",
+       3986:  "mapper-ws-ethd",
+       3987:  "centerline",
+       3988:  "dcs-config",
+       3989:  "bv-queryengine",
+       3990:  "bv-is",
+       3991:  "bv-smcsrv",
+       3992:  "bv-ds",
+       3993:  "bv-agent",
+       3995:  "iss-mgmt-ssl",
+       3996:  "abcsoftware",
+       3997:  "agentsease-db",
+       3998:  "dnx",
+       3999:  "nvcnet",
+       4000:  "terabase",
+       4001:  "newoak",
+       4002:  "pxc-spvr-ft",
+       4003:  "pxc-splr-ft",
+       4004:  "pxc-roid",
+       4005:  "pxc-pin",
+       4006:  "pxc-spvr",
+       4007:  "pxc-splr",
+       4008:  "netcheque",
+       4009:  "chimera-hwm",
+       4010:  "samsung-unidex",
+       4011:  "altserviceboot",
+       4012:  "pda-gate",
+       4013:  "acl-manager",
+       4014:  "taiclock",
+       4015:  "talarian-mcast1",
+       4016:  "talarian-mcast2",
+       4017:  "talarian-mcast3",
+       4018:  "talarian-mcast4",
+       4019:  "talarian-mcast5",
+       4020:  "trap",
+       4021:  "nexus-portal",
+       4022:  "dnox",
+       4023:  "esnm-zoning",
+       4024:  "tnp1-port",
+       4025:  "partimage",
+       4026:  "as-debug",
+       4027:  "bxp",
+       4028:  "dtserver-port",
+       4029:  "ip-qsig",
+       4030:  "jdmn-port",
+       4031:  "suucp",
+       4032:  "vrts-auth-port",
+       4033:  "sanavigator",
+       4034:  "ubxd",
+       4035:  "wap-push-http",
+       4036:  "wap-push-https",
+       4037:  "ravehd",
+       4038:  "fazzt-ptp",
+       4039:  "fazzt-admin",
+       4040:  "yo-main",
+       4041:  "houston",
+       4042:  "ldxp",
+       4043:  "nirp",
+       4044:  "ltp",
+       4045:  "npp",
+       4046:  "acp-proto",
+       4047:  "ctp-state",
+       4049:  "wafs",
+       4050:  "cisco-wafs",
+       4051:  "cppdp",
+       4052:  "interact",
+       4053:  "ccu-comm-1",
+       4054:  "ccu-comm-2",
+       4055:  "ccu-comm-3",
+       4056:  "lms",
+       4057:  "wfm",
+       4058:  "kingfisher",
+       4059:  "dlms-cosem",
+       4060:  "dsmeter-iatc",
+       4061:  "ice-location",
+       4062:  "ice-slocation",
+       4063:  "ice-router",
+       4064:  "ice-srouter",
+       4065:  "avanti-cdp",
+       4066:  "pmas",
+       4067:  "idp",
+       4068:  "ipfltbcst",
+       4069:  "minger",
+       4070:  "tripe",
+       4071:  "aibkup",
+       4072:  "zieto-sock",
+       4073:  "iRAPP",
+       4074:  "cequint-cityid",
+       4075:  "perimlan",
+       4076:  "seraph",
+       4077:  "ascomalarm",
+       4079:  "santools",
+       4080:  "lorica-in",
+       4081:  "lorica-in-sec",
+       4082:  "lorica-out",
+       4083:  "lorica-out-sec",
+       4084:  "fortisphere-vm",
+       4086:  "ftsync",
+       4089:  "opencore",
+       4090:  "omasgport",
+       4091:  "ewinstaller",
+       4092:  "ewdgs",
+       4093:  "pvxpluscs",
+       4094:  "sysrqd",
+       4095:  "xtgui",
+       4096:  "bre",
+       4097:  "patrolview",
+       4098:  "drmsfsd",
+       4099:  "dpcp",
+       4100:  "igo-incognito",
+       4101:  "brlp-0",
+       4102:  "brlp-1",
+       4103:  "brlp-2",
+       4104:  "brlp-3",
+       4105:  "shofar",
+       4106:  "synchronite",
+       4107:  "j-ac",
+       4108:  "accel",
+       4109:  "izm",
+       4110:  "g2tag",
+       4111:  "xgrid",
+       4112:  "apple-vpns-rp",
+       4113:  "aipn-reg",
+       4114:  "jomamqmonitor",
+       4115:  "cds",
+       4116:  "smartcard-tls",
+       4117:  "hillrserv",
+       4118:  "netscript",
+       4119:  "assuria-slm",
+       4121:  "e-builder",
+       4122:  "fprams",
+       4123:  "z-wave",
+       4124:  "tigv2",
+       4125:  "opsview-envoy",
+       4126:  "ddrepl",
+       4127:  "unikeypro",
+       4128:  "nufw",
+       4129:  "nuauth",
+       4130:  "fronet",
+       4131:  "stars",
+       4132:  "nuts-dem",
+       4133:  "nuts-bootp",
+       4134:  "nifty-hmi",
+       4135:  "cl-db-attach",
+       4136:  "cl-db-request",
+       4137:  "cl-db-remote",
+       4138:  "nettest",
+       4139:  "thrtx",
+       4140:  "cedros-fds",
+       4141:  "oirtgsvc",
+       4142:  "oidocsvc",
+       4143:  "oidsr",
+       4145:  "vvr-control",
+       4146:  "tgcconnect",
+       4147:  "vrxpservman",
+       4148:  "hhb-handheld",
+       4149:  "agslb",
+       4150:  "PowerAlert-nsa",
+       4151:  "menandmice-noh",
+       4152:  "idig-mux",
+       4153:  "mbl-battd",
+       4154:  "atlinks",
+       4155:  "bzr",
+       4156:  "stat-results",
+       4157:  "stat-scanner",
+       4158:  "stat-cc",
+       4159:  "nss",
+       4160:  "jini-discovery",
+       4161:  "omscontact",
+       4162:  "omstopology",
+       4163:  "silverpeakpeer",
+       4164:  "silverpeakcomm",
+       4165:  "altcp",
+       4166:  "joost",
+       4167:  "ddgn",
+       4168:  "pslicser",
+       4169:  "iadt-disc",
+       4172:  "pcoip",
+       4173:  "mma-discovery",
+       4174:  "sm-disc",
+       4177:  "wello",
+       4178:  "storman",
+       4179:  "MaxumSP",
+       4180:  "httpx",
+       4181:  "macbak",
+       4182:  "pcptcpservice",
+       4183:  "cyborgnet",
+       4184:  "universe-suite",
+       4185:  "wcpp",
+       4188:  "vatata",
+       4191:  "dsmipv6",
+       4192:  "azeti-bd",
+       4197:  "hctl",
+       4199:  "eims-admin",
+       4300:  "corelccam",
+       4301:  "d-data",
+       4302:  "d-data-control",
+       4303:  "srcp",
+       4304:  "owserver",
+       4305:  "batman",
+       4306:  "pinghgl",
+       4307:  "trueconf",
+       4308:  "compx-lockview",
+       4309:  "dserver",
+       4310:  "mirrtex",
+       4320:  "fdt-rcatp",
+       4321:  "rwhois",
+       4322:  "trim-event",
+       4323:  "trim-ice",
+       4325:  "geognosisman",
+       4326:  "geognosis",
+       4327:  "jaxer-web",
+       4328:  "jaxer-manager",
+       4333:  "ahsp",
+       4340:  "gaia",
+       4341:  "lisp-data",
+       4342:  "lisp-control",
+       4343:  "unicall",
+       4344:  "vinainstall",
+       4345:  "m4-network-as",
+       4346:  "elanlm",
+       4347:  "lansurveyor",
+       4348:  "itose",
+       4349:  "fsportmap",
+       4350:  "net-device",
+       4351:  "plcy-net-svcs",
+       4352:  "pjlink",
+       4353:  "f5-iquery",
+       4354:  "qsnet-trans",
+       4355:  "qsnet-workst",
+       4356:  "qsnet-assist",
+       4357:  "qsnet-cond",
+       4358:  "qsnet-nucl",
+       4359:  "omabcastltkm",
+       4361:  "nacnl",
+       4362:  "afore-vdp-disc",
+       4366:  "shadowstream",
+       4368:  "wxbrief",
+       4369:  "epmd",
+       4370:  "elpro-tunnel",
+       4371:  "l2c-disc",
+       4372:  "l2c-data",
+       4373:  "remctl",
+       4375:  "tolteces",
+       4376:  "bip",
+       4377:  "cp-spxsvr",
+       4378:  "cp-spxdpy",
+       4379:  "ctdb",
+       4389:  "xandros-cms",
+       4390:  "wiegand",
+       4394:  "apwi-disc",
+       4395:  "omnivisionesx",
+       4400:  "ds-srv",
+       4401:  "ds-srvr",
+       4402:  "ds-clnt",
+       4403:  "ds-user",
+       4404:  "ds-admin",
+       4405:  "ds-mail",
+       4406:  "ds-slp",
+       4412:  "smallchat",
+       4413:  "avi-nms-disc",
+       4416:  "pjj-player-disc",
+       4418:  "axysbridge",
+       4420:  "nvm-express",
+       4425:  "netrockey6",
+       4426:  "beacon-port-2",
+       4430:  "rsqlserver",
+       4432:  "l-acoustics",
+       4441:  "netblox",
+       4442:  "saris",
+       4443:  "pharos",
+       4444:  "krb524",
+       4445:  "upnotifyp",
+       4446:  "n1-fwp",
+       4447:  "n1-rmgmt",
+       4448:  "asc-slmd",
+       4449:  "privatewire",
+       4450:  "camp",
+       4451:  "ctisystemmsg",
+       4452:  "ctiprogramload",
+       4453:  "nssalertmgr",
+       4454:  "nssagentmgr",
+       4455:  "prchat-user",
+       4456:  "prchat-server",
+       4457:  "prRegister",
+       4458:  "mcp",
+       4484:  "hpssmgmt",
+       4486:  "icms",
+       4488:  "awacs-ice",
+       4500:  "ipsec-nat-t",
+       4534:  "armagetronad",
+       4535:  "ehs",
+       4536:  "ehs-ssl",
+       4537:  "wssauthsvc",
+       4538:  "swx-gate",
+       4545:  "worldscores",
+       4546:  "sf-lm",
+       4547:  "lanner-lm",
+       4548:  "synchromesh",
+       4549:  "aegate",
+       4550:  "gds-adppiw-db",
+       4551:  "ieee-mih",
+       4552:  "menandmice-mon",
+       4554:  "msfrs",
+       4555:  "rsip",
+       4556:  "dtn-bundle",
+       4557:  "mtcevrunqss",
+       4558:  "mtcevrunqman",
+       4559:  "hylafax",
+       4566:  "kwtc",
+       4567:  "tram",
+       4568:  "bmc-reporting",
+       4569:  "iax",
+       4591:  "l3t-at-an",
+       4592:  "hrpd-ith-at-an",
+       4593:  "ipt-anri-anri",
+       4594:  "ias-session",
+       4595:  "ias-paging",
+       4596:  "ias-neighbor",
+       4597:  "a21-an-1xbs",
+       4598:  "a16-an-an",
+       4599:  "a17-an-an",
+       4600:  "piranha1",
+       4601:  "piranha2",
+       4621:  "ventoso",
+       4658:  "playsta2-app",
+       4659:  "playsta2-lob",
+       4660:  "smaclmgr",
+       4661:  "kar2ouche",
+       4662:  "oms",
+       4663:  "noteit",
+       4664:  "ems",
+       4665:  "contclientms",
+       4666:  "eportcomm",
+       4667:  "mmacomm",
+       4668:  "mmaeds",
+       4669:  "eportcommdata",
+       4670:  "light",
+       4671:  "acter",
+       4672:  "rfa",
+       4673:  "cxws",
+       4674:  "appiq-mgmt",
+       4675:  "dhct-status",
+       4676:  "dhct-alerts",
+       4677:  "bcs",
+       4678:  "traversal",
+       4679:  "mgesupervision",
+       4680:  "mgemanagement",
+       4681:  "parliant",
+       4682:  "finisar",
+       4683:  "spike",
+       4684:  "rfid-rp1",
+       4685:  "autopac",
+       4686:  "msp-os",
+       4687:  "nst",
+       4688:  "mobile-p2p",
+       4689:  "altovacentral",
+       4690:  "prelude",
+       4691:  "mtn",
+       4692:  "conspiracy",
+       4700:  "netxms-agent",
+       4701:  "netxms-mgmt",
+       4702:  "netxms-sync",
+       4711:  "trinity-dist",
+       4725:  "truckstar",
+       4726:  "a26-fap-fgw",
+       4727:  "fcis-disc",
+       4728:  "capmux",
+       4729:  "gsmtap",
+       4730:  "gearman",
+       4732:  "ohmtrigger",
+       4737:  "ipdr-sp",
+       4738:  "solera-lpn",
+       4739:  "ipfix",
+       4740:  "ipfixs",
+       4741:  "lumimgrd",
+       4742:  "sicct-sdp",
+       4743:  "openhpid",
+       4744:  "ifsp",
+       4745:  "fmp",
+       4746:  "intelliadm-disc",
+       4747:  "buschtrommel",
+       4749:  "profilemac",
+       4750:  "ssad",
+       4751:  "spocp",
+       4752:  "snap",
+       4753:  "simon-disc",
+       4754:  "gre-in-udp",
+       4755:  "gre-udp-dtls",
+       4784:  "bfd-multi-ctl",
+       4785:  "cncp",
+       4789:  "vxlan",
+       4790:  "vxlan-gpe",
+       4791:  "roce",
+       4800:  "iims",
+       4801:  "iwec",
+       4802:  "ilss",
+       4803:  "notateit-disc",
+       4804:  "aja-ntv4-disc",
+       4827:  "htcp",
+       4837:  "varadero-0",
+       4838:  "varadero-1",
+       4839:  "varadero-2",
+       4840:  "opcua-udp",
+       4841:  "quosa",
+       4842:  "gw-asv",
+       4843:  "opcua-tls",
+       4844:  "gw-log",
+       4845:  "wcr-remlib",
+       4846:  "contamac-icm",
+       4847:  "wfc",
+       4848:  "appserv-http",
+       4849:  "appserv-https",
+       4850:  "sun-as-nodeagt",
+       4851:  "derby-repli",
+       4867:  "unify-debug",
+       4868:  "phrelay",
+       4869:  "phrelaydbg",
+       4870:  "cc-tracking",
+       4871:  "wired",
+       4876:  "tritium-can",
+       4877:  "lmcs",
+       4878:  "inst-discovery",
+       4881:  "socp-t",
+       4882:  "socp-c",
+       4884:  "hivestor",
+       4885:  "abbs",
+       4894:  "lyskom",
+       4899:  "radmin-port",
+       4900:  "hfcs",
+       4914:  "bones",
+       4936:  "an-signaling",
+       4937:  "atsc-mh-ssc",
+       4940:  "eq-office-4940",
+       4941:  "eq-office-4941",
+       4942:  "eq-office-4942",
+       4949:  "munin",
+       4950:  "sybasesrvmon",
+       4951:  "pwgwims",
+       4952:  "sagxtsds",
+       4969:  "ccss-qmm",
+       4970:  "ccss-qsm",
+       4980:  "ctxs-vpp",
+       4986:  "mrip",
+       4987:  "smar-se-port1",
+       4988:  "smar-se-port2",
+       4989:  "parallel",
+       4990:  "busycal",
+       4991:  "vrt",
+       4999:  "hfcs-manager",
+       5000:  "commplex-main",
+       5001:  "commplex-link",
+       5002:  "rfe",
+       5003:  "fmpro-internal",
+       5004:  "avt-profile-1",
+       5005:  "avt-profile-2",
+       5006:  "wsm-server",
+       5007:  "wsm-server-ssl",
+       5008:  "synapsis-edge",
+       5009:  "winfs",
+       5010:  "telelpathstart",
+       5011:  "telelpathattack",
+       5012:  "nsp",
+       5013:  "fmpro-v6",
+       5014:  "onpsocket",
+       5020:  "zenginkyo-1",
+       5021:  "zenginkyo-2",
+       5022:  "mice",
+       5023:  "htuilsrv",
+       5024:  "scpi-telnet",
+       5025:  "scpi-raw",
+       5026:  "strexec-d",
+       5027:  "strexec-s",
+       5029:  "infobright",
+       5030:  "surfpass",
+       5031:  "dmp",
+       5042:  "asnaacceler8db",
+       5043:  "swxadmin",
+       5044:  "lxi-evntsvc",
+       5046:  "vpm-udp",
+       5047:  "iscape",
+       5049:  "ivocalize",
+       5050:  "mmcc",
+       5051:  "ita-agent",
+       5052:  "ita-manager",
+       5053:  "rlm-disc",
+       5055:  "unot",
+       5056:  "intecom-ps1",
+       5057:  "intecom-ps2",
+       5058:  "locus-disc",
+       5059:  "sds",
+       5060:  "sip",
+       5061:  "sips",
+       5062:  "na-localise",
+       5064:  "ca-1",
+       5065:  "ca-2",
+       5066:  "stanag-5066",
+       5067:  "authentx",
+       5069:  "i-net-2000-npr",
+       5070:  "vtsas",
+       5071:  "powerschool",
+       5072:  "ayiya",
+       5073:  "tag-pm",
+       5074:  "alesquery",
+       5078:  "pixelpusher",
+       5079:  "cp-spxrpts",
+       5080:  "onscreen",
+       5081:  "sdl-ets",
+       5082:  "qcp",
+       5083:  "qfp",
+       5084:  "llrp",
+       5085:  "encrypted-llrp",
+       5092:  "magpie",
+       5093:  "sentinel-lm",
+       5094:  "hart-ip",
+       5099:  "sentlm-srv2srv",
+       5100:  "socalia",
+       5101:  "talarian-udp",
+       5102:  "oms-nonsecure",
+       5104:  "tinymessage",
+       5105:  "hughes-ap",
+       5111:  "taep-as-svc",
+       5112:  "pm-cmdsvr",
+       5116:  "emb-proj-cmd",
+       5120:  "barracuda-bbs",
+       5133:  "nbt-pc",
+       5136:  "minotaur-sa",
+       5137:  "ctsd",
+       5145:  "rmonitor-secure",
+       5150:  "atmp",
+       5151:  "esri-sde",
+       5152:  "sde-discovery",
+       5154:  "bzflag",
+       5155:  "asctrl-agent",
+       5164:  "vpa-disc",
+       5165:  "ife-icorp",
+       5166:  "winpcs",
+       5167:  "scte104",
+       5168:  "scte30",
+       5190:  "aol",
+       5191:  "aol-1",
+       5192:  "aol-2",
+       5193:  "aol-3",
+       5200:  "targus-getdata",
+       5201:  "targus-getdata1",
+       5202:  "targus-getdata2",
+       5203:  "targus-getdata3",
+       5223:  "hpvirtgrp",
+       5224:  "hpvirtctrl",
+       5225:  "hp-server",
+       5226:  "hp-status",
+       5227:  "perfd",
+       5234:  "eenet",
+       5235:  "galaxy-network",
+       5236:  "padl2sim",
+       5237:  "mnet-discovery",
+       5245:  "downtools-disc",
+       5246:  "capwap-control",
+       5247:  "capwap-data",
+       5248:  "caacws",
+       5249:  "caaclang2",
+       5250:  "soagateway",
+       5251:  "caevms",
+       5252:  "movaz-ssc",
+       5264:  "3com-njack-1",
+       5265:  "3com-njack-2",
+       5270:  "cartographerxmp",
+       5271:  "cuelink-disc",
+       5272:  "pk",
+       5282:  "transmit-port",
+       5298:  "presence",
+       5299:  "nlg-data",
+       5300:  "hacl-hb",
+       5301:  "hacl-gs",
+       5302:  "hacl-cfg",
+       5303:  "hacl-probe",
+       5304:  "hacl-local",
+       5305:  "hacl-test",
+       5306:  "sun-mc-grp",
+       5307:  "sco-aip",
+       5308:  "cfengine",
+       5309:  "jprinter",
+       5310:  "outlaws",
+       5312:  "permabit-cs",
+       5313:  "rrdp",
+       5314:  "opalis-rbt-ipc",
+       5315:  "hacl-poll",
+       5343:  "kfserver",
+       5344:  "xkotodrcp",
+       5349:  "stuns",
+       5350:  "pcp-multicast",
+       5351:  "pcp",
+       5352:  "dns-llq",
+       5353:  "mdns",
+       5354:  "mdnsresponder",
+       5355:  "llmnr",
+       5356:  "ms-smlbiz",
+       5357:  "wsdapi",
+       5358:  "wsdapi-s",
+       5359:  "ms-alerter",
+       5360:  "ms-sideshow",
+       5361:  "ms-s-sideshow",
+       5362:  "serverwsd2",
+       5363:  "net-projection",
+       5364:  "kdnet",
+       5397:  "stresstester",
+       5398:  "elektron-admin",
+       5399:  "securitychase",
+       5400:  "excerpt",
+       5401:  "excerpts",
+       5402:  "mftp",
+       5403:  "hpoms-ci-lstn",
+       5404:  "hpoms-dps-lstn",
+       5405:  "netsupport",
+       5406:  "systemics-sox",
+       5407:  "foresyte-clear",
+       5408:  "foresyte-sec",
+       5409:  "salient-dtasrv",
+       5410:  "salient-usrmgr",
+       5411:  "actnet",
+       5412:  "continuus",
+       5413:  "wwiotalk",
+       5414:  "statusd",
+       5415:  "ns-server",
+       5416:  "sns-gateway",
+       5417:  "sns-agent",
+       5418:  "mcntp",
+       5419:  "dj-ice",
+       5420:  "cylink-c",
+       5421:  "netsupport2",
+       5422:  "salient-mux",
+       5423:  "virtualuser",
+       5424:  "beyond-remote",
+       5425:  "br-channel",
+       5426:  "devbasic",
+       5427:  "sco-peer-tta",
+       5428:  "telaconsole",
+       5429:  "base",
+       5430:  "radec-corp",
+       5431:  "park-agent",
+       5432:  "postgresql",
+       5433:  "pyrrho",
+       5434:  "sgi-arrayd",
+       5435:  "sceanics",
+       5436:  "pmip6-cntl",
+       5437:  "pmip6-data",
+       5443:  "spss",
+       5450:  "tiepie-disc",
+       5453:  "surebox",
+       5454:  "apc-5454",
+       5455:  "apc-5455",
+       5456:  "apc-5456",
+       5461:  "silkmeter",
+       5462:  "ttl-publisher",
+       5463:  "ttlpriceproxy",
+       5464:  "quailnet",
+       5465:  "netops-broker",
+       5474:  "apsolab-rpc",
+       5500:  "fcp-addr-srvr1",
+       5501:  "fcp-addr-srvr2",
+       5502:  "fcp-srvr-inst1",
+       5503:  "fcp-srvr-inst2",
+       5504:  "fcp-cics-gw1",
+       5505:  "checkoutdb",
+       5506:  "amc",
+       5553:  "sgi-eventmond",
+       5554:  "sgi-esphttp",
+       5555:  "personal-agent",
+       5556:  "freeciv",
+       5567:  "dof-dps-mc-sec",
+       5568:  "sdt",
+       5569:  "rdmnet-device",
+       5573:  "sdmmp",
+       5580:  "tmosms0",
+       5581:  "tmosms1",
+       5582:  "fac-restore",
+       5583:  "tmo-icon-sync",
+       5584:  "bis-web",
+       5585:  "bis-sync",
+       5597:  "ininmessaging",
+       5598:  "mctfeed",
+       5599:  "esinstall",
+       5600:  "esmmanager",
+       5601:  "esmagent",
+       5602:  "a1-msc",
+       5603:  "a1-bs",
+       5604:  "a3-sdunode",
+       5605:  "a4-sdunode",
+       5627:  "ninaf",
+       5628:  "htrust",
+       5629:  "symantec-sfdb",
+       5630:  "precise-comm",
+       5631:  "pcanywheredata",
+       5632:  "pcanywherestat",
+       5633:  "beorl",
+       5634:  "xprtld",
+       5670:  "zre-disc",
+       5671:  "amqps",
+       5672:  "amqp",
+       5673:  "jms",
+       5674:  "hyperscsi-port",
+       5675:  "v5ua",
+       5676:  "raadmin",
+       5677:  "questdb2-lnchr",
+       5678:  "rrac",
+       5679:  "dccm",
+       5680:  "auriga-router",
+       5681:  "ncxcp",
+       5682:  "brightcore",
+       5683:  "coap",
+       5684:  "coaps",
+       5687:  "gog-multiplayer",
+       5688:  "ggz",
+       5689:  "qmvideo",
+       5713:  "proshareaudio",
+       5714:  "prosharevideo",
+       5715:  "prosharedata",
+       5716:  "prosharerequest",
+       5717:  "prosharenotify",
+       5718:  "dpm",
+       5719:  "dpm-agent",
+       5720:  "ms-licensing",
+       5721:  "dtpt",
+       5722:  "msdfsr",
+       5723:  "omhs",
+       5724:  "omsdk",
+       5728:  "io-dist-group",
+       5729:  "openmail",
+       5730:  "unieng",
+       5741:  "ida-discover1",
+       5742:  "ida-discover2",
+       5743:  "watchdoc-pod",
+       5744:  "watchdoc",
+       5745:  "fcopy-server",
+       5746:  "fcopys-server",
+       5747:  "tunatic",
+       5748:  "tunalyzer",
+       5750:  "rscd",
+       5755:  "openmailg",
+       5757:  "x500ms",
+       5766:  "openmailns",
+       5767:  "s-openmail",
+       5768:  "openmailpxy",
+       5769:  "spramsca",
+       5770:  "spramsd",
+       5771:  "netagent",
+       5777:  "dali-port",
+       5781:  "3par-evts",
+       5782:  "3par-mgmt",
+       5783:  "3par-mgmt-ssl",
+       5784:  "ibar",
+       5785:  "3par-rcopy",
+       5786:  "cisco-redu",
+       5787:  "waascluster",
+       5793:  "xtreamx",
+       5794:  "spdp",
+       5813:  "icmpd",
+       5814:  "spt-automation",
+       5859:  "wherehoo",
+       5863:  "ppsuitemsg",
+       5900:  "rfb",
+       5910:  "cm",
+       5911:  "cpdlc",
+       5912:  "fis",
+       5913:  "ads-c",
+       5963:  "indy",
+       5968:  "mppolicy-v5",
+       5969:  "mppolicy-mgr",
+       5984:  "couchdb",
+       5985:  "wsman",
+       5986:  "wsmans",
+       5987:  "wbem-rmi",
+       5988:  "wbem-http",
+       5989:  "wbem-https",
+       5990:  "wbem-exp-https",
+       5991:  "nuxsl",
+       5992:  "consul-insight",
+       5999:  "cvsup",
+       6064:  "ndl-ahp-svc",
+       6065:  "winpharaoh",
+       6066:  "ewctsp",
+       6069:  "trip",
+       6070:  "messageasap",
+       6071:  "ssdtp",
+       6072:  "diagnose-proc",
+       6073:  "directplay8",
+       6074:  "max",
+       6080:  "gue",
+       6081:  "geneve",
+       6082:  "p25cai",
+       6083:  "miami-bcast",
+       6085:  "konspire2b",
+       6086:  "pdtp",
+       6087:  "ldss",
+       6088:  "doglms-notify",
+       6100:  "synchronet-db",
+       6101:  "synchronet-rtc",
+       6102:  "synchronet-upd",
+       6103:  "rets",
+       6104:  "dbdb",
+       6105:  "primaserver",
+       6106:  "mpsserver",
+       6107:  "etc-control",
+       6108:  "sercomm-scadmin",
+       6109:  "globecast-id",
+       6110:  "softcm",
+       6111:  "spc",
+       6112:  "dtspcd",
+       6118:  "tipc",
+       6122:  "bex-webadmin",
+       6123:  "backup-express",
+       6124:  "pnbs",
+       6133:  "nbt-wol",
+       6140:  "pulsonixnls",
+       6141:  "meta-corp",
+       6142:  "aspentec-lm",
+       6143:  "watershed-lm",
+       6144:  "statsci1-lm",
+       6145:  "statsci2-lm",
+       6146:  "lonewolf-lm",
+       6147:  "montage-lm",
+       6148:  "ricardo-lm",
+       6149:  "tal-pod",
+       6160:  "ecmp-data",
+       6161:  "patrol-ism",
+       6162:  "patrol-coll",
+       6163:  "pscribe",
+       6200:  "lm-x",
+       6201:  "thermo-calc",
+       6209:  "qmtps",
+       6222:  "radmind",
+       6241:  "jeol-nsddp-1",
+       6242:  "jeol-nsddp-2",
+       6243:  "jeol-nsddp-3",
+       6244:  "jeol-nsddp-4",
+       6251:  "tl1-raw-ssl",
+       6252:  "tl1-ssh",
+       6253:  "crip",
+       6268:  "grid",
+       6269:  "grid-alt",
+       6300:  "bmc-grx",
+       6301:  "bmc-ctd-ldap",
+       6306:  "ufmp",
+       6315:  "scup-disc",
+       6316:  "abb-escp",
+       6317:  "nav-data",
+       6320:  "repsvc",
+       6321:  "emp-server1",
+       6322:  "emp-server2",
+       6324:  "hrd-ns-disc",
+       6343:  "sflow",
+       6346:  "gnutella-svc",
+       6347:  "gnutella-rtr",
+       6350:  "adap",
+       6355:  "pmcs",
+       6360:  "metaedit-mu",
+       6363:  "ndn",
+       6370:  "metaedit-se",
+       6382:  "metatude-mds",
+       6389:  "clariion-evr01",
+       6390:  "metaedit-ws",
+       6417:  "faxcomservice",
+       6419:  "svdrp-disc",
+       6420:  "nim-vdrshell",
+       6421:  "nim-wan",
+       6443:  "sun-sr-https",
+       6444:  "sge-qmaster",
+       6445:  "sge-execd",
+       6446:  "mysql-proxy",
+       6455:  "skip-cert-recv",
+       6456:  "skip-cert-send",
+       6464:  "ieee11073-20701",
+       6471:  "lvision-lm",
+       6480:  "sun-sr-http",
+       6481:  "servicetags",
+       6482:  "ldoms-mgmt",
+       6483:  "SunVTS-RMI",
+       6484:  "sun-sr-jms",
+       6485:  "sun-sr-iiop",
+       6486:  "sun-sr-iiops",
+       6487:  "sun-sr-iiop-aut",
+       6488:  "sun-sr-jmx",
+       6489:  "sun-sr-admin",
+       6500:  "boks",
+       6501:  "boks-servc",
+       6502:  "boks-servm",
+       6503:  "boks-clntd",
+       6505:  "badm-priv",
+       6506:  "badm-pub",
+       6507:  "bdir-priv",
+       6508:  "bdir-pub",
+       6509:  "mgcs-mfp-port",
+       6510:  "mcer-port",
+       6511:  "dccp-udp",
+       6514:  "syslog-tls",
+       6515:  "elipse-rec",
+       6543:  "lds-distrib",
+       6544:  "lds-dump",
+       6547:  "apc-6547",
+       6548:  "apc-6548",
+       6549:  "apc-6549",
+       6550:  "fg-sysupdate",
+       6551:  "sum",
+       6558:  "xdsxdm",
+       6566:  "sane-port",
+       6568:  "rp-reputation",
+       6579:  "affiliate",
+       6580:  "parsec-master",
+       6581:  "parsec-peer",
+       6582:  "parsec-game",
+       6583:  "joaJewelSuite",
+       6619:  "odette-ftps",
+       6620:  "kftp-data",
+       6621:  "kftp",
+       6622:  "mcftp",
+       6623:  "ktelnet",
+       6626:  "wago-service",
+       6627:  "nexgen",
+       6628:  "afesc-mc",
+       6629:  "nexgen-aux",
+       6633:  "cisco-vpath-tun",
+       6634:  "mpls-pm",
+       6635:  "mpls-udp",
+       6636:  "mpls-udp-dtls",
+       6653:  "openflow",
+       6657:  "palcom-disc",
+       6670:  "vocaltec-gold",
+       6671:  "p4p-portal",
+       6672:  "vision-server",
+       6673:  "vision-elmd",
+       6678:  "vfbp-disc",
+       6679:  "osaut",
+       6689:  "tsa",
+       6696:  "babel",
+       6701:  "kti-icad-srvr",
+       6702:  "e-design-net",
+       6703:  "e-design-web",
+       6714:  "ibprotocol",
+       6715:  "fibotrader-com",
+       6767:  "bmc-perf-agent",
+       6768:  "bmc-perf-mgrd",
+       6769:  "adi-gxp-srvprt",
+       6770:  "plysrv-http",
+       6771:  "plysrv-https",
+       6784:  "bfd-lag",
+       6785:  "dgpf-exchg",
+       6786:  "smc-jmx",
+       6787:  "smc-admin",
+       6788:  "smc-http",
+       6790:  "hnmp",
+       6791:  "hnm",
+       6801:  "acnet",
+       6831:  "ambit-lm",
+       6841:  "netmo-default",
+       6842:  "netmo-http",
+       6850:  "iccrushmore",
+       6868:  "acctopus-st",
+       6888:  "muse",
+       6935:  "ethoscan",
+       6936:  "xsmsvc",
+       6946:  "bioserver",
+       6951:  "otlp",
+       6961:  "jmact3",
+       6962:  "jmevt2",
+       6963:  "swismgr1",
+       6964:  "swismgr2",
+       6965:  "swistrap",
+       6966:  "swispol",
+       6969:  "acmsoda",
+       6997:  "MobilitySrv",
+       6998:  "iatp-highpri",
+       6999:  "iatp-normalpri",
+       7000:  "afs3-fileserver",
+       7001:  "afs3-callback",
+       7002:  "afs3-prserver",
+       7003:  "afs3-vlserver",
+       7004:  "afs3-kaserver",
+       7005:  "afs3-volser",
+       7006:  "afs3-errors",
+       7007:  "afs3-bos",
+       7008:  "afs3-update",
+       7009:  "afs3-rmtsys",
+       7010:  "ups-onlinet",
+       7011:  "talon-disc",
+       7012:  "talon-engine",
+       7013:  "microtalon-dis",
+       7014:  "microtalon-com",
+       7015:  "talon-webserver",
+       7016:  "spg",
+       7017:  "grasp",
+       7019:  "doceri-view",
+       7020:  "dpserve",
+       7021:  "dpserveadmin",
+       7022:  "ctdp",
+       7023:  "ct2nmcs",
+       7024:  "vmsvc",
+       7025:  "vmsvc-2",
+       7030:  "op-probe",
+       7040:  "quest-disc",
+       7070:  "arcp",
+       7071:  "iwg1",
+       7080:  "empowerid",
+       7088:  "zixi-transport",
+       7095:  "jdp-disc",
+       7099:  "lazy-ptop",
+       7100:  "font-service",
+       7101:  "elcn",
+       7107:  "aes-x170",
+       7121:  "virprot-lm",
+       7128:  "scenidm",
+       7129:  "scenccs",
+       7161:  "cabsm-comm",
+       7162:  "caistoragemgr",
+       7163:  "cacsambroker",
+       7164:  "fsr",
+       7165:  "doc-server",
+       7166:  "aruba-server",
+       7169:  "ccag-pib",
+       7170:  "nsrp",
+       7171:  "drm-production",
+       7174:  "clutild",
+       7181:  "janus-disc",
+       7200:  "fodms",
+       7201:  "dlip",
+       7227:  "ramp",
+       7235:  "aspcoordination",
+       7244:  "frc-hicp-disc",
+       7262:  "cnap",
+       7272:  "watchme-7272",
+       7273:  "oma-rlp",
+       7274:  "oma-rlp-s",
+       7275:  "oma-ulp",
+       7276:  "oma-ilp",
+       7277:  "oma-ilp-s",
+       7278:  "oma-dcdocbs",
+       7279:  "ctxlic",
+       7280:  "itactionserver1",
+       7281:  "itactionserver2",
+       7282:  "mzca-alert",
+       7365:  "lcm-server",
+       7391:  "mindfilesys",
+       7392:  "mrssrendezvous",
+       7393:  "nfoldman",
+       7394:  "fse",
+       7395:  "winqedit",
+       7397:  "hexarc",
+       7400:  "rtps-discovery",
+       7401:  "rtps-dd-ut",
+       7402:  "rtps-dd-mt",
+       7410:  "ionixnetmon",
+       7411:  "daqstream",
+       7421:  "mtportmon",
+       7426:  "pmdmgr",
+       7427:  "oveadmgr",
+       7428:  "ovladmgr",
+       7429:  "opi-sock",
+       7430:  "xmpv7",
+       7431:  "pmd",
+       7437:  "faximum",
+       7443:  "oracleas-https",
+       7473:  "rise",
+       7491:  "telops-lmd",
+       7500:  "silhouette",
+       7501:  "ovbus",
+       7510:  "ovhpas",
+       7511:  "pafec-lm",
+       7542:  "saratoga",
+       7543:  "atul",
+       7544:  "nta-ds",
+       7545:  "nta-us",
+       7546:  "cfs",
+       7547:  "cwmp",
+       7548:  "tidp",
+       7549:  "nls-tl",
+       7550:  "cloudsignaling",
+       7560:  "sncp",
+       7566:  "vsi-omega",
+       7570:  "aries-kfinder",
+       7574:  "coherence-disc",
+       7588:  "sun-lm",
+       7606:  "mipi-debug",
+       7624:  "indi",
+       7627:  "soap-http",
+       7628:  "zen-pawn",
+       7629:  "xdas",
+       7633:  "pmdfmgt",
+       7648:  "cuseeme",
+       7674:  "imqtunnels",
+       7675:  "imqtunnel",
+       7676:  "imqbrokerd",
+       7677:  "sun-user-https",
+       7680:  "pando-pub",
+       7689:  "collaber",
+       7697:  "klio",
+       7707:  "sync-em7",
+       7708:  "scinet",
+       7720:  "medimageportal",
+       7724:  "nsdeepfreezectl",
+       7725:  "nitrogen",
+       7726:  "freezexservice",
+       7727:  "trident-data",
+       7728:  "osvr",
+       7734:  "smip",
+       7738:  "aiagent",
+       7741:  "scriptview",
+       7743:  "sstp-1",
+       7744:  "raqmon-pdu",
+       7747:  "prgp",
+       7777:  "cbt",
+       7778:  "interwise",
+       7779:  "vstat",
+       7781:  "accu-lmgr",
+       7784:  "s-bfd",
+       7786:  "minivend",
+       7787:  "popup-reminders",
+       7789:  "office-tools",
+       7794:  "q3ade",
+       7797:  "pnet-conn",
+       7798:  "pnet-enc",
+       7799:  "altbsdp",
+       7800:  "asr",
+       7801:  "ssp-client",
+       7802:  "vns-tp",
+       7810:  "rbt-wanopt",
+       7845:  "apc-7845",
+       7846:  "apc-7846",
+       7872:  "mipv6tls",
+       7880:  "pss",
+       7887:  "ubroker",
+       7900:  "mevent",
+       7901:  "tnos-sp",
+       7902:  "tnos-dp",
+       7903:  "tnos-dps",
+       7913:  "qo-secure",
+       7932:  "t2-drm",
+       7933:  "t2-brm",
+       7962:  "generalsync",
+       7967:  "supercell",
+       7979:  "micromuse-ncps",
+       7980:  "quest-vista",
+       7982:  "sossd-disc",
+       7998:  "usicontentpush",
+       7999:  "irdmi2",
+       8000:  "irdmi",
+       8001:  "vcom-tunnel",
+       8002:  "teradataordbms",
+       8003:  "mcreport",
+       8005:  "mxi",
+       8006:  "wpl-disc",
+       8007:  "warppipe",
+       8008:  "http-alt",
+       8019:  "qbdb",
+       8020:  "intu-ec-svcdisc",
+       8021:  "intu-ec-client",
+       8022:  "oa-system",
+       8025:  "ca-audit-da",
+       8026:  "ca-audit-ds",
+       8032:  "pro-ed",
+       8033:  "mindprint",
+       8034:  "vantronix-mgmt",
+       8040:  "ampify",
+       8041:  "enguity-xccetp",
+       8052:  "senomix01",
+       8053:  "senomix02",
+       8054:  "senomix03",
+       8055:  "senomix04",
+       8056:  "senomix05",
+       8057:  "senomix06",
+       8058:  "senomix07",
+       8059:  "senomix08",
+       8060:  "aero",
+       8074:  "gadugadu",
+       8080:  "http-alt",
+       8081:  "sunproxyadmin",
+       8082:  "us-cli",
+       8083:  "us-srv",
+       8086:  "d-s-n",
+       8087:  "simplifymedia",
+       8088:  "radan-http",
+       8097:  "sac",
+       8100:  "xprint-server",
+       8115:  "mtl8000-matrix",
+       8116:  "cp-cluster",
+       8118:  "privoxy",
+       8121:  "apollo-data",
+       8122:  "apollo-admin",
+       8128:  "paycash-online",
+       8129:  "paycash-wbp",
+       8130:  "indigo-vrmi",
+       8131:  "indigo-vbcp",
+       8132:  "dbabble",
+       8148:  "isdd",
+       8149:  "eor-game",
+       8160:  "patrol",
+       8161:  "patrol-snmp",
+       8182:  "vmware-fdm",
+       8184:  "itach",
+       8192:  "spytechphone",
+       8194:  "blp1",
+       8195:  "blp2",
+       8199:  "vvr-data",
+       8200:  "trivnet1",
+       8201:  "trivnet2",
+       8202:  "aesop",
+       8204:  "lm-perfworks",
+       8205:  "lm-instmgr",
+       8206:  "lm-dta",
+       8207:  "lm-sserver",
+       8208:  "lm-webwatcher",
+       8230:  "rexecj",
+       8231:  "hncp-udp-port",
+       8232:  "hncp-dtls-port",
+       8243:  "synapse-nhttps",
+       8276:  "pando-sec",
+       8280:  "synapse-nhttp",
+       8282:  "libelle-disc",
+       8292:  "blp3",
+       8294:  "blp4",
+       8300:  "tmi",
+       8301:  "amberon",
+       8320:  "tnp-discover",
+       8321:  "tnp",
+       8322:  "garmin-marine",
+       8351:  "server-find",
+       8376:  "cruise-enum",
+       8377:  "cruise-swroute",
+       8378:  "cruise-config",
+       8379:  "cruise-diags",
+       8380:  "cruise-update",
+       8383:  "m2mservices",
+       8384:  "marathontp",
+       8400:  "cvd",
+       8401:  "sabarsd",
+       8402:  "abarsd",
+       8403:  "admind",
+       8416:  "espeech",
+       8417:  "espeech-rtp",
+       8442:  "cybro-a-bus",
+       8443:  "pcsync-https",
+       8444:  "pcsync-http",
+       8445:  "copy-disc",
+       8450:  "npmp",
+       8472:  "otv",
+       8473:  "vp2p",
+       8474:  "noteshare",
+       8500:  "fmtp",
+       8501:  "cmtp-av",
+       8503:  "lsp-self-ping",
+       8554:  "rtsp-alt",
+       8555:  "d-fence",
+       8567:  "dof-tunnel",
+       8600:  "asterix",
+       8609:  "canon-cpp-disc",
+       8610:  "canon-mfnp",
+       8611:  "canon-bjnp1",
+       8612:  "canon-bjnp2",
+       8613:  "canon-bjnp3",
+       8614:  "canon-bjnp4",
+       8675:  "msi-cps-rm-disc",
+       8686:  "sun-as-jmxrmi",
+       8732:  "dtp-net",
+       8733:  "ibus",
+       8763:  "mc-appserver",
+       8764:  "openqueue",
+       8765:  "ultraseek-http",
+       8766:  "amcs",
+       8770:  "dpap",
+       8786:  "msgclnt",
+       8787:  "msgsrvr",
+       8793:  "acd-pm",
+       8800:  "sunwebadmin",
+       8804:  "truecm",
+       8805:  "pfcp",
+       8808:  "ssports-bcast",
+       8873:  "dxspider",
+       8880:  "cddbp-alt",
+       8883:  "secure-mqtt",
+       8888:  "ddi-udp-1",
+       8889:  "ddi-udp-2",
+       8890:  "ddi-udp-3",
+       8891:  "ddi-udp-4",
+       8892:  "ddi-udp-5",
+       8893:  "ddi-udp-6",
+       8894:  "ddi-udp-7",
+       8899:  "ospf-lite",
+       8900:  "jmb-cds1",
+       8901:  "jmb-cds2",
+       8910:  "manyone-http",
+       8911:  "manyone-xml",
+       8912:  "wcbackup",
+       8913:  "dragonfly",
+       8954:  "cumulus-admin",
+       8980:  "nod-provider",
+       8981:  "nod-client",
+       8989:  "sunwebadmins",
+       8990:  "http-wmap",
+       8991:  "https-wmap",
+       8999:  "bctp",
+       9000:  "cslistener",
+       9001:  "etlservicemgr",
+       9002:  "dynamid",
+       9007:  "ogs-client",
+       9009:  "pichat",
+       9020:  "tambora",
+       9021:  "panagolin-ident",
+       9022:  "paragent",
+       9023:  "swa-1",
+       9024:  "swa-2",
+       9025:  "swa-3",
+       9026:  "swa-4",
+       9060:  "CardWeb-RT",
+       9080:  "glrpc",
+       9084:  "aurora",
+       9085:  "ibm-rsyscon",
+       9086:  "net2display",
+       9087:  "classic",
+       9088:  "sqlexec",
+       9089:  "sqlexec-ssl",
+       9090:  "websm",
+       9091:  "xmltec-xmlmail",
+       9092:  "XmlIpcRegSvc",
+       9100:  "hp-pdl-datastr",
+       9101:  "bacula-dir",
+       9102:  "bacula-fd",
+       9103:  "bacula-sd",
+       9104:  "peerwire",
+       9105:  "xadmin",
+       9106:  "astergate-disc",
+       9119:  "mxit",
+       9131:  "dddp",
+       9160:  "apani1",
+       9161:  "apani2",
+       9162:  "apani3",
+       9163:  "apani4",
+       9164:  "apani5",
+       9191:  "sun-as-jpda",
+       9200:  "wap-wsp",
+       9201:  "wap-wsp-wtp",
+       9202:  "wap-wsp-s",
+       9203:  "wap-wsp-wtp-s",
+       9204:  "wap-vcard",
+       9205:  "wap-vcal",
+       9206:  "wap-vcard-s",
+       9207:  "wap-vcal-s",
+       9208:  "rjcdb-vcards",
+       9209:  "almobile-system",
+       9210:  "oma-mlp",
+       9211:  "oma-mlp-s",
+       9212:  "serverviewdbms",
+       9213:  "serverstart",
+       9214:  "ipdcesgbs",
+       9215:  "insis",
+       9216:  "acme",
+       9217:  "fsc-port",
+       9222:  "teamcoherence",
+       9255:  "mon",
+       9277:  "traingpsdata",
+       9278:  "pegasus",
+       9279:  "pegasus-ctl",
+       9280:  "pgps",
+       9281:  "swtp-port1",
+       9282:  "swtp-port2",
+       9283:  "callwaveiam",
+       9284:  "visd",
+       9285:  "n2h2server",
+       9286:  "n2receive",
+       9287:  "cumulus",
+       9292:  "armtechdaemon",
+       9293:  "storview",
+       9294:  "armcenterhttp",
+       9295:  "armcenterhttps",
+       9300:  "vrace",
+       9318:  "secure-ts",
+       9321:  "guibase",
+       9343:  "mpidcmgr",
+       9344:  "mphlpdmc",
+       9346:  "ctechlicensing",
+       9374:  "fjdmimgr",
+       9380:  "boxp",
+       9396:  "fjinvmgr",
+       9397:  "mpidcagt",
+       9400:  "sec-t4net-srv",
+       9401:  "sec-t4net-clt",
+       9402:  "sec-pc2fax-srv",
+       9418:  "git",
+       9443:  "tungsten-https",
+       9444:  "wso2esb-console",
+       9450:  "sntlkeyssrvr",
+       9500:  "ismserver",
+       9522:  "sma-spw",
+       9535:  "mngsuite",
+       9536:  "laes-bf",
+       9555:  "trispen-sra",
+       9592:  "ldgateway",
+       9593:  "cba8",
+       9594:  "msgsys",
+       9595:  "pds",
+       9596:  "mercury-disc",
+       9597:  "pd-admin",
+       9598:  "vscp",
+       9599:  "robix",
+       9600:  "micromuse-ncpw",
+       9612:  "streamcomm-ds",
+       9618:  "condor",
+       9628:  "odbcpathway",
+       9629:  "uniport",
+       9632:  "mc-comm",
+       9667:  "xmms2",
+       9668:  "tec5-sdctp",
+       9694:  "client-wakeup",
+       9695:  "ccnx",
+       9700:  "board-roar",
+       9747:  "l5nas-parchan",
+       9750:  "board-voip",
+       9753:  "rasadv",
+       9762:  "tungsten-http",
+       9800:  "davsrc",
+       9801:  "sstp-2",
+       9802:  "davsrcs",
+       9875:  "sapv1",
+       9878:  "kca-service",
+       9888:  "cyborg-systems",
+       9889:  "gt-proxy",
+       9898:  "monkeycom",
+       9899:  "sctp-tunneling",
+       9900:  "iua",
+       9901:  "enrp",
+       9903:  "multicast-ping",
+       9909:  "domaintime",
+       9911:  "sype-transport",
+       9950:  "apc-9950",
+       9951:  "apc-9951",
+       9952:  "apc-9952",
+       9953:  "acis",
+       9955:  "alljoyn-mcm",
+       9956:  "alljoyn",
+       9966:  "odnsp",
+       9987:  "dsm-scm-target",
+       9990:  "osm-appsrvr",
+       9991:  "osm-oev",
+       9992:  "palace-1",
+       9993:  "palace-2",
+       9994:  "palace-3",
+       9995:  "palace-4",
+       9996:  "palace-5",
+       9997:  "palace-6",
+       9998:  "distinct32",
+       9999:  "distinct",
+       10000: "ndmp",
+       10001: "scp-config",
+       10002: "documentum",
+       10003: "documentum-s",
+       10007: "mvs-capacity",
+       10008: "octopus",
+       10009: "swdtp-sv",
+       10050: "zabbix-agent",
+       10051: "zabbix-trapper",
+       10080: "amanda",
+       10081: "famdc",
+       10100: "itap-ddtp",
+       10101: "ezmeeting-2",
+       10102: "ezproxy-2",
+       10103: "ezrelay",
+       10104: "swdtp",
+       10107: "bctp-server",
+       10110: "nmea-0183",
+       10111: "nmea-onenet",
+       10113: "netiq-endpoint",
+       10114: "netiq-qcheck",
+       10115: "netiq-endpt",
+       10116: "netiq-voipa",
+       10117: "iqrm",
+       10128: "bmc-perf-sd",
+       10160: "qb-db-server",
+       10161: "snmpdtls",
+       10162: "snmpdtls-trap",
+       10200: "trisoap",
+       10201: "rscs",
+       10252: "apollo-relay",
+       10253: "eapol-relay",
+       10260: "axis-wimp-port",
+       10288: "blocks",
+       10439: "bngsync",
+       10500: "hip-nat-t",
+       10540: "MOS-lower",
+       10541: "MOS-upper",
+       10542: "MOS-aux",
+       10543: "MOS-soap",
+       10544: "MOS-soap-opt",
+       10800: "gap",
+       10805: "lpdg",
+       10810: "nmc-disc",
+       10860: "helix",
+       10880: "bveapi",
+       10990: "rmiaux",
+       11000: "irisa",
+       11001: "metasys",
+       10023: "cefd-vmp",
+       11095: "weave",
+       11106: "sgi-lk",
+       11108: "myq-termlink",
+       11111: "vce",
+       11112: "dicom",
+       11161: "suncacao-snmp",
+       11162: "suncacao-jmxmp",
+       11163: "suncacao-rmi",
+       11164: "suncacao-csa",
+       11165: "suncacao-websvc",
+       11171: "snss",
+       11201: "smsqp",
+       11208: "wifree",
+       11211: "memcache",
+       11319: "imip",
+       11320: "imip-channels",
+       11321: "arena-server",
+       11367: "atm-uhas",
+       11371: "hkp",
+       11430: "lsdp",
+       11600: "tempest-port",
+       11720: "h323callsigalt",
+       11723: "emc-xsw-dcache",
+       11751: "intrepid-ssl",
+       11796: "lanschool-mpt",
+       11876: "xoraya",
+       11877: "x2e-disc",
+       11967: "sysinfo-sp",
+       12000: "entextxid",
+       12001: "entextnetwk",
+       12002: "entexthigh",
+       12003: "entextmed",
+       12004: "entextlow",
+       12005: "dbisamserver1",
+       12006: "dbisamserver2",
+       12007: "accuracer",
+       12008: "accuracer-dbms",
+       12009: "ghvpn",
+       12012: "vipera",
+       12013: "vipera-ssl",
+       12109: "rets-ssl",
+       12121: "nupaper-ss",
+       12168: "cawas",
+       12172: "hivep",
+       12300: "linogridengine",
+       12321: "warehouse-sss",
+       12322: "warehouse",
+       12345: "italk",
+       12753: "tsaf",
+       13160: "i-zipqd",
+       13216: "bcslogc",
+       13217: "rs-pias",
+       13218: "emc-vcas-udp",
+       13223: "powwow-client",
+       13224: "powwow-server",
+       13400: "doip-disc",
+       13720: "bprd",
+       13721: "bpdbm",
+       13722: "bpjava-msvc",
+       13724: "vnetd",
+       13782: "bpcd",
+       13783: "vopied",
+       13785: "nbdb",
+       13786: "nomdb",
+       13818: "dsmcc-config",
+       13819: "dsmcc-session",
+       13820: "dsmcc-passthru",
+       13821: "dsmcc-download",
+       13822: "dsmcc-ccp",
+       13894: "ucontrol",
+       13929: "dta-systems",
+       14000: "scotty-ft",
+       14001: "sua",
+       14002: "scotty-disc",
+       14033: "sage-best-com1",
+       14034: "sage-best-com2",
+       14141: "vcs-app",
+       14142: "icpp",
+       14145: "gcm-app",
+       14149: "vrts-tdd",
+       14154: "vad",
+       14250: "cps",
+       14414: "ca-web-update",
+       14936: "hde-lcesrvr-1",
+       14937: "hde-lcesrvr-2",
+       15000: "hydap",
+       15118: "v2g-secc",
+       15345: "xpilot",
+       15363: "3link",
+       15555: "cisco-snat",
+       15660: "bex-xr",
+       15740: "ptp",
+       15998: "2ping",
+       16003: "alfin",
+       16161: "sun-sea-port",
+       16309: "etb4j",
+       16310: "pduncs",
+       16311: "pdefmns",
+       16360: "netserialext1",
+       16361: "netserialext2",
+       16367: "netserialext3",
+       16368: "netserialext4",
+       16384: "connected",
+       16666: "vtp",
+       16900: "newbay-snc-mc",
+       16950: "sgcip",
+       16991: "intel-rci-mp",
+       16992: "amt-soap-http",
+       16993: "amt-soap-https",
+       16994: "amt-redir-tcp",
+       16995: "amt-redir-tls",
+       17007: "isode-dua",
+       17185: "soundsvirtual",
+       17219: "chipper",
+       17220: "avtp",
+       17221: "avdecc",
+       17222: "cpsp",
+       17224: "trdp-pd",
+       17225: "trdp-md",
+       17234: "integrius-stp",
+       17235: "ssh-mgmt",
+       17500: "db-lsp-disc",
+       17729: "ea",
+       17754: "zep",
+       17755: "zigbee-ip",
+       17756: "zigbee-ips",
+       18000: "biimenu",
+       18181: "opsec-cvp",
+       18182: "opsec-ufp",
+       18183: "opsec-sam",
+       18184: "opsec-lea",
+       18185: "opsec-omi",
+       18186: "ohsc",
+       18187: "opsec-ela",
+       18241: "checkpoint-rtm",
+       18262: "gv-pf",
+       18463: "ac-cluster",
+       18634: "rds-ib",
+       18635: "rds-ip",
+       18668: "vdmmesh-disc",
+       18769: "ique",
+       18881: "infotos",
+       18888: "apc-necmp",
+       19000: "igrid",
+       19007: "scintilla",
+       19191: "opsec-uaa",
+       19194: "ua-secureagent",
+       19220: "cora-disc",
+       19283: "keysrvr",
+       19315: "keyshadow",
+       19398: "mtrgtrans",
+       19410: "hp-sco",
+       19411: "hp-sca",
+       19412: "hp-sessmon",
+       19539: "fxuptp",
+       19540: "sxuptp",
+       19541: "jcp",
+       19788: "mle",
+       19999: "dnp-sec",
+       20000: "dnp",
+       20001: "microsan",
+       20002: "commtact-http",
+       20003: "commtact-https",
+       20005: "openwebnet",
+       20012: "ss-idi-disc",
+       20014: "opendeploy",
+       20034: "nburn-id",
+       20046: "tmophl7mts",
+       20048: "mountd",
+       20049: "nfsrdma",
+       20167: "tolfab",
+       20202: "ipdtp-port",
+       20222: "ipulse-ics",
+       20480: "emwavemsg",
+       20670: "track",
+       20999: "athand-mmp",
+       21000: "irtrans",
+       21554: "dfserver",
+       21590: "vofr-gateway",
+       21800: "tvpm",
+       21845: "webphone",
+       21846: "netspeak-is",
+       21847: "netspeak-cs",
+       21848: "netspeak-acd",
+       21849: "netspeak-cps",
+       22000: "snapenetio",
+       22001: "optocontrol",
+       22002: "optohost002",
+       22003: "optohost003",
+       22004: "optohost004",
+       22005: "optohost004",
+       22273: "wnn6",
+       22305: "cis",
+       22335: "shrewd-stream",
+       22343: "cis-secure",
+       22347: "wibukey",
+       22350: "codemeter",
+       22555: "vocaltec-phone",
+       22763: "talikaserver",
+       22800: "aws-brf",
+       22951: "brf-gw",
+       23000: "inovaport1",
+       23001: "inovaport2",
+       23002: "inovaport3",
+       23003: "inovaport4",
+       23004: "inovaport5",
+       23005: "inovaport6",
+       23272: "s102",
+       23294: "5afe-disc",
+       23333: "elxmgmt",
+       23400: "novar-dbase",
+       23401: "novar-alarm",
+       23402: "novar-global",
+       24000: "med-ltp",
+       24001: "med-fsp-rx",
+       24002: "med-fsp-tx",
+       24003: "med-supp",
+       24004: "med-ovw",
+       24005: "med-ci",
+       24006: "med-net-svc",
+       24242: "filesphere",
+       24249: "vista-4gl",
+       24321: "ild",
+       24322: "hid",
+       24386: "intel-rci",
+       24465: "tonidods",
+       24554: "binkp",
+       24577: "bilobit-update",
+       24676: "canditv",
+       24677: "flashfiler",
+       24678: "proactivate",
+       24680: "tcc-http",
+       24850: "assoc-disc",
+       24922: "find",
+       25000: "icl-twobase1",
+       25001: "icl-twobase2",
+       25002: "icl-twobase3",
+       25003: "icl-twobase4",
+       25004: "icl-twobase5",
+       25005: "icl-twobase6",
+       25006: "icl-twobase7",
+       25007: "icl-twobase8",
+       25008: "icl-twobase9",
+       25009: "icl-twobase10",
+       25793: "vocaltec-hos",
+       25900: "tasp-net",
+       25901: "niobserver",
+       25902: "nilinkanalyst",
+       25903: "niprobe",
+       25954: "bf-game",
+       25955: "bf-master",
+       26000: "quake",
+       26133: "scscp",
+       26208: "wnn6-ds",
+       26260: "ezproxy",
+       26261: "ezmeeting",
+       26262: "k3software-svr",
+       26263: "k3software-cli",
+       26486: "exoline-udp",
+       26487: "exoconfig",
+       26489: "exonet",
+       27345: "imagepump",
+       27442: "jesmsjc",
+       27504: "kopek-httphead",
+       27782: "ars-vista",
+       27999: "tw-auth-key",
+       28000: "nxlmd",
+       28119: "a27-ran-ran",
+       28200: "voxelstorm",
+       28240: "siemensgsm",
+       29167: "otmp",
+       30001: "pago-services1",
+       30002: "pago-services2",
+       30003: "amicon-fpsu-ra",
+       30004: "amicon-fpsu-s",
+       30260: "kingdomsonline",
+       30832: "samsung-disc",
+       30999: "ovobs",
+       31016: "ka-kdp",
+       31029: "yawn",
+       31416: "xqosd",
+       31457: "tetrinet",
+       31620: "lm-mon",
+       31765: "gamesmith-port",
+       31948: "iceedcp-tx",
+       31949: "iceedcp-rx",
+       32034: "iracinghelper",
+       32249: "t1distproc60",
+       32483: "apm-link",
+       32635: "sec-ntb-clnt",
+       32636: "DMExpress",
+       32767: "filenet-powsrm",
+       32768: "filenet-tms",
+       32769: "filenet-rpc",
+       32770: "filenet-nch",
+       32771: "filenet-rmi",
+       32772: "filenet-pa",
+       32773: "filenet-cm",
+       32774: "filenet-re",
+       32775: "filenet-pch",
+       32776: "filenet-peior",
+       32777: "filenet-obrok",
+       32801: "mlsn",
+       32896: "idmgratm",
+       33123: "aurora-balaena",
+       33331: "diamondport",
+       33334: "speedtrace-disc",
+       33434: "traceroute",
+       33656: "snip-slave",
+       34249: "turbonote-2",
+       34378: "p-net-local",
+       34379: "p-net-remote",
+       34567: "edi_service",
+       34962: "profinet-rt",
+       34963: "profinet-rtm",
+       34964: "profinet-cm",
+       34980: "ethercat",
+       35001: "rt-viewer",
+       35004: "rt-classmanager",
+       35100: "axio-disc",
+       35355: "altova-lm-disc",
+       36001: "allpeers",
+       36411: "wlcp",
+       36865: "kastenxpipe",
+       37475: "neckar",
+       37654: "unisys-eportal",
+       38002: "crescoctrl-disc",
+       38201: "galaxy7-data",
+       38202: "fairview",
+       38203: "agpolicy",
+       39681: "turbonote-1",
+       40000: "safetynetp",
+       40023: "k-patentssensor",
+       40841: "cscp",
+       40842: "csccredir",
+       40843: "csccfirewall",
+       40853: "ortec-disc",
+       41111: "fs-qos",
+       41230: "z-wave-s",
+       41794: "crestron-cip",
+       41795: "crestron-ctp",
+       42508: "candp",
+       42509: "candrp",
+       42510: "caerpc",
+       43000: "recvr-rc-disc",
+       43188: "reachout",
+       43189: "ndm-agent-port",
+       43190: "ip-provision",
+       43210: "shaperai-disc",
+       43439: "eq3-config",
+       43440: "ew-disc-cmd",
+       43441: "ciscocsdb",
+       44321: "pmcd",
+       44322: "pmcdproxy",
+       44544: "domiq",
+       44553: "rbr-debug",
+       44600: "asihpi",
+       44818: "EtherNet-IP-2",
+       44900: "m3da-disc",
+       45000: "asmp-mon",
+       45054: "invision-ag",
+       45514: "cloudcheck-ping",
+       45678: "eba",
+       45825: "qdb2service",
+       45966: "ssr-servermgr",
+       46999: "mediabox",
+       47000: "mbus",
+       47100: "jvl-mactalk",
+       47557: "dbbrowse",
+       47624: "directplaysrvr",
+       47806: "ap",
+       47808: "bacnet",
+       47809: "presonus-ucnet",
+       48000: "nimcontroller",
+       48001: "nimspooler",
+       48002: "nimhub",
+       48003: "nimgtw",
+       48128: "isnetserv",
+       48129: "blp5",
+       48556: "com-bardac-dw",
+       48619: "iqobject",
+       48653: "robotraconteur",
+       49001: "nusdp-disc",
+}
+var sctpPortNames = map[SCTPPort]string{
+       9:     "discard",
+       20:    "ftp-data",
+       21:    "ftp",
+       22:    "ssh",
+       80:    "http",
+       179:   "bgp",
+       443:   "https",
+       1021:  "exp1",
+       1022:  "exp2",
+       1167:  "cisco-ipsla",
+       1720:  "h323hostcall",
+       2049:  "nfs",
+       2225:  "rcip-itu",
+       2904:  "m2ua",
+       2905:  "m3ua",
+       2944:  "megaco-h248",
+       2945:  "h248-binary",
+       3097:  "itu-bicc-stc",
+       3565:  "m2pa",
+       3863:  "asap-sctp",
+       3864:  "asap-sctp-tls",
+       3868:  "diameter",
+       4333:  "ahsp",
+       4502:  "a25-fap-fgw",
+       4711:  "trinity-dist",
+       4739:  "ipfix",
+       4740:  "ipfixs",
+       5060:  "sip",
+       5061:  "sips",
+       5090:  "car",
+       5091:  "cxtp",
+       5215:  "noteza",
+       5445:  "smbdirect",
+       5672:  "amqp",
+       5675:  "v5ua",
+       5868:  "diameters",
+       5910:  "cm",
+       5911:  "cpdlc",
+       5912:  "fis",
+       5913:  "ads-c",
+       6704:  "frc-hp",
+       6705:  "frc-mp",
+       6706:  "frc-lp",
+       6970:  "conductor-mpx",
+       7626:  "simco",
+       7701:  "nfapi",
+       7728:  "osvr",
+       8471:  "pim-port",
+       9082:  "lcs-ap",
+       9084:  "aurora",
+       9900:  "iua",
+       9901:  "enrp-sctp",
+       9902:  "enrp-sctp-tls",
+       11997: "wmereceiving",
+       11998: "wmedistribution",
+       11999: "wmereporting",
+       14001: "sua",
+       20049: "nfsrdma",
+       25471: "rna",
+       29118: "sgsap",
+       29168: "sbcap",
+       29169: "iuhsctpassoc",
+       30100: "rwp",
+       36412: "s1-control",
+       36422: "x2-control",
+       36423: "slmap",
+       36424: "nq-ap",
+       36443: "m2ap",
+       36444: "m3ap",
+       36462: "xw-control",
+       38412: "ng-control",
+       38422: "xn-control",
+       38472: "f1-control",
+}
diff --git a/vendor/github.com/google/gopacket/layers/icmp4.go b/vendor/github.com/google/gopacket/layers/icmp4.go
new file mode 100644 (file)
index 0000000..bd3f03f
--- /dev/null
@@ -0,0 +1,267 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "reflect"
+
+       "github.com/google/gopacket"
+)
+
+const (
+       ICMPv4TypeEchoReply              = 0
+       ICMPv4TypeDestinationUnreachable = 3
+       ICMPv4TypeSourceQuench           = 4
+       ICMPv4TypeRedirect               = 5
+       ICMPv4TypeEchoRequest            = 8
+       ICMPv4TypeRouterAdvertisement    = 9
+       ICMPv4TypeRouterSolicitation     = 10
+       ICMPv4TypeTimeExceeded           = 11
+       ICMPv4TypeParameterProblem       = 12
+       ICMPv4TypeTimestampRequest       = 13
+       ICMPv4TypeTimestampReply         = 14
+       ICMPv4TypeInfoRequest            = 15
+       ICMPv4TypeInfoReply              = 16
+       ICMPv4TypeAddressMaskRequest     = 17
+       ICMPv4TypeAddressMaskReply       = 18
+)
+
+const (
+       // DestinationUnreachable
+       ICMPv4CodeNet                 = 0
+       ICMPv4CodeHost                = 1
+       ICMPv4CodeProtocol            = 2
+       ICMPv4CodePort                = 3
+       ICMPv4CodeFragmentationNeeded = 4
+       ICMPv4CodeSourceRoutingFailed = 5
+       ICMPv4CodeNetUnknown          = 6
+       ICMPv4CodeHostUnknown         = 7
+       ICMPv4CodeSourceIsolated      = 8
+       ICMPv4CodeNetAdminProhibited  = 9
+       ICMPv4CodeHostAdminProhibited = 10
+       ICMPv4CodeNetTOS              = 11
+       ICMPv4CodeHostTOS             = 12
+       ICMPv4CodeCommAdminProhibited = 13
+       ICMPv4CodeHostPrecedence      = 14
+       ICMPv4CodePrecedenceCutoff    = 15
+
+       // TimeExceeded
+       ICMPv4CodeTTLExceeded                    = 0
+       ICMPv4CodeFragmentReassemblyTimeExceeded = 1
+
+       // ParameterProblem
+       ICMPv4CodePointerIndicatesError = 0
+       ICMPv4CodeMissingOption         = 1
+       ICMPv4CodeBadLength             = 2
+
+       // Redirect
+       // ICMPv4CodeNet  = same as for DestinationUnreachable
+       // ICMPv4CodeHost = same as for DestinationUnreachable
+       ICMPv4CodeTOSNet  = 2
+       ICMPv4CodeTOSHost = 3
+)
+
+type icmpv4TypeCodeInfoStruct struct {
+       typeStr string
+       codeStr *map[uint8]string
+}
+
+var (
+       icmpv4TypeCodeInfo = map[uint8]icmpv4TypeCodeInfoStruct{
+               ICMPv4TypeDestinationUnreachable: icmpv4TypeCodeInfoStruct{
+                       "DestinationUnreachable", &map[uint8]string{
+                               ICMPv4CodeNet:                 "Net",
+                               ICMPv4CodeHost:                "Host",
+                               ICMPv4CodeProtocol:            "Protocol",
+                               ICMPv4CodePort:                "Port",
+                               ICMPv4CodeFragmentationNeeded: "FragmentationNeeded",
+                               ICMPv4CodeSourceRoutingFailed: "SourceRoutingFailed",
+                               ICMPv4CodeNetUnknown:          "NetUnknown",
+                               ICMPv4CodeHostUnknown:         "HostUnknown",
+                               ICMPv4CodeSourceIsolated:      "SourceIsolated",
+                               ICMPv4CodeNetAdminProhibited:  "NetAdminProhibited",
+                               ICMPv4CodeHostAdminProhibited: "HostAdminProhibited",
+                               ICMPv4CodeNetTOS:              "NetTOS",
+                               ICMPv4CodeHostTOS:             "HostTOS",
+                               ICMPv4CodeCommAdminProhibited: "CommAdminProhibited",
+                               ICMPv4CodeHostPrecedence:      "HostPrecedence",
+                               ICMPv4CodePrecedenceCutoff:    "PrecedenceCutoff",
+                       },
+               },
+               ICMPv4TypeTimeExceeded: icmpv4TypeCodeInfoStruct{
+                       "TimeExceeded", &map[uint8]string{
+                               ICMPv4CodeTTLExceeded:                    "TTLExceeded",
+                               ICMPv4CodeFragmentReassemblyTimeExceeded: "FragmentReassemblyTimeExceeded",
+                       },
+               },
+               ICMPv4TypeParameterProblem: icmpv4TypeCodeInfoStruct{
+                       "ParameterProblem", &map[uint8]string{
+                               ICMPv4CodePointerIndicatesError: "PointerIndicatesError",
+                               ICMPv4CodeMissingOption:         "MissingOption",
+                               ICMPv4CodeBadLength:             "BadLength",
+                       },
+               },
+               ICMPv4TypeSourceQuench: icmpv4TypeCodeInfoStruct{
+                       "SourceQuench", nil,
+               },
+               ICMPv4TypeRedirect: icmpv4TypeCodeInfoStruct{
+                       "Redirect", &map[uint8]string{
+                               ICMPv4CodeNet:     "Net",
+                               ICMPv4CodeHost:    "Host",
+                               ICMPv4CodeTOSNet:  "TOS+Net",
+                               ICMPv4CodeTOSHost: "TOS+Host",
+                       },
+               },
+               ICMPv4TypeEchoRequest: icmpv4TypeCodeInfoStruct{
+                       "EchoRequest", nil,
+               },
+               ICMPv4TypeEchoReply: icmpv4TypeCodeInfoStruct{
+                       "EchoReply", nil,
+               },
+               ICMPv4TypeTimestampRequest: icmpv4TypeCodeInfoStruct{
+                       "TimestampRequest", nil,
+               },
+               ICMPv4TypeTimestampReply: icmpv4TypeCodeInfoStruct{
+                       "TimestampReply", nil,
+               },
+               ICMPv4TypeInfoRequest: icmpv4TypeCodeInfoStruct{
+                       "InfoRequest", nil,
+               },
+               ICMPv4TypeInfoReply: icmpv4TypeCodeInfoStruct{
+                       "InfoReply", nil,
+               },
+               ICMPv4TypeRouterSolicitation: icmpv4TypeCodeInfoStruct{
+                       "RouterSolicitation", nil,
+               },
+               ICMPv4TypeRouterAdvertisement: icmpv4TypeCodeInfoStruct{
+                       "RouterAdvertisement", nil,
+               },
+               ICMPv4TypeAddressMaskRequest: icmpv4TypeCodeInfoStruct{
+                       "AddressMaskRequest", nil,
+               },
+               ICMPv4TypeAddressMaskReply: icmpv4TypeCodeInfoStruct{
+                       "AddressMaskReply", nil,
+               },
+       }
+)
+
+type ICMPv4TypeCode uint16
+
+// Type returns the ICMPv4 type field.
+func (a ICMPv4TypeCode) Type() uint8 {
+       return uint8(a >> 8)
+}
+
+// Code returns the ICMPv4 code field.
+func (a ICMPv4TypeCode) Code() uint8 {
+       return uint8(a)
+}
+
+func (a ICMPv4TypeCode) String() string {
+       t, c := a.Type(), a.Code()
+       strInfo, ok := icmpv4TypeCodeInfo[t]
+       if !ok {
+               // Unknown ICMPv4 type field
+               return fmt.Sprintf("%d(%d)", t, c)
+       }
+       typeStr := strInfo.typeStr
+       if strInfo.codeStr == nil && c == 0 {
+               // The ICMPv4 type does not make use of the code field
+               return fmt.Sprintf("%s", strInfo.typeStr)
+       }
+       if strInfo.codeStr == nil && c != 0 {
+               // The ICMPv4 type does not make use of the code field, but it is present anyway
+               return fmt.Sprintf("%s(Code: %d)", typeStr, c)
+       }
+       codeStr, ok := (*strInfo.codeStr)[c]
+       if !ok {
+               // We don't know this ICMPv4 code; print the numerical value
+               return fmt.Sprintf("%s(Code: %d)", typeStr, c)
+       }
+       return fmt.Sprintf("%s(%s)", typeStr, codeStr)
+}
+
+func (a ICMPv4TypeCode) GoString() string {
+       t := reflect.TypeOf(a)
+       return fmt.Sprintf("%s(%d, %d)", t.String(), a.Type(), a.Code())
+}
+
+// SerializeTo writes the ICMPv4TypeCode value to the 'bytes' buffer.
+func (a ICMPv4TypeCode) SerializeTo(bytes []byte) {
+       binary.BigEndian.PutUint16(bytes, uint16(a))
+}
+
+// CreateICMPv4TypeCode is a convenience function to create an ICMPv4TypeCode
+// gopacket type from the ICMPv4 type and code values.
+func CreateICMPv4TypeCode(typ uint8, code uint8) ICMPv4TypeCode {
+       return ICMPv4TypeCode(binary.BigEndian.Uint16([]byte{typ, code}))
+}
+
+// ICMPv4 is the layer for IPv4 ICMP packet data.
+type ICMPv4 struct {
+       BaseLayer
+       TypeCode ICMPv4TypeCode
+       Checksum uint16
+       Id       uint16
+       Seq      uint16
+}
+
+// LayerType returns LayerTypeICMPv4.
+func (i *ICMPv4) LayerType() gopacket.LayerType { return LayerTypeICMPv4 }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 8 {
+               df.SetTruncated()
+               return errors.New("ICMP layer less then 8 bytes for ICMPv4 packet")
+       }
+       i.TypeCode = CreateICMPv4TypeCode(data[0], data[1])
+       i.Checksum = binary.BigEndian.Uint16(data[2:4])
+       i.Id = binary.BigEndian.Uint16(data[4:6])
+       i.Seq = binary.BigEndian.Uint16(data[6:8])
+       i.BaseLayer = BaseLayer{data[:8], data[8:]}
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (i *ICMPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(8)
+       if err != nil {
+               return err
+       }
+       i.TypeCode.SerializeTo(bytes)
+       binary.BigEndian.PutUint16(bytes[4:], i.Id)
+       binary.BigEndian.PutUint16(bytes[6:], i.Seq)
+       if opts.ComputeChecksums {
+               bytes[2] = 0
+               bytes[3] = 0
+               i.Checksum = tcpipChecksum(b.Bytes(), 0)
+       }
+       binary.BigEndian.PutUint16(bytes[2:], i.Checksum)
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv4) CanDecode() gopacket.LayerClass {
+       return LayerTypeICMPv4
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv4) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+func decodeICMPv4(data []byte, p gopacket.PacketBuilder) error {
+       i := &ICMPv4{}
+       return decodingLayerDecoder(i, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/icmp6.go b/vendor/github.com/google/gopacket/layers/icmp6.go
new file mode 100644 (file)
index 0000000..03a3213
--- /dev/null
@@ -0,0 +1,231 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "reflect"
+
+       "github.com/google/gopacket"
+)
+
+const (
+       // The following are from RFC 4443
+       ICMPv6TypeDestinationUnreachable = 1
+       ICMPv6TypePacketTooBig           = 2
+       ICMPv6TypeTimeExceeded           = 3
+       ICMPv6TypeParameterProblem       = 4
+       ICMPv6TypeEchoRequest            = 128
+       ICMPv6TypeEchoReply              = 129
+       // The following are from RFC 4861
+       ICMPv6TypeRouterSolicitation    = 133
+       ICMPv6TypeRouterAdvertisement   = 134
+       ICMPv6TypeNeighborSolicitation  = 135
+       ICMPv6TypeNeighborAdvertisement = 136
+       ICMPv6TypeRedirect              = 137
+)
+
+const (
+       // DestinationUnreachable
+       ICMPv6CodeNoRouteToDst           = 0
+       ICMPv6CodeAdminProhibited        = 1
+       ICMPv6CodeBeyondScopeOfSrc       = 2
+       ICMPv6CodeAddressUnreachable     = 3
+       ICMPv6CodePortUnreachable        = 4
+       ICMPv6CodeSrcAddressFailedPolicy = 5
+       ICMPv6CodeRejectRouteToDst       = 6
+
+       // TimeExceeded
+       ICMPv6CodeHopLimitExceeded               = 0
+       ICMPv6CodeFragmentReassemblyTimeExceeded = 1
+
+       // ParameterProblem
+       ICMPv6CodeErroneousHeaderField   = 0
+       ICMPv6CodeUnrecognizedNextHeader = 1
+       ICMPv6CodeUnrecognizedIPv6Option = 2
+)
+
+type icmpv6TypeCodeInfoStruct struct {
+       typeStr string
+       codeStr *map[uint8]string
+}
+
+var (
+       icmpv6TypeCodeInfo = map[uint8]icmpv6TypeCodeInfoStruct{
+               ICMPv6TypeDestinationUnreachable: icmpv6TypeCodeInfoStruct{
+                       "DestinationUnreachable", &map[uint8]string{
+                               ICMPv6CodeNoRouteToDst:           "NoRouteToDst",
+                               ICMPv6CodeAdminProhibited:        "AdminProhibited",
+                               ICMPv6CodeBeyondScopeOfSrc:       "BeyondScopeOfSrc",
+                               ICMPv6CodeAddressUnreachable:     "AddressUnreachable",
+                               ICMPv6CodePortUnreachable:        "PortUnreachable",
+                               ICMPv6CodeSrcAddressFailedPolicy: "SrcAddressFailedPolicy",
+                               ICMPv6CodeRejectRouteToDst:       "RejectRouteToDst",
+                       },
+               },
+               ICMPv6TypePacketTooBig: icmpv6TypeCodeInfoStruct{
+                       "PacketTooBig", nil,
+               },
+               ICMPv6TypeTimeExceeded: icmpv6TypeCodeInfoStruct{
+                       "TimeExceeded", &map[uint8]string{
+                               ICMPv6CodeHopLimitExceeded:               "HopLimitExceeded",
+                               ICMPv6CodeFragmentReassemblyTimeExceeded: "FragmentReassemblyTimeExceeded",
+                       },
+               },
+               ICMPv6TypeParameterProblem: icmpv6TypeCodeInfoStruct{
+                       "ParameterProblem", &map[uint8]string{
+                               ICMPv6CodeErroneousHeaderField:   "ErroneousHeaderField",
+                               ICMPv6CodeUnrecognizedNextHeader: "UnrecognizedNextHeader",
+                               ICMPv6CodeUnrecognizedIPv6Option: "UnrecognizedIPv6Option",
+                       },
+               },
+               ICMPv6TypeEchoRequest: icmpv6TypeCodeInfoStruct{
+                       "EchoRequest", nil,
+               },
+               ICMPv6TypeEchoReply: icmpv6TypeCodeInfoStruct{
+                       "EchoReply", nil,
+               },
+               ICMPv6TypeRouterSolicitation: icmpv6TypeCodeInfoStruct{
+                       "RouterSolicitation", nil,
+               },
+               ICMPv6TypeRouterAdvertisement: icmpv6TypeCodeInfoStruct{
+                       "RouterAdvertisement", nil,
+               },
+               ICMPv6TypeNeighborSolicitation: icmpv6TypeCodeInfoStruct{
+                       "NeighborSolicitation", nil,
+               },
+               ICMPv6TypeNeighborAdvertisement: icmpv6TypeCodeInfoStruct{
+                       "NeighborAdvertisement", nil,
+               },
+               ICMPv6TypeRedirect: icmpv6TypeCodeInfoStruct{
+                       "Redirect", nil,
+               },
+       }
+)
+
+type ICMPv6TypeCode uint16
+
+// Type returns the ICMPv6 type field.
+func (a ICMPv6TypeCode) Type() uint8 {
+       return uint8(a >> 8)
+}
+
+// Code returns the ICMPv6 code field.
+func (a ICMPv6TypeCode) Code() uint8 {
+       return uint8(a)
+}
+
+func (a ICMPv6TypeCode) String() string {
+       t, c := a.Type(), a.Code()
+       strInfo, ok := icmpv6TypeCodeInfo[t]
+       if !ok {
+               // Unknown ICMPv6 type field
+               return fmt.Sprintf("%d(%d)", t, c)
+       }
+       typeStr := strInfo.typeStr
+       if strInfo.codeStr == nil && c == 0 {
+               // The ICMPv6 type does not make use of the code field
+               return fmt.Sprintf("%s", strInfo.typeStr)
+       }
+       if strInfo.codeStr == nil && c != 0 {
+               // The ICMPv6 type does not make use of the code field, but it is present anyway
+               return fmt.Sprintf("%s(Code: %d)", typeStr, c)
+       }
+       codeStr, ok := (*strInfo.codeStr)[c]
+       if !ok {
+               // We don't know this ICMPv6 code; print the numerical value
+               return fmt.Sprintf("%s(Code: %d)", typeStr, c)
+       }
+       return fmt.Sprintf("%s(%s)", typeStr, codeStr)
+}
+
+func (a ICMPv6TypeCode) GoString() string {
+       t := reflect.TypeOf(a)
+       return fmt.Sprintf("%s(%d, %d)", t.String(), a.Type(), a.Code())
+}
+
+// SerializeTo writes the ICMPv6TypeCode value to the 'bytes' buffer.
+func (a ICMPv6TypeCode) SerializeTo(bytes []byte) {
+       binary.BigEndian.PutUint16(bytes, uint16(a))
+}
+
+// CreateICMPv6TypeCode is a convenience function to create an ICMPv6TypeCode
+// gopacket type from the ICMPv6 type and code values.
+func CreateICMPv6TypeCode(typ uint8, code uint8) ICMPv6TypeCode {
+       return ICMPv6TypeCode(binary.BigEndian.Uint16([]byte{typ, code}))
+}
+
+// ICMPv6 is the layer for IPv6 ICMP packet data
+type ICMPv6 struct {
+       BaseLayer
+       TypeCode  ICMPv6TypeCode
+       Checksum  uint16
+       TypeBytes []byte
+       tcpipchecksum
+}
+
+// LayerType returns LayerTypeICMPv6.
+func (i *ICMPv6) LayerType() gopacket.LayerType { return LayerTypeICMPv6 }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 8 {
+               df.SetTruncated()
+               return errors.New("ICMP layer less then 8 bytes for ICMPv6 packet")
+       }
+       i.TypeCode = CreateICMPv6TypeCode(data[0], data[1])
+       i.Checksum = binary.BigEndian.Uint16(data[2:4])
+       i.TypeBytes = data[4:8]
+       i.BaseLayer = BaseLayer{data[:8], data[8:]}
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (i *ICMPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       if i.TypeBytes == nil {
+               i.TypeBytes = lotsOfZeros[:4]
+       } else if len(i.TypeBytes) != 4 {
+               return fmt.Errorf("invalid type bytes for ICMPv6 packet: %v", i.TypeBytes)
+       }
+       bytes, err := b.PrependBytes(8)
+       if err != nil {
+               return err
+       }
+       i.TypeCode.SerializeTo(bytes)
+       copy(bytes[4:8], i.TypeBytes)
+       if opts.ComputeChecksums {
+               bytes[2] = 0
+               bytes[3] = 0
+               csum, err := i.computeChecksum(b.Bytes(), IPProtocolICMPv6)
+               if err != nil {
+                       return err
+               }
+               i.Checksum = csum
+       }
+       binary.BigEndian.PutUint16(bytes[2:], i.Checksum)
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv6) CanDecode() gopacket.LayerClass {
+       return LayerTypeICMPv6
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv6) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+func decodeICMPv6(data []byte, p gopacket.PacketBuilder) error {
+       i := &ICMPv6{}
+       return decodingLayerDecoder(i, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/icmp6_test.go b/vendor/github.com/google/gopacket/layers/icmp6_test.go
new file mode 100644 (file)
index 0000000..4a6d248
--- /dev/null
@@ -0,0 +1,84 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "net"
+       "reflect"
+       "testing"
+)
+
+// testPacketICMPv6 is the packet:
+//   10:48:30.088384 IP6 2620:0:1005:0:26be:5ff:fe27:b17 > fe80::21f:caff:feb3:7640: ICMP6, neighbor advertisement, tgt is 2620:0:1005:0:26be:5ff:fe27:b17, length 24
+//      0x0000:  001f cab3 7640 24be 0527 0b17 86dd 6000  ....v@$..'....`.
+//      0x0010:  0000 0018 3aff 2620 0000 1005 0000 26be  ....:.&.......&.
+//      0x0020:  05ff fe27 0b17 fe80 0000 0000 0000 021f  ...'............
+//      0x0030:  caff feb3 7640 8800 1ed6 4000 0000 2620  ....v@....@...&.
+//      0x0040:  0000 1005 0000 26be 05ff fe27 0b17       ......&....'..
+var testPacketICMPv6 = []byte{
+       0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x86, 0xdd, 0x60, 0x00,
+       0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe,
+       0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f,
+       0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40, 0x88, 0x00, 0x1e, 0xd6, 0x40, 0x00, 0x00, 0x00, 0x26, 0x20,
+       0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17,
+}
+
+func TestPacketICMPv6(t *testing.T) {
+       p := gopacket.NewPacket(testPacketICMPv6, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, gopacket.LayerTypePayload}, t)
+       if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
+               want := &IPv6{
+                       BaseLayer: BaseLayer{
+                               Contents: []byte{0x60, 0x0, 0x0, 0x0, 0x0, 0x18,
+                                       0x3a, 0xff, 0x26, 0x20, 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5,
+                                       0xff, 0xfe, 0x27, 0xb, 0x17, 0xfe, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+                                       0x2, 0x1f, 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40},
+                               Payload: []byte{0x88, 0x0, 0x1e, 0xd6, 0x40, 0x0, 0x0, 0x0, 0x26, 0x20,
+                                       0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb,
+                                       0x17},
+                       },
+                       Version:      6,
+                       TrafficClass: 0,
+                       FlowLabel:    0,
+                       Length:       24,
+                       NextHeader:   IPProtocolICMPv6,
+                       HopLimit:     255,
+                       SrcIP:        net.IP{0x26, 0x20, 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb, 0x17},
+                       DstIP:        net.IP{0xfe, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x1f, 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40},
+               }
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("IPv6 packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No IPv6 layer type found in packet")
+       }
+       if got, ok := p.Layer(LayerTypeICMPv6).(*ICMPv6); ok {
+               want := &ICMPv6{
+                       BaseLayer: BaseLayer{
+                               Contents: []byte{0x88, 0x0, 0x1e, 0xd6, 0x40, 0x0, 0x0, 0x0},
+                               Payload: []byte{0x26, 0x20, 0x0, 0x0, 0x10,
+                                       0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb, 0x17},
+                       },
+                       TypeCode:  0x8800,
+                       Checksum:  0x1ed6,
+                       TypeBytes: []byte{0x40, 0x0, 0x0, 0x0},
+               }
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("ICMPv6 packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+               if got.TypeCode.String() != "NeighborAdvertisement" {
+                       t.Errorf("ICMPv6 type code, got %q want 'NeighborAdvertisement'", got.TypeCode.String())
+               }
+       } else {
+               t.Error("No ICMPv6 layer type found in packet")
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/igmp.go b/vendor/github.com/google/gopacket/layers/igmp.go
new file mode 100644 (file)
index 0000000..d008415
--- /dev/null
@@ -0,0 +1,355 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "net"
+       "time"
+
+       "github.com/google/gopacket"
+)
+
+type IGMPType uint8
+
+const (
+       IGMPMembershipQuery    IGMPType = 0x11 // General or group specific query
+       IGMPMembershipReportV1 IGMPType = 0x12 // Version 1 Membership Report
+       IGMPMembershipReportV2 IGMPType = 0x16 // Version 2 Membership Report
+       IGMPLeaveGroup         IGMPType = 0x17 // Leave Group
+       IGMPMembershipReportV3 IGMPType = 0x22 // Version 3 Membership Report
+)
+
+// String conversions for IGMP message types
+func (i IGMPType) String() string {
+       switch i {
+       case IGMPMembershipQuery:
+               return "IGMP Membership Query"
+       case IGMPMembershipReportV1:
+               return "IGMPv1 Membership Report"
+       case IGMPMembershipReportV2:
+               return "IGMPv2 Membership Report"
+       case IGMPMembershipReportV3:
+               return "IGMPv3 Membership Report"
+       case IGMPLeaveGroup:
+               return "Leave Group"
+       default:
+               return ""
+       }
+}
+
+type IGMPv3GroupRecordType uint8
+
+const (
+       IGMPIsIn  IGMPv3GroupRecordType = 0x01 // Type MODE_IS_INCLUDE, source addresses x
+       IGMPIsEx  IGMPv3GroupRecordType = 0x02 // Type MODE_IS_EXCLUDE, source addresses x
+       IGMPToIn  IGMPv3GroupRecordType = 0x03 // Type CHANGE_TO_INCLUDE_MODE, source addresses x
+       IGMPToEx  IGMPv3GroupRecordType = 0x04 // Type CHANGE_TO_EXCLUDE_MODE, source addresses x
+       IGMPAllow IGMPv3GroupRecordType = 0x05 // Type ALLOW_NEW_SOURCES, source addresses x
+       IGMPBlock IGMPv3GroupRecordType = 0x06 // Type BLOCK_OLD_SOURCES, source addresses x
+)
+
+func (i IGMPv3GroupRecordType) String() string {
+       switch i {
+       case IGMPIsIn:
+               return "MODE_IS_INCLUDE"
+       case IGMPIsEx:
+               return "MODE_IS_EXCLUDE"
+       case IGMPToIn:
+               return "CHANGE_TO_INCLUDE_MODE"
+       case IGMPToEx:
+               return "CHANGE_TO_EXCLUDE_MODE"
+       case IGMPAllow:
+               return "ALLOW_NEW_SOURCES"
+       case IGMPBlock:
+               return "BLOCK_OLD_SOURCES"
+       default:
+               return ""
+       }
+}
+
+// IGMP represents an IGMPv3 message.
+type IGMP struct {
+       BaseLayer
+       Type                    IGMPType
+       MaxResponseTime         time.Duration
+       Checksum                uint16
+       GroupAddress            net.IP
+       SupressRouterProcessing bool
+       RobustnessValue         uint8
+       IntervalTime            time.Duration
+       SourceAddresses         []net.IP
+       NumberOfGroupRecords    uint16
+       NumberOfSources         uint16
+       GroupRecords            []IGMPv3GroupRecord
+       Version                 uint8 // IGMP protocol version
+}
+
+// IGMPv1or2 stores header details for an IGMPv1 or IGMPv2 packet.
+//
+//  0                   1                   2                   3
+//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |      Type     | Max Resp Time |           Checksum            |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                         Group Address                         |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+type IGMPv1or2 struct {
+       BaseLayer
+       Type            IGMPType      // IGMP message type
+       MaxResponseTime time.Duration // meaningful only in Membership Query messages
+       Checksum        uint16        // 16-bit checksum of entire ip payload
+       GroupAddress    net.IP        // either 0 or an IP multicast address
+       Version         uint8
+}
+
+// decodeResponse dissects IGMPv1 or IGMPv2 packet.
+func (i *IGMPv1or2) decodeResponse(data []byte) error {
+       if len(data) < 8 {
+               return errors.New("IGMP packet too small")
+       }
+
+       i.MaxResponseTime = igmpTimeDecode(data[1])
+       i.Checksum = binary.BigEndian.Uint16(data[2:4])
+       i.GroupAddress = net.IP(data[4:8])
+
+       return nil
+}
+
+//  0                   1                   2                   3
+//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |  Type = 0x22  |    Reserved   |           Checksum            |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |           Reserved            |  Number of Group Records (M)  |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                                                               |
+// .                        Group Record [1]                       .
+// |                                                               |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                                                               |
+// .                        Group Record [2]                       .
+// |                                                               |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                                                               |
+// .                        Group Record [M]                       .
+// |                                                               |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |  Record Type  |  Aux Data Len |     Number of Sources (N)     |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                       Multicast Address                       |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                       Source Address [1]                      |
+// +-                                                             -+
+// |                       Source Address [2]                      |
+// +-                                                             -+
+// |                       Source Address [N]                      |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                                                               |
+// .                         Auxiliary Data                        .
+// |                                                               |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+// IGMPv3GroupRecord stores individual group records for a V3 Membership Report message.
+type IGMPv3GroupRecord struct {
+       Type             IGMPv3GroupRecordType
+       AuxDataLen       uint8 // this should always be 0 as per IGMPv3 spec.
+       NumberOfSources  uint16
+       MulticastAddress net.IP
+       SourceAddresses  []net.IP
+       AuxData          uint32 // NOT USED
+}
+
+func (i *IGMP) decodeIGMPv3MembershipReport(data []byte) error {
+       if len(data) < 8 {
+               return errors.New("IGMPv3 Membership Report too small #1")
+       }
+
+       i.Checksum = binary.BigEndian.Uint16(data[2:4])
+       i.NumberOfGroupRecords = binary.BigEndian.Uint16(data[6:8])
+
+       recordOffset := 8
+       for j := 0; j < int(i.NumberOfGroupRecords); j++ {
+               if len(data) < recordOffset+8 {
+                       return errors.New("IGMPv3 Membership Report too small #2")
+               }
+
+               var gr IGMPv3GroupRecord
+               gr.Type = IGMPv3GroupRecordType(data[recordOffset])
+               gr.AuxDataLen = data[recordOffset+1]
+               gr.NumberOfSources = binary.BigEndian.Uint16(data[recordOffset+2 : recordOffset+4])
+               gr.MulticastAddress = net.IP(data[recordOffset+4 : recordOffset+8])
+
+               if len(data) < recordOffset+8+int(gr.NumberOfSources)*4 {
+                       return errors.New("IGMPv3 Membership Report too small #3")
+               }
+
+               // append source address records.
+               for i := 0; i < int(gr.NumberOfSources); i++ {
+                       sourceAddr := net.IP(data[recordOffset+8+i*4 : recordOffset+12+i*4])
+                       gr.SourceAddresses = append(gr.SourceAddresses, sourceAddr)
+               }
+
+               i.GroupRecords = append(i.GroupRecords, gr)
+               recordOffset += 8 + 4*int(gr.NumberOfSources)
+       }
+       return nil
+}
+
+//  0                   1                   2                   3
+//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |  Type = 0x11  | Max Resp Code |           Checksum            |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                         Group Address                         |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Resv  |S| QRV |     QQIC      |     Number of Sources (N)     |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |                       Source Address [1]                      |
+// +-                                                             -+
+// |                       Source Address [2]                      |
+// +-                              .                              -+
+// |                       Source Address [N]                      |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+// decodeIGMPv3MembershipQuery parses the IGMPv3 message of type 0x11
+func (i *IGMP) decodeIGMPv3MembershipQuery(data []byte) error {
+       if len(data) < 12 {
+               return errors.New("IGMPv3 Membership Query too small #1")
+       }
+
+       i.MaxResponseTime = igmpTimeDecode(data[1])
+       i.Checksum = binary.BigEndian.Uint16(data[2:4])
+       i.SupressRouterProcessing = data[8]&0x8 != 0
+       i.GroupAddress = net.IP(data[4:8])
+       i.RobustnessValue = data[8] & 0x7
+       i.IntervalTime = igmpTimeDecode(data[9])
+       i.NumberOfSources = binary.BigEndian.Uint16(data[10:12])
+
+       if len(data) < 12+int(i.NumberOfSources)*4 {
+               return errors.New("IGMPv3 Membership Query too small #2")
+       }
+
+       for j := 0; j < int(i.NumberOfSources); j++ {
+               i.SourceAddresses = append(i.SourceAddresses, net.IP(data[12+j*4:16+j*4]))
+       }
+
+       return nil
+}
+
+// igmpTimeDecode decodes the duration created by the given byte, using the
+// algorithm in http://www.rfc-base.org/txt/rfc-3376.txt section 4.1.1.
+func igmpTimeDecode(t uint8) time.Duration {
+       if t&0x80 == 0 {
+               return time.Millisecond * 100 * time.Duration(t)
+       }
+       mant := (t & 0x70) >> 4
+       exp := t & 0x0F
+       return time.Millisecond * 100 * time.Duration((mant|0x10)<<(exp+3))
+}
+
+// LayerType returns LayerTypeIGMP for the V1,2,3 message protocol formats.
+func (i *IGMP) LayerType() gopacket.LayerType      { return LayerTypeIGMP }
+func (i *IGMPv1or2) LayerType() gopacket.LayerType { return LayerTypeIGMP }
+
+func (i *IGMPv1or2) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 8 {
+               return errors.New("IGMP Packet too small")
+       }
+
+       i.Type = IGMPType(data[0])
+       i.MaxResponseTime = igmpTimeDecode(data[1])
+       i.Checksum = binary.BigEndian.Uint16(data[2:4])
+       i.GroupAddress = net.IP(data[4:8])
+
+       return nil
+}
+
+func (i *IGMPv1or2) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypeZero
+}
+
+func (i *IGMPv1or2) CanDecode() gopacket.LayerClass {
+       return LayerTypeIGMP
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *IGMP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 1 {
+               return errors.New("IGMP packet is too small")
+       }
+
+       // common IGMP header values between versions 1..3 of IGMP specification..
+       i.Type = IGMPType(data[0])
+
+       switch i.Type {
+       case IGMPMembershipQuery:
+               i.decodeIGMPv3MembershipQuery(data)
+       case IGMPMembershipReportV3:
+               i.decodeIGMPv3MembershipReport(data)
+       default:
+               return errors.New("unsupported IGMP type")
+       }
+
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *IGMP) CanDecode() gopacket.LayerClass {
+       return LayerTypeIGMP
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *IGMP) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypeZero
+}
+
+// decodeIGMP will parse IGMP v1,2 or 3 protocols. Checks against the
+// IGMP type are performed against byte[0], logic then iniitalizes and
+// passes the appropriate struct (IGMP or IGMPv1or2) to
+// decodingLayerDecoder.
+func decodeIGMP(data []byte, p gopacket.PacketBuilder) error {
+       if len(data) < 1 {
+               return errors.New("IGMP packet is too small")
+       }
+
+       // byte 0 contains IGMP message type.
+       switch IGMPType(data[0]) {
+       case IGMPMembershipQuery:
+               // IGMPv3 Membership Query payload is >= 12
+               if len(data) >= 12 {
+                       i := &IGMP{Version: 3}
+                       return decodingLayerDecoder(i, data, p)
+               } else if len(data) == 8 {
+                       i := &IGMPv1or2{}
+                       if data[1] == 0x00 {
+                               i.Version = 1 // IGMPv1 has a query length of 8 and MaxResp = 0
+                       } else {
+                               i.Version = 2 // IGMPv2 has a query length of 8 and MaxResp != 0
+                       }
+
+                       return decodingLayerDecoder(i, data, p)
+               }
+       case IGMPMembershipReportV3:
+               i := &IGMP{Version: 3}
+               return decodingLayerDecoder(i, data, p)
+       case IGMPMembershipReportV1:
+               i := &IGMPv1or2{Version: 1}
+               return decodingLayerDecoder(i, data, p)
+       case IGMPLeaveGroup, IGMPMembershipReportV2:
+               // leave group and Query Report v2 used in IGMPv2 only.
+               i := &IGMPv1or2{Version: 2}
+               return decodingLayerDecoder(i, data, p)
+       default:
+       }
+
+       return errors.New("Unable to determine IGMP type.")
+}
diff --git a/vendor/github.com/google/gopacket/layers/igmp_test.go b/vendor/github.com/google/gopacket/layers/igmp_test.go
new file mode 100644 (file)
index 0000000..923356d
--- /dev/null
@@ -0,0 +1,171 @@
+// Copyright 2016, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+// igmpv1MembershipReportPacket is the packet:
+//   02:45:36.033916 IP 10.60.0.132 > 224.0.1.60: igmp v1 report 224.0.1.60
+//     0x0000:  0100 5e00 013c 0030 c1bf 5755 0800 4500  ..^..<.0..WU..E.
+//     0x0010:  001c 6a7f 0000 0102 6365 0a3c 0084 e000  ..j.....ce.<....
+//     0x0020:  013c 1200 0cc3 e000 013c 0000 0000 0000  .<.......<......
+//     0x0030:  ffff ffff ffff 0452 0000 0000            .......R....
+var igmpv1MembershipReportPacket = []byte{
+       0x01, 0x00, 0x5e, 0x00, 0x01, 0x3c, 0x00, 0x30, 0xc1, 0xbf, 0x57, 0x55, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x1c, 0x6a, 0x7f, 0x00, 0x00, 0x01, 0x02, 0x63, 0x65, 0x0a, 0x3c, 0x00, 0x84, 0xe0, 0x00,
+       0x01, 0x3c, 0x12, 0x00, 0x0c, 0xc3, 0xe0, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x52, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestIGMPv1MembershipReportPacket(t *testing.T) {
+       p := gopacket.NewPacket(igmpv1MembershipReportPacket, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+       igmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2)
+       if igmp.Type != IGMPMembershipReportV1 {
+               t.Fatal("Invalid IGMP type")
+       }
+}
+
+func BenchmarkDecodeigmpv1MembershipReportPacket(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(igmpv1MembershipReportPacket, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// igmpv2MembershipQueryPacket is the packet:
+//   02:45:28.071636 IP 10.60.0.189 > 224.0.0.1: igmp query v2
+//     0x0000:  0100 5e00 0001 0001 636f c800 0800 45c0  ..^.....co....E.
+//     0x0010:  001c 0153 0000 0102 ccd3 0a3c 00bd e000  ...S.......<....
+//     0x0020:  0001 1164 ee9b 0000 0000 0000 0000 0000  ...d............
+//     0x0030:  0000 0000 0000 0000 0000 0000            ............
+var igmpv2MembershipQueryPacket = []byte{
+       0x01, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x01, 0x63, 0x6f, 0xc8, 0x00, 0x08, 0x00, 0x45, 0xc0,
+       0x00, 0x1c, 0x01, 0x53, 0x00, 0x00, 0x01, 0x02, 0xcc, 0xd3, 0x0a, 0x3c, 0x00, 0xbd, 0xe0, 0x00,
+       0x00, 0x01, 0x11, 0x64, 0xee, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestIGMPv2MembershipQuery(t *testing.T) {
+       p := gopacket.NewPacket(igmpv2MembershipQueryPacket, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+       igmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2)
+       if igmp.Type != IGMPMembershipQuery {
+               t.Fatal("Invalid IGMP type")
+       }
+}
+func BenchmarkDecodeigmpv2MembershipQueryPacket(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(igmpv2MembershipQueryPacket, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// igmpv2MembershipReportPacket is the packet:
+//   02:47:32.417288 IP 10.60.5.103 > 239.255.255.253: igmp v2 report 239.255.255.253
+//     0x0000:  0100 5e7f fffd 0015 58dc d9f6 0800 4600  ..^.....X.....F.
+//     0x0010:  0020 79f0 0000 0102 ab47 0a3c 0567 efff  ..y......G.<.g..
+//     0x0020:  fffd 9404 0000 1600 fa01 efff fffd 0000  ................
+//     0x0030:  0000 0000 0000 0000 0000 0000            ............
+var igmpv2MembershipReportPacket = []byte{
+       0x01, 0x00, 0x5e, 0x7f, 0xff, 0xfd, 0x00, 0x15, 0x58, 0xdc, 0xd9, 0xf6, 0x08, 0x00, 0x46, 0x00,
+       0x00, 0x20, 0x79, 0xf0, 0x00, 0x00, 0x01, 0x02, 0xab, 0x47, 0x0a, 0x3c, 0x05, 0x67, 0xef, 0xff,
+       0xff, 0xfd, 0x94, 0x04, 0x00, 0x00, 0x16, 0x00, 0xfa, 0x01, 0xef, 0xff, 0xff, 0xfd, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestIGMPv2MembershipReport(t *testing.T) {
+       p := gopacket.NewPacket(igmpv2MembershipReportPacket, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+       igmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2)
+       if igmp.Type != IGMPMembershipReportV2 {
+               t.Fatal("Invalid IGMP type")
+       }
+}
+func BenchmarkDecodeigmpv2MembershipReportPacket(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(igmpv2MembershipReportPacket, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// igmp3v3MembershipQueryPacket is the packet:
+//   10:07:30.488511 IP 192.168.1.254 > 224.0.0.1: igmp query v3 [max resp time 2.4s]
+//      0x0000:  0100 5e00 0001 0026 446c 1eda 0800 46c0  ..^....&Dl....F.
+//      0x0010:  0024 17f1 4000 0102 297b c0a8 01fe e000  .$..@...){......
+//      0x0020:  0001 9404 0000 1118 ecd3 0000 0000 0214  ................
+//      0x0030:  0000 0000 0000 0000 0000 0000            ............
+var igmp3v3MembershipQueryPacket = []byte{
+       0x01, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x26, 0x44, 0x6c, 0x1e, 0xda, 0x08, 0x00, 0x46, 0xc0,
+       0x00, 0x24, 0x17, 0xf1, 0x40, 0x00, 0x01, 0x02, 0x29, 0x7b, 0xc0, 0xa8, 0x01, 0xfe, 0xe0, 0x00,
+       0x00, 0x01, 0x94, 0x04, 0x00, 0x00, 0x11, 0x18, 0xec, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestIGMPv3MembershipQuery(t *testing.T) {
+       p := gopacket.NewPacket(igmp3v3MembershipQueryPacket, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+       igmp := p.Layer(LayerTypeIGMP).(*IGMP)
+       if igmp.Type != IGMPMembershipQuery {
+               t.Fatal("Invalid IGMP type")
+       }
+}
+
+func BenchmarkDecodeigmp3v3MembershipQueryPacket(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(igmp3v3MembershipQueryPacket, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// igmpv3MembershipReport2Records is the packet:
+//   10:07:29.756202 IP 192.168.1.66 > 224.0.0.22: igmp v3 report, 2 group record(s)
+//      0x0000:  0100 5e00 0016 0025 2e51 c381 0800 4658  ..^....%.Q....FX
+//      0x0010:  0030 013c 0000 0102 8133 c0a8 0142 e000  .0.<.....3...B..
+//      0x0020:  0016 9404 0000 2200 f33c 0000 0002 0200  ......"..<......
+//      0x0030:  0000 efc3 0702 0200 0000 efff fffa       ..............
+var igmpv3MembershipReport2Records = []byte{
+       0x01, 0x00, 0x5e, 0x00, 0x00, 0x16, 0x00, 0x25, 0x2e, 0x51, 0xc3, 0x81, 0x08, 0x00, 0x46, 0x58,
+       0x00, 0x30, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x02, 0x81, 0x33, 0xc0, 0xa8, 0x01, 0x42, 0xe0, 0x00,
+       0x00, 0x16, 0x94, 0x04, 0x00, 0x00, 0x22, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00,
+       0x00, 0x00, 0xef, 0xc3, 0x07, 0x02, 0x02, 0x00, 0x00, 0x00, 0xef, 0xff, 0xff, 0xfa,
+}
+
+func TestIGMPv3MembershipReport2Records(t *testing.T) {
+       p := gopacket.NewPacket(igmpv3MembershipReport2Records, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t)
+
+       igmp := p.Layer(LayerTypeIGMP).(*IGMP)
+       if igmp.Type != IGMPMembershipReportV3 {
+               t.Fatal("Invalid IGMP type")
+       }
+}
+
+func BenchmarkDecodeigmpv3MembershipReport2Records(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(igmpv3MembershipReport2Records, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ip4.go b/vendor/github.com/google/gopacket/layers/ip4.go
new file mode 100644 (file)
index 0000000..3f31b27
--- /dev/null
@@ -0,0 +1,311 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "net"
+       "strings"
+
+       "github.com/google/gopacket"
+)
+
+type IPv4Flag uint8
+
+const (
+       IPv4EvilBit       IPv4Flag = 1 << 2 // http://tools.ietf.org/html/rfc3514 ;)
+       IPv4DontFragment  IPv4Flag = 1 << 1
+       IPv4MoreFragments IPv4Flag = 1 << 0
+)
+
+func (f IPv4Flag) String() string {
+       var s []string
+       if f&IPv4EvilBit != 0 {
+               s = append(s, "Evil")
+       }
+       if f&IPv4DontFragment != 0 {
+               s = append(s, "DF")
+       }
+       if f&IPv4MoreFragments != 0 {
+               s = append(s, "MF")
+       }
+       return strings.Join(s, "|")
+}
+
+// IPv4 is the header of an IP packet.
+type IPv4 struct {
+       BaseLayer
+       Version    uint8
+       IHL        uint8
+       TOS        uint8
+       Length     uint16
+       Id         uint16
+       Flags      IPv4Flag
+       FragOffset uint16
+       TTL        uint8
+       Protocol   IPProtocol
+       Checksum   uint16
+       SrcIP      net.IP
+       DstIP      net.IP
+       Options    []IPv4Option
+       Padding    []byte
+}
+
+// LayerType returns LayerTypeIPv4
+func (i *IPv4) LayerType() gopacket.LayerType { return LayerTypeIPv4 }
+func (i *IPv4) NetworkFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointIPv4, i.SrcIP, i.DstIP)
+}
+
+type IPv4Option struct {
+       OptionType   uint8
+       OptionLength uint8
+       OptionData   []byte
+}
+
+func (i IPv4Option) String() string {
+       return fmt.Sprintf("IPv4Option(%v:%v)", i.OptionType, i.OptionData)
+}
+
+// for the current ipv4 options, return the number of bytes (including
+// padding that the options used)
+func (ip *IPv4) getIPv4OptionSize() uint8 {
+       optionSize := uint8(0)
+       for _, opt := range ip.Options {
+               switch opt.OptionType {
+               case 0:
+                       // this is the end of option lists
+                       optionSize++
+               case 1:
+                       // this is the padding
+                       optionSize++
+               default:
+                       optionSize += opt.OptionLength
+
+               }
+       }
+       // make sure the options are aligned to 32 bit boundary
+       if (optionSize % 4) != 0 {
+               optionSize += 4 - (optionSize % 4)
+       }
+       return optionSize
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+func (ip *IPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       optionLength := ip.getIPv4OptionSize()
+       bytes, err := b.PrependBytes(20 + int(optionLength))
+       if err != nil {
+               return err
+       }
+       if opts.FixLengths {
+               ip.IHL = 5 + (optionLength / 4)
+               ip.Length = uint16(len(b.Bytes()))
+       }
+       bytes[0] = (ip.Version << 4) | ip.IHL
+       bytes[1] = ip.TOS
+       binary.BigEndian.PutUint16(bytes[2:], ip.Length)
+       binary.BigEndian.PutUint16(bytes[4:], ip.Id)
+       binary.BigEndian.PutUint16(bytes[6:], ip.flagsfrags())
+       bytes[8] = ip.TTL
+       bytes[9] = byte(ip.Protocol)
+       if err := ip.AddressTo4(); err != nil {
+               return err
+       }
+       copy(bytes[12:16], ip.SrcIP)
+       copy(bytes[16:20], ip.DstIP)
+
+       curLocation := 20
+       // Now, we will encode the options
+       for _, opt := range ip.Options {
+               switch opt.OptionType {
+               case 0:
+                       // this is the end of option lists
+                       bytes[curLocation] = 0
+                       curLocation++
+               case 1:
+                       // this is the padding
+                       bytes[curLocation] = 1
+                       curLocation++
+               default:
+                       bytes[curLocation] = opt.OptionType
+                       bytes[curLocation+1] = opt.OptionLength
+
+                       // sanity checking to protect us from buffer overrun
+                       if len(opt.OptionData) > int(opt.OptionLength-2) {
+                               return errors.New("option length is smaller than length of option data")
+                       }
+                       copy(bytes[curLocation+2:curLocation+int(opt.OptionLength)], opt.OptionData)
+                       curLocation += int(opt.OptionLength)
+               }
+       }
+
+       if opts.ComputeChecksums {
+               ip.Checksum = checksum(bytes)
+       }
+       binary.BigEndian.PutUint16(bytes[10:], ip.Checksum)
+       return nil
+}
+
+func checksum(bytes []byte) uint16 {
+       // Clear checksum bytes
+       bytes[10] = 0
+       bytes[11] = 0
+
+       // Compute checksum
+       var csum uint32
+       for i := 0; i < len(bytes); i += 2 {
+               csum += uint32(bytes[i]) << 8
+               csum += uint32(bytes[i+1])
+       }
+       for {
+               // Break when sum is less or equals to 0xFFFF
+               if csum <= 65535 {
+                       break
+               }
+               // Add carry to the sum
+               csum = (csum >> 16) + uint32(uint16(csum))
+       }
+       // Flip all the bits
+       return ^uint16(csum)
+}
+
+func (ip *IPv4) flagsfrags() (ff uint16) {
+       ff |= uint16(ip.Flags) << 13
+       ff |= ip.FragOffset
+       return
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (ip *IPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       flagsfrags := binary.BigEndian.Uint16(data[6:8])
+
+       ip.Version = uint8(data[0]) >> 4
+       ip.IHL = uint8(data[0]) & 0x0F
+       ip.TOS = data[1]
+       ip.Length = binary.BigEndian.Uint16(data[2:4])
+       ip.Id = binary.BigEndian.Uint16(data[4:6])
+       ip.Flags = IPv4Flag(flagsfrags >> 13)
+       ip.FragOffset = flagsfrags & 0x1FFF
+       ip.TTL = data[8]
+       ip.Protocol = IPProtocol(data[9])
+       ip.Checksum = binary.BigEndian.Uint16(data[10:12])
+       ip.SrcIP = data[12:16]
+       ip.DstIP = data[16:20]
+       ip.Options = ip.Options[:0]
+       // Set up an initial guess for contents/payload... we'll reset these soon.
+       ip.BaseLayer = BaseLayer{Contents: data}
+
+       // This code is added for the following enviroment:
+       // * Windows 10 with TSO option activated. ( tested on Hyper-V, RealTek ethernet driver )
+       if ip.Length == 0 {
+               // If using TSO(TCP Segmentation Offload), length is zero.
+               // The actual packet length is the length of data.
+               ip.Length = uint16(len(data))
+       }
+
+       if ip.Length < 20 {
+               return fmt.Errorf("Invalid (too small) IP length (%d < 20)", ip.Length)
+       } else if ip.IHL < 5 {
+               return fmt.Errorf("Invalid (too small) IP header length (%d < 5)", ip.IHL)
+       } else if int(ip.IHL*4) > int(ip.Length) {
+               return fmt.Errorf("Invalid IP header length > IP length (%d > %d)", ip.IHL, ip.Length)
+       }
+       if cmp := len(data) - int(ip.Length); cmp > 0 {
+               data = data[:ip.Length]
+       } else if cmp < 0 {
+               df.SetTruncated()
+               if int(ip.IHL)*4 > len(data) {
+                       return errors.New("Not all IP header bytes available")
+               }
+       }
+       ip.Contents = data[:ip.IHL*4]
+       ip.Payload = data[ip.IHL*4:]
+       // From here on, data contains the header options.
+       data = data[20 : ip.IHL*4]
+       // Pull out IP options
+       for len(data) > 0 {
+               if ip.Options == nil {
+                       // Pre-allocate to avoid growing the slice too much.
+                       ip.Options = make([]IPv4Option, 0, 4)
+               }
+               opt := IPv4Option{OptionType: data[0]}
+               switch opt.OptionType {
+               case 0: // End of options
+                       opt.OptionLength = 1
+                       ip.Options = append(ip.Options, opt)
+                       ip.Padding = data[1:]
+                       break
+               case 1: // 1 byte padding
+                       opt.OptionLength = 1
+               default:
+                       opt.OptionLength = data[1]
+                       opt.OptionData = data[2:opt.OptionLength]
+               }
+               if len(data) >= int(opt.OptionLength) {
+                       data = data[opt.OptionLength:]
+               } else {
+                       return fmt.Errorf("IP option length exceeds remaining IP header size, option type %v length %v", opt.OptionType, opt.OptionLength)
+               }
+               ip.Options = append(ip.Options, opt)
+       }
+       return nil
+}
+
+func (i *IPv4) CanDecode() gopacket.LayerClass {
+       return LayerTypeIPv4
+}
+
+func (i *IPv4) NextLayerType() gopacket.LayerType {
+       if i.Flags&IPv4MoreFragments != 0 || i.FragOffset != 0 {
+               return gopacket.LayerTypeFragment
+       }
+       return i.Protocol.LayerType()
+}
+
+func decodeIPv4(data []byte, p gopacket.PacketBuilder) error {
+       ip := &IPv4{}
+       err := ip.DecodeFromBytes(data, p)
+       p.AddLayer(ip)
+       p.SetNetworkLayer(ip)
+       if err != nil {
+               return err
+       }
+       return p.NextDecoder(ip.NextLayerType())
+}
+
+func checkIPv4Address(addr net.IP) (net.IP, error) {
+       if c := addr.To4(); c != nil {
+               return c, nil
+       }
+       if len(addr) == net.IPv6len {
+               return nil, errors.New("address is IPv6")
+       }
+       return nil, fmt.Errorf("wrong length of %d bytes instead of %d", len(addr), net.IPv4len)
+}
+
+func (ip *IPv4) AddressTo4() error {
+       var src, dst net.IP
+
+       if addr, err := checkIPv4Address(ip.SrcIP); err != nil {
+               return fmt.Errorf("Invalid source IPv4 address (%s)", err)
+       } else {
+               src = addr
+       }
+       if addr, err := checkIPv4Address(ip.DstIP); err != nil {
+               return fmt.Errorf("Invalid destination IPv4 address (%s)", err)
+       } else {
+               dst = addr
+       }
+       ip.SrcIP = src
+       ip.DstIP = dst
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/ip4_test.go b/vendor/github.com/google/gopacket/layers/ip4_test.go
new file mode 100644 (file)
index 0000000..ec6b351
--- /dev/null
@@ -0,0 +1,131 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This file tests some of the functionality provided in the ip4.go
+
+package layers
+
+import (
+       "encoding/binary"
+       "encoding/hex"
+       "net"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+// Test the function getIPv4OptionSize when the ipv4 has no options
+func TestGetIPOptLengthNoOpt(t *testing.T) {
+       ip := IPv4{}
+       length := ip.getIPv4OptionSize()
+       if length != 0 {
+               t.Fatalf("Empty option list should have 0 length.  Actual %d", length)
+       }
+}
+
+// Test the function getIPv4OptionSize when the ipv4 has end of list option
+func TestGetIPOptLengthEndOfList(t *testing.T) {
+       ip := IPv4{}
+       ip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1})
+       length := ip.getIPv4OptionSize()
+       if length != 4 {
+               t.Fatalf("After padding, the list should have 4 length.  Actual %d", length)
+       }
+}
+
+// Test the function getIPv4OptionSize when the ipv4 has padding and end of list option
+func TestGetIPOptLengthPaddingEndOfList(t *testing.T) {
+       ip := IPv4{}
+       ip.Options = append(ip.Options, IPv4Option{OptionType: 1, OptionLength: 1})
+       ip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1})
+       length := ip.getIPv4OptionSize()
+       if length != 4 {
+               t.Fatalf("After padding, the list should have 4 length.  Actual %d", length)
+       }
+}
+
+// Test the function getIPv4OptionSize when the ipv4 has some non-trivial option and end of list option
+func TestGetIPOptLengthOptionEndOfList(t *testing.T) {
+       ip := IPv4{}
+       someByte := make([]byte, 8)
+       ip.Options = append(ip.Options, IPv4Option{OptionType: 2, OptionLength: 10, OptionData: someByte})
+       ip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1})
+       length := ip.getIPv4OptionSize()
+       if length != 12 {
+               t.Fatalf("The list should have 12 length.  Actual %d", length)
+       }
+}
+
+// Tests that the Options slice is properly reset before parsing new data
+func TestIPOptResetDuringDecoding(t *testing.T) {
+       ip := &IPv4{
+               Options: []IPv4Option{{OptionType: 42, OptionLength: 4, OptionData: make([]byte, 2)}},
+       }
+
+       ipWithoutOptions := &IPv4{
+               SrcIP:    net.IPv4(192, 168, 1, 1),
+               DstIP:    net.IPv4(192, 168, 1, 1),
+               Protocol: IPProtocolTCP,
+       }
+
+       ipBytes, err := serialize(ipWithoutOptions)
+
+       if err != nil {
+               t.Fatalf("Failed to serialize ip layer: %v", err)
+       }
+
+       err = ip.DecodeFromBytes(ipBytes, gopacket.NilDecodeFeedback)
+
+       if err != nil {
+               t.Fatalf("Failed to deserialize ip layer: %v", err)
+       }
+
+       if len(ip.Options) > 0 {
+               t.Fatalf("Options slice has stale data from previous packet")
+       }
+
+}
+
+func serialize(ip *IPv4) ([]byte, error) {
+       buffer := gopacket.NewSerializeBuffer()
+       err := ip.SerializeTo(buffer, gopacket.SerializeOptions{
+               FixLengths:       true,
+               ComputeChecksums: true,
+       })
+       return buffer.Bytes(), err
+}
+
+// Test the function checksum
+func TestChecksum(t *testing.T) {
+       testData := []struct {
+               name   string
+               header string
+               want   string
+       }{{
+               name:   "sum has two carries",
+               header: "4540005800000000ff11ffff0aeb1d070aed8877",
+               want:   "fffe",
+       }, {
+               name:   "wikipedia case",
+               header: "45000073000040004011b861c0a80001c0a800c7",
+               want:   "b861",
+       }}
+
+       for _, test := range testData {
+               bytes, err := hex.DecodeString(test.header)
+               if err != nil {
+                       t.Fatalf("Failed to Decode header: %v", err)
+               }
+               wantBytes, err := hex.DecodeString(test.want)
+               if err != nil {
+                       t.Fatalf("Failed to decode want checksum: %v", err)
+               }
+
+               if got, want := checksum(bytes), binary.BigEndian.Uint16(wantBytes); got != want {
+                       t.Errorf("In test %q, got incorrect checksum: got(%x), want(%x)", test.name, got, want)
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ip6.go b/vendor/github.com/google/gopacket/layers/ip6.go
new file mode 100644 (file)
index 0000000..b5befe9
--- /dev/null
@@ -0,0 +1,650 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "net"
+
+       "github.com/google/gopacket"
+)
+
+const (
+       IPv6HopByHopOptionJumbogram = 0xC2 // RFC 2675
+)
+
+const (
+       ipv6MaxPayloadLength = 65535
+)
+
+// IPv6 is the layer for the IPv6 header.
+type IPv6 struct {
+       // http://www.networksorcery.com/enp/protocol/ipv6.htm
+       BaseLayer
+       Version      uint8
+       TrafficClass uint8
+       FlowLabel    uint32
+       Length       uint16
+       NextHeader   IPProtocol
+       HopLimit     uint8
+       SrcIP        net.IP
+       DstIP        net.IP
+       HopByHop     *IPv6HopByHop
+       // hbh will be pointed to by HopByHop if that layer exists.
+       hbh IPv6HopByHop
+}
+
+// LayerType returns LayerTypeIPv6
+func (i *IPv6) LayerType() gopacket.LayerType { return LayerTypeIPv6 }
+
+func (i *IPv6) NetworkFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointIPv6, i.SrcIP, i.DstIP)
+}
+
+// Search for Jumbo Payload TLV in IPv6HopByHop and return (length, true) if found
+func getIPv6HopByHopJumboLength(hopopts *IPv6HopByHop) (uint32, bool, error) {
+       var tlv *IPv6HopByHopOption
+
+       for _, t := range hopopts.Options {
+               if t.OptionType == IPv6HopByHopOptionJumbogram {
+                       tlv = t
+                       break
+               }
+       }
+       if tlv == nil {
+               // Not found
+               return 0, false, nil
+       }
+       if len(tlv.OptionData) != 4 {
+               return 0, false, errors.New("Jumbo length TLV data must have length 4")
+       }
+       l := binary.BigEndian.Uint32(tlv.OptionData)
+       if l <= ipv6MaxPayloadLength {
+               return 0, false, fmt.Errorf("Jumbo length cannot be less than %d", ipv6MaxPayloadLength+1)
+       }
+       // Found
+       return l, true, nil
+}
+
+// Adds zero-valued Jumbo TLV to IPv6 header if it does not exist
+// (if necessary add hop-by-hop header)
+func addIPv6JumboOption(ip6 *IPv6) {
+       var tlv *IPv6HopByHopOption
+
+       if ip6.HopByHop == nil {
+               // Add IPv6 HopByHop
+               ip6.HopByHop = &IPv6HopByHop{}
+               ip6.HopByHop.NextHeader = ip6.NextHeader
+               ip6.HopByHop.HeaderLength = 0
+               ip6.NextHeader = IPProtocolIPv6HopByHop
+       }
+       for _, t := range ip6.HopByHop.Options {
+               if t.OptionType == IPv6HopByHopOptionJumbogram {
+                       tlv = t
+                       break
+               }
+       }
+       if tlv == nil {
+               // Add Jumbo TLV
+               tlv = &IPv6HopByHopOption{}
+               ip6.HopByHop.Options = append(ip6.HopByHop.Options, tlv)
+       }
+       tlv.SetJumboLength(0)
+}
+
+// Set jumbo length in serialized IPv6 payload (starting with HopByHop header)
+func setIPv6PayloadJumboLength(hbh []byte) error {
+       pLen := len(hbh)
+       if pLen < 8 {
+               //HopByHop is minimum 8 bytes
+               return fmt.Errorf("Invalid IPv6 payload (length %d)", pLen)
+       }
+       hbhLen := int((hbh[1] + 1) * 8)
+       if hbhLen > pLen {
+               return fmt.Errorf("Invalid hop-by-hop length (length: %d, payload: %d", hbhLen, pLen)
+       }
+       offset := 2 //start with options
+       for offset < hbhLen {
+               opt := hbh[offset]
+               if opt == 0 {
+                       //Pad1
+                       offset += 1
+                       continue
+               }
+               optLen := int(hbh[offset+1])
+               if opt == IPv6HopByHopOptionJumbogram {
+                       if optLen == 4 {
+                               binary.BigEndian.PutUint32(hbh[offset+2:], uint32(pLen))
+                               return nil
+                       }
+                       return fmt.Errorf("Jumbo TLV too short (%d bytes)", optLen)
+               }
+               offset += 2 + optLen
+       }
+       return errors.New("Jumbo TLV not found")
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (ip6 *IPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       var jumbo bool
+       var err error
+
+       payload := b.Bytes()
+       pLen := len(payload)
+       if pLen > ipv6MaxPayloadLength {
+               jumbo = true
+               if opts.FixLengths {
+                       // We need to set the length later because the hop-by-hop header may
+                       // not exist or else need padding, so pLen may yet change
+                       addIPv6JumboOption(ip6)
+               } else if ip6.HopByHop == nil {
+                       return fmt.Errorf("Cannot fit payload length of %d into IPv6 packet", pLen)
+               } else {
+                       _, ok, err := getIPv6HopByHopJumboLength(ip6.HopByHop)
+                       if err != nil {
+                               return err
+                       }
+                       if !ok {
+                               return errors.New("Missing jumbo length hop-by-hop option")
+                       }
+               }
+       }
+       if ip6.HopByHop != nil {
+               if ip6.NextHeader != IPProtocolIPv6HopByHop {
+                       // Just fix it instead of throwing an error
+                       ip6.NextHeader = IPProtocolIPv6HopByHop
+               }
+               err = ip6.HopByHop.SerializeTo(b, opts)
+               if err != nil {
+                       return err
+               }
+               payload = b.Bytes()
+               pLen = len(payload)
+               if opts.FixLengths && jumbo {
+                       err := setIPv6PayloadJumboLength(payload)
+                       if err != nil {
+                               return err
+                       }
+               }
+       }
+       if !jumbo && pLen > ipv6MaxPayloadLength {
+               return errors.New("Cannot fit payload into IPv6 header")
+       }
+       bytes, err := b.PrependBytes(40)
+       if err != nil {
+               return err
+       }
+       bytes[0] = (ip6.Version << 4) | (ip6.TrafficClass >> 4)
+       bytes[1] = (ip6.TrafficClass << 4) | uint8(ip6.FlowLabel>>16)
+       binary.BigEndian.PutUint16(bytes[2:], uint16(ip6.FlowLabel))
+       if opts.FixLengths {
+               if jumbo {
+                       ip6.Length = 0
+               } else {
+                       ip6.Length = uint16(pLen)
+               }
+       }
+       binary.BigEndian.PutUint16(bytes[4:], ip6.Length)
+       bytes[6] = byte(ip6.NextHeader)
+       bytes[7] = byte(ip6.HopLimit)
+       if err := ip6.AddressTo16(); err != nil {
+               return err
+       }
+       copy(bytes[8:], ip6.SrcIP)
+       copy(bytes[24:], ip6.DstIP)
+       return nil
+}
+
+func (ip6 *IPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       ip6.Version = uint8(data[0]) >> 4
+       ip6.TrafficClass = uint8((binary.BigEndian.Uint16(data[0:2]) >> 4) & 0x00FF)
+       ip6.FlowLabel = binary.BigEndian.Uint32(data[0:4]) & 0x000FFFFF
+       ip6.Length = binary.BigEndian.Uint16(data[4:6])
+       ip6.NextHeader = IPProtocol(data[6])
+       ip6.HopLimit = data[7]
+       ip6.SrcIP = data[8:24]
+       ip6.DstIP = data[24:40]
+       ip6.HopByHop = nil
+       ip6.BaseLayer = BaseLayer{data[:40], data[40:]}
+
+       // We treat a HopByHop IPv6 option as part of the IPv6 packet, since its
+       // options are crucial for understanding what's actually happening per packet.
+       if ip6.NextHeader == IPProtocolIPv6HopByHop {
+               err := ip6.hbh.DecodeFromBytes(ip6.Payload, df)
+               if err != nil {
+                       return err
+               }
+               ip6.HopByHop = &ip6.hbh
+               pEnd, jumbo, err := getIPv6HopByHopJumboLength(ip6.HopByHop)
+               if err != nil {
+                       return err
+               }
+               if jumbo && ip6.Length == 0 {
+                       pEnd := int(pEnd)
+                       if pEnd > len(ip6.Payload) {
+                               df.SetTruncated()
+                               pEnd = len(ip6.Payload)
+                       }
+                       ip6.Payload = ip6.Payload[:pEnd]
+                       return nil
+               } else if jumbo && ip6.Length != 0 {
+                       return errors.New("IPv6 has jumbo length and IPv6 length is not 0")
+               } else if !jumbo && ip6.Length == 0 {
+                       return errors.New("IPv6 length 0, but HopByHop header does not have jumbogram option")
+               }
+       }
+
+       if ip6.Length == 0 {
+               return fmt.Errorf("IPv6 length 0, but next header is %v, not HopByHop", ip6.NextHeader)
+       } else {
+               pEnd := int(ip6.Length)
+               if pEnd > len(ip6.Payload) {
+                       df.SetTruncated()
+                       pEnd = len(ip6.Payload)
+               }
+               ip6.Payload = ip6.Payload[:pEnd]
+       }
+       return nil
+}
+
+func (i *IPv6) CanDecode() gopacket.LayerClass {
+       return LayerTypeIPv6
+}
+
+func (i *IPv6) NextLayerType() gopacket.LayerType {
+       if i.HopByHop != nil {
+               return i.HopByHop.NextHeader.LayerType()
+       }
+       return i.NextHeader.LayerType()
+}
+
+func decodeIPv6(data []byte, p gopacket.PacketBuilder) error {
+       ip6 := &IPv6{}
+       err := ip6.DecodeFromBytes(data, p)
+       p.AddLayer(ip6)
+       p.SetNetworkLayer(ip6)
+       if ip6.HopByHop != nil {
+               p.AddLayer(ip6.HopByHop)
+       }
+       if err != nil {
+               return err
+       }
+       return p.NextDecoder(ip6.NextLayerType())
+}
+
+type ipv6HeaderTLVOption struct {
+       OptionType, OptionLength uint8
+       ActualLength             int
+       OptionData               []byte
+       OptionAlignment          [2]uint8 // Xn+Y = [2]uint8{X, Y}
+}
+
+func (h *ipv6HeaderTLVOption) serializeTo(data []byte, fixLengths bool, dryrun bool) int {
+       if fixLengths {
+               h.OptionLength = uint8(len(h.OptionData))
+       }
+       length := int(h.OptionLength) + 2
+       if !dryrun {
+               data[0] = h.OptionType
+               data[1] = h.OptionLength
+               copy(data[2:], h.OptionData)
+       }
+       return length
+}
+
+func decodeIPv6HeaderTLVOption(data []byte) (h *ipv6HeaderTLVOption) {
+       h = &ipv6HeaderTLVOption{}
+       if data[0] == 0 {
+               h.ActualLength = 1
+               return
+       }
+       h.OptionType = data[0]
+       h.OptionLength = data[1]
+       h.ActualLength = int(h.OptionLength) + 2
+       h.OptionData = data[2:h.ActualLength]
+       return
+}
+
+func serializeTLVOptionPadding(data []byte, padLength int) {
+       if padLength <= 0 {
+               return
+       }
+       if padLength == 1 {
+               data[0] = 0x0
+               return
+       }
+       tlvLength := uint8(padLength) - 2
+       data[0] = 0x1
+       data[1] = tlvLength
+       if tlvLength != 0 {
+               for k := range data[2:] {
+                       data[k+2] = 0x0
+               }
+       }
+       return
+}
+
+// If buf is 'nil' do a serialize dry run
+func serializeIPv6HeaderTLVOptions(buf []byte, options []*ipv6HeaderTLVOption, fixLengths bool) int {
+       var l int
+
+       dryrun := buf == nil
+       length := 2
+       for _, opt := range options {
+               if fixLengths {
+                       x := int(opt.OptionAlignment[0])
+                       y := int(opt.OptionAlignment[1])
+                       if x != 0 {
+                               n := length / x
+                               offset := x*n + y
+                               if offset < length {
+                                       offset += x
+                               }
+                               if length != offset {
+                                       pad := offset - length
+                                       if !dryrun {
+                                               serializeTLVOptionPadding(buf[length-2:], pad)
+                                       }
+                                       length += pad
+                               }
+                       }
+               }
+               if dryrun {
+                       l = opt.serializeTo(nil, fixLengths, true)
+               } else {
+                       l = opt.serializeTo(buf[length-2:], fixLengths, false)
+               }
+               length += l
+       }
+       if fixLengths {
+               pad := length % 8
+               if pad != 0 {
+                       if !dryrun {
+                               serializeTLVOptionPadding(buf[length-2:], pad)
+                       }
+                       length += pad
+               }
+       }
+       return length - 2
+}
+
+type ipv6ExtensionBase struct {
+       BaseLayer
+       NextHeader   IPProtocol
+       HeaderLength uint8
+       ActualLength int
+}
+
+func decodeIPv6ExtensionBase(data []byte) (i ipv6ExtensionBase) {
+       i.NextHeader = IPProtocol(data[0])
+       i.HeaderLength = data[1]
+       i.ActualLength = int(i.HeaderLength)*8 + 8
+       i.Contents = data[:i.ActualLength]
+       i.Payload = data[i.ActualLength:]
+       return
+}
+
+// IPv6ExtensionSkipper is a DecodingLayer which decodes and ignores v6
+// extensions.  You can use it with a DecodingLayerParser to handle IPv6 stacks
+// which may or may not have extensions.
+type IPv6ExtensionSkipper struct {
+       NextHeader IPProtocol
+       BaseLayer
+}
+
+func (i *IPv6ExtensionSkipper) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       extension := decodeIPv6ExtensionBase(data)
+       i.BaseLayer = BaseLayer{data[:extension.ActualLength], data[extension.ActualLength:]}
+       i.NextHeader = extension.NextHeader
+       return nil
+}
+
+func (i *IPv6ExtensionSkipper) CanDecode() gopacket.LayerClass {
+       return LayerClassIPv6Extension
+}
+
+func (i *IPv6ExtensionSkipper) NextLayerType() gopacket.LayerType {
+       return i.NextHeader.LayerType()
+}
+
+// IPv6HopByHopOption is a TLV option present in an IPv6 hop-by-hop extension.
+type IPv6HopByHopOption ipv6HeaderTLVOption
+
+// IPv6HopByHop is the IPv6 hop-by-hop extension.
+type IPv6HopByHop struct {
+       ipv6ExtensionBase
+       Options []*IPv6HopByHopOption
+}
+
+// LayerType returns LayerTypeIPv6HopByHop.
+func (i *IPv6HopByHop) LayerType() gopacket.LayerType { return LayerTypeIPv6HopByHop }
+
+func (i *IPv6HopByHop) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       var bytes []byte
+       var err error
+
+       o := make([]*ipv6HeaderTLVOption, 0, len(i.Options))
+       for _, v := range i.Options {
+               o = append(o, (*ipv6HeaderTLVOption)(v))
+       }
+
+       l := serializeIPv6HeaderTLVOptions(nil, o, opts.FixLengths)
+       bytes, err = b.PrependBytes(l)
+       if err != nil {
+               return err
+       }
+       serializeIPv6HeaderTLVOptions(bytes, o, opts.FixLengths)
+
+       length := len(bytes) + 2
+       if length%8 != 0 {
+               return errors.New("IPv6HopByHop actual length must be multiple of 8")
+       }
+       bytes, err = b.PrependBytes(2)
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(i.NextHeader)
+       if opts.FixLengths {
+               i.HeaderLength = uint8((length / 8) - 1)
+       }
+       bytes[1] = uint8(i.HeaderLength)
+       return nil
+}
+
+func (i *IPv6HopByHop) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       i.ipv6ExtensionBase = decodeIPv6ExtensionBase(data)
+       offset := 2
+       for offset < i.ActualLength {
+               opt := decodeIPv6HeaderTLVOption(data[offset:])
+               i.Options = append(i.Options, (*IPv6HopByHopOption)(opt))
+               offset += opt.ActualLength
+       }
+       return nil
+}
+
+func decodeIPv6HopByHop(data []byte, p gopacket.PacketBuilder) error {
+       i := &IPv6HopByHop{}
+       err := i.DecodeFromBytes(data, p)
+       p.AddLayer(i)
+       if err != nil {
+               return err
+       }
+       return p.NextDecoder(i.NextHeader)
+}
+
+func (o *IPv6HopByHopOption) SetJumboLength(len uint32) {
+       o.OptionType = IPv6HopByHopOptionJumbogram
+       o.OptionLength = 4
+       o.ActualLength = 6
+       if o.OptionData == nil {
+               o.OptionData = make([]byte, 4)
+       }
+       binary.BigEndian.PutUint32(o.OptionData, len)
+       o.OptionAlignment = [2]uint8{4, 2}
+}
+
+// IPv6Routing is the IPv6 routing extension.
+type IPv6Routing struct {
+       ipv6ExtensionBase
+       RoutingType  uint8
+       SegmentsLeft uint8
+       // This segment is supposed to be zero according to RFC2460, the second set of
+       // 4 bytes in the extension.
+       Reserved []byte
+       // SourceRoutingIPs is the set of IPv6 addresses requested for source routing,
+       // set only if RoutingType == 0.
+       SourceRoutingIPs []net.IP
+}
+
+// LayerType returns LayerTypeIPv6Routing.
+func (i *IPv6Routing) LayerType() gopacket.LayerType { return LayerTypeIPv6Routing }
+
+func decodeIPv6Routing(data []byte, p gopacket.PacketBuilder) error {
+       i := &IPv6Routing{
+               ipv6ExtensionBase: decodeIPv6ExtensionBase(data),
+               RoutingType:       data[2],
+               SegmentsLeft:      data[3],
+               Reserved:          data[4:8],
+       }
+       switch i.RoutingType {
+       case 0: // Source routing
+               if (i.ActualLength-8)%16 != 0 {
+                       return fmt.Errorf("Invalid IPv6 source routing, length of type 0 packet %d", i.ActualLength)
+               }
+               for d := i.Contents[8:]; len(d) >= 16; d = d[16:] {
+                       i.SourceRoutingIPs = append(i.SourceRoutingIPs, net.IP(d[:16]))
+               }
+       default:
+               return fmt.Errorf("Unknown IPv6 routing header type %d", i.RoutingType)
+       }
+       p.AddLayer(i)
+       return p.NextDecoder(i.NextHeader)
+}
+
+// IPv6Fragment is the IPv6 fragment header, used for packet
+// fragmentation/defragmentation.
+type IPv6Fragment struct {
+       BaseLayer
+       NextHeader IPProtocol
+       // Reserved1 is bits [8-16), from least to most significant, 0-indexed
+       Reserved1      uint8
+       FragmentOffset uint16
+       // Reserved2 is bits [29-31), from least to most significant, 0-indexed
+       Reserved2      uint8
+       MoreFragments  bool
+       Identification uint32
+}
+
+// LayerType returns LayerTypeIPv6Fragment.
+func (i *IPv6Fragment) LayerType() gopacket.LayerType { return LayerTypeIPv6Fragment }
+
+func decodeIPv6Fragment(data []byte, p gopacket.PacketBuilder) error {
+       i := &IPv6Fragment{
+               BaseLayer:      BaseLayer{data[:8], data[8:]},
+               NextHeader:     IPProtocol(data[0]),
+               Reserved1:      data[1],
+               FragmentOffset: binary.BigEndian.Uint16(data[2:4]) >> 3,
+               Reserved2:      data[3] & 0x6 >> 1,
+               MoreFragments:  data[3]&0x1 != 0,
+               Identification: binary.BigEndian.Uint32(data[4:8]),
+       }
+       p.AddLayer(i)
+       return p.NextDecoder(gopacket.DecodeFragment)
+}
+
+// IPv6DestinationOption is a TLV option present in an IPv6 destination options extension.
+type IPv6DestinationOption ipv6HeaderTLVOption
+
+// IPv6Destination is the IPv6 destination options header.
+type IPv6Destination struct {
+       ipv6ExtensionBase
+       Options []*IPv6DestinationOption
+}
+
+// LayerType returns LayerTypeIPv6Destination.
+func (i *IPv6Destination) LayerType() gopacket.LayerType { return LayerTypeIPv6Destination }
+
+func (i *IPv6Destination) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       i.ipv6ExtensionBase = decodeIPv6ExtensionBase(data)
+       offset := 2
+       for offset < i.ActualLength {
+               opt := decodeIPv6HeaderTLVOption(data[offset:])
+               i.Options = append(i.Options, (*IPv6DestinationOption)(opt))
+               offset += opt.ActualLength
+       }
+       return nil
+}
+
+func decodeIPv6Destination(data []byte, p gopacket.PacketBuilder) error {
+       i := &IPv6Destination{}
+       err := i.DecodeFromBytes(data, p)
+       p.AddLayer(i)
+       if err != nil {
+               return err
+       }
+       return p.NextDecoder(i.NextHeader)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (i *IPv6Destination) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       var bytes []byte
+       var err error
+
+       o := make([]*ipv6HeaderTLVOption, 0, len(i.Options))
+       for _, v := range i.Options {
+               o = append(o, (*ipv6HeaderTLVOption)(v))
+       }
+
+       l := serializeIPv6HeaderTLVOptions(nil, o, opts.FixLengths)
+       bytes, err = b.PrependBytes(l)
+       if err != nil {
+               return err
+       }
+       serializeIPv6HeaderTLVOptions(bytes, o, opts.FixLengths)
+
+       length := len(bytes) + 2
+       if length%8 != 0 {
+               return errors.New("IPv6Destination actual length must be multiple of 8")
+       }
+       bytes, err = b.PrependBytes(2)
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(i.NextHeader)
+       if opts.FixLengths {
+               i.HeaderLength = uint8((length / 8) - 1)
+       }
+       bytes[1] = uint8(i.HeaderLength)
+       return nil
+}
+
+func checkIPv6Address(addr net.IP) error {
+       if len(addr) == net.IPv6len {
+               return nil
+       }
+       if len(addr) == net.IPv4len {
+               return errors.New("address is IPv4")
+       }
+       return fmt.Errorf("wrong length of %d bytes instead of %d", len(addr), net.IPv6len)
+}
+
+func (ip *IPv6) AddressTo16() error {
+       if err := checkIPv6Address(ip.SrcIP); err != nil {
+               return fmt.Errorf("Invalid source IPv6 address (%s)", err)
+       }
+       if err := checkIPv6Address(ip.DstIP); err != nil {
+               return fmt.Errorf("Invalid destination IPv6 address (%s)", err)
+       }
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/ip6_test.go b/vendor/github.com/google/gopacket/layers/ip6_test.go
new file mode 100644 (file)
index 0000000..ab22f17
--- /dev/null
@@ -0,0 +1,430 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "bytes"
+       "github.com/google/gopacket"
+       "net"
+       "reflect"
+       "testing"
+)
+
+func TestSerializeIPv6HeaderTLVOptions(t *testing.T) {
+       //RFC 2460 Appendix B
+       /*
+          Example 3
+
+          A Hop-by-Hop or Destination Options header containing both options X
+          and Y from Examples 1 and 2 would have one of the two following
+          formats, depending on which option appeared first:
+
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |  Next Header  | Hdr Ext Len=3 | Option Type=X |Opt Data Len=12|
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                         4-octet field                         |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               |
+          +                         8-octet field                         +
+          |                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          | PadN Option=1 |Opt Data Len=1 |       0       | Option Type=Y |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |Opt Data Len=7 | 1-octet field |         2-octet field         |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                         4-octet field                         |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          | PadN Option=1 |Opt Data Len=2 |       0       |       0       |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+       */
+       opt1 := &ipv6HeaderTLVOption{}
+       opt1.OptionType = 0x1e
+       opt1.OptionData = []byte{0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb}
+       opt1.OptionAlignment = [2]uint8{8, 2}
+
+       opt2 := &ipv6HeaderTLVOption{}
+       opt2.OptionType = 0x3e
+       opt2.OptionData = []byte{0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44}
+       opt2.OptionAlignment = [2]uint8{4, 3}
+
+       l := serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt1, opt2}, true)
+       b := make([]byte, l)
+       serializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt1, opt2}, true)
+       got := b
+       want := []byte{0x1e, 0x0c, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x01, 0x01, 0x00, 0x3e, 0x07, 0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x01, 0x02, 0x00, 0x00}
+
+       if !bytes.Equal(got, want) {
+               t.Errorf("IPv6HeaderTLVOption serialize (X,Y) failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+       }
+
+       /*
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |  Next Header  | Hdr Ext Len=3 | Pad1 Option=0 | Option Type=Y |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |Opt Data Len=7 | 1-octet field |         2-octet field         |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                         4-octet field                         |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          | PadN Option=1 |Opt Data Len=4 |       0       |       0       |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |       0       |       0       | Option Type=X |Opt Data Len=12|
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                         4-octet field                         |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               |
+          +                         8-octet field                         +
+          |                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+       */
+
+       l = serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt2, opt1}, true)
+       b = make([]byte, l)
+       serializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt2, opt1}, true)
+       got = b
+       want = []byte{0x00, 0x3e, 0x07, 0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb}
+
+       if !bytes.Equal(got, want) {
+               t.Errorf("IPv6HeaderTLVOption serialize (Y,X) failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+       }
+}
+
+var testPacketIPv6HopByHop0 = []byte{
+       0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketIPv6HopByHop0Serialize(t *testing.T) {
+       var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+       var err error
+
+       ip6 := &IPv6{}
+       ip6.Version = 6
+       ip6.NextHeader = IPProtocolIPv6HopByHop
+       ip6.HopLimit = 64
+       ip6.SrcIP = net.ParseIP("2001:db8::1")
+       ip6.DstIP = net.ParseIP("2001:db8::2")
+       serialize = append(serialize, ip6)
+
+       tlv := &IPv6HopByHopOption{}
+       tlv.OptionType = 0x01 //PadN
+       tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}
+       hop := &IPv6HopByHop{}
+       hop.Options = append(hop.Options, tlv)
+       hop.NextHeader = IPProtocolNoNextHeader
+       ip6.HopByHop = hop
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true}
+       err = gopacket.SerializeLayers(buf, opts, serialize...)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       got := buf.Bytes()
+       want := testPacketIPv6HopByHop0
+       if !bytes.Equal(got, want) {
+               t.Errorf("IPv6HopByHop serialize failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+       }
+}
+
+func TestPacketIPv6HopByHop0Decode(t *testing.T) {
+       ip6 := &IPv6{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{
+                               0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+                       },
+                       Payload: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
+               },
+               Version:      6,
+               TrafficClass: 0,
+               FlowLabel:    0,
+               Length:       8,
+               NextHeader:   IPProtocolIPv6HopByHop,
+               HopLimit:     64,
+               SrcIP:        net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+               DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+       }
+
+       hop := &ip6.hbh
+       hop.ipv6ExtensionBase = ipv6ExtensionBase{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
+                       Payload:  []byte{},
+               },
+               NextHeader:   IPProtocolNoNextHeader,
+               HeaderLength: uint8(0),
+               ActualLength: 8,
+       }
+       opt := &IPv6HopByHopOption{
+               OptionType:   uint8(0x01),
+               OptionLength: uint8(0x04),
+               ActualLength: 6,
+               OptionData:   []byte{0x00, 0x00, 0x00, 0x00},
+       }
+       hop.Options = append(hop.Options, opt)
+       ip6.HopByHop = hop
+
+       p := gopacket.NewPacket(testPacketIPv6HopByHop0, LinkTypeRaw, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop}, t)
+       if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
+               want := ip6
+               want.HopByHop = got.HopByHop // avoid comparing pointers
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("IPv6 packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No IPv6 layer type found in packet")
+       }
+       if got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok {
+               want := hop
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("IPv6HopByHop packet processing failed:\ngot\n%#v\n\nwant:\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No IPv6HopByHop layer type found in packet")
+       }
+}
+
+// testPacketIPv6Destination0 is the packet:
+//   12:40:14.429409595 IP6 2001:db8::1 > 2001:db8::2: DSTOPT no next header
+//     0x0000:  6000 0000 0008 3c40 2001 0db8 0000 0000  `.....<@........
+//     0x0010:  0000 0000 0000 0001 2001 0db8 0000 0000  ................
+//     0x0020:  0000 0000 0000 0002 3b00 0104 0000 0000  ........;.......
+var testPacketIPv6Destination0 = []byte{
+       0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketIPv6Destination0Serialize(t *testing.T) {
+       var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+       var err error
+
+       ip6 := &IPv6{}
+       ip6.Version = 6
+       ip6.NextHeader = IPProtocolIPv6Destination
+       ip6.HopLimit = 64
+       ip6.SrcIP = net.ParseIP("2001:db8::1")
+       ip6.DstIP = net.ParseIP("2001:db8::2")
+       serialize = append(serialize, ip6)
+
+       tlv := &IPv6DestinationOption{}
+       tlv.OptionType = 0x01 //PadN
+       tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}
+       dst := &IPv6Destination{}
+       dst.Options = append(dst.Options, tlv)
+       dst.NextHeader = IPProtocolNoNextHeader
+       serialize = append(serialize, dst)
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true}
+       err = gopacket.SerializeLayers(buf, opts, serialize...)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       got := buf.Bytes()
+       want := testPacketIPv6Destination0
+       if !bytes.Equal(got, want) {
+               t.Errorf("IPv6Destination serialize failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+       }
+}
+
+func TestPacketIPv6Destination0Decode(t *testing.T) {
+       ip6 := &IPv6{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{
+                               0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+                       },
+                       Payload: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
+               },
+               Version:      6,
+               TrafficClass: 0,
+               FlowLabel:    0,
+               Length:       8,
+               NextHeader:   IPProtocolIPv6Destination,
+               HopLimit:     64,
+               SrcIP:        net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+               DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+       }
+
+       dst := &IPv6Destination{}
+       dst.BaseLayer = BaseLayer{
+               Contents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00},
+               Payload:  []byte{},
+       }
+       dst.NextHeader = IPProtocolNoNextHeader
+       dst.HeaderLength = uint8(0)
+       dst.ActualLength = 8
+       opt := &IPv6DestinationOption{
+               OptionType:   uint8(0x01),
+               OptionLength: uint8(0x04),
+               ActualLength: 6,
+               OptionData:   []byte{0x00, 0x00, 0x00, 0x00},
+       }
+       dst.Options = append(dst.Options, opt)
+
+       p := gopacket.NewPacket(testPacketIPv6Destination0, LinkTypeRaw, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6Destination}, t)
+       if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
+               want := ip6
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("IPv6 packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No IPv6 layer type found in packet")
+       }
+       if got, ok := p.Layer(LayerTypeIPv6Destination).(*IPv6Destination); ok {
+               want := dst
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("IPv6Destination packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No IPv6Destination layer type found in packet")
+       }
+}
+
+var testPacketIPv6JumbogramHeader = []byte{
+       0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08,
+}
+
+func TestIPv6JumbogramSerialize(t *testing.T) {
+       var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+       var err error
+
+       ip6 := &IPv6{}
+       ip6.Version = 6
+       ip6.NextHeader = IPProtocolNoNextHeader
+       ip6.HopLimit = 64
+       ip6.SrcIP = net.ParseIP("2001:db8::1")
+       ip6.DstIP = net.ParseIP("2001:db8::2")
+       serialize = append(serialize, ip6)
+
+       payload := make([]byte, ipv6MaxPayloadLength+1)
+       for i := range payload {
+               payload[i] = 0xfe
+       }
+       serialize = append(serialize, gopacket.Payload(payload))
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true}
+       err = gopacket.SerializeLayers(buf, opts, serialize...)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       got := buf.Bytes()
+       w := new(bytes.Buffer)
+       w.Write(testPacketIPv6JumbogramHeader)
+       w.Write(payload)
+       want := w.Bytes()
+
+       if !bytes.Equal(got, want) {
+               t.Errorf("IPv6 Jumbogram serialize failed:\ngot:\n%v\n\nwant:\n%v\n\n",
+                       gopacket.LongBytesGoString(got), gopacket.LongBytesGoString(want))
+       }
+}
+
+func TestIPv6JumbogramDecode(t *testing.T) {
+       payload := make([]byte, ipv6MaxPayloadLength+1)
+       for i := range payload {
+               payload[i] = 0xfe
+       }
+
+       ip6 := &IPv6{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{
+                               0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+                               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+                       },
+               },
+               Version:      6,
+               TrafficClass: 0,
+               FlowLabel:    0,
+               Length:       0,
+               NextHeader:   IPProtocolIPv6HopByHop,
+               HopLimit:     64,
+               SrcIP:        net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+               DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+       }
+       buf := new(bytes.Buffer)
+       buf.Write([]byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08})
+       buf.Write(payload)
+       ip6.Payload = buf.Bytes()
+
+       hop := &ip6.hbh
+       hop.Contents = []byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08}
+       hop.Payload = payload
+       hop.NextHeader = IPProtocolNoNextHeader
+       hop.HeaderLength = uint8(0)
+       hop.ActualLength = 8
+       opt := &IPv6HopByHopOption{}
+       opt.OptionType = uint8(0xc2)
+       opt.OptionLength = uint8(0x04)
+       opt.ActualLength = 6
+       opt.OptionData = []byte{0x00, 0x01, 0x00, 0x08}
+       hop.Options = append(hop.Options, opt)
+       ip6.HopByHop = hop
+
+       pkt := new(bytes.Buffer)
+       pkt.Write(testPacketIPv6JumbogramHeader)
+       pkt.Write(payload)
+
+       p := gopacket.NewPacket(pkt.Bytes(), LinkTypeRaw, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop, gopacket.LayerTypePayload}, t)
+
+       if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
+               want := ip6
+               want.HopByHop = got.HopByHop // Hack, avoid comparing pointers
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("IPv6 packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n",
+                               gopacket.LayerGoString(got), gopacket.LayerGoString(want))
+               }
+       } else {
+               t.Error("No IPv6 layer type found in packet")
+       }
+
+       if got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok {
+               want := hop
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("IPv6HopByHop packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n",
+                               gopacket.LayerGoString(got), gopacket.LayerGoString(want))
+               }
+       } else {
+               t.Error("No IPv6HopByHop layer type found in packet")
+       }
+
+       if got, ok := p.Layer(gopacket.LayerTypePayload).(*gopacket.Payload); ok {
+               want := (*gopacket.Payload)(&payload)
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("Payload packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n",
+                               gopacket.LayerGoString(got), gopacket.LayerGoString(want))
+               }
+       } else {
+               t.Error("No Payload layer type found in packet")
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ipsec.go b/vendor/github.com/google/gopacket/layers/ipsec.go
new file mode 100644 (file)
index 0000000..19163fa
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "github.com/google/gopacket"
+)
+
+// IPSecAH is the authentication header for IPv4/6 defined in
+// http://tools.ietf.org/html/rfc2402
+type IPSecAH struct {
+       // While the auth header can be used for both IPv4 and v6, its format is that of
+       // an IPv6 extension (NextHeader, PayloadLength, etc...), so we use ipv6ExtensionBase
+       // to build it.
+       ipv6ExtensionBase
+       Reserved           uint16
+       SPI, Seq           uint32
+       AuthenticationData []byte
+}
+
+// LayerType returns LayerTypeIPSecAH.
+func (i *IPSecAH) LayerType() gopacket.LayerType { return LayerTypeIPSecAH }
+
+func decodeIPSecAH(data []byte, p gopacket.PacketBuilder) error {
+       i := &IPSecAH{
+               ipv6ExtensionBase: ipv6ExtensionBase{
+                       NextHeader:   IPProtocol(data[0]),
+                       HeaderLength: data[1],
+               },
+               Reserved: binary.BigEndian.Uint16(data[2:4]),
+               SPI:      binary.BigEndian.Uint32(data[4:8]),
+               Seq:      binary.BigEndian.Uint32(data[8:12]),
+       }
+       i.ActualLength = (int(i.HeaderLength) + 2) * 4
+       i.AuthenticationData = data[12:i.ActualLength]
+       i.Contents = data[:i.ActualLength]
+       i.Payload = data[i.ActualLength:]
+       p.AddLayer(i)
+       return p.NextDecoder(i.NextHeader)
+}
+
+// IPSecESP is the encapsulating security payload defined in
+// http://tools.ietf.org/html/rfc2406
+type IPSecESP struct {
+       BaseLayer
+       SPI, Seq uint32
+       // Encrypted contains the encrypted set of bytes sent in an ESP
+       Encrypted []byte
+}
+
+// LayerType returns LayerTypeIPSecESP.
+func (i *IPSecESP) LayerType() gopacket.LayerType { return LayerTypeIPSecESP }
+
+func decodeIPSecESP(data []byte, p gopacket.PacketBuilder) error {
+       i := &IPSecESP{
+               BaseLayer: BaseLayer{data, nil},
+               SPI:       binary.BigEndian.Uint32(data[:4]),
+               Seq:       binary.BigEndian.Uint32(data[4:8]),
+               Encrypted: data[8:],
+       }
+       p.AddLayer(i)
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/ipsec_test.go b/vendor/github.com/google/gopacket/layers/ipsec_test.go
new file mode 100644 (file)
index 0000000..466646d
--- /dev/null
@@ -0,0 +1,154 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "reflect"
+       "testing"
+)
+
+// testPacketIPSecAHTransport is the packet:
+//   20:45:10.325850 IP 192.168.1.1 > 192.168.1.2: AH(spi=0x00000101,seq=0x1): ICMP echo request, id 1560, seq 1, length 64
+//      0x0000:  7ec0 ffc6 48f1 1a0e 3c4e 3b3a 0800 4500  ~...H...<N;:..E.
+//      0x0010:  006c 650a 4000 4033 5201 c0a8 0101 c0a8  .le.@.@3R.......
+//      0x0020:  0102 0104 0000 0000 0101 0000 0001 2533  ..............%3
+//      0x0030:  01b1 a20b b6f1 bdbf 9d9e 0800 fbe5 0618  ................
+//      0x0040:  0001 c6e1 a354 0000 0000 c8f7 0400 0000  .....T..........
+//      0x0050:  0000 1011 1213 1415 1617 1819 1a1b 1c1d  ................
+//      0x0060:  1e1f 2021 2223 2425 2627 2829 2a2b 2c2d  ...!"#$%&'()*+,-
+//      0x0070:  2e2f 3031 3233 3435 3637                 ./01234567
+var testPacketIPSecAHTransport = []byte{
+       0x7e, 0xc0, 0xff, 0xc6, 0x48, 0xf1, 0x1a, 0x0e, 0x3c, 0x4e, 0x3b, 0x3a, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x6c, 0x65, 0x0a, 0x40, 0x00, 0x40, 0x33, 0x52, 0x01, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,
+       0x01, 0x02, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x25, 0x33,
+       0x01, 0xb1, 0xa2, 0x0b, 0xb6, 0xf1, 0xbd, 0xbf, 0x9d, 0x9e, 0x08, 0x00, 0xfb, 0xe5, 0x06, 0x18,
+       0x00, 0x01, 0xc6, 0xe1, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xf7, 0x04, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
+       0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
+       0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketIPSecAHTransport(t *testing.T) {
+       p := gopacket.NewPacket(testPacketIPSecAHTransport, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecAH, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       if got, ok := p.Layer(LayerTypeIPSecAH).(*IPSecAH); ok {
+               want := &IPSecAH{
+                       Reserved:           0x0,
+                       SPI:                0x101,
+                       Seq:                1,
+                       AuthenticationData: []byte{0x25, 0x33, 0x01, 0xb1, 0xa2, 0x0b, 0xb6, 0xf1, 0xbd, 0xbf, 0x9d, 0x9e},
+               }
+               want.BaseLayer = BaseLayer{testPacketIPSecAHTransport[34:58], testPacketIPSecAHTransport[58:]}
+               want.NextHeader = IPProtocolICMPv4
+               want.HeaderLength = 0x4
+               want.ActualLength = 0x18
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("IPSecAH layer mismatch, \nwant %#v\ngot  %#v\n", want, got)
+               }
+       }
+}
+
+func BenchmarkDecodePacketIPSecAHTransport(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketIPSecAHTransport, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// testPacketIPSecAHTunnel is the packet:
+//   14:45:43.252917 IP 192.168.1.1 > 192.168.1.2: AH(spi=0x00000101,seq=0x1): IP 172.16.1.1 > 172.16.2.1: ICMP echo request, id 31322, seq 1, length 64 (ipip-proto-4)
+//      0x0000:  7220 4d91 63c9 566c ed2d 73cd 0800 4500  r.M.c.Vl.-s...E.
+//      0x0010:  0080 0000 4000 4033 b6f7 c0a8 0101 c0a8  ....@.@3........
+//      0x0020:  0102 0404 0000 0000 0101 0000 0001 cca4  ................
+//      0x0030:  01da 9eb4 fb75 10fe 5a59 4500 0054 a96f  .....u..ZYE..T.o
+//      0x0040:  4000 4001 3617 ac10 0101 ac10 0201 0800  @.@.6...........
+//      0x0050:  d75f 7a5a 0001 0741 3355 0000 0000 a9db  ._zZ...A3U......
+//      0x0060:  0300 0000 0000 1011 1213 1415 1617 1819  ................
+//      0x0070:  1a1b 1c1d 1e1f 2021 2223 2425 2627 2829  .......!"#$%&'()
+//      0x0080:  2a2b 2c2d 2e2f 3031 3233 3435 3637       *+,-./01234567
+var testPacketIPSecAHTunnel = []byte{
+       0x72, 0x20, 0x4d, 0x91, 0x63, 0xc9, 0x56, 0x6c, 0xed, 0x2d, 0x73, 0xcd, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x40, 0x33, 0xb6, 0xf7, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8,
+       0x01, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0xcc, 0xa4,
+       0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59, 0x45, 0x00, 0x00, 0x54, 0xa9, 0x6f,
+       0x40, 0x00, 0x40, 0x01, 0x36, 0x17, 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x02, 0x01, 0x08, 0x00,
+       0xd7, 0x5f, 0x7a, 0x5a, 0x00, 0x01, 0x07, 0x41, 0x33, 0x55, 0x00, 0x00, 0x00, 0x00, 0xa9, 0xdb,
+       0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
+       0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
+       0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketIPSecAHTunnel(t *testing.T) {
+       p := gopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecAH, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       if got, ok := p.Layer(LayerTypeIPSecAH).(*IPSecAH); ok {
+               want := &IPSecAH{
+                       Reserved:           0x0,
+                       SPI:                0x101,
+                       Seq:                1,
+                       AuthenticationData: []byte{0xcc, 0xa4, 0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59},
+               }
+               want.BaseLayer = BaseLayer{testPacketIPSecAHTunnel[34:58], testPacketIPSecAHTunnel[58:]}
+               want.NextHeader = IPProtocolIPv4
+               want.HeaderLength = 0x4
+               want.ActualLength = 0x18
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("IPSecAH layer mismatch, \nwant %#v\ngot  %#v\n", want, got)
+               }
+       }
+}
+
+func BenchmarkDecodePacketIPSecAHTunnel(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// testPacketIPSecESP is the packet:
+//   04:30:37.629376 IP 190.0.0.1 > 190.0.0.2: ESP(spi=0x0000006e,seq=0x13), length 116
+//      0x0000:  0000 0000 0012 0011 434a d70a 0800 4500  ........CJ....E.
+//      0x0010:  0088 0000 4000 4032 be40 be00 0001 be00  ....@.@2.@......
+//      0x0020:  0002 0000 006e 0000 0013 82f4 1077 0418  .....n.......w..
+//      0x0030:  e8ce dc45 1bac 22bb daaf 2ad2 c2e8 315b  ...E.."...*...1[
+//      0x0040:  ce9a 39da 2aae cf43 3716 70ab 7e7c 4676  ..9.*..C7.p.~|Fv
+//      0x0050:  c3fc d109 c990 274d f81c 6534 9a40 a0ef  ......'M..e4.@..
+//      0x0060:  46b1 7da5 05af dda8 d0ba 6e23 d1ee 1f10  F.}.......n#....
+//      0x0070:  730c 7371 03b1 445c 2f70 852f 8475 12fb  s.sq..D\/p./.u..
+//      0x0080:  b057 a19b a617 bae7 09ca 8836 942f 3334  .W.........6./34
+//      0x0090:  312b 96d2 a4e3                           1+....
+var testPacketIPSecESP = []byte{
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x11, 0x43, 0x4a, 0xd7, 0x0a, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x88, 0x00, 0x00, 0x40, 0x00, 0x40, 0x32, 0xbe, 0x40, 0xbe, 0x00, 0x00, 0x01, 0xbe, 0x00,
+       0x00, 0x02, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x13, 0x82, 0xf4, 0x10, 0x77, 0x04, 0x18,
+       0xe8, 0xce, 0xdc, 0x45, 0x1b, 0xac, 0x22, 0xbb, 0xda, 0xaf, 0x2a, 0xd2, 0xc2, 0xe8, 0x31, 0x5b,
+       0xce, 0x9a, 0x39, 0xda, 0x2a, 0xae, 0xcf, 0x43, 0x37, 0x16, 0x70, 0xab, 0x7e, 0x7c, 0x46, 0x76,
+       0xc3, 0xfc, 0xd1, 0x09, 0xc9, 0x90, 0x27, 0x4d, 0xf8, 0x1c, 0x65, 0x34, 0x9a, 0x40, 0xa0, 0xef,
+       0x46, 0xb1, 0x7d, 0xa5, 0x05, 0xaf, 0xdd, 0xa8, 0xd0, 0xba, 0x6e, 0x23, 0xd1, 0xee, 0x1f, 0x10,
+       0x73, 0x0c, 0x73, 0x71, 0x03, 0xb1, 0x44, 0x5c, 0x2f, 0x70, 0x85, 0x2f, 0x84, 0x75, 0x12, 0xfb,
+       0xb0, 0x57, 0xa1, 0x9b, 0xa6, 0x17, 0xba, 0xe7, 0x09, 0xca, 0x88, 0x36, 0x94, 0x2f, 0x33, 0x34,
+       0x31, 0x2b, 0x96, 0xd2, 0xa4, 0xe3,
+}
+
+func TestPacketIPSecESP(t *testing.T) {
+       p := gopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecESP}, t)
+}
+
+func BenchmarkDecodePacketIPSecESP(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/layertypes.go b/vendor/github.com/google/gopacket/layers/layertypes.go
new file mode 100644 (file)
index 0000000..faffb91
--- /dev/null
@@ -0,0 +1,177 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+)
+
+var (
+       LayerTypeARP                         = gopacket.RegisterLayerType(10, gopacket.LayerTypeMetadata{Name: "ARP", Decoder: gopacket.DecodeFunc(decodeARP)})
+       LayerTypeCiscoDiscovery              = gopacket.RegisterLayerType(11, gopacket.LayerTypeMetadata{Name: "CiscoDiscovery", Decoder: gopacket.DecodeFunc(decodeCiscoDiscovery)})
+       LayerTypeEthernetCTP                 = gopacket.RegisterLayerType(12, gopacket.LayerTypeMetadata{Name: "EthernetCTP", Decoder: gopacket.DecodeFunc(decodeEthernetCTP)})
+       LayerTypeEthernetCTPForwardData      = gopacket.RegisterLayerType(13, gopacket.LayerTypeMetadata{Name: "EthernetCTPForwardData", Decoder: nil})
+       LayerTypeEthernetCTPReply            = gopacket.RegisterLayerType(14, gopacket.LayerTypeMetadata{Name: "EthernetCTPReply", Decoder: nil})
+       LayerTypeDot1Q                       = gopacket.RegisterLayerType(15, gopacket.LayerTypeMetadata{Name: "Dot1Q", Decoder: gopacket.DecodeFunc(decodeDot1Q)})
+       LayerTypeEtherIP                     = gopacket.RegisterLayerType(16, gopacket.LayerTypeMetadata{Name: "EtherIP", Decoder: gopacket.DecodeFunc(decodeEtherIP)})
+       LayerTypeEthernet                    = gopacket.RegisterLayerType(17, gopacket.LayerTypeMetadata{Name: "Ethernet", Decoder: gopacket.DecodeFunc(decodeEthernet)})
+       LayerTypeGRE                         = gopacket.RegisterLayerType(18, gopacket.LayerTypeMetadata{Name: "GRE", Decoder: gopacket.DecodeFunc(decodeGRE)})
+       LayerTypeICMPv4                      = gopacket.RegisterLayerType(19, gopacket.LayerTypeMetadata{Name: "ICMPv4", Decoder: gopacket.DecodeFunc(decodeICMPv4)})
+       LayerTypeIPv4                        = gopacket.RegisterLayerType(20, gopacket.LayerTypeMetadata{Name: "IPv4", Decoder: gopacket.DecodeFunc(decodeIPv4)})
+       LayerTypeIPv6                        = gopacket.RegisterLayerType(21, gopacket.LayerTypeMetadata{Name: "IPv6", Decoder: gopacket.DecodeFunc(decodeIPv6)})
+       LayerTypeLLC                         = gopacket.RegisterLayerType(22, gopacket.LayerTypeMetadata{Name: "LLC", Decoder: gopacket.DecodeFunc(decodeLLC)})
+       LayerTypeSNAP                        = gopacket.RegisterLayerType(23, gopacket.LayerTypeMetadata{Name: "SNAP", Decoder: gopacket.DecodeFunc(decodeSNAP)})
+       LayerTypeMPLS                        = gopacket.RegisterLayerType(24, gopacket.LayerTypeMetadata{Name: "MPLS", Decoder: gopacket.DecodeFunc(decodeMPLS)})
+       LayerTypePPP                         = gopacket.RegisterLayerType(25, gopacket.LayerTypeMetadata{Name: "PPP", Decoder: gopacket.DecodeFunc(decodePPP)})
+       LayerTypePPPoE                       = gopacket.RegisterLayerType(26, gopacket.LayerTypeMetadata{Name: "PPPoE", Decoder: gopacket.DecodeFunc(decodePPPoE)})
+       LayerTypeRUDP                        = gopacket.RegisterLayerType(27, gopacket.LayerTypeMetadata{Name: "RUDP", Decoder: gopacket.DecodeFunc(decodeRUDP)})
+       LayerTypeSCTP                        = gopacket.RegisterLayerType(28, gopacket.LayerTypeMetadata{Name: "SCTP", Decoder: gopacket.DecodeFunc(decodeSCTP)})
+       LayerTypeSCTPUnknownChunkType        = gopacket.RegisterLayerType(29, gopacket.LayerTypeMetadata{Name: "SCTPUnknownChunkType", Decoder: nil})
+       LayerTypeSCTPData                    = gopacket.RegisterLayerType(30, gopacket.LayerTypeMetadata{Name: "SCTPData", Decoder: nil})
+       LayerTypeSCTPInit                    = gopacket.RegisterLayerType(31, gopacket.LayerTypeMetadata{Name: "SCTPInit", Decoder: nil})
+       LayerTypeSCTPSack                    = gopacket.RegisterLayerType(32, gopacket.LayerTypeMetadata{Name: "SCTPSack", Decoder: nil})
+       LayerTypeSCTPHeartbeat               = gopacket.RegisterLayerType(33, gopacket.LayerTypeMetadata{Name: "SCTPHeartbeat", Decoder: nil})
+       LayerTypeSCTPError                   = gopacket.RegisterLayerType(34, gopacket.LayerTypeMetadata{Name: "SCTPError", Decoder: nil})
+       LayerTypeSCTPShutdown                = gopacket.RegisterLayerType(35, gopacket.LayerTypeMetadata{Name: "SCTPShutdown", Decoder: nil})
+       LayerTypeSCTPShutdownAck             = gopacket.RegisterLayerType(36, gopacket.LayerTypeMetadata{Name: "SCTPShutdownAck", Decoder: nil})
+       LayerTypeSCTPCookieEcho              = gopacket.RegisterLayerType(37, gopacket.LayerTypeMetadata{Name: "SCTPCookieEcho", Decoder: nil})
+       LayerTypeSCTPEmptyLayer              = gopacket.RegisterLayerType(38, gopacket.LayerTypeMetadata{Name: "SCTPEmptyLayer", Decoder: nil})
+       LayerTypeSCTPInitAck                 = gopacket.RegisterLayerType(39, gopacket.LayerTypeMetadata{Name: "SCTPInitAck", Decoder: nil})
+       LayerTypeSCTPHeartbeatAck            = gopacket.RegisterLayerType(40, gopacket.LayerTypeMetadata{Name: "SCTPHeartbeatAck", Decoder: nil})
+       LayerTypeSCTPAbort                   = gopacket.RegisterLayerType(41, gopacket.LayerTypeMetadata{Name: "SCTPAbort", Decoder: nil})
+       LayerTypeSCTPShutdownComplete        = gopacket.RegisterLayerType(42, gopacket.LayerTypeMetadata{Name: "SCTPShutdownComplete", Decoder: nil})
+       LayerTypeSCTPCookieAck               = gopacket.RegisterLayerType(43, gopacket.LayerTypeMetadata{Name: "SCTPCookieAck", Decoder: nil})
+       LayerTypeTCP                         = gopacket.RegisterLayerType(44, gopacket.LayerTypeMetadata{Name: "TCP", Decoder: gopacket.DecodeFunc(decodeTCP)})
+       LayerTypeUDP                         = gopacket.RegisterLayerType(45, gopacket.LayerTypeMetadata{Name: "UDP", Decoder: gopacket.DecodeFunc(decodeUDP)})
+       LayerTypeIPv6HopByHop                = gopacket.RegisterLayerType(46, gopacket.LayerTypeMetadata{Name: "IPv6HopByHop", Decoder: gopacket.DecodeFunc(decodeIPv6HopByHop)})
+       LayerTypeIPv6Routing                 = gopacket.RegisterLayerType(47, gopacket.LayerTypeMetadata{Name: "IPv6Routing", Decoder: gopacket.DecodeFunc(decodeIPv6Routing)})
+       LayerTypeIPv6Fragment                = gopacket.RegisterLayerType(48, gopacket.LayerTypeMetadata{Name: "IPv6Fragment", Decoder: gopacket.DecodeFunc(decodeIPv6Fragment)})
+       LayerTypeIPv6Destination             = gopacket.RegisterLayerType(49, gopacket.LayerTypeMetadata{Name: "IPv6Destination", Decoder: gopacket.DecodeFunc(decodeIPv6Destination)})
+       LayerTypeIPSecAH                     = gopacket.RegisterLayerType(50, gopacket.LayerTypeMetadata{Name: "IPSecAH", Decoder: gopacket.DecodeFunc(decodeIPSecAH)})
+       LayerTypeIPSecESP                    = gopacket.RegisterLayerType(51, gopacket.LayerTypeMetadata{Name: "IPSecESP", Decoder: gopacket.DecodeFunc(decodeIPSecESP)})
+       LayerTypeUDPLite                     = gopacket.RegisterLayerType(52, gopacket.LayerTypeMetadata{Name: "UDPLite", Decoder: gopacket.DecodeFunc(decodeUDPLite)})
+       LayerTypeFDDI                        = gopacket.RegisterLayerType(53, gopacket.LayerTypeMetadata{Name: "FDDI", Decoder: gopacket.DecodeFunc(decodeFDDI)})
+       LayerTypeLoopback                    = gopacket.RegisterLayerType(54, gopacket.LayerTypeMetadata{Name: "Loopback", Decoder: gopacket.DecodeFunc(decodeLoopback)})
+       LayerTypeEAP                         = gopacket.RegisterLayerType(55, gopacket.LayerTypeMetadata{Name: "EAP", Decoder: gopacket.DecodeFunc(decodeEAP)})
+       LayerTypeEAPOL                       = gopacket.RegisterLayerType(56, gopacket.LayerTypeMetadata{Name: "EAPOL", Decoder: gopacket.DecodeFunc(decodeEAPOL)})
+       LayerTypeICMPv6                      = gopacket.RegisterLayerType(57, gopacket.LayerTypeMetadata{Name: "ICMPv6", Decoder: gopacket.DecodeFunc(decodeICMPv6)})
+       LayerTypeLinkLayerDiscovery          = gopacket.RegisterLayerType(58, gopacket.LayerTypeMetadata{Name: "LinkLayerDiscovery", Decoder: gopacket.DecodeFunc(decodeLinkLayerDiscovery)})
+       LayerTypeCiscoDiscoveryInfo          = gopacket.RegisterLayerType(59, gopacket.LayerTypeMetadata{Name: "CiscoDiscoveryInfo", Decoder: gopacket.DecodeFunc(decodeCiscoDiscoveryInfo)})
+       LayerTypeLinkLayerDiscoveryInfo      = gopacket.RegisterLayerType(60, gopacket.LayerTypeMetadata{Name: "LinkLayerDiscoveryInfo", Decoder: nil})
+       LayerTypeNortelDiscovery             = gopacket.RegisterLayerType(61, gopacket.LayerTypeMetadata{Name: "NortelDiscovery", Decoder: gopacket.DecodeFunc(decodeNortelDiscovery)})
+       LayerTypeIGMP                        = gopacket.RegisterLayerType(62, gopacket.LayerTypeMetadata{Name: "IGMP", Decoder: gopacket.DecodeFunc(decodeIGMP)})
+       LayerTypePFLog                       = gopacket.RegisterLayerType(63, gopacket.LayerTypeMetadata{Name: "PFLog", Decoder: gopacket.DecodeFunc(decodePFLog)})
+       LayerTypeRadioTap                    = gopacket.RegisterLayerType(64, gopacket.LayerTypeMetadata{Name: "RadioTap", Decoder: gopacket.DecodeFunc(decodeRadioTap)})
+       LayerTypeDot11                       = gopacket.RegisterLayerType(65, gopacket.LayerTypeMetadata{Name: "Dot11", Decoder: gopacket.DecodeFunc(decodeDot11)})
+       LayerTypeDot11Ctrl                   = gopacket.RegisterLayerType(66, gopacket.LayerTypeMetadata{Name: "Dot11Ctrl", Decoder: gopacket.DecodeFunc(decodeDot11Ctrl)})
+       LayerTypeDot11Data                   = gopacket.RegisterLayerType(67, gopacket.LayerTypeMetadata{Name: "Dot11Data", Decoder: gopacket.DecodeFunc(decodeDot11Data)})
+       LayerTypeDot11DataCFAck              = gopacket.RegisterLayerType(68, gopacket.LayerTypeMetadata{Name: "Dot11DataCFAck", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAck)})
+       LayerTypeDot11DataCFPoll             = gopacket.RegisterLayerType(69, gopacket.LayerTypeMetadata{Name: "Dot11DataCFPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataCFPoll)})
+       LayerTypeDot11DataCFAckPoll          = gopacket.RegisterLayerType(70, gopacket.LayerTypeMetadata{Name: "Dot11DataCFAckPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAckPoll)})
+       LayerTypeDot11DataNull               = gopacket.RegisterLayerType(71, gopacket.LayerTypeMetadata{Name: "Dot11DataNull", Decoder: gopacket.DecodeFunc(decodeDot11DataNull)})
+       LayerTypeDot11DataCFAckNoData        = gopacket.RegisterLayerType(72, gopacket.LayerTypeMetadata{Name: "Dot11DataCFAck", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAck)})
+       LayerTypeDot11DataCFPollNoData       = gopacket.RegisterLayerType(73, gopacket.LayerTypeMetadata{Name: "Dot11DataCFPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataCFPoll)})
+       LayerTypeDot11DataCFAckPollNoData    = gopacket.RegisterLayerType(74, gopacket.LayerTypeMetadata{Name: "Dot11DataCFAckPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataCFAckPoll)})
+       LayerTypeDot11DataQOSData            = gopacket.RegisterLayerType(75, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSData", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSData)})
+       LayerTypeDot11DataQOSDataCFAck       = gopacket.RegisterLayerType(76, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSDataCFAck", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAck)})
+       LayerTypeDot11DataQOSDataCFPoll      = gopacket.RegisterLayerType(77, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSDataCFPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSDataCFPoll)})
+       LayerTypeDot11DataQOSDataCFAckPoll   = gopacket.RegisterLayerType(78, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSDataCFAckPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSDataCFAckPoll)})
+       LayerTypeDot11DataQOSNull            = gopacket.RegisterLayerType(79, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSNull", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSNull)})
+       LayerTypeDot11DataQOSCFPollNoData    = gopacket.RegisterLayerType(80, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSCFPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSCFPollNoData)})
+       LayerTypeDot11DataQOSCFAckPollNoData = gopacket.RegisterLayerType(81, gopacket.LayerTypeMetadata{Name: "Dot11DataQOSCFAckPoll", Decoder: gopacket.DecodeFunc(decodeDot11DataQOSCFAckPollNoData)})
+       LayerTypeDot11InformationElement     = gopacket.RegisterLayerType(82, gopacket.LayerTypeMetadata{Name: "Dot11InformationElement", Decoder: gopacket.DecodeFunc(decodeDot11InformationElement)})
+       LayerTypeDot11CtrlCTS                = gopacket.RegisterLayerType(83, gopacket.LayerTypeMetadata{Name: "Dot11CtrlCTS", Decoder: gopacket.DecodeFunc(decodeDot11CtrlCTS)})
+       LayerTypeDot11CtrlRTS                = gopacket.RegisterLayerType(84, gopacket.LayerTypeMetadata{Name: "Dot11CtrlRTS", Decoder: gopacket.DecodeFunc(decodeDot11CtrlRTS)})
+       LayerTypeDot11CtrlBlockAckReq        = gopacket.RegisterLayerType(85, gopacket.LayerTypeMetadata{Name: "Dot11CtrlBlockAckReq", Decoder: gopacket.DecodeFunc(decodeDot11CtrlBlockAckReq)})
+       LayerTypeDot11CtrlBlockAck           = gopacket.RegisterLayerType(86, gopacket.LayerTypeMetadata{Name: "Dot11CtrlBlockAck", Decoder: gopacket.DecodeFunc(decodeDot11CtrlBlockAck)})
+       LayerTypeDot11CtrlPowersavePoll      = gopacket.RegisterLayerType(87, gopacket.LayerTypeMetadata{Name: "Dot11CtrlPowersavePoll", Decoder: gopacket.DecodeFunc(decodeDot11CtrlPowersavePoll)})
+       LayerTypeDot11CtrlAck                = gopacket.RegisterLayerType(88, gopacket.LayerTypeMetadata{Name: "Dot11CtrlAck", Decoder: gopacket.DecodeFunc(decodeDot11CtrlAck)})
+       LayerTypeDot11CtrlCFEnd              = gopacket.RegisterLayerType(89, gopacket.LayerTypeMetadata{Name: "Dot11CtrlCFEnd", Decoder: gopacket.DecodeFunc(decodeDot11CtrlCFEnd)})
+       LayerTypeDot11CtrlCFEndAck           = gopacket.RegisterLayerType(90, gopacket.LayerTypeMetadata{Name: "Dot11CtrlCFEndAck", Decoder: gopacket.DecodeFunc(decodeDot11CtrlCFEndAck)})
+       LayerTypeDot11MgmtAssociationReq     = gopacket.RegisterLayerType(91, gopacket.LayerTypeMetadata{Name: "Dot11MgmtAssociationReq", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAssociationReq)})
+       LayerTypeDot11MgmtAssociationResp    = gopacket.RegisterLayerType(92, gopacket.LayerTypeMetadata{Name: "Dot11MgmtAssociationResp", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAssociationResp)})
+       LayerTypeDot11MgmtReassociationReq   = gopacket.RegisterLayerType(93, gopacket.LayerTypeMetadata{Name: "Dot11MgmtReassociationReq", Decoder: gopacket.DecodeFunc(decodeDot11MgmtReassociationReq)})
+       LayerTypeDot11MgmtReassociationResp  = gopacket.RegisterLayerType(94, gopacket.LayerTypeMetadata{Name: "Dot11MgmtReassociationResp", Decoder: gopacket.DecodeFunc(decodeDot11MgmtReassociationResp)})
+       LayerTypeDot11MgmtProbeReq           = gopacket.RegisterLayerType(95, gopacket.LayerTypeMetadata{Name: "Dot11MgmtProbeReq", Decoder: gopacket.DecodeFunc(decodeDot11MgmtProbeReq)})
+       LayerTypeDot11MgmtProbeResp          = gopacket.RegisterLayerType(96, gopacket.LayerTypeMetadata{Name: "Dot11MgmtProbeResp", Decoder: gopacket.DecodeFunc(decodeDot11MgmtProbeResp)})
+       LayerTypeDot11MgmtMeasurementPilot   = gopacket.RegisterLayerType(97, gopacket.LayerTypeMetadata{Name: "Dot11MgmtMeasurementPilot", Decoder: gopacket.DecodeFunc(decodeDot11MgmtMeasurementPilot)})
+       LayerTypeDot11MgmtBeacon             = gopacket.RegisterLayerType(98, gopacket.LayerTypeMetadata{Name: "Dot11MgmtBeacon", Decoder: gopacket.DecodeFunc(decodeDot11MgmtBeacon)})
+       LayerTypeDot11MgmtATIM               = gopacket.RegisterLayerType(99, gopacket.LayerTypeMetadata{Name: "Dot11MgmtATIM", Decoder: gopacket.DecodeFunc(decodeDot11MgmtATIM)})
+       LayerTypeDot11MgmtDisassociation     = gopacket.RegisterLayerType(100, gopacket.LayerTypeMetadata{Name: "Dot11MgmtDisassociation", Decoder: gopacket.DecodeFunc(decodeDot11MgmtDisassociation)})
+       LayerTypeDot11MgmtAuthentication     = gopacket.RegisterLayerType(101, gopacket.LayerTypeMetadata{Name: "Dot11MgmtAuthentication", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAuthentication)})
+       LayerTypeDot11MgmtDeauthentication   = gopacket.RegisterLayerType(102, gopacket.LayerTypeMetadata{Name: "Dot11MgmtDeauthentication", Decoder: gopacket.DecodeFunc(decodeDot11MgmtDeauthentication)})
+       LayerTypeDot11MgmtAction             = gopacket.RegisterLayerType(103, gopacket.LayerTypeMetadata{Name: "Dot11MgmtAction", Decoder: gopacket.DecodeFunc(decodeDot11MgmtAction)})
+       LayerTypeDot11MgmtActionNoAck        = gopacket.RegisterLayerType(104, gopacket.LayerTypeMetadata{Name: "Dot11MgmtActionNoAck", Decoder: gopacket.DecodeFunc(decodeDot11MgmtActionNoAck)})
+       LayerTypeDot11MgmtArubaWLAN          = gopacket.RegisterLayerType(105, gopacket.LayerTypeMetadata{Name: "Dot11MgmtArubaWLAN", Decoder: gopacket.DecodeFunc(decodeDot11MgmtArubaWLAN)})
+       LayerTypeDot11WEP                    = gopacket.RegisterLayerType(106, gopacket.LayerTypeMetadata{Name: "Dot11WEP", Decoder: gopacket.DecodeFunc(decodeDot11WEP)})
+       LayerTypeDNS                         = gopacket.RegisterLayerType(107, gopacket.LayerTypeMetadata{Name: "DNS", Decoder: gopacket.DecodeFunc(decodeDNS)})
+       LayerTypeUSB                         = gopacket.RegisterLayerType(108, gopacket.LayerTypeMetadata{Name: "USB", Decoder: gopacket.DecodeFunc(decodeUSB)})
+       LayerTypeUSBRequestBlockSetup        = gopacket.RegisterLayerType(109, gopacket.LayerTypeMetadata{Name: "USBRequestBlockSetup", Decoder: gopacket.DecodeFunc(decodeUSBRequestBlockSetup)})
+       LayerTypeUSBControl                  = gopacket.RegisterLayerType(110, gopacket.LayerTypeMetadata{Name: "USBControl", Decoder: gopacket.DecodeFunc(decodeUSBControl)})
+       LayerTypeUSBInterrupt                = gopacket.RegisterLayerType(111, gopacket.LayerTypeMetadata{Name: "USBInterrupt", Decoder: gopacket.DecodeFunc(decodeUSBInterrupt)})
+       LayerTypeUSBBulk                     = gopacket.RegisterLayerType(112, gopacket.LayerTypeMetadata{Name: "USBBulk", Decoder: gopacket.DecodeFunc(decodeUSBBulk)})
+       LayerTypeLinuxSLL                    = gopacket.RegisterLayerType(113, gopacket.LayerTypeMetadata{Name: "Linux SLL", Decoder: gopacket.DecodeFunc(decodeLinuxSLL)})
+       LayerTypeSFlow                       = gopacket.RegisterLayerType(114, gopacket.LayerTypeMetadata{Name: "SFlow", Decoder: gopacket.DecodeFunc(decodeSFlow)})
+       LayerTypePrismHeader                 = gopacket.RegisterLayerType(115, gopacket.LayerTypeMetadata{Name: "Prism monitor mode header", Decoder: gopacket.DecodeFunc(decodePrismHeader)})
+       LayerTypeVXLAN                       = gopacket.RegisterLayerType(116, gopacket.LayerTypeMetadata{Name: "VXLAN", Decoder: gopacket.DecodeFunc(decodeVXLAN)})
+       LayerTypeNTP                         = gopacket.RegisterLayerType(117, gopacket.LayerTypeMetadata{Name: "NTP", Decoder: gopacket.DecodeFunc(decodeNTP)})
+       LayerTypeDHCPv4                      = gopacket.RegisterLayerType(118, gopacket.LayerTypeMetadata{Name: "DHCPv4", Decoder: gopacket.DecodeFunc(decodeDHCPv4)})
+       LayerTypeVRRP                        = gopacket.RegisterLayerType(119, gopacket.LayerTypeMetadata{Name: "VRRP", Decoder: gopacket.DecodeFunc(decodeVRRP)})
+       LayerTypeGeneve                      = gopacket.RegisterLayerType(120, gopacket.LayerTypeMetadata{Name: "Geneve", Decoder: gopacket.DecodeFunc(decodeGeneve)})
+       LayerTypeSTP                         = gopacket.RegisterLayerType(121, gopacket.LayerTypeMetadata{Name: "STP", Decoder: gopacket.DecodeFunc(decodeSTP)})
+       LayerTypeBFD                         = gopacket.RegisterLayerType(122, gopacket.LayerTypeMetadata{Name: "BFD", Decoder: gopacket.DecodeFunc(decodeBFD)})
+       LayerTypeOSPF                        = gopacket.RegisterLayerType(123, gopacket.LayerTypeMetadata{Name: "OSPF", Decoder: gopacket.DecodeFunc(decodeOSPF)})
+)
+
+var (
+       // LayerClassIPNetwork contains TCP/IP network layer types.
+       LayerClassIPNetwork = gopacket.NewLayerClass([]gopacket.LayerType{
+               LayerTypeIPv4,
+               LayerTypeIPv6,
+       })
+       // LayerClassIPTransport contains TCP/IP transport layer types.
+       LayerClassIPTransport = gopacket.NewLayerClass([]gopacket.LayerType{
+               LayerTypeTCP,
+               LayerTypeUDP,
+               LayerTypeSCTP,
+       })
+       // LayerClassIPControl contains TCP/IP control protocols.
+       LayerClassIPControl = gopacket.NewLayerClass([]gopacket.LayerType{
+               LayerTypeICMPv4,
+               LayerTypeICMPv6,
+       })
+       // LayerClassSCTPChunk contains SCTP chunk types (not the top-level SCTP
+       // layer).
+       LayerClassSCTPChunk = gopacket.NewLayerClass([]gopacket.LayerType{
+               LayerTypeSCTPUnknownChunkType,
+               LayerTypeSCTPData,
+               LayerTypeSCTPInit,
+               LayerTypeSCTPSack,
+               LayerTypeSCTPHeartbeat,
+               LayerTypeSCTPError,
+               LayerTypeSCTPShutdown,
+               LayerTypeSCTPShutdownAck,
+               LayerTypeSCTPCookieEcho,
+               LayerTypeSCTPEmptyLayer,
+               LayerTypeSCTPInitAck,
+               LayerTypeSCTPHeartbeatAck,
+               LayerTypeSCTPAbort,
+               LayerTypeSCTPShutdownComplete,
+               LayerTypeSCTPCookieAck,
+       })
+       // LayerClassIPv6Extension contains IPv6 extension headers.
+       LayerClassIPv6Extension = gopacket.NewLayerClass([]gopacket.LayerType{
+               LayerTypeIPv6HopByHop,
+               LayerTypeIPv6Routing,
+               LayerTypeIPv6Fragment,
+               LayerTypeIPv6Destination,
+       })
+       LayerClassIPSec = gopacket.NewLayerClass([]gopacket.LayerType{
+               LayerTypeIPSecAH,
+               LayerTypeIPSecESP,
+       })
+)
diff --git a/vendor/github.com/google/gopacket/layers/linux_sll.go b/vendor/github.com/google/gopacket/layers/linux_sll.go
new file mode 100644 (file)
index 0000000..b186053
--- /dev/null
@@ -0,0 +1,96 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "net"
+
+       "github.com/google/gopacket"
+)
+
+type LinuxSLLPacketType uint16
+
+const (
+       LinuxSLLPacketTypeHost      LinuxSLLPacketType = 0 // To us
+       LinuxSLLPacketTypeBroadcast LinuxSLLPacketType = 1 // To all
+       LinuxSLLPacketTypeMulticast LinuxSLLPacketType = 2 // To group
+       LinuxSLLPacketTypeOtherhost LinuxSLLPacketType = 3 // To someone else
+       LinuxSLLPacketTypeOutgoing  LinuxSLLPacketType = 4 // Outgoing of any type
+       // These ones are invisible by user level
+       LinuxSLLPacketTypeLoopback  LinuxSLLPacketType = 5 // MC/BRD frame looped back
+       LinuxSLLPacketTypeFastroute LinuxSLLPacketType = 6 // Fastrouted frame
+)
+
+func (l LinuxSLLPacketType) String() string {
+       switch l {
+       case LinuxSLLPacketTypeHost:
+               return "host"
+       case LinuxSLLPacketTypeBroadcast:
+               return "broadcast"
+       case LinuxSLLPacketTypeMulticast:
+               return "multicast"
+       case LinuxSLLPacketTypeOtherhost:
+               return "otherhost"
+       case LinuxSLLPacketTypeOutgoing:
+               return "outgoing"
+       case LinuxSLLPacketTypeLoopback:
+               return "loopback"
+       case LinuxSLLPacketTypeFastroute:
+               return "fastroute"
+       }
+       return fmt.Sprintf("Unknown(%d)", int(l))
+}
+
+type LinuxSLL struct {
+       BaseLayer
+       PacketType   LinuxSLLPacketType
+       AddrLen      uint16
+       Addr         net.HardwareAddr
+       EthernetType EthernetType
+}
+
+// LayerType returns LayerTypeLinuxSLL.
+func (sll *LinuxSLL) LayerType() gopacket.LayerType { return LayerTypeLinuxSLL }
+
+func (sll *LinuxSLL) CanDecode() gopacket.LayerClass {
+       return LayerTypeLinuxSLL
+}
+
+func (sll *LinuxSLL) LinkFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointMAC, sll.Addr, nil)
+}
+
+func (sll *LinuxSLL) NextLayerType() gopacket.LayerType {
+       return sll.EthernetType.LayerType()
+}
+
+func (sll *LinuxSLL) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 16 {
+               return errors.New("Linux SLL packet too small")
+       }
+       sll.PacketType = LinuxSLLPacketType(binary.BigEndian.Uint16(data[0:2]))
+       sll.AddrLen = binary.BigEndian.Uint16(data[4:6])
+
+       sll.Addr = net.HardwareAddr(data[6 : sll.AddrLen+6])
+       sll.EthernetType = EthernetType(binary.BigEndian.Uint16(data[14:16]))
+       sll.BaseLayer = BaseLayer{data[:16], data[16:]}
+
+       return nil
+}
+
+func decodeLinuxSLL(data []byte, p gopacket.PacketBuilder) error {
+       sll := &LinuxSLL{}
+       if err := sll.DecodeFromBytes(data, p); err != nil {
+               return err
+       }
+       p.AddLayer(sll)
+       p.SetLinkLayer(sll)
+       return p.NextDecoder(sll.EthernetType)
+}
diff --git a/vendor/github.com/google/gopacket/layers/llc.go b/vendor/github.com/google/gopacket/layers/llc.go
new file mode 100644 (file)
index 0000000..59453fe
--- /dev/null
@@ -0,0 +1,146 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+
+       "github.com/google/gopacket"
+)
+
+// LLC is the layer used for 802.2 Logical Link Control headers.
+// See http://standards.ieee.org/getieee802/download/802.2-1998.pdf
+type LLC struct {
+       BaseLayer
+       DSAP    uint8
+       IG      bool // true means group, false means individual
+       SSAP    uint8
+       CR      bool // true means response, false means command
+       Control uint16
+}
+
+// LayerType returns gopacket.LayerTypeLLC.
+func (l *LLC) LayerType() gopacket.LayerType { return LayerTypeLLC }
+
+// SNAP is used inside LLC.  See
+// http://standards.ieee.org/getieee802/download/802-2001.pdf.
+// From http://en.wikipedia.org/wiki/Subnetwork_Access_Protocol:
+//  "[T]he Subnetwork Access Protocol (SNAP) is a mechanism for multiplexing,
+//  on networks using IEEE 802.2 LLC, more protocols than can be distinguished
+//  by the 8-bit 802.2 Service Access Point (SAP) fields."
+type SNAP struct {
+       BaseLayer
+       OrganizationalCode []byte
+       Type               EthernetType
+}
+
+// LayerType returns gopacket.LayerTypeSNAP.
+func (s *SNAP) LayerType() gopacket.LayerType { return LayerTypeSNAP }
+
+func decodeLLC(data []byte, p gopacket.PacketBuilder) error {
+       l := &LLC{
+               DSAP:    data[0] & 0xFE,
+               IG:      data[0]&0x1 != 0,
+               SSAP:    data[1] & 0xFE,
+               CR:      data[1]&0x1 != 0,
+               Control: uint16(data[2]),
+       }
+       if l.Control&0x1 == 0 || l.Control&0x3 == 0x1 {
+               l.Control = l.Control<<8 | uint16(data[3])
+               l.Contents = data[:4]
+               l.Payload = data[4:]
+       } else {
+               l.Contents = data[:3]
+               l.Payload = data[3:]
+       }
+       p.AddLayer(l)
+       switch {
+       case l.DSAP == 0xAA && l.SSAP == 0xAA:
+               return p.NextDecoder(LayerTypeSNAP)
+       case l.DSAP == 0x42 && l.SSAP == 0x42:
+               return p.NextDecoder(LayerTypeSTP)
+       }
+       return p.NextDecoder(gopacket.DecodeUnknown)
+}
+
+func decodeSNAP(data []byte, p gopacket.PacketBuilder) error {
+       s := &SNAP{
+               OrganizationalCode: data[:3],
+               Type:               EthernetType(binary.BigEndian.Uint16(data[3:5])),
+               BaseLayer:          BaseLayer{data[:5], data[5:]},
+       }
+       p.AddLayer(s)
+       // BUG(gconnell):  When decoding SNAP, we treat the SNAP type as an Ethernet
+       // type.  This may not actually be an ethernet type in all cases,
+       // depending on the organizational code.  Right now, we don't check.
+       return p.NextDecoder(s.Type)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (l *LLC) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       var ig_flag, cr_flag byte
+       var length int
+
+       if l.Control&0xFF00 != 0 {
+               length = 4
+       } else {
+               length = 3
+       }
+
+       if l.DSAP&0x1 != 0 {
+               return errors.New("DSAP value invalid, should not include IG flag bit")
+       }
+
+       if l.SSAP&0x1 != 0 {
+               return errors.New("SSAP value invalid, should not include CR flag bit")
+       }
+
+       if buf, err := b.PrependBytes(length); err != nil {
+               return err
+       } else {
+               ig_flag = 0
+               if l.IG {
+                       ig_flag = 0x1
+               }
+
+               cr_flag = 0
+               if l.CR {
+                       cr_flag = 0x1
+               }
+
+               buf[0] = l.DSAP + ig_flag
+               buf[1] = l.SSAP + cr_flag
+
+               if length == 4 {
+                       buf[2] = uint8(l.Control >> 8)
+                       buf[3] = uint8(l.Control)
+               } else {
+                       buf[2] = uint8(l.Control)
+               }
+       }
+
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (s *SNAP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       if buf, err := b.PrependBytes(5); err != nil {
+               return err
+       } else {
+               buf[0] = s.OrganizationalCode[0]
+               buf[1] = s.OrganizationalCode[1]
+               buf[2] = s.OrganizationalCode[2]
+               binary.BigEndian.PutUint16(buf[3:5], uint16(s.Type))
+       }
+
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/lldp.go b/vendor/github.com/google/gopacket/layers/lldp.go
new file mode 100644 (file)
index 0000000..92ec7da
--- /dev/null
@@ -0,0 +1,1530 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+
+       "github.com/google/gopacket"
+)
+
+// LLDPTLVType is the type of each TLV value in a LinkLayerDiscovery packet.
+type LLDPTLVType byte
+
+const (
+       LLDPTLVEnd             LLDPTLVType = 0
+       LLDPTLVChassisID       LLDPTLVType = 1
+       LLDPTLVPortID          LLDPTLVType = 2
+       LLDPTLVTTL             LLDPTLVType = 3
+       LLDPTLVPortDescription LLDPTLVType = 4
+       LLDPTLVSysName         LLDPTLVType = 5
+       LLDPTLVSysDescription  LLDPTLVType = 6
+       LLDPTLVSysCapabilities LLDPTLVType = 7
+       LLDPTLVMgmtAddress     LLDPTLVType = 8
+       LLDPTLVOrgSpecific     LLDPTLVType = 127
+)
+
+// LinkLayerDiscoveryValue is a TLV value inside a LinkLayerDiscovery packet layer.
+type LinkLayerDiscoveryValue struct {
+       Type   LLDPTLVType
+       Length uint16
+       Value  []byte
+}
+
+// LLDPChassisIDSubType specifies the value type for a single LLDPChassisID.ID
+type LLDPChassisIDSubType byte
+
+// LLDP Chassis Types
+const (
+       LLDPChassisIDSubTypeReserved    LLDPChassisIDSubType = 0
+       LLDPChassisIDSubTypeChassisComp LLDPChassisIDSubType = 1
+       LLDPChassisIDSubtypeIfaceAlias  LLDPChassisIDSubType = 2
+       LLDPChassisIDSubTypePortComp    LLDPChassisIDSubType = 3
+       LLDPChassisIDSubTypeMACAddr     LLDPChassisIDSubType = 4
+       LLDPChassisIDSubTypeNetworkAddr LLDPChassisIDSubType = 5
+       LLDPChassisIDSubtypeIfaceName   LLDPChassisIDSubType = 6
+       LLDPChassisIDSubTypeLocal       LLDPChassisIDSubType = 7
+)
+
+type LLDPChassisID struct {
+       Subtype LLDPChassisIDSubType
+       ID      []byte
+}
+
+// LLDPPortIDSubType specifies the value type for a single LLDPPortID.ID
+type LLDPPortIDSubType byte
+
+// LLDP PortID types
+const (
+       LLDPPortIDSubtypeReserved       LLDPPortIDSubType = 0
+       LLDPPortIDSubtypeIfaceAlias     LLDPPortIDSubType = 1
+       LLDPPortIDSubtypePortComp       LLDPPortIDSubType = 2
+       LLDPPortIDSubtypeMACAddr        LLDPPortIDSubType = 3
+       LLDPPortIDSubtypeNetworkAddr    LLDPPortIDSubType = 4
+       LLDPPortIDSubtypeIfaceName      LLDPPortIDSubType = 5
+       LLDPPortIDSubtypeAgentCircuitID LLDPPortIDSubType = 6
+       LLDPPortIDSubtypeLocal          LLDPPortIDSubType = 7
+)
+
+type LLDPPortID struct {
+       Subtype LLDPPortIDSubType
+       ID      []byte
+}
+
+// LinkLayerDiscovery is a packet layer containing the LinkLayer Discovery Protocol.
+// See http:http://standards.ieee.org/getieee802/download/802.1AB-2009.pdf
+// ChassisID, PortID and TTL are mandatory TLV's. Other values can be decoded
+// with DecodeValues()
+type LinkLayerDiscovery struct {
+       BaseLayer
+       ChassisID LLDPChassisID
+       PortID    LLDPPortID
+       TTL       uint16
+       Values    []LinkLayerDiscoveryValue
+}
+
+type IEEEOUI uint32
+
+// http://standards.ieee.org/develop/regauth/oui/oui.txt
+const (
+       IEEEOUI8021     IEEEOUI = 0x0080c2
+       IEEEOUI8023     IEEEOUI = 0x00120f
+       IEEEOUI80211    IEEEOUI = 0x000fac
+       IEEEOUI8021Qbg  IEEEOUI = 0x0013BF
+       IEEEOUICisco2   IEEEOUI = 0x000142
+       IEEEOUIMedia    IEEEOUI = 0x0012bb // TR-41
+       IEEEOUIProfinet IEEEOUI = 0x000ecf
+       IEEEOUIDCBX     IEEEOUI = 0x001b21
+)
+
+// LLDPOrgSpecificTLV is an Organisation-specific TLV
+type LLDPOrgSpecificTLV struct {
+       OUI     IEEEOUI
+       SubType uint8
+       Info    []byte
+}
+
+// LLDPCapabilities Types
+const (
+       LLDPCapsOther       uint16 = 1 << 0
+       LLDPCapsRepeater    uint16 = 1 << 1
+       LLDPCapsBridge      uint16 = 1 << 2
+       LLDPCapsWLANAP      uint16 = 1 << 3
+       LLDPCapsRouter      uint16 = 1 << 4
+       LLDPCapsPhone       uint16 = 1 << 5
+       LLDPCapsDocSis      uint16 = 1 << 6
+       LLDPCapsStationOnly uint16 = 1 << 7
+       LLDPCapsCVLAN       uint16 = 1 << 8
+       LLDPCapsSVLAN       uint16 = 1 << 9
+       LLDPCapsTmpr        uint16 = 1 << 10
+)
+
+// LLDPCapabilities represents the capabilities of a device
+type LLDPCapabilities struct {
+       Other       bool
+       Repeater    bool
+       Bridge      bool
+       WLANAP      bool
+       Router      bool
+       Phone       bool
+       DocSis      bool
+       StationOnly bool
+       CVLAN       bool
+       SVLAN       bool
+       TMPR        bool
+}
+
+type LLDPSysCapabilities struct {
+       SystemCap  LLDPCapabilities
+       EnabledCap LLDPCapabilities
+}
+
+type IANAAddressFamily byte
+
+// LLDP Management Address Subtypes
+// http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml
+const (
+       IANAAddressFamilyReserved IANAAddressFamily = 0
+       IANAAddressFamilyIPV4     IANAAddressFamily = 1
+       IANAAddressFamilyIPV6     IANAAddressFamily = 2
+       IANAAddressFamilyNSAP     IANAAddressFamily = 3
+       IANAAddressFamilyHDLC     IANAAddressFamily = 4
+       IANAAddressFamilyBBN1822  IANAAddressFamily = 5
+       IANAAddressFamily802      IANAAddressFamily = 6
+       IANAAddressFamilyE163     IANAAddressFamily = 7
+       IANAAddressFamilyE164     IANAAddressFamily = 8
+       IANAAddressFamilyF69      IANAAddressFamily = 9
+       IANAAddressFamilyX121     IANAAddressFamily = 10
+       IANAAddressFamilyIPX      IANAAddressFamily = 11
+       IANAAddressFamilyAtalk    IANAAddressFamily = 12
+       IANAAddressFamilyDecnet   IANAAddressFamily = 13
+       IANAAddressFamilyBanyan   IANAAddressFamily = 14
+       IANAAddressFamilyE164NSAP IANAAddressFamily = 15
+       IANAAddressFamilyDNS      IANAAddressFamily = 16
+       IANAAddressFamilyDistname IANAAddressFamily = 17
+       IANAAddressFamilyASNumber IANAAddressFamily = 18
+       IANAAddressFamilyXTPIPV4  IANAAddressFamily = 19
+       IANAAddressFamilyXTPIPV6  IANAAddressFamily = 20
+       IANAAddressFamilyXTP      IANAAddressFamily = 21
+       IANAAddressFamilyFcWWPN   IANAAddressFamily = 22
+       IANAAddressFamilyFcWWNN   IANAAddressFamily = 23
+       IANAAddressFamilyGWID     IANAAddressFamily = 24
+       IANAAddressFamilyL2VPN    IANAAddressFamily = 25
+)
+
+type LLDPInterfaceSubtype byte
+
+// LLDP Interface Subtypes
+const (
+       LLDPInterfaceSubtypeUnknown LLDPInterfaceSubtype = 1
+       LLDPInterfaceSubtypeifIndex LLDPInterfaceSubtype = 2
+       LLDPInterfaceSubtypeSysPort LLDPInterfaceSubtype = 3
+)
+
+type LLDPMgmtAddress struct {
+       Subtype          IANAAddressFamily
+       Address          []byte
+       InterfaceSubtype LLDPInterfaceSubtype
+       InterfaceNumber  uint32
+       OID              string
+}
+
+// LinkLayerDiscoveryInfo represents the decoded details for a set of LinkLayerDiscoveryValues
+// Organisation-specific TLV's can be decoded using the various Decode() methods
+type LinkLayerDiscoveryInfo struct {
+       BaseLayer
+       PortDescription string
+       SysName         string
+       SysDescription  string
+       SysCapabilities LLDPSysCapabilities
+       MgmtAddress     LLDPMgmtAddress
+       OrgTLVs         []LLDPOrgSpecificTLV      // Private TLVs
+       Unknown         []LinkLayerDiscoveryValue // undecoded TLVs
+}
+
+/// IEEE 802.1 TLV Subtypes
+const (
+       LLDP8021SubtypePortVLANID       uint8 = 1
+       LLDP8021SubtypeProtocolVLANID   uint8 = 2
+       LLDP8021SubtypeVLANName         uint8 = 3
+       LLDP8021SubtypeProtocolIdentity uint8 = 4
+       LLDP8021SubtypeVDIUsageDigest   uint8 = 5
+       LLDP8021SubtypeManagementVID    uint8 = 6
+       LLDP8021SubtypeLinkAggregation  uint8 = 7
+)
+
+// VLAN Port Protocol ID options
+const (
+       LLDPProtocolVLANIDCapability byte = 1 << 1
+       LLDPProtocolVLANIDStatus     byte = 1 << 2
+)
+
+type PortProtocolVLANID struct {
+       Supported bool
+       Enabled   bool
+       ID        uint16
+}
+
+type VLANName struct {
+       ID   uint16
+       Name string
+}
+
+type ProtocolIdentity []byte
+
+// LACP options
+const (
+       LLDPAggregationCapability byte = 1 << 0
+       LLDPAggregationStatus     byte = 1 << 1
+)
+
+// IEEE 802 Link Aggregation parameters
+type LLDPLinkAggregation struct {
+       Supported bool
+       Enabled   bool
+       PortID    uint32
+}
+
+// LLDPInfo8021 represents the information carried in 802.1 Org-specific TLVs
+type LLDPInfo8021 struct {
+       PVID               uint16
+       PPVIDs             []PortProtocolVLANID
+       VLANNames          []VLANName
+       ProtocolIdentities []ProtocolIdentity
+       VIDUsageDigest     uint32
+       ManagementVID      uint16
+       LinkAggregation    LLDPLinkAggregation
+}
+
+// IEEE 802.3 TLV Subtypes
+const (
+       LLDP8023SubtypeMACPHY          uint8 = 1
+       LLDP8023SubtypeMDIPower        uint8 = 2
+       LLDP8023SubtypeLinkAggregation uint8 = 3
+       LLDP8023SubtypeMTU             uint8 = 4
+)
+
+// MACPHY options
+const (
+       LLDPMACPHYCapability byte = 1 << 0
+       LLDPMACPHYStatus     byte = 1 << 1
+)
+
+// From IANA-MAU-MIB (introduced by RFC 4836) - dot3MauType
+const (
+       LLDPMAUTypeUnknown         uint16 = 0
+       LLDPMAUTypeAUI             uint16 = 1
+       LLDPMAUType10Base5         uint16 = 2
+       LLDPMAUTypeFOIRL           uint16 = 3
+       LLDPMAUType10Base2         uint16 = 4
+       LLDPMAUType10BaseT         uint16 = 5
+       LLDPMAUType10BaseFP        uint16 = 6
+       LLDPMAUType10BaseFB        uint16 = 7
+       LLDPMAUType10BaseFL        uint16 = 8
+       LLDPMAUType10BROAD36       uint16 = 9
+       LLDPMAUType10BaseT_HD      uint16 = 10
+       LLDPMAUType10BaseT_FD      uint16 = 11
+       LLDPMAUType10BaseFL_HD     uint16 = 12
+       LLDPMAUType10BaseFL_FD     uint16 = 13
+       LLDPMAUType100BaseT4       uint16 = 14
+       LLDPMAUType100BaseTX_HD    uint16 = 15
+       LLDPMAUType100BaseTX_FD    uint16 = 16
+       LLDPMAUType100BaseFX_HD    uint16 = 17
+       LLDPMAUType100BaseFX_FD    uint16 = 18
+       LLDPMAUType100BaseT2_HD    uint16 = 19
+       LLDPMAUType100BaseT2_FD    uint16 = 20
+       LLDPMAUType1000BaseX_HD    uint16 = 21
+       LLDPMAUType1000BaseX_FD    uint16 = 22
+       LLDPMAUType1000BaseLX_HD   uint16 = 23
+       LLDPMAUType1000BaseLX_FD   uint16 = 24
+       LLDPMAUType1000BaseSX_HD   uint16 = 25
+       LLDPMAUType1000BaseSX_FD   uint16 = 26
+       LLDPMAUType1000BaseCX_HD   uint16 = 27
+       LLDPMAUType1000BaseCX_FD   uint16 = 28
+       LLDPMAUType1000BaseT_HD    uint16 = 29
+       LLDPMAUType1000BaseT_FD    uint16 = 30
+       LLDPMAUType10GBaseX        uint16 = 31
+       LLDPMAUType10GBaseLX4      uint16 = 32
+       LLDPMAUType10GBaseR        uint16 = 33
+       LLDPMAUType10GBaseER       uint16 = 34
+       LLDPMAUType10GBaseLR       uint16 = 35
+       LLDPMAUType10GBaseSR       uint16 = 36
+       LLDPMAUType10GBaseW        uint16 = 37
+       LLDPMAUType10GBaseEW       uint16 = 38
+       LLDPMAUType10GBaseLW       uint16 = 39
+       LLDPMAUType10GBaseSW       uint16 = 40
+       LLDPMAUType10GBaseCX4      uint16 = 41
+       LLDPMAUType2BaseTL         uint16 = 42
+       LLDPMAUType10PASS_TS       uint16 = 43
+       LLDPMAUType100BaseBX10D    uint16 = 44
+       LLDPMAUType100BaseBX10U    uint16 = 45
+       LLDPMAUType100BaseLX10     uint16 = 46
+       LLDPMAUType1000BaseBX10D   uint16 = 47
+       LLDPMAUType1000BaseBX10U   uint16 = 48
+       LLDPMAUType1000BaseLX10    uint16 = 49
+       LLDPMAUType1000BasePX10D   uint16 = 50
+       LLDPMAUType1000BasePX10U   uint16 = 51
+       LLDPMAUType1000BasePX20D   uint16 = 52
+       LLDPMAUType1000BasePX20U   uint16 = 53
+       LLDPMAUType10GBaseT        uint16 = 54
+       LLDPMAUType10GBaseLRM      uint16 = 55
+       LLDPMAUType1000BaseKX      uint16 = 56
+       LLDPMAUType10GBaseKX4      uint16 = 57
+       LLDPMAUType10GBaseKR       uint16 = 58
+       LLDPMAUType10_1GBasePRX_D1 uint16 = 59
+       LLDPMAUType10_1GBasePRX_D2 uint16 = 60
+       LLDPMAUType10_1GBasePRX_D3 uint16 = 61
+       LLDPMAUType10_1GBasePRX_U1 uint16 = 62
+       LLDPMAUType10_1GBasePRX_U2 uint16 = 63
+       LLDPMAUType10_1GBasePRX_U3 uint16 = 64
+       LLDPMAUType10GBasePR_D1    uint16 = 65
+       LLDPMAUType10GBasePR_D2    uint16 = 66
+       LLDPMAUType10GBasePR_D3    uint16 = 67
+       LLDPMAUType10GBasePR_U1    uint16 = 68
+       LLDPMAUType10GBasePR_U3    uint16 = 69
+)
+
+// From RFC 3636 - ifMauAutoNegCapAdvertisedBits
+const (
+       LLDPMAUPMDOther        uint16 = 1 << 15
+       LLDPMAUPMD10BaseT      uint16 = 1 << 14
+       LLDPMAUPMD10BaseT_FD   uint16 = 1 << 13
+       LLDPMAUPMD100BaseT4    uint16 = 1 << 12
+       LLDPMAUPMD100BaseTX    uint16 = 1 << 11
+       LLDPMAUPMD100BaseTX_FD uint16 = 1 << 10
+       LLDPMAUPMD100BaseT2    uint16 = 1 << 9
+       LLDPMAUPMD100BaseT2_FD uint16 = 1 << 8
+       LLDPMAUPMDFDXPAUSE     uint16 = 1 << 7
+       LLDPMAUPMDFDXAPAUSE    uint16 = 1 << 6
+       LLDPMAUPMDFDXSPAUSE    uint16 = 1 << 5
+       LLDPMAUPMDFDXBPAUSE    uint16 = 1 << 4
+       LLDPMAUPMD1000BaseX    uint16 = 1 << 3
+       LLDPMAUPMD1000BaseX_FD uint16 = 1 << 2
+       LLDPMAUPMD1000BaseT    uint16 = 1 << 1
+       LLDPMAUPMD1000BaseT_FD uint16 = 1 << 0
+)
+
+// Inverted ifMauAutoNegCapAdvertisedBits if required
+// (Some manufacturers misinterpreted the spec -
+// see https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=1455)
+const (
+       LLDPMAUPMDOtherInv        uint16 = 1 << 0
+       LLDPMAUPMD10BaseTInv      uint16 = 1 << 1
+       LLDPMAUPMD10BaseT_FDInv   uint16 = 1 << 2
+       LLDPMAUPMD100BaseT4Inv    uint16 = 1 << 3
+       LLDPMAUPMD100BaseTXInv    uint16 = 1 << 4
+       LLDPMAUPMD100BaseTX_FDInv uint16 = 1 << 5
+       LLDPMAUPMD100BaseT2Inv    uint16 = 1 << 6
+       LLDPMAUPMD100BaseT2_FDInv uint16 = 1 << 7
+       LLDPMAUPMDFDXPAUSEInv     uint16 = 1 << 8
+       LLDPMAUPMDFDXAPAUSEInv    uint16 = 1 << 9
+       LLDPMAUPMDFDXSPAUSEInv    uint16 = 1 << 10
+       LLDPMAUPMDFDXBPAUSEInv    uint16 = 1 << 11
+       LLDPMAUPMD1000BaseXInv    uint16 = 1 << 12
+       LLDPMAUPMD1000BaseX_FDInv uint16 = 1 << 13
+       LLDPMAUPMD1000BaseTInv    uint16 = 1 << 14
+       LLDPMAUPMD1000BaseT_FDInv uint16 = 1 << 15
+)
+
+type LLDPMACPHYConfigStatus struct {
+       AutoNegSupported  bool
+       AutoNegEnabled    bool
+       AutoNegCapability uint16
+       MAUType           uint16
+}
+
+// MDI Power options
+const (
+       LLDPMDIPowerPortClass    byte = 1 << 0
+       LLDPMDIPowerCapability   byte = 1 << 1
+       LLDPMDIPowerStatus       byte = 1 << 2
+       LLDPMDIPowerPairsAbility byte = 1 << 3
+)
+
+type LLDPPowerType byte
+
+type LLDPPowerSource byte
+
+type LLDPPowerPriority byte
+
+const (
+       LLDPPowerPriorityUnknown LLDPPowerPriority = 0
+       LLDPPowerPriorityMedium  LLDPPowerPriority = 1
+       LLDPPowerPriorityHigh    LLDPPowerPriority = 2
+       LLDPPowerPriorityLow     LLDPPowerPriority = 3
+)
+
+type LLDPPowerViaMDI8023 struct {
+       PortClassPSE    bool // false = PD
+       PSESupported    bool
+       PSEEnabled      bool
+       PSEPairsAbility bool
+       PSEPowerPair    uint8
+       PSEClass        uint8
+       Type            LLDPPowerType
+       Source          LLDPPowerSource
+       Priority        LLDPPowerPriority
+       Requested       uint16 // 1-510 Watts
+       Allocated       uint16 // 1-510 Watts
+}
+
+// LLDPInfo8023 represents the information carried in 802.3 Org-specific TLVs
+type LLDPInfo8023 struct {
+       MACPHYConfigStatus LLDPMACPHYConfigStatus
+       PowerViaMDI        LLDPPowerViaMDI8023
+       LinkAggregation    LLDPLinkAggregation
+       MTU                uint16
+}
+
+// IEEE 802.1Qbg TLV Subtypes
+const (
+       LLDP8021QbgEVB   uint8 = 0
+       LLDP8021QbgCDCP  uint8 = 1
+       LLDP8021QbgVDP   uint8 = 2
+       LLDP8021QbgEVB22 uint8 = 13
+)
+
+// LLDPEVBCapabilities Types
+const (
+       LLDPEVBCapsSTD uint16 = 1 << 7
+       LLDPEVBCapsRR  uint16 = 1 << 6
+       LLDPEVBCapsRTE uint16 = 1 << 2
+       LLDPEVBCapsECP uint16 = 1 << 1
+       LLDPEVBCapsVDP uint16 = 1 << 0
+)
+
+// LLDPEVBCapabilities represents the EVB capabilities of a device
+type LLDPEVBCapabilities struct {
+       StandardBridging            bool
+       ReflectiveRelay             bool
+       RetransmissionTimerExponent bool
+       EdgeControlProtocol         bool
+       VSIDiscoveryProtocol        bool
+}
+
+type LLDPEVBSettings struct {
+       Supported      LLDPEVBCapabilities
+       Enabled        LLDPEVBCapabilities
+       SupportedVSIs  uint16
+       ConfiguredVSIs uint16
+       RTEExponent    uint8
+}
+
+// LLDPInfo8021Qbg represents the information carried in 802.1Qbg Org-specific TLVs
+type LLDPInfo8021Qbg struct {
+       EVBSettings LLDPEVBSettings
+}
+
+type LLDPMediaSubtype uint8
+
+// Media TLV Subtypes
+const (
+       LLDPMediaTypeCapabilities LLDPMediaSubtype = 1
+       LLDPMediaTypeNetwork      LLDPMediaSubtype = 2
+       LLDPMediaTypeLocation     LLDPMediaSubtype = 3
+       LLDPMediaTypePower        LLDPMediaSubtype = 4
+       LLDPMediaTypeHardware     LLDPMediaSubtype = 5
+       LLDPMediaTypeFirmware     LLDPMediaSubtype = 6
+       LLDPMediaTypeSoftware     LLDPMediaSubtype = 7
+       LLDPMediaTypeSerial       LLDPMediaSubtype = 8
+       LLDPMediaTypeManufacturer LLDPMediaSubtype = 9
+       LLDPMediaTypeModel        LLDPMediaSubtype = 10
+       LLDPMediaTypeAssetID      LLDPMediaSubtype = 11
+)
+
+type LLDPMediaClass uint8
+
+// Media Class Values
+const (
+       LLDPMediaClassUndefined   LLDPMediaClass = 0
+       LLDPMediaClassEndpointI   LLDPMediaClass = 1
+       LLDPMediaClassEndpointII  LLDPMediaClass = 2
+       LLDPMediaClassEndpointIII LLDPMediaClass = 3
+       LLDPMediaClassNetwork     LLDPMediaClass = 4
+)
+
+// LLDPMediaCapabilities Types
+const (
+       LLDPMediaCapsLLDP      uint16 = 1 << 0
+       LLDPMediaCapsNetwork   uint16 = 1 << 1
+       LLDPMediaCapsLocation  uint16 = 1 << 2
+       LLDPMediaCapsPowerPSE  uint16 = 1 << 3
+       LLDPMediaCapsPowerPD   uint16 = 1 << 4
+       LLDPMediaCapsInventory uint16 = 1 << 5
+)
+
+// LLDPMediaCapabilities represents the LLDP Media capabilities of a device
+type LLDPMediaCapabilities struct {
+       Capabilities  bool
+       NetworkPolicy bool
+       Location      bool
+       PowerPSE      bool
+       PowerPD       bool
+       Inventory     bool
+       Class         LLDPMediaClass
+}
+
+type LLDPApplicationType uint8
+
+const (
+       LLDPAppTypeReserved            LLDPApplicationType = 0
+       LLDPAppTypeVoice               LLDPApplicationType = 1
+       LLDPappTypeVoiceSignaling      LLDPApplicationType = 2
+       LLDPappTypeGuestVoice          LLDPApplicationType = 3
+       LLDPappTypeGuestVoiceSignaling LLDPApplicationType = 4
+       LLDPappTypeSoftphoneVoice      LLDPApplicationType = 5
+       LLDPappTypeVideoConferencing   LLDPApplicationType = 6
+       LLDPappTypeStreamingVideo      LLDPApplicationType = 7
+       LLDPappTypeVideoSignaling      LLDPApplicationType = 8
+)
+
+type LLDPNetworkPolicy struct {
+       ApplicationType LLDPApplicationType
+       Defined         bool
+       Tagged          bool
+       VLANId          uint16
+       L2Priority      uint16
+       DSCPValue       uint8
+}
+
+type LLDPLocationFormat uint8
+
+const (
+       LLDPLocationFormatInvalid    LLDPLocationFormat = 0
+       LLDPLocationFormatCoordinate LLDPLocationFormat = 1
+       LLDPLocationFormatAddress    LLDPLocationFormat = 2
+       LLDPLocationFormatECS        LLDPLocationFormat = 3
+)
+
+type LLDPLocationAddressWhat uint8
+
+const (
+       LLDPLocationAddressWhatDHCP    LLDPLocationAddressWhat = 0
+       LLDPLocationAddressWhatNetwork LLDPLocationAddressWhat = 1
+       LLDPLocationAddressWhatClient  LLDPLocationAddressWhat = 2
+)
+
+type LLDPLocationAddressType uint8
+
+const (
+       LLDPLocationAddressTypeLanguage       LLDPLocationAddressType = 0
+       LLDPLocationAddressTypeNational       LLDPLocationAddressType = 1
+       LLDPLocationAddressTypeCounty         LLDPLocationAddressType = 2
+       LLDPLocationAddressTypeCity           LLDPLocationAddressType = 3
+       LLDPLocationAddressTypeCityDivision   LLDPLocationAddressType = 4
+       LLDPLocationAddressTypeNeighborhood   LLDPLocationAddressType = 5
+       LLDPLocationAddressTypeStreet         LLDPLocationAddressType = 6
+       LLDPLocationAddressTypeLeadingStreet  LLDPLocationAddressType = 16
+       LLDPLocationAddressTypeTrailingStreet LLDPLocationAddressType = 17
+       LLDPLocationAddressTypeStreetSuffix   LLDPLocationAddressType = 18
+       LLDPLocationAddressTypeHouseNum       LLDPLocationAddressType = 19
+       LLDPLocationAddressTypeHouseSuffix    LLDPLocationAddressType = 20
+       LLDPLocationAddressTypeLandmark       LLDPLocationAddressType = 21
+       LLDPLocationAddressTypeAdditional     LLDPLocationAddressType = 22
+       LLDPLocationAddressTypeName           LLDPLocationAddressType = 23
+       LLDPLocationAddressTypePostal         LLDPLocationAddressType = 24
+       LLDPLocationAddressTypeBuilding       LLDPLocationAddressType = 25
+       LLDPLocationAddressTypeUnit           LLDPLocationAddressType = 26
+       LLDPLocationAddressTypeFloor          LLDPLocationAddressType = 27
+       LLDPLocationAddressTypeRoom           LLDPLocationAddressType = 28
+       LLDPLocationAddressTypePlace          LLDPLocationAddressType = 29
+       LLDPLocationAddressTypeScript         LLDPLocationAddressType = 128
+)
+
+type LLDPLocationCoordinate struct {
+       LatitudeResolution  uint8
+       Latitude            uint64
+       LongitudeResolution uint8
+       Longitude           uint64
+       AltitudeType        uint8
+       AltitudeResolution  uint16
+       Altitude            uint32
+       Datum               uint8
+}
+
+type LLDPLocationAddressLine struct {
+       Type  LLDPLocationAddressType
+       Value string
+}
+
+type LLDPLocationAddress struct {
+       What         LLDPLocationAddressWhat
+       CountryCode  string
+       AddressLines []LLDPLocationAddressLine
+}
+
+type LLDPLocationECS struct {
+       ELIN string
+}
+
+// LLDP represents a physical location.
+// Only one of the embedded types will contain values, depending on Format.
+type LLDPLocation struct {
+       Format     LLDPLocationFormat
+       Coordinate LLDPLocationCoordinate
+       Address    LLDPLocationAddress
+       ECS        LLDPLocationECS
+}
+
+type LLDPPowerViaMDI struct {
+       Type     LLDPPowerType
+       Source   LLDPPowerSource
+       Priority LLDPPowerPriority
+       Value    uint16
+}
+
+// LLDPInfoMedia represents the information carried in TR-41 Org-specific TLVs
+type LLDPInfoMedia struct {
+       MediaCapabilities LLDPMediaCapabilities
+       NetworkPolicy     LLDPNetworkPolicy
+       Location          LLDPLocation
+       PowerViaMDI       LLDPPowerViaMDI
+       HardwareRevision  string
+       FirmwareRevision  string
+       SoftwareRevision  string
+       SerialNumber      string
+       Manufacturer      string
+       Model             string
+       AssetID           string
+}
+
+type LLDPCisco2Subtype uint8
+
+// Cisco2 TLV Subtypes
+const (
+       LLDPCisco2PowerViaMDI LLDPCisco2Subtype = 1
+)
+
+const (
+       LLDPCiscoPSESupport   uint8 = 1 << 0
+       LLDPCiscoArchShared   uint8 = 1 << 1
+       LLDPCiscoPDSparePair  uint8 = 1 << 2
+       LLDPCiscoPSESparePair uint8 = 1 << 3
+)
+
+// LLDPInfoCisco2 represents the information carried in Cisco Org-specific TLVs
+type LLDPInfoCisco2 struct {
+       PSEFourWirePoESupported       bool
+       PDSparePairArchitectureShared bool
+       PDRequestSparePairPoEOn       bool
+       PSESparePairPoEOn             bool
+}
+
+// Profinet Subtypes
+type LLDPProfinetSubtype uint8
+
+const (
+       LLDPProfinetPNIODelay         LLDPProfinetSubtype = 1
+       LLDPProfinetPNIOPortStatus    LLDPProfinetSubtype = 2
+       LLDPProfinetPNIOMRPPortStatus LLDPProfinetSubtype = 4
+       LLDPProfinetPNIOChassisMAC    LLDPProfinetSubtype = 5
+       LLDPProfinetPNIOPTCPStatus    LLDPProfinetSubtype = 6
+)
+
+type LLDPPNIODelay struct {
+       RXLocal    uint32
+       RXRemote   uint32
+       TXLocal    uint32
+       TXRemote   uint32
+       CableLocal uint32
+}
+
+type LLDPPNIOPortStatus struct {
+       Class2 uint16
+       Class3 uint16
+}
+
+type LLDPPNIOMRPPortStatus struct {
+       UUID   []byte
+       Status uint16
+}
+
+type LLDPPNIOPTCPStatus struct {
+       MasterAddress     []byte
+       SubdomainUUID     []byte
+       IRDataUUID        []byte
+       PeriodValid       bool
+       PeriodLength      uint32
+       RedPeriodValid    bool
+       RedPeriodBegin    uint32
+       OrangePeriodValid bool
+       OrangePeriodBegin uint32
+       GreenPeriodValid  bool
+       GreenPeriodBegin  uint32
+}
+
+// LLDPInfoProfinet represents the information carried in Profinet Org-specific TLVs
+type LLDPInfoProfinet struct {
+       PNIODelay         LLDPPNIODelay
+       PNIOPortStatus    LLDPPNIOPortStatus
+       PNIOMRPPortStatus LLDPPNIOMRPPortStatus
+       ChassisMAC        []byte
+       PNIOPTCPStatus    LLDPPNIOPTCPStatus
+}
+
+// LayerType returns gopacket.LayerTypeLinkLayerDiscovery.
+func (c *LinkLayerDiscovery) LayerType() gopacket.LayerType {
+       return LayerTypeLinkLayerDiscovery
+}
+
+func decodeLinkLayerDiscovery(data []byte, p gopacket.PacketBuilder) error {
+       var vals []LinkLayerDiscoveryValue
+       vData := data[0:]
+       for len(vData) > 0 {
+               nbit := vData[0] & 0x01
+               t := LLDPTLVType(vData[0] >> 1)
+               val := LinkLayerDiscoveryValue{Type: t, Length: uint16(nbit)<<8 + uint16(vData[1])}
+               if val.Length > 0 {
+                       val.Value = vData[2 : val.Length+2]
+               }
+               vals = append(vals, val)
+               if t == LLDPTLVEnd {
+                       break
+               }
+               if len(vData) < int(2+val.Length) {
+                       return errors.New("Malformed LinkLayerDiscovery Header")
+               }
+               vData = vData[2+val.Length:]
+       }
+       if len(vals) < 4 {
+               return errors.New("Missing mandatory LinkLayerDiscovery TLV")
+       }
+       c := &LinkLayerDiscovery{}
+       gotEnd := false
+       for _, v := range vals {
+               switch v.Type {
+               case LLDPTLVEnd:
+                       gotEnd = true
+               case LLDPTLVChassisID:
+                       if len(v.Value) < 2 {
+                               return errors.New("Malformed LinkLayerDiscovery ChassisID TLV")
+                       }
+                       c.ChassisID.Subtype = LLDPChassisIDSubType(v.Value[0])
+                       c.ChassisID.ID = v.Value[1:]
+               case LLDPTLVPortID:
+                       if len(v.Value) < 2 {
+                               return errors.New("Malformed LinkLayerDiscovery PortID TLV")
+                       }
+                       c.PortID.Subtype = LLDPPortIDSubType(v.Value[0])
+                       c.PortID.ID = v.Value[1:]
+               case LLDPTLVTTL:
+                       if len(v.Value) < 2 {
+                               return errors.New("Malformed LinkLayerDiscovery TTL TLV")
+                       }
+                       c.TTL = binary.BigEndian.Uint16(v.Value[0:2])
+               default:
+                       c.Values = append(c.Values, v)
+               }
+       }
+       if c.ChassisID.Subtype == 0 || c.PortID.Subtype == 0 || !gotEnd {
+               return errors.New("Missing mandatory LinkLayerDiscovery TLV")
+       }
+       c.Contents = data
+       p.AddLayer(c)
+
+       info := &LinkLayerDiscoveryInfo{}
+       p.AddLayer(info)
+       for _, v := range c.Values {
+               switch v.Type {
+               case LLDPTLVPortDescription:
+                       info.PortDescription = string(v.Value)
+               case LLDPTLVSysName:
+                       info.SysName = string(v.Value)
+               case LLDPTLVSysDescription:
+                       info.SysDescription = string(v.Value)
+               case LLDPTLVSysCapabilities:
+                       if err := checkLLDPTLVLen(v, 4); err != nil {
+                               return err
+                       }
+                       info.SysCapabilities.SystemCap = getCapabilities(binary.BigEndian.Uint16(v.Value[0:2]))
+                       info.SysCapabilities.EnabledCap = getCapabilities(binary.BigEndian.Uint16(v.Value[2:4]))
+               case LLDPTLVMgmtAddress:
+                       if err := checkLLDPTLVLen(v, 9); err != nil {
+                               return err
+                       }
+                       mlen := v.Value[0]
+                       if err := checkLLDPTLVLen(v, int(mlen+7)); err != nil {
+                               return err
+                       }
+                       info.MgmtAddress.Subtype = IANAAddressFamily(v.Value[1])
+                       info.MgmtAddress.Address = v.Value[2 : mlen+1]
+                       info.MgmtAddress.InterfaceSubtype = LLDPInterfaceSubtype(v.Value[mlen+1])
+                       info.MgmtAddress.InterfaceNumber = binary.BigEndian.Uint32(v.Value[mlen+2 : mlen+6])
+                       olen := v.Value[mlen+6]
+                       if err := checkLLDPTLVLen(v, int(mlen+6+olen)); err != nil {
+                               return err
+                       }
+                       info.MgmtAddress.OID = string(v.Value[mlen+9 : mlen+9+olen])
+               case LLDPTLVOrgSpecific:
+                       if err := checkLLDPTLVLen(v, 4); err != nil {
+                               return err
+                       }
+                       info.OrgTLVs = append(info.OrgTLVs, LLDPOrgSpecificTLV{IEEEOUI(binary.BigEndian.Uint32(append([]byte{byte(0)}, v.Value[0:3]...))), uint8(v.Value[3]), v.Value[4:]})
+               }
+       }
+       return nil
+}
+
+func (l *LinkLayerDiscoveryInfo) Decode8021() (info LLDPInfo8021, err error) {
+       for _, o := range l.OrgTLVs {
+               if o.OUI != IEEEOUI8021 {
+                       continue
+               }
+               switch o.SubType {
+               case LLDP8021SubtypePortVLANID:
+                       if err = checkLLDPOrgSpecificLen(o, 2); err != nil {
+                               return
+                       }
+                       info.PVID = binary.BigEndian.Uint16(o.Info[0:2])
+               case LLDP8021SubtypeProtocolVLANID:
+                       if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+                               return
+                       }
+                       sup := (o.Info[0]&LLDPProtocolVLANIDCapability > 0)
+                       en := (o.Info[0]&LLDPProtocolVLANIDStatus > 0)
+                       id := binary.BigEndian.Uint16(o.Info[1:3])
+                       info.PPVIDs = append(info.PPVIDs, PortProtocolVLANID{sup, en, id})
+               case LLDP8021SubtypeVLANName:
+                       if err = checkLLDPOrgSpecificLen(o, 2); err != nil {
+                               return
+                       }
+                       id := binary.BigEndian.Uint16(o.Info[0:2])
+                       info.VLANNames = append(info.VLANNames, VLANName{id, string(o.Info[3:])})
+               case LLDP8021SubtypeProtocolIdentity:
+                       if err = checkLLDPOrgSpecificLen(o, 1); err != nil {
+                               return
+                       }
+                       l := int(o.Info[0])
+                       if l > 0 {
+                               info.ProtocolIdentities = append(info.ProtocolIdentities, o.Info[1:1+l])
+                       }
+               case LLDP8021SubtypeVDIUsageDigest:
+                       if err = checkLLDPOrgSpecificLen(o, 4); err != nil {
+                               return
+                       }
+                       info.VIDUsageDigest = binary.BigEndian.Uint32(o.Info[0:4])
+               case LLDP8021SubtypeManagementVID:
+                       if err = checkLLDPOrgSpecificLen(o, 2); err != nil {
+                               return
+                       }
+                       info.ManagementVID = binary.BigEndian.Uint16(o.Info[0:2])
+               case LLDP8021SubtypeLinkAggregation:
+                       if err = checkLLDPOrgSpecificLen(o, 5); err != nil {
+                               return
+                       }
+                       sup := (o.Info[0]&LLDPAggregationCapability > 0)
+                       en := (o.Info[0]&LLDPAggregationStatus > 0)
+                       info.LinkAggregation = LLDPLinkAggregation{sup, en, binary.BigEndian.Uint32(o.Info[1:5])}
+               }
+       }
+       return
+}
+
+func (l *LinkLayerDiscoveryInfo) Decode8023() (info LLDPInfo8023, err error) {
+       for _, o := range l.OrgTLVs {
+               if o.OUI != IEEEOUI8023 {
+                       continue
+               }
+               switch o.SubType {
+               case LLDP8023SubtypeMACPHY:
+                       if err = checkLLDPOrgSpecificLen(o, 5); err != nil {
+                               return
+                       }
+                       sup := (o.Info[0]&LLDPMACPHYCapability > 0)
+                       en := (o.Info[0]&LLDPMACPHYStatus > 0)
+                       ca := binary.BigEndian.Uint16(o.Info[1:3])
+                       mau := binary.BigEndian.Uint16(o.Info[3:5])
+                       info.MACPHYConfigStatus = LLDPMACPHYConfigStatus{sup, en, ca, mau}
+               case LLDP8023SubtypeMDIPower:
+                       if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+                               return
+                       }
+                       info.PowerViaMDI.PortClassPSE = (o.Info[0]&LLDPMDIPowerPortClass > 0)
+                       info.PowerViaMDI.PSESupported = (o.Info[0]&LLDPMDIPowerCapability > 0)
+                       info.PowerViaMDI.PSEEnabled = (o.Info[0]&LLDPMDIPowerStatus > 0)
+                       info.PowerViaMDI.PSEPairsAbility = (o.Info[0]&LLDPMDIPowerPairsAbility > 0)
+                       info.PowerViaMDI.PSEPowerPair = uint8(o.Info[1])
+                       info.PowerViaMDI.PSEClass = uint8(o.Info[2])
+                       if len(o.Info) >= 7 {
+                               info.PowerViaMDI.Type = LLDPPowerType((o.Info[3] & 0xc0) >> 6)
+                               info.PowerViaMDI.Source = LLDPPowerSource((o.Info[3] & 0x30) >> 4)
+                               if info.PowerViaMDI.Type == 1 || info.PowerViaMDI.Type == 3 {
+                                       info.PowerViaMDI.Source += 128 // For Stringify purposes
+                               }
+                               info.PowerViaMDI.Priority = LLDPPowerPriority(o.Info[3] & 0x0f)
+                               info.PowerViaMDI.Requested = binary.BigEndian.Uint16(o.Info[4:6])
+                               info.PowerViaMDI.Allocated = binary.BigEndian.Uint16(o.Info[6:8])
+                       }
+               case LLDP8023SubtypeLinkAggregation:
+                       if err = checkLLDPOrgSpecificLen(o, 5); err != nil {
+                               return
+                       }
+                       sup := (o.Info[0]&LLDPAggregationCapability > 0)
+                       en := (o.Info[0]&LLDPAggregationStatus > 0)
+                       info.LinkAggregation = LLDPLinkAggregation{sup, en, binary.BigEndian.Uint32(o.Info[1:5])}
+               case LLDP8023SubtypeMTU:
+                       if err = checkLLDPOrgSpecificLen(o, 2); err != nil {
+                               return
+                       }
+                       info.MTU = binary.BigEndian.Uint16(o.Info[0:2])
+               }
+       }
+       return
+}
+
+func (l *LinkLayerDiscoveryInfo) Decode8021Qbg() (info LLDPInfo8021Qbg, err error) {
+       for _, o := range l.OrgTLVs {
+               if o.OUI != IEEEOUI8021Qbg {
+                       continue
+               }
+               switch o.SubType {
+               case LLDP8021QbgEVB:
+                       if err = checkLLDPOrgSpecificLen(o, 9); err != nil {
+                               return
+                       }
+                       info.EVBSettings.Supported = getEVBCapabilities(binary.BigEndian.Uint16(o.Info[0:2]))
+                       info.EVBSettings.Enabled = getEVBCapabilities(binary.BigEndian.Uint16(o.Info[2:4]))
+                       info.EVBSettings.SupportedVSIs = binary.BigEndian.Uint16(o.Info[4:6])
+                       info.EVBSettings.ConfiguredVSIs = binary.BigEndian.Uint16(o.Info[6:8])
+                       info.EVBSettings.RTEExponent = uint8(o.Info[8])
+               }
+       }
+       return
+}
+
+func (l *LinkLayerDiscoveryInfo) DecodeMedia() (info LLDPInfoMedia, err error) {
+       for _, o := range l.OrgTLVs {
+               if o.OUI != IEEEOUIMedia {
+                       continue
+               }
+               switch LLDPMediaSubtype(o.SubType) {
+               case LLDPMediaTypeCapabilities:
+                       if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+                               return
+                       }
+                       b := binary.BigEndian.Uint16(o.Info[0:2])
+                       info.MediaCapabilities.Capabilities = (b & LLDPMediaCapsLLDP) > 0
+                       info.MediaCapabilities.NetworkPolicy = (b & LLDPMediaCapsNetwork) > 0
+                       info.MediaCapabilities.Location = (b & LLDPMediaCapsLocation) > 0
+                       info.MediaCapabilities.PowerPSE = (b & LLDPMediaCapsPowerPSE) > 0
+                       info.MediaCapabilities.PowerPD = (b & LLDPMediaCapsPowerPD) > 0
+                       info.MediaCapabilities.Inventory = (b & LLDPMediaCapsInventory) > 0
+                       info.MediaCapabilities.Class = LLDPMediaClass(o.Info[2])
+               case LLDPMediaTypeNetwork:
+                       if err = checkLLDPOrgSpecificLen(o, 4); err != nil {
+                               return
+                       }
+                       info.NetworkPolicy.ApplicationType = LLDPApplicationType(o.Info[0])
+                       b := binary.BigEndian.Uint16(o.Info[1:3])
+                       info.NetworkPolicy.Defined = (b & 0x8000) == 0
+                       info.NetworkPolicy.Tagged = (b & 0x4000) > 0
+                       info.NetworkPolicy.VLANId = (b & 0x1ffe) >> 1
+                       b = binary.BigEndian.Uint16(o.Info[2:4])
+                       info.NetworkPolicy.L2Priority = (b & 0x01c0) >> 6
+                       info.NetworkPolicy.DSCPValue = uint8(o.Info[3] & 0x3f)
+               case LLDPMediaTypeLocation:
+                       if err = checkLLDPOrgSpecificLen(o, 1); err != nil {
+                               return
+                       }
+                       info.Location.Format = LLDPLocationFormat(o.Info[0])
+                       o.Info = o.Info[1:]
+                       switch info.Location.Format {
+                       case LLDPLocationFormatCoordinate:
+                               if err = checkLLDPOrgSpecificLen(o, 16); err != nil {
+                                       return
+                               }
+                               info.Location.Coordinate.LatitudeResolution = uint8(o.Info[0]&0xfc) >> 2
+                               b := binary.BigEndian.Uint64(o.Info[0:8])
+                               info.Location.Coordinate.Latitude = (b & 0x03ffffffff000000) >> 24
+                               info.Location.Coordinate.LongitudeResolution = uint8(o.Info[5]&0xfc) >> 2
+                               b = binary.BigEndian.Uint64(o.Info[5:13])
+                               info.Location.Coordinate.Longitude = (b & 0x03ffffffff000000) >> 24
+                               info.Location.Coordinate.AltitudeType = uint8((o.Info[10] & 0x30) >> 4)
+                               b1 := binary.BigEndian.Uint16(o.Info[10:12])
+                               info.Location.Coordinate.AltitudeResolution = (b1 & 0xfc0) >> 6
+                               b2 := binary.BigEndian.Uint32(o.Info[11:15])
+                               info.Location.Coordinate.Altitude = b2 & 0x3fffffff
+                               info.Location.Coordinate.Datum = uint8(o.Info[15])
+                       case LLDPLocationFormatAddress:
+                               if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+                                       return
+                               }
+                               //ll := uint8(o.Info[0])
+                               info.Location.Address.What = LLDPLocationAddressWhat(o.Info[1])
+                               info.Location.Address.CountryCode = string(o.Info[2:4])
+                               data := o.Info[4:]
+                               for len(data) > 1 {
+                                       aType := LLDPLocationAddressType(data[0])
+                                       aLen := int(data[1])
+                                       if len(data) >= aLen+2 {
+                                               info.Location.Address.AddressLines = append(info.Location.Address.AddressLines, LLDPLocationAddressLine{aType, string(data[2 : aLen+2])})
+                                               data = data[aLen+2:]
+                                       } else {
+                                               break
+                                       }
+                               }
+                       case LLDPLocationFormatECS:
+                               info.Location.ECS.ELIN = string(o.Info)
+                       }
+               case LLDPMediaTypePower:
+                       if err = checkLLDPOrgSpecificLen(o, 3); err != nil {
+                               return
+                       }
+                       info.PowerViaMDI.Type = LLDPPowerType((o.Info[0] & 0xc0) >> 6)
+                       info.PowerViaMDI.Source = LLDPPowerSource((o.Info[0] & 0x30) >> 4)
+                       if info.PowerViaMDI.Type == 1 || info.PowerViaMDI.Type == 3 {
+                               info.PowerViaMDI.Source += 128 // For Stringify purposes
+                       }
+                       info.PowerViaMDI.Priority = LLDPPowerPriority(o.Info[0] & 0x0f)
+                       info.PowerViaMDI.Value = binary.BigEndian.Uint16(o.Info[1:3]) * 100 // 0 to 102.3 w, 0.1W increments
+               case LLDPMediaTypeHardware:
+                       info.HardwareRevision = string(o.Info)
+               case LLDPMediaTypeFirmware:
+                       info.FirmwareRevision = string(o.Info)
+               case LLDPMediaTypeSoftware:
+                       info.SoftwareRevision = string(o.Info)
+               case LLDPMediaTypeSerial:
+                       info.SerialNumber = string(o.Info)
+               case LLDPMediaTypeManufacturer:
+                       info.Manufacturer = string(o.Info)
+               case LLDPMediaTypeModel:
+                       info.Model = string(o.Info)
+               case LLDPMediaTypeAssetID:
+                       info.AssetID = string(o.Info)
+               }
+       }
+       return
+}
+
+func (l *LinkLayerDiscoveryInfo) DecodeCisco2() (info LLDPInfoCisco2, err error) {
+       for _, o := range l.OrgTLVs {
+               if o.OUI != IEEEOUICisco2 {
+                       continue
+               }
+               switch LLDPCisco2Subtype(o.SubType) {
+               case LLDPCisco2PowerViaMDI:
+                       if err = checkLLDPOrgSpecificLen(o, 1); err != nil {
+                               return
+                       }
+                       info.PSEFourWirePoESupported = (o.Info[0] & LLDPCiscoPSESupport) > 0
+                       info.PDSparePairArchitectureShared = (o.Info[0] & LLDPCiscoArchShared) > 0
+                       info.PDRequestSparePairPoEOn = (o.Info[0] & LLDPCiscoPDSparePair) > 0
+                       info.PSESparePairPoEOn = (o.Info[0] & LLDPCiscoPSESparePair) > 0
+               }
+       }
+       return
+}
+
+func (l *LinkLayerDiscoveryInfo) DecodeProfinet() (info LLDPInfoProfinet, err error) {
+       for _, o := range l.OrgTLVs {
+               if o.OUI != IEEEOUIProfinet {
+                       continue
+               }
+               switch LLDPProfinetSubtype(o.SubType) {
+               case LLDPProfinetPNIODelay:
+                       if err = checkLLDPOrgSpecificLen(o, 20); err != nil {
+                               return
+                       }
+                       info.PNIODelay.RXLocal = binary.BigEndian.Uint32(o.Info[0:4])
+                       info.PNIODelay.RXRemote = binary.BigEndian.Uint32(o.Info[4:8])
+                       info.PNIODelay.TXLocal = binary.BigEndian.Uint32(o.Info[8:12])
+                       info.PNIODelay.TXRemote = binary.BigEndian.Uint32(o.Info[12:16])
+                       info.PNIODelay.CableLocal = binary.BigEndian.Uint32(o.Info[16:20])
+               case LLDPProfinetPNIOPortStatus:
+                       if err = checkLLDPOrgSpecificLen(o, 4); err != nil {
+                               return
+                       }
+                       info.PNIOPortStatus.Class2 = binary.BigEndian.Uint16(o.Info[0:2])
+                       info.PNIOPortStatus.Class3 = binary.BigEndian.Uint16(o.Info[2:4])
+               case LLDPProfinetPNIOMRPPortStatus:
+                       if err = checkLLDPOrgSpecificLen(o, 18); err != nil {
+                               return
+                       }
+                       info.PNIOMRPPortStatus.UUID = o.Info[0:16]
+                       info.PNIOMRPPortStatus.Status = binary.BigEndian.Uint16(o.Info[16:18])
+               case LLDPProfinetPNIOChassisMAC:
+                       if err = checkLLDPOrgSpecificLen(o, 6); err != nil {
+                               return
+                       }
+                       info.ChassisMAC = o.Info[0:6]
+               case LLDPProfinetPNIOPTCPStatus:
+                       if err = checkLLDPOrgSpecificLen(o, 54); err != nil {
+                               return
+                       }
+                       info.PNIOPTCPStatus.MasterAddress = o.Info[0:6]
+                       info.PNIOPTCPStatus.SubdomainUUID = o.Info[6:22]
+                       info.PNIOPTCPStatus.IRDataUUID = o.Info[22:38]
+                       b := binary.BigEndian.Uint32(o.Info[38:42])
+                       info.PNIOPTCPStatus.PeriodValid = (b & 0x80000000) > 0
+                       info.PNIOPTCPStatus.PeriodLength = b & 0x7fffffff
+                       b = binary.BigEndian.Uint32(o.Info[42:46])
+                       info.PNIOPTCPStatus.RedPeriodValid = (b & 0x80000000) > 0
+                       info.PNIOPTCPStatus.RedPeriodBegin = b & 0x7fffffff
+                       b = binary.BigEndian.Uint32(o.Info[46:50])
+                       info.PNIOPTCPStatus.OrangePeriodValid = (b & 0x80000000) > 0
+                       info.PNIOPTCPStatus.OrangePeriodBegin = b & 0x7fffffff
+                       b = binary.BigEndian.Uint32(o.Info[50:54])
+                       info.PNIOPTCPStatus.GreenPeriodValid = (b & 0x80000000) > 0
+                       info.PNIOPTCPStatus.GreenPeriodBegin = b & 0x7fffffff
+               }
+       }
+       return
+}
+
+// LayerType returns gopacket.LayerTypeLinkLayerDiscoveryInfo.
+func (c *LinkLayerDiscoveryInfo) LayerType() gopacket.LayerType {
+       return LayerTypeLinkLayerDiscoveryInfo
+}
+
+func getCapabilities(v uint16) (c LLDPCapabilities) {
+       c.Other = (v&LLDPCapsOther > 0)
+       c.Repeater = (v&LLDPCapsRepeater > 0)
+       c.Bridge = (v&LLDPCapsBridge > 0)
+       c.WLANAP = (v&LLDPCapsWLANAP > 0)
+       c.Router = (v&LLDPCapsRouter > 0)
+       c.Phone = (v&LLDPCapsPhone > 0)
+       c.DocSis = (v&LLDPCapsDocSis > 0)
+       c.StationOnly = (v&LLDPCapsStationOnly > 0)
+       c.CVLAN = (v&LLDPCapsCVLAN > 0)
+       c.SVLAN = (v&LLDPCapsSVLAN > 0)
+       c.TMPR = (v&LLDPCapsTmpr > 0)
+       return
+}
+
+func getEVBCapabilities(v uint16) (c LLDPEVBCapabilities) {
+       c.StandardBridging = (v & LLDPEVBCapsSTD) > 0
+       c.StandardBridging = (v & LLDPEVBCapsSTD) > 0
+       c.ReflectiveRelay = (v & LLDPEVBCapsRR) > 0
+       c.RetransmissionTimerExponent = (v & LLDPEVBCapsRTE) > 0
+       c.EdgeControlProtocol = (v & LLDPEVBCapsECP) > 0
+       c.VSIDiscoveryProtocol = (v & LLDPEVBCapsVDP) > 0
+       return
+}
+
+func (t LLDPTLVType) String() (s string) {
+       switch t {
+       case LLDPTLVEnd:
+               s = "TLV End"
+       case LLDPTLVChassisID:
+               s = "Chassis ID"
+       case LLDPTLVPortID:
+               s = "Port ID"
+       case LLDPTLVTTL:
+               s = "TTL"
+       case LLDPTLVPortDescription:
+               s = "Port Description"
+       case LLDPTLVSysName:
+               s = "System Name"
+       case LLDPTLVSysDescription:
+               s = "System Description"
+       case LLDPTLVSysCapabilities:
+               s = "System Capabilities"
+       case LLDPTLVMgmtAddress:
+               s = "Management Address"
+       case LLDPTLVOrgSpecific:
+               s = "Organisation Specific"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPChassisIDSubType) String() (s string) {
+       switch t {
+       case LLDPChassisIDSubTypeReserved:
+               s = "Reserved"
+       case LLDPChassisIDSubTypeChassisComp:
+               s = "Chassis Component"
+       case LLDPChassisIDSubtypeIfaceAlias:
+               s = "Interface Alias"
+       case LLDPChassisIDSubTypePortComp:
+               s = "Port Component"
+       case LLDPChassisIDSubTypeMACAddr:
+               s = "MAC Address"
+       case LLDPChassisIDSubTypeNetworkAddr:
+               s = "Network Address"
+       case LLDPChassisIDSubtypeIfaceName:
+               s = "Interface Name"
+       case LLDPChassisIDSubTypeLocal:
+               s = "Local"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPPortIDSubType) String() (s string) {
+       switch t {
+       case LLDPPortIDSubtypeReserved:
+               s = "Reserved"
+       case LLDPPortIDSubtypeIfaceAlias:
+               s = "Interface Alias"
+       case LLDPPortIDSubtypePortComp:
+               s = "Port Component"
+       case LLDPPortIDSubtypeMACAddr:
+               s = "MAC Address"
+       case LLDPPortIDSubtypeNetworkAddr:
+               s = "Network Address"
+       case LLDPPortIDSubtypeIfaceName:
+               s = "Interface Name"
+       case LLDPPortIDSubtypeAgentCircuitID:
+               s = "Agent Circuit ID"
+       case LLDPPortIDSubtypeLocal:
+               s = "Local"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t IANAAddressFamily) String() (s string) {
+       switch t {
+       case IANAAddressFamilyReserved:
+               s = "Reserved"
+       case IANAAddressFamilyIPV4:
+               s = "IPv4"
+       case IANAAddressFamilyIPV6:
+               s = "IPv6"
+       case IANAAddressFamilyNSAP:
+               s = "NSAP"
+       case IANAAddressFamilyHDLC:
+               s = "HDLC"
+       case IANAAddressFamilyBBN1822:
+               s = "BBN 1822"
+       case IANAAddressFamily802:
+               s = "802 media plus Ethernet 'canonical format'"
+       case IANAAddressFamilyE163:
+               s = "E.163"
+       case IANAAddressFamilyE164:
+               s = "E.164 (SMDS, Frame Relay, ATM)"
+       case IANAAddressFamilyF69:
+               s = "F.69 (Telex)"
+       case IANAAddressFamilyX121:
+               s = "X.121, X.25, Frame Relay"
+       case IANAAddressFamilyIPX:
+               s = "IPX"
+       case IANAAddressFamilyAtalk:
+               s = "Appletalk"
+       case IANAAddressFamilyDecnet:
+               s = "Decnet IV"
+       case IANAAddressFamilyBanyan:
+               s = "Banyan Vines"
+       case IANAAddressFamilyE164NSAP:
+               s = "E.164 with NSAP format subaddress"
+       case IANAAddressFamilyDNS:
+               s = "DNS"
+       case IANAAddressFamilyDistname:
+               s = "Distinguished Name"
+       case IANAAddressFamilyASNumber:
+               s = "AS Number"
+       case IANAAddressFamilyXTPIPV4:
+               s = "XTP over IP version 4"
+       case IANAAddressFamilyXTPIPV6:
+               s = "XTP over IP version 6"
+       case IANAAddressFamilyXTP:
+               s = "XTP native mode XTP"
+       case IANAAddressFamilyFcWWPN:
+               s = "Fibre Channel World-Wide Port Name"
+       case IANAAddressFamilyFcWWNN:
+               s = "Fibre Channel World-Wide Node Name"
+       case IANAAddressFamilyGWID:
+               s = "GWID"
+       case IANAAddressFamilyL2VPN:
+               s = "AFI for Layer 2 VPN"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPInterfaceSubtype) String() (s string) {
+       switch t {
+       case LLDPInterfaceSubtypeUnknown:
+               s = "Unknown"
+       case LLDPInterfaceSubtypeifIndex:
+               s = "IfIndex"
+       case LLDPInterfaceSubtypeSysPort:
+               s = "System Port Number"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPPowerType) String() (s string) {
+       switch t {
+       case 0:
+               s = "Type 2 PSE Device"
+       case 1:
+               s = "Type 2 PD Device"
+       case 2:
+               s = "Type 1 PSE Device"
+       case 3:
+               s = "Type 1 PD Device"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPPowerSource) String() (s string) {
+       switch t {
+       // PD Device
+       case 0:
+               s = "Unknown"
+       case 1:
+               s = "PSE"
+       case 2:
+               s = "Local"
+       case 3:
+               s = "PSE and Local"
+       // PSE Device  (Actual value  + 128)
+       case 128:
+               s = "Unknown"
+       case 129:
+               s = "Primary Power Source"
+       case 130:
+               s = "Backup Power Source"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPPowerPriority) String() (s string) {
+       switch t {
+       case 0:
+               s = "Unknown"
+       case 1:
+               s = "Critical"
+       case 2:
+               s = "High"
+       case 3:
+               s = "Low"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPMediaSubtype) String() (s string) {
+       switch t {
+       case LLDPMediaTypeCapabilities:
+               s = "Media Capabilities "
+       case LLDPMediaTypeNetwork:
+               s = "Network Policy"
+       case LLDPMediaTypeLocation:
+               s = "Location Identification"
+       case LLDPMediaTypePower:
+               s = "Extended Power-via-MDI"
+       case LLDPMediaTypeHardware:
+               s = "Hardware Revision"
+       case LLDPMediaTypeFirmware:
+               s = "Firmware Revision"
+       case LLDPMediaTypeSoftware:
+               s = "Software Revision"
+       case LLDPMediaTypeSerial:
+               s = "Serial Number"
+       case LLDPMediaTypeManufacturer:
+               s = "Manufacturer"
+       case LLDPMediaTypeModel:
+               s = "Model"
+       case LLDPMediaTypeAssetID:
+               s = "Asset ID"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPMediaClass) String() (s string) {
+       switch t {
+       case LLDPMediaClassUndefined:
+               s = "Undefined"
+       case LLDPMediaClassEndpointI:
+               s = "Endpoint Class I"
+       case LLDPMediaClassEndpointII:
+               s = "Endpoint Class II"
+       case LLDPMediaClassEndpointIII:
+               s = "Endpoint Class III"
+       case LLDPMediaClassNetwork:
+               s = "Network connectivity "
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPApplicationType) String() (s string) {
+       switch t {
+       case LLDPAppTypeReserved:
+               s = "Reserved"
+       case LLDPAppTypeVoice:
+               s = "Voice"
+       case LLDPappTypeVoiceSignaling:
+               s = "Voice Signaling"
+       case LLDPappTypeGuestVoice:
+               s = "Guest Voice"
+       case LLDPappTypeGuestVoiceSignaling:
+               s = "Guest Voice Signaling"
+       case LLDPappTypeSoftphoneVoice:
+               s = "Softphone Voice"
+       case LLDPappTypeVideoConferencing:
+               s = "Video Conferencing"
+       case LLDPappTypeStreamingVideo:
+               s = "Streaming Video"
+       case LLDPappTypeVideoSignaling:
+               s = "Video Signaling"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPLocationFormat) String() (s string) {
+       switch t {
+       case LLDPLocationFormatInvalid:
+               s = "Invalid"
+       case LLDPLocationFormatCoordinate:
+               s = "Coordinate-based LCI"
+       case LLDPLocationFormatAddress:
+               s = "Address-based LCO"
+       case LLDPLocationFormatECS:
+               s = "ECS ELIN"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t LLDPLocationAddressType) String() (s string) {
+       switch t {
+       case LLDPLocationAddressTypeLanguage:
+               s = "Language"
+       case LLDPLocationAddressTypeNational:
+               s = "National subdivisions (province, state, etc)"
+       case LLDPLocationAddressTypeCounty:
+               s = "County, parish, district"
+       case LLDPLocationAddressTypeCity:
+               s = "City, township"
+       case LLDPLocationAddressTypeCityDivision:
+               s = "City division, borough, ward"
+       case LLDPLocationAddressTypeNeighborhood:
+               s = "Neighborhood, block"
+       case LLDPLocationAddressTypeStreet:
+               s = "Street"
+       case LLDPLocationAddressTypeLeadingStreet:
+               s = "Leading street direction"
+       case LLDPLocationAddressTypeTrailingStreet:
+               s = "Trailing street suffix"
+       case LLDPLocationAddressTypeStreetSuffix:
+               s = "Street suffix"
+       case LLDPLocationAddressTypeHouseNum:
+               s = "House number"
+       case LLDPLocationAddressTypeHouseSuffix:
+               s = "House number suffix"
+       case LLDPLocationAddressTypeLandmark:
+               s = "Landmark or vanity address"
+       case LLDPLocationAddressTypeAdditional:
+               s = "Additional location information"
+       case LLDPLocationAddressTypeName:
+               s = "Name"
+       case LLDPLocationAddressTypePostal:
+               s = "Postal/ZIP code"
+       case LLDPLocationAddressTypeBuilding:
+               s = "Building"
+       case LLDPLocationAddressTypeUnit:
+               s = "Unit"
+       case LLDPLocationAddressTypeFloor:
+               s = "Floor"
+       case LLDPLocationAddressTypeRoom:
+               s = "Room number"
+       case LLDPLocationAddressTypePlace:
+               s = "Place type"
+       case LLDPLocationAddressTypeScript:
+               s = "Script"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func checkLLDPTLVLen(v LinkLayerDiscoveryValue, l int) (err error) {
+       if len(v.Value) < l {
+               err = fmt.Errorf("Invalid TLV %v length %d (wanted mimimum %v", v.Type, len(v.Value), l)
+       }
+       return
+}
+
+func checkLLDPOrgSpecificLen(o LLDPOrgSpecificTLV, l int) (err error) {
+       if len(o.Info) < l {
+               err = fmt.Errorf("Invalid Org Specific TLV %v length %d (wanted minimum %v)", o.SubType, len(o.Info), l)
+       }
+       return
+}
diff --git a/vendor/github.com/google/gopacket/layers/loopback.go b/vendor/github.com/google/gopacket/layers/loopback.go
new file mode 100644 (file)
index 0000000..839f760
--- /dev/null
@@ -0,0 +1,80 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+
+       "github.com/google/gopacket"
+)
+
+// Loopback contains the header for loopback encapsulation.  This header is
+// used by both BSD and OpenBSD style loopback decoding (pcap's DLT_NULL
+// and DLT_LOOP, respectively).
+type Loopback struct {
+       BaseLayer
+       Family ProtocolFamily
+}
+
+// LayerType returns LayerTypeLoopback.
+func (l *Loopback) LayerType() gopacket.LayerType { return LayerTypeLoopback }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (l *Loopback) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 4 {
+               return errors.New("Loopback packet too small")
+       }
+
+       // The protocol could be either big-endian or little-endian, we're
+       // not sure.  But we're PRETTY sure that the value is less than
+       // 256, so we can check the first two bytes.
+       var prot uint32
+       if data[0] == 0 && data[1] == 0 {
+               prot = binary.BigEndian.Uint32(data[:4])
+       } else {
+               prot = binary.LittleEndian.Uint32(data[:4])
+       }
+       if prot > 0xFF {
+               return fmt.Errorf("Invalid loopback protocol %q", data[:4])
+       }
+
+       l.Family = ProtocolFamily(prot)
+       l.BaseLayer = BaseLayer{data[:4], data[4:]}
+       return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (l *Loopback) CanDecode() gopacket.LayerClass {
+       return LayerTypeLoopback
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (l *Loopback) NextLayerType() gopacket.LayerType {
+       return l.Family.LayerType()
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+func (l *Loopback) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(4)
+       if err != nil {
+               return err
+       }
+       binary.LittleEndian.PutUint32(bytes, uint32(l.Family))
+       return nil
+}
+
+func decodeLoopback(data []byte, p gopacket.PacketBuilder) error {
+       l := Loopback{}
+       if err := l.DecodeFromBytes(data, gopacket.NilDecodeFeedback); err != nil {
+               return err
+       }
+       p.AddLayer(&l)
+       return p.NextDecoder(l.Family)
+}
diff --git a/vendor/github.com/google/gopacket/layers/mpls.go b/vendor/github.com/google/gopacket/layers/mpls.go
new file mode 100644 (file)
index 0000000..83079a0
--- /dev/null
@@ -0,0 +1,87 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "github.com/google/gopacket"
+)
+
+// MPLS is the MPLS packet header.
+type MPLS struct {
+       BaseLayer
+       Label        uint32
+       TrafficClass uint8
+       StackBottom  bool
+       TTL          uint8
+}
+
+// LayerType returns gopacket.LayerTypeMPLS.
+func (m *MPLS) LayerType() gopacket.LayerType { return LayerTypeMPLS }
+
+// ProtocolGuessingDecoder attempts to guess the protocol of the bytes it's
+// given, then decode the packet accordingly.  Its algorithm for guessing is:
+//  If the packet starts with byte 0x45-0x4F: IPv4
+//  If the packet starts with byte 0x60-0x6F: IPv6
+//  Otherwise:  Error
+// See draft-hsmit-isis-aal5mux-00.txt for more detail on this approach.
+type ProtocolGuessingDecoder struct{}
+
+func (ProtocolGuessingDecoder) Decode(data []byte, p gopacket.PacketBuilder) error {
+       switch data[0] {
+       // 0x40 | header_len, where header_len is at least 5.
+       case 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f:
+               return decodeIPv4(data, p)
+               // IPv6 can start with any byte whose first 4 bits are 0x6.
+       case 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f:
+               return decodeIPv6(data, p)
+       }
+       return errors.New("Unable to guess protocol of packet data")
+}
+
+// MPLSPayloadDecoder is the decoder used to data encapsulated by each MPLS
+// layer.  MPLS contains no type information, so we have to explicitly decide
+// which decoder to use.  This is initially set to ProtocolGuessingDecoder, our
+// simple attempt at guessing protocols based on the first few bytes of data
+// available to us.  However, if you know that in your environment MPLS always
+// encapsulates a specific protocol, you may reset this.
+var MPLSPayloadDecoder gopacket.Decoder = ProtocolGuessingDecoder{}
+
+func decodeMPLS(data []byte, p gopacket.PacketBuilder) error {
+       decoded := binary.BigEndian.Uint32(data[:4])
+       mpls := &MPLS{
+               Label:        decoded >> 12,
+               TrafficClass: uint8(decoded>>9) & 0x7,
+               StackBottom:  decoded&0x100 != 0,
+               TTL:          uint8(decoded),
+               BaseLayer:    BaseLayer{data[:4], data[4:]},
+       }
+       p.AddLayer(mpls)
+       if mpls.StackBottom {
+               return p.NextDecoder(MPLSPayloadDecoder)
+       }
+       return p.NextDecoder(gopacket.DecodeFunc(decodeMPLS))
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (m *MPLS) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(4)
+       if err != nil {
+               return err
+       }
+       encoded := m.Label << 12
+       encoded |= uint32(m.TrafficClass) << 9
+       encoded |= uint32(m.TTL)
+       if m.StackBottom {
+               encoded |= 0x100
+       }
+       binary.BigEndian.PutUint32(bytes, encoded)
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/mpls_test.go b/vendor/github.com/google/gopacket/layers/mpls_test.go
new file mode 100644 (file)
index 0000000..e0a2b95
--- /dev/null
@@ -0,0 +1,96 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "reflect"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+// testPacketMPLS
+// Ethernet II, Src: cc:15:14:64:00:00 (cc:15:14:64:00:00), Dst: cc:13:14:64:00:01 (cc:13:14:64:00:01)
+// MultiProtocol Label Switching Header, Label: 17, Exp: 0, S: 0, TTL: 254
+// MultiProtocol Label Switching Header, Label: 19, Exp: 0, S: 1, TTL: 254
+// Internet Protocol Version 4, Src: 12.0.0.1, Dst: 2.2.2.2
+// Internet Control Message Protocol
+// 0000   cc 13 14 64 00 01 cc 15 14 64 00 00 88 47 00 01  ...d.....d...G..
+// 0010   10 fe 00 01 31 fe 45 00 00 64 00 39 00 00 fe 01  ....1.E..d.9....
+// 0020   ac 5b 0c 00 00 01 02 02 02 02 08 00 3a 6b 00 0b  .[..........:k..
+// 0030   00 02 00 00 00 00 00 3e 43 94 ab cd ab cd ab cd  .......>C.......
+// 0040   ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd  ................
+// 0050   ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd  ................
+// 0060   ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd  ................
+// 0070   ab cd ab cd ab cd ab cd ab cd                    ..........
+
+var testPacketMPLS = []byte{
+       0xcc, 0x13, 0x14, 0x64, 0x00, 0x01, 0xcc, 0x15, 0x14, 0x64, 0x00, 0x00, 0x88, 0x47, 0x00, 0x01,
+       0x10, 0xfe, 0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,
+       0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,
+       0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+}
+
+func TestPacketMPLS(t *testing.T) {
+       p := gopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeMPLS, LayerTypeMPLS, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       if got, ok := p.Layers()[1].(*MPLS); ok {
+               want := &MPLS{
+                       BaseLayer: BaseLayer{
+                               Contents: []byte{0x00, 0x01, 0x10, 0xfe},
+                               Payload: []byte{0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,
+                                       0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,
+                                       0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd},
+                       },
+                       Label:        17,
+                       TrafficClass: 0,
+                       StackBottom:  false,
+                       TTL:          254,
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("MPLS layer 1 mismatch, \nwant %#v\ngot %#v\n", want, got)
+               }
+       }
+       if got, ok := p.Layers()[2].(*MPLS); ok {
+               want := &MPLS{
+                       BaseLayer: BaseLayer{
+                               Contents: []byte{0x00, 0x01, 0x31, 0xfe},
+                               Payload: []byte{0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01,
+                                       0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b,
+                                       0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
+                                       0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd},
+                       },
+                       Label:        19,
+                       TrafficClass: 0,
+                       StackBottom:  true,
+                       TTL:          254,
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("MPLS layer 2 mismatch, \nwant %#v\ngot %#v\n", want, got)
+               }
+       }
+}
+
+func BenchmarkDecodePacketMPLS(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ndp.go b/vendor/github.com/google/gopacket/layers/ndp.go
new file mode 100644 (file)
index 0000000..f7ca1b2
--- /dev/null
@@ -0,0 +1,611 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Enum types courtesy of...
+// http://anonsvn.wireshark.org/wireshark/trunk/epan/dissectors/packet-ndp.c
+
+package layers
+
+import (
+       "fmt"
+       "github.com/google/gopacket"
+       "net"
+)
+
+type NDPChassisType uint8
+
+// Nortel Chassis Types
+const (
+       NDPChassisother                                       NDPChassisType = 1
+       NDPChassis3000                                        NDPChassisType = 2
+       NDPChassis3030                                        NDPChassisType = 3
+       NDPChassis2310                                        NDPChassisType = 4
+       NDPChassis2810                                        NDPChassisType = 5
+       NDPChassis2912                                        NDPChassisType = 6
+       NDPChassis2914                                        NDPChassisType = 7
+       NDPChassis271x                                        NDPChassisType = 8
+       NDPChassis2813                                        NDPChassisType = 9
+       NDPChassis2814                                        NDPChassisType = 10
+       NDPChassis2915                                        NDPChassisType = 11
+       NDPChassis5000                                        NDPChassisType = 12
+       NDPChassis2813SA                                      NDPChassisType = 13
+       NDPChassis2814SA                                      NDPChassisType = 14
+       NDPChassis810M                                        NDPChassisType = 15
+       NDPChassisEthercell                                   NDPChassisType = 16
+       NDPChassis5005                                        NDPChassisType = 17
+       NDPChassisAlcatelEWC                                  NDPChassisType = 18
+       NDPChassis2715SA                                      NDPChassisType = 20
+       NDPChassis2486                                        NDPChassisType = 21
+       NDPChassis28000series                                 NDPChassisType = 22
+       NDPChassis23000series                                 NDPChassisType = 23
+       NDPChassis5DN00xseries                                NDPChassisType = 24
+       NDPChassisBayStackEthernet                            NDPChassisType = 25
+       NDPChassis23100series                                 NDPChassisType = 26
+       NDPChassis100BaseTHub                                 NDPChassisType = 27
+       NDPChassis3000FastEthernet                            NDPChassisType = 28
+       NDPChassisOrionSwitch                                 NDPChassisType = 29
+       NDPChassisDDS                                         NDPChassisType = 31
+       NDPChassisCentillion6slot                             NDPChassisType = 32
+       NDPChassisCentillion12slot                            NDPChassisType = 33
+       NDPChassisCentillion1slot                             NDPChassisType = 34
+       NDPChassisBayStack301                                 NDPChassisType = 35
+       NDPChassisBayStackTokenRingHub                        NDPChassisType = 36
+       NDPChassisFVCMultimediaSwitch                         NDPChassisType = 37
+       NDPChassisSwitchNode                                  NDPChassisType = 38
+       NDPChassisBayStack302Switch                           NDPChassisType = 39
+       NDPChassisBayStack350Switch                           NDPChassisType = 40
+       NDPChassisBayStack150EthernetHub                      NDPChassisType = 41
+       NDPChassisCentillion50NSwitch                         NDPChassisType = 42
+       NDPChassisCentillion50TSwitch                         NDPChassisType = 43
+       NDPChassisBayStack303304Switches                      NDPChassisType = 44
+       NDPChassisBayStack200EthernetHub                      NDPChassisType = 45
+       NDPChassisBayStack25010100EthernetHub                 NDPChassisType = 46
+       NDPChassisBayStack450101001000Switches                NDPChassisType = 48
+       NDPChassisBayStack41010100Switches                    NDPChassisType = 49
+       NDPChassisPassport1200L3Switch                        NDPChassisType = 50
+       NDPChassisPassport1250L3Switch                        NDPChassisType = 51
+       NDPChassisPassport1100L3Switch                        NDPChassisType = 52
+       NDPChassisPassport1150L3Switch                        NDPChassisType = 53
+       NDPChassisPassport1050L3Switch                        NDPChassisType = 54
+       NDPChassisPassport1051L3Switch                        NDPChassisType = 55
+       NDPChassisPassport8610L3Switch                        NDPChassisType = 56
+       NDPChassisPassport8606L3Switch                        NDPChassisType = 57
+       NDPChassisPassport8010                                NDPChassisType = 58
+       NDPChassisPassport8006                                NDPChassisType = 59
+       NDPChassisBayStack670wirelessaccesspoint              NDPChassisType = 60
+       NDPChassisPassport740                                 NDPChassisType = 61
+       NDPChassisPassport750                                 NDPChassisType = 62
+       NDPChassisPassport790                                 NDPChassisType = 63
+       NDPChassisBusinessPolicySwitch200010100Switches       NDPChassisType = 64
+       NDPChassisPassport8110L2Switch                        NDPChassisType = 65
+       NDPChassisPassport8106L2Switch                        NDPChassisType = 66
+       NDPChassisBayStack3580GigSwitch                       NDPChassisType = 67
+       NDPChassisBayStack10PowerSupplyUnit                   NDPChassisType = 68
+       NDPChassisBayStack42010100Switch                      NDPChassisType = 69
+       NDPChassisOPTeraMetro1200EthernetServiceModule        NDPChassisType = 70
+       NDPChassisOPTera8010co                                NDPChassisType = 71
+       NDPChassisOPTera8610coL3Switch                        NDPChassisType = 72
+       NDPChassisOPTera8110coL2Switch                        NDPChassisType = 73
+       NDPChassisOPTera8003                                  NDPChassisType = 74
+       NDPChassisOPTera8603L3Switch                          NDPChassisType = 75
+       NDPChassisOPTera8103L2Switch                          NDPChassisType = 76
+       NDPChassisBayStack380101001000Switch                  NDPChassisType = 77
+       NDPChassisEthernetSwitch47048T                        NDPChassisType = 78
+       NDPChassisOPTeraMetro1450EthernetServiceModule        NDPChassisType = 79
+       NDPChassisOPTeraMetro1400EthernetServiceModule        NDPChassisType = 80
+       NDPChassisAlteonSwitchFamily                          NDPChassisType = 81
+       NDPChassisEthernetSwitch46024TPWR                     NDPChassisType = 82
+       NDPChassisOPTeraMetro8010OPML2Switch                  NDPChassisType = 83
+       NDPChassisOPTeraMetro8010coOPML2Switch                NDPChassisType = 84
+       NDPChassisOPTeraMetro8006OPML2Switch                  NDPChassisType = 85
+       NDPChassisOPTeraMetro8003OPML2Switch                  NDPChassisType = 86
+       NDPChassisAlteon180e                                  NDPChassisType = 87
+       NDPChassisAlteonAD3                                   NDPChassisType = 88
+       NDPChassisAlteon184                                   NDPChassisType = 89
+       NDPChassisAlteonAD4                                   NDPChassisType = 90
+       NDPChassisPassport1424L3Switch                        NDPChassisType = 91
+       NDPChassisPassport1648L3Switch                        NDPChassisType = 92
+       NDPChassisPassport1612L3Switch                        NDPChassisType = 93
+       NDPChassisPassport1624L3Switch                        NDPChassisType = 94
+       NDPChassisBayStack38024FFiber1000Switch               NDPChassisType = 95
+       NDPChassisEthernetRoutingSwitch551024T                NDPChassisType = 96
+       NDPChassisEthernetRoutingSwitch551048T                NDPChassisType = 97
+       NDPChassisEthernetSwitch47024T                        NDPChassisType = 98
+       NDPChassisNortelNetworksWirelessLANAccessPoint2220    NDPChassisType = 99
+       NDPChassisPassportRBS2402L3Switch                     NDPChassisType = 100
+       NDPChassisAlteonApplicationSwitch2424                 NDPChassisType = 101
+       NDPChassisAlteonApplicationSwitch2224                 NDPChassisType = 102
+       NDPChassisAlteonApplicationSwitch2208                 NDPChassisType = 103
+       NDPChassisAlteonApplicationSwitch2216                 NDPChassisType = 104
+       NDPChassisAlteonApplicationSwitch3408                 NDPChassisType = 105
+       NDPChassisAlteonApplicationSwitch3416                 NDPChassisType = 106
+       NDPChassisNortelNetworksWirelessLANSecuritySwitch2250 NDPChassisType = 107
+       NDPChassisEthernetSwitch42548T                        NDPChassisType = 108
+       NDPChassisEthernetSwitch42524T                        NDPChassisType = 109
+       NDPChassisNortelNetworksWirelessLANAccessPoint2221    NDPChassisType = 110
+       NDPChassisNortelMetroEthernetServiceUnit24TSPFswitch  NDPChassisType = 111
+       NDPChassisNortelMetroEthernetServiceUnit24TLXDCswitch NDPChassisType = 112
+       NDPChassisPassport830010slotchassis                   NDPChassisType = 113
+       NDPChassisPassport83006slotchassis                    NDPChassisType = 114
+       NDPChassisEthernetRoutingSwitch552024TPWR             NDPChassisType = 115
+       NDPChassisEthernetRoutingSwitch552048TPWR             NDPChassisType = 116
+       NDPChassisNortelNetworksVPNGateway3050                NDPChassisType = 117
+       NDPChassisAlteonSSL31010100                           NDPChassisType = 118
+       NDPChassisAlteonSSL31010100Fiber                      NDPChassisType = 119
+       NDPChassisAlteonSSL31010100FIPS                       NDPChassisType = 120
+       NDPChassisAlteonSSL410101001000                       NDPChassisType = 121
+       NDPChassisAlteonSSL410101001000Fiber                  NDPChassisType = 122
+       NDPChassisAlteonApplicationSwitch2424SSL              NDPChassisType = 123
+       NDPChassisEthernetSwitch32524T                        NDPChassisType = 124
+       NDPChassisEthernetSwitch32524G                        NDPChassisType = 125
+       NDPChassisNortelNetworksWirelessLANAccessPoint2225    NDPChassisType = 126
+       NDPChassisNortelNetworksWirelessLANSecuritySwitch2270 NDPChassisType = 127
+       NDPChassis24portEthernetSwitch47024TPWR               NDPChassisType = 128
+       NDPChassis48portEthernetSwitch47048TPWR               NDPChassisType = 129
+       NDPChassisEthernetRoutingSwitch553024TFD              NDPChassisType = 130
+       NDPChassisEthernetSwitch351024T                       NDPChassisType = 131
+       NDPChassisNortelMetroEthernetServiceUnit12GACL3Switch NDPChassisType = 132
+       NDPChassisNortelMetroEthernetServiceUnit12GDCL3Switch NDPChassisType = 133
+       NDPChassisNortelSecureAccessSwitch                    NDPChassisType = 134
+       NDPChassisNortelNetworksVPNGateway3070                NDPChassisType = 135
+       NDPChassisOPTeraMetro3500                             NDPChassisType = 136
+       NDPChassisSMBBES101024T                               NDPChassisType = 137
+       NDPChassisSMBBES101048T                               NDPChassisType = 138
+       NDPChassisSMBBES102024TPWR                            NDPChassisType = 139
+       NDPChassisSMBBES102048TPWR                            NDPChassisType = 140
+       NDPChassisSMBBES201024T                               NDPChassisType = 141
+       NDPChassisSMBBES201048T                               NDPChassisType = 142
+       NDPChassisSMBBES202024TPWR                            NDPChassisType = 143
+       NDPChassisSMBBES202048TPWR                            NDPChassisType = 144
+       NDPChassisSMBBES11024T                                NDPChassisType = 145
+       NDPChassisSMBBES11048T                                NDPChassisType = 146
+       NDPChassisSMBBES12024TPWR                             NDPChassisType = 147
+       NDPChassisSMBBES12048TPWR                             NDPChassisType = 148
+       NDPChassisSMBBES21024T                                NDPChassisType = 149
+       NDPChassisSMBBES21048T                                NDPChassisType = 150
+       NDPChassisSMBBES22024TPWR                             NDPChassisType = 151
+       NDPChassisSMBBES22048TPWR                             NDPChassisType = 152
+       NDPChassisOME6500                                     NDPChassisType = 153
+       NDPChassisEthernetRoutingSwitch4548GT                 NDPChassisType = 154
+       NDPChassisEthernetRoutingSwitch4548GTPWR              NDPChassisType = 155
+       NDPChassisEthernetRoutingSwitch4550T                  NDPChassisType = 156
+       NDPChassisEthernetRoutingSwitch4550TPWR               NDPChassisType = 157
+       NDPChassisEthernetRoutingSwitch4526FX                 NDPChassisType = 158
+       NDPChassisEthernetRoutingSwitch250026T                NDPChassisType = 159
+       NDPChassisEthernetRoutingSwitch250026TPWR             NDPChassisType = 160
+       NDPChassisEthernetRoutingSwitch250050T                NDPChassisType = 161
+       NDPChassisEthernetRoutingSwitch250050TPWR             NDPChassisType = 162
+)
+
+type NDPBackplaneType uint8
+
+// Nortel Backplane Types
+const (
+       NDPBackplaneOther                                       NDPBackplaneType = 1
+       NDPBackplaneEthernet                                    NDPBackplaneType = 2
+       NDPBackplaneEthernetTokenring                           NDPBackplaneType = 3
+       NDPBackplaneEthernetFDDI                                NDPBackplaneType = 4
+       NDPBackplaneEthernetTokenringFDDI                       NDPBackplaneType = 5
+       NDPBackplaneEthernetTokenringRedundantPower             NDPBackplaneType = 6
+       NDPBackplaneEthernetTokenringFDDIRedundantPower         NDPBackplaneType = 7
+       NDPBackplaneTokenRing                                   NDPBackplaneType = 8
+       NDPBackplaneEthernetTokenringFastEthernet               NDPBackplaneType = 9
+       NDPBackplaneEthernetFastEthernet                        NDPBackplaneType = 10
+       NDPBackplaneEthernetTokenringFastEthernetRedundantPower NDPBackplaneType = 11
+       NDPBackplaneEthernetFastEthernetGigabitEthernet         NDPBackplaneType = 12
+)
+
+type NDPState uint8
+
+// Device State
+const (
+       NDPStateTopology  NDPState = 1
+       NDPStateHeartbeat NDPState = 2
+       NDPStateNew       NDPState = 3
+)
+
+// NortelDiscovery is a packet layer containing the Nortel Discovery Protocol.
+type NortelDiscovery struct {
+       BaseLayer
+       IPAddress net.IP
+       SegmentID []byte
+       Chassis   NDPChassisType
+       Backplane NDPBackplaneType
+       State     NDPState
+       NumLinks  uint8
+}
+
+// LayerType returns gopacket.LayerTypeNortelDiscovery.
+func (c *NortelDiscovery) LayerType() gopacket.LayerType {
+       return LayerTypeNortelDiscovery
+}
+
+func decodeNortelDiscovery(data []byte, p gopacket.PacketBuilder) error {
+       c := &NortelDiscovery{}
+       if len(data) < 11 {
+               return fmt.Errorf("Invalid NortelDiscovery packet length %d", len(data))
+       }
+       c.IPAddress = data[0:4]
+       c.SegmentID = data[4:7]
+       c.Chassis = NDPChassisType(data[7])
+       c.Backplane = NDPBackplaneType(data[8])
+       c.State = NDPState(data[9])
+       c.NumLinks = uint8(data[10])
+       p.AddLayer(c)
+       return nil
+}
+
+func (t NDPChassisType) String() (s string) {
+       switch t {
+       case NDPChassisother:
+               s = "other"
+       case NDPChassis3000:
+               s = "3000"
+       case NDPChassis3030:
+               s = "3030"
+       case NDPChassis2310:
+               s = "2310"
+       case NDPChassis2810:
+               s = "2810"
+       case NDPChassis2912:
+               s = "2912"
+       case NDPChassis2914:
+               s = "2914"
+       case NDPChassis271x:
+               s = "271x"
+       case NDPChassis2813:
+               s = "2813"
+       case NDPChassis2814:
+               s = "2814"
+       case NDPChassis2915:
+               s = "2915"
+       case NDPChassis5000:
+               s = "5000"
+       case NDPChassis2813SA:
+               s = "2813SA"
+       case NDPChassis2814SA:
+               s = "2814SA"
+       case NDPChassis810M:
+               s = "810M"
+       case NDPChassisEthercell:
+               s = "Ethercell"
+       case NDPChassis5005:
+               s = "5005"
+       case NDPChassisAlcatelEWC:
+               s = "Alcatel Ethernet workgroup conc."
+       case NDPChassis2715SA:
+               s = "2715SA"
+       case NDPChassis2486:
+               s = "2486"
+       case NDPChassis28000series:
+               s = "28000 series"
+       case NDPChassis23000series:
+               s = "23000 series"
+       case NDPChassis5DN00xseries:
+               s = "5DN00x series"
+       case NDPChassisBayStackEthernet:
+               s = "BayStack Ethernet"
+       case NDPChassis23100series:
+               s = "23100 series"
+       case NDPChassis100BaseTHub:
+               s = "100Base-T Hub"
+       case NDPChassis3000FastEthernet:
+               s = "3000 Fast Ethernet"
+       case NDPChassisOrionSwitch:
+               s = "Orion switch"
+       case NDPChassisDDS:
+               s = "DDS"
+       case NDPChassisCentillion6slot:
+               s = "Centillion (6 slot)"
+       case NDPChassisCentillion12slot:
+               s = "Centillion (12 slot)"
+       case NDPChassisCentillion1slot:
+               s = "Centillion (1 slot)"
+       case NDPChassisBayStack301:
+               s = "BayStack 301"
+       case NDPChassisBayStackTokenRingHub:
+               s = "BayStack TokenRing Hub"
+       case NDPChassisFVCMultimediaSwitch:
+               s = "FVC Multimedia Switch"
+       case NDPChassisSwitchNode:
+               s = "Switch Node"
+       case NDPChassisBayStack302Switch:
+               s = "BayStack 302 Switch"
+       case NDPChassisBayStack350Switch:
+               s = "BayStack 350 Switch"
+       case NDPChassisBayStack150EthernetHub:
+               s = "BayStack 150 Ethernet Hub"
+       case NDPChassisCentillion50NSwitch:
+               s = "Centillion 50N switch"
+       case NDPChassisCentillion50TSwitch:
+               s = "Centillion 50T switch"
+       case NDPChassisBayStack303304Switches:
+               s = "BayStack 303 and 304 Switches"
+       case NDPChassisBayStack200EthernetHub:
+               s = "BayStack 200 Ethernet Hub"
+       case NDPChassisBayStack25010100EthernetHub:
+               s = "BayStack 250 10/100 Ethernet Hub"
+       case NDPChassisBayStack450101001000Switches:
+               s = "BayStack 450 10/100/1000 Switches"
+       case NDPChassisBayStack41010100Switches:
+               s = "BayStack 410 10/100 Switches"
+       case NDPChassisPassport1200L3Switch:
+               s = "Passport 1200 L3 Switch"
+       case NDPChassisPassport1250L3Switch:
+               s = "Passport 1250 L3 Switch"
+       case NDPChassisPassport1100L3Switch:
+               s = "Passport 1100 L3 Switch"
+       case NDPChassisPassport1150L3Switch:
+               s = "Passport 1150 L3 Switch"
+       case NDPChassisPassport1050L3Switch:
+               s = "Passport 1050 L3 Switch"
+       case NDPChassisPassport1051L3Switch:
+               s = "Passport 1051 L3 Switch"
+       case NDPChassisPassport8610L3Switch:
+               s = "Passport 8610 L3 Switch"
+       case NDPChassisPassport8606L3Switch:
+               s = "Passport 8606 L3 Switch"
+       case NDPChassisPassport8010:
+               s = "Passport 8010"
+       case NDPChassisPassport8006:
+               s = "Passport 8006"
+       case NDPChassisBayStack670wirelessaccesspoint:
+               s = "BayStack 670 wireless access point"
+       case NDPChassisPassport740:
+               s = "Passport 740"
+       case NDPChassisPassport750:
+               s = "Passport 750"
+       case NDPChassisPassport790:
+               s = "Passport 790"
+       case NDPChassisBusinessPolicySwitch200010100Switches:
+               s = "Business Policy Switch 2000 10/100 Switches"
+       case NDPChassisPassport8110L2Switch:
+               s = "Passport 8110 L2 Switch"
+       case NDPChassisPassport8106L2Switch:
+               s = "Passport 8106 L2 Switch"
+       case NDPChassisBayStack3580GigSwitch:
+               s = "BayStack 3580 Gig Switch"
+       case NDPChassisBayStack10PowerSupplyUnit:
+               s = "BayStack 10 Power Supply Unit"
+       case NDPChassisBayStack42010100Switch:
+               s = "BayStack 420 10/100 Switch"
+       case NDPChassisOPTeraMetro1200EthernetServiceModule:
+               s = "OPTera Metro 1200 Ethernet Service Module"
+       case NDPChassisOPTera8010co:
+               s = "OPTera 8010co"
+       case NDPChassisOPTera8610coL3Switch:
+               s = "OPTera 8610co L3 switch"
+       case NDPChassisOPTera8110coL2Switch:
+               s = "OPTera 8110co L2 switch"
+       case NDPChassisOPTera8003:
+               s = "OPTera 8003"
+       case NDPChassisOPTera8603L3Switch:
+               s = "OPTera 8603 L3 switch"
+       case NDPChassisOPTera8103L2Switch:
+               s = "OPTera 8103 L2 switch"
+       case NDPChassisBayStack380101001000Switch:
+               s = "BayStack 380 10/100/1000 Switch"
+       case NDPChassisEthernetSwitch47048T:
+               s = "Ethernet Switch 470-48T"
+       case NDPChassisOPTeraMetro1450EthernetServiceModule:
+               s = "OPTera Metro 1450 Ethernet Service Module"
+       case NDPChassisOPTeraMetro1400EthernetServiceModule:
+               s = "OPTera Metro 1400 Ethernet Service Module"
+       case NDPChassisAlteonSwitchFamily:
+               s = "Alteon Switch Family"
+       case NDPChassisEthernetSwitch46024TPWR:
+               s = "Ethernet Switch 460-24T-PWR"
+       case NDPChassisOPTeraMetro8010OPML2Switch:
+               s = "OPTera Metro 8010 OPM L2 Switch"
+       case NDPChassisOPTeraMetro8010coOPML2Switch:
+               s = "OPTera Metro 8010co OPM L2 Switch"
+       case NDPChassisOPTeraMetro8006OPML2Switch:
+               s = "OPTera Metro 8006 OPM L2 Switch"
+       case NDPChassisOPTeraMetro8003OPML2Switch:
+               s = "OPTera Metro 8003 OPM L2 Switch"
+       case NDPChassisAlteon180e:
+               s = "Alteon 180e"
+       case NDPChassisAlteonAD3:
+               s = "Alteon AD3"
+       case NDPChassisAlteon184:
+               s = "Alteon 184"
+       case NDPChassisAlteonAD4:
+               s = "Alteon AD4"
+       case NDPChassisPassport1424L3Switch:
+               s = "Passport 1424 L3 switch"
+       case NDPChassisPassport1648L3Switch:
+               s = "Passport 1648 L3 switch"
+       case NDPChassisPassport1612L3Switch:
+               s = "Passport 1612 L3 switch"
+       case NDPChassisPassport1624L3Switch:
+               s = "Passport 1624 L3 switch"
+       case NDPChassisBayStack38024FFiber1000Switch:
+               s = "BayStack 380-24F Fiber 1000 Switch"
+       case NDPChassisEthernetRoutingSwitch551024T:
+               s = "Ethernet Routing Switch 5510-24T"
+       case NDPChassisEthernetRoutingSwitch551048T:
+               s = "Ethernet Routing Switch 5510-48T"
+       case NDPChassisEthernetSwitch47024T:
+               s = "Ethernet Switch 470-24T"
+       case NDPChassisNortelNetworksWirelessLANAccessPoint2220:
+               s = "Nortel Networks Wireless LAN Access Point 2220"
+       case NDPChassisPassportRBS2402L3Switch:
+               s = "Passport RBS 2402 L3 switch"
+       case NDPChassisAlteonApplicationSwitch2424:
+               s = "Alteon Application Switch 2424"
+       case NDPChassisAlteonApplicationSwitch2224:
+               s = "Alteon Application Switch 2224"
+       case NDPChassisAlteonApplicationSwitch2208:
+               s = "Alteon Application Switch 2208"
+       case NDPChassisAlteonApplicationSwitch2216:
+               s = "Alteon Application Switch 2216"
+       case NDPChassisAlteonApplicationSwitch3408:
+               s = "Alteon Application Switch 3408"
+       case NDPChassisAlteonApplicationSwitch3416:
+               s = "Alteon Application Switch 3416"
+       case NDPChassisNortelNetworksWirelessLANSecuritySwitch2250:
+               s = "Nortel Networks Wireless LAN SecuritySwitch 2250"
+       case NDPChassisEthernetSwitch42548T:
+               s = "Ethernet Switch 425-48T"
+       case NDPChassisEthernetSwitch42524T:
+               s = "Ethernet Switch 425-24T"
+       case NDPChassisNortelNetworksWirelessLANAccessPoint2221:
+               s = "Nortel Networks Wireless LAN Access Point 2221"
+       case NDPChassisNortelMetroEthernetServiceUnit24TSPFswitch:
+               s = "Nortel Metro Ethernet Service Unit 24-T SPF switch"
+       case NDPChassisNortelMetroEthernetServiceUnit24TLXDCswitch:
+               s = " Nortel Metro Ethernet Service Unit 24-T LX DC switch"
+       case NDPChassisPassport830010slotchassis:
+               s = "Passport 8300 10-slot chassis"
+       case NDPChassisPassport83006slotchassis:
+               s = "Passport 8300 6-slot chassis"
+       case NDPChassisEthernetRoutingSwitch552024TPWR:
+               s = "Ethernet Routing Switch 5520-24T-PWR"
+       case NDPChassisEthernetRoutingSwitch552048TPWR:
+               s = "Ethernet Routing Switch 5520-48T-PWR"
+       case NDPChassisNortelNetworksVPNGateway3050:
+               s = "Nortel Networks VPN Gateway 3050"
+       case NDPChassisAlteonSSL31010100:
+               s = "Alteon SSL 310 10/100"
+       case NDPChassisAlteonSSL31010100Fiber:
+               s = "Alteon SSL 310 10/100 Fiber"
+       case NDPChassisAlteonSSL31010100FIPS:
+               s = "Alteon SSL 310 10/100 FIPS"
+       case NDPChassisAlteonSSL410101001000:
+               s = "Alteon SSL 410 10/100/1000"
+       case NDPChassisAlteonSSL410101001000Fiber:
+               s = "Alteon SSL 410 10/100/1000 Fiber"
+       case NDPChassisAlteonApplicationSwitch2424SSL:
+               s = "Alteon Application Switch 2424-SSL"
+       case NDPChassisEthernetSwitch32524T:
+               s = "Ethernet Switch 325-24T"
+       case NDPChassisEthernetSwitch32524G:
+               s = "Ethernet Switch 325-24G"
+       case NDPChassisNortelNetworksWirelessLANAccessPoint2225:
+               s = "Nortel Networks Wireless LAN Access Point 2225"
+       case NDPChassisNortelNetworksWirelessLANSecuritySwitch2270:
+               s = "Nortel Networks Wireless LAN SecuritySwitch 2270"
+       case NDPChassis24portEthernetSwitch47024TPWR:
+               s = "24-port Ethernet Switch 470-24T-PWR"
+       case NDPChassis48portEthernetSwitch47048TPWR:
+               s = "48-port Ethernet Switch 470-48T-PWR"
+       case NDPChassisEthernetRoutingSwitch553024TFD:
+               s = "Ethernet Routing Switch 5530-24TFD"
+       case NDPChassisEthernetSwitch351024T:
+               s = "Ethernet Switch 3510-24T"
+       case NDPChassisNortelMetroEthernetServiceUnit12GACL3Switch:
+               s = "Nortel Metro Ethernet Service Unit 12G AC L3 switch"
+       case NDPChassisNortelMetroEthernetServiceUnit12GDCL3Switch:
+               s = "Nortel Metro Ethernet Service Unit 12G DC L3 switch"
+       case NDPChassisNortelSecureAccessSwitch:
+               s = "Nortel Secure Access Switch"
+       case NDPChassisNortelNetworksVPNGateway3070:
+               s = "Nortel Networks VPN Gateway 3070"
+       case NDPChassisOPTeraMetro3500:
+               s = "OPTera Metro 3500"
+       case NDPChassisSMBBES101024T:
+               s = "SMB BES 1010 24T"
+       case NDPChassisSMBBES101048T:
+               s = "SMB BES 1010 48T"
+       case NDPChassisSMBBES102024TPWR:
+               s = "SMB BES 1020 24T PWR"
+       case NDPChassisSMBBES102048TPWR:
+               s = "SMB BES 1020 48T PWR"
+       case NDPChassisSMBBES201024T:
+               s = "SMB BES 2010 24T"
+       case NDPChassisSMBBES201048T:
+               s = "SMB BES 2010 48T"
+       case NDPChassisSMBBES202024TPWR:
+               s = "SMB BES 2020 24T PWR"
+       case NDPChassisSMBBES202048TPWR:
+               s = "SMB BES 2020 48T PWR"
+       case NDPChassisSMBBES11024T:
+               s = "SMB BES 110 24T"
+       case NDPChassisSMBBES11048T:
+               s = "SMB BES 110 48T"
+       case NDPChassisSMBBES12024TPWR:
+               s = "SMB BES 120 24T PWR"
+       case NDPChassisSMBBES12048TPWR:
+               s = "SMB BES 120 48T PWR"
+       case NDPChassisSMBBES21024T:
+               s = "SMB BES 210 24T"
+       case NDPChassisSMBBES21048T:
+               s = "SMB BES 210 48T"
+       case NDPChassisSMBBES22024TPWR:
+               s = "SMB BES 220 24T PWR"
+       case NDPChassisSMBBES22048TPWR:
+               s = "SMB BES 220 48T PWR"
+       case NDPChassisOME6500:
+               s = "OME 6500"
+       case NDPChassisEthernetRoutingSwitch4548GT:
+               s = "Ethernet Routing Switch 4548GT"
+       case NDPChassisEthernetRoutingSwitch4548GTPWR:
+               s = "Ethernet Routing Switch 4548GT-PWR"
+       case NDPChassisEthernetRoutingSwitch4550T:
+               s = "Ethernet Routing Switch 4550T"
+       case NDPChassisEthernetRoutingSwitch4550TPWR:
+               s = "Ethernet Routing Switch 4550T-PWR"
+       case NDPChassisEthernetRoutingSwitch4526FX:
+               s = "Ethernet Routing Switch 4526FX"
+       case NDPChassisEthernetRoutingSwitch250026T:
+               s = "Ethernet Routing Switch 2500-26T"
+       case NDPChassisEthernetRoutingSwitch250026TPWR:
+               s = "Ethernet Routing Switch 2500-26T-PWR"
+       case NDPChassisEthernetRoutingSwitch250050T:
+               s = "Ethernet Routing Switch 2500-50T"
+       case NDPChassisEthernetRoutingSwitch250050TPWR:
+               s = "Ethernet Routing Switch 2500-50T-PWR"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t NDPBackplaneType) String() (s string) {
+       switch t {
+       case NDPBackplaneOther:
+               s = "Other"
+       case NDPBackplaneEthernet:
+               s = "Ethernet"
+       case NDPBackplaneEthernetTokenring:
+               s = "Ethernet and Tokenring"
+       case NDPBackplaneEthernetFDDI:
+               s = "Ethernet and FDDI"
+       case NDPBackplaneEthernetTokenringFDDI:
+               s = "Ethernet, Tokenring and FDDI"
+       case NDPBackplaneEthernetTokenringRedundantPower:
+               s = "Ethernet and Tokenring with redundant power"
+       case NDPBackplaneEthernetTokenringFDDIRedundantPower:
+               s = "Ethernet, Tokenring, FDDI with redundant power"
+       case NDPBackplaneTokenRing:
+               s = "Token Ring"
+       case NDPBackplaneEthernetTokenringFastEthernet:
+               s = "Ethernet, Tokenring and Fast Ethernet"
+       case NDPBackplaneEthernetFastEthernet:
+               s = "Ethernet and Fast Ethernet"
+       case NDPBackplaneEthernetTokenringFastEthernetRedundantPower:
+               s = "Ethernet, Tokenring, Fast Ethernet with redundant power"
+       case NDPBackplaneEthernetFastEthernetGigabitEthernet:
+               s = "Ethernet, Fast Ethernet and Gigabit Ethernet"
+       default:
+               s = "Unknown"
+       }
+       return
+}
+
+func (t NDPState) String() (s string) {
+       switch t {
+       case NDPStateTopology:
+               s = "Topology Change"
+       case NDPStateHeartbeat:
+               s = "Heartbeat"
+       case NDPStateNew:
+               s = "New"
+       default:
+               s = "Unknown"
+       }
+       return
+}
diff --git a/vendor/github.com/google/gopacket/layers/ntp.go b/vendor/github.com/google/gopacket/layers/ntp.go
new file mode 100644 (file)
index 0000000..33c15b3
--- /dev/null
@@ -0,0 +1,416 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+//******************************************************************************
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+
+       "github.com/google/gopacket"
+)
+
+//******************************************************************************
+//
+// Network Time Protocol (NTP) Decoding Layer
+// ------------------------------------------
+// This file provides a GoPacket decoding layer for NTP.
+//
+//******************************************************************************
+//
+// About The Network Time Protocol (NTP)
+// -------------------------------------
+// NTP is a protocol that enables computers on the internet to set their
+// clocks to the correct time (or to a time that is acceptably close to the
+// correct time). NTP runs on top of UDP.
+//
+// There have been a series of versions of the NTP protocol. The latest
+// version is V4 and is specified in RFC 5905:
+//     http://www.ietf.org/rfc/rfc5905.txt
+//
+//******************************************************************************
+//
+// References
+// ----------
+//
+// Wikipedia's NTP entry:
+//     https://en.wikipedia.org/wiki/Network_Time_Protocol
+//     This is the best place to get an overview of NTP.
+//
+// Network Time Protocol Home Website:
+//     http://www.ntp.org/
+//     This appears to be the official website of NTP.
+//
+// List of current NTP Protocol RFCs:
+//     http://www.ntp.org/rfc.html
+//
+// RFC 958: "Network Time Protocol (NTP)" (1985)
+//     https://tools.ietf.org/html/rfc958
+//     This is the original NTP specification.
+//
+// RFC 1305: "Network Time Protocol (Version 3) Specification, Implementation and Analysis" (1992)
+//     https://tools.ietf.org/html/rfc1305
+//     The protocol was updated in 1992 yielding NTP V3.
+//
+// RFC 5905: "Network Time Protocol Version 4: Protocol and Algorithms Specification" (2010)
+//     https://www.ietf.org/rfc/rfc5905.txt
+//     The protocol was updated in 2010 yielding NTP V4.
+//     V4 is backwards compatible with all previous versions of NTP.
+//
+// RFC 5906: "Network Time Protocol Version 4: Autokey Specification"
+//     https://tools.ietf.org/html/rfc5906
+//     This document addresses the security of the NTP protocol
+//     and is probably not relevant to this package.
+//
+// RFC 5907: "Definitions of Managed Objects for Network Time Protocol Version 4 (NTPv4)"
+//     https://tools.ietf.org/html/rfc5907
+//     This document addresses the management of NTP servers and
+//     is probably not relevant to this package.
+//
+// RFC 5908: "Network Time Protocol (NTP) Server Option for DHCPv6"
+//     https://tools.ietf.org/html/rfc5908
+//     This document addresses the use of NTP in DHCPv6 and is
+//     probably not relevant to this package.
+//
+// "Let's make a NTP Client in C"
+//     https://lettier.github.io/posts/2016-04-26-lets-make-a-ntp-client-in-c.html
+//     This web page contains useful information about the details of NTP,
+//     including an NTP record struture in C, and C code.
+//
+// "NTP Packet Header (NTP Reference Implementation) (Computer Network Time Synchronization)"
+//     http://what-when-how.com/computer-network-time-synchronization/
+//        ntp-packet-header-ntp-reference-implementation-computer-network-time-synchronization/
+//     This web page contains useful information on the details of NTP.
+//
+// "Technical information - NTP Data Packet"
+//     https://www.meinbergglobal.com/english/info/ntp-packet.htm
+//     This page has a helpful diagram of an NTP V4 packet.
+//
+//******************************************************************************
+//
+// Obsolete References
+// -------------------
+//
+// RFC 1119: "RFC-1119 "Network Time Protocol (Version 2) Specification and Implementation" (1989)
+//     https://tools.ietf.org/html/rfc1119
+//     Version 2 was drafted in 1989.
+//     It is unclear whether V2 was ever implememented or whether the
+//     ideas ended up in V3 (which was implemented in 1992).
+//
+// RFC 1361: "Simple Network Time Protocol (SNTP)"
+//     https://tools.ietf.org/html/rfc1361
+//     This document is obsoleted by RFC 1769 and is included only for completeness.
+//
+// RFC 1769: "Simple Network Time Protocol (SNTP)"
+//     https://tools.ietf.org/html/rfc1769
+//     This document is obsoleted by RFC 2030 and RFC 4330 and is included only for completeness.
+//
+// RFC 2030: "Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI"
+//     https://tools.ietf.org/html/rfc2030
+//     This document is obsoleted by RFC 4330 and is included only for completeness.
+//
+// RFC 4330: "Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI"
+//     https://tools.ietf.org/html/rfc4330
+//     This document is obsoleted by RFC 5905 and is included only for completeness.
+//
+//******************************************************************************
+//
+// Endian And Bit Numbering Issues
+// -------------------------------
+//
+// Endian and bit numbering issues can be confusing. Here is some
+// clarification:
+//
+//    ENDIAN: Values are sent big endian.
+//    https://en.wikipedia.org/wiki/Endianness
+//
+//    BIT NUMBERING: Bits are numbered 0 upwards from the most significant
+//    bit to the least significant bit. This means that if there is a 32-bit
+//    value, the most significant bit is called bit 0 and the least
+//    significant bit is called bit 31.
+//
+// See RFC 791 Appendix B for more discussion.
+//
+//******************************************************************************
+//
+// NTP V3 and V4 Packet Format
+// ---------------------------
+// NTP packets are UDP packets whose payload contains an NTP record.
+//
+// The NTP RFC defines the format of the NTP record.
+//
+// There have been four versions of the protocol:
+//
+//    V1 in 1985
+//    V2 in 1989
+//    V3 in 1992
+//    V4 in 2010
+//
+// It is clear that V1 and V2 are obsolete, and there is no need to
+// cater for these formats.
+//
+// V3 and V4 essentially use the same format, with V4 adding some optional
+// fields on the end. So this package supports the V3 and V4 formats.
+//
+// The current version of NTP (NTP V4)'s RFC (V4 - RFC 5905) contains
+// the following diagram for the NTP record format:
+
+//      0                   1                   2                   3
+//      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |LI | VN  |Mode |    Stratum    |     Poll      |   Precision   |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                         Root Delay                            |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                         Root Dispersion                       |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                          Reference ID                         |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                                                               |
+//     +                     Reference Timestamp (64)                  +
+//     |                                                               |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                                                               |
+//     +                      Origin Timestamp (64)                    +
+//     |                                                               |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                                                               |
+//     +                      Receive Timestamp (64)                   +
+//     |                                                               |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                                                               |
+//     +                      Transmit Timestamp (64)                  +
+//     |                                                               |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                                                               |
+//     .                                                               .
+//     .                    Extension Field 1 (variable)               .
+//     .                                                               .
+//     |                                                               |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                                                               |
+//     .                                                               .
+//     .                    Extension Field 2 (variable)               .
+//     .                                                               .
+//     |                                                               |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                          Key Identifier                       |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     |                                                               |
+//     |                            dgst (128)                         |
+//     |                                                               |
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     From http://www.ietf.org/rfc/rfc5905.txt
+//
+// The fields "Extension Field 1 (variable)" and later are optional fields,
+// and so we can set a minimum NTP record size of 48 bytes.
+//
+const ntpMinimumRecordSizeInBytes int = 48
+
+//******************************************************************************
+
+// NTP Type
+// --------
+// Type NTP implements the DecodingLayer interface. Each NTP object
+// represents in a structured form the NTP record present as the UDP
+// payload in an NTP UDP packet.
+//
+
+type NTPLeapIndicator uint8
+type NTPVersion uint8
+type NTPMode uint8
+type NTPStratum uint8
+type NTPLog2Seconds int8
+type NTPFixed16Seconds uint32
+type NTPReferenceID uint32
+type NTPTimestamp uint64
+
+type NTP struct {
+       BaseLayer // Stores the packet bytes and payload bytes.
+
+       LeapIndicator      NTPLeapIndicator  // [0,3]. Indicates whether leap second(s) is to be added.
+       Version            NTPVersion        // [0,7]. Version of the NTP protocol.
+       Mode               NTPMode           // [0,7]. Mode.
+       Stratum            NTPStratum        // [0,255]. Stratum of time server in the server tree.
+       Poll               NTPLog2Seconds    // [-128,127]. The maximum interval between successive messages, in log2 seconds.
+       Precision          NTPLog2Seconds    // [-128,127]. The precision of the system clock, in log2 seconds.
+       RootDelay          NTPFixed16Seconds // [0,2^32-1]. Total round trip delay to the reference clock in seconds times 2^16.
+       RootDispersion     NTPFixed16Seconds // [0,2^32-1]. Total dispersion to the reference clock, in seconds times 2^16.
+       ReferenceID        NTPReferenceID    // ID code of reference clock [0,2^32-1].
+       ReferenceTimestamp NTPTimestamp      // Most recent timestamp from the reference clock.
+       OriginTimestamp    NTPTimestamp      // Local time when request was sent from local host.
+       ReceiveTimestamp   NTPTimestamp      // Local time (on server) that request arrived at server host.
+       TransmitTimestamp  NTPTimestamp      // Local time (on server) that request departed server host.
+
+       // FIX: This package should analyse the extension fields and represent the extension fields too.
+       ExtensionBytes []byte // Just put extensions in a byte slice.
+}
+
+//******************************************************************************
+
+// LayerType returns the layer type of the NTP object, which is LayerTypeNTP.
+func (d *NTP) LayerType() gopacket.LayerType {
+       return LayerTypeNTP
+}
+
+//******************************************************************************
+
+// decodeNTP analyses a byte slice and attempts to decode it as an NTP
+// record of a UDP packet.
+//
+// If it succeeds, it loads p with information about the packet and returns nil.
+// If it fails, it returns an error (non nil).
+//
+// This function is employed in layertypes.go to register the NTP layer.
+func decodeNTP(data []byte, p gopacket.PacketBuilder) error {
+
+       // Attempt to decode the byte slice.
+       d := &NTP{}
+       err := d.DecodeFromBytes(data, p)
+       if err != nil {
+               return err
+       }
+
+       // If the decoding worked, add the layer to the packet and set it
+       // as the application layer too, if there isn't already one.
+       p.AddLayer(d)
+       p.SetApplicationLayer(d)
+
+       return nil
+}
+
+//******************************************************************************
+
+// DecodeFromBytes analyses a byte slice and attempts to decode it as an NTP
+// record of a UDP packet.
+//
+// Upon succeeds, it loads the NTP object with information about the packet
+// and returns nil.
+// Upon failure, it returns an error (non nil).
+func (d *NTP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+       // If the data block is too short to be a NTP record, then return an error.
+       if len(data) < ntpMinimumRecordSizeInBytes {
+               df.SetTruncated()
+               return errors.New("NTP packet too short")
+       }
+
+       // RFC 5905 does not appear to define a maximum NTP record length.
+       // The protocol allows "extension fields" to be included in the record,
+       // and states about these fields:"
+       //
+       //     "While the minimum field length containing required fields is
+       //      four words (16 octets), a maximum field length remains to be
+       //      established."
+       //
+       // For this reason, the packet length is not checked here for being too long.
+
+       // NTP type embeds type BaseLayer which contains two fields:
+       //    Contents is supposed to contain the bytes of the data at this level.
+       //    Payload is supposed to contain the payload of this level.
+       // Here we set the baselayer to be the bytes of the NTP record.
+       d.BaseLayer = BaseLayer{Contents: data[:len(data)]}
+
+       // Extract the fields from the block of bytes.
+       // To make sense of this, refer to the packet diagram
+       // above and the section on endian conventions.
+
+       // The first few fields are all packed into the first 32 bits. Unpack them.
+       f := data[0]
+       d.LeapIndicator = NTPLeapIndicator((f & 0xC0) >> 6)
+       d.Version = NTPVersion((f & 0x38) >> 3)
+       d.Mode = NTPMode(f & 0x07)
+       d.Stratum = NTPStratum(data[1])
+       d.Poll = NTPLog2Seconds(data[2])
+       d.Precision = NTPLog2Seconds(data[3])
+
+       // The remaining fields can just be copied in big endian order.
+       d.RootDelay = NTPFixed16Seconds(binary.BigEndian.Uint32(data[4:8]))
+       d.RootDispersion = NTPFixed16Seconds(binary.BigEndian.Uint32(data[8:12]))
+       d.ReferenceID = NTPReferenceID(binary.BigEndian.Uint32(data[12:16]))
+       d.ReferenceTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[16:24]))
+       d.OriginTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[24:32]))
+       d.ReceiveTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[32:40]))
+       d.TransmitTimestamp = NTPTimestamp(binary.BigEndian.Uint64(data[40:48]))
+
+       // This layer does not attempt to analyse the extension bytes.
+       // But if there are any, we'd like the user to know. So we just
+       // place them all in an ExtensionBytes field.
+       d.ExtensionBytes = data[48:]
+
+       // Return no error.
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (d *NTP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       data, err := b.PrependBytes(ntpMinimumRecordSizeInBytes)
+       if err != nil {
+               return err
+       }
+
+       // Pack the first few fields into the first 32 bits.
+       h := uint8(0)
+       h |= (uint8(d.LeapIndicator) << 6) & 0xC0
+       h |= (uint8(d.Version) << 3) & 0x38
+       h |= (uint8(d.Mode)) & 0x07
+       data[0] = byte(h)
+       data[1] = byte(d.Stratum)
+       data[2] = byte(d.Poll)
+       data[3] = byte(d.Precision)
+
+       // The remaining fields can just be copied in big endian order.
+       binary.BigEndian.PutUint32(data[4:8], uint32(d.RootDelay))
+       binary.BigEndian.PutUint32(data[8:12], uint32(d.RootDispersion))
+       binary.BigEndian.PutUint32(data[12:16], uint32(d.ReferenceID))
+       binary.BigEndian.PutUint64(data[16:24], uint64(d.ReferenceTimestamp))
+       binary.BigEndian.PutUint64(data[24:32], uint64(d.OriginTimestamp))
+       binary.BigEndian.PutUint64(data[32:40], uint64(d.ReceiveTimestamp))
+       binary.BigEndian.PutUint64(data[40:48], uint64(d.TransmitTimestamp))
+
+       ex, err := b.AppendBytes(len(d.ExtensionBytes))
+       if err != nil {
+               return err
+       }
+       copy(ex, d.ExtensionBytes)
+
+       return nil
+}
+
+//******************************************************************************
+
+// CanDecode returns a set of layers that NTP objects can decode.
+// As NTP objects can only decide the NTP layer, we can return just that layer.
+// Apparently a single layer type implements LayerClass.
+func (d *NTP) CanDecode() gopacket.LayerClass {
+       return LayerTypeNTP
+}
+
+//******************************************************************************
+
+// NextLayerType specifies the next layer that GoPacket should attempt to
+// analyse after this (NTP) layer. As NTP packets do not contain any payload
+// bytes, there are no further layers to analyse.
+func (d *NTP) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypeZero
+}
+
+//******************************************************************************
+
+// NTP packets do not carry any data payload, so the empty byte slice is retured.
+// In Go, a nil slice is functionally identical to an empty slice, so we
+// return nil to avoid a heap allocation.
+func (d *NTP) Payload() []byte {
+       return nil
+}
+
+//******************************************************************************
+//*                            End Of NTP File                                 *
+//******************************************************************************
diff --git a/vendor/github.com/google/gopacket/layers/ntp_test.go b/vendor/github.com/google/gopacket/layers/ntp_test.go
new file mode 100644 (file)
index 0000000..b522216
--- /dev/null
@@ -0,0 +1,258 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+//******************************************************************************
+
+package layers
+
+import (
+       "crypto/rand"
+       "github.com/google/gopacket"
+       "io"
+       "reflect"
+       "testing"
+)
+
+//******************************************************************************
+
+// checkNTP() uses the ntp.go code to analyse the packet bytes as an NTP UDP
+// packet and generate an NTP object. It then compares the generated NTP object
+// with the one provided and throws an error if there is any difference.
+// The desc argument is output with any failure message to identify the test.
+func checkNTP(desc string, t *testing.T, packetBytes []byte, pExpectedNTP *NTP) {
+
+       // Analyse the packet bytes, yielding a new packet object p.
+       p := gopacket.NewPacket(packetBytes, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Errorf("Failed to decode packet %s: %v", desc, p.ErrorLayer().Error())
+       }
+
+       // Ensure that the packet analysis yielded the correct set of layers:
+       //    Link Layer        = Ethernet.
+       //    Network Layer     = IPv4.
+       //    Transport Layer   = UDP.
+       //    Application Layer = NTP.
+       checkLayers(p, []gopacket.LayerType{
+               LayerTypeEthernet,
+               LayerTypeIPv4,
+               LayerTypeUDP,
+               LayerTypeNTP}, t)
+
+       // Select the Application (NTP) layer.
+       pResultNTP, ok := p.ApplicationLayer().(*NTP)
+       if !ok {
+               t.Error("No NTP layer type found in packet in " + desc + ".")
+       }
+
+       // Compare the generated NTP object with the expected NTP object.
+       if !reflect.DeepEqual(pResultNTP, pExpectedNTP) {
+               t.Errorf("NTP packet processing failed for packet "+desc+
+                       ":\ngot  :\n%#v\n\nwant :\n%#v\n\n", pResultNTP, pExpectedNTP)
+       }
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{}
+       err := pResultNTP.SerializeTo(buf, opts)
+       if err != nil {
+               t.Error(err)
+       }
+       if !reflect.DeepEqual(pResultNTP.BaseLayer.Contents, buf.Bytes()) {
+               t.Errorf("NTP packet serialization failed for packet "+desc+
+                       ":\ngot  :\n%x\n\nwant :\n%x\n\n", buf.Bytes(), packetBytes)
+       }
+}
+
+//******************************************************************************
+
+func TestNTPOne(t *testing.T) {
+
+       // This test packet is the first NTP packet in the NTP sample capture
+       // pcap file NTP_sync.pcap on the Wireshark sample captures page:
+       //
+       //    https://wiki.wireshark.org/SampleCaptures
+       //    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap
+       var testPacketNTP = []byte{
+               0x00, 0x0c, 0x41, 0x82, 0xb2, 0x53, 0x00, 0xd0,
+               0x59, 0x6c, 0x40, 0x4e, 0x08, 0x00, 0x45, 0x00,
+               0x00, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x80, 0x11,
+               0xb5, 0xfa, 0xc0, 0xa8, 0x32, 0x32, 0x43, 0x81,
+               0x44, 0x09, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38,
+               0xf8, 0xd2, 0xd9, 0x00, 0x0a, 0xfa, 0x00, 0x00,
+               0x00, 0x00, 0x00, 0x01, 0x02, 0x90, 0x00, 0x00,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x00, 0x00, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+               0xee, 0x92,
+       }
+
+       // Assemble the NTP object that we expect to emerge from this test.
+       pExpectedNTP := &NTP{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{0xd9, 0x0, 0xa, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
+                               0x1, 0x2, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+                               0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+                               0x0, 0x0, 0x0, 0x0, 0x0, 0xc5, 0x2, 0x4, 0xec, 0xec, 0x42, 0xee, 0x92},
+                       Payload: nil,
+               },
+               LeapIndicator:      3,
+               Version:            3,
+               Mode:               1,
+               Stratum:            0,
+               Poll:               10,
+               Precision:          -6,
+               RootDelay:          0,
+               RootDispersion:     0x10290,
+               ReferenceID:        0,
+               ReferenceTimestamp: 0,
+               OriginTimestamp:    0,
+               ReceiveTimestamp:   0,
+               TransmitTimestamp:  0xc50204ecec42ee92,
+               ExtensionBytes:     []byte{},
+       }
+
+       checkNTP("test01", t, testPacketNTP, pExpectedNTP)
+}
+
+//******************************************************************************
+
+func TestNTPTwo(t *testing.T) {
+
+       // This test packet is packet #18 in the NTP sample capture
+       // pcap file NTP_sync.pcap on the Wireshark sample captures page:
+       //
+       //    https://wiki.wireshark.org/SampleCaptures
+       //    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap
+       //
+       // This packet was chosen because it is the first NTP packet after the first
+       // NTP packet that has non-zero timestamps.
+
+       var testPacketNTP = []byte{
+               0x00, 0xd0, 0x59, 0x6c, 0x40, 0x4e, 0x00, 0x0c,
+               0x41, 0x82, 0xb2, 0x53, 0x08, 0x00, 0x45, 0x00,
+               0x00, 0x4c, 0x32, 0x46, 0x40, 0x00, 0x2f, 0x11,
+               0xa8, 0x18, 0x45, 0x2c, 0x39, 0x3c, 0xc0, 0xa8,
+               0x32, 0x32, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38,
+               0x09, 0x58, 0x1a, 0x03, 0x0a, 0xee, 0x00, 0x00,
+               0x1b, 0xf7, 0x00, 0x00, 0x14, 0xec, 0x51, 0xae,
+               0x80, 0xb7, 0xc5, 0x02, 0x03, 0x4c, 0x8d, 0x0e,
+               0x66, 0xcb, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+               0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x49,
+               0x59, 0xe6, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x4c,
+               0x6e, 0x6e,
+       }
+
+       // Assemble the NTP object that we expect to emerge from this test.
+       pExpectedNTP := &NTP{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{0x1a, 0x03, 0x0a, 0xee, 0x00, 0x00,
+                               0x1b, 0xf7, 0x00, 0x00, 0x14, 0xec, 0x51, 0xae,
+                               0x80, 0xb7, 0xc5, 0x02, 0x03, 0x4c, 0x8d, 0x0e,
+                               0x66, 0xcb, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+                               0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x49,
+                               0x59, 0xe6, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x4c,
+                               0x6e, 0x6e},
+                       Payload: nil,
+               },
+               LeapIndicator:      0,
+               Version:            3,
+               Mode:               2,
+               Stratum:            3,
+               Poll:               10,
+               Precision:          -18,
+               RootDelay:          0x1bf7,
+               RootDispersion:     0x14ec,
+               ReferenceID:        0x51ae80b7,
+               ReferenceTimestamp: 0xc502034c8d0e66cb,
+               OriginTimestamp:    0xc50204ecec42ee92,
+               ReceiveTimestamp:   0xc50204ebcf4959e6,
+               TransmitTimestamp:  0xc50204ebcf4c6e6e,
+               ExtensionBytes:     []byte{},
+       }
+
+       checkNTP("test02", t, testPacketNTP, pExpectedNTP)
+}
+
+//******************************************************************************
+
+func TestNTPThree(t *testing.T) {
+
+       // This test packet is packet #19 in the NTP sample capture
+       // pcap file NTP_sync.pcap on the Wireshark sample captures page:
+       //
+       //    https://wiki.wireshark.org/SampleCaptures
+       //    https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap
+
+       var testPacketNTP = []byte{
+               0x00, 0xd0, 0x59, 0x6c, 0x40, 0x4e, 0x00, 0x0c,
+               0x41, 0x82, 0xb2, 0x53, 0x08, 0x00, 0x45, 0x00,
+               0x00, 0x4c, 0x00, 0x00, 0x40, 0x00, 0x30, 0x11,
+               0x74, 0x65, 0x18, 0x7b, 0xca, 0xe6, 0xc0, 0xa8,
+               0x32, 0x32, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38,
+               0x44, 0x05, 0x1a, 0x02, 0x0a, 0xec, 0x00, 0x00,
+               0x07, 0xc3, 0x00, 0x00, 0x2f, 0x80, 0xc6, 0x1e,
+               0x5c, 0x02, 0xc5, 0x01, 0xf9, 0x95, 0x42, 0x50,
+               0x82, 0xcf, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+               0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,
+               0x2e, 0xb5, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,
+               0xd6, 0x7b,
+       }
+
+       // Assemble the NTP object that we expect to emerge from this test.
+       pExpectedNTP := &NTP{
+               BaseLayer: BaseLayer{
+                       Contents: []byte{0x1a, 0x02, 0x0a, 0xec, 0x00, 0x00,
+                               0x07, 0xc3, 0x00, 0x00, 0x2f, 0x80, 0xc6, 0x1e,
+                               0x5c, 0x02, 0xc5, 0x01, 0xf9, 0x95, 0x42, 0x50,
+                               0x82, 0xcf, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42,
+                               0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,
+                               0x2e, 0xb5, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35,
+                               0xd6, 0x7b},
+                       Payload: nil,
+               },
+               LeapIndicator:      0,
+               Version:            3,
+               Mode:               2,
+               Stratum:            2,
+               Poll:               10,
+               Precision:          -20,
+               RootDelay:          0x7c3,
+               RootDispersion:     0x2f80,
+               ReferenceID:        0xc61e5c02,
+               ReferenceTimestamp: 0xc501f995425082cf,
+               OriginTimestamp:    0xc50204ecec42ee92,
+               ReceiveTimestamp:   0xc50204ebd2352eb5,
+               TransmitTimestamp:  0xc50204ebd235d67b,
+               ExtensionBytes:     []byte{},
+       }
+
+       checkNTP("test03", t, testPacketNTP, pExpectedNTP)
+}
+
+//******************************************************************************
+
+// TestNTPIsomorphism tests whether random data gets parsed into NTP layer and
+// gets serialized back from it to the same value.
+func TestNTPIsomorphism(t *testing.T) {
+       NTPData := make([]byte, ntpMinimumRecordSizeInBytes+7)
+       _, err := io.ReadFull(rand.Reader, NTPData)
+       if err != nil {
+               t.Error(err)
+       }
+       ntpLayer := &NTP{}
+       err = ntpLayer.DecodeFromBytes(NTPData, gopacket.NilDecodeFeedback)
+       if err != nil {
+               t.Error(err)
+       }
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{}
+       err = ntpLayer.SerializeTo(buf, opts)
+       if err != nil {
+               t.Error(err)
+       }
+       if !reflect.DeepEqual(NTPData, buf.Bytes()) {
+               t.Errorf("NTP packet is not isomorphic:\ngot  :\n%x\n\nwant :\n%x\n\n", buf.Bytes(), NTPData)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/ospf.go b/vendor/github.com/google/gopacket/layers/ospf.go
new file mode 100644 (file)
index 0000000..eee8542
--- /dev/null
@@ -0,0 +1,509 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "fmt"
+
+       "github.com/google/gopacket"
+)
+
+// OSPFType denotes what kind of OSPF type it is
+type OSPFType uint8
+
+// Potential values for OSPF.Type.
+const (
+       OSPFHello                   OSPFType = 1
+       OSPFDatabaseDescription     OSPFType = 2
+       OSPFLinkStateRequest        OSPFType = 3
+       OSPFLinkStateUpdate         OSPFType = 4
+       OSPFLinkStateAcknowledgment OSPFType = 5
+)
+
+// LSA Function Codes for LSAheader.LSType
+const (
+       RouterLSAtype          = 0x2001
+       NetworkLSAtype         = 0x2002
+       InterAreaPrefixLSAtype = 0x2003
+       InterAreaRouterLSAtype = 0x2004
+       ASExternalLSAtype      = 0x4005
+       NSSALSAtype            = 0x2007
+       LinkLSAtype            = 0x0008
+       IntraAreaPrefixLSAtype = 0x2009
+)
+
+// String conversions for OSPFType
+func (i OSPFType) String() string {
+       switch i {
+       case OSPFHello:
+               return "Hello"
+       case OSPFDatabaseDescription:
+               return "Database Description"
+       case OSPFLinkStateRequest:
+               return "Link State Request"
+       case OSPFLinkStateUpdate:
+               return "Link State Update"
+       case OSPFLinkStateAcknowledgment:
+               return "Link State Acknowledgment"
+       default:
+               return ""
+       }
+}
+
+// Prefix extends IntraAreaPrefixLSA
+type Prefix struct {
+       PrefixLength  uint8
+       PrefixOptions uint8
+       Metric        uint16
+       AddressPrefix []byte
+}
+
+// IntraAreaPrefixLSA is the struct from RFC 5340  A.4.10.
+type IntraAreaPrefixLSA struct {
+       NumOfPrefixes  uint16
+       RefLSType      uint16
+       RefLinkStateID uint32
+       RefAdvRouter   uint32
+       Prefixes       []Prefix
+}
+
+// LinkLSA is the struct from RFC 5340  A.4.9.
+type LinkLSA struct {
+       RtrPriority      uint8
+       Options          uint32
+       LinkLocalAddress []byte
+       NumOfPrefixes    uint32
+       Prefixes         []Prefix
+}
+
+// ASExternalLSA is the struct from RFC 5340  A.4.7.
+type ASExternalLSA struct {
+       Flags             uint8
+       Metric            uint32
+       PrefixLength      uint8
+       PrefixOptions     uint8
+       RefLSType         uint16
+       AddressPrefix     []byte
+       ForwardingAddress []byte
+       ExternalRouteTag  uint32
+       RefLinkStateID    uint32
+}
+
+// InterAreaRouterLSA is the struct from RFC 5340  A.4.6.
+type InterAreaRouterLSA struct {
+       Options             uint32
+       Metric              uint32
+       DestinationRouterID uint32
+}
+
+// InterAreaPrefixLSA is the struct from RFC 5340  A.4.5.
+type InterAreaPrefixLSA struct {
+       Metric        uint32
+       PrefixLength  uint8
+       PrefixOptions uint8
+       AddressPrefix []byte
+}
+
+// NetworkLSA is the struct from RFC 5340  A.4.4.
+type NetworkLSA struct {
+       Options        uint32
+       AttachedRouter []uint32
+}
+
+// Router extends RouterLSA
+type Router struct {
+       Type                uint8
+       Metric              uint16
+       InterfaceID         uint32
+       NeighborInterfaceID uint32
+       NeighborRouterID    uint32
+}
+
+// RouterLSA is the struct from RFC 5340  A.4.3.
+type RouterLSA struct {
+       Flags   uint8
+       Options uint32
+       Routers []Router
+}
+
+// LSAheader is the struct from RFC 5340  A.4.2.
+type LSAheader struct {
+       LSAge       uint16
+       LSType      uint16
+       LinkStateID uint32
+       AdvRouter   uint32
+       LSSeqNumber uint32
+       LSChecksum  uint16
+       Length      uint16
+}
+
+// LSA links LSAheader with the structs from RFC 5340  A.4.
+type LSA struct {
+       LSAheader
+       Content interface{}
+}
+
+// LSUpdate is the struct from RFC 5340  A.3.5.
+type LSUpdate struct {
+       NumOfLSAs uint32
+       LSAs      []LSA
+}
+
+// LSReq is the struct from RFC 5340  A.3.4.
+type LSReq struct {
+       LSType    uint16
+       LSID      uint32
+       AdvRouter uint32
+}
+
+// DbDescPkg is the struct from RFC 5340  A.3.3.
+type DbDescPkg struct {
+       Options      uint32
+       InterfaceMTU uint16
+       Flags        uint16
+       DDSeqNumber  uint32
+       LSAinfo      []LSAheader
+}
+
+// HelloPkg  is the struct from RFC 5340  A.3.2.
+type HelloPkg struct {
+       InterfaceID              uint32
+       RtrPriority              uint8
+       Options                  uint32
+       HelloInterval            uint16
+       RouterDeadInterval       uint16
+       DesignatedRouterID       uint32
+       BackupDesignatedRouterID uint32
+       NeighborID               []uint32
+}
+
+// HelloPkgV2 extends the HelloPkg struct with OSPFv2 information
+type HelloPkgV2 struct {
+       HelloPkg
+       NetworkMask uint32
+}
+
+// OSPF is a basic OSPF packet header with common fields of Version 2 and Version 3.
+type OSPF struct {
+       Version      uint8
+       Type         OSPFType
+       PacketLength uint16
+       RouterID     uint32
+       AreaID       uint32
+       Checksum     uint16
+       Content      interface{}
+}
+
+//OSPFv2 extend the OSPF head with version 2 specific fields
+type OSPFv2 struct {
+       BaseLayer
+       OSPF
+       AuType         uint16
+       Authentication uint64
+}
+
+// OSPFv3 extend the OSPF head with version 3 specific fields
+type OSPFv3 struct {
+       BaseLayer
+       OSPF
+       Instance uint8
+       Reserved uint8
+}
+
+// getLSAs parses the LSA information from the packet
+func getLSAs(num uint32, data []byte) ([]LSA, error) {
+       var lsas []LSA
+       var i uint32 = 0
+       var offset uint32 = 0
+       for ; i < num; i++ {
+               var content interface{}
+               lstype := binary.BigEndian.Uint16(data[offset+2 : offset+4])
+               lsalength := binary.BigEndian.Uint16(data[offset+18 : offset+20])
+
+               switch lstype {
+               case RouterLSAtype:
+                       var routers []Router
+                       var j uint32
+                       for j = 24; j < uint32(lsalength); j += 16 {
+                               router := Router{
+                                       Type:                uint8(data[offset+j]),
+                                       Metric:              binary.BigEndian.Uint16(data[offset+j+2 : offset+j+4]),
+                                       InterfaceID:         binary.BigEndian.Uint32(data[offset+j+4 : offset+j+8]),
+                                       NeighborInterfaceID: binary.BigEndian.Uint32(data[offset+j+8 : offset+j+12]),
+                                       NeighborRouterID:    binary.BigEndian.Uint32(data[offset+j+12 : offset+j+16]),
+                               }
+                               routers = append(routers, router)
+                       }
+                       content = RouterLSA{
+                               Flags:   uint8(data[offset+20]),
+                               Options: binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+                               Routers: routers,
+                       }
+               case NetworkLSAtype:
+                       var routers []uint32
+                       var j uint32
+                       for j = 24; j < uint32(lsalength); j += 4 {
+                               routers = append(routers, binary.BigEndian.Uint32(data[offset+j:offset+j+4]))
+                       }
+                       content = NetworkLSA{
+                               Options:        binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+                               AttachedRouter: routers,
+                       }
+               case InterAreaPrefixLSAtype:
+                       content = InterAreaPrefixLSA{
+                               Metric:        binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+                               PrefixLength:  uint8(data[offset+24]),
+                               PrefixOptions: uint8(data[offset+25]),
+                               AddressPrefix: data[offset+28 : offset+uint32(lsalength)],
+                       }
+               case InterAreaRouterLSAtype:
+                       content = InterAreaRouterLSA{
+                               Options:             binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+                               Metric:              binary.BigEndian.Uint32(data[offset+24:offset+28]) & 0x00FFFFFF,
+                               DestinationRouterID: binary.BigEndian.Uint32(data[offset+28 : offset+32]),
+                       }
+               case ASExternalLSAtype:
+                       fallthrough
+               case NSSALSAtype:
+
+                       flags := uint8(data[offset+20])
+                       prefixLen := uint8(data[offset+24]) / 8
+                       var forwardingAddress []byte
+                       if (flags & 0x02) == 0x02 {
+                               forwardingAddress = data[offset+28+uint32(prefixLen) : offset+28+uint32(prefixLen)+16]
+                       }
+                       content = ASExternalLSA{
+                               Flags:             flags,
+                               Metric:            binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+                               PrefixLength:      prefixLen,
+                               PrefixOptions:     uint8(data[offset+25]),
+                               RefLSType:         binary.BigEndian.Uint16(data[offset+26 : offset+28]),
+                               AddressPrefix:     data[offset+28 : offset+28+uint32(prefixLen)],
+                               ForwardingAddress: forwardingAddress,
+                       }
+               case LinkLSAtype:
+                       var prefixes []Prefix
+                       var prefixOffset uint32 = offset + 44
+                       var j uint32
+                       numOfPrefixes := binary.BigEndian.Uint32(data[offset+40 : offset+44])
+                       for j = 0; j < numOfPrefixes; j++ {
+                               prefixLen := uint8(data[prefixOffset])
+                               prefix := Prefix{
+                                       PrefixLength:  prefixLen,
+                                       PrefixOptions: uint8(data[prefixOffset+1]),
+                                       AddressPrefix: data[prefixOffset+4 : prefixOffset+4+uint32(prefixLen)/8],
+                               }
+                               prefixes = append(prefixes, prefix)
+                               prefixOffset = prefixOffset + 4 + uint32(prefixLen)/8
+                       }
+                       content = LinkLSA{
+                               RtrPriority:      uint8(data[offset+20]),
+                               Options:          binary.BigEndian.Uint32(data[offset+20:offset+24]) & 0x00FFFFFF,
+                               LinkLocalAddress: data[offset+24 : offset+40],
+                               NumOfPrefixes:    numOfPrefixes,
+                               Prefixes:         prefixes,
+                       }
+               case IntraAreaPrefixLSAtype:
+                       var prefixes []Prefix
+                       var prefixOffset uint32 = offset + 32
+                       var j uint16
+                       numOfPrefixes := binary.BigEndian.Uint16(data[offset+20 : offset+22])
+                       for j = 0; j < numOfPrefixes; j++ {
+                               prefixLen := uint8(data[prefixOffset])
+                               prefix := Prefix{
+                                       PrefixLength:  prefixLen,
+                                       PrefixOptions: uint8(data[prefixOffset+1]),
+                                       Metric:        binary.BigEndian.Uint16(data[prefixOffset+2 : prefixOffset+4]),
+                                       AddressPrefix: data[prefixOffset+4 : prefixOffset+4+uint32(prefixLen)/8],
+                               }
+                               prefixes = append(prefixes, prefix)
+                               prefixOffset = prefixOffset + 4 + uint32(prefixLen)
+                       }
+                       content = IntraAreaPrefixLSA{
+                               NumOfPrefixes:  numOfPrefixes,
+                               RefLSType:      binary.BigEndian.Uint16(data[offset+22 : offset+24]),
+                               RefLinkStateID: binary.BigEndian.Uint32(data[offset+24 : offset+28]),
+                               RefAdvRouter:   binary.BigEndian.Uint32(data[offset+28 : offset+32]),
+                               Prefixes:       prefixes,
+                       }
+               default:
+                       return nil, fmt.Errorf("Unknown Link State type.")
+               }
+               lsa := LSA{
+                       LSAheader: LSAheader{
+                               LSAge:       binary.BigEndian.Uint16(data[offset : offset+2]),
+                               LSType:      lstype,
+                               LinkStateID: binary.BigEndian.Uint32(data[offset+4 : offset+8]),
+                               AdvRouter:   binary.BigEndian.Uint32(data[offset+8 : offset+12]),
+                               LSSeqNumber: binary.BigEndian.Uint32(data[offset+12 : offset+16]),
+                               LSChecksum:  binary.BigEndian.Uint16(data[offset+16 : offset+18]),
+                               Length:      lsalength,
+                       },
+                       Content: content,
+               }
+               lsas = append(lsas, lsa)
+               offset += uint32(lsalength)
+       }
+       return lsas, nil
+}
+
+// DecodeFromBytes decodes the given bytes into the OSPF layer.
+func (ospf *OSPFv2) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 24 {
+               return fmt.Errorf("Packet too smal for OSPF Version 2")
+       }
+
+       ospf.Version = uint8(data[0])
+       ospf.Type = OSPFType(data[1])
+       ospf.PacketLength = binary.BigEndian.Uint16(data[2:4])
+       ospf.RouterID = binary.BigEndian.Uint32(data[4:8])
+       ospf.AreaID = binary.BigEndian.Uint32(data[8:12])
+       ospf.Checksum = binary.BigEndian.Uint16(data[12:14])
+       ospf.AuType = binary.BigEndian.Uint16(data[14:16])
+       ospf.Authentication = binary.BigEndian.Uint64(data[16:24])
+
+       return nil
+}
+
+// DecodeFromBytes decodes the given bytes into the OSPF layer.
+func (ospf *OSPFv3) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+       if len(data) < 16 {
+               return fmt.Errorf("Packet too smal for OSPF Version 3")
+       }
+
+       ospf.Version = uint8(data[0])
+       ospf.Type = OSPFType(data[1])
+       ospf.PacketLength = binary.BigEndian.Uint16(data[2:4])
+       ospf.RouterID = binary.BigEndian.Uint32(data[4:8])
+       ospf.AreaID = binary.BigEndian.Uint32(data[8:12])
+       ospf.Checksum = binary.BigEndian.Uint16(data[12:14])
+       ospf.Instance = uint8(data[14])
+       ospf.Reserved = uint8(data[15])
+
+       switch ospf.Type {
+       case OSPFHello:
+               var neighbors []uint32
+               for i := 36; uint16(i+4) <= ospf.PacketLength; i += 4 {
+                       neighbors = append(neighbors, binary.BigEndian.Uint32(data[i:i+4]))
+               }
+               ospf.Content = HelloPkg{
+                       InterfaceID:              binary.BigEndian.Uint32(data[16:20]),
+                       RtrPriority:              uint8(data[20]),
+                       Options:                  binary.BigEndian.Uint32(data[21:25]) >> 8,
+                       HelloInterval:            binary.BigEndian.Uint16(data[24:26]),
+                       RouterDeadInterval:       binary.BigEndian.Uint16(data[26:28]),
+                       DesignatedRouterID:       binary.BigEndian.Uint32(data[28:32]),
+                       BackupDesignatedRouterID: binary.BigEndian.Uint32(data[32:36]),
+                       NeighborID:               neighbors,
+               }
+       case OSPFDatabaseDescription:
+               var lsas []LSAheader
+               for i := 28; uint16(i+20) <= ospf.PacketLength; i += 20 {
+                       lsa := LSAheader{
+                               LSAge:       binary.BigEndian.Uint16(data[i : i+2]),
+                               LSType:      binary.BigEndian.Uint16(data[i+2 : i+4]),
+                               LinkStateID: binary.BigEndian.Uint32(data[i+4 : i+8]),
+                               AdvRouter:   binary.BigEndian.Uint32(data[i+8 : i+12]),
+                               LSSeqNumber: binary.BigEndian.Uint32(data[i+12 : i+16]),
+                               LSChecksum:  binary.BigEndian.Uint16(data[i+16 : i+18]),
+                               Length:      binary.BigEndian.Uint16(data[i+18 : i+20]),
+                       }
+                       lsas = append(lsas, lsa)
+               }
+               ospf.Content = DbDescPkg{
+                       Options:      binary.BigEndian.Uint32(data[16:20]) & 0x00FFFFFF,
+                       InterfaceMTU: binary.BigEndian.Uint16(data[20:22]),
+                       Flags:        binary.BigEndian.Uint16(data[22:24]),
+                       DDSeqNumber:  binary.BigEndian.Uint32(data[24:28]),
+                       LSAinfo:      lsas,
+               }
+       case OSPFLinkStateRequest:
+               var lsrs []LSReq
+               for i := 16; uint16(i+12) <= ospf.PacketLength; i += 12 {
+                       lsr := LSReq{
+                               LSType:    binary.BigEndian.Uint16(data[i+2 : i+4]),
+                               LSID:      binary.BigEndian.Uint32(data[i+4 : i+8]),
+                               AdvRouter: binary.BigEndian.Uint32(data[i+8 : i+12]),
+                       }
+                       lsrs = append(lsrs, lsr)
+               }
+               ospf.Content = lsrs
+       case OSPFLinkStateUpdate:
+               num := binary.BigEndian.Uint32(data[16:20])
+               lsas, err := getLSAs(num, data[20:])
+               if err != nil {
+                       return fmt.Errorf("Cannot parse Link State Update packet: %v", err)
+               }
+               ospf.Content = LSUpdate{
+                       NumOfLSAs: num,
+                       LSAs:      lsas,
+               }
+
+       case OSPFLinkStateAcknowledgment:
+               var lsas []LSAheader
+               for i := 16; uint16(i+20) <= ospf.PacketLength; i += 20 {
+                       lsa := LSAheader{
+                               LSAge:       binary.BigEndian.Uint16(data[i : i+2]),
+                               LSType:      binary.BigEndian.Uint16(data[i+2 : i+4]),
+                               LinkStateID: binary.BigEndian.Uint32(data[i+4 : i+8]),
+                               AdvRouter:   binary.BigEndian.Uint32(data[i+8 : i+12]),
+                               LSSeqNumber: binary.BigEndian.Uint32(data[i+12 : i+16]),
+                               LSChecksum:  binary.BigEndian.Uint16(data[i+16 : i+18]),
+                               Length:      binary.BigEndian.Uint16(data[i+18 : i+20]),
+                       }
+                       lsas = append(lsas, lsa)
+               }
+               ospf.Content = lsas
+       default:
+       }
+
+       return nil
+}
+
+// LayerType returns LayerTypeOSPF
+func (ospf *OSPFv2) LayerType() gopacket.LayerType {
+       return LayerTypeOSPF
+}
+func (ospf *OSPFv3) LayerType() gopacket.LayerType {
+       return LayerTypeOSPF
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (ospf *OSPFv2) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypeZero
+}
+func (ospf *OSPFv3) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypeZero
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (ospf *OSPFv2) CanDecode() gopacket.LayerClass {
+       return LayerTypeOSPF
+}
+func (ospf *OSPFv3) CanDecode() gopacket.LayerClass {
+       return LayerTypeOSPF
+}
+
+func decodeOSPF(data []byte, p gopacket.PacketBuilder) error {
+       if len(data) < 14 {
+               return fmt.Errorf("Packet too smal for OSPF")
+       }
+
+       switch uint8(data[0]) {
+       case 2:
+               ospf := &OSPFv2{}
+               return decodingLayerDecoder(ospf, data, p)
+       case 3:
+               ospf := &OSPFv3{}
+               return decodingLayerDecoder(ospf, data, p)
+       default:
+       }
+
+       return fmt.Errorf("Unable to determine OSPF type.")
+}
diff --git a/vendor/github.com/google/gopacket/layers/ospf_test.go b/vendor/github.com/google/gopacket/layers/ospf_test.go
new file mode 100644 (file)
index 0000000..930bb4d
--- /dev/null
@@ -0,0 +1,559 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "reflect"
+       "testing"
+)
+
+// testPacketOSPF3Hello is the packet:
+//   14:43:11.663317 IP6 fe80::1 > ff02::5: OSPFv3, Hello, length 36
+//     0x0000:  3333 0000 0005 c200 1ffa 0001 86dd 6e00  33............n.
+//     0x0010:  0000 0024 5901 fe80 0000 0000 0000 0000  ...$Y...........
+//     0x0020:  0000 0000 0001 ff02 0000 0000 0000 0000  ................
+//     0x0030:  0000 0000 0005 0301 0024 0101 0101 0000  .........$......
+//     0x0040:  0001 fb86 0000 0000 0005 0100 0013 000a  ................
+//     0x0050:  0028 0000 0000 0000 0000                 .(........
+var testPacketOSPF3Hello = []byte{
+       0x33, 0x33, 0x00, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+       0x00, 0x00, 0x00, 0x24, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x01, 0x00, 0x24, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+       0x00, 0x01, 0xfb, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x13, 0x00, 0x0a,
+       0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketOSPF3Hello(t *testing.T) {
+       p := gopacket.NewPacket(testPacketOSPF3Hello, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+
+       ospf := p.Layer(LayerTypeOSPF).(*OSPFv3)
+       if ospf.Version != 3 {
+               t.Fatal("Invalid OSPF version")
+       }
+       if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+               want := &OSPFv3{
+                       OSPF: OSPF{
+                               Version:      3,
+                               Type:         OSPFHello,
+                               PacketLength: 36,
+                               RouterID:     0x1010101,
+                               AreaID:       1,
+                               Checksum:     0xfb86,
+                               Content: HelloPkg{
+                                       InterfaceID:              5,
+                                       RtrPriority:              1,
+                                       Options:                  0x000013,
+                                       HelloInterval:            10,
+                                       RouterDeadInterval:       40,
+                                       DesignatedRouterID:       0,
+                                       BackupDesignatedRouterID: 0,
+                               },
+                       },
+                       Instance: 0,
+                       Reserved: 0,
+               }
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("OSPF packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No OSPF layer type found in packet")
+       }
+}
+func BenchmarkDecodePacketPacket0(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketOSPF3Hello, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// testPacketOSPF3DBDesc is the packet:
+//   14:43:51.657571 IP6 fe80::2 > fe80::1: OSPFv3, Database Description, length 28
+//     0x0000:  c200 1ffa 0001 c201 1ffa 0001 86dd 6e00  ..............n.
+//     0x0010:  0000 001c 5901 fe80 0000 0000 0000 0000  ....Y...........
+//     0x0020:  0000 0000 0002 fe80 0000 0000 0000 0000  ................
+//     0x0030:  0000 0000 0001 0302 001c 0202 0202 0000  ................
+//     0x0040:  0001 d826 0000 0000 0013 05dc 0007 0000  ...&............
+//     0x0050:  1d46                                     .F
+var testPacketOSPF3DBDesc = []byte{
+       0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+       0x00, 0x00, 0x00, 0x1c, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x00, 0x1c, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+       0x00, 0x01, 0xd8, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x05, 0xdc, 0x00, 0x07, 0x00, 0x00,
+       0x1d, 0x46,
+}
+
+func TestPacketOSPF3DBDesc(t *testing.T) {
+       p := gopacket.NewPacket(testPacketOSPF3DBDesc, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+       if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+               want := &OSPFv3{
+                       OSPF: OSPF{
+                               Version:      3,
+                               Type:         OSPFDatabaseDescription,
+                               PacketLength: 28,
+                               RouterID:     0x2020202,
+                               AreaID:       1,
+                               Checksum:     0xd826,
+                               Content: DbDescPkg{
+                                       Options:      0x000013,
+                                       InterfaceMTU: 1500,
+                                       Flags:        0x7,
+                                       DDSeqNumber:  7494,
+                               },
+                       },
+                       Instance: 0,
+                       Reserved: 0,
+               }
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("OSPF packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No OSPF layer type found in packet")
+       }
+}
+func BenchmarkDecodePacketPacket1(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketOSPF3DBDesc, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// testPacketOSPF3LSRequest is the packet:
+//   14:43:51.673584 IP6 fe80::2 > fe80::1: OSPFv3, LS-Request, length 100
+//     0x0000:  c200 1ffa 0001 c201 1ffa 0001 86dd 6e00  ..............n.
+//     0x0010:  0000 0064 5901 fe80 0000 0000 0000 0000  ...dY...........
+//     0x0020:  0000 0000 0002 fe80 0000 0000 0000 0000  ................
+//     0x0030:  0000 0000 0001 0303 0064 0202 0202 0000  .........d......
+//     0x0040:  0001 2c9a 0000 0000 2001 0000 0000 0101  ..,.............
+//     0x0050:  0101 0000 2003 0000 0003 0101 0101 0000  ................
+//     0x0060:  2003 0000 0002 0101 0101 0000 2003 0000  ................
+//     0x0070:  0001 0101 0101 0000 2003 0000 0000 0101  ................
+//     0x0080:  0101 0000 0008 0000 0005 0101 0101 0000  ................
+//     0x0090:  2009 0000 0000 0101 0101                 ..........
+var testPacketOSPF3LSRequest = []byte{
+       0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+       0x00, 0x00, 0x00, 0x64, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x64, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+       0x00, 0x01, 0x2c, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+       0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+       0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00,
+       0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+       0x01, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+       0x20, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+}
+
+func TestPacketOSPF3LSRequest(t *testing.T) {
+       p := gopacket.NewPacket(testPacketOSPF3LSRequest, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+       if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+               want := &OSPFv3{
+                       OSPF: OSPF{
+                               Version:      3,
+                               Type:         OSPFLinkStateRequest,
+                               PacketLength: 100,
+                               RouterID:     0x2020202,
+                               AreaID:       1,
+                               Checksum:     0x2c9a,
+                               Content: []LSReq{
+                                       LSReq{
+                                               LSType:    0x2001,
+                                               LSID:      0x00000000,
+                                               AdvRouter: 0x01010101,
+                                       },
+                                       LSReq{
+                                               LSType:    0x2003,
+                                               LSID:      0x00000003,
+                                               AdvRouter: 0x01010101,
+                                       },
+                                       LSReq{
+                                               LSType:    0x2003,
+                                               LSID:      0x00000002,
+                                               AdvRouter: 0x01010101,
+                                       },
+                                       LSReq{
+                                               LSType:    0x2003,
+                                               LSID:      0x00000001,
+                                               AdvRouter: 0x01010101,
+                                       },
+                                       LSReq{
+                                               LSType:    0x2003,
+                                               LSID:      0x00000000,
+                                               AdvRouter: 0x01010101,
+                                       },
+                                       LSReq{
+                                               LSType:    0x0008,
+                                               LSID:      0x00000005,
+                                               AdvRouter: 0x01010101,
+                                       },
+                                       LSReq{
+                                               LSType:    0x2009,
+                                               LSID:      0x00000000,
+                                               AdvRouter: 0x01010101,
+                                       },
+                               },
+                       },
+                       Instance: 0,
+                       Reserved: 0,
+               }
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("OSPF packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No OSPF layer type found in packet")
+       }
+}
+func BenchmarkDecodePacketPacket2(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketOSPF3LSRequest, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// testPacketOSPF3LSUpdate is the packet:
+//   14:43:51.681554 IP6 fe80::1 > fe80::2: OSPFv3, LS-Update, length 288
+//     0x0000:  c201 1ffa 0001 c200 1ffa 0001 86dd 6e00  ..............n.
+//     0x0010:  0000 0120 5901 fe80 0000 0000 0000 0000  ....Y...........
+//     0x0020:  0000 0000 0001 fe80 0000 0000 0000 0000  ................
+//     0x0030:  0000 0000 0002 0304 0120 0101 0101 0000  ................
+//     0x0040:  0001 e556 0000 0000 0007 0028 2001 0000  ...V.......(....
+//     0x0050:  0000 0101 0101 8000 0002 d13a 0018 0100  ...........:....
+//     0x0060:  0033 0029 2003 0000 0003 0101 0101 8000  .3.)............
+//     0x0070:  0001 6259 0024 0000 004a 4000 0000 2001  ..bY.$...J@.....
+//     0x0080:  0db8 0000 0003 0029 2003 0000 0002 0101  .......)........
+//     0x0090:  0101 8000 0001 baf6 0024 0000 0054 4000  .........$...T@.
+//     0x00a0:  0000 2001 0db8 0000 0004 0029 2003 0000  ...........)....
+//     0x00b0:  0001 0101 0101 8000 0001 eba0 0024 0000  .............$..
+//     0x00c0:  004a 4000 0000 2001 0db8 0000 0034 0029  .J@..........4.)
+//     0x00d0:  2003 0000 0000 0101 0101 8000 0001 0ebd  ................
+//     0x00e0:  0024 0000 0040 4000 0000 2001 0db8 0000  .$...@@.........
+//     0x00f0:  0000 0023 0008 0000 0005 0101 0101 8000  ...#............
+//     0x0100:  0002 3d08 0038 0100 0033 fe80 0000 0000  ..=..8...3......
+//     0x0110:  0000 0000 0000 0000 0001 0000 0001 4000  ..............@.
+//     0x0120:  0000 2001 0db8 0000 0012 0023 2009 0000  ...........#....
+//     0x0130:  0000 0101 0101 8000 0001 e8d2 002c 0001  .............,..
+//     0x0140:  2001 0000 0000 0101 0101 4000 000a 2001  ..........@.....
+//     0x0150:  0db8 0000 0012                           ......
+var testPacketOSPF3LSUpdate = []byte{
+       0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+       0x00, 0x00, 0x01, 0x20, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x04, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+       0x00, 0x01, 0xe5, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x20, 0x01, 0x00, 0x00,
+       0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x02, 0xd1, 0x3a, 0x00, 0x18, 0x01, 0x00,
+       0x00, 0x33, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00,
+       0x00, 0x01, 0x62, 0x59, 0x00, 0x24, 0x00, 0x00, 0x00, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01,
+       0x0d, 0xb8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,
+       0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xba, 0xf6, 0x00, 0x24, 0x00, 0x00, 0x00, 0x54, 0x40, 0x00,
+       0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00,
+       0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xeb, 0xa0, 0x00, 0x24, 0x00, 0x00,
+       0x00, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x34, 0x00, 0x29,
+       0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0x0e, 0xbd,
+       0x00, 0x24, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x23, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00,
+       0x00, 0x02, 0x3d, 0x08, 0x00, 0x38, 0x01, 0x00, 0x00, 0x33, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00,
+       0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12, 0x00, 0x23, 0x20, 0x09, 0x00, 0x00,
+       0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xe8, 0xd2, 0x00, 0x2c, 0x00, 0x01,
+       0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x40, 0x00, 0x00, 0x0a, 0x20, 0x01,
+       0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12,
+}
+
+func TestPacketOSPF3LSUpdate(t *testing.T) {
+       p := gopacket.NewPacket(testPacketOSPF3LSUpdate, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+       if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+               want := &OSPFv3{
+                       OSPF: OSPF{
+                               Version:      3,
+                               Type:         OSPFLinkStateUpdate,
+                               PacketLength: 288,
+                               RouterID:     0x1010101,
+                               AreaID:       1,
+                               Checksum:     0xe556,
+                               Content: LSUpdate{
+                                       NumOfLSAs: 7,
+                                       LSAs: []LSA{
+                                               LSA{
+                                                       LSAheader: LSAheader{
+                                                               LSAge:       40,
+                                                               LSType:      0x2001,
+                                                               LinkStateID: 0x00000000,
+                                                               AdvRouter:   0x01010101,
+                                                               LSSeqNumber: 0x80000002,
+                                                               LSChecksum:  0xd13a,
+                                                               Length:      24,
+                                                       },
+                                                       Content: RouterLSA{
+                                                               Flags:   0x1,
+                                                               Options: 0x33,
+                                                       },
+                                               },
+                                               LSA{
+                                                       LSAheader: LSAheader{
+                                                               LSAge:       41,
+                                                               LSType:      0x2003,
+                                                               LinkStateID: 0x00000003,
+                                                               AdvRouter:   0x01010101,
+                                                               LSSeqNumber: 0x80000001,
+                                                               LSChecksum:  0x6259,
+                                                               Length:      36,
+                                                       },
+                                                       Content: InterAreaPrefixLSA{
+                                                               Metric:        74,
+                                                               PrefixLength:  64,
+                                                               PrefixOptions: 0,
+                                                               AddressPrefix: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x03},
+                                                       },
+                                               },
+                                               LSA{
+                                                       LSAheader: LSAheader{
+                                                               LSAge:       41,
+                                                               LSType:      0x2003,
+                                                               LinkStateID: 0x00000002,
+                                                               AdvRouter:   0x01010101,
+                                                               LSSeqNumber: 0x80000001,
+                                                               LSChecksum:  0xbaf6,
+                                                               Length:      36,
+                                                       },
+                                                       Content: InterAreaPrefixLSA{
+                                                               Metric:        84,
+                                                               PrefixLength:  64,
+                                                               PrefixOptions: 0,
+                                                               AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x4},
+                                                       },
+                                               },
+                                               LSA{
+                                                       LSAheader: LSAheader{
+                                                               LSAge:       41,
+                                                               LSType:      0x2003,
+                                                               LinkStateID: 0x00000001,
+                                                               AdvRouter:   0x01010101,
+                                                               LSSeqNumber: 0x80000001,
+                                                               LSChecksum:  0xeba0,
+                                                               Length:      36,
+                                                       },
+                                                       Content: InterAreaPrefixLSA{
+                                                               Metric:        74,
+                                                               PrefixLength:  64,
+                                                               PrefixOptions: 0,
+                                                               AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x34},
+                                                       },
+                                               },
+                                               LSA{
+                                                       LSAheader: LSAheader{
+                                                               LSAge:       41,
+                                                               LSType:      0x2003,
+                                                               LinkStateID: 0x00000000,
+                                                               AdvRouter:   0x01010101,
+                                                               LSSeqNumber: 0x80000001,
+                                                               LSChecksum:  0xebd,
+                                                               Length:      36,
+                                                       },
+                                                       Content: InterAreaPrefixLSA{
+                                                               Metric:        64,
+                                                               PrefixLength:  64,
+                                                               PrefixOptions: 0,
+                                                               AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x0},
+                                                       },
+                                               },
+                                               LSA{
+                                                       LSAheader: LSAheader{
+                                                               LSAge:       35,
+                                                               LSType:      0x8,
+                                                               LinkStateID: 0x00000005,
+                                                               AdvRouter:   0x01010101,
+                                                               LSSeqNumber: 0x80000002,
+                                                               LSChecksum:  0x3d08,
+                                                               Length:      56,
+                                                       },
+                                                       Content: LinkLSA{
+                                                               RtrPriority:      1,
+                                                               Options:          0x33,
+                                                               LinkLocalAddress: []byte{0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+                                                               NumOfPrefixes:    1,
+                                                               Prefixes: []Prefix{
+                                                                       Prefix{
+                                                                               PrefixLength:  64,
+                                                                               PrefixOptions: 0,
+                                                                               AddressPrefix: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12},
+                                                                       },
+                                                               },
+                                                       },
+                                               },
+                                               LSA{
+                                                       LSAheader: LSAheader{
+                                                               LSAge:       35,
+                                                               LSType:      0x2009,
+                                                               LinkStateID: 0x00000000,
+                                                               AdvRouter:   0x01010101,
+                                                               LSSeqNumber: 0x80000001,
+                                                               LSChecksum:  0xe8d2,
+                                                               Length:      44,
+                                                       },
+                                                       Content: IntraAreaPrefixLSA{
+                                                               NumOfPrefixes: 1,
+                                                               RefLSType:     0x2001,
+                                                               RefAdvRouter:  0x01010101,
+                                                               Prefixes: []Prefix{
+                                                                       Prefix{
+                                                                               PrefixLength:  64,
+                                                                               PrefixOptions: 0,
+                                                                               Metric:        10,
+                                                                               AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x12},
+                                                                       },
+                                                               },
+                                                       },
+                                               },
+                                       },
+                               },
+                       },
+                       Instance: 0,
+                       Reserved: 0,
+               }
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("OSPF packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No OSPF layer type found in packet")
+       }
+}
+func BenchmarkDecodePacketPacket3(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketOSPF3LSUpdate, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+// testPacketOSPF3LSAck is the packet:
+//   14:43:54.185384 IP6 fe80::1 > ff02::5: OSPFv3, LS-Ack, length 136
+//     0x0000:  3333 0000 0005 c200 1ffa 0001 86dd 6e00  33............n.
+//     0x0010:  0000 0088 5901 fe80 0000 0000 0000 0000  ....Y...........
+//     0x0020:  0000 0000 0001 ff02 0000 0000 0000 0000  ................
+//     0x0030:  0000 0000 0005 0305 0088 0101 0101 0000  ................
+//     0x0040:  0001 9d2c 0000 0005 2001 0000 0000 0202  ...,............
+//     0x0050:  0202 8000 0002 b354 0018 0006 2003 0000  .......T........
+//     0x0060:  0003 0202 0202 8000 0001 4473 0024 0006  ..........Ds.$..
+//     0x0070:  2003 0000 0002 0202 0202 8000 0001 9c11  ................
+//     0x0080:  0024 0006 2003 0000 0001 0202 0202 8000  .$..............
+//     0x0090:  0001 cdba 0024 0006 2003 0000 0000 0202  .....$..........
+//     0x00a0:  0202 8000 0001 efd7 0024 0005 0008 0000  .........$......
+//     0x00b0:  0005 0202 0202 8000 0001 5433 002c       ..........T3.,
+var testPacketOSPF3LSAck = []byte{
+       0x33, 0x33, 0x00, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00,
+       0x00, 0x00, 0x00, 0x88, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x05, 0x00, 0x88, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+       0x00, 0x01, 0x9d, 0x2c, 0x00, 0x00, 0x00, 0x05, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+       0x02, 0x02, 0x80, 0x00, 0x00, 0x02, 0xb3, 0x54, 0x00, 0x18, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00,
+       0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x44, 0x73, 0x00, 0x24, 0x00, 0x06,
+       0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x9c, 0x11,
+       0x00, 0x24, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00,
+       0x00, 0x01, 0xcd, 0xba, 0x00, 0x24, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+       0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0xef, 0xd7, 0x00, 0x24, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00,
+       0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x54, 0x33, 0x00, 0x2c,
+}
+
+func TestPacketOSPF3LSAck(t *testing.T) {
+       p := gopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t)
+       if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok {
+               want := &OSPFv3{
+                       OSPF: OSPF{
+                               Version:      3,
+                               Type:         OSPFLinkStateAcknowledgment,
+                               PacketLength: 136,
+                               RouterID:     0x1010101,
+                               AreaID:       1,
+                               Checksum:     0x9d2c,
+                               Content: []LSAheader{
+                                       LSAheader{
+                                               LSAge:       5,
+                                               LSType:      0x2001,
+                                               LinkStateID: 0x00000000,
+                                               AdvRouter:   0x02020202,
+                                               LSSeqNumber: 0x80000002,
+                                               LSChecksum:  0xb354,
+                                               Length:      24,
+                                       },
+                                       LSAheader{
+                                               LSAge:       6,
+                                               LSType:      0x2003,
+                                               LinkStateID: 0x00000003,
+                                               AdvRouter:   0x02020202,
+                                               LSSeqNumber: 0x80000001,
+                                               LSChecksum:  0x4473,
+                                               Length:      36,
+                                       },
+                                       LSAheader{
+                                               LSAge:       6,
+                                               LSType:      0x2003,
+                                               LinkStateID: 0x00000002,
+                                               AdvRouter:   0x02020202,
+                                               LSSeqNumber: 0x80000001,
+                                               LSChecksum:  0x9c11,
+                                               Length:      36,
+                                       },
+                                       LSAheader{
+                                               LSAge:       6,
+                                               LSType:      0x2003,
+                                               LinkStateID: 0x00000001,
+                                               AdvRouter:   0x02020202,
+                                               LSSeqNumber: 0x80000001,
+                                               LSChecksum:  0xcdba,
+                                               Length:      36,
+                                       },
+                                       LSAheader{
+                                               LSAge:       6,
+                                               LSType:      0x2003,
+                                               LinkStateID: 0x00000000,
+                                               AdvRouter:   0x02020202,
+                                               LSSeqNumber: 0x80000001,
+                                               LSChecksum:  0xefd7,
+                                               Length:      36,
+                                       },
+                                       LSAheader{
+                                               LSAge:       5,
+                                               LSType:      0x0008,
+                                               LinkStateID: 0x00000005,
+                                               AdvRouter:   0x02020202,
+                                               LSSeqNumber: 0x80000001,
+                                               LSChecksum:  0x5433,
+                                               Length:      44,
+                                       },
+                               },
+                       },
+                       Instance: 0,
+                       Reserved: 0,
+               }
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("OSPF packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("No OSPF layer type found in packet")
+       }
+}
+func BenchmarkDecodePacketPacket4(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/pflog.go b/vendor/github.com/google/gopacket/layers/pflog.go
new file mode 100644 (file)
index 0000000..853882f
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+
+       "github.com/google/gopacket"
+)
+
+type PFDirection uint8
+
+const (
+       PFDirectionInOut PFDirection = 0
+       PFDirectionIn    PFDirection = 1
+       PFDirectionOut   PFDirection = 2
+)
+
+// PFLog provides the layer for 'pf' packet-filter logging, as described at
+// http://www.freebsd.org/cgi/man.cgi?query=pflog&sektion=4
+type PFLog struct {
+       BaseLayer
+       Length              uint8
+       Family              ProtocolFamily
+       Action, Reason      uint8
+       IFName, Ruleset     []byte
+       RuleNum, SubruleNum uint32
+       UID                 uint32
+       PID                 int32
+       RuleUID             uint32
+       RulePID             int32
+       Direction           PFDirection
+       // The remainder is padding
+}
+
+func (pf *PFLog) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       pf.Length = data[0]
+       pf.Family = ProtocolFamily(data[1])
+       pf.Action = data[2]
+       pf.Reason = data[3]
+       pf.IFName = data[4:20]
+       pf.Ruleset = data[20:36]
+       pf.RuleNum = binary.BigEndian.Uint32(data[36:40])
+       pf.SubruleNum = binary.BigEndian.Uint32(data[40:44])
+       pf.UID = binary.BigEndian.Uint32(data[44:48])
+       pf.PID = int32(binary.BigEndian.Uint32(data[48:52]))
+       pf.RuleUID = binary.BigEndian.Uint32(data[52:56])
+       pf.RulePID = int32(binary.BigEndian.Uint32(data[56:60]))
+       pf.Direction = PFDirection(data[60])
+       if pf.Length%4 != 1 {
+               return errors.New("PFLog header length should be 3 less than multiple of 4")
+       }
+       actualLength := int(pf.Length) + 3
+       pf.Contents = data[:actualLength]
+       pf.Payload = data[actualLength:]
+       return nil
+}
+
+// LayerType returns layers.LayerTypePFLog
+func (pf *PFLog) LayerType() gopacket.LayerType { return LayerTypePFLog }
+
+func (pf *PFLog) CanDecode() gopacket.LayerClass { return LayerTypePFLog }
+
+func (pf *PFLog) NextLayerType() gopacket.LayerType {
+       return pf.Family.LayerType()
+}
+
+func decodePFLog(data []byte, p gopacket.PacketBuilder) error {
+       pf := &PFLog{}
+       return decodingLayerDecoder(pf, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/ports.go b/vendor/github.com/google/gopacket/layers/ports.go
new file mode 100644 (file)
index 0000000..431358c
--- /dev/null
@@ -0,0 +1,140 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "fmt"
+       "strconv"
+
+       "github.com/google/gopacket"
+)
+
+// TCPPort is a port in a TCP layer.
+type TCPPort uint16
+
+// UDPPort is a port in a UDP layer.
+type UDPPort uint16
+
+// RUDPPort is a port in a RUDP layer.
+type RUDPPort uint8
+
+// SCTPPort is a port in a SCTP layer.
+type SCTPPort uint16
+
+// UDPLitePort is a port in a UDPLite layer.
+type UDPLitePort uint16
+
+// RUDPPortNames contains the string names for all RUDP ports.
+var RUDPPortNames = map[RUDPPort]string{}
+
+// UDPLitePortNames contains the string names for all UDPLite ports.
+var UDPLitePortNames = map[UDPLitePort]string{}
+
+// {TCP,UDP,SCTP}PortNames can be found in iana_ports.go
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't.  Well-known names are stored in
+// TCPPortNames.
+func (a TCPPort) String() string {
+       if name, ok := TCPPortNames[a]; ok {
+               return fmt.Sprintf("%d(%s)", a, name)
+       }
+       return strconv.Itoa(int(a))
+}
+
+// LayerType returns a LayerType that would be able to decode the
+// application payload. It uses some well-known ports such as 53 for
+// DNS.
+//
+// Returns gopacket.LayerTypePayload for unknown/unsupported port numbers.
+func (a TCPPort) LayerType() gopacket.LayerType {
+       lt := tcpPortLayerType[uint16(a)]
+       if lt != 0 {
+               return lt
+       }
+       return gopacket.LayerTypePayload
+}
+
+var tcpPortLayerType = [65536]gopacket.LayerType{
+       53: LayerTypeDNS,
+}
+
+// RegisterTCPPortLayerType creates a new mapping between a TCPPort
+// and an underlaying LayerType.
+func RegisterTCPPortLayerType(port TCPPort, layerType gopacket.LayerType) {
+       tcpPortLayerType[port] = layerType
+}
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't.  Well-known names are stored in
+// UDPPortNames.
+func (a UDPPort) String() string {
+       if name, ok := UDPPortNames[a]; ok {
+               return fmt.Sprintf("%d(%s)", a, name)
+       }
+       return strconv.Itoa(int(a))
+}
+
+// LayerType returns a LayerType that would be able to decode the
+// application payload. It uses some well-known ports such as 53 for
+// DNS.
+//
+// Returns gopacket.LayerTypePayload for unknown/unsupported port numbers.
+func (a UDPPort) LayerType() gopacket.LayerType {
+       lt := udpPortLayerType[uint16(a)]
+       if lt != 0 {
+               return lt
+       }
+       return gopacket.LayerTypePayload
+}
+
+var udpPortLayerType = [65536]gopacket.LayerType{
+       53:   LayerTypeDNS,
+       123:  LayerTypeNTP,
+       4789: LayerTypeVXLAN,
+       67:   LayerTypeDHCPv4,
+       68:   LayerTypeDHCPv4,
+       6343: LayerTypeSFlow,
+       6081: LayerTypeGeneve,
+       3784: LayerTypeBFD,
+}
+
+// RegisterUDPPortLayerType creates a new mapping between a UDPPort
+// and an underlaying LayerType.
+func RegisterUDPPortLayerType(port UDPPort, layerType gopacket.LayerType) {
+       udpPortLayerType[port] = layerType
+}
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't.  Well-known names are stored in
+// RUDPPortNames.
+func (a RUDPPort) String() string {
+       if name, ok := RUDPPortNames[a]; ok {
+               return fmt.Sprintf("%d(%s)", a, name)
+       }
+       return strconv.Itoa(int(a))
+}
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't.  Well-known names are stored in
+// SCTPPortNames.
+func (a SCTPPort) String() string {
+       if name, ok := SCTPPortNames[a]; ok {
+               return fmt.Sprintf("%d(%s)", a, name)
+       }
+       return strconv.Itoa(int(a))
+}
+
+// String returns the port as "number(name)" if there's a well-known port name,
+// or just "number" if there isn't.  Well-known names are stored in
+// UDPLitePortNames.
+func (a UDPLitePort) String() string {
+       if name, ok := UDPLitePortNames[a]; ok {
+               return fmt.Sprintf("%d(%s)", a, name)
+       }
+       return strconv.Itoa(int(a))
+}
diff --git a/vendor/github.com/google/gopacket/layers/ppp.go b/vendor/github.com/google/gopacket/layers/ppp.go
new file mode 100644 (file)
index 0000000..1d2e7b8
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "github.com/google/gopacket"
+)
+
+// PPP is the layer for PPP encapsulation headers.
+type PPP struct {
+       BaseLayer
+       PPPType PPPType
+}
+
+// PPPEndpoint is a singleton endpoint for PPP.  Since there is no actual
+// addressing for the two ends of a PPP connection, we use a singleton value
+// named 'point' for each endpoint.
+var PPPEndpoint = gopacket.NewEndpoint(EndpointPPP, nil)
+
+// PPPFlow is a singleton flow for PPP.  Since there is no actual addressing for
+// the two ends of a PPP connection, we use a singleton value to represent the
+// flow for all PPP connections.
+var PPPFlow = gopacket.NewFlow(EndpointPPP, nil, nil)
+
+// LayerType returns LayerTypePPP
+func (p *PPP) LayerType() gopacket.LayerType { return LayerTypePPP }
+
+// LinkFlow returns PPPFlow.
+func (p *PPP) LinkFlow() gopacket.Flow { return PPPFlow }
+
+func decodePPP(data []byte, p gopacket.PacketBuilder) error {
+       ppp := &PPP{}
+       if data[0]&0x1 == 0 {
+               if data[1]&0x1 == 0 {
+                       return errors.New("PPP has invalid type")
+               }
+               ppp.PPPType = PPPType(binary.BigEndian.Uint16(data[:2]))
+               ppp.Contents = data[:2]
+               ppp.Payload = data[2:]
+       } else {
+               ppp.PPPType = PPPType(data[0])
+               ppp.Contents = data[:1]
+               ppp.Payload = data[1:]
+       }
+       p.AddLayer(ppp)
+       p.SetLinkLayer(ppp)
+       return p.NextDecoder(ppp.PPPType)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (p *PPP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       if p.PPPType&0x100 == 0 {
+               bytes, err := b.PrependBytes(2)
+               if err != nil {
+                       return err
+               }
+               binary.BigEndian.PutUint16(bytes, uint16(p.PPPType))
+       } else {
+               bytes, err := b.PrependBytes(1)
+               if err != nil {
+                       return err
+               }
+               bytes[0] = uint8(p.PPPType)
+       }
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/pppoe.go b/vendor/github.com/google/gopacket/layers/pppoe.go
new file mode 100644 (file)
index 0000000..14cd63a
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "github.com/google/gopacket"
+)
+
+// PPPoE is the layer for PPPoE encapsulation headers.
+type PPPoE struct {
+       BaseLayer
+       Version   uint8
+       Type      uint8
+       Code      PPPoECode
+       SessionId uint16
+       Length    uint16
+}
+
+// LayerType returns gopacket.LayerTypePPPoE.
+func (p *PPPoE) LayerType() gopacket.LayerType {
+       return LayerTypePPPoE
+}
+
+// decodePPPoE decodes the PPPoE header (see http://tools.ietf.org/html/rfc2516).
+func decodePPPoE(data []byte, p gopacket.PacketBuilder) error {
+       pppoe := &PPPoE{
+               Version:   data[0] >> 4,
+               Type:      data[0] & 0x0F,
+               Code:      PPPoECode(data[1]),
+               SessionId: binary.BigEndian.Uint16(data[2:4]),
+               Length:    binary.BigEndian.Uint16(data[4:6]),
+       }
+       pppoe.BaseLayer = BaseLayer{data[:6], data[6 : 6+pppoe.Length]}
+       p.AddLayer(pppoe)
+       return p.NextDecoder(pppoe.Code)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (p *PPPoE) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       payload := b.Bytes()
+       bytes, err := b.PrependBytes(6)
+       if err != nil {
+               return err
+       }
+       bytes[0] = (p.Version << 4) | p.Type
+       bytes[1] = byte(p.Code)
+       binary.BigEndian.PutUint16(bytes[2:], p.SessionId)
+       if opts.FixLengths {
+               p.Length = uint16(len(payload))
+       }
+       binary.BigEndian.PutUint16(bytes[4:], p.Length)
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/prism.go b/vendor/github.com/google/gopacket/layers/prism.go
new file mode 100644 (file)
index 0000000..e1711e7
--- /dev/null
@@ -0,0 +1,146 @@
+// Copyright 2015 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// http://www.tcpdump.org/linktypes/LINKTYPE_IEEE802_11_PRISM.html
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+
+       "github.com/google/gopacket"
+)
+
+func decodePrismValue(data []byte, pv *PrismValue) {
+       pv.DID = PrismDID(binary.LittleEndian.Uint32(data[0:4]))
+       pv.Status = binary.LittleEndian.Uint16(data[4:6])
+       pv.Length = binary.LittleEndian.Uint16(data[6:8])
+       pv.Data = data[8 : 8+pv.Length]
+}
+
+type PrismDID uint32
+
+const (
+       PrismDIDType1HostTime                  PrismDID = 0x10044
+       PrismDIDType2HostTime                  PrismDID = 0x01041
+       PrismDIDType1MACTime                   PrismDID = 0x20044
+       PrismDIDType2MACTime                   PrismDID = 0x02041
+       PrismDIDType1Channel                   PrismDID = 0x30044
+       PrismDIDType2Channel                   PrismDID = 0x03041
+       PrismDIDType1RSSI                      PrismDID = 0x40044
+       PrismDIDType2RSSI                      PrismDID = 0x04041
+       PrismDIDType1SignalQuality             PrismDID = 0x50044
+       PrismDIDType2SignalQuality             PrismDID = 0x05041
+       PrismDIDType1Signal                    PrismDID = 0x60044
+       PrismDIDType2Signal                    PrismDID = 0x06041
+       PrismDIDType1Noise                     PrismDID = 0x70044
+       PrismDIDType2Noise                     PrismDID = 0x07041
+       PrismDIDType1Rate                      PrismDID = 0x80044
+       PrismDIDType2Rate                      PrismDID = 0x08041
+       PrismDIDType1TransmittedFrameIndicator PrismDID = 0x90044
+       PrismDIDType2TransmittedFrameIndicator PrismDID = 0x09041
+       PrismDIDType1FrameLength               PrismDID = 0xA0044
+       PrismDIDType2FrameLength               PrismDID = 0x0A041
+)
+
+const (
+       PrismType1MessageCode uint16 = 0x00000044
+       PrismType2MessageCode uint16 = 0x00000041
+)
+
+func (p PrismDID) String() string {
+       dids := map[PrismDID]string{
+               PrismDIDType1HostTime:                  "Host Time",
+               PrismDIDType2HostTime:                  "Host Time",
+               PrismDIDType1MACTime:                   "MAC Time",
+               PrismDIDType2MACTime:                   "MAC Time",
+               PrismDIDType1Channel:                   "Channel",
+               PrismDIDType2Channel:                   "Channel",
+               PrismDIDType1RSSI:                      "RSSI",
+               PrismDIDType2RSSI:                      "RSSI",
+               PrismDIDType1SignalQuality:             "Signal Quality",
+               PrismDIDType2SignalQuality:             "Signal Quality",
+               PrismDIDType1Signal:                    "Signal",
+               PrismDIDType2Signal:                    "Signal",
+               PrismDIDType1Noise:                     "Noise",
+               PrismDIDType2Noise:                     "Noise",
+               PrismDIDType1Rate:                      "Rate",
+               PrismDIDType2Rate:                      "Rate",
+               PrismDIDType1TransmittedFrameIndicator: "Transmitted Frame Indicator",
+               PrismDIDType2TransmittedFrameIndicator: "Transmitted Frame Indicator",
+               PrismDIDType1FrameLength:               "Frame Length",
+               PrismDIDType2FrameLength:               "Frame Length",
+       }
+
+       if str, ok := dids[p]; ok {
+               return str
+       }
+
+       return "Unknown DID"
+}
+
+type PrismValue struct {
+       DID    PrismDID
+       Status uint16
+       Length uint16
+       Data   []byte
+}
+
+func (pv *PrismValue) IsSupplied() bool {
+       return pv.Status == 1
+}
+
+var ErrPrismExpectedMoreData = errors.New("Expected more data.")
+var ErrPrismInvalidCode = errors.New("Invalid header code.")
+
+func decodePrismHeader(data []byte, p gopacket.PacketBuilder) error {
+       d := &PrismHeader{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+type PrismHeader struct {
+       BaseLayer
+       Code       uint16
+       Length     uint16
+       DeviceName string
+       Values     []PrismValue
+}
+
+func (m *PrismHeader) LayerType() gopacket.LayerType { return LayerTypePrismHeader }
+
+func (m *PrismHeader) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.Code = binary.LittleEndian.Uint16(data[0:4])
+       m.Length = binary.LittleEndian.Uint16(data[4:8])
+       m.DeviceName = string(data[8:24])
+       m.BaseLayer = BaseLayer{Contents: data[:m.Length], Payload: data[m.Length:len(data)]}
+
+       switch m.Code {
+       case PrismType1MessageCode:
+               fallthrough
+       case PrismType2MessageCode:
+               // valid message code
+       default:
+               return ErrPrismInvalidCode
+       }
+
+       offset := uint16(24)
+
+       m.Values = make([]PrismValue, (m.Length-offset)/12)
+       for i := 0; i < len(m.Values); i++ {
+               decodePrismValue(data[offset:offset+12], &m.Values[i])
+               offset += 12
+       }
+
+       if offset != m.Length {
+               return ErrPrismExpectedMoreData
+       }
+
+       return nil
+}
+
+func (m *PrismHeader) CanDecode() gopacket.LayerClass    { return LayerTypePrismHeader }
+func (m *PrismHeader) NextLayerType() gopacket.LayerType { return LayerTypeDot11 }
diff --git a/vendor/github.com/google/gopacket/layers/prism_test.go b/vendor/github.com/google/gopacket/layers/prism_test.go
new file mode 100644 (file)
index 0000000..136a04c
--- /dev/null
@@ -0,0 +1,120 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "net"
+       "reflect"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+// Generator: python layers/test_creator.py --layerType=LayerTypePrismHeader --linkType=LinkTypePrismHeader --name=Prism%s ~/tmp/dump.pcap
+// http://wiki.wireshark.org/SampleCaptures#Sample_Captures
+
+// testPacketPrism is the packet:
+//   21:32:37.616872 BSSID:Broadcast DA:Broadcast SA:cc:fa:00:ad:79:e8 (oui Unknown) Probe Request () [1.0 2.0 5.5 11.0 Mbit]
+//        0x0000:  4400 0000 9000 0000 7261 3000 0000 0000
+//        0x0010:  0000 0000 0000 0000 4400 0100 0000 0400
+//        0x0020:  f9c1 2900 4400 0200 0000 0000 0000 0000
+//        0x0030:  4400 0300 0000 0400 0a00 0000 4400 0400
+//        0x0040:  0000 0400 e1ff ffff 0000 0000 0000 0000
+//        0x0050:  0000 0000 4400 0600 0000 0400 0000 0000
+//        0x0060:  4400 0700 0000 0400 0000 0000 4400 0800
+//        0x0070:  0000 0400 0200 0000 4400 0900 0000 0000
+//        0x0080:  0000 0000 4400 0a00 0000 0400 7e00 0000
+//        0x0090:  4000 0000 ffff ffff ffff ccfa 00ad 79e8
+//        0x00a0:  ffff ffff ffff a041 0000 0104 0204 0b16
+//        0x00b0:  3208 0c12 1824 3048 606c 0301 012d 1a2d
+//        0x00c0:  1117 ff00 0000 0000 0000 0000 0000 0000
+//        0x00d0:  0000 0000 0000 0000 007f 0800 0000 0000
+//        0x00e0:  0000 40dd 0900 1018 0200 0010 0000 dd1e
+//        0x00f0:  0090 4c33 2d11 17ff 0000 0000 0000 0000
+//        0x0100:  0000 0000 0000 0000 0000 0000 0000
+
+var testPacketPrism = []byte{
+       0x44, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x72, 0x61, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00,
+       0xf9, 0xc1, 0x29, 0x00, 0x44, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x44, 0x00, 0x04, 0x00,
+       0x00, 0x00, 0x04, 0x00, 0xe1, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x44, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x08, 0x00,
+       0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x7e, 0x00, 0x00, 0x00,
+       0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x00, 0xad, 0x79, 0xe8,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41, 0x00, 0x00, 0x01, 0x04, 0x02, 0x04, 0x0b, 0x16,
+       0x32, 0x08, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x01, 0x2d, 0x1a, 0x2d,
+       0x11, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x40, 0xdd, 0x09, 0x00, 0x10, 0x18, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0xdd, 0x1e,
+       0x00, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketPrism(t *testing.T) {
+       p := gopacket.NewPacket(testPacketPrism, LinkTypePrismHeader, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypePrismHeader, LayerTypeDot11, LayerTypeDot11MgmtProbeReq}, t)
+
+       if got, ok := p.Layer(LayerTypePrismHeader).(*PrismHeader); ok {
+               want := &PrismHeader{
+                       BaseLayer: BaseLayer{
+                               Contents: []uint8{0x44, 0x0, 0x0, 0x0, 0x90, 0x0, 0x0, 0x0, 0x72, 0x61, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x1, 0x0, 0x0, 0x0, 0x4, 0x0, 0xf9, 0xc1, 0x29, 0x0, 0x44, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x3, 0x0, 0x0, 0x0, 0x4, 0x0, 0xa, 0x0, 0x0, 0x0, 0x44, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0xe1, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x6, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x7, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x8, 0x0, 0x0, 0x0, 0x4, 0x0, 0x2, 0x0, 0x0, 0x0, 0x44, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0xa, 0x0, 0x0, 0x0, 0x4, 0x0, 0x7e, 0x0, 0x0, 0x0},
+                               Payload:  []uint8{0x40, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41, 0x0, 0x0, 0x1, 0x4, 0x2, 0x4, 0xb, 0x16, 0x32, 0x8, 0xc, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x3, 0x1, 0x1, 0x2d, 0x1a, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xdd, 0x9, 0x0, 0x10, 0x18, 0x2, 0x0, 0x0, 0x10, 0x0, 0x0, 0xdd, 0x1e, 0x0, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, Code: 0x44, Length: 0x90, DeviceName: "ra0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
+                       Values: []PrismValue{
+                               PrismValue{DID: PrismDIDType1HostTime, Status: 0x0, Length: 0x4, Data: []uint8{0xf9, 0xc1, 0x29, 0x0}},
+                               PrismValue{DID: PrismDIDType1MACTime, Status: 0x0, Length: 0x0, Data: []uint8{}},
+                               PrismValue{DID: PrismDIDType1Channel, Status: 0x0, Length: 0x4, Data: []uint8{0xa, 0x0, 0x0, 0x0}},
+                               PrismValue{DID: PrismDIDType1RSSI, Status: 0x0, Length: 0x4, Data: []uint8{0xe1, 0xff, 0xff, 0xff}},
+                               PrismValue{DID: 0x0, Status: 0x0, Length: 0x0, Data: []uint8{}},
+                               PrismValue{DID: PrismDIDType1Signal, Status: 0x0, Length: 0x4, Data: []uint8{0x0, 0x0, 0x0, 0x0}},
+                               PrismValue{DID: PrismDIDType1Noise, Status: 0x0, Length: 0x4, Data: []uint8{0x0, 0x0, 0x0, 0x0}},
+                               PrismValue{DID: PrismDIDType1Rate, Status: 0x0, Length: 0x4, Data: []uint8{0x2, 0x0, 0x0, 0x0}},
+                               PrismValue{DID: PrismDIDType1TransmittedFrameIndicator, Status: 0x0, Length: 0x0, Data: []uint8{}},
+                               PrismValue{DID: PrismDIDType1FrameLength, Status: 0x0, Length: 0x4, Data: []uint8{0x7e, 0x0, 0x0, 0x0}},
+                       },
+               }
+
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("RadioTap packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       }
+
+       if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok {
+               want := &Dot11{
+                       BaseLayer: BaseLayer{
+                               Contents: []uint8{0x40, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41},
+                               Payload:  []uint8{0x0, 0x0, 0x1, 0x4, 0x2, 0x4, 0xb, 0x16, 0x32, 0x8, 0xc, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x3, 0x1, 0x1, 0x2d, 0x1a, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xdd, 0x9, 0x0, 0x10, 0x18, 0x2, 0x0, 0x0, 0x10, 0x0, 0x0, 0xdd, 0x1e, 0x0, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
+                       },
+                       Type:           0x10,
+                       Proto:          0x0,
+                       Flags:          0x0,
+                       DurationID:     0x0,
+                       Address1:       net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+                       Address2:       net.HardwareAddr{0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8},
+                       Address3:       net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
+                       Address4:       net.HardwareAddr(nil),
+                       SequenceNumber: 0x041a,
+                       FragmentNumber: 0x0,
+                       Checksum:       0x0,
+               }
+
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("Dot11 packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       }
+}
+
+func BenchmarkDecodePacketPrism(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketPrism, LinkTypePrismHeader, gopacket.NoCopy)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/radiotap.go b/vendor/github.com/google/gopacket/layers/radiotap.go
new file mode 100644 (file)
index 0000000..4304e75
--- /dev/null
@@ -0,0 +1,1045 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "bytes"
+       "encoding/binary"
+       "fmt"
+       "hash/crc32"
+       "strings"
+
+       "github.com/google/gopacket"
+)
+
+// align calculates the number of bytes needed to align with the width
+// on the offset, returning the number of bytes we need to skip to
+// align to the offset (width).
+func align(offset uint16, width uint16) uint16 {
+       return ((((offset) + ((width) - 1)) & (^((width) - 1))) - offset)
+}
+
+type RadioTapPresent uint32
+
+const (
+       RadioTapPresentTSFT RadioTapPresent = 1 << iota
+       RadioTapPresentFlags
+       RadioTapPresentRate
+       RadioTapPresentChannel
+       RadioTapPresentFHSS
+       RadioTapPresentDBMAntennaSignal
+       RadioTapPresentDBMAntennaNoise
+       RadioTapPresentLockQuality
+       RadioTapPresentTxAttenuation
+       RadioTapPresentDBTxAttenuation
+       RadioTapPresentDBMTxPower
+       RadioTapPresentAntenna
+       RadioTapPresentDBAntennaSignal
+       RadioTapPresentDBAntennaNoise
+       RadioTapPresentRxFlags
+       RadioTapPresentTxFlags
+       RadioTapPresentRtsRetries
+       RadioTapPresentDataRetries
+       _
+       RadioTapPresentMCS
+       RadioTapPresentAMPDUStatus
+       RadioTapPresentVHT
+       RadioTapPresentEXT RadioTapPresent = 1 << 31
+)
+
+func (r RadioTapPresent) TSFT() bool {
+       return r&RadioTapPresentTSFT != 0
+}
+func (r RadioTapPresent) Flags() bool {
+       return r&RadioTapPresentFlags != 0
+}
+func (r RadioTapPresent) Rate() bool {
+       return r&RadioTapPresentRate != 0
+}
+func (r RadioTapPresent) Channel() bool {
+       return r&RadioTapPresentChannel != 0
+}
+func (r RadioTapPresent) FHSS() bool {
+       return r&RadioTapPresentFHSS != 0
+}
+func (r RadioTapPresent) DBMAntennaSignal() bool {
+       return r&RadioTapPresentDBMAntennaSignal != 0
+}
+func (r RadioTapPresent) DBMAntennaNoise() bool {
+       return r&RadioTapPresentDBMAntennaNoise != 0
+}
+func (r RadioTapPresent) LockQuality() bool {
+       return r&RadioTapPresentLockQuality != 0
+}
+func (r RadioTapPresent) TxAttenuation() bool {
+       return r&RadioTapPresentTxAttenuation != 0
+}
+func (r RadioTapPresent) DBTxAttenuation() bool {
+       return r&RadioTapPresentDBTxAttenuation != 0
+}
+func (r RadioTapPresent) DBMTxPower() bool {
+       return r&RadioTapPresentDBMTxPower != 0
+}
+func (r RadioTapPresent) Antenna() bool {
+       return r&RadioTapPresentAntenna != 0
+}
+func (r RadioTapPresent) DBAntennaSignal() bool {
+       return r&RadioTapPresentDBAntennaSignal != 0
+}
+func (r RadioTapPresent) DBAntennaNoise() bool {
+       return r&RadioTapPresentDBAntennaNoise != 0
+}
+func (r RadioTapPresent) RxFlags() bool {
+       return r&RadioTapPresentRxFlags != 0
+}
+func (r RadioTapPresent) TxFlags() bool {
+       return r&RadioTapPresentTxFlags != 0
+}
+func (r RadioTapPresent) RtsRetries() bool {
+       return r&RadioTapPresentRtsRetries != 0
+}
+func (r RadioTapPresent) DataRetries() bool {
+       return r&RadioTapPresentDataRetries != 0
+}
+func (r RadioTapPresent) MCS() bool {
+       return r&RadioTapPresentMCS != 0
+}
+func (r RadioTapPresent) AMPDUStatus() bool {
+       return r&RadioTapPresentAMPDUStatus != 0
+}
+func (r RadioTapPresent) VHT() bool {
+       return r&RadioTapPresentVHT != 0
+}
+func (r RadioTapPresent) EXT() bool {
+       return r&RadioTapPresentEXT != 0
+}
+
+type RadioTapChannelFlags uint16
+
+const (
+       RadioTapChannelFlagsTurbo   RadioTapChannelFlags = 0x0010 // Turbo channel
+       RadioTapChannelFlagsCCK     RadioTapChannelFlags = 0x0020 // CCK channel
+       RadioTapChannelFlagsOFDM    RadioTapChannelFlags = 0x0040 // OFDM channel
+       RadioTapChannelFlagsGhz2    RadioTapChannelFlags = 0x0080 // 2 GHz spectrum channel.
+       RadioTapChannelFlagsGhz5    RadioTapChannelFlags = 0x0100 // 5 GHz spectrum channel
+       RadioTapChannelFlagsPassive RadioTapChannelFlags = 0x0200 // Only passive scan allowed
+       RadioTapChannelFlagsDynamic RadioTapChannelFlags = 0x0400 // Dynamic CCK-OFDM channel
+       RadioTapChannelFlagsGFSK    RadioTapChannelFlags = 0x0800 // GFSK channel (FHSS PHY)
+)
+
+func (r RadioTapChannelFlags) Turbo() bool {
+       return r&RadioTapChannelFlagsTurbo != 0
+}
+func (r RadioTapChannelFlags) CCK() bool {
+       return r&RadioTapChannelFlagsCCK != 0
+}
+func (r RadioTapChannelFlags) OFDM() bool {
+       return r&RadioTapChannelFlagsOFDM != 0
+}
+func (r RadioTapChannelFlags) Ghz2() bool {
+       return r&RadioTapChannelFlagsGhz2 != 0
+}
+func (r RadioTapChannelFlags) Ghz5() bool {
+       return r&RadioTapChannelFlagsGhz5 != 0
+}
+func (r RadioTapChannelFlags) Passive() bool {
+       return r&RadioTapChannelFlagsPassive != 0
+}
+func (r RadioTapChannelFlags) Dynamic() bool {
+       return r&RadioTapChannelFlagsDynamic != 0
+}
+func (r RadioTapChannelFlags) GFSK() bool {
+       return r&RadioTapChannelFlagsGFSK != 0
+}
+
+// String provides a human readable string for RadioTapChannelFlags.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the RadioTapChannelFlags value, not its string.
+func (a RadioTapChannelFlags) String() string {
+       var out bytes.Buffer
+       if a.Turbo() {
+               out.WriteString("Turbo,")
+       }
+       if a.CCK() {
+               out.WriteString("CCK,")
+       }
+       if a.OFDM() {
+               out.WriteString("OFDM,")
+       }
+       if a.Ghz2() {
+               out.WriteString("Ghz2,")
+       }
+       if a.Ghz5() {
+               out.WriteString("Ghz5,")
+       }
+       if a.Passive() {
+               out.WriteString("Passive,")
+       }
+       if a.Dynamic() {
+               out.WriteString("Dynamic,")
+       }
+       if a.GFSK() {
+               out.WriteString("GFSK,")
+       }
+
+       if length := out.Len(); length > 0 {
+               return string(out.Bytes()[:length-1]) // strip final comma
+       }
+       return ""
+}
+
+type RadioTapFlags uint8
+
+const (
+       RadioTapFlagsCFP           RadioTapFlags = 1 << iota // sent/received during CFP
+       RadioTapFlagsShortPreamble                           // sent/received * with short * preamble
+       RadioTapFlagsWEP                                     // sent/received * with WEP encryption
+       RadioTapFlagsFrag                                    // sent/received * with fragmentation
+       RadioTapFlagsFCS                                     // frame includes FCS
+       RadioTapFlagsDatapad                                 // frame has padding between * 802.11 header and payload * (to 32-bit boundary)
+       RadioTapFlagsBadFCS                                  // does not pass FCS check
+       RadioTapFlagsShortGI                                 // HT short GI
+)
+
+func (r RadioTapFlags) CFP() bool {
+       return r&RadioTapFlagsCFP != 0
+}
+func (r RadioTapFlags) ShortPreamble() bool {
+       return r&RadioTapFlagsShortPreamble != 0
+}
+func (r RadioTapFlags) WEP() bool {
+       return r&RadioTapFlagsWEP != 0
+}
+func (r RadioTapFlags) Frag() bool {
+       return r&RadioTapFlagsFrag != 0
+}
+func (r RadioTapFlags) FCS() bool {
+       return r&RadioTapFlagsFCS != 0
+}
+func (r RadioTapFlags) Datapad() bool {
+       return r&RadioTapFlagsDatapad != 0
+}
+func (r RadioTapFlags) BadFCS() bool {
+       return r&RadioTapFlagsBadFCS != 0
+}
+func (r RadioTapFlags) ShortGI() bool {
+       return r&RadioTapFlagsShortGI != 0
+}
+
+// String provides a human readable string for RadioTapFlags.
+// This string is possibly subject to change over time; if you're storing this
+// persistently, you should probably store the RadioTapFlags value, not its string.
+func (a RadioTapFlags) String() string {
+       var out bytes.Buffer
+       if a.CFP() {
+               out.WriteString("CFP,")
+       }
+       if a.ShortPreamble() {
+               out.WriteString("SHORT-PREAMBLE,")
+       }
+       if a.WEP() {
+               out.WriteString("WEP,")
+       }
+       if a.Frag() {
+               out.WriteString("FRAG,")
+       }
+       if a.FCS() {
+               out.WriteString("FCS,")
+       }
+       if a.Datapad() {
+               out.WriteString("DATAPAD,")
+       }
+       if a.ShortGI() {
+               out.WriteString("SHORT-GI,")
+       }
+
+       if length := out.Len(); length > 0 {
+               return string(out.Bytes()[:length-1]) // strip final comma
+       }
+       return ""
+}
+
+type RadioTapRate uint8
+
+func (a RadioTapRate) String() string {
+       return fmt.Sprintf("%v Mb/s", 0.5*float32(a))
+}
+
+type RadioTapChannelFrequency uint16
+
+func (a RadioTapChannelFrequency) String() string {
+       return fmt.Sprintf("%d MHz", a)
+}
+
+type RadioTapRxFlags uint16
+
+const (
+       RadioTapRxFlagsBadPlcp RadioTapRxFlags = 0x0002
+)
+
+func (self RadioTapRxFlags) BadPlcp() bool {
+       return self&RadioTapRxFlagsBadPlcp != 0
+}
+
+func (self RadioTapRxFlags) String() string {
+       if self.BadPlcp() {
+               return "BADPLCP"
+       }
+       return ""
+}
+
+type RadioTapTxFlags uint16
+
+const (
+       RadioTapTxFlagsFail RadioTapTxFlags = 1 << iota
+       RadioTapTxFlagsCTS
+       RadioTapTxFlagsRTS
+       RadioTapTxFlagsNoACK
+)
+
+func (self RadioTapTxFlags) Fail() bool  { return self&RadioTapTxFlagsFail != 0 }
+func (self RadioTapTxFlags) CTS() bool   { return self&RadioTapTxFlagsCTS != 0 }
+func (self RadioTapTxFlags) RTS() bool   { return self&RadioTapTxFlagsRTS != 0 }
+func (self RadioTapTxFlags) NoACK() bool { return self&RadioTapTxFlagsNoACK != 0 }
+
+func (self RadioTapTxFlags) String() string {
+       var tokens []string
+       if self.Fail() {
+               tokens = append(tokens, "Fail")
+       }
+       if self.CTS() {
+               tokens = append(tokens, "CTS")
+       }
+       if self.RTS() {
+               tokens = append(tokens, "RTS")
+       }
+       if self.NoACK() {
+               tokens = append(tokens, "NoACK")
+       }
+       return strings.Join(tokens, ",")
+}
+
+type RadioTapMCS struct {
+       Known RadioTapMCSKnown
+       Flags RadioTapMCSFlags
+       MCS   uint8
+}
+
+func (self RadioTapMCS) String() string {
+       var tokens []string
+       if self.Known.Bandwidth() {
+               token := "?"
+               switch self.Flags.Bandwidth() {
+               case 0:
+                       token = "20"
+               case 1:
+                       token = "40"
+               case 2:
+                       token = "40(20L)"
+               case 3:
+                       token = "40(20U)"
+               }
+               tokens = append(tokens, token)
+       }
+       if self.Known.MCSIndex() {
+               tokens = append(tokens, fmt.Sprintf("MCSIndex#%d", self.MCS))
+       }
+       if self.Known.GuardInterval() {
+               if self.Flags.ShortGI() {
+                       tokens = append(tokens, fmt.Sprintf("shortGI"))
+               } else {
+                       tokens = append(tokens, fmt.Sprintf("longGI"))
+               }
+       }
+       if self.Known.HTFormat() {
+               if self.Flags.Greenfield() {
+                       tokens = append(tokens, fmt.Sprintf("HT-greenfield"))
+               } else {
+                       tokens = append(tokens, fmt.Sprintf("HT-mixed"))
+               }
+       }
+       if self.Known.FECType() {
+               if self.Flags.FECLDPC() {
+                       tokens = append(tokens, fmt.Sprintf("LDPC"))
+               } else {
+                       tokens = append(tokens, fmt.Sprintf("BCC"))
+               }
+       }
+       if self.Known.STBC() {
+               tokens = append(tokens, fmt.Sprintf("STBC#%d", self.Flags.STBC()))
+       }
+       if self.Known.NESS() {
+               num := 0
+               if self.Known.NESS1() {
+                       num |= 0x02
+               }
+               if self.Flags.NESS0() {
+                       num |= 0x01
+               }
+               tokens = append(tokens, fmt.Sprintf("num-of-ESS#%d", num))
+       }
+       return strings.Join(tokens, ",")
+}
+
+type RadioTapMCSKnown uint8
+
+const (
+       RadioTapMCSKnownBandwidth RadioTapMCSKnown = 1 << iota
+       RadioTapMCSKnownMCSIndex
+       RadioTapMCSKnownGuardInterval
+       RadioTapMCSKnownHTFormat
+       RadioTapMCSKnownFECType
+       RadioTapMCSKnownSTBC
+       RadioTapMCSKnownNESS
+       RadioTapMCSKnownNESS1
+)
+
+func (self RadioTapMCSKnown) Bandwidth() bool     { return self&RadioTapMCSKnownBandwidth != 0 }
+func (self RadioTapMCSKnown) MCSIndex() bool      { return self&RadioTapMCSKnownMCSIndex != 0 }
+func (self RadioTapMCSKnown) GuardInterval() bool { return self&RadioTapMCSKnownGuardInterval != 0 }
+func (self RadioTapMCSKnown) HTFormat() bool      { return self&RadioTapMCSKnownHTFormat != 0 }
+func (self RadioTapMCSKnown) FECType() bool       { return self&RadioTapMCSKnownFECType != 0 }
+func (self RadioTapMCSKnown) STBC() bool          { return self&RadioTapMCSKnownSTBC != 0 }
+func (self RadioTapMCSKnown) NESS() bool          { return self&RadioTapMCSKnownNESS != 0 }
+func (self RadioTapMCSKnown) NESS1() bool         { return self&RadioTapMCSKnownNESS1 != 0 }
+
+type RadioTapMCSFlags uint8
+
+const (
+       RadioTapMCSFlagsBandwidthMask RadioTapMCSFlags = 0x03
+       RadioTapMCSFlagsShortGI                        = 0x04
+       RadioTapMCSFlagsGreenfield                     = 0x08
+       RadioTapMCSFlagsFECLDPC                        = 0x10
+       RadioTapMCSFlagsSTBCMask                       = 0x60
+       RadioTapMCSFlagsNESS0                          = 0x80
+)
+
+func (self RadioTapMCSFlags) Bandwidth() int {
+       return int(self & RadioTapMCSFlagsBandwidthMask)
+}
+func (self RadioTapMCSFlags) ShortGI() bool    { return self&RadioTapMCSFlagsShortGI != 0 }
+func (self RadioTapMCSFlags) Greenfield() bool { return self&RadioTapMCSFlagsGreenfield != 0 }
+func (self RadioTapMCSFlags) FECLDPC() bool    { return self&RadioTapMCSFlagsFECLDPC != 0 }
+func (self RadioTapMCSFlags) STBC() int {
+       return int(self&RadioTapMCSFlagsSTBCMask) >> 5
+}
+func (self RadioTapMCSFlags) NESS0() bool { return self&RadioTapMCSFlagsNESS0 != 0 }
+
+type RadioTapAMPDUStatus struct {
+       Reference uint32
+       Flags     RadioTapAMPDUStatusFlags
+       CRC       uint8
+}
+
+func (self RadioTapAMPDUStatus) String() string {
+       tokens := []string{
+               fmt.Sprintf("ref#%x", self.Reference),
+       }
+       if self.Flags.ReportZerolen() && self.Flags.IsZerolen() {
+               tokens = append(tokens, fmt.Sprintf("zero-length"))
+       }
+       if self.Flags.LastKnown() && self.Flags.IsLast() {
+               tokens = append(tokens, "last")
+       }
+       if self.Flags.DelimCRCErr() {
+               tokens = append(tokens, "delimiter CRC error")
+       }
+       if self.Flags.DelimCRCKnown() {
+               tokens = append(tokens, fmt.Sprintf("delimiter-CRC=%02x", self.CRC))
+       }
+       return strings.Join(tokens, ",")
+}
+
+type RadioTapAMPDUStatusFlags uint16
+
+const (
+       RadioTapAMPDUStatusFlagsReportZerolen RadioTapAMPDUStatusFlags = 1 << iota
+       RadioTapAMPDUIsZerolen
+       RadioTapAMPDULastKnown
+       RadioTapAMPDUIsLast
+       RadioTapAMPDUDelimCRCErr
+       RadioTapAMPDUDelimCRCKnown
+)
+
+func (self RadioTapAMPDUStatusFlags) ReportZerolen() bool {
+       return self&RadioTapAMPDUStatusFlagsReportZerolen != 0
+}
+func (self RadioTapAMPDUStatusFlags) IsZerolen() bool     { return self&RadioTapAMPDUIsZerolen != 0 }
+func (self RadioTapAMPDUStatusFlags) LastKnown() bool     { return self&RadioTapAMPDULastKnown != 0 }
+func (self RadioTapAMPDUStatusFlags) IsLast() bool        { return self&RadioTapAMPDUIsLast != 0 }
+func (self RadioTapAMPDUStatusFlags) DelimCRCErr() bool   { return self&RadioTapAMPDUDelimCRCErr != 0 }
+func (self RadioTapAMPDUStatusFlags) DelimCRCKnown() bool { return self&RadioTapAMPDUDelimCRCKnown != 0 }
+
+type RadioTapVHT struct {
+       Known      RadioTapVHTKnown
+       Flags      RadioTapVHTFlags
+       Bandwidth  uint8
+       MCSNSS     [4]RadioTapVHTMCSNSS
+       Coding     uint8
+       GroupId    uint8
+       PartialAID uint16
+}
+
+func (self RadioTapVHT) String() string {
+       var tokens []string
+       if self.Known.STBC() {
+               if self.Flags.STBC() {
+                       tokens = append(tokens, "STBC")
+               } else {
+                       tokens = append(tokens, "no STBC")
+               }
+       }
+       if self.Known.TXOPPSNotAllowed() {
+               if self.Flags.TXOPPSNotAllowed() {
+                       tokens = append(tokens, "TXOP doze not allowed")
+               } else {
+                       tokens = append(tokens, "TXOP doze allowed")
+               }
+       }
+       if self.Known.GI() {
+               if self.Flags.SGI() {
+                       tokens = append(tokens, "short GI")
+               } else {
+                       tokens = append(tokens, "long GI")
+               }
+       }
+       if self.Known.SGINSYMDisambiguation() {
+               if self.Flags.SGINSYMMod() {
+                       tokens = append(tokens, "NSYM mod 10=9")
+               } else {
+                       tokens = append(tokens, "NSYM mod 10!=9 or no short GI")
+               }
+       }
+       if self.Known.LDPCExtraOFDMSymbol() {
+               if self.Flags.LDPCExtraOFDMSymbol() {
+                       tokens = append(tokens, "LDPC extra OFDM symbols")
+               } else {
+                       tokens = append(tokens, "no LDPC extra OFDM symbols")
+               }
+       }
+       if self.Known.Beamformed() {
+               if self.Flags.Beamformed() {
+                       tokens = append(tokens, "beamformed")
+               } else {
+                       tokens = append(tokens, "no beamformed")
+               }
+       }
+       if self.Known.Bandwidth() {
+               token := "?"
+               switch self.Bandwidth & 0x1f {
+               case 0:
+                       token = "20"
+               case 1:
+                       token = "40"
+               case 2:
+                       token = "40(20L)"
+               case 3:
+                       token = "40(20U)"
+               case 4:
+                       token = "80"
+               case 5:
+                       token = "80(40L)"
+               case 6:
+                       token = "80(40U)"
+               case 7:
+                       token = "80(20LL)"
+               case 8:
+                       token = "80(20LU)"
+               case 9:
+                       token = "80(20UL)"
+               case 10:
+                       token = "80(20UU)"
+               case 11:
+                       token = "160"
+               case 12:
+                       token = "160(80L)"
+               case 13:
+                       token = "160(80U)"
+               case 14:
+                       token = "160(40LL)"
+               case 15:
+                       token = "160(40LU)"
+               case 16:
+                       token = "160(40UL)"
+               case 17:
+                       token = "160(40UU)"
+               case 18:
+                       token = "160(20LLL)"
+               case 19:
+                       token = "160(20LLU)"
+               case 20:
+                       token = "160(20LUL)"
+               case 21:
+                       token = "160(20LUU)"
+               case 22:
+                       token = "160(20ULL)"
+               case 23:
+                       token = "160(20ULU)"
+               case 24:
+                       token = "160(20UUL)"
+               case 25:
+                       token = "160(20UUU)"
+               }
+               tokens = append(tokens, token)
+       }
+       for i, MCSNSS := range self.MCSNSS {
+               if MCSNSS.Present() {
+                       fec := "?"
+                       switch self.Coding & (1 << uint8(i)) {
+                       case 0:
+                               fec = "BCC"
+                       case 1:
+                               fec = "LDPC"
+                       }
+                       tokens = append(tokens, fmt.Sprintf("user%d(%s,%s)", i, MCSNSS.String(), fec))
+               }
+       }
+       if self.Known.GroupId() {
+               tokens = append(tokens,
+                       fmt.Sprintf("group=%d", self.GroupId))
+       }
+       if self.Known.PartialAID() {
+               tokens = append(tokens,
+                       fmt.Sprintf("partial-AID=%d", self.PartialAID))
+       }
+       return strings.Join(tokens, ",")
+}
+
+type RadioTapVHTKnown uint16
+
+const (
+       RadioTapVHTKnownSTBC RadioTapVHTKnown = 1 << iota
+       RadioTapVHTKnownTXOPPSNotAllowed
+       RadioTapVHTKnownGI
+       RadioTapVHTKnownSGINSYMDisambiguation
+       RadioTapVHTKnownLDPCExtraOFDMSymbol
+       RadioTapVHTKnownBeamformed
+       RadioTapVHTKnownBandwidth
+       RadioTapVHTKnownGroupId
+       RadioTapVHTKnownPartialAID
+)
+
+func (self RadioTapVHTKnown) STBC() bool { return self&RadioTapVHTKnownSTBC != 0 }
+func (self RadioTapVHTKnown) TXOPPSNotAllowed() bool {
+       return self&RadioTapVHTKnownTXOPPSNotAllowed != 0
+}
+func (self RadioTapVHTKnown) GI() bool { return self&RadioTapVHTKnownGI != 0 }
+func (self RadioTapVHTKnown) SGINSYMDisambiguation() bool {
+       return self&RadioTapVHTKnownSGINSYMDisambiguation != 0
+}
+func (self RadioTapVHTKnown) LDPCExtraOFDMSymbol() bool {
+       return self&RadioTapVHTKnownLDPCExtraOFDMSymbol != 0
+}
+func (self RadioTapVHTKnown) Beamformed() bool { return self&RadioTapVHTKnownBeamformed != 0 }
+func (self RadioTapVHTKnown) Bandwidth() bool  { return self&RadioTapVHTKnownBandwidth != 0 }
+func (self RadioTapVHTKnown) GroupId() bool    { return self&RadioTapVHTKnownGroupId != 0 }
+func (self RadioTapVHTKnown) PartialAID() bool { return self&RadioTapVHTKnownPartialAID != 0 }
+
+type RadioTapVHTFlags uint8
+
+const (
+       RadioTapVHTFlagsSTBC RadioTapVHTFlags = 1 << iota
+       RadioTapVHTFlagsTXOPPSNotAllowed
+       RadioTapVHTFlagsSGI
+       RadioTapVHTFlagsSGINSYMMod
+       RadioTapVHTFlagsLDPCExtraOFDMSymbol
+       RadioTapVHTFlagsBeamformed
+)
+
+func (self RadioTapVHTFlags) STBC() bool { return self&RadioTapVHTFlagsSTBC != 0 }
+func (self RadioTapVHTFlags) TXOPPSNotAllowed() bool {
+       return self&RadioTapVHTFlagsTXOPPSNotAllowed != 0
+}
+func (self RadioTapVHTFlags) SGI() bool        { return self&RadioTapVHTFlagsSGI != 0 }
+func (self RadioTapVHTFlags) SGINSYMMod() bool { return self&RadioTapVHTFlagsSGINSYMMod != 0 }
+func (self RadioTapVHTFlags) LDPCExtraOFDMSymbol() bool {
+       return self&RadioTapVHTFlagsLDPCExtraOFDMSymbol != 0
+}
+func (self RadioTapVHTFlags) Beamformed() bool { return self&RadioTapVHTFlagsBeamformed != 0 }
+
+type RadioTapVHTMCSNSS uint8
+
+func (self RadioTapVHTMCSNSS) Present() bool {
+       return self&0x0F != 0
+}
+
+func (self RadioTapVHTMCSNSS) String() string {
+       return fmt.Sprintf("NSS#%dMCS#%d", uint32(self&0xf), uint32(self>>4))
+}
+
+func decodeRadioTap(data []byte, p gopacket.PacketBuilder) error {
+       d := &RadioTap{}
+       // TODO: Should we set LinkLayer here? And implement LinkFlow
+       return decodingLayerDecoder(d, data, p)
+}
+
+type RadioTap struct {
+       BaseLayer
+
+       // Version 0. Only increases for drastic changes, introduction of compatible new fields does not count.
+       Version uint8
+       // Length of the whole header in bytes, including it_version, it_pad, it_len, and data fields.
+       Length uint16
+       // Present is a bitmap telling which fields are present. Set bit 31 (0x80000000) to extend the bitmap by another 32 bits. Additional extensions are made by setting bit 31.
+       Present RadioTapPresent
+       // TSFT: value in microseconds of the MAC's 64-bit 802.11 Time Synchronization Function timer when the first bit of the MPDU arrived at the MAC. For received frames, only.
+       TSFT  uint64
+       Flags RadioTapFlags
+       // Rate Tx/Rx data rate
+       Rate RadioTapRate
+       // ChannelFrequency Tx/Rx frequency in MHz, followed by flags
+       ChannelFrequency RadioTapChannelFrequency
+       ChannelFlags     RadioTapChannelFlags
+       // FHSS For frequency-hopping radios, the hop set (first byte) and pattern (second byte).
+       FHSS uint16
+       // DBMAntennaSignal RF signal power at the antenna, decibel difference from one milliwatt.
+       DBMAntennaSignal int8
+       // DBMAntennaNoise RF noise power at the antenna, decibel difference from one milliwatt.
+       DBMAntennaNoise int8
+       // LockQuality Quality of Barker code lock. Unitless. Monotonically nondecreasing with "better" lock strength. Called "Signal Quality" in datasheets.
+       LockQuality uint16
+       // TxAttenuation Transmit power expressed as unitless distance from max power set at factory calibration.  0 is max power. Monotonically nondecreasing with lower power levels.
+       TxAttenuation uint16
+       // DBTxAttenuation Transmit power expressed as decibel distance from max power set at factory calibration.  0 is max power.  Monotonically nondecreasing with lower power levels.
+       DBTxAttenuation uint16
+       // DBMTxPower Transmit power expressed as dBm (decibels from a 1 milliwatt reference). This is the absolute power level measured at the antenna port.
+       DBMTxPower int8
+       // Antenna Unitless indication of the Rx/Tx antenna for this packet. The first antenna is antenna 0.
+       Antenna uint8
+       // DBAntennaSignal RF signal power at the antenna, decibel difference from an arbitrary, fixed reference.
+       DBAntennaSignal uint8
+       // DBAntennaNoise RF noise power at the antenna, decibel difference from an arbitrary, fixed reference point.
+       DBAntennaNoise uint8
+       //
+       RxFlags     RadioTapRxFlags
+       TxFlags     RadioTapTxFlags
+       RtsRetries  uint8
+       DataRetries uint8
+       MCS         RadioTapMCS
+       AMPDUStatus RadioTapAMPDUStatus
+       VHT         RadioTapVHT
+}
+
+func (m *RadioTap) LayerType() gopacket.LayerType { return LayerTypeRadioTap }
+
+func (m *RadioTap) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.Version = uint8(data[0])
+       m.Length = binary.LittleEndian.Uint16(data[2:4])
+       m.Present = RadioTapPresent(binary.LittleEndian.Uint32(data[4:8]))
+
+       offset := uint16(4)
+
+       for (binary.LittleEndian.Uint32(data[offset:offset+4]) & 0x80000000) != 0 {
+               // This parser only handles standard radiotap namespace,
+               // and expects all fields are packed in the first it_present.
+               // Extended bitmap will be just ignored.
+               offset += 4
+       }
+       offset += 4 // skip the bitmap
+
+       if m.Present.TSFT() {
+               offset += align(offset, 8)
+               m.TSFT = binary.LittleEndian.Uint64(data[offset : offset+8])
+               offset += 8
+       }
+       if m.Present.Flags() {
+               m.Flags = RadioTapFlags(data[offset])
+               offset++
+       }
+       if m.Present.Rate() {
+               m.Rate = RadioTapRate(data[offset])
+               offset++
+       }
+       if m.Present.Channel() {
+               offset += align(offset, 2)
+               m.ChannelFrequency = RadioTapChannelFrequency(binary.LittleEndian.Uint16(data[offset : offset+2]))
+               offset += 2
+               m.ChannelFlags = RadioTapChannelFlags(binary.LittleEndian.Uint16(data[offset : offset+2]))
+               offset += 2
+       }
+       if m.Present.FHSS() {
+               m.FHSS = binary.LittleEndian.Uint16(data[offset : offset+2])
+               offset += 2
+       }
+       if m.Present.DBMAntennaSignal() {
+               m.DBMAntennaSignal = int8(data[offset])
+               offset++
+       }
+       if m.Present.DBMAntennaNoise() {
+               m.DBMAntennaNoise = int8(data[offset])
+               offset++
+       }
+       if m.Present.LockQuality() {
+               offset += align(offset, 2)
+               m.LockQuality = binary.LittleEndian.Uint16(data[offset : offset+2])
+               offset += 2
+       }
+       if m.Present.TxAttenuation() {
+               offset += align(offset, 2)
+               m.TxAttenuation = binary.LittleEndian.Uint16(data[offset : offset+2])
+               offset += 2
+       }
+       if m.Present.DBTxAttenuation() {
+               offset += align(offset, 2)
+               m.DBTxAttenuation = binary.LittleEndian.Uint16(data[offset : offset+2])
+               offset += 2
+       }
+       if m.Present.DBMTxPower() {
+               m.DBMTxPower = int8(data[offset])
+               offset++
+       }
+       if m.Present.Antenna() {
+               m.Antenna = uint8(data[offset])
+               offset++
+       }
+       if m.Present.DBAntennaSignal() {
+               m.DBAntennaSignal = uint8(data[offset])
+               offset++
+       }
+       if m.Present.DBAntennaNoise() {
+               m.DBAntennaNoise = uint8(data[offset])
+               offset++
+       }
+       if m.Present.RxFlags() {
+               offset += align(offset, 2)
+               m.RxFlags = RadioTapRxFlags(binary.LittleEndian.Uint16(data[offset:]))
+               offset += 2
+       }
+       if m.Present.TxFlags() {
+               offset += align(offset, 2)
+               m.TxFlags = RadioTapTxFlags(binary.LittleEndian.Uint16(data[offset:]))
+               offset += 2
+       }
+       if m.Present.RtsRetries() {
+               m.RtsRetries = uint8(data[offset])
+               offset++
+       }
+       if m.Present.DataRetries() {
+               m.DataRetries = uint8(data[offset])
+               offset++
+       }
+       if m.Present.MCS() {
+               m.MCS = RadioTapMCS{
+                       RadioTapMCSKnown(data[offset]),
+                       RadioTapMCSFlags(data[offset+1]),
+                       uint8(data[offset+2]),
+               }
+               offset += 3
+       }
+       if m.Present.AMPDUStatus() {
+               offset += align(offset, 4)
+               m.AMPDUStatus = RadioTapAMPDUStatus{
+                       Reference: binary.LittleEndian.Uint32(data[offset:]),
+                       Flags:     RadioTapAMPDUStatusFlags(binary.LittleEndian.Uint16(data[offset+4:])),
+                       CRC:       uint8(data[offset+6]),
+               }
+               offset += 8
+       }
+       if m.Present.VHT() {
+               offset += align(offset, 2)
+               m.VHT = RadioTapVHT{
+                       Known:     RadioTapVHTKnown(binary.LittleEndian.Uint16(data[offset:])),
+                       Flags:     RadioTapVHTFlags(data[offset+2]),
+                       Bandwidth: uint8(data[offset+3]),
+                       MCSNSS: [4]RadioTapVHTMCSNSS{
+                               RadioTapVHTMCSNSS(data[offset+4]),
+                               RadioTapVHTMCSNSS(data[offset+5]),
+                               RadioTapVHTMCSNSS(data[offset+6]),
+                               RadioTapVHTMCSNSS(data[offset+7]),
+                       },
+                       Coding:     uint8(data[offset+8]),
+                       GroupId:    uint8(data[offset+9]),
+                       PartialAID: binary.LittleEndian.Uint16(data[offset+10:]),
+               }
+               offset += 12
+       }
+
+       payload := data[m.Length:]
+       if !m.Flags.FCS() { // Dot11.DecodeFromBytes() expects FCS present
+               fcs := make([]byte, 4)
+               h := crc32.NewIEEE()
+               h.Write(payload)
+               binary.LittleEndian.PutUint32(fcs, h.Sum32())
+               payload = append(payload, fcs...)
+       }
+       m.BaseLayer = BaseLayer{Contents: data[:m.Length], Payload: payload}
+
+       return nil
+}
+
+func (m RadioTap) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       buf := make([]byte, 1024)
+
+       buf[0] = m.Version
+       buf[1] = 0
+
+       binary.LittleEndian.PutUint32(buf[4:8], uint32(m.Present))
+
+       offset := uint16(4)
+
+       for (binary.LittleEndian.Uint32(buf[offset:offset+4]) & 0x80000000) != 0 {
+               offset += 4
+       }
+
+       offset += 4
+
+       if m.Present.TSFT() {
+               offset += align(offset, 8)
+               binary.LittleEndian.PutUint64(buf[offset:offset+8], m.TSFT)
+               offset += 8
+       }
+
+       if m.Present.Flags() {
+               buf[offset] = uint8(m.Flags)
+               offset++
+       }
+
+       if m.Present.Rate() {
+               buf[offset] = uint8(m.Rate)
+               offset++
+       }
+
+       if m.Present.Channel() {
+               offset += align(offset, 2)
+               binary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.ChannelFrequency))
+               offset += 2
+               binary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.ChannelFlags))
+               offset += 2
+       }
+
+       if m.Present.FHSS() {
+               binary.LittleEndian.PutUint16(buf[offset:offset+2], m.FHSS)
+               offset += 2
+       }
+
+       if m.Present.DBMAntennaSignal() {
+               buf[offset] = byte(m.DBMAntennaSignal)
+               offset++
+       }
+
+       if m.Present.DBMAntennaNoise() {
+               buf[offset] = byte(m.DBMAntennaNoise)
+               offset++
+       }
+
+       if m.Present.LockQuality() {
+               offset += align(offset, 2)
+               binary.LittleEndian.PutUint16(buf[offset:offset+2], m.LockQuality)
+               offset += 2
+       }
+
+       if m.Present.TxAttenuation() {
+               offset += align(offset, 2)
+               binary.LittleEndian.PutUint16(buf[offset:offset+2], m.TxAttenuation)
+               offset += 2
+       }
+
+       if m.Present.DBTxAttenuation() {
+               offset += align(offset, 2)
+               binary.LittleEndian.PutUint16(buf[offset:offset+2], m.DBTxAttenuation)
+               offset += 2
+       }
+
+       if m.Present.DBMTxPower() {
+               buf[offset] = byte(m.DBMTxPower)
+               offset++
+       }
+
+       if m.Present.Antenna() {
+               buf[offset] = uint8(m.Antenna)
+               offset++
+       }
+
+       if m.Present.DBAntennaSignal() {
+               buf[offset] = uint8(m.DBAntennaSignal)
+               offset++
+       }
+
+       if m.Present.DBAntennaNoise() {
+               buf[offset] = uint8(m.DBAntennaNoise)
+               offset++
+       }
+
+       if m.Present.RxFlags() {
+               offset += align(offset, 2)
+               binary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.RxFlags))
+               offset += 2
+       }
+
+       if m.Present.TxFlags() {
+               offset += align(offset, 2)
+               binary.LittleEndian.PutUint16(buf[offset:offset+2], uint16(m.TxFlags))
+               offset += 2
+       }
+
+       if m.Present.RtsRetries() {
+               buf[offset] = m.RtsRetries
+               offset++
+       }
+
+       if m.Present.DataRetries() {
+               buf[offset] = m.DataRetries
+               offset++
+       }
+
+       if m.Present.MCS() {
+               buf[offset] = uint8(m.MCS.Known)
+               buf[offset+1] = uint8(m.MCS.Flags)
+               buf[offset+2] = uint8(m.MCS.MCS)
+
+               offset += 3
+       }
+
+       if m.Present.AMPDUStatus() {
+               offset += align(offset, 4)
+
+               binary.LittleEndian.PutUint32(buf[offset:offset+4], m.AMPDUStatus.Reference)
+               binary.LittleEndian.PutUint16(buf[offset+4:offset+6], uint16(m.AMPDUStatus.Flags))
+
+               buf[offset+6] = m.AMPDUStatus.CRC
+
+               offset += 8
+       }
+
+       if m.Present.VHT() {
+               offset += align(offset, 2)
+
+               binary.LittleEndian.PutUint16(buf[offset:], uint16(m.VHT.Known))
+
+               buf[offset+2] = uint8(m.VHT.Flags)
+               buf[offset+3] = uint8(m.VHT.Bandwidth)
+               buf[offset+4] = uint8(m.VHT.MCSNSS[0])
+               buf[offset+5] = uint8(m.VHT.MCSNSS[1])
+               buf[offset+6] = uint8(m.VHT.MCSNSS[2])
+               buf[offset+7] = uint8(m.VHT.MCSNSS[3])
+               buf[offset+8] = uint8(m.VHT.Coding)
+               buf[offset+9] = uint8(m.VHT.GroupId)
+
+               binary.LittleEndian.PutUint16(buf[offset+10:offset+12], m.VHT.PartialAID)
+
+               offset += 12
+       }
+
+       packetBuf, err := b.PrependBytes(int(offset))
+
+       if err != nil {
+               return err
+       }
+
+       if opts.FixLengths {
+               m.Length = offset
+       }
+
+       binary.LittleEndian.PutUint16(buf[2:4], m.Length)
+
+       copy(packetBuf, buf)
+
+       return nil
+}
+
+func (m *RadioTap) CanDecode() gopacket.LayerClass    { return LayerTypeRadioTap }
+func (m *RadioTap) NextLayerType() gopacket.LayerType { return LayerTypeDot11 }
diff --git a/vendor/github.com/google/gopacket/layers/radiotap_test.go b/vendor/github.com/google/gopacket/layers/radiotap_test.go
new file mode 100644 (file)
index 0000000..4d3c7d0
--- /dev/null
@@ -0,0 +1,79 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "testing"
+)
+
+// testPacketRadiotap0 is the packet:
+//   09:34:34.799438 1.0 Mb/s 2412 MHz 11b -58dB signal antenna 7 Acknowledgment RA:88:1f:a1:ae:9d:cb
+//      0x0000:  0000 1200 2e48 0000 1002 6c09 a000 c607  .....H....l.....
+//      0x0010:  0000 d400 0000 881f a1ae 9dcb c630 4b4b  .............0KK
+var testPacketRadiotap0 = []byte{
+       0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xc6, 0x07,
+       0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x88, 0x1f, 0xa1, 0xae, 0x9d, 0xcb, 0xc6, 0x30, 0x4b, 0x4b,
+}
+
+func TestPacketRadiotap0(t *testing.T) {
+       p := gopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
+       rt := p.Layer(LayerTypeRadioTap).(*RadioTap)
+       if rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -58 || rt.Antenna != 7 {
+               t.Error("Radiotap decode error")
+       }
+       if rt.Rate != 2 { // 500Kbps unit
+               t.Error("Radiotap Rate decode error")
+       }
+}
+func BenchmarkDecodePacketRadiotap0(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.NoCopy)
+       }
+}
+
+// testPacketRadiotap1 is the packet:
+//   05:24:21.380948 2412 MHz 11g -36dB signal antenna 5 65.0 Mb/s MCS 7 20 MHz lon GI
+//     0x0000:  0000 1500 2a48 0800 1000 6c09 8004 dc05  ....*H....l.....
+//     0x0010:  0000 0700 0748 112c 0000 3a9d aaf0 191c  .....H.,..:.....
+//     0x0020:  aba7 f213 9d00 3a9d aaf0 1970 b2ee a9f1  ......:....p....
+//     0x0030:  16                                       .
+var testPacketRadiotap1 = []byte{
+       0x00, 0x00, 0x15, 0x00, 0x2a, 0x48, 0x08, 0x00, 0x10, 0x00, 0x6c, 0x09, 0x80, 0x04, 0xdc, 0x05,
+       0x00, 0x00, 0x07, 0x00, 0x07, 0x48, 0x11, 0x2c, 0x00, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x1c,
+       0xab, 0xa7, 0xf2, 0x13, 0x9d, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x70, 0xb2, 0xee, 0xa9, 0xf1,
+       0x16,
+}
+
+func TestPacketRadiotap1(t *testing.T) {
+       p := gopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t)
+       rt := p.Layer(LayerTypeRadioTap).(*RadioTap)
+       if rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -36 || rt.Antenna != 5 {
+               t.Error("Radiotap decode error")
+       }
+       if !rt.MCS.Known.MCSIndex() || rt.MCS.MCS != 7 {
+               t.Error("Radiotap MCS error")
+       }
+       if !rt.MCS.Known.Bandwidth() || rt.MCS.Flags.Bandwidth() != 0 {
+               t.Error("Radiotap bandwidth error")
+       }
+       if !rt.MCS.Known.GuardInterval() || rt.MCS.Flags.ShortGI() {
+               t.Error("Radiotap GI error")
+       }
+}
+func BenchmarkDecodePacketRadiotap1(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.NoCopy)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/rudp.go b/vendor/github.com/google/gopacket/layers/rudp.go
new file mode 100644 (file)
index 0000000..8435129
--- /dev/null
@@ -0,0 +1,93 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "fmt"
+       "github.com/google/gopacket"
+)
+
+type RUDP struct {
+       BaseLayer
+       SYN, ACK, EACK, RST, NUL bool
+       Version                  uint8
+       HeaderLength             uint8
+       SrcPort, DstPort         RUDPPort
+       DataLength               uint16
+       Seq, Ack, Checksum       uint32
+       VariableHeaderArea       []byte
+       // RUDPHeaderSyn contains SYN information for the RUDP packet,
+       // if the SYN flag is set
+       *RUDPHeaderSYN
+       // RUDPHeaderEack contains EACK information for the RUDP packet,
+       // if the EACK flag is set.
+       *RUDPHeaderEACK
+}
+
+type RUDPHeaderSYN struct {
+       MaxOutstandingSegments, MaxSegmentSize, OptionFlags uint16
+}
+
+type RUDPHeaderEACK struct {
+       SeqsReceivedOK []uint32
+}
+
+// LayerType returns gopacket.LayerTypeRUDP.
+func (r *RUDP) LayerType() gopacket.LayerType { return LayerTypeRUDP }
+
+func decodeRUDP(data []byte, p gopacket.PacketBuilder) error {
+       r := &RUDP{
+               SYN:          data[0]&0x80 != 0,
+               ACK:          data[0]&0x40 != 0,
+               EACK:         data[0]&0x20 != 0,
+               RST:          data[0]&0x10 != 0,
+               NUL:          data[0]&0x08 != 0,
+               Version:      data[0] & 0x3,
+               HeaderLength: data[1],
+               SrcPort:      RUDPPort(data[2]),
+               DstPort:      RUDPPort(data[3]),
+               DataLength:   binary.BigEndian.Uint16(data[4:6]),
+               Seq:          binary.BigEndian.Uint32(data[6:10]),
+               Ack:          binary.BigEndian.Uint32(data[10:14]),
+               Checksum:     binary.BigEndian.Uint32(data[14:18]),
+       }
+       if r.HeaderLength < 9 {
+               return fmt.Errorf("RUDP packet with too-short header length %d", r.HeaderLength)
+       }
+       hlen := int(r.HeaderLength) * 2
+       r.Contents = data[:hlen]
+       r.Payload = data[hlen : hlen+int(r.DataLength)]
+       r.VariableHeaderArea = data[18:hlen]
+       headerData := r.VariableHeaderArea
+       switch {
+       case r.SYN:
+               if len(headerData) != 6 {
+                       return fmt.Errorf("RUDP packet invalid SYN header length: %d", len(headerData))
+               }
+               r.RUDPHeaderSYN = &RUDPHeaderSYN{
+                       MaxOutstandingSegments: binary.BigEndian.Uint16(headerData[:2]),
+                       MaxSegmentSize:         binary.BigEndian.Uint16(headerData[2:4]),
+                       OptionFlags:            binary.BigEndian.Uint16(headerData[4:6]),
+               }
+       case r.EACK:
+               if len(headerData)%4 != 0 {
+                       return fmt.Errorf("RUDP packet invalid EACK header length: %d", len(headerData))
+               }
+               r.RUDPHeaderEACK = &RUDPHeaderEACK{make([]uint32, len(headerData)/4)}
+               for i := 0; i < len(headerData); i += 4 {
+                       r.SeqsReceivedOK[i/4] = binary.BigEndian.Uint32(headerData[i : i+4])
+               }
+       }
+       p.AddLayer(r)
+       p.SetTransportLayer(r)
+       return p.NextDecoder(gopacket.LayerTypePayload)
+}
+
+func (r *RUDP) TransportFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointRUDPPort, []byte{byte(r.SrcPort)}, []byte{byte(r.DstPort)})
+}
diff --git a/vendor/github.com/google/gopacket/layers/sctp.go b/vendor/github.com/google/gopacket/layers/sctp.go
new file mode 100644 (file)
index 0000000..511176e
--- /dev/null
@@ -0,0 +1,746 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "hash/crc32"
+
+       "github.com/google/gopacket"
+)
+
+// SCTP contains information on the top level of an SCTP packet.
+type SCTP struct {
+       BaseLayer
+       SrcPort, DstPort SCTPPort
+       VerificationTag  uint32
+       Checksum         uint32
+       sPort, dPort     []byte
+}
+
+// LayerType returns gopacket.LayerTypeSCTP
+func (s *SCTP) LayerType() gopacket.LayerType { return LayerTypeSCTP }
+
+func decodeSCTP(data []byte, p gopacket.PacketBuilder) error {
+       sctp := &SCTP{}
+       err := sctp.DecodeFromBytes(data, p)
+       p.AddLayer(sctp)
+       p.SetTransportLayer(sctp)
+       if err != nil {
+               return err
+       }
+       return p.NextDecoder(sctpChunkTypePrefixDecoder)
+}
+
+var sctpChunkTypePrefixDecoder = gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix)
+
+// TransportFlow returns a flow based on the source and destination SCTP port.
+func (s *SCTP) TransportFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointSCTPPort, s.sPort, s.dPort)
+}
+
+func decodeWithSCTPChunkTypePrefix(data []byte, p gopacket.PacketBuilder) error {
+       chunkType := SCTPChunkType(data[0])
+       return chunkType.Decode(data, p)
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (s SCTP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(12)
+       if err != nil {
+               return err
+       }
+       binary.BigEndian.PutUint16(bytes[0:2], uint16(s.SrcPort))
+       binary.BigEndian.PutUint16(bytes[2:4], uint16(s.DstPort))
+       binary.BigEndian.PutUint32(bytes[4:8], s.VerificationTag)
+       if opts.ComputeChecksums {
+               // Note:  MakeTable(Castagnoli) actually only creates the table once, then
+               // passes back a singleton on every other call, so this shouldn't cause
+               // excessive memory allocation.
+               binary.LittleEndian.PutUint32(bytes[8:12], crc32.Checksum(b.Bytes(), crc32.MakeTable(crc32.Castagnoli)))
+       }
+       return nil
+}
+
+func (sctp *SCTP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       if len(data) < 12 {
+               return errors.New("Invalid SCTP common header length")
+       }
+       sctp.SrcPort = SCTPPort(binary.BigEndian.Uint16(data[:2]))
+       sctp.sPort = data[:2]
+       sctp.DstPort = SCTPPort(binary.BigEndian.Uint16(data[2:4]))
+       sctp.dPort = data[2:4]
+       sctp.VerificationTag = binary.BigEndian.Uint32(data[4:8])
+       sctp.Checksum = binary.BigEndian.Uint32(data[8:12])
+       sctp.BaseLayer = BaseLayer{data[:12], data[12:]}
+
+       return nil
+}
+
+func (t *SCTP) CanDecode() gopacket.LayerClass {
+       return LayerTypeSCTP
+}
+
+func (t *SCTP) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+// SCTPChunk contains the common fields in all SCTP chunks.
+type SCTPChunk struct {
+       BaseLayer
+       Type   SCTPChunkType
+       Flags  uint8
+       Length uint16
+       // ActualLength is the total length of an SCTP chunk, including padding.
+       // SCTP chunks start and end on 4-byte boundaries.  So if a chunk has a length
+       // of 18, it means that it has data up to and including byte 18, then padding
+       // up to the next 4-byte boundary, 20.  In this case, Length would be 18, and
+       // ActualLength would be 20.
+       ActualLength int
+}
+
+func roundUpToNearest4(i int) int {
+       if i%4 == 0 {
+               return i
+       }
+       return i + 4 - (i % 4)
+}
+
+func decodeSCTPChunk(data []byte) (SCTPChunk, error) {
+       length := binary.BigEndian.Uint16(data[2:4])
+       if length < 4 {
+               return SCTPChunk{}, errors.New("invalid SCTP chunk length")
+       }
+       actual := roundUpToNearest4(int(length))
+       ct := SCTPChunkType(data[0])
+
+       // For SCTP Data, use a separate layer for the payload
+       delta := 0
+       if ct == SCTPChunkTypeData {
+               delta = int(actual) - int(length)
+               actual = 16
+       }
+
+       return SCTPChunk{
+               Type:         ct,
+               Flags:        data[1],
+               Length:       length,
+               ActualLength: actual,
+               BaseLayer:    BaseLayer{data[:actual], data[actual : len(data)-delta]},
+       }, nil
+}
+
+// SCTPParameter is a TLV parameter inside a SCTPChunk.
+type SCTPParameter struct {
+       Type         uint16
+       Length       uint16
+       ActualLength int
+       Value        []byte
+}
+
+func decodeSCTPParameter(data []byte) SCTPParameter {
+       length := binary.BigEndian.Uint16(data[2:4])
+       return SCTPParameter{
+               Type:         binary.BigEndian.Uint16(data[0:2]),
+               Length:       length,
+               Value:        data[4:length],
+               ActualLength: roundUpToNearest4(int(length)),
+       }
+}
+
+func (p SCTPParameter) Bytes() []byte {
+       length := 4 + len(p.Value)
+       data := make([]byte, roundUpToNearest4(length))
+       binary.BigEndian.PutUint16(data[0:2], p.Type)
+       binary.BigEndian.PutUint16(data[2:4], uint16(length))
+       copy(data[4:], p.Value)
+       return data
+}
+
+// SCTPUnknownChunkType is the layer type returned when we don't recognize the
+// chunk type.  Since there's a length in a known location, we can skip over
+// it even if we don't know what it is, and continue parsing the rest of the
+// chunks.  This chunk is stored as an ErrorLayer in the packet.
+type SCTPUnknownChunkType struct {
+       SCTPChunk
+       bytes []byte
+}
+
+func decodeSCTPChunkTypeUnknown(data []byte, p gopacket.PacketBuilder) error {
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPUnknownChunkType{SCTPChunk: chunk}
+       sc.bytes = data[:sc.ActualLength]
+       p.AddLayer(sc)
+       p.SetErrorLayer(sc)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (s SCTPUnknownChunkType) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(s.ActualLength)
+       if err != nil {
+               return err
+       }
+       copy(bytes, s.bytes)
+       return nil
+}
+
+// LayerType returns gopacket.LayerTypeSCTPUnknownChunkType.
+func (s *SCTPUnknownChunkType) LayerType() gopacket.LayerType { return LayerTypeSCTPUnknownChunkType }
+
+// Payload returns all bytes in this header, including the decoded Type, Length,
+// and Flags.
+func (s *SCTPUnknownChunkType) Payload() []byte { return s.bytes }
+
+// Error implements ErrorLayer.
+func (s *SCTPUnknownChunkType) Error() error {
+       return fmt.Errorf("No decode method available for SCTP chunk type %s", s.Type)
+}
+
+// SCTPData is the SCTP Data chunk layer.
+type SCTPData struct {
+       SCTPChunk
+       Unordered, BeginFragment, EndFragment bool
+       TSN                                   uint32
+       StreamId                              uint16
+       StreamSequence                        uint16
+       PayloadProtocol                       SCTPPayloadProtocol
+}
+
+// LayerType returns gopacket.LayerTypeSCTPData.
+func (s *SCTPData) LayerType() gopacket.LayerType { return LayerTypeSCTPData }
+
+// SCTPPayloadProtocol represents a payload protocol
+type SCTPPayloadProtocol uint32
+
+// SCTPPayloadProtocol constonts from http://www.iana.org/assignments/sctp-parameters/sctp-parameters.xhtml
+const (
+       SCTPProtocolReserved  SCTPPayloadProtocol = 0
+       SCTPPayloadUIA                            = 1
+       SCTPPayloadM2UA                           = 2
+       SCTPPayloadM3UA                           = 3
+       SCTPPayloadSUA                            = 4
+       SCTPPayloadM2PA                           = 5
+       SCTPPayloadV5UA                           = 6
+       SCTPPayloadH248                           = 7
+       SCTPPayloadBICC                           = 8
+       SCTPPayloadTALI                           = 9
+       SCTPPayloadDUA                            = 10
+       SCTPPayloadASAP                           = 11
+       SCTPPayloadENRP                           = 12
+       SCTPPayloadH323                           = 13
+       SCTPPayloadQIPC                           = 14
+       SCTPPayloadSIMCO                          = 15
+       SCTPPayloadDDPSegment                     = 16
+       SCTPPayloadDDPStream                      = 17
+       SCTPPayloadS1AP                           = 18
+)
+
+func (p SCTPPayloadProtocol) String() string {
+       switch p {
+       case SCTPProtocolReserved:
+               return "Reserved"
+       case SCTPPayloadUIA:
+               return "UIA"
+       case SCTPPayloadM2UA:
+               return "M2UA"
+       case SCTPPayloadM3UA:
+               return "M3UA"
+       case SCTPPayloadSUA:
+               return "SUA"
+       case SCTPPayloadM2PA:
+               return "M2PA"
+       case SCTPPayloadV5UA:
+               return "V5UA"
+       case SCTPPayloadH248:
+               return "H.248"
+       case SCTPPayloadBICC:
+               return "BICC"
+       case SCTPPayloadTALI:
+               return "TALI"
+       case SCTPPayloadDUA:
+               return "DUA"
+       case SCTPPayloadASAP:
+               return "ASAP"
+       case SCTPPayloadENRP:
+               return "ENRP"
+       case SCTPPayloadH323:
+               return "H.323"
+       case SCTPPayloadQIPC:
+               return "QIPC"
+       case SCTPPayloadSIMCO:
+               return "SIMCO"
+       case SCTPPayloadDDPSegment:
+               return "DDPSegment"
+       case SCTPPayloadDDPStream:
+               return "DDPStream"
+       case SCTPPayloadS1AP:
+               return "S1AP"
+       }
+       return fmt.Sprintf("Unknown(%d)", p)
+}
+
+func decodeSCTPData(data []byte, p gopacket.PacketBuilder) error {
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPData{
+               SCTPChunk:       chunk,
+               Unordered:       data[1]&0x4 != 0,
+               BeginFragment:   data[1]&0x2 != 0,
+               EndFragment:     data[1]&0x1 != 0,
+               TSN:             binary.BigEndian.Uint32(data[4:8]),
+               StreamId:        binary.BigEndian.Uint16(data[8:10]),
+               StreamSequence:  binary.BigEndian.Uint16(data[10:12]),
+               PayloadProtocol: SCTPPayloadProtocol(binary.BigEndian.Uint32(data[12:16])),
+       }
+       // Length is the length in bytes of the data, INCLUDING the 16-byte header.
+       p.AddLayer(sc)
+       return p.NextDecoder(gopacket.LayerTypePayload)
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPData) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       payload := b.Bytes()
+       // Pad the payload to a 32 bit boundary
+       if rem := len(payload) % 4; rem != 0 {
+               b.AppendBytes(4 - rem)
+       }
+       length := 16
+       bytes, err := b.PrependBytes(length)
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(sc.Type)
+       flags := uint8(0)
+       if sc.Unordered {
+               flags |= 0x4
+       }
+       if sc.BeginFragment {
+               flags |= 0x2
+       }
+       if sc.EndFragment {
+               flags |= 0x1
+       }
+       bytes[1] = flags
+       binary.BigEndian.PutUint16(bytes[2:4], uint16(length+len(payload)))
+       binary.BigEndian.PutUint32(bytes[4:8], sc.TSN)
+       binary.BigEndian.PutUint16(bytes[8:10], sc.StreamId)
+       binary.BigEndian.PutUint16(bytes[10:12], sc.StreamSequence)
+       binary.BigEndian.PutUint32(bytes[12:16], uint32(sc.PayloadProtocol))
+       return nil
+}
+
+// SCTPInitParameter is a parameter for an SCTP Init or InitAck packet.
+type SCTPInitParameter SCTPParameter
+
+// SCTPInit is used as the return value for both SCTPInit and SCTPInitAck
+// messages.
+type SCTPInit struct {
+       SCTPChunk
+       InitiateTag                     uint32
+       AdvertisedReceiverWindowCredit  uint32
+       OutboundStreams, InboundStreams uint16
+       InitialTSN                      uint32
+       Parameters                      []SCTPInitParameter
+}
+
+// LayerType returns either gopacket.LayerTypeSCTPInit or gopacket.LayerTypeSCTPInitAck.
+func (sc *SCTPInit) LayerType() gopacket.LayerType {
+       if sc.Type == SCTPChunkTypeInitAck {
+               return LayerTypeSCTPInitAck
+       }
+       // sc.Type == SCTPChunkTypeInit
+       return LayerTypeSCTPInit
+}
+
+func decodeSCTPInit(data []byte, p gopacket.PacketBuilder) error {
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPInit{
+               SCTPChunk:                      chunk,
+               InitiateTag:                    binary.BigEndian.Uint32(data[4:8]),
+               AdvertisedReceiverWindowCredit: binary.BigEndian.Uint32(data[8:12]),
+               OutboundStreams:                binary.BigEndian.Uint16(data[12:14]),
+               InboundStreams:                 binary.BigEndian.Uint16(data[14:16]),
+               InitialTSN:                     binary.BigEndian.Uint32(data[16:20]),
+       }
+       paramData := data[20:sc.ActualLength]
+       for len(paramData) > 0 {
+               p := SCTPInitParameter(decodeSCTPParameter(paramData))
+               paramData = paramData[p.ActualLength:]
+               sc.Parameters = append(sc.Parameters, p)
+       }
+       p.AddLayer(sc)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPInit) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       var payload []byte
+       for _, param := range sc.Parameters {
+               payload = append(payload, SCTPParameter(param).Bytes()...)
+       }
+       length := 20 + len(payload)
+       bytes, err := b.PrependBytes(roundUpToNearest4(length))
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(sc.Type)
+       bytes[1] = sc.Flags
+       binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+       binary.BigEndian.PutUint32(bytes[4:8], sc.InitiateTag)
+       binary.BigEndian.PutUint32(bytes[8:12], sc.AdvertisedReceiverWindowCredit)
+       binary.BigEndian.PutUint16(bytes[12:14], sc.OutboundStreams)
+       binary.BigEndian.PutUint16(bytes[14:16], sc.InboundStreams)
+       binary.BigEndian.PutUint32(bytes[16:20], sc.InitialTSN)
+       copy(bytes[20:], payload)
+       return nil
+}
+
+// SCTPSack is the SCTP Selective ACK chunk layer.
+type SCTPSack struct {
+       SCTPChunk
+       CumulativeTSNAck               uint32
+       AdvertisedReceiverWindowCredit uint32
+       NumGapACKs, NumDuplicateTSNs   uint16
+       GapACKs                        []uint16
+       DuplicateTSNs                  []uint32
+}
+
+// LayerType return LayerTypeSCTPSack
+func (sc *SCTPSack) LayerType() gopacket.LayerType {
+       return LayerTypeSCTPSack
+}
+
+func decodeSCTPSack(data []byte, p gopacket.PacketBuilder) error {
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPSack{
+               SCTPChunk:                      chunk,
+               CumulativeTSNAck:               binary.BigEndian.Uint32(data[4:8]),
+               AdvertisedReceiverWindowCredit: binary.BigEndian.Uint32(data[8:12]),
+               NumGapACKs:                     binary.BigEndian.Uint16(data[12:14]),
+               NumDuplicateTSNs:               binary.BigEndian.Uint16(data[14:16]),
+       }
+       // We maximize gapAcks and dupTSNs here so we're not allocating tons
+       // of memory based on a user-controlable field.  Our maximums are not exact,
+       // but should give us sane defaults... we'll still hit slice boundaries and
+       // fail if the user-supplied values are too high (in the for loops below), but
+       // the amount of memory we'll have allocated because of that should be small
+       // (< sc.ActualLength)
+       gapAcks := sc.SCTPChunk.ActualLength / 2
+       dupTSNs := (sc.SCTPChunk.ActualLength - gapAcks*2) / 4
+       if gapAcks > int(sc.NumGapACKs) {
+               gapAcks = int(sc.NumGapACKs)
+       }
+       if dupTSNs > int(sc.NumDuplicateTSNs) {
+               dupTSNs = int(sc.NumDuplicateTSNs)
+       }
+       sc.GapACKs = make([]uint16, 0, gapAcks)
+       sc.DuplicateTSNs = make([]uint32, 0, dupTSNs)
+       bytesRemaining := data[16:]
+       for i := 0; i < int(sc.NumGapACKs); i++ {
+               sc.GapACKs = append(sc.GapACKs, binary.BigEndian.Uint16(bytesRemaining[:2]))
+               bytesRemaining = bytesRemaining[2:]
+       }
+       for i := 0; i < int(sc.NumDuplicateTSNs); i++ {
+               sc.DuplicateTSNs = append(sc.DuplicateTSNs, binary.BigEndian.Uint32(bytesRemaining[:4]))
+               bytesRemaining = bytesRemaining[4:]
+       }
+       p.AddLayer(sc)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPSack) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       length := 16 + 2*len(sc.GapACKs) + 4*len(sc.DuplicateTSNs)
+       bytes, err := b.PrependBytes(roundUpToNearest4(length))
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(sc.Type)
+       bytes[1] = sc.Flags
+       binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+       binary.BigEndian.PutUint32(bytes[4:8], sc.CumulativeTSNAck)
+       binary.BigEndian.PutUint32(bytes[8:12], sc.AdvertisedReceiverWindowCredit)
+       binary.BigEndian.PutUint16(bytes[12:14], uint16(len(sc.GapACKs)))
+       binary.BigEndian.PutUint16(bytes[14:16], uint16(len(sc.DuplicateTSNs)))
+       for i, v := range sc.GapACKs {
+               binary.BigEndian.PutUint16(bytes[16+i*2:], v)
+       }
+       offset := 16 + 2*len(sc.GapACKs)
+       for i, v := range sc.DuplicateTSNs {
+               binary.BigEndian.PutUint32(bytes[offset+i*4:], v)
+       }
+       return nil
+}
+
+// SCTPHeartbeatParameter is the parameter type used by SCTP heartbeat and
+// heartbeat ack layers.
+type SCTPHeartbeatParameter SCTPParameter
+
+// SCTPHeartbeat is the SCTP heartbeat layer, also used for heatbeat ack.
+type SCTPHeartbeat struct {
+       SCTPChunk
+       Parameters []SCTPHeartbeatParameter
+}
+
+// LayerType returns gopacket.LayerTypeSCTPHeartbeat.
+func (sc *SCTPHeartbeat) LayerType() gopacket.LayerType {
+       if sc.Type == SCTPChunkTypeHeartbeatAck {
+               return LayerTypeSCTPHeartbeatAck
+       }
+       // sc.Type == SCTPChunkTypeHeartbeat
+       return LayerTypeSCTPHeartbeat
+}
+
+func decodeSCTPHeartbeat(data []byte, p gopacket.PacketBuilder) error {
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPHeartbeat{
+               SCTPChunk: chunk,
+       }
+       paramData := data[4:sc.Length]
+       for len(paramData) > 0 {
+               p := SCTPHeartbeatParameter(decodeSCTPParameter(paramData))
+               paramData = paramData[p.ActualLength:]
+               sc.Parameters = append(sc.Parameters, p)
+       }
+       p.AddLayer(sc)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPHeartbeat) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       var payload []byte
+       for _, param := range sc.Parameters {
+               payload = append(payload, SCTPParameter(param).Bytes()...)
+       }
+       length := 4 + len(payload)
+
+       bytes, err := b.PrependBytes(roundUpToNearest4(length))
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(sc.Type)
+       bytes[1] = sc.Flags
+       binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+       copy(bytes[4:], payload)
+       return nil
+}
+
+// SCTPErrorParameter is the parameter type used by SCTP Abort and Error layers.
+type SCTPErrorParameter SCTPParameter
+
+// SCTPError is the SCTP error layer, also used for SCTP aborts.
+type SCTPError struct {
+       SCTPChunk
+       Parameters []SCTPErrorParameter
+}
+
+// LayerType returns LayerTypeSCTPAbort or LayerTypeSCTPError.
+func (sc *SCTPError) LayerType() gopacket.LayerType {
+       if sc.Type == SCTPChunkTypeAbort {
+               return LayerTypeSCTPAbort
+       }
+       // sc.Type == SCTPChunkTypeError
+       return LayerTypeSCTPError
+}
+
+func decodeSCTPError(data []byte, p gopacket.PacketBuilder) error {
+       // remarkably similar to decodeSCTPHeartbeat ;)
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPError{
+               SCTPChunk: chunk,
+       }
+       paramData := data[4:sc.Length]
+       for len(paramData) > 0 {
+               p := SCTPErrorParameter(decodeSCTPParameter(paramData))
+               paramData = paramData[p.ActualLength:]
+               sc.Parameters = append(sc.Parameters, p)
+       }
+       p.AddLayer(sc)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPError) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       var payload []byte
+       for _, param := range sc.Parameters {
+               payload = append(payload, SCTPParameter(param).Bytes()...)
+       }
+       length := 4 + len(payload)
+
+       bytes, err := b.PrependBytes(roundUpToNearest4(length))
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(sc.Type)
+       bytes[1] = sc.Flags
+       binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+       copy(bytes[4:], payload)
+       return nil
+}
+
+// SCTPShutdown is the SCTP shutdown layer.
+type SCTPShutdown struct {
+       SCTPChunk
+       CumulativeTSNAck uint32
+}
+
+// LayerType returns gopacket.LayerTypeSCTPShutdown.
+func (sc *SCTPShutdown) LayerType() gopacket.LayerType { return LayerTypeSCTPShutdown }
+
+func decodeSCTPShutdown(data []byte, p gopacket.PacketBuilder) error {
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPShutdown{
+               SCTPChunk:        chunk,
+               CumulativeTSNAck: binary.BigEndian.Uint32(data[4:8]),
+       }
+       p.AddLayer(sc)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPShutdown) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(8)
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(sc.Type)
+       bytes[1] = sc.Flags
+       binary.BigEndian.PutUint16(bytes[2:4], 8)
+       binary.BigEndian.PutUint32(bytes[4:8], sc.CumulativeTSNAck)
+       return nil
+}
+
+// SCTPShutdownAck is the SCTP shutdown layer.
+type SCTPShutdownAck struct {
+       SCTPChunk
+}
+
+// LayerType returns gopacket.LayerTypeSCTPShutdownAck.
+func (sc *SCTPShutdownAck) LayerType() gopacket.LayerType { return LayerTypeSCTPShutdownAck }
+
+func decodeSCTPShutdownAck(data []byte, p gopacket.PacketBuilder) error {
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPShutdownAck{
+               SCTPChunk: chunk,
+       }
+       p.AddLayer(sc)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPShutdownAck) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(4)
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(sc.Type)
+       bytes[1] = sc.Flags
+       binary.BigEndian.PutUint16(bytes[2:4], 4)
+       return nil
+}
+
+// SCTPCookieEcho is the SCTP Cookie Echo layer.
+type SCTPCookieEcho struct {
+       SCTPChunk
+       Cookie []byte
+}
+
+// LayerType returns gopacket.LayerTypeSCTPCookieEcho.
+func (sc *SCTPCookieEcho) LayerType() gopacket.LayerType { return LayerTypeSCTPCookieEcho }
+
+func decodeSCTPCookieEcho(data []byte, p gopacket.PacketBuilder) error {
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPCookieEcho{
+               SCTPChunk: chunk,
+       }
+       sc.Cookie = data[4:sc.Length]
+       p.AddLayer(sc)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPCookieEcho) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       length := 4 + len(sc.Cookie)
+       bytes, err := b.PrependBytes(roundUpToNearest4(length))
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(sc.Type)
+       bytes[1] = sc.Flags
+       binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+       copy(bytes[4:], sc.Cookie)
+       return nil
+}
+
+// This struct is used by all empty SCTP chunks (currently CookieAck and
+// ShutdownComplete).
+type SCTPEmptyLayer struct {
+       SCTPChunk
+}
+
+// LayerType returns either gopacket.LayerTypeSCTPShutdownComplete or
+// LayerTypeSCTPCookieAck.
+func (sc *SCTPEmptyLayer) LayerType() gopacket.LayerType {
+       if sc.Type == SCTPChunkTypeShutdownComplete {
+               return LayerTypeSCTPShutdownComplete
+       }
+       // sc.Type == SCTPChunkTypeCookieAck
+       return LayerTypeSCTPCookieAck
+}
+
+func decodeSCTPEmptyLayer(data []byte, p gopacket.PacketBuilder) error {
+       chunk, err := decodeSCTPChunk(data)
+       if err != nil {
+               return err
+       }
+       sc := &SCTPEmptyLayer{
+               SCTPChunk: chunk,
+       }
+       p.AddLayer(sc)
+       return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+}
+
+// SerializeTo is for gopacket.SerializableLayer.
+func (sc SCTPEmptyLayer) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(4)
+       if err != nil {
+               return err
+       }
+       bytes[0] = uint8(sc.Type)
+       bytes[1] = sc.Flags
+       binary.BigEndian.PutUint16(bytes[2:4], 4)
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/sflow.go b/vendor/github.com/google/gopacket/layers/sflow.go
new file mode 100644 (file)
index 0000000..55ce31e
--- /dev/null
@@ -0,0 +1,2187 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*
+This layer decodes SFlow version 5 datagrams.
+
+The specification can be found here: http://sflow.org/sflow_version_5.txt
+
+Additional developer information about sflow can be found at:
+http://sflow.org/developers/specifications.php
+
+And SFlow in general:
+http://sflow.org/index.php
+
+Two forms of sample data are defined: compact and expanded. The
+Specification has this to say:
+
+    Compact and expand forms of counter and flow samples are defined.
+    An agent must not mix compact/expanded encodings.  If an agent
+    will never use ifIndex numbers >= 2^24 then it must use compact
+    encodings for all interfaces.  Otherwise the expanded formats must
+    be used for all interfaces.
+
+This decoder only supports the compact form, because that is the only
+one for which data was avaialble.
+
+The datagram is composed of one or more samples of type flow or counter,
+and each sample is composed of one or more records describing the sample.
+A sample is a single instance of sampled inforamtion, and each record in
+the sample gives additional / supplimentary information about the sample.
+
+The following sample record types are supported:
+
+       Raw Packet Header
+       opaque = flow_data; enterprise = 0; format = 1
+
+       Extended Switch Data
+       opaque = flow_data; enterprise = 0; format = 1001
+
+       Extended Router Data
+       opaque = flow_data; enterprise = 0; format = 1002
+
+       Extended Gateway Data
+       opaque = flow_data; enterprise = 0; format = 1003
+
+       Extended User Data
+       opaque = flow_data; enterprise = 0; format = 1004
+
+       Extended URL Data
+       opaque = flow_data; enterprise = 0; format = 1005
+
+The following types of counter records are supported:
+
+       Generic Interface Counters - see RFC 2233
+       opaque = counter_data; enterprise = 0; format = 1
+
+       Ethernet Interface Counters - see RFC 2358
+       opaque = counter_data; enterprise = 0; format = 2
+
+SFlow is encoded using XDR (RFC4506). There are a few places
+where the standard 4-byte fields are partitioned into two
+bitfields of different lengths. I'm not sure why the designers
+chose to pack together two values like this in some places, and
+in others they use the entire 4-byte value to store a number that
+will never be more than a few bits. In any case, there are a couple
+of types defined to handle the decoding of these bitfields, and
+that's why they're there. */
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "net"
+
+       "github.com/google/gopacket"
+)
+
+// SFlowRecord holds both flow sample records and counter sample records.
+// A Record is the structure that actually holds the sampled data
+// and / or counters.
+type SFlowRecord interface {
+}
+
+// SFlowDataSource encodes a 2-bit SFlowSourceFormat in its most significant
+// 2 bits, and an SFlowSourceValue in its least significant 30 bits.
+// These types and values define the meaning of the inteface information
+// presented in the sample metadata.
+type SFlowDataSource int32
+
+func (sdc SFlowDataSource) decode() (SFlowSourceFormat, SFlowSourceValue) {
+       leftField := sdc >> 30
+       rightField := uint32(0x3FFFFFFF) & uint32(sdc)
+       return SFlowSourceFormat(leftField), SFlowSourceValue(rightField)
+}
+
+type SFlowDataSourceExpanded struct {
+       SourceIDClass SFlowSourceFormat
+       SourceIDIndex SFlowSourceValue
+}
+
+func (sdce SFlowDataSourceExpanded) decode() (SFlowSourceFormat, SFlowSourceValue) {
+       leftField := sdce.SourceIDClass >> 30
+       rightField := uint32(0x3FFFFFFF) & uint32(sdce.SourceIDIndex)
+       return SFlowSourceFormat(leftField), SFlowSourceValue(rightField)
+}
+
+type SFlowSourceFormat uint32
+
+type SFlowSourceValue uint32
+
+const (
+       SFlowTypeSingleInterface      SFlowSourceFormat = 0
+       SFlowTypePacketDiscarded      SFlowSourceFormat = 1
+       SFlowTypeMultipleDestinations SFlowSourceFormat = 2
+)
+
+func (sdf SFlowSourceFormat) String() string {
+       switch sdf {
+       case SFlowTypeSingleInterface:
+               return "Single Interface"
+       case SFlowTypePacketDiscarded:
+               return "Packet Discarded"
+       case SFlowTypeMultipleDestinations:
+               return "Multiple Destinations"
+       default:
+               return "UNKNOWN"
+       }
+}
+
+func decodeSFlow(data []byte, p gopacket.PacketBuilder) error {
+       s := &SFlowDatagram{}
+       err := s.DecodeFromBytes(data, p)
+       if err != nil {
+               return err
+       }
+       p.AddLayer(s)
+       p.SetApplicationLayer(s)
+       return nil
+}
+
+// SFlowDatagram is the outermost container which holds some basic information
+// about the reporting agent, and holds at least one sample record
+type SFlowDatagram struct {
+       BaseLayer
+
+       DatagramVersion uint32
+       AgentAddress    net.IP
+       SubAgentID      uint32
+       SequenceNumber  uint32
+       AgentUptime     uint32
+       SampleCount     uint32
+       FlowSamples     []SFlowFlowSample
+       CounterSamples  []SFlowCounterSample
+}
+
+// An SFlow  datagram's outer container has the following
+// structure:
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |           int sFlow version (2|4|5)           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |   int IP version of the Agent (1=v4|2=v6)     |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /    Agent IP address (v4=4byte|v6=16byte)      /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               int sub agent id                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |         int datagram sequence number          |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |            int switch uptime in ms            |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |          int n samples in datagram            |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /                  n samples                    /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// SFlowDataFormat encodes the EnterpriseID in the most
+// significant 12 bits, and the SampleType in the least significant
+// 20 bits.
+type SFlowDataFormat uint32
+
+func (sdf SFlowDataFormat) decode() (SFlowEnterpriseID, SFlowSampleType) {
+       leftField := sdf >> 12
+       rightField := uint32(0xFFF) & uint32(sdf)
+       return SFlowEnterpriseID(leftField), SFlowSampleType(rightField)
+}
+
+// SFlowEnterpriseID is used to differentiate between the
+// official SFlow standard, and other, vendor-specific
+// types of flow data. (Similiar to SNMP's enterprise MIB
+// OIDs) Only the office SFlow Enterprise ID is decoded
+// here.
+type SFlowEnterpriseID uint32
+
+const (
+       SFlowStandard SFlowEnterpriseID = 0
+)
+
+func (eid SFlowEnterpriseID) String() string {
+       switch eid {
+       case SFlowStandard:
+               return "Standard SFlow"
+       default:
+               return ""
+       }
+}
+
+func (eid SFlowEnterpriseID) GetType() SFlowEnterpriseID {
+       return SFlowStandard
+}
+
+// SFlowSampleType specifies the type of sample. Only flow samples
+// and counter samples are supported
+type SFlowSampleType uint32
+
+const (
+       SFlowTypeFlowSample            SFlowSampleType = 1
+       SFlowTypeCounterSample         SFlowSampleType = 2
+       SFlowTypeExpandedFlowSample    SFlowSampleType = 3
+       SFlowTypeExpandedCounterSample SFlowSampleType = 4
+)
+
+func (st SFlowSampleType) GetType() SFlowSampleType {
+       switch st {
+       case SFlowTypeFlowSample:
+               return SFlowTypeFlowSample
+       case SFlowTypeCounterSample:
+               return SFlowTypeCounterSample
+       case SFlowTypeExpandedFlowSample:
+               return SFlowTypeExpandedFlowSample
+       case SFlowTypeExpandedCounterSample:
+               return SFlowTypeExpandedCounterSample
+       default:
+               panic("Invalid Sample Type")
+       }
+}
+
+func (st SFlowSampleType) String() string {
+       switch st {
+       case SFlowTypeFlowSample:
+               return "Flow Sample"
+       case SFlowTypeCounterSample:
+               return "Counter Sample"
+       case SFlowTypeExpandedFlowSample:
+               return "Expanded Flow Sample"
+       case SFlowTypeExpandedCounterSample:
+               return "Expanded Counter Sample"
+       default:
+               return ""
+       }
+}
+
+func (s *SFlowDatagram) LayerType() gopacket.LayerType { return LayerTypeSFlow }
+
+func (d *SFlowDatagram) Payload() []byte { return nil }
+
+func (d *SFlowDatagram) CanDecode() gopacket.LayerClass { return LayerTypeSFlow }
+
+func (d *SFlowDatagram) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }
+
+// SFlowIPType determines what form the IP address being decoded will
+// take. This is an XDR union type allowing for both IPv4 and IPv6
+type SFlowIPType uint32
+
+const (
+       SFlowIPv4 SFlowIPType = 1
+       SFlowIPv6 SFlowIPType = 2
+)
+
+func (s SFlowIPType) String() string {
+       switch s {
+       case SFlowIPv4:
+               return "IPv4"
+       case SFlowIPv6:
+               return "IPv6"
+       default:
+               return ""
+       }
+}
+
+func (s SFlowIPType) Length() int {
+       switch s {
+       case SFlowIPv4:
+               return 4
+       case SFlowIPv6:
+               return 16
+       default:
+               return 0
+       }
+}
+
+func (s *SFlowDatagram) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       var agentAddressType SFlowIPType
+
+       data, s.DatagramVersion = data[4:], binary.BigEndian.Uint32(data[:4])
+       data, agentAddressType = data[4:], SFlowIPType(binary.BigEndian.Uint32(data[:4]))
+       data, s.AgentAddress = data[agentAddressType.Length():], data[:agentAddressType.Length()]
+       data, s.SubAgentID = data[4:], binary.BigEndian.Uint32(data[:4])
+       data, s.SequenceNumber = data[4:], binary.BigEndian.Uint32(data[:4])
+       data, s.AgentUptime = data[4:], binary.BigEndian.Uint32(data[:4])
+       data, s.SampleCount = data[4:], binary.BigEndian.Uint32(data[:4])
+
+       if s.SampleCount < 1 {
+               return fmt.Errorf("SFlow Datagram has invalid sample length: %d", s.SampleCount)
+       }
+       for i := uint32(0); i < s.SampleCount; i++ {
+               sdf := SFlowDataFormat(binary.BigEndian.Uint32(data[:4]))
+               _, sampleType := sdf.decode()
+               switch sampleType {
+               case SFlowTypeFlowSample:
+                       if flowSample, err := decodeFlowSample(&data, false); err == nil {
+                               s.FlowSamples = append(s.FlowSamples, flowSample)
+                       } else {
+                               return err
+                       }
+               case SFlowTypeCounterSample:
+                       if counterSample, err := decodeCounterSample(&data, false); err == nil {
+                               s.CounterSamples = append(s.CounterSamples, counterSample)
+                       } else {
+                               return err
+                       }
+               case SFlowTypeExpandedFlowSample:
+                       if flowSample, err := decodeFlowSample(&data, true); err == nil {
+                               s.FlowSamples = append(s.FlowSamples, flowSample)
+                       } else {
+                               return err
+                       }
+               case SFlowTypeExpandedCounterSample:
+                       if counterSample, err := decodeCounterSample(&data, true); err == nil {
+                               s.CounterSamples = append(s.CounterSamples, counterSample)
+                       } else {
+                               return err
+                       }
+
+               default:
+                       return fmt.Errorf("Unsupported SFlow sample type %d", sampleType)
+               }
+       }
+       return nil
+}
+
+// SFlowFlowSample represents a sampled packet and contains
+// one or more records describing the packet
+type SFlowFlowSample struct {
+       EnterpriseID          SFlowEnterpriseID
+       Format                SFlowSampleType
+       SampleLength          uint32
+       SequenceNumber        uint32
+       SourceIDClass         SFlowSourceFormat
+       SourceIDIndex         SFlowSourceValue
+       SamplingRate          uint32
+       SamplePool            uint32
+       Dropped               uint32
+       InputInterfaceFormat  uint32
+       InputInterface        uint32
+       OutputInterfaceFormat uint32
+       OutputInterface       uint32
+       RecordCount           uint32
+       Records               []SFlowRecord
+}
+
+// Flow samples have the following structure. Note
+// the bit fields to encode the Enterprise ID and the
+// Flow record format: type 1
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  sample length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |          int sample sequence number           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |id type |       src id index value             |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               int sampling rate               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                int sample pool                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    int drops                  |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                 int input ifIndex             |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                int output ifIndex             |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               int number of records           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /                   flow records                /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// Flow samples have the following structure.
+// Flow record format: type 3
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  sample length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |          int sample sequence number           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               int src id type                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |             int src id index value            |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               int sampling rate               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                int sample pool                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    int drops                  |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |           int input interface format          |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |           int input interface value           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |           int output interface format         |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |           int output interface value          |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               int number of records           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /                   flow records                /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowFlowDataFormat uint32
+
+func (fdf SFlowFlowDataFormat) decode() (SFlowEnterpriseID, SFlowFlowRecordType) {
+       leftField := fdf >> 12
+       rightField := uint32(0xFFF) & uint32(fdf)
+       return SFlowEnterpriseID(leftField), SFlowFlowRecordType(rightField)
+}
+
+func (fs SFlowFlowSample) GetRecords() []SFlowRecord {
+       return fs.Records
+}
+
+func (fs SFlowFlowSample) GetType() SFlowSampleType {
+       return SFlowTypeFlowSample
+}
+
+func skipRecord(data *[]byte) {
+       recordLength := int(binary.BigEndian.Uint32((*data)[4:]))
+       *data = (*data)[(recordLength+((4-recordLength)%4))+8:]
+}
+
+func decodeFlowSample(data *[]byte, expanded bool) (SFlowFlowSample, error) {
+       s := SFlowFlowSample{}
+       var sdf SFlowDataFormat
+       *data, sdf = (*data)[4:], SFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       var sdc SFlowDataSource
+
+       s.EnterpriseID, s.Format = sdf.decode()
+       *data, s.SampleLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, s.SequenceNumber = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       if expanded {
+               *data, s.SourceIDClass = (*data)[4:], SFlowSourceFormat(binary.BigEndian.Uint32((*data)[:4]))
+               *data, s.SourceIDIndex = (*data)[4:], SFlowSourceValue(binary.BigEndian.Uint32((*data)[:4]))
+       } else {
+               *data, sdc = (*data)[4:], SFlowDataSource(binary.BigEndian.Uint32((*data)[:4]))
+               s.SourceIDClass, s.SourceIDIndex = sdc.decode()
+       }
+       *data, s.SamplingRate = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, s.SamplePool = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, s.Dropped = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       if expanded {
+               *data, s.InputInterfaceFormat = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+               *data, s.InputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+               *data, s.OutputInterfaceFormat = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+               *data, s.OutputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       } else {
+               *data, s.InputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+               *data, s.OutputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       }
+       *data, s.RecordCount = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       for i := uint32(0); i < s.RecordCount; i++ {
+               rdf := SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+               _, flowRecordType := rdf.decode()
+
+               switch flowRecordType {
+               case SFlowTypeRawPacketFlow:
+                       if record, err := decodeRawPacketFlowRecord(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedUserFlow:
+                       if record, err := decodeExtendedUserFlow(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedUrlFlow:
+                       if record, err := decodeExtendedURLRecord(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedSwitchFlow:
+                       if record, err := decodeExtendedSwitchFlowRecord(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedRouterFlow:
+                       if record, err := decodeExtendedRouterFlowRecord(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedGatewayFlow:
+                       if record, err := decodeExtendedGatewayFlowRecord(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeEthernetFrameFlow:
+                       // TODO
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeEthernetFrameFlow")
+               case SFlowTypeIpv4Flow:
+                       if record, err := decodeSFlowIpv4Record(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeIpv6Flow:
+                       if record, err := decodeSFlowIpv6Record(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedMlpsFlow:
+                       // TODO
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeExtendedMlpsFlow")
+               case SFlowTypeExtendedNatFlow:
+                       // TODO
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeExtendedNatFlow")
+               case SFlowTypeExtendedMlpsTunnelFlow:
+                       // TODO
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeExtendedMlpsTunnelFlow")
+               case SFlowTypeExtendedMlpsVcFlow:
+                       // TODO
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeExtendedMlpsVcFlow")
+               case SFlowTypeExtendedMlpsFecFlow:
+                       // TODO
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeExtendedMlpsFecFlow")
+               case SFlowTypeExtendedMlpsLvpFecFlow:
+                       // TODO
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeExtendedMlpsLvpFecFlow")
+               case SFlowTypeExtendedVlanFlow:
+                       // TODO
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeExtendedVlanFlow")
+               case SFlowTypeExtendedIpv4TunnelEgressFlow:
+                       if record, err := decodeExtendedIpv4TunnelEgress(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedIpv4TunnelIngressFlow:
+                       if record, err := decodeExtendedIpv4TunnelIngress(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedIpv6TunnelEgressFlow:
+                       if record, err := decodeExtendedIpv6TunnelEgress(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedIpv6TunnelIngressFlow:
+                       if record, err := decodeExtendedIpv6TunnelIngress(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedDecapsulateEgressFlow:
+                       if record, err := decodeExtendedDecapsulateEgress(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedDecapsulateIngressFlow:
+                       if record, err := decodeExtendedDecapsulateIngress(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedVniEgressFlow:
+                       if record, err := decodeExtendedVniEgress(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeExtendedVniIngressFlow:
+                       if record, err := decodeExtendedVniIngress(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               default:
+                       return s, fmt.Errorf("Unsupported flow record type: %d", flowRecordType)
+               }
+       }
+       return s, nil
+}
+
+// Counter samples report information about various counter
+// objects. Typically these are items like IfInOctets, or
+// CPU / Memory stats, etc. SFlow will report these at regular
+// intervals as configured on the agent. If one were sufficiently
+// industrious, this could be used to replace the typical
+// SNMP polling used for such things.
+type SFlowCounterSample struct {
+       EnterpriseID   SFlowEnterpriseID
+       Format         SFlowSampleType
+       SampleLength   uint32
+       SequenceNumber uint32
+       SourceIDClass  SFlowSourceFormat
+       SourceIDIndex  SFlowSourceValue
+       RecordCount    uint32
+       Records        []SFlowRecord
+}
+
+// Counter samples have the following structure:
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |          int sample sequence number           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |id type |       src id index value             |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               int number of records           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /                counter records                /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowCounterDataFormat uint32
+
+func (cdf SFlowCounterDataFormat) decode() (SFlowEnterpriseID, SFlowCounterRecordType) {
+       leftField := cdf >> 12
+       rightField := uint32(0xFFF) & uint32(cdf)
+       return SFlowEnterpriseID(leftField), SFlowCounterRecordType(rightField)
+}
+
+// GetRecords will return a slice of interface types
+// representing records. A type switch can be used to
+// get at the underlying SFlowCounterRecordType.
+func (cs SFlowCounterSample) GetRecords() []SFlowRecord {
+       return cs.Records
+}
+
+// GetType will report the type of sample. Only the
+// compact form of counter samples is supported
+func (cs SFlowCounterSample) GetType() SFlowSampleType {
+       return SFlowTypeCounterSample
+}
+
+type SFlowCounterRecordType uint32
+
+const (
+       SFlowTypeGenericInterfaceCounters   SFlowCounterRecordType = 1
+       SFlowTypeEthernetInterfaceCounters  SFlowCounterRecordType = 2
+       SFlowTypeTokenRingInterfaceCounters SFlowCounterRecordType = 3
+       SFlowType100BaseVGInterfaceCounters SFlowCounterRecordType = 4
+       SFlowTypeVLANCounters               SFlowCounterRecordType = 5
+       SFlowTypeProcessorCounters          SFlowCounterRecordType = 1001
+)
+
+func (cr SFlowCounterRecordType) String() string {
+       switch cr {
+       case SFlowTypeGenericInterfaceCounters:
+               return "Generic Interface Counters"
+       case SFlowTypeEthernetInterfaceCounters:
+               return "Ethernet Interface Counters"
+       case SFlowTypeTokenRingInterfaceCounters:
+               return "Token Ring Interface Counters"
+       case SFlowType100BaseVGInterfaceCounters:
+               return "100BaseVG Interface Counters"
+       case SFlowTypeVLANCounters:
+               return "VLAN Counters"
+       case SFlowTypeProcessorCounters:
+               return "Processor Counters"
+       default:
+               return ""
+
+       }
+}
+
+func decodeCounterSample(data *[]byte, expanded bool) (SFlowCounterSample, error) {
+       s := SFlowCounterSample{}
+       var sdc SFlowDataSource
+       var sdce SFlowDataSourceExpanded
+       var sdf SFlowDataFormat
+
+       *data, sdf = (*data)[4:], SFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       s.EnterpriseID, s.Format = sdf.decode()
+       *data, s.SampleLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, s.SequenceNumber = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       if expanded {
+               *data, sdce = (*data)[8:], SFlowDataSourceExpanded{SFlowSourceFormat(binary.BigEndian.Uint32((*data)[:4])), SFlowSourceValue(binary.BigEndian.Uint32((*data)[4:8]))}
+               s.SourceIDClass, s.SourceIDIndex = sdce.decode()
+       } else {
+               *data, sdc = (*data)[4:], SFlowDataSource(binary.BigEndian.Uint32((*data)[:4]))
+               s.SourceIDClass, s.SourceIDIndex = sdc.decode()
+       }
+       *data, s.RecordCount = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       for i := uint32(0); i < s.RecordCount; i++ {
+               cdf := SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+               _, counterRecordType := cdf.decode()
+               switch counterRecordType {
+               case SFlowTypeGenericInterfaceCounters:
+                       if record, err := decodeGenericInterfaceCounters(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeEthernetInterfaceCounters:
+                       if record, err := decodeEthernetCounters(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               case SFlowTypeTokenRingInterfaceCounters:
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeTokenRingInterfaceCounters")
+               case SFlowType100BaseVGInterfaceCounters:
+                       skipRecord(data)
+                       return s, errors.New("skipping Type100BaseVGInterfaceCounters")
+               case SFlowTypeVLANCounters:
+                       skipRecord(data)
+                       return s, errors.New("skipping TypeVLANCounters")
+               case SFlowTypeProcessorCounters:
+                       if record, err := decodeProcessorCounters(data); err == nil {
+                               s.Records = append(s.Records, record)
+                       } else {
+                               return s, err
+                       }
+               default:
+                       return s, fmt.Errorf("Invalid counter record type: %d", counterRecordType)
+               }
+       }
+       return s, nil
+}
+
+// SFlowBaseFlowRecord holds the fields common to all records
+// of type SFlowFlowRecordType
+type SFlowBaseFlowRecord struct {
+       EnterpriseID   SFlowEnterpriseID
+       Format         SFlowFlowRecordType
+       FlowDataLength uint32
+}
+
+func (bfr SFlowBaseFlowRecord) GetType() SFlowFlowRecordType {
+       return bfr.Format
+}
+
+// SFlowFlowRecordType denotes what kind of Flow Record is
+// represented. See RFC 3176
+type SFlowFlowRecordType uint32
+
+const (
+       SFlowTypeRawPacketFlow                  SFlowFlowRecordType = 1
+       SFlowTypeEthernetFrameFlow              SFlowFlowRecordType = 2
+       SFlowTypeIpv4Flow                       SFlowFlowRecordType = 3
+       SFlowTypeIpv6Flow                       SFlowFlowRecordType = 4
+       SFlowTypeExtendedSwitchFlow             SFlowFlowRecordType = 1001
+       SFlowTypeExtendedRouterFlow             SFlowFlowRecordType = 1002
+       SFlowTypeExtendedGatewayFlow            SFlowFlowRecordType = 1003
+       SFlowTypeExtendedUserFlow               SFlowFlowRecordType = 1004
+       SFlowTypeExtendedUrlFlow                SFlowFlowRecordType = 1005
+       SFlowTypeExtendedMlpsFlow               SFlowFlowRecordType = 1006
+       SFlowTypeExtendedNatFlow                SFlowFlowRecordType = 1007
+       SFlowTypeExtendedMlpsTunnelFlow         SFlowFlowRecordType = 1008
+       SFlowTypeExtendedMlpsVcFlow             SFlowFlowRecordType = 1009
+       SFlowTypeExtendedMlpsFecFlow            SFlowFlowRecordType = 1010
+       SFlowTypeExtendedMlpsLvpFecFlow         SFlowFlowRecordType = 1011
+       SFlowTypeExtendedVlanFlow               SFlowFlowRecordType = 1012
+       SFlowTypeExtendedIpv4TunnelEgressFlow   SFlowFlowRecordType = 1023
+       SFlowTypeExtendedIpv4TunnelIngressFlow  SFlowFlowRecordType = 1024
+       SFlowTypeExtendedIpv6TunnelEgressFlow   SFlowFlowRecordType = 1025
+       SFlowTypeExtendedIpv6TunnelIngressFlow  SFlowFlowRecordType = 1026
+       SFlowTypeExtendedDecapsulateEgressFlow  SFlowFlowRecordType = 1027
+       SFlowTypeExtendedDecapsulateIngressFlow SFlowFlowRecordType = 1028
+       SFlowTypeExtendedVniEgressFlow          SFlowFlowRecordType = 1029
+       SFlowTypeExtendedVniIngressFlow         SFlowFlowRecordType = 1030
+)
+
+func (rt SFlowFlowRecordType) String() string {
+       switch rt {
+       case SFlowTypeRawPacketFlow:
+               return "Raw Packet Flow Record"
+       case SFlowTypeEthernetFrameFlow:
+               return "Ethernet Frame Flow Record"
+       case SFlowTypeIpv4Flow:
+               return "IPv4 Flow Record"
+       case SFlowTypeIpv6Flow:
+               return "IPv6 Flow Record"
+       case SFlowTypeExtendedSwitchFlow:
+               return "Extended Switch Flow Record"
+       case SFlowTypeExtendedRouterFlow:
+               return "Extended Router Flow Record"
+       case SFlowTypeExtendedGatewayFlow:
+               return "Extended Gateway Flow Record"
+       case SFlowTypeExtendedUserFlow:
+               return "Extended User Flow Record"
+       case SFlowTypeExtendedUrlFlow:
+               return "Extended URL Flow Record"
+       case SFlowTypeExtendedMlpsFlow:
+               return "Extended MPLS Flow Record"
+       case SFlowTypeExtendedNatFlow:
+               return "Extended NAT Flow Record"
+       case SFlowTypeExtendedMlpsTunnelFlow:
+               return "Extended MPLS Tunnel Flow Record"
+       case SFlowTypeExtendedMlpsVcFlow:
+               return "Extended MPLS VC Flow Record"
+       case SFlowTypeExtendedMlpsFecFlow:
+               return "Extended MPLS FEC Flow Record"
+       case SFlowTypeExtendedMlpsLvpFecFlow:
+               return "Extended MPLS LVP FEC Flow Record"
+       case SFlowTypeExtendedVlanFlow:
+               return "Extended VLAN Flow Record"
+       case SFlowTypeExtendedIpv4TunnelEgressFlow:
+               return "Extended IPv4 Tunnel Egress Record"
+       case SFlowTypeExtendedIpv4TunnelIngressFlow:
+               return "Extended IPv4 Tunnel Ingress Record"
+       case SFlowTypeExtendedIpv6TunnelEgressFlow:
+               return "Extended IPv6 Tunnel Egress Record"
+       case SFlowTypeExtendedIpv6TunnelIngressFlow:
+               return "Extended IPv6 Tunnel Ingress Record"
+       case SFlowTypeExtendedDecapsulateEgressFlow:
+               return "Extended Decapsulate Egress Record"
+       case SFlowTypeExtendedDecapsulateIngressFlow:
+               return "Extended Decapsulate Ingress Record"
+       case SFlowTypeExtendedVniEgressFlow:
+               return "Extended VNI Ingress Record"
+       case SFlowTypeExtendedVniIngressFlow:
+               return "Extended VNI Ingress Record"
+       default:
+               return ""
+       }
+}
+
+// SFlowRawPacketFlowRecords hold information about a sampled
+// packet grabbed as it transited the agent. This is
+// perhaps the most useful and interesting record type,
+// as it holds the headers of the sampled packet and
+// can be used to build up a complete picture of the
+// traffic patterns on a network.
+//
+// The raw packet header is sent back into gopacket for
+// decoding, and the resulting gopackt.Packet is stored
+// in the Header member
+type SFlowRawPacketFlowRecord struct {
+       SFlowBaseFlowRecord
+       HeaderProtocol SFlowRawHeaderProtocol
+       FrameLength    uint32
+       PayloadRemoved uint32
+       HeaderLength   uint32
+       Header         gopacket.Packet
+}
+
+// Raw packet record types have the following structure:
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                 Header Protocol               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                 Frame Length                  |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                 Payload Removed               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                 Header Length                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  \                     Header                    \
+//  \                                               \
+//  \                                               \
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowRawHeaderProtocol uint32
+
+const (
+       SFlowProtoEthernet   SFlowRawHeaderProtocol = 1
+       SFlowProtoISO88024   SFlowRawHeaderProtocol = 2
+       SFlowProtoISO88025   SFlowRawHeaderProtocol = 3
+       SFlowProtoFDDI       SFlowRawHeaderProtocol = 4
+       SFlowProtoFrameRelay SFlowRawHeaderProtocol = 5
+       SFlowProtoX25        SFlowRawHeaderProtocol = 6
+       SFlowProtoPPP        SFlowRawHeaderProtocol = 7
+       SFlowProtoSMDS       SFlowRawHeaderProtocol = 8
+       SFlowProtoAAL5       SFlowRawHeaderProtocol = 9
+       SFlowProtoAAL5_IP    SFlowRawHeaderProtocol = 10 /* e.g. Cisco AAL5 mux */
+       SFlowProtoIPv4       SFlowRawHeaderProtocol = 11
+       SFlowProtoIPv6       SFlowRawHeaderProtocol = 12
+       SFlowProtoMPLS       SFlowRawHeaderProtocol = 13
+       SFlowProtoPOS        SFlowRawHeaderProtocol = 14 /* RFC 1662, 2615 */
+)
+
+func (sfhp SFlowRawHeaderProtocol) String() string {
+       switch sfhp {
+       case SFlowProtoEthernet:
+               return "ETHERNET-ISO88023"
+       case SFlowProtoISO88024:
+               return "ISO88024-TOKENBUS"
+       case SFlowProtoISO88025:
+               return "ISO88025-TOKENRING"
+       case SFlowProtoFDDI:
+               return "FDDI"
+       case SFlowProtoFrameRelay:
+               return "FRAME-RELAY"
+       case SFlowProtoX25:
+               return "X25"
+       case SFlowProtoPPP:
+               return "PPP"
+       case SFlowProtoSMDS:
+               return "SMDS"
+       case SFlowProtoAAL5:
+               return "AAL5"
+       case SFlowProtoAAL5_IP:
+               return "AAL5-IP"
+       case SFlowProtoIPv4:
+               return "IPv4"
+       case SFlowProtoIPv6:
+               return "IPv6"
+       case SFlowProtoMPLS:
+               return "MPLS"
+       case SFlowProtoPOS:
+               return "POS"
+       }
+       return "UNKNOWN"
+}
+
+func decodeRawPacketFlowRecord(data *[]byte) (SFlowRawPacketFlowRecord, error) {
+       rec := SFlowRawPacketFlowRecord{}
+       header := []byte{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       rec.EnterpriseID, rec.Format = fdf.decode()
+       *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, rec.HeaderProtocol = (*data)[4:], SFlowRawHeaderProtocol(binary.BigEndian.Uint32((*data)[:4]))
+       *data, rec.FrameLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, rec.PayloadRemoved = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, rec.HeaderLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       headerLenWithPadding := int(rec.HeaderLength + ((4 - rec.HeaderLength) % 4))
+       *data, header = (*data)[headerLenWithPadding:], (*data)[:headerLenWithPadding]
+       rec.Header = gopacket.NewPacket(header, LayerTypeEthernet, gopacket.Default)
+       return rec, nil
+}
+
+// SFlowExtendedSwitchFlowRecord give additional information
+// about the sampled packet if it's available. It's mainly
+// useful for getting at the incoming and outgoing VLANs
+// An agent may or may not provide this information.
+type SFlowExtendedSwitchFlowRecord struct {
+       SFlowBaseFlowRecord
+       IncomingVLAN         uint32
+       IncomingVLANPriority uint32
+       OutgoingVLAN         uint32
+       OutgoingVLANPriority uint32
+}
+
+// Extended switch records have the following structure:
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   Incoming VLAN               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                Incoming VLAN Priority         |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   Outgoing VLAN               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                Outgoing VLAN Priority         |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+func decodeExtendedSwitchFlowRecord(data *[]byte) (SFlowExtendedSwitchFlowRecord, error) {
+       es := SFlowExtendedSwitchFlowRecord{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       es.EnterpriseID, es.Format = fdf.decode()
+       *data, es.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, es.IncomingVLAN = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, es.IncomingVLANPriority = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, es.OutgoingVLAN = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, es.OutgoingVLANPriority = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       return es, nil
+}
+
+// SFlowExtendedRouterFlowRecord gives additional information
+// about the layer 3 routing information used to forward
+// the packet
+type SFlowExtendedRouterFlowRecord struct {
+       SFlowBaseFlowRecord
+       NextHop                net.IP
+       NextHopSourceMask      uint32
+       NextHopDestinationMask uint32
+}
+
+// Extended router records have the following structure:
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |   IP version of next hop router (1=v4|2=v6)   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /     Next Hop address (v4=4byte|v6=16byte)     /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |              Next Hop Source Mask             |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |              Next Hop Destination Mask        |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+func decodeExtendedRouterFlowRecord(data *[]byte) (SFlowExtendedRouterFlowRecord, error) {
+       er := SFlowExtendedRouterFlowRecord{}
+       var fdf SFlowFlowDataFormat
+       var extendedRouterAddressType SFlowIPType
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       er.EnterpriseID, er.Format = fdf.decode()
+       *data, er.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, extendedRouterAddressType = (*data)[4:], SFlowIPType(binary.BigEndian.Uint32((*data)[:4]))
+       *data, er.NextHop = (*data)[extendedRouterAddressType.Length():], (*data)[:extendedRouterAddressType.Length()]
+       *data, er.NextHopSourceMask = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, er.NextHopDestinationMask = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       return er, nil
+}
+
+// SFlowExtendedGatewayFlowRecord describes information treasured by
+// nework engineers everywhere: AS path information listing which
+// BGP peer sent the packet, and various other BGP related info.
+// This information is vital because it gives a picture of how much
+// traffic is being sent from / received by various BGP peers.
+
+// Extended gateway records have the following structure:
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |   IP version of next hop router (1=v4|2=v6)   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /     Next Hop address (v4=4byte|v6=16byte)     /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                       AS                      |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  Source AS                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    Peer AS                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  AS Path Count                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /                AS Path / Sequence             /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /                   Communities                 /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    Local Pref                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// AS Path / Sequence:
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |     AS Source Type (Path=1 / Sequence=2)      |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |              Path / Sequence length           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /              Path / Sequence Members          /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+// Communities:
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                communitiy length              |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /              communitiy Members               /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowExtendedGatewayFlowRecord struct {
+       SFlowBaseFlowRecord
+       NextHop     net.IP
+       AS          uint32
+       SourceAS    uint32
+       PeerAS      uint32
+       ASPathCount uint32
+       ASPath      []SFlowASDestination
+       Communities []uint32
+       LocalPref   uint32
+}
+
+type SFlowASPathType uint32
+
+const (
+       SFlowASSet      SFlowASPathType = 1
+       SFlowASSequence SFlowASPathType = 2
+)
+
+func (apt SFlowASPathType) String() string {
+       switch apt {
+       case SFlowASSet:
+               return "AS Set"
+       case SFlowASSequence:
+               return "AS Sequence"
+       default:
+               return ""
+       }
+}
+
+type SFlowASDestination struct {
+       Type    SFlowASPathType
+       Count   uint32
+       Members []uint32
+}
+
+func (asd SFlowASDestination) String() string {
+       switch asd.Type {
+       case SFlowASSet:
+               return fmt.Sprint("AS Set:", asd.Members)
+       case SFlowASSequence:
+               return fmt.Sprint("AS Sequence:", asd.Members)
+       default:
+               return ""
+       }
+}
+
+func (ad *SFlowASDestination) decodePath(data *[]byte) {
+       *data, ad.Type = (*data)[4:], SFlowASPathType(binary.BigEndian.Uint32((*data)[:4]))
+       *data, ad.Count = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       ad.Members = make([]uint32, ad.Count)
+       for i := uint32(0); i < ad.Count; i++ {
+               var member uint32
+               *data, member = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+               ad.Members[i] = member
+       }
+}
+
+func decodeExtendedGatewayFlowRecord(data *[]byte) (SFlowExtendedGatewayFlowRecord, error) {
+       eg := SFlowExtendedGatewayFlowRecord{}
+       var fdf SFlowFlowDataFormat
+       var extendedGatewayAddressType SFlowIPType
+       var communitiesLength uint32
+       var community uint32
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       eg.EnterpriseID, eg.Format = fdf.decode()
+       *data, eg.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, extendedGatewayAddressType = (*data)[4:], SFlowIPType(binary.BigEndian.Uint32((*data)[:4]))
+       *data, eg.NextHop = (*data)[extendedGatewayAddressType.Length():], (*data)[:extendedGatewayAddressType.Length()]
+       *data, eg.AS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, eg.SourceAS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, eg.PeerAS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, eg.ASPathCount = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       for i := uint32(0); i < eg.ASPathCount; i++ {
+               asPath := SFlowASDestination{}
+               asPath.decodePath(data)
+               eg.ASPath = append(eg.ASPath, asPath)
+       }
+       *data, communitiesLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       eg.Communities = make([]uint32, communitiesLength)
+       for j := uint32(0); j < communitiesLength; j++ {
+               *data, community = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+               eg.Communities[j] = community
+       }
+       *data, eg.LocalPref = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       return eg, nil
+}
+
+// **************************************************
+//  Extended URL Flow Record
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   direction                   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                      URL                      |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                      Host                     |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowURLDirection uint32
+
+const (
+       SFlowURLsrc SFlowURLDirection = 1
+       SFlowURLdst SFlowURLDirection = 2
+)
+
+func (urld SFlowURLDirection) String() string {
+       switch urld {
+       case SFlowURLsrc:
+               return "Source address is the server"
+       case SFlowURLdst:
+               return "Destination address is the server"
+       default:
+               return ""
+       }
+}
+
+type SFlowExtendedURLRecord struct {
+       SFlowBaseFlowRecord
+       Direction SFlowURLDirection
+       URL       string
+       Host      string
+}
+
+func decodeExtendedURLRecord(data *[]byte) (SFlowExtendedURLRecord, error) {
+       eur := SFlowExtendedURLRecord{}
+       var fdf SFlowFlowDataFormat
+       var urlLen uint32
+       var urlLenWithPad int
+       var hostLen uint32
+       var hostLenWithPad int
+       var urlBytes []byte
+       var hostBytes []byte
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       eur.EnterpriseID, eur.Format = fdf.decode()
+       *data, eur.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, eur.Direction = (*data)[4:], SFlowURLDirection(binary.BigEndian.Uint32((*data)[:4]))
+       *data, urlLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       urlLenWithPad = int(urlLen + ((4 - urlLen) % 4))
+       *data, urlBytes = (*data)[urlLenWithPad:], (*data)[:urlLenWithPad]
+       eur.URL = string(urlBytes[:urlLen])
+       *data, hostLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       hostLenWithPad = int(hostLen + ((4 - hostLen) % 4))
+       *data, hostBytes = (*data)[hostLenWithPad:], (*data)[:hostLenWithPad]
+       eur.Host = string(hostBytes[:hostLen])
+       return eur, nil
+}
+
+// **************************************************
+//  Extended User Flow Record
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                Source Character Set           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                 Source User Id                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |              Destination Character Set        |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               Destination User ID             |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowExtendedUserFlow struct {
+       SFlowBaseFlowRecord
+       SourceCharSet      SFlowCharSet
+       SourceUserID       string
+       DestinationCharSet SFlowCharSet
+       DestinationUserID  string
+}
+
+type SFlowCharSet uint32
+
+const (
+       SFlowCSunknown                 SFlowCharSet = 2
+       SFlowCSASCII                   SFlowCharSet = 3
+       SFlowCSISOLatin1               SFlowCharSet = 4
+       SFlowCSISOLatin2               SFlowCharSet = 5
+       SFlowCSISOLatin3               SFlowCharSet = 6
+       SFlowCSISOLatin4               SFlowCharSet = 7
+       SFlowCSISOLatinCyrillic        SFlowCharSet = 8
+       SFlowCSISOLatinArabic          SFlowCharSet = 9
+       SFlowCSISOLatinGreek           SFlowCharSet = 10
+       SFlowCSISOLatinHebrew          SFlowCharSet = 11
+       SFlowCSISOLatin5               SFlowCharSet = 12
+       SFlowCSISOLatin6               SFlowCharSet = 13
+       SFlowCSISOTextComm             SFlowCharSet = 14
+       SFlowCSHalfWidthKatakana       SFlowCharSet = 15
+       SFlowCSJISEncoding             SFlowCharSet = 16
+       SFlowCSShiftJIS                SFlowCharSet = 17
+       SFlowCSEUCPkdFmtJapanese       SFlowCharSet = 18
+       SFlowCSEUCFixWidJapanese       SFlowCharSet = 19
+       SFlowCSISO4UnitedKingdom       SFlowCharSet = 20
+       SFlowCSISO11SwedishForNames    SFlowCharSet = 21
+       SFlowCSISO15Italian            SFlowCharSet = 22
+       SFlowCSISO17Spanish            SFlowCharSet = 23
+       SFlowCSISO21German             SFlowCharSet = 24
+       SFlowCSISO60DanishNorwegian    SFlowCharSet = 25
+       SFlowCSISO69French             SFlowCharSet = 26
+       SFlowCSISO10646UTF1            SFlowCharSet = 27
+       SFlowCSISO646basic1983         SFlowCharSet = 28
+       SFlowCSINVARIANT               SFlowCharSet = 29
+       SFlowCSISO2IntlRefVersion      SFlowCharSet = 30
+       SFlowCSNATSSEFI                SFlowCharSet = 31
+       SFlowCSNATSSEFIADD             SFlowCharSet = 32
+       SFlowCSNATSDANO                SFlowCharSet = 33
+       SFlowCSNATSDANOADD             SFlowCharSet = 34
+       SFlowCSISO10Swedish            SFlowCharSet = 35
+       SFlowCSKSC56011987             SFlowCharSet = 36
+       SFlowCSISO2022KR               SFlowCharSet = 37
+       SFlowCSEUCKR                   SFlowCharSet = 38
+       SFlowCSISO2022JP               SFlowCharSet = 39
+       SFlowCSISO2022JP2              SFlowCharSet = 40
+       SFlowCSISO13JISC6220jp         SFlowCharSet = 41
+       SFlowCSISO14JISC6220ro         SFlowCharSet = 42
+       SFlowCSISO16Portuguese         SFlowCharSet = 43
+       SFlowCSISO18Greek7Old          SFlowCharSet = 44
+       SFlowCSISO19LatinGreek         SFlowCharSet = 45
+       SFlowCSISO25French             SFlowCharSet = 46
+       SFlowCSISO27LatinGreek1        SFlowCharSet = 47
+       SFlowCSISO5427Cyrillic         SFlowCharSet = 48
+       SFlowCSISO42JISC62261978       SFlowCharSet = 49
+       SFlowCSISO47BSViewdata         SFlowCharSet = 50
+       SFlowCSISO49INIS               SFlowCharSet = 51
+       SFlowCSISO50INIS8              SFlowCharSet = 52
+       SFlowCSISO51INISCyrillic       SFlowCharSet = 53
+       SFlowCSISO54271981             SFlowCharSet = 54
+       SFlowCSISO5428Greek            SFlowCharSet = 55
+       SFlowCSISO57GB1988             SFlowCharSet = 56
+       SFlowCSISO58GB231280           SFlowCharSet = 57
+       SFlowCSISO61Norwegian2         SFlowCharSet = 58
+       SFlowCSISO70VideotexSupp1      SFlowCharSet = 59
+       SFlowCSISO84Portuguese2        SFlowCharSet = 60
+       SFlowCSISO85Spanish2           SFlowCharSet = 61
+       SFlowCSISO86Hungarian          SFlowCharSet = 62
+       SFlowCSISO87JISX0208           SFlowCharSet = 63
+       SFlowCSISO88Greek7             SFlowCharSet = 64
+       SFlowCSISO89ASMO449            SFlowCharSet = 65
+       SFlowCSISO90                   SFlowCharSet = 66
+       SFlowCSISO91JISC62291984a      SFlowCharSet = 67
+       SFlowCSISO92JISC62991984b      SFlowCharSet = 68
+       SFlowCSISO93JIS62291984badd    SFlowCharSet = 69
+       SFlowCSISO94JIS62291984hand    SFlowCharSet = 70
+       SFlowCSISO95JIS62291984handadd SFlowCharSet = 71
+       SFlowCSISO96JISC62291984kana   SFlowCharSet = 72
+       SFlowCSISO2033                 SFlowCharSet = 73
+       SFlowCSISO99NAPLPS             SFlowCharSet = 74
+       SFlowCSISO102T617bit           SFlowCharSet = 75
+       SFlowCSISO103T618bit           SFlowCharSet = 76
+       SFlowCSISO111ECMACyrillic      SFlowCharSet = 77
+       SFlowCSa71                     SFlowCharSet = 78
+       SFlowCSa72                     SFlowCharSet = 79
+       SFlowCSISO123CSAZ24341985gr    SFlowCharSet = 80
+       SFlowCSISO88596E               SFlowCharSet = 81
+       SFlowCSISO88596I               SFlowCharSet = 82
+       SFlowCSISO128T101G2            SFlowCharSet = 83
+       SFlowCSISO88598E               SFlowCharSet = 84
+       SFlowCSISO88598I               SFlowCharSet = 85
+       SFlowCSISO139CSN369103         SFlowCharSet = 86
+       SFlowCSISO141JUSIB1002         SFlowCharSet = 87
+       SFlowCSISO143IECP271           SFlowCharSet = 88
+       SFlowCSISO146Serbian           SFlowCharSet = 89
+       SFlowCSISO147Macedonian        SFlowCharSet = 90
+       SFlowCSISO150                  SFlowCharSet = 91
+       SFlowCSISO151Cuba              SFlowCharSet = 92
+       SFlowCSISO6937Add              SFlowCharSet = 93
+       SFlowCSISO153GOST1976874       SFlowCharSet = 94
+       SFlowCSISO8859Supp             SFlowCharSet = 95
+       SFlowCSISO10367Box             SFlowCharSet = 96
+       SFlowCSISO158Lap               SFlowCharSet = 97
+       SFlowCSISO159JISX02121990      SFlowCharSet = 98
+       SFlowCSISO646Danish            SFlowCharSet = 99
+       SFlowCSUSDK                    SFlowCharSet = 100
+       SFlowCSDKUS                    SFlowCharSet = 101
+       SFlowCSKSC5636                 SFlowCharSet = 102
+       SFlowCSUnicode11UTF7           SFlowCharSet = 103
+       SFlowCSISO2022CN               SFlowCharSet = 104
+       SFlowCSISO2022CNEXT            SFlowCharSet = 105
+       SFlowCSUTF8                    SFlowCharSet = 106
+       SFlowCSISO885913               SFlowCharSet = 109
+       SFlowCSISO885914               SFlowCharSet = 110
+       SFlowCSISO885915               SFlowCharSet = 111
+       SFlowCSISO885916               SFlowCharSet = 112
+       SFlowCSGBK                     SFlowCharSet = 113
+       SFlowCSGB18030                 SFlowCharSet = 114
+       SFlowCSOSDEBCDICDF0415         SFlowCharSet = 115
+       SFlowCSOSDEBCDICDF03IRV        SFlowCharSet = 116
+       SFlowCSOSDEBCDICDF041          SFlowCharSet = 117
+       SFlowCSISO115481               SFlowCharSet = 118
+       SFlowCSKZ1048                  SFlowCharSet = 119
+       SFlowCSUnicode                 SFlowCharSet = 1000
+       SFlowCSUCS4                    SFlowCharSet = 1001
+       SFlowCSUnicodeASCII            SFlowCharSet = 1002
+       SFlowCSUnicodeLatin1           SFlowCharSet = 1003
+       SFlowCSUnicodeJapanese         SFlowCharSet = 1004
+       SFlowCSUnicodeIBM1261          SFlowCharSet = 1005
+       SFlowCSUnicodeIBM1268          SFlowCharSet = 1006
+       SFlowCSUnicodeIBM1276          SFlowCharSet = 1007
+       SFlowCSUnicodeIBM1264          SFlowCharSet = 1008
+       SFlowCSUnicodeIBM1265          SFlowCharSet = 1009
+       SFlowCSUnicode11               SFlowCharSet = 1010
+       SFlowCSSCSU                    SFlowCharSet = 1011
+       SFlowCSUTF7                    SFlowCharSet = 1012
+       SFlowCSUTF16BE                 SFlowCharSet = 1013
+       SFlowCSUTF16LE                 SFlowCharSet = 1014
+       SFlowCSUTF16                   SFlowCharSet = 1015
+       SFlowCSCESU8                   SFlowCharSet = 1016
+       SFlowCSUTF32                   SFlowCharSet = 1017
+       SFlowCSUTF32BE                 SFlowCharSet = 1018
+       SFlowCSUTF32LE                 SFlowCharSet = 1019
+       SFlowCSBOCU1                   SFlowCharSet = 1020
+       SFlowCSWindows30Latin1         SFlowCharSet = 2000
+       SFlowCSWindows31Latin1         SFlowCharSet = 2001
+       SFlowCSWindows31Latin2         SFlowCharSet = 2002
+       SFlowCSWindows31Latin5         SFlowCharSet = 2003
+       SFlowCSHPRoman8                SFlowCharSet = 2004
+       SFlowCSAdobeStandardEncoding   SFlowCharSet = 2005
+       SFlowCSVenturaUS               SFlowCharSet = 2006
+       SFlowCSVenturaInternational    SFlowCharSet = 2007
+       SFlowCSDECMCS                  SFlowCharSet = 2008
+       SFlowCSPC850Multilingual       SFlowCharSet = 2009
+       SFlowCSPCp852                  SFlowCharSet = 2010
+       SFlowCSPC8CodePage437          SFlowCharSet = 2011
+       SFlowCSPC8DanishNorwegian      SFlowCharSet = 2012
+       SFlowCSPC862LatinHebrew        SFlowCharSet = 2013
+       SFlowCSPC8Turkish              SFlowCharSet = 2014
+       SFlowCSIBMSymbols              SFlowCharSet = 2015
+       SFlowCSIBMThai                 SFlowCharSet = 2016
+       SFlowCSHPLegal                 SFlowCharSet = 2017
+       SFlowCSHPPiFont                SFlowCharSet = 2018
+       SFlowCSHPMath8                 SFlowCharSet = 2019
+       SFlowCSHPPSMath                SFlowCharSet = 2020
+       SFlowCSHPDesktop               SFlowCharSet = 2021
+       SFlowCSVenturaMath             SFlowCharSet = 2022
+       SFlowCSMicrosoftPublishing     SFlowCharSet = 2023
+       SFlowCSWindows31J              SFlowCharSet = 2024
+       SFlowCSGB2312                  SFlowCharSet = 2025
+       SFlowCSBig5                    SFlowCharSet = 2026
+       SFlowCSMacintosh               SFlowCharSet = 2027
+       SFlowCSIBM037                  SFlowCharSet = 2028
+       SFlowCSIBM038                  SFlowCharSet = 2029
+       SFlowCSIBM273                  SFlowCharSet = 2030
+       SFlowCSIBM274                  SFlowCharSet = 2031
+       SFlowCSIBM275                  SFlowCharSet = 2032
+       SFlowCSIBM277                  SFlowCharSet = 2033
+       SFlowCSIBM278                  SFlowCharSet = 2034
+       SFlowCSIBM280                  SFlowCharSet = 2035
+       SFlowCSIBM281                  SFlowCharSet = 2036
+       SFlowCSIBM284                  SFlowCharSet = 2037
+       SFlowCSIBM285                  SFlowCharSet = 2038
+       SFlowCSIBM290                  SFlowCharSet = 2039
+       SFlowCSIBM297                  SFlowCharSet = 2040
+       SFlowCSIBM420                  SFlowCharSet = 2041
+       SFlowCSIBM423                  SFlowCharSet = 2042
+       SFlowCSIBM424                  SFlowCharSet = 2043
+       SFlowCSIBM500                  SFlowCharSet = 2044
+       SFlowCSIBM851                  SFlowCharSet = 2045
+       SFlowCSIBM855                  SFlowCharSet = 2046
+       SFlowCSIBM857                  SFlowCharSet = 2047
+       SFlowCSIBM860                  SFlowCharSet = 2048
+       SFlowCSIBM861                  SFlowCharSet = 2049
+       SFlowCSIBM863                  SFlowCharSet = 2050
+       SFlowCSIBM864                  SFlowCharSet = 2051
+       SFlowCSIBM865                  SFlowCharSet = 2052
+       SFlowCSIBM868                  SFlowCharSet = 2053
+       SFlowCSIBM869                  SFlowCharSet = 2054
+       SFlowCSIBM870                  SFlowCharSet = 2055
+       SFlowCSIBM871                  SFlowCharSet = 2056
+       SFlowCSIBM880                  SFlowCharSet = 2057
+       SFlowCSIBM891                  SFlowCharSet = 2058
+       SFlowCSIBM903                  SFlowCharSet = 2059
+       SFlowCSIBBM904                 SFlowCharSet = 2060
+       SFlowCSIBM905                  SFlowCharSet = 2061
+       SFlowCSIBM918                  SFlowCharSet = 2062
+       SFlowCSIBM1026                 SFlowCharSet = 2063
+       SFlowCSIBMEBCDICATDE           SFlowCharSet = 2064
+       SFlowCSEBCDICATDEA             SFlowCharSet = 2065
+       SFlowCSEBCDICCAFR              SFlowCharSet = 2066
+       SFlowCSEBCDICDKNO              SFlowCharSet = 2067
+       SFlowCSEBCDICDKNOA             SFlowCharSet = 2068
+       SFlowCSEBCDICFISE              SFlowCharSet = 2069
+       SFlowCSEBCDICFISEA             SFlowCharSet = 2070
+       SFlowCSEBCDICFR                SFlowCharSet = 2071
+       SFlowCSEBCDICIT                SFlowCharSet = 2072
+       SFlowCSEBCDICPT                SFlowCharSet = 2073
+       SFlowCSEBCDICES                SFlowCharSet = 2074
+       SFlowCSEBCDICESA               SFlowCharSet = 2075
+       SFlowCSEBCDICESS               SFlowCharSet = 2076
+       SFlowCSEBCDICUK                SFlowCharSet = 2077
+       SFlowCSEBCDICUS                SFlowCharSet = 2078
+       SFlowCSUnknown8BiT             SFlowCharSet = 2079
+       SFlowCSMnemonic                SFlowCharSet = 2080
+       SFlowCSMnem                    SFlowCharSet = 2081
+       SFlowCSVISCII                  SFlowCharSet = 2082
+       SFlowCSVIQR                    SFlowCharSet = 2083
+       SFlowCSKOI8R                   SFlowCharSet = 2084
+       SFlowCSHZGB2312                SFlowCharSet = 2085
+       SFlowCSIBM866                  SFlowCharSet = 2086
+       SFlowCSPC775Baltic             SFlowCharSet = 2087
+       SFlowCSKOI8U                   SFlowCharSet = 2088
+       SFlowCSIBM00858                SFlowCharSet = 2089
+       SFlowCSIBM00924                SFlowCharSet = 2090
+       SFlowCSIBM01140                SFlowCharSet = 2091
+       SFlowCSIBM01141                SFlowCharSet = 2092
+       SFlowCSIBM01142                SFlowCharSet = 2093
+       SFlowCSIBM01143                SFlowCharSet = 2094
+       SFlowCSIBM01144                SFlowCharSet = 2095
+       SFlowCSIBM01145                SFlowCharSet = 2096
+       SFlowCSIBM01146                SFlowCharSet = 2097
+       SFlowCSIBM01147                SFlowCharSet = 2098
+       SFlowCSIBM01148                SFlowCharSet = 2099
+       SFlowCSIBM01149                SFlowCharSet = 2100
+       SFlowCSBig5HKSCS               SFlowCharSet = 2101
+       SFlowCSIBM1047                 SFlowCharSet = 2102
+       SFlowCSPTCP154                 SFlowCharSet = 2103
+       SFlowCSAmiga1251               SFlowCharSet = 2104
+       SFlowCSKOI7switched            SFlowCharSet = 2105
+       SFlowCSBRF                     SFlowCharSet = 2106
+       SFlowCSTSCII                   SFlowCharSet = 2107
+       SFlowCSCP51932                 SFlowCharSet = 2108
+       SFlowCSWindows874              SFlowCharSet = 2109
+       SFlowCSWindows1250             SFlowCharSet = 2250
+       SFlowCSWindows1251             SFlowCharSet = 2251
+       SFlowCSWindows1252             SFlowCharSet = 2252
+       SFlowCSWindows1253             SFlowCharSet = 2253
+       SFlowCSWindows1254             SFlowCharSet = 2254
+       SFlowCSWindows1255             SFlowCharSet = 2255
+       SFlowCSWindows1256             SFlowCharSet = 2256
+       SFlowCSWindows1257             SFlowCharSet = 2257
+       SFlowCSWindows1258             SFlowCharSet = 2258
+       SFlowCSTIS620                  SFlowCharSet = 2259
+       SFlowCS50220                   SFlowCharSet = 2260
+       SFlowCSreserved                SFlowCharSet = 3000
+)
+
+func decodeExtendedUserFlow(data *[]byte) (SFlowExtendedUserFlow, error) {
+       eu := SFlowExtendedUserFlow{}
+       var fdf SFlowFlowDataFormat
+       var srcUserLen uint32
+       var srcUserLenWithPad int
+       var srcUserBytes []byte
+       var dstUserLen uint32
+       var dstUserLenWithPad int
+       var dstUserBytes []byte
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       eu.EnterpriseID, eu.Format = fdf.decode()
+       *data, eu.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, eu.SourceCharSet = (*data)[4:], SFlowCharSet(binary.BigEndian.Uint32((*data)[:4]))
+       *data, srcUserLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       srcUserLenWithPad = int(srcUserLen + ((4 - srcUserLen) % 4))
+       *data, srcUserBytes = (*data)[srcUserLenWithPad:], (*data)[:srcUserLenWithPad]
+       eu.SourceUserID = string(srcUserBytes[:srcUserLen])
+       *data, eu.DestinationCharSet = (*data)[4:], SFlowCharSet(binary.BigEndian.Uint32((*data)[:4]))
+       *data, dstUserLen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       dstUserLenWithPad = int(dstUserLen + ((4 - dstUserLen) % 4))
+       *data, dstUserBytes = (*data)[dstUserLenWithPad:], (*data)[:dstUserLenWithPad]
+       eu.DestinationUserID = string(dstUserBytes[:dstUserLen])
+       return eu, nil
+}
+
+// **************************************************
+//  Packet IP version 4 Record
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                     Length                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    Protocol                   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  Source IPv4                  |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                Destination IPv4               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   Source Port                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                Destionation Port              |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   TCP Flags                   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                      TOS                      |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowIpv4Record struct {
+       // The length of the IP packet excluding ower layer encapsulations
+       Length uint32
+       // IP Protocol type (for example, TCP = 6, UDP = 17)
+       Protocol uint32
+       // Source IP Address
+       IPSrc net.IP
+       // Destination IP Address
+       IPDst net.IP
+       // TCP/UDP source port number or equivalent
+       PortSrc uint32
+       // TCP/UDP destination port number or equivalent
+       PortDst uint32
+       // TCP flags
+       TCPFlags uint32
+       // IP type of service
+       TOS uint32
+}
+
+func decodeSFlowIpv4Record(data *[]byte) (SFlowIpv4Record, error) {
+       si := SFlowIpv4Record{}
+
+       *data, si.Length = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.Protocol = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.IPSrc = (*data)[4:], net.IP((*data)[:4])
+       *data, si.IPDst = (*data)[4:], net.IP((*data)[:4])
+       *data, si.PortSrc = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.PortDst = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.TCPFlags = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.TOS = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       return si, nil
+}
+
+// **************************************************
+//  Packet IP version 6 Record
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                     Length                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    Protocol                   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  Source IPv4                  |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                Destination IPv4               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   Source Port                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                Destionation Port              |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   TCP Flags                   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    Priority                   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowIpv6Record struct {
+       // The length of the IP packet excluding ower layer encapsulations
+       Length uint32
+       // IP Protocol type (for example, TCP = 6, UDP = 17)
+       Protocol uint32
+       // Source IP Address
+       IPSrc net.IP
+       // Destination IP Address
+       IPDst net.IP
+       // TCP/UDP source port number or equivalent
+       PortSrc uint32
+       // TCP/UDP destination port number or equivalent
+       PortDst uint32
+       // TCP flags
+       TCPFlags uint32
+       // IP priority
+       Priority uint32
+}
+
+func decodeSFlowIpv6Record(data *[]byte) (SFlowIpv6Record, error) {
+       si := SFlowIpv6Record{}
+
+       *data, si.Length = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.Protocol = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.IPSrc = (*data)[16:], net.IP((*data)[:16])
+       *data, si.IPDst = (*data)[16:], net.IP((*data)[:16])
+       *data, si.PortSrc = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.PortDst = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.TCPFlags = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, si.Priority = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       return si, nil
+}
+
+// **************************************************
+//  Extended IPv4 Tunnel Egress
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /           Packet IP version 4 Record          /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedIpv4TunnelEgressRecord struct {
+       SFlowBaseFlowRecord
+       SFlowIpv4Record SFlowIpv4Record
+}
+
+func decodeExtendedIpv4TunnelEgress(data *[]byte) (SFlowExtendedIpv4TunnelEgressRecord, error) {
+       rec := SFlowExtendedIpv4TunnelEgressRecord{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       rec.EnterpriseID, rec.Format = fdf.decode()
+       *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       rec.SFlowIpv4Record, _ = decodeSFlowIpv4Record(data)
+
+       return rec, nil
+}
+
+// **************************************************
+//  Extended IPv4 Tunnel Ingress
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /           Packet IP version 4 Record          /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedIpv4TunnelIngressRecord struct {
+       SFlowBaseFlowRecord
+       SFlowIpv4Record SFlowIpv4Record
+}
+
+func decodeExtendedIpv4TunnelIngress(data *[]byte) (SFlowExtendedIpv4TunnelIngressRecord, error) {
+       rec := SFlowExtendedIpv4TunnelIngressRecord{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       rec.EnterpriseID, rec.Format = fdf.decode()
+       *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       rec.SFlowIpv4Record, _ = decodeSFlowIpv4Record(data)
+
+       return rec, nil
+}
+
+// **************************************************
+//  Extended IPv6 Tunnel Egress
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /           Packet IP version 6 Record          /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedIpv6TunnelEgressRecord struct {
+       SFlowBaseFlowRecord
+       SFlowIpv6Record
+}
+
+func decodeExtendedIpv6TunnelEgress(data *[]byte) (SFlowExtendedIpv6TunnelEgressRecord, error) {
+       rec := SFlowExtendedIpv6TunnelEgressRecord{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       rec.EnterpriseID, rec.Format = fdf.decode()
+       *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       rec.SFlowIpv6Record, _ = decodeSFlowIpv6Record(data)
+
+       return rec, nil
+}
+
+// **************************************************
+//  Extended IPv6 Tunnel Ingress
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /           Packet IP version 6 Record          /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedIpv6TunnelIngressRecord struct {
+       SFlowBaseFlowRecord
+       SFlowIpv6Record
+}
+
+func decodeExtendedIpv6TunnelIngress(data *[]byte) (SFlowExtendedIpv6TunnelIngressRecord, error) {
+       rec := SFlowExtendedIpv6TunnelIngressRecord{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       rec.EnterpriseID, rec.Format = fdf.decode()
+       *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       rec.SFlowIpv6Record, _ = decodeSFlowIpv6Record(data)
+
+       return rec, nil
+}
+
+// **************************************************
+//  Extended Decapsulate Egress
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               Inner Header Offset             |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedDecapsulateEgressRecord struct {
+       SFlowBaseFlowRecord
+       InnerHeaderOffset uint32
+}
+
+func decodeExtendedDecapsulateEgress(data *[]byte) (SFlowExtendedDecapsulateEgressRecord, error) {
+       rec := SFlowExtendedDecapsulateEgressRecord{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       rec.EnterpriseID, rec.Format = fdf.decode()
+       *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, rec.InnerHeaderOffset = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       return rec, nil
+}
+
+// **************************************************
+//  Extended Decapsulate Ingress
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |               Inner Header Offset             |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedDecapsulateIngressRecord struct {
+       SFlowBaseFlowRecord
+       InnerHeaderOffset uint32
+}
+
+func decodeExtendedDecapsulateIngress(data *[]byte) (SFlowExtendedDecapsulateIngressRecord, error) {
+       rec := SFlowExtendedDecapsulateIngressRecord{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       rec.EnterpriseID, rec.Format = fdf.decode()
+       *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, rec.InnerHeaderOffset = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       return rec, nil
+}
+
+// **************************************************
+//  Extended VNI Egress
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                       VNI                     |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedVniEgressRecord struct {
+       SFlowBaseFlowRecord
+       VNI uint32
+}
+
+func decodeExtendedVniEgress(data *[]byte) (SFlowExtendedVniEgressRecord, error) {
+       rec := SFlowExtendedVniEgressRecord{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       rec.EnterpriseID, rec.Format = fdf.decode()
+       *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, rec.VNI = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       return rec, nil
+}
+
+// **************************************************
+//  Extended VNI Ingress
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  record length                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                       VNI                     |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+type SFlowExtendedVniIngressRecord struct {
+       SFlowBaseFlowRecord
+       VNI uint32
+}
+
+func decodeExtendedVniIngress(data *[]byte) (SFlowExtendedVniIngressRecord, error) {
+       rec := SFlowExtendedVniIngressRecord{}
+       var fdf SFlowFlowDataFormat
+
+       *data, fdf = (*data)[4:], SFlowFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       rec.EnterpriseID, rec.Format = fdf.decode()
+       *data, rec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, rec.VNI = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       return rec, nil
+}
+
+// **************************************************
+//  Counter Record
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  counter length               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /                   counter data                /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowBaseCounterRecord struct {
+       EnterpriseID   SFlowEnterpriseID
+       Format         SFlowCounterRecordType
+       FlowDataLength uint32
+}
+
+func (bcr SFlowBaseCounterRecord) GetType() SFlowCounterRecordType {
+       switch bcr.Format {
+       case SFlowTypeGenericInterfaceCounters:
+               return SFlowTypeGenericInterfaceCounters
+       case SFlowTypeEthernetInterfaceCounters:
+               return SFlowTypeEthernetInterfaceCounters
+       case SFlowTypeTokenRingInterfaceCounters:
+               return SFlowTypeTokenRingInterfaceCounters
+       case SFlowType100BaseVGInterfaceCounters:
+               return SFlowType100BaseVGInterfaceCounters
+       case SFlowTypeVLANCounters:
+               return SFlowTypeVLANCounters
+       case SFlowTypeProcessorCounters:
+               return SFlowTypeProcessorCounters
+
+       }
+       unrecognized := fmt.Sprint("Unrecognized counter record type:", bcr.Format)
+       panic(unrecognized)
+}
+
+// **************************************************
+//  Counter Record
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  counter length               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    IfIndex                    |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    IfType                     |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   IfSpeed                     |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   IfDirection                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    IfStatus                   |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   IFInOctets                  |
+//  |                                               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   IfInUcastPkts               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  IfInMulticastPkts            |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  IfInBroadcastPkts            |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    IfInDiscards               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    InInErrors                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  IfInUnknownProtos            |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   IfOutOctets                 |
+//  |                                               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   IfOutUcastPkts              |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  IfOutMulticastPkts           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  IfOutBroadcastPkts           |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   IfOutDiscards               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    IfOUtErrors                |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                 IfPromiscouousMode            |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowGenericInterfaceCounters struct {
+       SFlowBaseCounterRecord
+       IfIndex            uint32
+       IfType             uint32
+       IfSpeed            uint64
+       IfDirection        uint32
+       IfStatus           uint32
+       IfInOctets         uint64
+       IfInUcastPkts      uint32
+       IfInMulticastPkts  uint32
+       IfInBroadcastPkts  uint32
+       IfInDiscards       uint32
+       IfInErrors         uint32
+       IfInUnknownProtos  uint32
+       IfOutOctets        uint64
+       IfOutUcastPkts     uint32
+       IfOutMulticastPkts uint32
+       IfOutBroadcastPkts uint32
+       IfOutDiscards      uint32
+       IfOutErrors        uint32
+       IfPromiscuousMode  uint32
+}
+
+func decodeGenericInterfaceCounters(data *[]byte) (SFlowGenericInterfaceCounters, error) {
+       gic := SFlowGenericInterfaceCounters{}
+       var cdf SFlowCounterDataFormat
+
+       *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       gic.EnterpriseID, gic.Format = cdf.decode()
+       *data, gic.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfIndex = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfType = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfSpeed = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+       *data, gic.IfDirection = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfStatus = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfInOctets = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+       *data, gic.IfInUcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfInMulticastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfInBroadcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfInDiscards = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfInErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfInUnknownProtos = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfOutOctets = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+       *data, gic.IfOutUcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfOutMulticastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfOutBroadcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfOutDiscards = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfOutErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, gic.IfPromiscuousMode = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       return gic, nil
+}
+
+// **************************************************
+//  Counter Record
+// **************************************************
+
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  counter length               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  /                   counter data                /
+//  /                                               /
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowEthernetCounters struct {
+       SFlowBaseCounterRecord
+       AlignmentErrors           uint32
+       FCSErrors                 uint32
+       SingleCollisionFrames     uint32
+       MultipleCollisionFrames   uint32
+       SQETestErrors             uint32
+       DeferredTransmissions     uint32
+       LateCollisions            uint32
+       ExcessiveCollisions       uint32
+       InternalMacTransmitErrors uint32
+       CarrierSenseErrors        uint32
+       FrameTooLongs             uint32
+       InternalMacReceiveErrors  uint32
+       SymbolErrors              uint32
+}
+
+func decodeEthernetCounters(data *[]byte) (SFlowEthernetCounters, error) {
+       ec := SFlowEthernetCounters{}
+       var cdf SFlowCounterDataFormat
+
+       *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       ec.EnterpriseID, ec.Format = cdf.decode()
+       *data, ec.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.AlignmentErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.FCSErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.SingleCollisionFrames = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.MultipleCollisionFrames = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.SQETestErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.DeferredTransmissions = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.LateCollisions = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.ExcessiveCollisions = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.InternalMacTransmitErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.CarrierSenseErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.FrameTooLongs = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.InternalMacReceiveErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, ec.SymbolErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       return ec, nil
+}
+
+// **************************************************
+//  Processor Counter Record
+// **************************************************
+//  0                      15                      31
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |      20 bit Interprise (0)     |12 bit format |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                  counter length               |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    FiveSecCpu                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    OneMinCpu                  |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    GiveMinCpu                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                   TotalMemory                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+//  |                    FreeMemory                 |
+//  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+type SFlowProcessorCounters struct {
+       SFlowBaseCounterRecord
+       FiveSecCpu  uint32 // 5 second average CPU utilization
+       OneMinCpu   uint32 // 1 minute average CPU utilization
+       FiveMinCpu  uint32 // 5 minute average CPU utilization
+       TotalMemory uint64 // total memory (in bytes)
+       FreeMemory  uint64 // free memory (in bytes)
+}
+
+func decodeProcessorCounters(data *[]byte) (SFlowProcessorCounters, error) {
+       pc := SFlowProcessorCounters{}
+       var cdf SFlowCounterDataFormat
+       var high32, low32 uint32
+
+       *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+       pc.EnterpriseID, pc.Format = cdf.decode()
+       *data, pc.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+       *data, pc.FiveSecCpu = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, pc.OneMinCpu = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, pc.FiveMinCpu = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, high32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, low32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       pc.TotalMemory = (uint64(high32) << 32) + uint64(low32)
+       *data, high32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       *data, low32 = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+       pc.FreeMemory = (uint64(high32)) + uint64(low32)
+
+       return pc, nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/sflow_test.go b/vendor/github.com/google/gopacket/layers/sflow_test.go
new file mode 100644 (file)
index 0000000..ca0f2ab
--- /dev/null
@@ -0,0 +1,1246 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "net"
+       "reflect"
+       "testing"
+)
+
+// Test packet collected from live network. See the test below for contents
+var SFlowTestPacket1 = []byte{
+       0x84, 0x2b, 0x2b, 0x16, 0x8b, 0x62, 0xf0, 0x50, 0x56, 0x85, 0x3a, 0xfd, 0x08, 0x00, 0x45, 0x00,
+       0x05, 0xbc, 0x9c, 0x04, 0x40, 0x00, 0xff, 0x11, 0xc7, 0x00, 0x0a, 0x01, 0xff, 0x0e, 0x0a, 0x01,
+       0x00, 0x1b, 0xc7, 0x57, 0x18, 0xc7, 0x05, 0xa8, 0x22, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+       0x00, 0x01, 0x0a, 0x01, 0xf8, 0x16, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x9d, 0xfb, 0x40, 0x49,
+       0xc6, 0xcd, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x26,
+       0x27, 0xe8, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x3e, 0x80, 0x50, 0xbd, 0xe5, 0x80, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0xd2, 0x00, 0x00,
+       0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6d,
+       0xf0, 0x40, 0x08, 0x00, 0x45, 0x00, 0x05, 0xc0, 0x6b, 0xaa, 0x40, 0x00, 0x40, 0x06, 0x8f, 0x41,
+       0x0a, 0x01, 0x0e, 0x16, 0x36, 0xf0, 0xeb, 0x45, 0x76, 0xfd, 0x00, 0x50, 0xca, 0x77, 0xef, 0x96,
+       0xfc, 0x28, 0x63, 0x40, 0x50, 0x10, 0x00, 0x3c, 0x64, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+       0xf4, 0x00, 0x00, 0x02, 0x77, 0x00, 0x00, 0x00, 0xfd, 0x3b, 0x8c, 0xe7, 0x04, 0x4a, 0x2d, 0xb2,
+       0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x48, 0xcc, 0x11, 0x0d, 0xe3, 0x00,
+       0x26, 0x85, 0x30, 0x00, 0x00, 0x07, 0x66, 0x00, 0x02, 0xd0, 0x8a, 0x00, 0x02, 0xce, 0xf0, 0x00,
+       0x29, 0x7e, 0x80, 0x00, 0x02, 0xd0, 0x98, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x26, 0x85, 0x30, 0x00,
+       0x00, 0x00, 0xf4, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+       0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5e, 0x5c, 0x1e, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+       0x07, 0xd0, 0xb1, 0x2f, 0xa2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a,
+       0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc,
+       0x9f, 0xfd, 0x40, 0x00, 0x40, 0x06, 0x6a, 0xfa, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x08, 0x13,
+       0x23, 0x84, 0xb7, 0x22, 0x8a, 0xc9, 0x50, 0xb5, 0x4e, 0x10, 0x2a, 0x87, 0x80, 0x10, 0x06, 0x01,
+       0x10, 0xa6, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x07, 0x99, 0x3a, 0xd8, 0x5b,
+       0x01, 0x46, 0x09, 0x00, 0x0c, 0x00, 0x0c, 0x3c, 0xac, 0x4a, 0x1b, 0x06, 0x04, 0x78, 0x78, 0x4e,
+       0xc2, 0x05, 0x46, 0x43, 0x06, 0x04, 0x78, 0x78, 0xee, 0x9c, 0x00, 0x41, 0xef, 0x05, 0x81, 0x32,
+       0x1b, 0x06, 0x04, 0x78, 0x78, 0x56, 0x72, 0x05, 0x4e, 0x92, 0x00, 0x96, 0x39, 0x00, 0xea, 0x3f,
+       0x01, 0x15, 0xa3, 0x08, 0x04, 0x42, 0x6a, 0x82, 0x87, 0x08, 0x05, 0xcc, 0x00, 0x04, 0x00, 0x00,
+       0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5a,
+       0xcd, 0xd0, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x07, 0xd0, 0x95, 0x67, 0xe1, 0x30, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x46, 0x00, 0x00,
+       0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f,
+       0x11, 0x28, 0x08, 0x00, 0x45, 0x00, 0x04, 0x34, 0xdb, 0x36, 0x40, 0x00, 0x40, 0x06, 0x38, 0xac,
+       0x0a, 0x01, 0x0e, 0x11, 0x0a, 0x01, 0x00, 0xcf, 0x23, 0x84, 0xa0, 0x3f, 0x3c, 0xce, 0xd5, 0x4a,
+       0x72, 0x0b, 0x5d, 0x1a, 0x80, 0x10, 0x06, 0x01, 0x8a, 0x50, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a,
+       0xef, 0x1f, 0xa2, 0xba, 0xe6, 0xfa, 0xae, 0xb3, 0xfe, 0xcf, 0x00, 0x19, 0xcf, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x01, 0xb9, 0x79, 0xdd, 0x42, 0x00, 0x00, 0x02, 0x84, 0x9b, 0xa9, 0x02, 0xe2, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x06, 0x32, 0x39, 0x35, 0x34, 0x33, 0x36, 0x00, 0x00, 0x02, 0x70, 0xcd,
+       0x16, 0x40, 0xa6, 0x98, 0x88, 0x24, 0x06, 0x50, 0xb0, 0xf4, 0xee, 0x03, 0xa6, 0xfa, 0x87, 0xaf,
+       0xc1, 0x99, 0x52, 0x0d, 0x07, 0xa8, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+       0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x02, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x20, 0xf2, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00,
+       0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00,
+       0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x54, 0x0b, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+       0x00, 0x03, 0x00, 0x01, 0x29, 0x82, 0x6d, 0xb0, 0x6c, 0x0b, 0xcb, 0x0d, 0xdd, 0x96, 0x00, 0x06,
+       0xa8, 0xc6, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x34, 0x02, 0x35, 0x58, 0x7c, 0x9e, 0x56, 0x64, 0x25, 0x71, 0x00, 0x70,
+       0x5a, 0xc4, 0x00, 0x09, 0x08, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5e, 0x5c, 0x1f, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+       0x07, 0xd0, 0xb1, 0x2f, 0xaa, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a,
+       0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc,
+       0x0f, 0xba, 0x40, 0x00, 0x40, 0x06, 0xf4, 0x3f, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x0f, 0x11,
+       0x23, 0x84, 0xcd, 0xc0, 0xf4, 0x0e, 0x90, 0x23, 0xd7, 0x32, 0x8b, 0x31, 0x80, 0x10, 0x00, 0x1d,
+       0x6b, 0x12, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x28, 0xef, 0x1f, 0xec, 0x76,
+       0xaa, 0x25, 0x01, 0x04, 0xc0, 0xac, 0xfe, 0x25, 0x01, 0x8e, 0x25, 0x01, 0x16, 0xc7, 0x28, 0xfe,
+       0x7e, 0x70, 0xfe, 0x7e, 0x70, 0x52, 0x7e, 0x70, 0x15, 0x9b, 0xfe, 0x35, 0x01, 0xfe, 0x35, 0x01,
+       0x42, 0x35, 0x01, 0xfe, 0x95, 0x77, 0xfe, 0x95, 0x77, 0xfe, 0x95, 0x77, 0x52, 0x95, 0x77, 0x00,
+       0xd2, 0xfe, 0x70, 0x02, 0x92, 0x70, 0x02, 0x16, 0x60, 0x22, 0x00, 0x7e, 0xb2, 0x15, 0x00, 0x00,
+       0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5a,
+       0xcd, 0xd1, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x07, 0xd0, 0x95, 0x67, 0xe9, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00,
+       0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0xb8, 0xca, 0x3a, 0x6f,
+       0x11, 0x28, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc, 0xfe, 0x05, 0x40, 0x00, 0x40, 0x06, 0x06, 0xf4,
+       0x0a, 0x01, 0x0e, 0x11, 0x0a, 0x01, 0x0e, 0x10, 0x23, 0x84, 0xfa, 0x29, 0xae, 0xd4, 0x95, 0x03,
+       0x99, 0xb8, 0x77, 0xd0, 0x80, 0x10, 0x00, 0x1d, 0x6f, 0x4f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a,
+       0xef, 0x1f, 0xa2, 0xcc, 0xef, 0x1f, 0xf4, 0x2c, 0xfe, 0xdb, 0x05, 0xa1, 0xdb, 0x04, 0x9e, 0xc0,
+       0xfe, 0x30, 0x08, 0xb2, 0x30, 0x08, 0xda, 0x2b, 0xbd, 0xfe, 0x2a, 0x01, 0xfe, 0x2a, 0x01, 0x21,
+       0x2a, 0x00, 0xb2, 0xfe, 0x57, 0xb0, 0xb6, 0x57, 0xb0, 0x14, 0x74, 0xf4, 0xf0, 0x4c, 0x05, 0x68,
+       0xfe, 0x54, 0x02, 0xfe, 0x54, 0x02, 0xd2, 0x54, 0x02, 0x00, 0xbe, 0xfe, 0x32, 0x0f, 0xb6, 0x32,
+       0x0f, 0x14, 0x2e, 0x16, 0xaf, 0x47, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+       0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x01, 0x5e, 0x5c, 0x20, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+       0x07, 0xd0, 0xb1, 0x2f, 0xb2, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x42, 0x3c, 0x8a,
+       0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x00, 0x34,
+       0xa8, 0x23, 0x40, 0x00, 0x40, 0x06, 0x61, 0x7f, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x0f, 0x10,
+       0x97, 0x91, 0x23, 0x84, 0x24, 0xfa, 0x91, 0xf7, 0xb4, 0xe8, 0xf3, 0x2d, 0x80, 0x10, 0x00, 0xab,
+       0x7b, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x36, 0xef, 0x1f, 0xdc, 0xde,
+       0x00, 0x00, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+// Test collected from the SFlow reference agent. Contains dummy data for several record types
+// that wern't available on an actual network for sampling.
+var SFlowTestPacket2 = []byte{
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
+       0x04, 0x88, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, 0x38, 0x63, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
+       0x00, 0x01, 0xdc, 0xb8, 0x18, 0xc7, 0x04, 0x74, 0x02, 0x88, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+       0x00, 0x01, 0xc0, 0xa8, 0x5b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x3a, 0x00, 0x00,
+       0xcb, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x54, 0x00, 0x02,
+       0x1f, 0x6e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x1f, 0x6e, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+       0x03, 0xed, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x68, 0x74,
+       0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f,
+       0x72, 0x67, 0x00, 0x00, 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e, 0x73, 0x66, 0x6c, 0x6f,
+       0x77, 0x2e, 0x6f, 0x72, 0x67, 0x06, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00,
+       0x00, 0x6a, 0x00, 0x00, 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x75, 0x73, 0x65,
+       0x72, 0xdc, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e,
+       0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x00,
+       0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00, 0xfd, 0xe9, 0x00, 0x00,
+       0x00, 0x7b, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+       0x00, 0x03, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00, 0x56, 0xce, 0x00, 0x00,
+       0x82, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00,
+       0x03, 0x78, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
+       0x00, 0x0d, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x42, 0x00, 0x0c,
+       0x29, 0x67, 0xa0, 0xe5, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09, 0x08, 0x00, 0x45, 0x10, 0x00, 0x34,
+       0x92, 0xc3, 0x40, 0x00, 0x40, 0x06, 0x70, 0x8d, 0xc0, 0xa8, 0x5b, 0x01, 0xc0, 0xa8, 0x5b, 0x11,
+       0xd3, 0xdd, 0x00, 0x16, 0xe3, 0x2e, 0x84, 0x77, 0x13, 0x6d, 0xc5, 0x53, 0x80, 0x10, 0x1f, 0xf7,
+       0xe7, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x2e, 0xc6, 0x70, 0x3a, 0x00, 0x0f, 0x84, 0x7a,
+       0xbc, 0xd2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x90, 0x00, 0x02, 0x1f, 0x6f, 0x00, 0x00,
+       0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x1f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff,
+       0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0xed, 0x00, 0x00,
+       0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x00, 0x00,
+       0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72,
+       0x67, 0x03, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00,
+       0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x77, 0x00, 0x00,
+       0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+       0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00,
+       0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00, 0xfd, 0xe9, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00,
+       0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+       0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+       0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00, 0x56, 0xce, 0x00, 0x00, 0x82, 0x35, 0x00, 0x00,
+       0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x03, 0x78, 0x00, 0x00,
+       0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00,
+       0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+       0x01, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09,
+       0x00, 0x0c, 0x29, 0x67, 0xa0, 0xe5, 0x08, 0x00, 0x45, 0x10, 0x01, 0x74, 0xbb, 0xfa, 0x40, 0x00,
+       0x40, 0x06, 0x46, 0x16, 0xc0, 0xa8, 0x5b, 0x11, 0xc0, 0xa8, 0x5b, 0x01, 0x00, 0x16, 0xd3, 0xdd,
+       0x13, 0x6d, 0xc5, 0x53, 0xe3, 0x2e, 0x84, 0x77, 0x80, 0x18, 0x01, 0x10, 0x38, 0xca, 0x00, 0x00,
+       0x01, 0x01, 0x08, 0x0a, 0x00, 0x0f, 0x84, 0x7d, 0x2e, 0xc6, 0x70, 0x3a, 0xe3, 0x92, 0x97, 0x1a,
+       0x67, 0x3b, 0xac, 0xec, 0xfa, 0x43, 0x71, 0x5e, 0x36, 0xa1, 0x0a, 0xc6, 0x1a, 0x6a, 0xed, 0x08,
+       0xac, 0xf4, 0xbe, 0xd8, 0x36, 0x59, 0xf6, 0xe2, 0x3d, 0x34, 0x26, 0xf2, 0x42, 0xbd, 0x32, 0xd3,
+       0x37, 0x52, 0xb8, 0xf4, 0x38, 0xf0, 0xf4, 0xeb, 0x76, 0x3b, 0xda, 0x23, 0xf1, 0x92, 0x96, 0xca,
+       0xbb, 0x9c, 0x20, 0x0a, 0x38, 0x37, 0x6f, 0xd9, 0x26, 0xe6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+       0x01, 0x54, 0x00, 0x02, 0x1f, 0x70, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02,
+       0x1f, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00,
+       0x00, 0x04, 0x00, 0x00, 0x03, 0xed, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+       0x00, 0x14, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c,
+       0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x00, 0x00, 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e,
+       0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0xff, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00,
+       0x00, 0x2c, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+       0x20, 0x75, 0x73, 0x65, 0x72, 0x77, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65,
+       0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00,
+       0x03, 0xeb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00,
+       0xfd, 0xe9, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+       0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00,
+       0x03, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00,
+       0x56, 0xce, 0x00, 0x00, 0x82, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+       0x03, 0x09, 0x00, 0x00, 0x03, 0x78, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+       0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+       0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+       0x00, 0x42, 0x00, 0x0c, 0x29, 0x67, 0xa0, 0xe5, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09, 0x08, 0x00,
+       0x45, 0x10, 0x00, 0x34, 0x65, 0x7d, 0x40, 0x00, 0x40, 0x06, 0x9d, 0xd3, 0xc0, 0xa8, 0x5b, 0x01,
+       0xc0, 0xa8, 0x5b, 0x11, 0xd3, 0xdd, 0x00, 0x16, 0xe3, 0x2e, 0x84, 0x77, 0x13, 0x6d, 0xc6, 0x93,
+       0x80, 0x10, 0x1f, 0xec, 0xe6, 0x43, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x2e, 0xc6, 0x70, 0x3c,
+       0x00, 0x0f, 0x84, 0x7d, 0x00, 0x50,
+}
+
+// processor counter sample
+var SFlowTestPacket3 = []byte{
+       0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+       0x0a, 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, 0x64,
+       0x00, 0x01, 0x78, 0xe0, 0x73, 0x03, 0x48, 0x78,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04,
+       0x00, 0x00, 0x00, 0x34, 0x00, 0x01, 0x78, 0xe0,
+       0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xe9,
+       0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x05, 0xaa,
+       0x00, 0x00, 0x05, 0x5a, 0x00, 0x00, 0x05, 0x32,
+       0x00, 0x00, 0x00, 0x00, 0xe7, 0x8d, 0x70, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x55, 0xe7, 0x70, 0x00,
+}
+
+// expanded flow sample - extended switch flow record
+var SFlowTestPacket4 = []byte{
+       0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+       0xc0, 0xa8, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x23,
+       0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00,
+       0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x56, 0x23,
+       0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xe9,
+       0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03,
+       0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05,
+       0xff, 0xff, 0xff, 0xff,
+}
+
+// expanded flow sample - extended router flow record
+var SFlowTestPacket5 = []byte{
+       0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+       0xc0, 0xa8, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x01, 0x23,
+       0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00,
+       0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x56, 0x02,
+       0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xea,
+       0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
+       0xc0, 0xa8, 0x01, 0x21, 0xff, 0xff, 0xff, 0xff,
+       0xff, 0xff, 0xff, 0x80,
+}
+
+// expanded flow sample - Ipv4 Tunnel Ingress record
+var SFlowTestPacket6 = []byte{
+       0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x01, 0xbd, 0x50,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48,
+       0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00,
+       0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f,
+       0xc0, 0xa8, 0x00, 0x54, 0xc0, 0xa8, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+// expanded flow sample - Ipv4 Tunnel Egress record
+var SFlowTestPacket7 = []byte{
+       0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x42, 0x68,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48,
+       0x00, 0x00, 0x00, 0x12, 0x02, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c,
+       0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x00, 0x54,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00,
+}
+
+// expanded flow sample - extended router flow record IPv6 next hop
+var SFlowTestPacket8 = []byte{
+       0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+       0xc0, 0xa8, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x01, 0x23,
+       0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00,
+       0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x56, 0x02,
+       0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xea,
+       0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x02,
+       0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+}
+
+func TestDecodeUDPSFlow(t *testing.T) {
+       p := gopacket.NewPacket(SFlowTestPacket1, LayerTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t)
+       if got, ok := p.TransportLayer().(*UDP); ok {
+               want := &UDP{
+                       BaseLayer: BaseLayer{SFlowTestPacket1[34:42], SFlowTestPacket1[42:]},
+                       sPort:     []byte{199, 87},
+                       dPort:     []byte{24, 199},
+                       SrcPort:   51031,
+                       DstPort:   6343,
+                       Checksum:  8763,
+                       Length:    1448,
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("UDP layer mismatch, \nwant  %#v\ngot %#v\n", want, got)
+               }
+       } else {
+               t.Error("Transport layer packet not UDP")
+       }
+}
+
+func TestDecodeSFlowDatagram(t *testing.T) {
+       p := gopacket.NewPacket(SFlowTestPacket1, LayerTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t)
+       if got, ok := p.ApplicationLayer().(*SFlowDatagram); ok {
+               want := &SFlowDatagram{
+                       DatagramVersion: uint32(5),
+                       AgentAddress:    []byte{0xa, 0x1, 0xf8, 0x16},
+                       SubAgentID:      uint32(17),
+                       SequenceNumber:  uint32(40443),
+                       AgentUptime:     uint32(1078576845),
+                       SampleCount:     uint32(7),
+                       FlowSamples: []SFlowFlowSample{
+                               SFlowFlowSample{
+                                       EnterpriseID:    0x0,
+                                       Format:          0x1,
+                                       SampleLength:    0xd0,
+                                       SequenceNumber:  0x2627e8,
+                                       SourceIDClass:   0x0,
+                                       SourceIDIndex:   0x213,
+                                       SamplingRate:    0x3e80,
+                                       SamplePool:      0x50bde580,
+                                       Dropped:         0x0,
+                                       InputInterface:  0x213,
+                                       OutputInterface: 0x0,
+                                       RecordCount:     0x2,
+                                       Records: []SFlowRecord{
+                                               SFlowRawPacketFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 0x90,
+                                                       },
+                                                       HeaderProtocol: 0x1,
+                                                       FrameLength:    0x5d2,
+                                                       PayloadRemoved: 0x4,
+                                                       HeaderLength:   0x80,
+                                                       Header:         gopacket.NewPacket(SFlowTestPacket1[134:262], LayerTypeEthernet, gopacket.Default),
+                                               },
+                                               SFlowExtendedSwitchFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x3e9,
+                                                               FlowDataLength: 0x10,
+                                                       },
+                                                       IncomingVLAN:         0x202,
+                                                       IncomingVLANPriority: 0x0,
+                                                       OutgoingVLAN:         0x0,
+                                                       OutgoingVLANPriority: 0x0,
+                                               },
+                                       },
+                               },
+                               SFlowFlowSample{
+                                       EnterpriseID:    0x0,
+                                       Format:          0x1,
+                                       SampleLength:    0xd0,
+                                       SequenceNumber:  0x15e5c1e,
+                                       SourceIDClass:   0x0,
+                                       SourceIDIndex:   0x257,
+                                       SamplingRate:    0x7d0,
+                                       SamplePool:      0xb12fa290,
+                                       Dropped:         0x0,
+                                       InputInterface:  0x257,
+                                       OutputInterface: 0x0,
+                                       RecordCount:     0x2,
+                                       Records: []SFlowRecord{
+                                               SFlowRawPacketFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 0x90,
+                                                       },
+                                                       HeaderProtocol: 0x1,
+                                                       FrameLength:    0x5ee,
+                                                       PayloadRemoved: 0x4,
+                                                       HeaderLength:   0x80,
+                                                       Header:         gopacket.NewPacket(SFlowTestPacket1[350:478], LayerTypeEthernet, gopacket.Default),
+                                               },
+                                               SFlowExtendedSwitchFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x3e9,
+                                                               FlowDataLength: 0x10,
+                                                       },
+                                                       IncomingVLAN:         0x202,
+                                                       IncomingVLANPriority: 0x0,
+                                                       OutgoingVLAN:         0x0,
+                                                       OutgoingVLANPriority: 0x0,
+                                               },
+                                       },
+                               },
+                               SFlowFlowSample{
+                                       EnterpriseID:    0x0,
+                                       Format:          0x1,
+                                       SampleLength:    0xd0,
+                                       SequenceNumber:  0x15acdd0,
+                                       SourceIDClass:   0x0,
+                                       SourceIDIndex:   0x255,
+                                       SamplingRate:    0x7d0,
+                                       SamplePool:      0x9567e130,
+                                       Dropped:         0x0,
+                                       InputInterface:  0x255,
+                                       OutputInterface: 0x0,
+                                       RecordCount:     0x2,
+                                       Records: []SFlowRecord{
+                                               SFlowRawPacketFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 0x90,
+                                                       },
+                                                       HeaderProtocol: 0x1,
+                                                       FrameLength:    0x446,
+                                                       PayloadRemoved: 0x4,
+                                                       HeaderLength:   0x80,
+                                                       Header:         gopacket.NewPacket(SFlowTestPacket1[566:694], LayerTypeEthernet, gopacket.Default),
+                                               },
+                                               SFlowExtendedSwitchFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x3e9,
+                                                               FlowDataLength: 0x10,
+                                                       },
+                                                       IncomingVLAN:         0x202,
+                                                       IncomingVLANPriority: 0x0,
+                                                       OutgoingVLAN:         0x0,
+                                                       OutgoingVLANPriority: 0x0,
+                                               },
+                                       },
+                               },
+                               SFlowFlowSample{
+                                       EnterpriseID:    0x0,
+                                       Format:          0x1,
+                                       SampleLength:    0xd0,
+                                       SequenceNumber:  0x15e5c1f,
+                                       SourceIDClass:   0x0,
+                                       SourceIDIndex:   0x257,
+                                       SamplingRate:    0x7d0,
+                                       SamplePool:      0xb12faa60,
+                                       Dropped:         0x0,
+                                       InputInterface:  0x257,
+                                       OutputInterface: 0x0,
+                                       RecordCount:     0x2,
+                                       Records: []SFlowRecord{
+                                               SFlowRawPacketFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 0x90,
+                                                       },
+                                                       HeaderProtocol: 0x1,
+                                                       FrameLength:    0x5ee,
+                                                       PayloadRemoved: 0x4,
+                                                       HeaderLength:   0x80,
+                                                       Header:         gopacket.NewPacket(SFlowTestPacket1[958:1086], LayerTypeEthernet, gopacket.Default),
+                                               },
+                                               SFlowExtendedSwitchFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x3e9,
+                                                               FlowDataLength: 0x10,
+                                                       },
+                                                       IncomingVLAN:         0x202,
+                                                       IncomingVLANPriority: 0x0,
+                                                       OutgoingVLAN:         0x0,
+                                                       OutgoingVLANPriority: 0x0,
+                                               },
+                                       },
+                               },
+                               SFlowFlowSample{
+                                       EnterpriseID:    0x0,
+                                       Format:          0x1,
+                                       SampleLength:    0xd0,
+                                       SequenceNumber:  0x15acdd1,
+                                       SourceIDClass:   0x0,
+                                       SourceIDIndex:   0x255,
+                                       SamplingRate:    0x7d0,
+                                       SamplePool:      0x9567e900,
+                                       Dropped:         0x0,
+                                       InputInterface:  0x255,
+                                       OutputInterface: 0x257,
+                                       RecordCount:     0x2,
+                                       Records: []SFlowRecord{
+                                               SFlowRawPacketFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 0x90,
+                                                       },
+                                                       HeaderProtocol: 0x1,
+                                                       FrameLength:    0x5ee,
+                                                       PayloadRemoved: 0x4,
+                                                       HeaderLength:   0x80,
+                                                       Header:         gopacket.NewPacket(SFlowTestPacket1[1174:1302], LayerTypeEthernet, gopacket.Default),
+                                               },
+                                               SFlowExtendedSwitchFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x3e9,
+                                                               FlowDataLength: 0x10,
+                                                       },
+                                                       IncomingVLAN:         0x202,
+                                                       IncomingVLANPriority: 0x0,
+                                                       OutgoingVLAN:         0x202,
+                                                       OutgoingVLANPriority: 0x0,
+                                               },
+                                       },
+                               },
+                               SFlowFlowSample{
+                                       EnterpriseID:    0x0,
+                                       Format:          0x1,
+                                       SampleLength:    0x94,
+                                       SequenceNumber:  0x15e5c20,
+                                       SourceIDClass:   0x0,
+                                       SourceIDIndex:   0x257,
+                                       SamplingRate:    0x7d0,
+                                       SamplePool:      0xb12fb230,
+                                       Dropped:         0x0,
+                                       InputInterface:  0x257,
+                                       OutputInterface: 0x0,
+                                       RecordCount:     0x2,
+                                       Records: []SFlowRecord{
+                                               SFlowRawPacketFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 0x54,
+                                                       },
+                                                       HeaderProtocol: 0x1,
+                                                       FrameLength:    0x46,
+                                                       PayloadRemoved: 0x4,
+                                                       HeaderLength:   0x42,
+                                                       Header:         gopacket.NewPacket(SFlowTestPacket1[1390:1458], LayerTypeEthernet, gopacket.Default),
+                                               },
+                                               SFlowExtendedSwitchFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x3e9,
+                                                               FlowDataLength: 0x10,
+                                                       },
+                                                       IncomingVLAN:         0x202,
+                                                       IncomingVLANPriority: 0x0,
+                                                       OutgoingVLAN:         0x0,
+                                                       OutgoingVLANPriority: 0x0,
+                                               },
+                                       },
+                               },
+                       },
+                       CounterSamples: []SFlowCounterSample{
+                               SFlowCounterSample{
+                                       Format:         0x2,
+                                       SampleLength:   0xa8,
+                                       SequenceNumber: 0x20f2,
+                                       SourceIDClass:  0x0,
+                                       SourceIDIndex:  0x20a,
+                                       RecordCount:    0x2,
+                                       Records: []SFlowRecord{
+                                               SFlowGenericInterfaceCounters{
+                                                       SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 0x58,
+                                                       },
+                                                       IfIndex:            0x20a,
+                                                       IfType:             0x6,
+                                                       IfSpeed:            0x2540be400,
+                                                       IfDirection:        0x1,
+                                                       IfStatus:           0x3,
+                                                       IfInOctets:         0x129826db06c0b,
+                                                       IfInUcastPkts:      0xcb0ddd96,
+                                                       IfInMulticastPkts:  0x6a8c6,
+                                                       IfInBroadcastPkts:  0x7b,
+                                                       IfInDiscards:       0x0,
+                                                       IfInErrors:         0x0,
+                                                       IfInUnknownProtos:  0x0,
+                                                       IfOutOctets:        0x340235587c9e,
+                                                       IfOutUcastPkts:     0x56642571,
+                                                       IfOutMulticastPkts: 0x705ac4,
+                                                       IfOutBroadcastPkts: 0x908f1,
+                                                       IfOutDiscards:      0x0,
+                                                       IfOutErrors:        0x0,
+                                                       IfPromiscuousMode:  0x0,
+                                               },
+                                               SFlowEthernetCounters{
+                                                       SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x2,
+                                                               FlowDataLength: 0x34,
+                                                       },
+                                                       AlignmentErrors:           0x0,
+                                                       FCSErrors:                 0x0,
+                                                       SingleCollisionFrames:     0x0,
+                                                       MultipleCollisionFrames:   0x0,
+                                                       SQETestErrors:             0x0,
+                                                       DeferredTransmissions:     0x0,
+                                                       LateCollisions:            0x0,
+                                                       ExcessiveCollisions:       0x0,
+                                                       InternalMacTransmitErrors: 0x0,
+                                                       CarrierSenseErrors:        0x0,
+                                                       FrameTooLongs:             0x0,
+                                                       InternalMacReceiveErrors:  0x0,
+                                                       SymbolErrors:              0x0,
+                                               },
+                                       },
+                               },
+                       },
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+               }
+       } else {
+               t.Error("Application layer packet not UDP")
+       }
+}
+
+func TestPacketPacket0(t *testing.T) {
+       p := gopacket.NewPacket(SFlowTestPacket2, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t)
+       if got, ok := p.ApplicationLayer().(*SFlowDatagram); ok {
+               want := &SFlowDatagram{
+                       DatagramVersion: uint32(5),
+                       AgentAddress:    []byte{192, 168, 91, 17},
+                       SubAgentID:      uint32(0),
+                       SequenceNumber:  uint32(46394),
+                       AgentUptime:     uint32(52000),
+                       SampleCount:     uint32(3),
+                       FlowSamples: []SFlowFlowSample{
+                               SFlowFlowSample{
+                                       EnterpriseID:    0x0,
+                                       Format:          0x1,
+                                       SampleLength:    340,
+                                       SequenceNumber:  139118,
+                                       SourceIDClass:   0,
+                                       SourceIDIndex:   3,
+                                       SamplingRate:    1,
+                                       SamplePool:      139118,
+                                       Dropped:         0,
+                                       InputInterface:  3,
+                                       OutputInterface: 1073741823,
+                                       RecordCount:     4,
+                                       Records: []SFlowRecord{
+                                               SFlowExtendedURLRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0,
+                                                               Format:         1005,
+                                                               FlowDataLength: 48,
+                                                       },
+                                                       Direction: SFlowURLsrc,
+                                                       URL:       "http://www.sflow.org",
+                                                       Host:      "host1.sflow.org",
+                                               },
+                                               SFlowExtendedUserFlow{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0,
+                                                               Format:         1004,
+                                                               FlowDataLength: 44,
+                                                       },
+                                                       SourceCharSet:      SFlowCSUTF8,
+                                                       SourceUserID:       "source user",
+                                                       DestinationCharSet: SFlowCSUTF8,
+                                                       DestinationUserID:  "destination user",
+                                               },
+                                               SFlowExtendedGatewayFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0,
+                                                               Format:         1003,
+                                                               FlowDataLength: 100,
+                                                       },
+                                                       NextHop:     []byte{0x0d, 0x0c, 0x0b, 0x0a},
+                                                       AS:          65001,
+                                                       SourceAS:    123,
+                                                       PeerAS:      999,
+                                                       ASPathCount: 3,
+                                                       ASPath: []SFlowASDestination{
+                                                               SFlowASDestination{
+                                                                       Type:    SFlowASSequence,
+                                                                       Count:   3,
+                                                                       Members: []uint32{123, 456, 789},
+                                                               },
+                                                               SFlowASDestination{
+                                                                       Type:    SFlowASSet,
+                                                                       Count:   3,
+                                                                       Members: []uint32{11111, 22222, 33333},
+                                                               },
+                                                               SFlowASDestination{
+                                                                       Type:    SFlowASSequence,
+                                                                       Count:   3,
+                                                                       Members: []uint32{777, 888, 999},
+                                                               },
+                                                       },
+                                                       Communities: []uint32{12, 13},
+                                                       LocalPref:   432,
+                                               },
+                                               SFlowRawPacketFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 84,
+                                                       },
+                                                       HeaderProtocol: 1,
+                                                       FrameLength:    70,
+                                                       PayloadRemoved: 4,
+                                                       HeaderLength:   0x42,
+                                                       Header:         gopacket.NewPacket(SFlowTestPacket2[350:418], LayerTypeEthernet, gopacket.Default),
+                                               },
+                                       },
+                               },
+                               SFlowFlowSample{
+                                       EnterpriseID:    0x0,
+                                       Format:          0x1,
+                                       SampleLength:    400,
+                                       SequenceNumber:  139119,
+                                       SourceIDClass:   0,
+                                       SourceIDIndex:   3,
+                                       SamplingRate:    1,
+                                       SamplePool:      139119,
+                                       Dropped:         0,
+                                       InputInterface:  1073741823,
+                                       OutputInterface: 3,
+                                       RecordCount:     4,
+                                       Records: []SFlowRecord{
+                                               SFlowExtendedURLRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0,
+                                                               Format:         1005,
+                                                               FlowDataLength: 48,
+                                                       },
+                                                       Direction: SFlowURLsrc,
+                                                       URL:       "http://www.sflow.org",
+                                                       Host:      "host1.sflow.org",
+                                               },
+                                               SFlowExtendedUserFlow{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0,
+                                                               Format:         1004,
+                                                               FlowDataLength: 44,
+                                                       },
+                                                       SourceCharSet:      SFlowCSUTF8,
+                                                       SourceUserID:       "source user",
+                                                       DestinationCharSet: SFlowCSUTF8,
+                                                       DestinationUserID:  "destination user",
+                                               },
+                                               SFlowExtendedGatewayFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0,
+                                                               Format:         1003,
+                                                               FlowDataLength: 100,
+                                                       },
+                                                       NextHop:     []byte{0x0d, 0x0c, 0x0b, 0x0a},
+                                                       AS:          65001,
+                                                       SourceAS:    123,
+                                                       PeerAS:      999,
+                                                       ASPathCount: 3,
+                                                       ASPath: []SFlowASDestination{
+                                                               SFlowASDestination{
+                                                                       Type:    SFlowASSequence,
+                                                                       Count:   3,
+                                                                       Members: []uint32{123, 456, 789},
+                                                               },
+                                                               SFlowASDestination{
+                                                                       Type:    SFlowASSet,
+                                                                       Count:   3,
+                                                                       Members: []uint32{11111, 22222, 33333},
+                                                               },
+                                                               SFlowASDestination{
+                                                                       Type:    SFlowASSequence,
+                                                                       Count:   3,
+                                                                       Members: []uint32{777, 888, 999},
+                                                               },
+                                                       },
+                                                       Communities: []uint32{12, 13},
+                                                       LocalPref:   432,
+                                               },
+                                               SFlowRawPacketFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 144,
+                                                       },
+                                                       HeaderProtocol: 1,
+                                                       FrameLength:    390,
+                                                       PayloadRemoved: 4,
+                                                       HeaderLength:   0x80,
+                                                       Header:         gopacket.NewPacket(SFlowTestPacket2[698:826], LayerTypeEthernet, gopacket.Default),
+                                               },
+                                       },
+                               },
+                               SFlowFlowSample{
+                                       EnterpriseID:    0x0,
+                                       Format:          0x1,
+                                       SampleLength:    340,
+                                       SequenceNumber:  139120,
+                                       SourceIDClass:   0,
+                                       SourceIDIndex:   3,
+                                       SamplingRate:    1,
+                                       SamplePool:      139120,
+                                       Dropped:         0,
+                                       InputInterface:  3,
+                                       OutputInterface: 1073741823,
+                                       RecordCount:     4,
+                                       Records: []SFlowRecord{
+                                               SFlowExtendedURLRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0,
+                                                               Format:         1005,
+                                                               FlowDataLength: 48,
+                                                       },
+                                                       Direction: SFlowURLsrc,
+                                                       URL:       "http://www.sflow.org",
+                                                       Host:      "host1.sflow.org",
+                                               },
+                                               SFlowExtendedUserFlow{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0,
+                                                               Format:         1004,
+                                                               FlowDataLength: 44,
+                                                       },
+                                                       SourceCharSet:      SFlowCSUTF8,
+                                                       SourceUserID:       "source user",
+                                                       DestinationCharSet: SFlowCSUTF8,
+                                                       DestinationUserID:  "destination user",
+                                               },
+                                               SFlowExtendedGatewayFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0,
+                                                               Format:         1003,
+                                                               FlowDataLength: 100,
+                                                       },
+                                                       NextHop:     []byte{0x0d, 0x0c, 0x0b, 0x0a},
+                                                       AS:          65001,
+                                                       SourceAS:    123,
+                                                       PeerAS:      999,
+                                                       ASPathCount: 3,
+                                                       ASPath: []SFlowASDestination{
+                                                               SFlowASDestination{
+                                                                       Type:    SFlowASSequence,
+                                                                       Count:   3,
+                                                                       Members: []uint32{123, 456, 789},
+                                                               },
+                                                               SFlowASDestination{
+                                                                       Type:    SFlowASSet,
+                                                                       Count:   3,
+                                                                       Members: []uint32{11111, 22222, 33333},
+                                                               },
+                                                               SFlowASDestination{
+                                                                       Type:    SFlowASSequence,
+                                                                       Count:   3,
+                                                                       Members: []uint32{777, 888, 999},
+                                                               },
+                                                       },
+                                                       Communities: []uint32{12, 13},
+                                                       LocalPref:   432,
+                                               },
+                                               SFlowRawPacketFlowRecord{
+                                                       SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                               EnterpriseID:   0x0,
+                                                               Format:         0x1,
+                                                               FlowDataLength: 84,
+                                                       },
+                                                       HeaderProtocol: 1,
+                                                       FrameLength:    70,
+                                                       PayloadRemoved: 4,
+                                                       HeaderLength:   0x42,
+                                                       Header:         gopacket.NewPacket(SFlowTestPacket2[1106:1174], LayerTypeEthernet, gopacket.Default),
+                                               },
+                                       },
+                               },
+                       },
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+               }
+       } else {
+               t.Error("Application layer packet not UDP")
+       }
+}
+
+func TestDecodeProcessorCounter(t *testing.T) {
+       p := gopacket.NewPacket(SFlowTestPacket3, LayerTypeSFlow, gopacket.Default)
+
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+       got := p.ApplicationLayer().(*SFlowDatagram)
+
+       want := &SFlowDatagram{
+               DatagramVersion: uint32(5),
+               AgentAddress:    []byte{0x0a, 0x14, 0x04, 0x00},
+               SubAgentID:      uint32(0x64),
+               SequenceNumber:  uint32(96480),
+               AgentUptime:     uint32(1929595000),
+               SampleCount:     uint32(1),
+               CounterSamples: []SFlowCounterSample{
+                       SFlowCounterSample{
+                               Format:         SFlowTypeExpandedCounterSample,
+                               SampleLength:   0x34,
+                               SequenceNumber: 0x0178e0,
+                               SourceIDClass:  0x00,
+                               SourceIDIndex:  0x01,
+                               RecordCount:    0x01,
+                               Records: []SFlowRecord{
+                                       SFlowProcessorCounters{
+                                               SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+                                                       EnterpriseID:   0x0,
+                                                       Format:         SFlowTypeProcessorCounters,
+                                                       FlowDataLength: 0x1c,
+                                               },
+                                               FiveSecCpu:  0x05aa,
+                                               OneMinCpu:   0x055a,
+                                               FiveMinCpu:  0x0532,
+                                               TotalMemory: 0xe78d7000,
+                                               FreeMemory:  0x55e77000,
+                                       },
+                               },
+                       },
+               },
+       }
+       if !reflect.DeepEqual(want, got) {
+               t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+       }
+}
+
+func TestDecodeExtendedSwitchFlow(t *testing.T) {
+       p := gopacket.NewPacket(SFlowTestPacket4, LayerTypeSFlow, gopacket.Default)
+
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+       got := p.ApplicationLayer().(*SFlowDatagram)
+
+       want := &SFlowDatagram{
+               DatagramVersion: uint32(5),
+               AgentAddress:    []byte{0xc0, 0xa8, 0x01, 0x07},
+               SubAgentID:      uint32(0x00),
+               SequenceNumber:  uint32(0x027e),
+               AgentUptime:     uint32(0x32e0e47c),
+               SampleCount:     uint32(1),
+               FlowSamples: []SFlowFlowSample{
+                       SFlowFlowSample{
+                               Format:                SFlowTypeFlowSample,
+                               SampleLength:          0x38,
+                               SequenceNumber:        0x123,
+                               SourceIDClass:         0x00,
+                               SourceIDIndex:         0x1d,
+                               SamplingRate:          0x100,
+                               SamplePool:            0x337,
+                               Dropped:               0x5623,
+                               InputInterfaceFormat:  0x00,
+                               InputInterface:        0x1d,
+                               OutputInterfaceFormat: 0x00,
+                               OutputInterface:       0x04,
+                               RecordCount:           0x01,
+                               Records: []SFlowRecord{
+                                       SFlowExtendedSwitchFlowRecord{
+                                               SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                       EnterpriseID:   0x0,
+                                                       Format:         SFlowTypeExtendedSwitchFlow,
+                                                       FlowDataLength: 0x10,
+                                               },
+                                               IncomingVLAN:         0x03,
+                                               IncomingVLANPriority: 0x02,
+                                               OutgoingVLAN:         0x05,
+                                               OutgoingVLANPriority: 0xffffffff,
+                                       },
+                               },
+                       },
+               },
+       }
+       if !reflect.DeepEqual(want, got) {
+               t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+       }
+}
+
+func TestDecodeExtendedRouterFlow(t *testing.T) {
+       p := gopacket.NewPacket(SFlowTestPacket5, LayerTypeSFlow, gopacket.Default)
+
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+       got := p.ApplicationLayer().(*SFlowDatagram)
+
+       want := &SFlowDatagram{
+               DatagramVersion: uint32(5),
+               AgentAddress:    []byte{0xc0, 0xa8, 0x01, 0x12},
+               SubAgentID:      uint32(0x00),
+               SequenceNumber:  uint32(0x027e),
+               AgentUptime:     uint32(0x32e0e47c),
+               SampleCount:     uint32(1),
+               FlowSamples: []SFlowFlowSample{
+                       SFlowFlowSample{
+                               Format:                SFlowTypeFlowSample,
+                               SampleLength:          0x34,
+                               SequenceNumber:        0x123,
+                               SourceIDClass:         0x00,
+                               SourceIDIndex:         0x1d,
+                               SamplingRate:          0x100,
+                               SamplePool:            0x334,
+                               Dropped:               0x5602,
+                               InputInterfaceFormat:  0x00,
+                               InputInterface:        0x1d,
+                               OutputInterfaceFormat: 0x00,
+                               OutputInterface:       0x04,
+                               RecordCount:           0x01,
+                               Records: []SFlowRecord{
+                                       SFlowExtendedRouterFlowRecord{
+                                               SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                       EnterpriseID:   0x0,
+                                                       Format:         SFlowTypeExtendedRouterFlow,
+                                                       FlowDataLength: 0x10,
+                                               },
+                                               NextHop:                []byte{0xc0, 0xa8, 0x01, 0x21},
+                                               NextHopSourceMask:      0xffffffff,
+                                               NextHopDestinationMask: 0xffffff80,
+                                       },
+                               },
+                       },
+               },
+       }
+       if !reflect.DeepEqual(want, got) {
+               t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+       }
+}
+
+func TestDecodeExtendedRouterFlowIPv6(t *testing.T) {
+       p := gopacket.NewPacket(SFlowTestPacket8, LayerTypeSFlow, gopacket.Default)
+
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+       got := p.ApplicationLayer().(*SFlowDatagram)
+
+       want := &SFlowDatagram{
+               DatagramVersion: uint32(5),
+               AgentAddress:    []byte{0xc0, 0xa8, 0x01, 0x12},
+               SubAgentID:      uint32(0x00),
+               SequenceNumber:  uint32(0x027e),
+               AgentUptime:     uint32(0x32e0e47c),
+               SampleCount:     uint32(1),
+               FlowSamples: []SFlowFlowSample{
+                       SFlowFlowSample{
+                               Format:                SFlowTypeFlowSample,
+                               SampleLength:          0x34,
+                               SequenceNumber:        0x123,
+                               SourceIDClass:         0x00,
+                               SourceIDIndex:         0x1d,
+                               SamplingRate:          0x100,
+                               SamplePool:            0x334,
+                               Dropped:               0x5602,
+                               InputInterfaceFormat:  0x00,
+                               InputInterface:        0x1d,
+                               OutputInterfaceFormat: 0x00,
+                               OutputInterface:       0x04,
+                               RecordCount:           0x01,
+                               Records: []SFlowRecord{
+                                       SFlowExtendedRouterFlowRecord{
+                                               SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                       EnterpriseID:   0x0,
+                                                       Format:         SFlowTypeExtendedRouterFlow,
+                                                       FlowDataLength: 0x1c,
+                                               },
+                                               NextHop:                []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+                                               NextHopSourceMask:      0xffffffff,
+                                               NextHopDestinationMask: 0xffffff80,
+                                       },
+                               },
+                       },
+               },
+       }
+       if !reflect.DeepEqual(want, got) {
+               t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+       }
+}
+
+func TestDecodeExtendedIpv4TunnelIngressFlow(t *testing.T) {
+       p := gopacket.NewPacket(SFlowTestPacket6, LayerTypeSFlow, gopacket.Default)
+
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+       got := p.ApplicationLayer().(*SFlowDatagram)
+
+       want := &SFlowDatagram{
+               DatagramVersion: uint32(5),
+               AgentAddress:    []byte{0x7f, 0x0, 0x0, 0x1},
+               SubAgentID:      uint32(0),
+               SequenceNumber:  uint32(0x72),
+               AgentUptime:     uint32(0x1bd50),
+               SampleCount:     uint32(1),
+               FlowSamples: []SFlowFlowSample{
+                       SFlowFlowSample{
+                               Format:                SFlowTypeFlowSample,
+                               SampleLength:          0x48,
+                               SequenceNumber:        0x74,
+                               SourceIDClass:         0x0,
+                               SourceIDIndex:         0x20003e8,
+                               SamplingRate:          0x1,
+                               SamplePool:            0x74,
+                               Dropped:               0x0,
+                               InputInterfaceFormat:  0x0,
+                               InputInterface:        0x0,
+                               OutputInterfaceFormat: 0x0,
+                               OutputInterface:       0x80000001,
+                               RecordCount:           0x1,
+                               Records: []SFlowRecord{
+                                       SFlowExtendedIpv4TunnelIngressRecord{
+                                               SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                       EnterpriseID:   0x0,
+                                                       Format:         SFlowTypeExtendedIpv4TunnelIngressFlow,
+                                                       FlowDataLength: 0x20,
+                                               },
+                                               SFlowIpv4Record: SFlowIpv4Record{
+                                                       Length:   0x0,
+                                                       Protocol: 0x2f,
+                                                       IPSrc:    net.IP{0xc0, 0xa8, 0x0, 0x54},
+                                                       IPDst:    net.IP{0xc0, 0xa8, 0x0, 0x53},
+                                                       PortSrc:  0x0,
+                                                       PortDst:  0x0,
+                                                       TCPFlags: 0x0,
+                                                       TOS:      0x0,
+                                               },
+                                       },
+                               },
+                       },
+               },
+       }
+       if !reflect.DeepEqual(want, got) {
+               t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+       }
+}
+
+func TestDecodeExtendedIpv4TunnelEgressFlow(t *testing.T) {
+       p := gopacket.NewPacket(SFlowTestPacket7, LayerTypeSFlow, gopacket.Default)
+
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t)
+
+       got := p.ApplicationLayer().(*SFlowDatagram)
+
+       want := &SFlowDatagram{
+               DatagramVersion: uint32(5),
+               AgentAddress:    []byte{0x7f, 0x0, 0x0, 0x1},
+               SubAgentID:      uint32(1),
+               SequenceNumber:  uint32(0x12),
+               AgentUptime:     uint32(0x4268),
+               SampleCount:     uint32(1),
+               FlowSamples: []SFlowFlowSample{
+                       SFlowFlowSample{
+                               Format:                SFlowTypeFlowSample,
+                               SampleLength:          0x48,
+                               SequenceNumber:        0x12,
+                               SourceIDClass:         0x0,
+                               SourceIDIndex:         0x20003e9,
+                               SamplingRate:          0x1,
+                               SamplePool:            0x12,
+                               Dropped:               0x0,
+                               InputInterfaceFormat:  0x0,
+                               InputInterface:        0x6c,
+                               OutputInterfaceFormat: 0x0,
+                               OutputInterface:       0x80000001,
+                               RecordCount:           0x1,
+                               Records: []SFlowRecord{
+                                       SFlowExtendedIpv4TunnelEgressRecord{
+                                               SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+                                                       EnterpriseID:   0x0,
+                                                       Format:         SFlowTypeExtendedIpv4TunnelEgressFlow,
+                                                       FlowDataLength: 0x20,
+                                               },
+                                               SFlowIpv4Record: SFlowIpv4Record{
+                                                       Length:   0x0,
+                                                       Protocol: 0x0,
+                                                       IPSrc:    net.IP{0x0, 0x0, 0x0, 0x0},
+                                                       IPDst:    net.IP{0xc0, 0xa8, 0x0, 0x54},
+                                                       PortSrc:  0x0,
+                                                       PortDst:  0x0,
+                                                       TCPFlags: 0x0,
+                                                       TOS:      0x0,
+                                               },
+                                       },
+                               },
+                       },
+               },
+       }
+       if !reflect.DeepEqual(want, got) {
+               t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+       }
+}
+
+func BenchmarkDecodeSFlowPacket1(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(SFlowTestPacket1, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+func BenchmarkDecodeSFlowPacket2(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(SFlowTestPacket2, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+func BenchmarkDecodeSFlowPacket3(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(SFlowTestPacket3, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+func BenchmarkDecodeSFlowPacket4(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(SFlowTestPacket4, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+func BenchmarkDecodeSFlowLayerPacket1(b *testing.B) {
+       var sflow SFlowDatagram
+       for i := 0; i < b.N; i++ {
+               sflow.DecodeFromBytes(SFlowTestPacket1[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback)
+       }
+}
+
+func BenchmarkDecodeSFlowLayerPacket2(b *testing.B) {
+       var sflow SFlowDatagram
+       for i := 0; i < b.N; i++ {
+               sflow.DecodeFromBytes(SFlowTestPacket2[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/stp.go b/vendor/github.com/google/gopacket/layers/stp.go
new file mode 100644 (file)
index 0000000..bde7d7c
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2017 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+)
+
+// STP decode spanning tree protocol packets to transport BPDU (bridge protocol data unit) message.
+type STP struct {
+       BaseLayer
+}
+
+// LayerType returns gopacket.LayerTypeSTP.
+func (s *STP) LayerType() gopacket.LayerType { return LayerTypeSTP }
+
+func decodeSTP(data []byte, p gopacket.PacketBuilder) error {
+       stp := &STP{}
+       stp.Contents = data[:]
+       // TODO:  parse the STP protocol into actual subfields.
+       p.AddLayer(stp)
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/tcp.go b/vendor/github.com/google/gopacket/layers/tcp.go
new file mode 100644 (file)
index 0000000..fb731da
--- /dev/null
@@ -0,0 +1,327 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "encoding/hex"
+       "errors"
+       "fmt"
+
+       "github.com/google/gopacket"
+)
+
+// TCP is the layer for TCP headers.
+type TCP struct {
+       BaseLayer
+       SrcPort, DstPort                           TCPPort
+       Seq                                        uint32
+       Ack                                        uint32
+       DataOffset                                 uint8
+       FIN, SYN, RST, PSH, ACK, URG, ECE, CWR, NS bool
+       Window                                     uint16
+       Checksum                                   uint16
+       Urgent                                     uint16
+       sPort, dPort                               []byte
+       Options                                    []TCPOption
+       Padding                                    []byte
+       opts                                       [4]TCPOption
+       tcpipchecksum
+}
+
+// TCPOptionKind represents a TCP option code.
+type TCPOptionKind uint8
+
+const (
+       TCPOptionKindEndList                         = 0
+       TCPOptionKindNop                             = 1
+       TCPOptionKindMSS                             = 2  // len = 4
+       TCPOptionKindWindowScale                     = 3  // len = 3
+       TCPOptionKindSACKPermitted                   = 4  // len = 2
+       TCPOptionKindSACK                            = 5  // len = n
+       TCPOptionKindEcho                            = 6  // len = 6, obsolete
+       TCPOptionKindEchoReply                       = 7  // len = 6, obsolete
+       TCPOptionKindTimestamps                      = 8  // len = 10
+       TCPOptionKindPartialOrderConnectionPermitted = 9  // len = 2, obsolete
+       TCPOptionKindPartialOrderServiceProfile      = 10 // len = 3, obsolete
+       TCPOptionKindCC                              = 11 // obsolete
+       TCPOptionKindCCNew                           = 12 // obsolete
+       TCPOptionKindCCEcho                          = 13 // obsolete
+       TCPOptionKindAltChecksum                     = 14 // len = 3, obsolete
+       TCPOptionKindAltChecksumData                 = 15 // len = n, obsolete
+)
+
+func (k TCPOptionKind) String() string {
+       switch k {
+       case TCPOptionKindEndList:
+               return "EndList"
+       case TCPOptionKindNop:
+               return "NOP"
+       case TCPOptionKindMSS:
+               return "MSS"
+       case TCPOptionKindWindowScale:
+               return "WindowScale"
+       case TCPOptionKindSACKPermitted:
+               return "SACKPermitted"
+       case TCPOptionKindSACK:
+               return "SACK"
+       case TCPOptionKindEcho:
+               return "Echo"
+       case TCPOptionKindEchoReply:
+               return "EchoReply"
+       case TCPOptionKindTimestamps:
+               return "Timestamps"
+       case TCPOptionKindPartialOrderConnectionPermitted:
+               return "PartialOrderConnectionPermitted"
+       case TCPOptionKindPartialOrderServiceProfile:
+               return "PartialOrderServiceProfile"
+       case TCPOptionKindCC:
+               return "CC"
+       case TCPOptionKindCCNew:
+               return "CCNew"
+       case TCPOptionKindCCEcho:
+               return "CCEcho"
+       case TCPOptionKindAltChecksum:
+               return "AltChecksum"
+       case TCPOptionKindAltChecksumData:
+               return "AltChecksumData"
+       default:
+               return fmt.Sprintf("Unknown(%d)", k)
+       }
+}
+
+type TCPOption struct {
+       OptionType   TCPOptionKind
+       OptionLength uint8
+       OptionData   []byte
+}
+
+func (t TCPOption) String() string {
+       hd := hex.EncodeToString(t.OptionData)
+       if len(hd) > 0 {
+               hd = " 0x" + hd
+       }
+       switch t.OptionType {
+       case TCPOptionKindMSS:
+               return fmt.Sprintf("TCPOption(%s:%v%s)",
+                       t.OptionType,
+                       binary.BigEndian.Uint16(t.OptionData),
+                       hd)
+
+       case TCPOptionKindTimestamps:
+               if len(t.OptionData) == 8 {
+                       return fmt.Sprintf("TCPOption(%s:%v/%v%s)",
+                               t.OptionType,
+                               binary.BigEndian.Uint32(t.OptionData[:4]),
+                               binary.BigEndian.Uint32(t.OptionData[4:8]),
+                               hd)
+               }
+       }
+       return fmt.Sprintf("TCPOption(%s:%s)", t.OptionType, hd)
+}
+
+// LayerType returns gopacket.LayerTypeTCP
+func (t *TCP) LayerType() gopacket.LayerType { return LayerTypeTCP }
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (t *TCP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       var optionLength int
+       for _, o := range t.Options {
+               switch o.OptionType {
+               case 0, 1:
+                       optionLength += 1
+               default:
+                       optionLength += 2 + len(o.OptionData)
+               }
+       }
+       if opts.FixLengths {
+               if rem := optionLength % 4; rem != 0 {
+                       t.Padding = lotsOfZeros[:4-rem]
+               }
+               t.DataOffset = uint8((len(t.Padding) + optionLength + 20) / 4)
+       }
+       bytes, err := b.PrependBytes(20 + optionLength + len(t.Padding))
+       if err != nil {
+               return err
+       }
+       binary.BigEndian.PutUint16(bytes, uint16(t.SrcPort))
+       binary.BigEndian.PutUint16(bytes[2:], uint16(t.DstPort))
+       binary.BigEndian.PutUint32(bytes[4:], t.Seq)
+       binary.BigEndian.PutUint32(bytes[8:], t.Ack)
+       binary.BigEndian.PutUint16(bytes[12:], t.flagsAndOffset())
+       binary.BigEndian.PutUint16(bytes[14:], t.Window)
+       binary.BigEndian.PutUint16(bytes[18:], t.Urgent)
+       start := 20
+       for _, o := range t.Options {
+               bytes[start] = byte(o.OptionType)
+               switch o.OptionType {
+               case 0, 1:
+                       start++
+               default:
+                       if opts.FixLengths {
+                               o.OptionLength = uint8(len(o.OptionData) + 2)
+                       }
+                       bytes[start+1] = o.OptionLength
+                       copy(bytes[start+2:start+len(o.OptionData)+2], o.OptionData)
+                       start += int(o.OptionLength)
+               }
+       }
+       copy(bytes[start:], t.Padding)
+       if opts.ComputeChecksums {
+               // zero out checksum bytes in current serialization.
+               bytes[16] = 0
+               bytes[17] = 0
+               csum, err := t.computeChecksum(b.Bytes(), IPProtocolTCP)
+               if err != nil {
+                       return err
+               }
+               t.Checksum = csum
+       }
+       binary.BigEndian.PutUint16(bytes[16:], t.Checksum)
+       return nil
+}
+
+func (t *TCP) ComputeChecksum() (uint16, error) {
+       return t.computeChecksum(append(t.Contents, t.Payload...), IPProtocolTCP)
+}
+
+func (t *TCP) flagsAndOffset() uint16 {
+       f := uint16(t.DataOffset) << 12
+       if t.FIN {
+               f |= 0x0001
+       }
+       if t.SYN {
+               f |= 0x0002
+       }
+       if t.RST {
+               f |= 0x0004
+       }
+       if t.PSH {
+               f |= 0x0008
+       }
+       if t.ACK {
+               f |= 0x0010
+       }
+       if t.URG {
+               f |= 0x0020
+       }
+       if t.ECE {
+               f |= 0x0040
+       }
+       if t.CWR {
+               f |= 0x0080
+       }
+       if t.NS {
+               f |= 0x0100
+       }
+       return f
+}
+
+func (tcp *TCP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       tcp.SrcPort = TCPPort(binary.BigEndian.Uint16(data[0:2]))
+       tcp.sPort = data[0:2]
+       tcp.DstPort = TCPPort(binary.BigEndian.Uint16(data[2:4]))
+       tcp.dPort = data[2:4]
+       tcp.Seq = binary.BigEndian.Uint32(data[4:8])
+       tcp.Ack = binary.BigEndian.Uint32(data[8:12])
+       tcp.DataOffset = data[12] >> 4
+       tcp.FIN = data[13]&0x01 != 0
+       tcp.SYN = data[13]&0x02 != 0
+       tcp.RST = data[13]&0x04 != 0
+       tcp.PSH = data[13]&0x08 != 0
+       tcp.ACK = data[13]&0x10 != 0
+       tcp.URG = data[13]&0x20 != 0
+       tcp.ECE = data[13]&0x40 != 0
+       tcp.CWR = data[13]&0x80 != 0
+       tcp.NS = data[12]&0x01 != 0
+       tcp.Window = binary.BigEndian.Uint16(data[14:16])
+       tcp.Checksum = binary.BigEndian.Uint16(data[16:18])
+       tcp.Urgent = binary.BigEndian.Uint16(data[18:20])
+       tcp.Options = tcp.opts[:0]
+       if tcp.DataOffset < 5 {
+               return fmt.Errorf("Invalid TCP data offset %d < 5", tcp.DataOffset)
+       }
+       dataStart := int(tcp.DataOffset) * 4
+       if dataStart > len(data) {
+               df.SetTruncated()
+               tcp.Payload = nil
+               tcp.Contents = data
+               return errors.New("TCP data offset greater than packet length")
+       }
+       tcp.Contents = data[:dataStart]
+       tcp.Payload = data[dataStart:]
+       // From here on, data points just to the header options.
+       data = data[20:dataStart]
+       for len(data) > 0 {
+               if tcp.Options == nil {
+                       // Pre-allocate to avoid allocating a slice.
+                       tcp.Options = tcp.opts[:0]
+               }
+               tcp.Options = append(tcp.Options, TCPOption{OptionType: TCPOptionKind(data[0])})
+               opt := &tcp.Options[len(tcp.Options)-1]
+               switch opt.OptionType {
+               case TCPOptionKindEndList: // End of options
+                       opt.OptionLength = 1
+                       tcp.Padding = data[1:]
+                       break
+               case TCPOptionKindNop: // 1 byte padding
+                       opt.OptionLength = 1
+               default:
+                       opt.OptionLength = data[1]
+                       if opt.OptionLength < 2 {
+                               return fmt.Errorf("Invalid TCP option length %d < 2", opt.OptionLength)
+                       } else if int(opt.OptionLength) > len(data) {
+                               return fmt.Errorf("Invalid TCP option length %d exceeds remaining %d bytes", opt.OptionLength, len(data))
+                       }
+                       opt.OptionData = data[2:opt.OptionLength]
+               }
+               data = data[opt.OptionLength:]
+       }
+       return nil
+}
+
+func (t *TCP) CanDecode() gopacket.LayerClass {
+       return LayerTypeTCP
+}
+
+func (t *TCP) NextLayerType() gopacket.LayerType {
+       lt := t.DstPort.LayerType()
+       if lt == gopacket.LayerTypePayload {
+               lt = t.SrcPort.LayerType()
+       }
+       return lt
+}
+
+func decodeTCP(data []byte, p gopacket.PacketBuilder) error {
+       tcp := &TCP{}
+       err := tcp.DecodeFromBytes(data, p)
+       p.AddLayer(tcp)
+       p.SetTransportLayer(tcp)
+       if err != nil {
+               return err
+       }
+       if p.DecodeOptions().DecodeStreamsAsDatagrams {
+               return p.NextDecoder(tcp.NextLayerType())
+       } else {
+               return p.NextDecoder(gopacket.LayerTypePayload)
+       }
+}
+
+func (t *TCP) TransportFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointTCPPort, t.sPort, t.dPort)
+}
+
+// For testing only
+func (t *TCP) SetInternalPortsForTesting() {
+       t.sPort = make([]byte, 2)
+       t.dPort = make([]byte, 2)
+       binary.BigEndian.PutUint16(t.sPort, uint16(t.SrcPort))
+       binary.BigEndian.PutUint16(t.dPort, uint16(t.DstPort))
+}
diff --git a/vendor/github.com/google/gopacket/layers/tcp_test.go b/vendor/github.com/google/gopacket/layers/tcp_test.go
new file mode 100644 (file)
index 0000000..56a6aaa
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2016, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+func TestTCPOptionKindString(t *testing.T) {
+       testData := []struct {
+               o *TCPOption
+               s string
+       }{
+               {&TCPOption{
+                       OptionType:   TCPOptionKindNop,
+                       OptionLength: 1,
+               },
+                       "TCPOption(NOP:)"},
+               {&TCPOption{
+                       OptionType:   TCPOptionKindMSS,
+                       OptionLength: 4,
+                       OptionData:   []byte{0x12, 0x34},
+               },
+                       "TCPOption(MSS:4660 0x1234)"},
+               {&TCPOption{
+                       OptionType:   TCPOptionKindTimestamps,
+                       OptionLength: 10,
+                       OptionData:   []byte{0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01},
+               },
+                       "TCPOption(Timestamps:2/1 0x0000000200000001)"}}
+
+       for _, tc := range testData {
+               if s := tc.o.String(); s != tc.s {
+                       t.Errorf("expected %#v string to be %s, got %s", tc.o, tc.s, s)
+               }
+       }
+}
+
+func TestTCPSerializePadding(t *testing.T) {
+       tcp := &TCP{}
+       tcp.Options = append(tcp.Options, TCPOption{
+               OptionType:   TCPOptionKindNop,
+               OptionLength: 1,
+       })
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true}
+       err := gopacket.SerializeLayers(buf, opts, tcp)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if len(buf.Bytes())%4 != 0 {
+               t.Errorf("TCP data of len %d not padding to 32 bit boundary", len(buf.Bytes()))
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/tcpip.go b/vendor/github.com/google/gopacket/layers/tcpip.go
new file mode 100644 (file)
index 0000000..64ba51c
--- /dev/null
@@ -0,0 +1,104 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "errors"
+       "fmt"
+
+       "github.com/google/gopacket"
+)
+
+// Checksum computation for TCP/UDP.
+type tcpipchecksum struct {
+       pseudoheader tcpipPseudoHeader
+}
+
+type tcpipPseudoHeader interface {
+       pseudoheaderChecksum() (uint32, error)
+}
+
+func (ip *IPv4) pseudoheaderChecksum() (csum uint32, err error) {
+       if err := ip.AddressTo4(); err != nil {
+               return 0, err
+       }
+       csum += (uint32(ip.SrcIP[0]) + uint32(ip.SrcIP[2])) << 8
+       csum += uint32(ip.SrcIP[1]) + uint32(ip.SrcIP[3])
+       csum += (uint32(ip.DstIP[0]) + uint32(ip.DstIP[2])) << 8
+       csum += uint32(ip.DstIP[1]) + uint32(ip.DstIP[3])
+       return csum, nil
+}
+
+func (ip *IPv6) pseudoheaderChecksum() (csum uint32, err error) {
+       if err := ip.AddressTo16(); err != nil {
+               return 0, err
+       }
+       for i := 0; i < 16; i += 2 {
+               csum += uint32(ip.SrcIP[i]) << 8
+               csum += uint32(ip.SrcIP[i+1])
+               csum += uint32(ip.DstIP[i]) << 8
+               csum += uint32(ip.DstIP[i+1])
+       }
+       return csum, nil
+}
+
+// Calculate the TCP/IP checksum defined in rfc1071.  The passed-in csum is any
+// initial checksum data that's already been computed.
+func tcpipChecksum(data []byte, csum uint32) uint16 {
+       // to handle odd lengths, we loop to length - 1, incrementing by 2, then
+       // handle the last byte specifically by checking against the original
+       // length.
+       length := len(data) - 1
+       for i := 0; i < length; i += 2 {
+               // For our test packet, doing this manually is about 25% faster
+               // (740 ns vs. 1000ns) than doing it by calling binary.BigEndian.Uint16.
+               csum += uint32(data[i]) << 8
+               csum += uint32(data[i+1])
+       }
+       if len(data)%2 == 1 {
+               csum += uint32(data[length]) << 8
+       }
+       for csum > 0xffff {
+               csum = (csum >> 16) + (csum & 0xffff)
+       }
+       return ^uint16(csum)
+}
+
+// computeChecksum computes a TCP or UDP checksum.  headerAndPayload is the
+// serialized TCP or UDP header plus its payload, with the checksum zero'd
+// out. headerProtocol is the IP protocol number of the upper-layer header.
+func (c *tcpipchecksum) computeChecksum(headerAndPayload []byte, headerProtocol IPProtocol) (uint16, error) {
+       if c.pseudoheader == nil {
+               return 0, errors.New("TCP/IP layer 4 checksum cannot be computed without network layer... call SetNetworkLayerForChecksum to set which layer to use")
+       }
+       length := uint32(len(headerAndPayload))
+       csum, err := c.pseudoheader.pseudoheaderChecksum()
+       if err != nil {
+               return 0, err
+       }
+       csum += uint32(headerProtocol)
+       csum += length & 0xffff
+       csum += length >> 16
+       return tcpipChecksum(headerAndPayload, csum), nil
+}
+
+// SetNetworkLayerForChecksum tells this layer which network layer is wrapping it.
+// This is needed for computing the checksum when serializing, since TCP/IP transport
+// layer checksums depends on fields in the IPv4 or IPv6 layer that contains it.
+// The passed in layer must be an *IPv4 or *IPv6.
+func (i *tcpipchecksum) SetNetworkLayerForChecksum(l gopacket.NetworkLayer) error {
+       switch v := l.(type) {
+       case *IPv4:
+               i.pseudoheader = v
+       case *IPv6:
+               i.pseudoheader = v
+       default:
+               return fmt.Errorf("cannot use layer type %v for tcp checksum network layer", l.LayerType())
+       }
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/tcpip_test.go b/vendor/github.com/google/gopacket/layers/tcpip_test.go
new file mode 100644 (file)
index 0000000..c002e84
--- /dev/null
@@ -0,0 +1,185 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "net"
+       "testing"
+)
+
+const (
+       ipv4UDPChecksum                = uint16(0xbc5f) // Wireshark
+       ipv6UDPChecksumWithIPv6DstOpts = uint16(0x4d21) // Wireshark
+       ipv6UDPChecksumJumbogram       = uint16(0xcda8)
+)
+
+func createIPv4ChecksumTestLayer() (ip4 *IPv4) {
+       ip4 = &IPv4{}
+       ip4.Version = 4
+       ip4.TTL = 64
+       ip4.SrcIP = net.ParseIP("192.0.2.1")
+       ip4.DstIP = net.ParseIP("198.51.100.1")
+       return
+}
+
+func createIPv6ChecksumTestLayer() (ip6 *IPv6) {
+       ip6 = &IPv6{}
+       ip6.Version = 6
+       ip6.NextHeader = IPProtocolNoNextHeader
+       ip6.HopLimit = 64
+       ip6.SrcIP = net.ParseIP("2001:db8::1")
+       ip6.DstIP = net.ParseIP("2001:db8::2")
+       return
+}
+
+func createIPv6DestinationChecksumTestLayer() (dst *IPv6Destination) {
+       tlv := &IPv6DestinationOption{}
+       tlv.OptionType = 0x01 //PadN
+       tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00}
+       dst = &IPv6Destination{}
+       dst.Options = append(dst.Options, tlv)
+       dst.NextHeader = IPProtocolNoNextHeader
+       return
+}
+
+func createUDPChecksumTestLayer() (udp *UDP) {
+       udp = &UDP{}
+       udp.SrcPort = UDPPort(12345)
+       udp.DstPort = UDPPort(9999)
+       return
+}
+
+func TestIPv4UDPChecksum(t *testing.T) {
+       var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+       var u *UDP
+       var err error
+
+       ip4 := createIPv4ChecksumTestLayer()
+       ip4.Protocol = IPProtocolUDP
+       serialize = append(serialize, ip4)
+
+       udp := createUDPChecksumTestLayer()
+       udp.SetNetworkLayerForChecksum(ip4)
+       serialize = append(serialize, udp)
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
+       err = gopacket.SerializeLayers(buf, opts, serialize...)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       p := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Fatal("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeIPv4, LayerTypeUDP}, t)
+
+       if l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok {
+               t.Fatal("No UDP layer type found in packet")
+       } else {
+               u = l
+       }
+       got := u.Checksum
+       want := ipv4UDPChecksum
+       if got != want {
+               t.Errorf("Bad checksum:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+       }
+}
+
+func TestIPv6UDPChecksumWithIPv6DstOpts(t *testing.T) {
+       var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 3)
+       var u *UDP
+       var err error
+
+       ip6 := createIPv6ChecksumTestLayer()
+       ip6.NextHeader = IPProtocolIPv6Destination
+       serialize = append(serialize, ip6)
+
+       dst := createIPv6DestinationChecksumTestLayer()
+       dst.NextHeader = IPProtocolUDP
+       serialize = append(serialize, dst)
+
+       udp := createUDPChecksumTestLayer()
+       udp.SetNetworkLayerForChecksum(ip6)
+       serialize = append(serialize, udp)
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
+       err = gopacket.SerializeLayers(buf, opts, serialize...)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       p := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Fatal("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6Destination, LayerTypeUDP}, t)
+
+       if l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok {
+               t.Fatal("No UDP layer type found in packet")
+       } else {
+               u = l
+       }
+       got := u.Checksum
+       want := ipv6UDPChecksumWithIPv6DstOpts
+       if got != want {
+               t.Errorf("Bad checksum:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+       }
+}
+
+func TestIPv6JumbogramUDPChecksum(t *testing.T) {
+       var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 4)
+       var u *UDP
+       var err error
+
+       ip6 := &IPv6{}
+       ip6.Version = 6
+       ip6.NextHeader = IPProtocolUDP
+       ip6.HopLimit = 64
+       ip6.SrcIP = net.ParseIP("2001:db8::1")
+       ip6.DstIP = net.ParseIP("2001:db8::2")
+       serialize = append(serialize, ip6)
+
+       udp := &UDP{}
+       udp.SrcPort = UDPPort(12345)
+       udp.DstPort = UDPPort(9999)
+       udp.SetNetworkLayerForChecksum(ip6)
+       serialize = append(serialize, udp)
+
+       payload := make([]byte, ipv6MaxPayloadLength+1)
+       for i := range payload {
+               payload[i] = 0xfe
+       }
+       serialize = append(serialize, gopacket.Payload(payload))
+
+       buf := gopacket.NewSerializeBuffer()
+       opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
+       err = gopacket.SerializeLayers(buf, opts, serialize...)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       p := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Fatal("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeUDP, gopacket.LayerTypePayload}, t)
+
+       if l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok {
+               t.Fatal("No UDP layer type found in packet")
+       } else {
+               u = l
+       }
+       got := u.Checksum
+       want := ipv6UDPChecksumJumbogram
+       if got != want {
+               t.Errorf("Bad checksum:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/test_creator.py b/vendor/github.com/google/gopacket/layers/test_creator.py
new file mode 100755 (executable)
index 0000000..c92d276
--- /dev/null
@@ -0,0 +1,103 @@
+#!/usr/bin/python
+# Copyright 2012 Google, Inc. All rights reserved.
+
+"""TestCreator creates test templates from pcap files."""
+
+import argparse
+import base64
+import glob
+import re
+import string
+import subprocess
+import sys
+
+
+class Packet(object):
+  """Helper class encapsulating packet from a pcap file."""
+
+  def __init__(self, packet_lines):
+    self.packet_lines = packet_lines
+    self.data = self._DecodeText(packet_lines)
+
+  @classmethod
+  def _DecodeText(cls, packet_lines):
+    packet_bytes = []
+    # First line is timestamp and stuff, skip it.
+    # Format: 0x0010:  0000 0020 3aff 3ffe 0000 0000 0000 0000  ....:.?.........
+
+    for line in packet_lines[1:]:
+      m = re.match(r'\s+0x[a-f\d]+:\s+((?:[\da-f]{2,4}\s)*)', line, re.IGNORECASE)
+      if m is None: continue
+      for hexpart in m.group(1).split():
+        packet_bytes.append(base64.b16decode(hexpart.upper()))
+    return ''.join(packet_bytes)
+
+  def Test(self, name, link_type):
+    """Yields a test using this packet, as a set of lines."""
+    yield '// testPacket%s is the packet:' % name
+    for line in self.packet_lines:
+      yield '//   ' + line
+    yield 'var testPacket%s = []byte{' % name
+    data = list(self.data)
+    while data:
+      linebytes, data = data[:16], data[16:]
+      yield ''.join(['\t'] + ['0x%02x, ' % ord(c) for c in linebytes])
+    yield '}'
+    yield 'func TestPacket%s(t *testing.T) {' % name
+    yield '\tp := gopacket.NewPacket(testPacket%s, LinkType%s, gopacket.Default)' % (name, link_type)
+    yield '\tif p.ErrorLayer() != nil {'
+    yield '\t\tt.Error("Failed to decode packet:", p.ErrorLayer().Error())'
+    yield '\t}'
+    yield '\tcheckLayers(p, []gopacket.LayerType{LayerType%s, FILL_ME_IN_WITH_ACTUAL_LAYERS}, t)' % link_type
+    yield '}'
+    yield 'func BenchmarkDecodePacket%s(b *testing.B) {' % name
+    yield '\tfor i := 0; i < b.N; i++ {'
+    yield '\t\tgopacket.NewPacket(testPacket%s, LinkType%s, gopacket.NoCopy)' % (name, link_type)
+    yield '\t}'
+    yield '}'
+
+
+
+def GetTcpdumpOutput(filename):
+  """Runs tcpdump on the given file, returning output as string."""
+  return subprocess.check_output(
+      ['tcpdump', '-XX', '-s', '0', '-n', '-r', filename])
+
+
+def TcpdumpOutputToPackets(output):
+  """Reads a pcap file with TCPDump, yielding Packet objects."""
+  pdata = []
+  for line in output.splitlines():
+    if line[0] not in string.whitespace and pdata:
+      yield Packet(pdata)
+      pdata = []
+    pdata.append(line)
+  if pdata:
+    yield Packet(pdata)
+
+
+def main():
+  class CustomHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):
+    def _format_usage(self, usage, actions, groups, prefix=None):
+      header =('TestCreator creates gopacket tests using a pcap file.\n\n'
+               'Tests are written to standard out... they can then be \n'
+               'copied into the file of your choice and modified as \n'
+               'you see.\n\n')
+      return header + argparse.ArgumentDefaultsHelpFormatter._format_usage(
+        self, usage, actions, groups, prefix)
+
+  parser = argparse.ArgumentParser(formatter_class=CustomHelpFormatter)
+  parser.add_argument('--link_type', default='Ethernet', help='the link type (default: %(default)s)')
+  parser.add_argument('--name', default='Packet%d', help='the layer type, must have "%d" inside it')
+  parser.add_argument('files', metavar='file.pcap', type=str, nargs='+', help='the files to process')
+
+  args = parser.parse_args()
+
+  for arg in args.files:
+    for path in glob.glob(arg):
+      for i, packet in enumerate(TcpdumpOutputToPackets(GetTcpdumpOutput(path))):
+        print '\n'.join(packet.Test(
+          args.name % i, args.link_type))
+
+if __name__ == '__main__':
+    main()
diff --git a/vendor/github.com/google/gopacket/layers/udp.go b/vendor/github.com/google/gopacket/layers/udp.go
new file mode 100644 (file)
index 0000000..20f8c50
--- /dev/null
@@ -0,0 +1,120 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "fmt"
+       "github.com/google/gopacket"
+)
+
+// UDP is the layer for UDP headers.
+type UDP struct {
+       BaseLayer
+       SrcPort, DstPort UDPPort
+       Length           uint16
+       Checksum         uint16
+       sPort, dPort     []byte
+       tcpipchecksum
+}
+
+// LayerType returns gopacket.LayerTypeUDP
+func (u *UDP) LayerType() gopacket.LayerType { return LayerTypeUDP }
+
+func (udp *UDP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       udp.SrcPort = UDPPort(binary.BigEndian.Uint16(data[0:2]))
+       udp.sPort = data[0:2]
+       udp.DstPort = UDPPort(binary.BigEndian.Uint16(data[2:4]))
+       udp.dPort = data[2:4]
+       udp.Length = binary.BigEndian.Uint16(data[4:6])
+       udp.Checksum = binary.BigEndian.Uint16(data[6:8])
+       udp.BaseLayer = BaseLayer{Contents: data[:8]}
+       switch {
+       case udp.Length >= 8:
+               hlen := int(udp.Length)
+               if hlen > len(data) {
+                       df.SetTruncated()
+                       hlen = len(data)
+               }
+               udp.Payload = data[8:hlen]
+       case udp.Length == 0: // Jumbogram, use entire rest of data
+               udp.Payload = data[8:]
+       default:
+               return fmt.Errorf("UDP packet too small: %d bytes", udp.Length)
+       }
+       return nil
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (u *UDP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       var jumbo bool
+
+       payload := b.Bytes()
+       if _, ok := u.pseudoheader.(*IPv6); ok {
+               if len(payload)+8 > 65535 {
+                       jumbo = true
+               }
+       }
+       bytes, err := b.PrependBytes(8)
+       if err != nil {
+               return err
+       }
+       binary.BigEndian.PutUint16(bytes, uint16(u.SrcPort))
+       binary.BigEndian.PutUint16(bytes[2:], uint16(u.DstPort))
+       if opts.FixLengths {
+               if jumbo {
+                       u.Length = 0
+               } else {
+                       u.Length = uint16(len(payload)) + 8
+               }
+       }
+       binary.BigEndian.PutUint16(bytes[4:], u.Length)
+       if opts.ComputeChecksums {
+               // zero out checksum bytes
+               bytes[6] = 0
+               bytes[7] = 0
+               csum, err := u.computeChecksum(b.Bytes(), IPProtocolUDP)
+               if err != nil {
+                       return err
+               }
+               u.Checksum = csum
+       }
+       binary.BigEndian.PutUint16(bytes[6:], u.Checksum)
+       return nil
+}
+
+func (u *UDP) CanDecode() gopacket.LayerClass {
+       return LayerTypeUDP
+}
+
+// NextLayerType use the destination port to select the
+// right next decoder. It tries first to decode via the
+// destination port, then the source port.
+func (u *UDP) NextLayerType() gopacket.LayerType {
+       if lt := u.DstPort.LayerType(); lt != gopacket.LayerTypePayload {
+               return lt
+       }
+       return u.SrcPort.LayerType()
+}
+
+func decodeUDP(data []byte, p gopacket.PacketBuilder) error {
+       udp := &UDP{}
+       err := udp.DecodeFromBytes(data, p)
+       p.AddLayer(udp)
+       p.SetTransportLayer(udp)
+       if err != nil {
+               return err
+       }
+       return p.NextDecoder(udp.NextLayerType())
+}
+
+func (u *UDP) TransportFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointUDPPort, u.sPort, u.dPort)
+}
diff --git a/vendor/github.com/google/gopacket/layers/udp_test.go b/vendor/github.com/google/gopacket/layers/udp_test.go
new file mode 100644 (file)
index 0000000..e71236c
--- /dev/null
@@ -0,0 +1,372 @@
+// Copyright 2012, Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "reflect"
+       "testing"
+
+       "github.com/google/gopacket"
+)
+
+// testUDPPacketDNS is the packet:
+//   10:33:07.883637 IP 172.16.255.1.53 > 172.29.20.15.35181: 47320 7/0/0 MX ALT2.ASPMX.L.GOOGLE.com. 20, MX ASPMX2.GOOGLEMAIL.com. 30, MX ASPMX3.GOOGLEMAIL.com. 30, MX ASPMX4.GOOGLEMAIL.com. 30, MX ASPMX5.GOOGLEMAIL.com. 30, MX ASPMX.L.GOOGLE.com. 10, MX ALT1.ASPMX.L.GOOGLE.com. 20 (202)
+//      0x0000:  24be 0527 0b17 001f cab3 75c0 0800 4500  $..'......u...E.
+//      0x0010:  00e6 68cf 0000 3f11 a6f9 ac10 ff01 ac1d  ..h...?.........
+//      0x0020:  140f 0035 896d 00d2 754a b8d8 8180 0001  ...5.m..uJ......
+//      0x0030:  0007 0000 0000 0478 6b63 6403 636f 6d00  .......xkcd.com.
+//      0x0040:  000f 0001 c00c 000f 0001 0000 0258 0018  .............X..
+//      0x0050:  0014 0441 4c54 3205 4153 504d 5801 4c06  ...ALT2.ASPMX.L.
+//      0x0060:  474f 4f47 4c45 c011 c00c 000f 0001 0000  GOOGLE..........
+//      0x0070:  0258 0016 001e 0641 5350 4d58 320a 474f  .X.....ASPMX2.GO
+//      0x0080:  4f47 4c45 4d41 494c c011 c00c 000f 0001  OGLEMAIL........
+//      0x0090:  0000 0258 000b 001e 0641 5350 4d58 33c0  ...X.....ASPMX3.
+//      0x00a0:  53c0 0c00 0f00 0100 0002 5800 0b00 1e06  S.........X.....
+//      0x00b0:  4153 504d 5834 c053 c00c 000f 0001 0000  ASPMX4.S........
+//      0x00c0:  0258 000b 001e 0641 5350 4d58 35c0 53c0  .X.....ASPMX5.S.
+//      0x00d0:  0c00 0f00 0100 0002 5800 0400 0ac0 2dc0  ........X.....-.
+//      0x00e0:  0c00 0f00 0100 0002 5800 0900 1404 414c  ........X.....AL
+//      0x00f0:  5431 c02d                                T1.-
+// Packet generated by doing DNS query for 'xkcd.com'
+var testUDPPacketDNS = []byte{
+       0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0xe6, 0x68, 0xcf, 0x00, 0x00, 0x3f, 0x11, 0xa6, 0xf9, 0xac, 0x10, 0xff, 0x01, 0xac, 0x1d,
+       0x14, 0x0f, 0x00, 0x35, 0x89, 0x6d, 0x00, 0xd2, 0x75, 0x4a, 0xb8, 0xd8, 0x81, 0x80, 0x00, 0x01,
+       0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x78, 0x6b, 0x63, 0x64, 0x03, 0x63, 0x6f, 0x6d, 0x00,
+       0x00, 0x0f, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x18,
+       0x00, 0x14, 0x04, 0x41, 0x4c, 0x54, 0x32, 0x05, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x01, 0x4c, 0x06,
+       0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0xc0, 0x11, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00,
+       0x02, 0x58, 0x00, 0x16, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x32, 0x0a, 0x47, 0x4f,
+       0x4f, 0x47, 0x4c, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0xc0, 0x11, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01,
+       0x00, 0x00, 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x33, 0xc0,
+       0x53, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06,
+       0x41, 0x53, 0x50, 0x4d, 0x58, 0x34, 0xc0, 0x53, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00,
+       0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x35, 0xc0, 0x53, 0xc0,
+       0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x04, 0x00, 0x0a, 0xc0, 0x2d, 0xc0,
+       0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x09, 0x00, 0x14, 0x04, 0x41, 0x4c,
+       0x54, 0x31, 0xc0, 0x2d,
+}
+
+func TestUDPPacketDNS(t *testing.T) {
+       p := gopacket.NewPacket(testUDPPacketDNS, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t)
+       if got, ok := p.TransportLayer().(*UDP); ok {
+               want := &UDP{
+                       BaseLayer: BaseLayer{
+                               Contents: []byte{0x0, 0x35, 0x89, 0x6d, 0x0, 0xd2, 0x75, 0x4a},
+                               Payload: []byte{0xb8, 0xd8, 0x81, 0x80, 0x0, 0x1, 0x0,
+                                       0x7, 0x0, 0x0, 0x0, 0x0, 0x4, 0x78, 0x6b, 0x63, 0x64, 0x3, 0x63, 0x6f,
+                                       0x6d, 0x0, 0x0, 0xf, 0x0, 0x1, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0,
+                                       0x2, 0x58, 0x0, 0x18, 0x0, 0x14, 0x4, 0x41, 0x4c, 0x54, 0x32, 0x5, 0x41,
+                                       0x53, 0x50, 0x4d, 0x58, 0x1, 0x4c, 0x6, 0x47, 0x4f, 0x4f, 0x47, 0x4c,
+                                       0x45, 0xc0, 0x11, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0,
+                                       0x16, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x32, 0xa, 0x47, 0x4f,
+                                       0x4f, 0x47, 0x4c, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0xc0, 0x11, 0xc0, 0xc,
+                                       0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41,
+                                       0x53, 0x50, 0x4d, 0x58, 0x33, 0xc0, 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1,
+                                       0x0, 0x0, 0x2, 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d,
+                                       0x58, 0x34, 0xc0, 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2,
+                                       0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x35, 0xc0,
+                                       0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, 0x4, 0x0,
+                                       0xa, 0xc0, 0x2d, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0,
+                                       0x9, 0x0, 0x14, 0x4, 0x41, 0x4c, 0x54, 0x31, 0xc0, 0x2d},
+                       },
+                       SrcPort:  53,
+                       DstPort:  35181,
+                       Length:   210,
+                       Checksum: 30026,
+                       sPort:    []byte{0x0, 0x35},
+                       dPort:    []byte{0x89, 0x6d},
+               }
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("UDP packet mismatch:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       } else {
+               t.Error("Transport layer packet not UDP")
+       }
+}
+
+func loadDNS(dnspacket []byte, t *testing.T) *DNS {
+       p := gopacket.NewPacket(dnspacket, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4,
+               LayerTypeUDP, LayerTypeDNS}, t)
+
+       dnsL := p.Layer(LayerTypeDNS)
+       if dnsL == nil {
+               t.Error("No DNS Layer found")
+       }
+
+       dns, ok := dnsL.(*DNS)
+       if !ok {
+               return nil
+       }
+       return dns
+}
+
+var testDNSQueryA = []byte{
+       0xfe, 0x54, 0x00, 0x3e, 0x00, 0x96, 0x52, 0x54, /* .T.>..RT */
+       0x00, 0xbd, 0x1c, 0x70, 0x08, 0x00, 0x45, 0x00, /* ...p..E. */
+       0x00, 0x3c, 0x22, 0xe0, 0x00, 0x00, 0x40, 0x11, /* .<"...@. */
+       0xe2, 0x38, 0xc0, 0xa8, 0x7a, 0x46, 0xc0, 0xa8, /* .8..zF.. */
+       0x7a, 0x01, 0xc3, 0x35, 0x00, 0x35, 0x00, 0x28, /* z..5.5.( */
+       0x75, 0xd2, 0x52, 0x41, 0x01, 0x00, 0x00, 0x01, /* u.RA.... */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, /* .......w */
+       0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */
+       0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, /* e.com... */
+       0x00, 0x01, /* .. */
+}
+
+func TestDNSQueryA(t *testing.T) {
+       dns := loadDNS(testDNSQueryA, t)
+       if dns == nil {
+               t.Fatal("Failed to get a pointer to DNS struct")
+       }
+
+       if uint16(len(dns.Questions)) != dns.QDCount {
+               t.Fatal("Invalid query decoding, not the right number of questions")
+       }
+
+       if string(dns.Questions[0].Name) != "www.google.com" {
+               t.Errorf("Invalid query decoding, expecting 'www.google.com', got '%s'",
+                       dns.Questions[0].Name)
+       }
+       if dns.Questions[0].Class != DNSClassIN {
+               t.Errorf("Invalid query decoding, expecting Class IN, got '%d'",
+                       dns.Questions[0].Class)
+       }
+
+       if dns.Questions[0].Type != DNSTypeA {
+               t.Errorf("Invalid query decoding, expecting Type A, got '%d'",
+                       dns.Questions[0].Type)
+       }
+}
+
+var testDNSRRA = []byte{
+       0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */
+       0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */
+       0x01, 0x24, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* .$..@.@. */
+       0xc4, 0x30, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* .0..z... */
+       0x7a, 0x46, 0x00, 0x35, 0xc3, 0x35, 0x01, 0x10, /* zF.5.5.. */
+       0x76, 0xba, 0x52, 0x41, 0x81, 0x80, 0x00, 0x01, /* v.RA.... */
+       0x00, 0x06, 0x00, 0x04, 0x00, 0x04, 0x03, 0x77, /* .......w */
+       0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */
+       0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, /* e.com... */
+       0x00, 0x01, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* ........ */
+       0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+       0xc3, 0x67, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .g...... */
+       0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+       0xc3, 0x68, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .h...... */
+       0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+       0xc3, 0x69, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .i...... */
+       0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+       0xc3, 0x6a, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .j...... */
+       0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+       0xc3, 0x93, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* ........ */
+       0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */
+       0xc3, 0x63, 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, /* .c...... */
+       0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, /* .......n */
+       0x73, 0x32, 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, /* s2...... */
+       0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, /* ........ */
+       0x03, 0x6e, 0x73, 0x33, 0xc0, 0x10, 0xc0, 0x10, /* .ns3.... */
+       0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+       0x00, 0x06, 0x03, 0x6e, 0x73, 0x31, 0xc0, 0x10, /* ...ns1.. */
+       0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, /* ........ */
+       0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, 0x73, 0x34, /* .....ns4 */
+       0xc0, 0x10, 0xc0, 0xb0, 0x00, 0x01, 0x00, 0x01, /* ........ */
+       0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */
+       0x20, 0x0a, 0xc0, 0x8c, 0x00, 0x01, 0x00, 0x01, /*  ....... */
+       0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */
+       0x22, 0x0a, 0xc0, 0x9e, 0x00, 0x01, 0x00, 0x01, /* "....... */
+       0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */
+       0x24, 0x0a, 0xc0, 0xc2, 0x00, 0x01, 0x00, 0x01, /* $....... */
+       0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */
+       0x26, 0x0a, /* &. */
+}
+
+func TestDNSRRA(t *testing.T) {
+       dns := loadDNS(testDNSRRA, t)
+       if dns == nil {
+               t.Fatal("Failed to get a pointer to DNS struct")
+               return
+       }
+
+       if uint16(len(dns.Questions)) != dns.QDCount {
+               t.Fatal("Invalid query decoding, not the right number of questions")
+       } else if uint16(len(dns.Answers)) != dns.ANCount {
+               t.Fatal("Invalid query decoding, not the right number of answers")
+       } else if uint16(len(dns.Authorities)) != dns.NSCount {
+               t.Fatal("Invalid query decoding, not the right number of authorities")
+       } else if uint16(len(dns.Additionals)) != dns.ARCount {
+               t.Fatal("Invalid query decoding, not the right number of additionals info")
+       }
+
+       if string(dns.Questions[0].Name) != "www.google.com" {
+               t.Errorf("Invalid query decoding, expecting 'www.google.com', got '%s'",
+                       dns.Questions[0].Name)
+       }
+       if string(dns.Answers[0].Name) != "www.google.com" {
+               t.Errorf("Invalid query decoding, expecting 'www.google.com', got '%d'",
+                       dns.Questions[0].Class)
+       }
+       if dns.Answers[0].Class != DNSClassIN {
+               t.Errorf("Invalid query decoding, expecting Class IN, got '%d'",
+                       dns.Questions[0].Class)
+       }
+       if dns.Answers[0].Type != DNSTypeA {
+               t.Errorf("Invalid query decoding, expecting Type A, got '%d'",
+                       dns.Questions[0].Type)
+       }
+       if !dns.Answers[0].IP.Equal([]byte{74, 125, 195, 103}) {
+               t.Errorf("Invalid query decoding, invalid IP address,"+
+                       " expecting '74.125.195.103', got '%s'",
+                       dns.Answers[0].IP.String())
+       }
+       if len(dns.Answers) != 6 {
+               t.Errorf("No correct number of answers, expecting 6, go '%d'",
+                       len(dns.Answers))
+       }
+       if len(dns.Authorities) != 4 {
+               t.Errorf("No correct number of answers, expecting 4, go '%d'",
+                       len(dns.Answers))
+       }
+       if len(dns.Additionals) != 4 {
+               t.Errorf("No correct number of answers, expecting 4, go '%d'",
+                       len(dns.Answers))
+       } else {
+               for i, want := range []string{
+                       "ns1.google.com",
+                       "ns2.google.com",
+                       "ns3.google.com",
+                       "ns4.google.com",
+               } {
+                       if got := string(dns.Additionals[i].Name); got != want {
+                               t.Errorf("got %q want %q", got, want)
+                       }
+               }
+       }
+}
+
+var testDNSAAAA = []byte{
+       0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */
+       0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */
+       0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* ....@.@. */
+       0xc4, 0x74, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* .t..z... */
+       0x7a, 0x46, 0x00, 0x35, 0xdb, 0x13, 0x00, 0xcc, /* zF.5.... */
+       0x76, 0x76, 0xf3, 0x03, 0x81, 0x80, 0x00, 0x01, /* vv...... */
+       0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x03, 0x77, /* .......w */
+       0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */
+       0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x1c, /* e.com... */
+       0x00, 0x01, 0xc0, 0x0c, 0x00, 0x1c, 0x00, 0x01, /* ........ */
+       0x00, 0x00, 0x01, 0x2c, 0x00, 0x10, 0x2a, 0x00, /* ...,..*. */
+       0x14, 0x50, 0x40, 0x0c, 0x0c, 0x01, 0x00, 0x00, /* .P@..... */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xc0, 0x10, /* .....i.. */
+       0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+       0x00, 0x06, 0x03, 0x6e, 0x73, 0x34, 0xc0, 0x10, /* ...ns4.. */
+       0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, /* ........ */
+       0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, 0x73, 0x32, /* .....ns2 */
+       0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, /* ........ */
+       0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, /* .......n */
+       0x73, 0x31, 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, /* s1...... */
+       0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, /* ........ */
+       0x03, 0x6e, 0x73, 0x33, 0xc0, 0x10, 0xc0, 0x6c, /* .ns3...l */
+       0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+       0x00, 0x04, 0xd8, 0xef, 0x20, 0x0a, 0xc0, 0x5a, /* .... ..Z */
+       0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+       0x00, 0x04, 0xd8, 0xef, 0x22, 0x0a, 0xc0, 0x7e, /* ...."..~ */
+       0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+       0x00, 0x04, 0xd8, 0xef, 0x24, 0x0a, 0xc0, 0x48, /* ....$..H */
+       0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */
+       0x00, 0x04, 0xd8, 0xef, 0x26, 0x0a, /* ....&. */
+}
+
+func TestDNSAAAA(t *testing.T) {
+       dns := loadDNS(testDNSAAAA, t)
+       if dns == nil {
+               t.Error("Failed to get a pointer to DNS struct")
+               return
+       }
+
+       if len(dns.Questions) != 1 {
+               t.Error("Invalid number of question")
+               return
+       }
+       if dns.Questions[0].Type != DNSTypeAAAA {
+               t.Errorf("Invalid question, Type is not AAAA, found %d",
+                       dns.Questions[0].Type)
+       }
+
+       if len(dns.Answers) != 1 {
+               t.Error("Invalid number of answers")
+       }
+       if !dns.Answers[0].IP.Equal([]byte{0x2a, 0x00, 0x14, 0x50, 0x40,
+               0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69}) {
+               t.Error("Invalid IP address, found ",
+                       dns.Answers[0].IP.String())
+       }
+}
+
+var testDNSMXSOA = []byte{
+       0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */
+       0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */
+       0x00, 0x6e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* .n..@.@. */
+       0xc4, 0xe6, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* ....z... */
+       0x7a, 0x46, 0x00, 0x35, 0x9c, 0x60, 0x00, 0x5a, /* zF.5.`.Z */
+       0x76, 0x04, 0xfc, 0x7a, 0x81, 0x80, 0x00, 0x01, /* v..z.... */
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x77, /* .......w */
+       0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */
+       0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x0f, /* e.com... */
+       0x00, 0x01, 0xc0, 0x10, 0x00, 0x06, 0x00, 0x01, /* ........ */
+       0x00, 0x00, 0x00, 0x3c, 0x00, 0x26, 0x03, 0x6e, /* ...<.&.n */
+       0x73, 0x31, 0xc0, 0x10, 0x09, 0x64, 0x6e, 0x73, /* s1...dns */
+       0x2d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0xc0, 0x10, /* -admin.. */
+       0x00, 0x17, 0x9f, 0x64, 0x00, 0x00, 0x1c, 0x20, /* ...d...  */
+       0x00, 0x00, 0x07, 0x08, 0x00, 0x12, 0x75, 0x00, /* ......u. */
+       0x00, 0x00, 0x01, 0x2c, /* ..., */
+}
+
+func TestDNSMXSOA(t *testing.T) {
+       dns := loadDNS(testDNSMXSOA, t)
+       if dns == nil {
+               t.Error("Failed to get a pointer to DNS struct")
+               return
+       }
+
+       if len(dns.Authorities) != 1 {
+               t.Error("Invalid number of authoritative answers, found ",
+                       len(dns.Authorities))
+               return
+       }
+}
+
+func BenchmarkDecodeDNS(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testDNSQueryA, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+func BenchmarkDecodeDNSLayer(b *testing.B) {
+       var dns DNS
+       for i := 0; i < b.N; i++ {
+               dns.DecodeFromBytes(testDNSAAAA[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback)
+       }
+}
+func TestDNSDoesNotMalloc(t *testing.T) {
+       var dns DNS
+       if n := testing.AllocsPerRun(1000, func() {
+               if err := dns.DecodeFromBytes(testDNSAAAA[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback); err != nil {
+                       t.Fatal(err)
+               }
+       }); n > 0 {
+               t.Error(n, "mallocs decoding DNS")
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/udplite.go b/vendor/github.com/google/gopacket/layers/udplite.go
new file mode 100644 (file)
index 0000000..7d84c51
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "github.com/google/gopacket"
+)
+
+// UDPLite is the layer for UDP-Lite headers (rfc 3828).
+type UDPLite struct {
+       BaseLayer
+       SrcPort, DstPort UDPLitePort
+       ChecksumCoverage uint16
+       Checksum         uint16
+       sPort, dPort     []byte
+}
+
+// LayerType returns gopacket.LayerTypeUDPLite
+func (u *UDPLite) LayerType() gopacket.LayerType { return LayerTypeUDPLite }
+
+func decodeUDPLite(data []byte, p gopacket.PacketBuilder) error {
+       udp := &UDPLite{
+               SrcPort:          UDPLitePort(binary.BigEndian.Uint16(data[0:2])),
+               sPort:            data[0:2],
+               DstPort:          UDPLitePort(binary.BigEndian.Uint16(data[2:4])),
+               dPort:            data[2:4],
+               ChecksumCoverage: binary.BigEndian.Uint16(data[4:6]),
+               Checksum:         binary.BigEndian.Uint16(data[6:8]),
+               BaseLayer:        BaseLayer{data[:8], data[8:]},
+       }
+       p.AddLayer(udp)
+       p.SetTransportLayer(udp)
+       return p.NextDecoder(gopacket.LayerTypePayload)
+}
+
+func (u *UDPLite) TransportFlow() gopacket.Flow {
+       return gopacket.NewFlow(EndpointUDPLitePort, u.sPort, u.dPort)
+}
diff --git a/vendor/github.com/google/gopacket/layers/usb.go b/vendor/github.com/google/gopacket/layers/usb.go
new file mode 100644 (file)
index 0000000..d4f483c
--- /dev/null
@@ -0,0 +1,308 @@
+// Copyright 2014 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "github.com/google/gopacket"
+)
+
+type USBEventType uint8
+
+const (
+       USBEventTypeSubmit   USBEventType = 'S'
+       USBEventTypeComplete USBEventType = 'C'
+       USBEventTypeError    USBEventType = 'E'
+)
+
+func (a USBEventType) String() string {
+       switch a {
+       case USBEventTypeSubmit:
+               return "SUBMIT"
+       case USBEventTypeComplete:
+               return "COMPLETE"
+       case USBEventTypeError:
+               return "ERROR"
+       default:
+               return "Unknown event type"
+       }
+}
+
+type USBRequestBlockSetupRequest uint8
+
+const (
+       USBRequestBlockSetupRequestGetStatus        USBRequestBlockSetupRequest = 0x00
+       USBRequestBlockSetupRequestClearFeature     USBRequestBlockSetupRequest = 0x01
+       USBRequestBlockSetupRequestSetFeature       USBRequestBlockSetupRequest = 0x03
+       USBRequestBlockSetupRequestSetAddress       USBRequestBlockSetupRequest = 0x05
+       USBRequestBlockSetupRequestGetDescriptor    USBRequestBlockSetupRequest = 0x06
+       USBRequestBlockSetupRequestSetDescriptor    USBRequestBlockSetupRequest = 0x07
+       USBRequestBlockSetupRequestGetConfiguration USBRequestBlockSetupRequest = 0x08
+       USBRequestBlockSetupRequestSetConfiguration USBRequestBlockSetupRequest = 0x09
+       USBRequestBlockSetupRequestSetIdle          USBRequestBlockSetupRequest = 0x0a
+)
+
+func (a USBRequestBlockSetupRequest) String() string {
+       switch a {
+       case USBRequestBlockSetupRequestGetStatus:
+               return "GET_STATUS"
+       case USBRequestBlockSetupRequestClearFeature:
+               return "CLEAR_FEATURE"
+       case USBRequestBlockSetupRequestSetFeature:
+               return "SET_FEATURE"
+       case USBRequestBlockSetupRequestSetAddress:
+               return "SET_ADDRESS"
+       case USBRequestBlockSetupRequestGetDescriptor:
+               return "GET_DESCRIPTOR"
+       case USBRequestBlockSetupRequestSetDescriptor:
+               return "SET_DESCRIPTOR"
+       case USBRequestBlockSetupRequestGetConfiguration:
+               return "GET_CONFIGURATION"
+       case USBRequestBlockSetupRequestSetConfiguration:
+               return "SET_CONFIGURATION"
+       case USBRequestBlockSetupRequestSetIdle:
+               return "SET_IDLE"
+       default:
+               return "UNKNOWN"
+       }
+}
+
+type USBTransportType uint8
+
+const (
+       USBTransportTypeTransferIn  USBTransportType = 0x80 // Indicates send or receive
+       USBTransportTypeIsochronous USBTransportType = 0x00 // Isochronous transfers occur continuously and periodically. They typically contain time sensitive information, such as an audio or video stream.
+       USBTransportTypeInterrupt   USBTransportType = 0x01 // Interrupt transfers are typically non-periodic, small device "initiated" communication requiring bounded latency, such as pointing devices or keyboards.
+       USBTransportTypeControl     USBTransportType = 0x02 // Control transfers are typically used for command and status operations.
+       USBTransportTypeBulk        USBTransportType = 0x03 // Bulk transfers can be used for large bursty data, using all remaining available bandwidth, no guarantees on bandwidth or latency, such as file transfers.
+)
+
+func (a USBTransportType) LayerType() gopacket.LayerType {
+       return USBTypeMetadata[a].LayerType
+}
+
+func (a USBTransportType) String() string {
+       switch a {
+       case USBTransportTypeTransferIn:
+               return "Transfer In"
+       case USBTransportTypeIsochronous:
+               return "Isochronous"
+       case USBTransportTypeInterrupt:
+               return "Interrupt"
+       case USBTransportTypeControl:
+               return "Control"
+       case USBTransportTypeBulk:
+               return "Bulk"
+       default:
+               return "Unknown transport type"
+       }
+}
+
+type USBDirectionType uint8
+
+const (
+       USBDirectionTypeUnknown USBDirectionType = iota
+       USBDirectionTypeIn
+       USBDirectionTypeOut
+)
+
+func (a USBDirectionType) String() string {
+       switch a {
+       case USBDirectionTypeIn:
+               return "In"
+       case USBDirectionTypeOut:
+               return "Out"
+       default:
+               return "Unknown direction type"
+       }
+}
+
+// The reference at http://www.beyondlogic.org/usbnutshell/usb1.shtml contains more information about the protocol.
+type USB struct {
+       BaseLayer
+       ID             uint64
+       EventType      USBEventType
+       TransferType   USBTransportType
+       Direction      USBDirectionType
+       EndpointNumber uint8
+       DeviceAddress  uint8
+       BusID          uint16
+       TimestampSec   int64
+       TimestampUsec  int32
+       Setup          bool
+       Data           bool
+       Status         int32
+       UrbLength      uint32
+       UrbDataLength  uint32
+
+       UrbInterval            uint32
+       UrbStartFrame          uint32
+       UrbCopyOfTransferFlags uint32
+       IsoNumDesc             uint32
+}
+
+func (u *USB) LayerType() gopacket.LayerType { return LayerTypeUSB }
+
+func (m *USB) NextLayerType() gopacket.LayerType {
+       if m.Setup {
+               return LayerTypeUSBRequestBlockSetup
+       } else if m.Data {
+       }
+
+       return m.TransferType.LayerType()
+}
+
+func decodeUSB(data []byte, p gopacket.PacketBuilder) error {
+       d := &USB{}
+
+       return decodingLayerDecoder(d, data, p)
+}
+
+func (m *USB) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.ID = binary.LittleEndian.Uint64(data[0:8])
+       m.EventType = USBEventType(data[8])
+       m.TransferType = USBTransportType(data[9])
+
+       m.EndpointNumber = data[10] & 0x7f
+       if data[10]&uint8(USBTransportTypeTransferIn) > 0 {
+               m.Direction = USBDirectionTypeIn
+       } else {
+               m.Direction = USBDirectionTypeOut
+       }
+
+       m.DeviceAddress = data[11]
+       m.BusID = binary.LittleEndian.Uint16(data[12:14])
+
+       if uint(data[14]) == 0 {
+               m.Setup = true
+       }
+
+       if uint(data[15]) == 0 {
+               m.Data = true
+       }
+
+       m.TimestampSec = int64(binary.LittleEndian.Uint64(data[16:24]))
+       m.TimestampUsec = int32(binary.LittleEndian.Uint32(data[24:28]))
+       m.Status = int32(binary.LittleEndian.Uint32(data[28:32]))
+       m.UrbLength = binary.LittleEndian.Uint32(data[32:36])
+       m.UrbDataLength = binary.LittleEndian.Uint32(data[36:40])
+
+       m.Contents = data[:40]
+       m.Payload = data[40:]
+
+       if m.Setup {
+               m.Payload = data[40:]
+       } else if m.Data {
+               m.Payload = data[uint32(len(data))-m.UrbDataLength:]
+       }
+
+       // if 64 bit, dissect_linux_usb_pseudo_header_ext
+       if false {
+               m.UrbInterval = binary.LittleEndian.Uint32(data[40:44])
+               m.UrbStartFrame = binary.LittleEndian.Uint32(data[44:48])
+               m.UrbDataLength = binary.LittleEndian.Uint32(data[48:52])
+               m.IsoNumDesc = binary.LittleEndian.Uint32(data[52:56])
+               m.Contents = data[:56]
+               m.Payload = data[56:]
+       }
+
+       // crc5 or crc16
+       // eop (end of packet)
+
+       return nil
+}
+
+type USBRequestBlockSetup struct {
+       BaseLayer
+       RequestType uint8
+       Request     USBRequestBlockSetupRequest
+       Value       uint16
+       Index       uint16
+       Length      uint16
+}
+
+func (u *USBRequestBlockSetup) LayerType() gopacket.LayerType { return LayerTypeUSBRequestBlockSetup }
+
+func (m *USBRequestBlockSetup) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+func (m *USBRequestBlockSetup) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.RequestType = data[0]
+       m.Request = USBRequestBlockSetupRequest(data[1])
+       m.Value = binary.LittleEndian.Uint16(data[2:4])
+       m.Index = binary.LittleEndian.Uint16(data[4:6])
+       m.Length = binary.LittleEndian.Uint16(data[6:8])
+       m.Contents = data[:8]
+       m.Payload = data[8:]
+       return nil
+}
+
+func decodeUSBRequestBlockSetup(data []byte, p gopacket.PacketBuilder) error {
+       d := &USBRequestBlockSetup{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+type USBControl struct {
+       BaseLayer
+}
+
+func (u *USBControl) LayerType() gopacket.LayerType { return LayerTypeUSBControl }
+
+func (m *USBControl) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+func (m *USBControl) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.Contents = data
+       return nil
+}
+
+func decodeUSBControl(data []byte, p gopacket.PacketBuilder) error {
+       d := &USBControl{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+type USBInterrupt struct {
+       BaseLayer
+}
+
+func (u *USBInterrupt) LayerType() gopacket.LayerType { return LayerTypeUSBInterrupt }
+
+func (m *USBInterrupt) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+func (m *USBInterrupt) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.Contents = data
+       return nil
+}
+
+func decodeUSBInterrupt(data []byte, p gopacket.PacketBuilder) error {
+       d := &USBInterrupt{}
+       return decodingLayerDecoder(d, data, p)
+}
+
+type USBBulk struct {
+       BaseLayer
+}
+
+func (u *USBBulk) LayerType() gopacket.LayerType { return LayerTypeUSBBulk }
+
+func (m *USBBulk) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypePayload
+}
+
+func (m *USBBulk) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+       m.Contents = data
+       return nil
+}
+
+func decodeUSBBulk(data []byte, p gopacket.PacketBuilder) error {
+       d := &USBBulk{}
+       return decodingLayerDecoder(d, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/usb_test.go b/vendor/github.com/google/gopacket/layers/usb_test.go
new file mode 100644 (file)
index 0000000..35e9c70
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright 2014, Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       _ "fmt"
+       "github.com/google/gopacket"
+       "reflect"
+       "testing"
+)
+
+// Generator python layers/test_creator.py --link_type USB --name USB dongle.pcap
+// http://wiki.wireshark.org/SampleCaptures#Sample_Captures
+
+// testPacketUSB0 is the packet:
+//   02:41:04.689546 INTERRUPT COMPLETE to 2:1:1
+//     0x0000:  0038 4a3b 0088 ffff 4301 8101 0200 2d00  .8J;....C.....-.
+//     0x0010:  c0d3 5b50 0000 0000 8a85 0a00 0000 0000  ..[P............
+//     0x0020:  0100 0000 0100 0000 0000 0000 0000 0000  ................
+//     0x0030:  8000 0000 0000 0000 0002 0000 0000 0000  ................
+//     0x0040:  04                                       .
+var testPacketUSB0 = []byte{
+       0x00, 0x38, 0x4a, 0x3b, 0x00, 0x88, 0xff, 0xff, 0x43, 0x01, 0x81, 0x01, 0x02, 0x00, 0x2d, 0x00,
+       0xc0, 0xd3, 0x5b, 0x50, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x85, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x04,
+}
+
+func TestPacketUSB0(t *testing.T) {
+       p := gopacket.NewPacket(testPacketUSB0, LinkTypeLinuxUSB, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeUSB, LayerTypeUSBInterrupt}, t)
+
+       if got, ok := p.Layer(LayerTypeUSB).(*USB); ok {
+               want := &USB{
+                       BaseLayer: BaseLayer{
+                               Contents: []uint8{0x0, 0x38, 0x4a, 0x3b, 0x0, 0x88, 0xff, 0xff, 0x43, 0x1, 0x81, 0x1, 0x2, 0x0, 0x2d, 0x0, 0xc0, 0xd3, 0x5b, 0x50, 0x0, 0x0, 0x0, 0x0, 0x8a, 0x85, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0},
+                               Payload:  []uint8{0x4},
+                       },
+                       ID:             0xffff88003b4a3800,
+                       EventType:      USBEventTypeComplete,
+                       TransferType:   USBTransportTypeInterrupt,
+                       Direction:      0x1,
+                       EndpointNumber: 0x1,
+                       DeviceAddress:  0x1,
+                       BusID:          0x2,
+                       TimestampSec:   1348195264,
+                       TimestampUsec:  689546,
+                       Setup:          false,
+                       Data:           true,
+                       Status:         0,
+                       UrbLength:      0x1,
+                       UrbDataLength:  0x1,
+               }
+
+               if !reflect.DeepEqual(got, want) {
+                       t.Errorf("USB packet processing failed:\ngot  :\n%#v\n\nwant :\n%#v\n\n", got, want)
+               }
+       }
+
+}
+func BenchmarkDecodePacketUSB0(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketUSB0, LinkTypeLinuxUSB, gopacket.NoCopy)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/vrrp.go b/vendor/github.com/google/gopacket/layers/vrrp.go
new file mode 100644 (file)
index 0000000..ffaafe6
--- /dev/null
@@ -0,0 +1,156 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "errors"
+       "net"
+
+       "github.com/google/gopacket"
+)
+
+/*
+       This layer provides decoding for Virtual Router Redundancy Protocol (VRRP) v2.
+       https://tools.ietf.org/html/rfc3768#section-5
+    0                   1                   2                   3
+    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |Version| Type  | Virtual Rtr ID|   Priority    | Count IP Addrs|
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |   Auth Type   |   Adver Int   |          Checksum             |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                         IP Address (1)                        |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                            .                                  |
+   |                            .                                  |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                         IP Address (n)                        |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                     Authentication Data (1)                   |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                     Authentication Data (2)                   |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+*/
+
+type VRRPv2Type uint8
+type VRRPv2AuthType uint8
+
+const (
+       VRRPv2Advertisement VRRPv2Type = 0x01 // router advertisement
+)
+
+// String conversions for VRRP message types
+func (v VRRPv2Type) String() string {
+       switch v {
+       case VRRPv2Advertisement:
+               return "VRRPv2 Advertisement"
+       default:
+               return ""
+       }
+}
+
+const (
+       VRRPv2AuthNoAuth    VRRPv2AuthType = 0x00 // No Authentication
+       VRRPv2AuthReserved1 VRRPv2AuthType = 0x01 // Reserved field 1
+       VRRPv2AuthReserved2 VRRPv2AuthType = 0x02 // Reserved field 2
+)
+
+func (v VRRPv2AuthType) String() string {
+       switch v {
+       case VRRPv2AuthNoAuth:
+               return "No Authentication"
+       case VRRPv2AuthReserved1:
+               return "Reserved"
+       case VRRPv2AuthReserved2:
+               return "Reserved"
+       default:
+               return ""
+       }
+}
+
+// VRRPv2 represents an VRRP v2 message.
+type VRRPv2 struct {
+       BaseLayer
+       Version      uint8          // The version field specifies the VRRP protocol version of this packet (v2)
+       Type         VRRPv2Type     // The type field specifies the type of this VRRP packet.  The only type defined in v2 is ADVERTISEMENT
+       VirtualRtrID uint8          // identifies the virtual router this packet is reporting status for
+       Priority     uint8          // specifies the sending VRRP router's priority for the virtual router (100 = default)
+       CountIPAddr  uint8          // The number of IP addresses contained in this VRRP advertisement.
+       AuthType     VRRPv2AuthType // identifies the authentication method being utilized
+       AdverInt     uint8          // The Advertisement interval indicates the time interval (in seconds) between ADVERTISEMENTS.  The default is 1 second
+       Checksum     uint16         // used to detect data corruption in the VRRP message.
+       IPAddress    []net.IP       // one or more IP addresses associated with the virtual router. Specified in the CountIPAddr field.
+}
+
+// LayerType returns LayerTypeVRRP for VRRP v2 message.
+func (v *VRRPv2) LayerType() gopacket.LayerType { return LayerTypeVRRP }
+
+func (v *VRRPv2) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+       v.BaseLayer = BaseLayer{Contents: data[:len(data)]}
+       v.Version = data[0] >> 4 // high nibble == VRRP version. We're expecting v2
+
+       v.Type = VRRPv2Type(data[0] & 0x0F) // low nibble == VRRP type. Expecting 1 (advertisement)
+       if v.Type != 1 {
+               // rfc3768: A packet with unknown type MUST be discarded.
+               return errors.New("Unrecognized VRRPv2 type field.")
+       }
+
+       v.VirtualRtrID = data[1]
+       v.Priority = data[2]
+
+       v.CountIPAddr = data[3]
+       if v.CountIPAddr < 1 {
+               return errors.New("VRRPv2 number of IP addresses is not valid.")
+       }
+
+       v.AuthType = VRRPv2AuthType(data[4])
+       v.AdverInt = uint8(data[5])
+       v.Checksum = binary.BigEndian.Uint16(data[6:8])
+
+       // populate the IPAddress field. The number of addresses is specified in the v.CountIPAddr field
+       // offset references the starting byte containing the list of ip addresses
+       offset := 8
+       for i := uint8(0); i < v.CountIPAddr; i++ {
+               v.IPAddress = append(v.IPAddress, data[offset:offset+4])
+               offset += 4
+       }
+
+       //      any trailing packets here may be authentication data and *should* be ignored in v2 as per RFC
+       //
+       //                      5.3.10.  Authentication Data
+       //
+       //                      The authentication string is currently only used to maintain
+       //                      backwards compatibility with RFC 2338.  It SHOULD be set to zero on
+       //                      transmission and ignored on reception.
+       return nil
+}
+
+// CanDecode specifies the layer type in which we are attempting to unwrap.
+func (v *VRRPv2) CanDecode() gopacket.LayerClass {
+       return LayerTypeVRRP
+}
+
+// NextLayerType specifies the next layer that should be decoded. VRRP does not contain any further payload, so we set to 0
+func (v *VRRPv2) NextLayerType() gopacket.LayerType {
+       return gopacket.LayerTypeZero
+}
+
+// The VRRP packet does not include payload data. Setting byte slice to nil
+func (v *VRRPv2) Payload() []byte {
+       return nil
+}
+
+// decodeVRRP will parse VRRP v2
+func decodeVRRP(data []byte, p gopacket.PacketBuilder) error {
+       if len(data) < 8 {
+               return errors.New("Not a valid VRRP packet. Packet length is too small.")
+       }
+       v := &VRRPv2{}
+       return decodingLayerDecoder(v, data, p)
+}
diff --git a/vendor/github.com/google/gopacket/layers/vrrp_test.go b/vendor/github.com/google/gopacket/layers/vrrp_test.go
new file mode 100644 (file)
index 0000000..bc6b7e4
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "testing"
+)
+
+// vrrpPacketPriority100 is the packet:
+//   06:12:21.813317 IP 192.168.0.30 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 1s, length 20
+//     0x0000:  0100 5e00 0012 0000 5e00 0101 0800 45c0  ..^.....^.....E.
+//     0x0010:  0028 0000 0000 ff70 19cd c0a8 001e e000  .(.....p........
+//     0x0020:  0012 2101 6401 0001 ba52 c0a8 0001 0000  ..!.d....R......
+//     0x0030:  0000 0000 0000 0000 0000 0000            ............
+var vrrpPacketPriority100 = []byte{
+       0x01, 0x00, 0x5e, 0x00, 0x00, 0x12, 0x00, 0x00, 0x5e, 0x00, 0x01, 0x01, 0x08, 0x00, 0x45, 0xc0,
+       0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0xff, 0x70, 0x19, 0xcd, 0xc0, 0xa8, 0x00, 0x1e, 0xe0, 0x00,
+       0x00, 0x12, 0x21, 0x01, 0x64, 0x01, 0x00, 0x01, 0xba, 0x52, 0xc0, 0xa8, 0x00, 0x01, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestVRRPPacketPacket0(t *testing.T) {
+       p := gopacket.NewPacket(vrrpPacketPriority100, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeVRRP}, t)
+
+       // Version=2 Type=VRRPv2 Advertisement VirtualRtrID=1 Priority=100
+       vrrp := p.Layer(LayerTypeVRRP).(*VRRPv2)
+       if vrrp.Version != 2 {
+               t.Fatalf("Unable to decode VRRPv2 version. Received %d, expected %d", vrrp.Version, 2)
+       }
+
+       if vrrp.Type != 1 {
+               t.Fatalf("Unable to decode VRRPv2 type. Received %d, expected %d", vrrp.Type, 1)
+       }
+
+       if vrrp.Priority != 100 {
+               t.Fatalf("Unable to decode VRRPv2 priority. Received %d, expected %d", vrrp.Priority, 100)
+       }
+
+       if vrrp.Checksum != 47698 {
+               t.Fatalf("Unable to decode VRRPv2 checksum. Received %d, expected %d", vrrp.Checksum, 47698)
+       }
+}
+func BenchmarkDecodeVRRPPacket0(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(vrrpPacketPriority100, LayerTypeEthernet, gopacket.NoCopy)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layers/vxlan.go b/vendor/github.com/google/gopacket/layers/vxlan.go
new file mode 100644 (file)
index 0000000..08f1ecb
--- /dev/null
@@ -0,0 +1,94 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "encoding/binary"
+       "fmt"
+       "github.com/google/gopacket"
+)
+
+//  VXLAN is specifed in RFC 7348 https://tools.ietf.org/html/rfc7348
+//  G, D, A, Group Policy ID from https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00
+//  0                   1                   2                   3
+//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+//  0             8               16              24              32
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |G|R|R|R|I|R|R|R|R|D|R|R|A|R|R|R|       Group Policy ID         |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |     24 bit VXLAN Network Identifier           |   Reserved    |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+// VXLAN is a VXLAN packet header
+type VXLAN struct {
+       BaseLayer
+       ValidIDFlag      bool   // 'I' bit per RFC 7348
+       VNI              uint32 // 'VXLAN Network Identifier' 24 bits per RFC 7348
+       GBPExtension     bool   // 'G' bit per Group Policy https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00
+       GBPDontLearn     bool   // 'D' bit per Group Policy
+       GBPApplied       bool   // 'A' bit per Group Policy
+       GBPGroupPolicyID uint16 // 'Group Policy ID' 16 bits per Group Policy
+}
+
+// LayerType returns LayerTypeVXLAN
+func (vx *VXLAN) LayerType() gopacket.LayerType { return LayerTypeVXLAN }
+
+func decodeVXLAN(data []byte, p gopacket.PacketBuilder) error {
+       vx := &VXLAN{}
+
+       // VNI is a 24bit number, Uint32 requires 32 bits
+       var buf [4]byte
+       copy(buf[1:], data[4:7])
+
+       // RFC 7348 https://tools.ietf.org/html/rfc7348
+       vx.ValidIDFlag = data[0]&0x08 > 0        // 'I' bit per RFC7348
+       vx.VNI = binary.BigEndian.Uint32(buf[:]) // VXLAN Network Identifier per RFC7348
+
+       // Group Based Policy https://tools.ietf.org/html/draft-smith-vxlan-group-policy-00
+       vx.GBPExtension = data[0]&0x80 > 0                       // 'G' bit per the group policy draft
+       vx.GBPDontLearn = data[1]&0x40 > 0                       // 'D' bit - the egress VTEP MUST NOT learn the source address of the encapsulated frame.
+       vx.GBPApplied = data[1]&0x80 > 0                         // 'A' bit - indicates that the group policy has already been applied to this packet.
+       vx.GBPGroupPolicyID = binary.BigEndian.Uint16(data[2:4]) // Policy ID as per the group policy draft
+
+       // Layer information
+       const vxlanLength = 8
+       vx.Contents = data[:vxlanLength]
+       vx.Payload = data[vxlanLength:]
+
+       p.AddLayer(vx)
+       return p.NextDecoder(LinkTypeEthernet)
+}
+
+// SerializeTo writes the serialized form of this layer into the
+// SerializationBuffer, implementing gopacket.SerializableLayer.
+// See the docs for gopacket.SerializableLayer for more info.
+func (vx *VXLAN) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+       bytes, err := b.PrependBytes(8)
+       if err != nil {
+               return err
+       }
+
+       if vx.ValidIDFlag {
+               bytes[0] |= 0x08
+       }
+       if vx.GBPExtension {
+               bytes[0] |= 0x80
+       }
+       if vx.GBPDontLearn {
+               bytes[1] |= 0x40
+       }
+       if vx.GBPApplied {
+               bytes[1] |= 0x80
+       }
+
+       binary.BigEndian.PutUint16(bytes[2:4], vx.GBPGroupPolicyID)
+       if vx.VNI >= 1<<24 {
+               return fmt.Errorf("Virtual Network Identifier = %x exceeds max for 24-bit uint", vx.VNI)
+       }
+       binary.BigEndian.PutUint32(bytes[4:8], vx.VNI<<8)
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/layers/vxlan_test.go b/vendor/github.com/google/gopacket/layers/vxlan_test.go
new file mode 100644 (file)
index 0000000..a02d934
--- /dev/null
@@ -0,0 +1,108 @@
+// Copyright 2016 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package layers
+
+import (
+       "github.com/google/gopacket"
+       "reflect"
+       "testing"
+)
+
+// VXLAN is specifed in RFC 7348
+//  0                   1                   2                   3
+//  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+//  0             8               16              24              32
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |G|R|R|R|I|R|R|R|R|D|R|R|A|R|R|R|       Group Policy ID         |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// |     24 bit VXLAN Network Identifier           |   Reserved    |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+// Ethernet[IP[UDP[VXLAN[Ethernet[IP[ICMP]]]]]]
+
+// testPacketVXLAN
+// 0000   00 16 3e 08 71 cf 36 dc 85 1e b3 40 08 00 45 00  ..>.q.6....@..E.
+// 0010   00 86 d2 c0 40 00 40 11 51 52 c0 a8 cb 01 c0 a8  ....@.@.QR......
+// 0020   ca 01 b0 5d 12 b5 00 72 00 00 08 00 00 00 00 00  ...]...r........
+// 0030   00 00 00 30 88 01 00 02 00 16 3e 37 f6 04 08 00  ...0......>7....
+// 0040   45 00 00 54 00 00 40 00 40 01 23 4f c0 a8 cb 03  E..T..@.@.#O....
+// 0050   c0 a8 cb 05 08 00 f6 f2 05 0c 00 01 fc e2 97 51  ...............Q
+// 0060   00 00 00 00 a6 f8 02 00 00 00 00 00 10 11 12 13  ................
+// 0070   14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23  ............ !"#
+// 0080   24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33  $%&'()*+,-./0123
+// 0090   34 35 36 37                                      4567               ./01234567
+var testPacketVXLAN = []byte{
+       0x00, 0x16, 0x3e, 0x08, 0x71, 0xcf, 0x36, 0xdc, 0x85, 0x1e, 0xb3, 0x40, 0x08, 0x00, 0x45, 0x00,
+       0x00, 0x86, 0xd2, 0xc0, 0x40, 0x00, 0x40, 0x11, 0x51, 0x52, 0xc0, 0xa8, 0xcb, 0x01, 0xc0, 0xa8,
+       0xca, 0x01, 0xb0, 0x5d, 0x12, 0xb5, 0x00, 0x72, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0xff, 0x00, 0x00, 0x30, 0x88, 0x01, 0x00, 0x02, 0x00, 0x16, 0x3e, 0x37, 0xf6, 0x04, 0x08, 0x00,
+       0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0x23, 0x4f, 0xc0, 0xa8, 0xcb, 0x03,
+       0xc0, 0xa8, 0xcb, 0x05, 0x08, 0x00, 0xf6, 0xf2, 0x05, 0x0c, 0x00, 0x01, 0xfc, 0xe2, 0x97, 0x51,
+       0x00, 0x00, 0x00, 0x00, 0xa6, 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13,
+       0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
+       0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
+       0x34, 0x35, 0x36, 0x37,
+}
+
+func TestPacketVXLAN(t *testing.T) {
+       p := gopacket.NewPacket(testPacketVXLAN, LinkTypeEthernet, gopacket.Default)
+       if p.ErrorLayer() != nil {
+               t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+       }
+       checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeVXLAN, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+       if got, ok := p.Layer(LayerTypeVXLAN).(*VXLAN); ok {
+               want := &VXLAN{
+                       BaseLayer: BaseLayer{
+                               Contents: []byte{0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00},
+                               Payload: []byte{0x00, 0x30, 0x88, 0x01, 0x00, 0x02, 0x00, 0x16, 0x3e, 0x37, 0xf6, 0x04, 0x08, 0x00,
+                                       0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0x23, 0x4f, 0xc0, 0xa8, 0xcb, 0x03,
+                                       0xc0, 0xa8, 0xcb, 0x05, 0x08, 0x00, 0xf6, 0xf2, 0x05, 0x0c, 0x00, 0x01, 0xfc, 0xe2, 0x97, 0x51,
+                                       0x00, 0x00, 0x00, 0x00, 0xa6, 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13,
+                                       0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
+                                       0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
+                                       0x34, 0x35, 0x36, 0x37},
+                       },
+                       ValidIDFlag:      true,
+                       VNI:              255,
+                       GBPExtension:     false,
+                       GBPApplied:       false,
+                       GBPDontLearn:     false,
+                       GBPGroupPolicyID: 0,
+               }
+               if !reflect.DeepEqual(want, got) {
+                       t.Errorf("VXLAN layer mismatch, \nwant %#v\ngot %#v\n", want, got)
+               }
+       }
+}
+
+func BenchmarkDecodePacketVXLAN(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               gopacket.NewPacket(testPacketVXLAN, LinkTypeEthernet, gopacket.NoCopy)
+       }
+}
+
+func TestIsomorphicPacketVXLAN(t *testing.T) {
+       vx := &VXLAN{
+               ValidIDFlag:      true,
+               VNI:              255,
+               GBPExtension:     true,
+               GBPApplied:       true,
+               GBPDontLearn:     true,
+               GBPGroupPolicyID: 777,
+       }
+
+       b := gopacket.NewSerializeBuffer()
+       vx.SerializeTo(b, gopacket.SerializeOptions{})
+
+       p := gopacket.NewPacket(b.Bytes(), gopacket.DecodeFunc(decodeVXLAN), gopacket.Default)
+       vxTranslated := p.Layer(LayerTypeVXLAN).(*VXLAN)
+       vxTranslated.BaseLayer = BaseLayer{}
+
+       if !reflect.DeepEqual(vx, vxTranslated) {
+               t.Errorf("VXLAN isomorph mismatch, \nwant %#v\ngot %#v\n", vx, vxTranslated)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/layertype.go b/vendor/github.com/google/gopacket/layertype.go
new file mode 100644 (file)
index 0000000..3abfee1
--- /dev/null
@@ -0,0 +1,111 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "fmt"
+       "strconv"
+)
+
+// LayerType is a unique identifier for each type of layer.  This enumeration
+// does not match with any externally available numbering scheme... it's solely
+// usable/useful within this library as a means for requesting layer types
+// (see Packet.Layer) and determining which types of layers have been decoded.
+//
+// New LayerTypes may be created by calling gopacket.RegisterLayerType.
+type LayerType int64
+
+// LayerTypeMetadata contains metadata associated with each LayerType.
+type LayerTypeMetadata struct {
+       // Name is the string returned by each layer type's String method.
+       Name string
+       // Decoder is the decoder to use when the layer type is passed in as a
+       // Decoder.
+       Decoder Decoder
+}
+
+type layerTypeMetadata struct {
+       inUse bool
+       LayerTypeMetadata
+}
+
+// DecodersByLayerName maps layer names to decoders for those layers.
+// This allows users to specify decoders by name to a program and have that
+// program pick the correct decoder accordingly.
+var DecodersByLayerName = map[string]Decoder{}
+
+const maxLayerType = 2000
+
+var ltMeta [maxLayerType]layerTypeMetadata
+var ltMetaMap = map[LayerType]layerTypeMetadata{}
+
+// RegisterLayerType creates a new layer type and registers it globally.
+// The number passed in must be unique, or a runtime panic will occur.  Numbers
+// 0-999 are reserved for the gopacket library.  Numbers 1000-1999 should be
+// used for common application-specific types, and are very fast.  Any other
+// number (negative or >= 2000) may be used for uncommon application-specific
+// types, and are somewhat slower (they require a map lookup over an array
+// index).
+func RegisterLayerType(num int, meta LayerTypeMetadata) LayerType {
+       if 0 <= num && num < maxLayerType {
+               if ltMeta[num].inUse {
+                       panic("Layer type already exists")
+               }
+       } else {
+               if ltMetaMap[LayerType(num)].inUse {
+                       panic("Layer type already exists")
+               }
+       }
+       return OverrideLayerType(num, meta)
+}
+
+// OverrideLayerType acts like RegisterLayerType, except that if the layer type
+// has already been registered, it overrides the metadata with the passed-in
+// metadata intead of panicing.
+func OverrideLayerType(num int, meta LayerTypeMetadata) LayerType {
+       if 0 <= num && num < maxLayerType {
+               ltMeta[num] = layerTypeMetadata{
+                       inUse:             true,
+                       LayerTypeMetadata: meta,
+               }
+       } else {
+               ltMetaMap[LayerType(num)] = layerTypeMetadata{
+                       inUse:             true,
+                       LayerTypeMetadata: meta,
+               }
+       }
+       DecodersByLayerName[meta.Name] = meta.Decoder
+       return LayerType(num)
+}
+
+// Decode decodes the given data using the decoder registered with the layer
+// type.
+func (t LayerType) Decode(data []byte, c PacketBuilder) error {
+       var d Decoder
+       if 0 <= int(t) && int(t) < maxLayerType {
+               d = ltMeta[int(t)].Decoder
+       } else {
+               d = ltMetaMap[t].Decoder
+       }
+       if d != nil {
+               return d.Decode(data, c)
+       }
+       return fmt.Errorf("Layer type %v has no associated decoder", t)
+}
+
+// String returns the string associated with this layer type.
+func (t LayerType) String() (s string) {
+       if 0 <= int(t) && int(t) < maxLayerType {
+               s = ltMeta[int(t)].Name
+       } else {
+               s = ltMetaMap[t].Name
+       }
+       if s == "" {
+               s = strconv.Itoa(int(t))
+       }
+       return
+}
diff --git a/vendor/github.com/google/gopacket/macs/benchmark_test.go b/vendor/github.com/google/gopacket/macs/benchmark_test.go
new file mode 100644 (file)
index 0000000..33af5c2
--- /dev/null
@@ -0,0 +1,18 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package macs
+
+import (
+       "testing"
+)
+
+func BenchmarkCheckEthernetPrefix(b *testing.B) {
+       key := [3]byte{5, 5, 5}
+       for i := 0; i < b.N; i++ {
+               _ = ValidMACPrefixMap[key]
+       }
+}
diff --git a/vendor/github.com/google/gopacket/macs/doc.go b/vendor/github.com/google/gopacket/macs/doc.go
new file mode 100644 (file)
index 0000000..c0d32a8
--- /dev/null
@@ -0,0 +1,12 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package macs provides an in-memory mapping of all valid Ethernet MAC address
+// prefixes to their associated organization.
+//
+// The ValidMACPrefixMap map maps 3-byte prefixes to organization strings.  It
+// can be updated using 'go run gen.go' in this directory.
+package macs
diff --git a/vendor/github.com/google/gopacket/macs/gen.go b/vendor/github.com/google/gopacket/macs/gen.go
new file mode 100644 (file)
index 0000000..ccfcc34
--- /dev/null
@@ -0,0 +1,98 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build ignore
+
+// This binary pulls the list of known MAC
+// prefixes from IEEE and writes them out to a go file which is compiled
+// into gopacket.  It should be run as follows:
+//
+//  go run gen.go | gofmt > valid_mac_prefixes.go
+package main
+
+import (
+       "bufio"
+       "bytes"
+       "encoding/hex"
+       "flag"
+       "fmt"
+       "io"
+       "net/http"
+       "os"
+       "regexp"
+       "sort"
+       "time"
+)
+
+const header = `// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package macs
+
+// Created by gen.go, don't edit manually
+// Generated at %s
+// Fetched from %q
+
+// ValidMACPrefixMap maps a valid MAC address prefix to the name of the
+// organization that owns the rights to use it.  We map it to a hidden
+// variable so it won't show up in godoc, since it's a very large map.
+var ValidMACPrefixMap = validMACPrefixMap
+var validMACPrefixMap = map[[3]byte]string{
+`
+
+var url = flag.String("url", "http://standards.ieee.org/develop/regauth/oui/oui.txt", "URL to fetch MACs from")
+
+type mac struct {
+       prefix  [3]byte
+       company string
+}
+
+type macs []mac
+
+func (m macs) Len() int           { return len(m) }
+func (m macs) Less(i, j int) bool { return bytes.Compare(m[i].prefix[:], m[j].prefix[:]) < 0 }
+func (m macs) Swap(i, j int)      { m[i], m[j] = m[j], m[i] }
+
+func main() {
+       fmt.Fprintf(os.Stderr, "Fetching MACs from %q\n", *url)
+       resp, err := http.Get(*url)
+       if err != nil {
+               panic(err)
+       }
+       defer resp.Body.Close()
+       buffered := bufio.NewReader(resp.Body)
+       finder := regexp.MustCompile(`^\s*([0-9A-F]{6})\s+\(base 16\)\s+(.*\S)`)
+       got := macs{}
+       for {
+               line, err := buffered.ReadString('\n')
+               if err == io.EOF {
+                       break
+               } else if err != nil {
+                       panic(err)
+               }
+               if matches := finder.FindStringSubmatch(line); matches != nil {
+                       var prefix [3]byte
+                       hex.Decode(prefix[:], []byte(matches[1]))
+                       company := matches[2]
+                       if company == "" {
+                               company = "PRIVATE"
+                       }
+                       fmt.Fprint(os.Stderr, "*")
+                       got = append(got, mac{prefix: prefix, company: company})
+               }
+       }
+       fmt.Fprintln(os.Stderr, "\nSorting macs")
+       sort.Sort(got)
+       fmt.Fprintln(os.Stderr, "Starting write to standard output")
+       fmt.Printf(header, time.Now(), *url)
+       for _, m := range got {
+               fmt.Printf("\t[3]byte{%d, %d, %d}: %q,\n", m.prefix[0], m.prefix[1], m.prefix[2], m.company)
+       }
+       fmt.Println("}")
+}
diff --git a/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go b/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go
new file mode 100644 (file)
index 0000000..0a93cad
--- /dev/null
@@ -0,0 +1,23946 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package macs
+
+// Created by gen.go, don't edit manually
+// Generated at 2017-09-19 13:06:19.654271144 -0600 MDT
+// Fetched from "http://standards.ieee.org/develop/regauth/oui/oui.txt"
+
+// ValidMACPrefixMap maps a valid MAC address prefix to the name of the
+// organization that owns the rights to use it.  We map it to a hidden
+// variable so it won't show up in godoc, since it's a very large map.
+var ValidMACPrefixMap = validMACPrefixMap
+var validMACPrefixMap = map[[3]byte]string{
+       [3]byte{0, 0, 0}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 1}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 2}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 3}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 4}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 5}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 6}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 7}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 8}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 9}:       "XEROX CORPORATION",
+       [3]byte{0, 0, 10}:      "OMRON TATEISI ELECTRONICS CO.",
+       [3]byte{0, 0, 11}:      "MATRIX CORPORATION",
+       [3]byte{0, 0, 12}:      "Cisco Systems, Inc",
+       [3]byte{0, 0, 13}:      "FIBRONICS LTD.",
+       [3]byte{0, 0, 14}:      "FUJITSU LIMITED",
+       [3]byte{0, 0, 15}:      "NEXT, INC.",
+       [3]byte{0, 0, 16}:      "SYTEK INC.",
+       [3]byte{0, 0, 17}:      "NORMEREL SYSTEMES",
+       [3]byte{0, 0, 18}:      "INFORMATION TECHNOLOGY LIMITED",
+       [3]byte{0, 0, 19}:      "CAMEX",
+       [3]byte{0, 0, 20}:      "NETRONIX",
+       [3]byte{0, 0, 21}:      "DATAPOINT CORPORATION",
+       [3]byte{0, 0, 22}:      "DU PONT PIXEL SYSTEMS     .",
+       [3]byte{0, 0, 23}:      "Oracle",
+       [3]byte{0, 0, 24}:      "WEBSTER COMPUTER CORPORATION",
+       [3]byte{0, 0, 25}:      "APPLIED DYNAMICS INTERNATIONAL",
+       [3]byte{0, 0, 26}:      "ADVANCED MICRO DEVICES",
+       [3]byte{0, 0, 27}:      "Novell, Inc.",
+       [3]byte{0, 0, 28}:      "BELL TECHNOLOGIES",
+       [3]byte{0, 0, 29}:      "Cabletron Systems, Inc.",
+       [3]byte{0, 0, 30}:      "TELSIST INDUSTRIA ELECTRONICA",
+       [3]byte{0, 0, 31}:      "Telco Systems, Inc.",
+       [3]byte{0, 0, 32}:      "DATAINDUSTRIER DIAB AB",
+       [3]byte{0, 0, 33}:      "SUREMAN COMP. & COMMUN. CORP.",
+       [3]byte{0, 0, 34}:      "VISUAL TECHNOLOGY INC.",
+       [3]byte{0, 0, 35}:      "ABB INDUSTRIAL SYSTEMS AB",
+       [3]byte{0, 0, 36}:      "CONNECT AS",
+       [3]byte{0, 0, 37}:      "RAMTEK CORP.",
+       [3]byte{0, 0, 38}:      "SHA-KEN CO., LTD.",
+       [3]byte{0, 0, 39}:      "JAPAN RADIO COMPANY",
+       [3]byte{0, 0, 40}:      "PRODIGY SYSTEMS CORPORATION",
+       [3]byte{0, 0, 41}:      "IMC NETWORKS CORP.",
+       [3]byte{0, 0, 42}:      "TRW - SEDD/INP",
+       [3]byte{0, 0, 43}:      "CRISP AUTOMATION, INC",
+       [3]byte{0, 0, 44}:      "AUTOTOTE LIMITED",
+       [3]byte{0, 0, 45}:      "CHROMATICS INC",
+       [3]byte{0, 0, 46}:      "SOCIETE EVIRA",
+       [3]byte{0, 0, 47}:      "TIMEPLEX INC.",
+       [3]byte{0, 0, 48}:      "VG LABORATORY SYSTEMS LTD",
+       [3]byte{0, 0, 49}:      "QPSX COMMUNICATIONS, LTD.",
+       [3]byte{0, 0, 50}:      "Marconi plc",
+       [3]byte{0, 0, 51}:      "EGAN MACHINERY COMPANY",
+       [3]byte{0, 0, 52}:      "NETWORK RESOURCES CORPORATION",
+       [3]byte{0, 0, 53}:      "SPECTRAGRAPHICS CORPORATION",
+       [3]byte{0, 0, 54}:      "ATARI CORPORATION",
+       [3]byte{0, 0, 55}:      "OXFORD METRICS LIMITED",
+       [3]byte{0, 0, 56}:      "CSS LABS",
+       [3]byte{0, 0, 57}:      "TOSHIBA CORPORATION",
+       [3]byte{0, 0, 58}:      "CHYRON CORPORATION",
+       [3]byte{0, 0, 59}:      "i Controls, Inc.",
+       [3]byte{0, 0, 60}:      "AUSPEX SYSTEMS INC.",
+       [3]byte{0, 0, 61}:      "UNISYS",
+       [3]byte{0, 0, 62}:      "SIMPACT",
+       [3]byte{0, 0, 63}:      "SYNTREX, INC.",
+       [3]byte{0, 0, 64}:      "APPLICON, INC.",
+       [3]byte{0, 0, 65}:      "ICE CORPORATION",
+       [3]byte{0, 0, 66}:      "METIER MANAGEMENT SYSTEMS LTD.",
+       [3]byte{0, 0, 67}:      "MICRO TECHNOLOGY",
+       [3]byte{0, 0, 68}:      "CASTELLE CORPORATION",
+       [3]byte{0, 0, 69}:      "FORD AEROSPACE & COMM. CORP.",
+       [3]byte{0, 0, 70}:      "OLIVETTI NORTH AMERICA",
+       [3]byte{0, 0, 71}:      "NICOLET INSTRUMENTS CORP.",
+       [3]byte{0, 0, 72}:      "Seiko Epson Corporation",
+       [3]byte{0, 0, 73}:      "APRICOT COMPUTERS, LTD",
+       [3]byte{0, 0, 74}:      "ADC CODENOLL TECHNOLOGY CORP.",
+       [3]byte{0, 0, 75}:      "ICL DATA OY",
+       [3]byte{0, 0, 76}:      "NEC CORPORATION",
+       [3]byte{0, 0, 77}:      "DCI CORPORATION",
+       [3]byte{0, 0, 78}:      "AMPEX CORPORATION",
+       [3]byte{0, 0, 79}:      "LOGICRAFT, INC.",
+       [3]byte{0, 0, 80}:      "RADISYS CORPORATION",
+       [3]byte{0, 0, 81}:      "HOB ELECTRONIC GMBH & CO. KG",
+       [3]byte{0, 0, 82}:      "Intrusion.com, Inc.",
+       [3]byte{0, 0, 83}:      "COMPUCORP",
+       [3]byte{0, 0, 84}:      "Schneider Electric",
+       [3]byte{0, 0, 85}:      "COMMISSARIAT A L`ENERGIE ATOM.",
+       [3]byte{0, 0, 86}:      "DR. B. STRUCK",
+       [3]byte{0, 0, 87}:      "SCITEX CORPORATION LTD.",
+       [3]byte{0, 0, 88}:      "RACORE COMPUTER PRODUCTS INC.",
+       [3]byte{0, 0, 89}:      "Hellige GMBH",
+       [3]byte{0, 0, 90}:      "SysKonnect GmbH",
+       [3]byte{0, 0, 91}:      "ELTEC ELEKTRONIK AG",
+       [3]byte{0, 0, 92}:      "TELEMATICS INTERNATIONAL INC.",
+       [3]byte{0, 0, 93}:      "CS TELECOM",
+       [3]byte{0, 0, 94}:      "ICANN, IANA Department",
+       [3]byte{0, 0, 95}:      "Sumitomo Electric Industries,Ltd",
+       [3]byte{0, 0, 96}:      "KONTRON ELEKTRONIK GMBH",
+       [3]byte{0, 0, 97}:      "GATEWAY COMMUNICATIONS",
+       [3]byte{0, 0, 98}:      "BULL HN INFORMATION SYSTEMS",
+       [3]byte{0, 0, 99}:      "BARCO CONTROL ROOMS GMBH",
+       [3]byte{0, 0, 100}:     "Yokogawa Digital Computer Corporation",
+       [3]byte{0, 0, 101}:     "Network General Corporation",
+       [3]byte{0, 0, 102}:     "TALARIS SYSTEMS, INC.",
+       [3]byte{0, 0, 103}:     "SOFT * RITE, INC.",
+       [3]byte{0, 0, 104}:     "ROSEMOUNT CONTROLS",
+       [3]byte{0, 0, 105}:     "CONCORD COMMUNICATIONS INC",
+       [3]byte{0, 0, 106}:     "COMPUTER CONSOLES INC.",
+       [3]byte{0, 0, 107}:     "SILICON GRAPHICS INC./MIPS",
+       [3]byte{0, 0, 108}:     "Private",
+       [3]byte{0, 0, 109}:     "CRAY COMMUNICATIONS, LTD.",
+       [3]byte{0, 0, 110}:     "Artisoft Inc.",
+       [3]byte{0, 0, 111}:     "Madge Ltd.",
+       [3]byte{0, 0, 112}:     "HCL LIMITED",
+       [3]byte{0, 0, 113}:     "ADRA SYSTEMS INC.",
+       [3]byte{0, 0, 114}:     "MINIWARE TECHNOLOGY",
+       [3]byte{0, 0, 115}:     "SIECOR CORPORATION",
+       [3]byte{0, 0, 116}:     "RICOH COMPANY LTD.",
+       [3]byte{0, 0, 117}:     "Nortel Networks",
+       [3]byte{0, 0, 118}:     "ABEKAS VIDEO SYSTEM",
+       [3]byte{0, 0, 119}:     "INTERPHASE CORPORATION",
+       [3]byte{0, 0, 120}:     "LABTAM LIMITED",
+       [3]byte{0, 0, 121}:     "NETWORTH INCORPORATED",
+       [3]byte{0, 0, 122}:     "DANA COMPUTER INC.",
+       [3]byte{0, 0, 123}:     "RESEARCH MACHINES",
+       [3]byte{0, 0, 124}:     "AMPERE INCORPORATED",
+       [3]byte{0, 0, 125}:     "Oracle Corporation",
+       [3]byte{0, 0, 126}:     "CLUSTRIX CORPORATION",
+       [3]byte{0, 0, 127}:     "LINOTYPE-HELL AG",
+       [3]byte{0, 0, 128}:     "CRAY COMMUNICATIONS A/S",
+       [3]byte{0, 0, 129}:     "Bay Networks",
+       [3]byte{0, 0, 130}:     "LECTRA SYSTEMES SA",
+       [3]byte{0, 0, 131}:     "TADPOLE TECHNOLOGY PLC",
+       [3]byte{0, 0, 132}:     "SUPERNET",
+       [3]byte{0, 0, 133}:     "CANON INC.",
+       [3]byte{0, 0, 134}:     "MEGAHERTZ CORPORATION",
+       [3]byte{0, 0, 135}:     "HITACHI, LTD.",
+       [3]byte{0, 0, 136}:     "Brocade Communications Systems, Inc.",
+       [3]byte{0, 0, 137}:     "CAYMAN SYSTEMS INC.",
+       [3]byte{0, 0, 138}:     "DATAHOUSE INFORMATION SYSTEMS",
+       [3]byte{0, 0, 139}:     "INFOTRON",
+       [3]byte{0, 0, 140}:     "Alloy Computer Products (Australia) Pty Ltd",
+       [3]byte{0, 0, 141}:     "Cryptek Inc.",
+       [3]byte{0, 0, 142}:     "SOLBOURNE COMPUTER, INC.",
+       [3]byte{0, 0, 143}:     "Raytheon",
+       [3]byte{0, 0, 144}:     "MICROCOM",
+       [3]byte{0, 0, 145}:     "ANRITSU CORPORATION",
+       [3]byte{0, 0, 146}:     "COGENT DATA TECHNOLOGIES",
+       [3]byte{0, 0, 147}:     "PROTEON INC.",
+       [3]byte{0, 0, 148}:     "ASANTE TECHNOLOGIES",
+       [3]byte{0, 0, 149}:     "SONY TEKTRONIX CORP.",
+       [3]byte{0, 0, 150}:     "MARCONI ELECTRONICS LTD.",
+       [3]byte{0, 0, 151}:     "Dell EMC",
+       [3]byte{0, 0, 152}:     "CROSSCOMM CORPORATION",
+       [3]byte{0, 0, 153}:     "MTX, INC.",
+       [3]byte{0, 0, 154}:     "RC COMPUTER A/S",
+       [3]byte{0, 0, 155}:     "INFORMATION INTERNATIONAL, INC",
+       [3]byte{0, 0, 156}:     "ROLM MIL-SPEC COMPUTERS",
+       [3]byte{0, 0, 157}:     "LOCUS COMPUTING CORPORATION",
+       [3]byte{0, 0, 158}:     "MARLI S.A.",
+       [3]byte{0, 0, 159}:     "AMERISTAR TECHNOLOGIES INC.",
+       [3]byte{0, 0, 160}:     "SANYO Electric Co., Ltd.",
+       [3]byte{0, 0, 161}:     "MARQUETTE ELECTRIC CO.",
+       [3]byte{0, 0, 162}:     "Bay Networks",
+       [3]byte{0, 0, 163}:     "NETWORK APPLICATION TECHNOLOGY",
+       [3]byte{0, 0, 164}:     "ACORN COMPUTERS LIMITED",
+       [3]byte{0, 0, 165}:     "Tattile SRL",
+       [3]byte{0, 0, 166}:     "NETWORK GENERAL CORPORATION",
+       [3]byte{0, 0, 167}:     "NETWORK COMPUTING DEVICES INC.",
+       [3]byte{0, 0, 168}:     "STRATUS COMPUTER INC.",
+       [3]byte{0, 0, 169}:     "NETWORK SYSTEMS CORP.",
+       [3]byte{0, 0, 170}:     "XEROX CORPORATION",
+       [3]byte{0, 0, 171}:     "LOGIC MODELING CORPORATION",
+       [3]byte{0, 0, 172}:     "CONWARE COMPUTER CONSULTING",
+       [3]byte{0, 0, 173}:     "BRUKER INSTRUMENTS INC.",
+       [3]byte{0, 0, 174}:     "DASSAULT ELECTRONIQUE",
+       [3]byte{0, 0, 175}:     "Canberra Industries, Inc.",
+       [3]byte{0, 0, 176}:     "RND-RAD NETWORK DEVICES",
+       [3]byte{0, 0, 177}:     "Alpha Micro",
+       [3]byte{0, 0, 178}:     "TELEVIDEO SYSTEMS, INC.",
+       [3]byte{0, 0, 179}:     "CIMLINC INCORPORATED",
+       [3]byte{0, 0, 180}:     "Edimax Technology Co. Ltd.",
+       [3]byte{0, 0, 181}:     "DATABILITY SOFTWARE SYS. INC.",
+       [3]byte{0, 0, 182}:     "MICRO-MATIC RESEARCH",
+       [3]byte{0, 0, 183}:     "DOVE COMPUTER CORPORATION",
+       [3]byte{0, 0, 184}:     "SEIKOSHA CO., LTD.",
+       [3]byte{0, 0, 185}:     "MCDONNELL DOUGLAS COMPUTER SYS",
+       [3]byte{0, 0, 186}:     "SIIG, INC.",
+       [3]byte{0, 0, 187}:     "TRI-DATA",
+       [3]byte{0, 0, 188}:     "Rockwell Automation",
+       [3]byte{0, 0, 189}:     "MITSUBISHI CABLE COMPANY",
+       [3]byte{0, 0, 190}:     "THE NTI GROUP",
+       [3]byte{0, 0, 191}:     "SYMMETRIC COMPUTER SYSTEMS",
+       [3]byte{0, 0, 192}:     "WESTERN DIGITAL CORPORATION",
+       [3]byte{0, 0, 193}:     "Madge Ltd.",
+       [3]byte{0, 0, 194}:     "INFORMATION PRESENTATION TECH.",
+       [3]byte{0, 0, 195}:     "HARRIS CORP COMPUTER SYS DIV",
+       [3]byte{0, 0, 196}:     "WATERS DIV. OF MILLIPORE",
+       [3]byte{0, 0, 197}:     "ARRIS Group, Inc.",
+       [3]byte{0, 0, 198}:     "EON SYSTEMS",
+       [3]byte{0, 0, 199}:     "ARIX CORPORATION",
+       [3]byte{0, 0, 200}:     "ALTOS COMPUTER SYSTEMS",
+       [3]byte{0, 0, 201}:     "Emulex Corporation",
+       [3]byte{0, 0, 202}:     "ARRIS Group, Inc.",
+       [3]byte{0, 0, 203}:     "COMPU-SHACK ELECTRONIC GMBH",
+       [3]byte{0, 0, 204}:     "DENSAN CO., LTD.",
+       [3]byte{0, 0, 205}:     "Allied Telesis Labs Ltd",
+       [3]byte{0, 0, 206}:     "MEGADATA CORP.",
+       [3]byte{0, 0, 207}:     "HAYES MICROCOMPUTER PRODUCTS",
+       [3]byte{0, 0, 208}:     "DEVELCON ELECTRONICS LTD.",
+       [3]byte{0, 0, 209}:     "ADAPTEC INCORPORATED",
+       [3]byte{0, 0, 210}:     "SBE, INC.",
+       [3]byte{0, 0, 211}:     "WANG LABORATORIES INC.",
+       [3]byte{0, 0, 212}:     "PURE DATA LTD.",
+       [3]byte{0, 0, 213}:     "MICROGNOSIS INTERNATIONAL",
+       [3]byte{0, 0, 214}:     "PUNCH LINE HOLDING",
+       [3]byte{0, 0, 215}:     "DARTMOUTH COLLEGE",
+       [3]byte{0, 0, 216}:     "Novell, Inc.",
+       [3]byte{0, 0, 217}:     "NIPPON TELEGRAPH & TELEPHONE",
+       [3]byte{0, 0, 218}:     "ATEX",
+       [3]byte{0, 0, 219}:     "British Telecommunications plc",
+       [3]byte{0, 0, 220}:     "HAYES MICROCOMPUTER PRODUCTS",
+       [3]byte{0, 0, 221}:     "TCL INCORPORATED",
+       [3]byte{0, 0, 222}:     "CETIA",
+       [3]byte{0, 0, 223}:     "BELL & HOWELL PUB SYS DIV",
+       [3]byte{0, 0, 224}:     "QUADRAM CORP.",
+       [3]byte{0, 0, 225}:     "GRID SYSTEMS",
+       [3]byte{0, 0, 226}:     "ACER TECHNOLOGIES CORP.",
+       [3]byte{0, 0, 227}:     "INTEGRATED MICRO PRODUCTS LTD",
+       [3]byte{0, 0, 228}:     "IN2 GROUPE INTERTECHNIQUE",
+       [3]byte{0, 0, 229}:     "SIGMEX LTD.",
+       [3]byte{0, 0, 230}:     "APTOR PRODUITS DE COMM INDUST",
+       [3]byte{0, 0, 231}:     "Star Gate Technologies",
+       [3]byte{0, 0, 232}:     "ACCTON TECHNOLOGY CORP.",
+       [3]byte{0, 0, 233}:     "ISICAD, INC.",
+       [3]byte{0, 0, 234}:     "UPNOD AB",
+       [3]byte{0, 0, 235}:     "MATSUSHITA COMM. IND. CO. LTD.",
+       [3]byte{0, 0, 236}:     "MICROPROCESS",
+       [3]byte{0, 0, 237}:     "APRIL",
+       [3]byte{0, 0, 238}:     "NETWORK DESIGNERS, LTD.",
+       [3]byte{0, 0, 239}:     "KTI",
+       [3]byte{0, 0, 240}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 0, 241}:     "MAGNA COMPUTER CORPORATION",
+       [3]byte{0, 0, 242}:     "SPIDER COMMUNICATIONS",
+       [3]byte{0, 0, 243}:     "GANDALF DATA LIMITED",
+       [3]byte{0, 0, 244}:     "Allied Telesis, Inc.",
+       [3]byte{0, 0, 245}:     "DIAMOND SALES LIMITED",
+       [3]byte{0, 0, 246}:     "APPLIED MICROSYSTEMS CORP.",
+       [3]byte{0, 0, 247}:     "YOUTH KEEP ENTERPRISE CO LTD",
+       [3]byte{0, 0, 248}:     "DIGITAL EQUIPMENT CORPORATION",
+       [3]byte{0, 0, 249}:     "QUOTRON SYSTEMS INC.",
+       [3]byte{0, 0, 250}:     "MICROSAGE COMPUTER SYSTEMS INC",
+       [3]byte{0, 0, 251}:     "RECHNER ZUR KOMMUNIKATION",
+       [3]byte{0, 0, 252}:     "MEIKO",
+       [3]byte{0, 0, 253}:     "HIGH LEVEL HARDWARE",
+       [3]byte{0, 0, 254}:     "Annapolis Micro Systems, Inc.",
+       [3]byte{0, 0, 255}:     "CAMTEC ELECTRONICS LTD.",
+       [3]byte{0, 1, 0}:       "EQUIP'TRANS",
+       [3]byte{0, 1, 1}:       "Private",
+       [3]byte{0, 1, 2}:       "3COM CORPORATION",
+       [3]byte{0, 1, 3}:       "3COM CORPORATION",
+       [3]byte{0, 1, 4}:       "DVICO Co., Ltd.",
+       [3]byte{0, 1, 5}:       "Beckhoff Automation GmbH",
+       [3]byte{0, 1, 6}:       "Tews Datentechnik GmbH",
+       [3]byte{0, 1, 7}:       "Leiser GmbH",
+       [3]byte{0, 1, 8}:       "AVLAB Technology, Inc.",
+       [3]byte{0, 1, 9}:       "Nagano Japan Radio Co., Ltd.",
+       [3]byte{0, 1, 10}:      "CIS TECHNOLOGY INC.",
+       [3]byte{0, 1, 11}:      "Space CyberLink, Inc.",
+       [3]byte{0, 1, 12}:      "System Talks Inc.",
+       [3]byte{0, 1, 13}:      "Teledyne DALSA Inc.",
+       [3]byte{0, 1, 14}:      "Bri-Link Technologies Co., Ltd",
+       [3]byte{0, 1, 15}:      "Brocade Communications Systems, Inc.",
+       [3]byte{0, 1, 16}:      "Gotham Networks",
+       [3]byte{0, 1, 17}:      "iDigm Inc.",
+       [3]byte{0, 1, 18}:      "Shark Multimedia Inc.",
+       [3]byte{0, 1, 19}:      "OLYMPUS CORPORATION",
+       [3]byte{0, 1, 20}:      "KANDA TSUSHIN KOGYO CO., LTD.",
+       [3]byte{0, 1, 21}:      "EXTRATECH CORPORATION",
+       [3]byte{0, 1, 22}:      "Netspect Technologies, Inc.",
+       [3]byte{0, 1, 23}:      "Canal +",
+       [3]byte{0, 1, 24}:      "EZ Digital Co., Ltd.",
+       [3]byte{0, 1, 25}:      "RTUnet (Australia)",
+       [3]byte{0, 1, 26}:      "Hoffmann und Burmeister GbR",
+       [3]byte{0, 1, 27}:      "Unizone Technologies, Inc.",
+       [3]byte{0, 1, 28}:      "Universal Talkware Corporation",
+       [3]byte{0, 1, 29}:      "Centillium Communications",
+       [3]byte{0, 1, 30}:      "Precidia Technologies, Inc.",
+       [3]byte{0, 1, 31}:      "RC Networks, Inc.",
+       [3]byte{0, 1, 32}:      "OSCILLOQUARTZ S.A.",
+       [3]byte{0, 1, 33}:      "Watchguard Technologies, Inc.",
+       [3]byte{0, 1, 34}:      "Trend Communications, Ltd.",
+       [3]byte{0, 1, 35}:      "Schneider Electric Japan Holdings Ltd.",
+       [3]byte{0, 1, 36}:      "Acer Incorporated",
+       [3]byte{0, 1, 37}:      "YAESU MUSEN CO., LTD.",
+       [3]byte{0, 1, 38}:      "PAC Labs",
+       [3]byte{0, 1, 39}:      "OPEN Networks Pty Ltd",
+       [3]byte{0, 1, 40}:      "EnjoyWeb, Inc.",
+       [3]byte{0, 1, 41}:      "DFI Inc.",
+       [3]byte{0, 1, 42}:      "Telematica Sistems Inteligente",
+       [3]byte{0, 1, 43}:      "TELENET Co., Ltd.",
+       [3]byte{0, 1, 44}:      "Aravox Technologies, Inc.",
+       [3]byte{0, 1, 45}:      "Komodo Technology",
+       [3]byte{0, 1, 46}:      "PC Partner Ltd.",
+       [3]byte{0, 1, 47}:      "Twinhead International Corp",
+       [3]byte{0, 1, 48}:      "Extreme Networks, Inc.",
+       [3]byte{0, 1, 49}:      "Bosch Security Systems, Inc.",
+       [3]byte{0, 1, 50}:      "Dranetz - BMI",
+       [3]byte{0, 1, 51}:      "KYOWA Electronic Instruments C",
+       [3]byte{0, 1, 52}:      "Selectron Systems AG",
+       [3]byte{0, 1, 53}:      "KDC Corp.",
+       [3]byte{0, 1, 54}:      "CyberTAN Technology Inc.",
+       [3]byte{0, 1, 55}:      "IT Farm Corporation",
+       [3]byte{0, 1, 56}:      "XAVi Technologies Corp.",
+       [3]byte{0, 1, 57}:      "Point Multimedia Systems",
+       [3]byte{0, 1, 58}:      "SHELCAD COMMUNICATIONS, LTD.",
+       [3]byte{0, 1, 59}:      "BNA SYSTEMS",
+       [3]byte{0, 1, 60}:      "TIW SYSTEMS",
+       [3]byte{0, 1, 61}:      "RiscStation Ltd.",
+       [3]byte{0, 1, 62}:      "Ascom Tateco AB",
+       [3]byte{0, 1, 63}:      "Neighbor World Co., Ltd.",
+       [3]byte{0, 1, 64}:      "Sendtek Corporation",
+       [3]byte{0, 1, 65}:      "CABLE PRINT",
+       [3]byte{0, 1, 66}:      "Cisco Systems, Inc",
+       [3]byte{0, 1, 67}:      "Cisco Systems, Inc",
+       [3]byte{0, 1, 68}:      "Dell EMC",
+       [3]byte{0, 1, 69}:      "WINSYSTEMS, INC.",
+       [3]byte{0, 1, 70}:      "Tesco Controls, Inc.",
+       [3]byte{0, 1, 71}:      "Zhone Technologies",
+       [3]byte{0, 1, 72}:      "X-traWeb Inc.",
+       [3]byte{0, 1, 73}:      "T.D.T. Transfer Data Test GmbH",
+       [3]byte{0, 1, 74}:      "Sony Corporation",
+       [3]byte{0, 1, 75}:      "Ennovate Networks, Inc.",
+       [3]byte{0, 1, 76}:      "Berkeley Process Control",
+       [3]byte{0, 1, 77}:      "Shin Kin Enterprises Co., Ltd",
+       [3]byte{0, 1, 78}:      "WIN Enterprises, Inc.",
+       [3]byte{0, 1, 79}:      "Adtran Inc",
+       [3]byte{0, 1, 80}:      "GILAT COMMUNICATIONS, LTD.",
+       [3]byte{0, 1, 81}:      "Ensemble Communications",
+       [3]byte{0, 1, 82}:      "CHROMATEK INC.",
+       [3]byte{0, 1, 83}:      "ARCHTEK TELECOM CORPORATION",
+       [3]byte{0, 1, 84}:      "G3M Corporation",
+       [3]byte{0, 1, 85}:      "Promise Technology, Inc.",
+       [3]byte{0, 1, 86}:      "FIREWIREDIRECT.COM, INC.",
+       [3]byte{0, 1, 87}:      "SYSWAVE CO., LTD",
+       [3]byte{0, 1, 88}:      "Electro Industries/Gauge Tech",
+       [3]byte{0, 1, 89}:      "S1 Corporation",
+       [3]byte{0, 1, 90}:      "Digital Video Broadcasting",
+       [3]byte{0, 1, 91}:      "ITALTEL S.p.A/RF-UP-I",
+       [3]byte{0, 1, 92}:      "CADANT INC.",
+       [3]byte{0, 1, 93}:      "Oracle Corporation",
+       [3]byte{0, 1, 94}:      "BEST TECHNOLOGY CO., LTD.",
+       [3]byte{0, 1, 95}:      "DIGITAL DESIGN GmbH",
+       [3]byte{0, 1, 96}:      "ELMEX Co., LTD.",
+       [3]byte{0, 1, 97}:      "Meta Machine Technology",
+       [3]byte{0, 1, 98}:      "Cygnet Technologies, Inc.",
+       [3]byte{0, 1, 99}:      "Cisco Systems, Inc",
+       [3]byte{0, 1, 100}:     "Cisco Systems, Inc",
+       [3]byte{0, 1, 101}:     "AirSwitch Corporation",
+       [3]byte{0, 1, 102}:     "TC GROUP A/S",
+       [3]byte{0, 1, 103}:     "HIOKI E.E. CORPORATION",
+       [3]byte{0, 1, 104}:     "VITANA CORPORATION",
+       [3]byte{0, 1, 105}:     "Celestix Networks Pte Ltd.",
+       [3]byte{0, 1, 106}:     "ALITEC",
+       [3]byte{0, 1, 107}:     "LightChip, Inc.",
+       [3]byte{0, 1, 108}:     "FOXCONN",
+       [3]byte{0, 1, 109}:     "CarrierComm Inc.",
+       [3]byte{0, 1, 110}:     "Conklin Corporation",
+       [3]byte{0, 1, 111}:     "Inkel Corp.",
+       [3]byte{0, 1, 112}:     "ESE Embedded System Engineer'g",
+       [3]byte{0, 1, 113}:     "Allied Data Technologies",
+       [3]byte{0, 1, 114}:     "TechnoLand Co., LTD.",
+       [3]byte{0, 1, 115}:     "AMCC",
+       [3]byte{0, 1, 116}:     "CyberOptics Corporation",
+       [3]byte{0, 1, 117}:     "Radiant Communications Corp.",
+       [3]byte{0, 1, 118}:     "Orient Silver Enterprises",
+       [3]byte{0, 1, 119}:     "EDSL",
+       [3]byte{0, 1, 120}:     "MARGI Systems, Inc.",
+       [3]byte{0, 1, 121}:     "WIRELESS TECHNOLOGY, INC.",
+       [3]byte{0, 1, 122}:     "Chengdu Maipu Electric Industrial Co., Ltd.",
+       [3]byte{0, 1, 123}:     "Heidelberger Druckmaschinen AG",
+       [3]byte{0, 1, 124}:     "AG-E GmbH",
+       [3]byte{0, 1, 125}:     "ThermoQuest",
+       [3]byte{0, 1, 126}:     "ADTEK System Science Co., Ltd.",
+       [3]byte{0, 1, 127}:     "Experience Music Project",
+       [3]byte{0, 1, 128}:     "AOpen, Inc.",
+       [3]byte{0, 1, 129}:     "Nortel Networks",
+       [3]byte{0, 1, 130}:     "DICA TECHNOLOGIES AG",
+       [3]byte{0, 1, 131}:     "ANITE TELECOMS",
+       [3]byte{0, 1, 132}:     "SIEB & MEYER AG",
+       [3]byte{0, 1, 133}:     "Hitachi Aloka Medical, Ltd.",
+       [3]byte{0, 1, 134}:     "Uwe Disch",
+       [3]byte{0, 1, 135}:     "I2SE GmbH",
+       [3]byte{0, 1, 136}:     "LXCO Technologies ag",
+       [3]byte{0, 1, 137}:     "Refraction Technology, Inc.",
+       [3]byte{0, 1, 138}:     "ROI COMPUTER AG",
+       [3]byte{0, 1, 139}:     "NetLinks Co., Ltd.",
+       [3]byte{0, 1, 140}:     "Mega Vision",
+       [3]byte{0, 1, 141}:     "AudeSi Technologies",
+       [3]byte{0, 1, 142}:     "Logitec Corporation",
+       [3]byte{0, 1, 143}:     "Kenetec, Inc.",
+       [3]byte{0, 1, 144}:     "SMK-M",
+       [3]byte{0, 1, 145}:     "SYRED Data Systems",
+       [3]byte{0, 1, 146}:     "Texas Digital Systems",
+       [3]byte{0, 1, 147}:     "Hanbyul Telecom Co., Ltd.",
+       [3]byte{0, 1, 148}:     "Capital Equipment Corporation",
+       [3]byte{0, 1, 149}:     "Sena Technologies, Inc.",
+       [3]byte{0, 1, 150}:     "Cisco Systems, Inc",
+       [3]byte{0, 1, 151}:     "Cisco Systems, Inc",
+       [3]byte{0, 1, 152}:     "Darim Vision",
+       [3]byte{0, 1, 153}:     "HeiSei Electronics",
+       [3]byte{0, 1, 154}:     "LEUNIG GmbH",
+       [3]byte{0, 1, 155}:     "Kyoto Microcomputer Co., Ltd.",
+       [3]byte{0, 1, 156}:     "JDS Uniphase Inc.",
+       [3]byte{0, 1, 157}:     "E-Control Systems, Inc.",
+       [3]byte{0, 1, 158}:     "ESS Technology, Inc.",
+       [3]byte{0, 1, 159}:     "ReadyNet",
+       [3]byte{0, 1, 160}:     "Infinilink Corporation",
+       [3]byte{0, 1, 161}:     "Mag-Tek, Inc.",
+       [3]byte{0, 1, 162}:     "Logical Co., Ltd.",
+       [3]byte{0, 1, 163}:     "GENESYS LOGIC, INC.",
+       [3]byte{0, 1, 164}:     "Microlink Corporation",
+       [3]byte{0, 1, 165}:     "Nextcomm, Inc.",
+       [3]byte{0, 1, 166}:     "Scientific-Atlanta Arcodan A/S",
+       [3]byte{0, 1, 167}:     "UNEX TECHNOLOGY CORPORATION",
+       [3]byte{0, 1, 168}:     "Welltech Computer Co., Ltd.",
+       [3]byte{0, 1, 169}:     "BMW AG",
+       [3]byte{0, 1, 170}:     "Airspan Communications, Ltd.",
+       [3]byte{0, 1, 171}:     "Main Street Networks",
+       [3]byte{0, 1, 172}:     "Sitara Networks, Inc.",
+       [3]byte{0, 1, 173}:     "Coach Master International  d.b.a. CMI Worldwide, Inc.",
+       [3]byte{0, 1, 174}:     "Trex Enterprises",
+       [3]byte{0, 1, 175}:     "Artesyn Embedded Technologies",
+       [3]byte{0, 1, 176}:     "Fulltek Technology Co., Ltd.",
+       [3]byte{0, 1, 177}:     "General Bandwidth",
+       [3]byte{0, 1, 178}:     "Digital Processing Systems, Inc.",
+       [3]byte{0, 1, 179}:     "Precision Electronic Manufacturing",
+       [3]byte{0, 1, 180}:     "Wayport, Inc.",
+       [3]byte{0, 1, 181}:     "Turin Networks, Inc.",
+       [3]byte{0, 1, 182}:     "SAEJIN T&M Co., Ltd.",
+       [3]byte{0, 1, 183}:     "Centos, Inc.",
+       [3]byte{0, 1, 184}:     "Netsensity, Inc.",
+       [3]byte{0, 1, 185}:     "SKF Condition Monitoring",
+       [3]byte{0, 1, 186}:     "IC-Net, Inc.",
+       [3]byte{0, 1, 187}:     "Frequentis",
+       [3]byte{0, 1, 188}:     "Brains Corporation",
+       [3]byte{0, 1, 189}:     "Peterson Electro-Musical Products, Inc.",
+       [3]byte{0, 1, 190}:     "Gigalink Co., Ltd.",
+       [3]byte{0, 1, 191}:     "Teleforce Co., Ltd.",
+       [3]byte{0, 1, 192}:     "CompuLab, Ltd.",
+       [3]byte{0, 1, 193}:     "Vitesse Semiconductor Corporation",
+       [3]byte{0, 1, 194}:     "ARK Research Corp.",
+       [3]byte{0, 1, 195}:     "Acromag, Inc.",
+       [3]byte{0, 1, 196}:     "NeoWave, Inc.",
+       [3]byte{0, 1, 197}:     "Simpler Networks",
+       [3]byte{0, 1, 198}:     "Quarry Technologies",
+       [3]byte{0, 1, 199}:     "Cisco Systems, Inc",
+       [3]byte{0, 1, 200}:     "THOMAS CONRAD CORP.",
+       [3]byte{0, 1, 200}:     "CONRAD CORP.",
+       [3]byte{0, 1, 201}:     "Cisco Systems, Inc",
+       [3]byte{0, 1, 202}:     "Geocast Network Systems, Inc.",
+       [3]byte{0, 1, 203}:     "EVR",
+       [3]byte{0, 1, 204}:     "Japan Total Design Communication Co., Ltd.",
+       [3]byte{0, 1, 205}:     "ARtem",
+       [3]byte{0, 1, 206}:     "Custom Micro Products, Ltd.",
+       [3]byte{0, 1, 207}:     "Alpha Data Parallel Systems, Ltd.",
+       [3]byte{0, 1, 208}:     "VitalPoint, Inc.",
+       [3]byte{0, 1, 209}:     "CoNet Communications, Inc.",
+       [3]byte{0, 1, 210}:     "inXtron, Inc.",
+       [3]byte{0, 1, 211}:     "PAXCOMM, Inc.",
+       [3]byte{0, 1, 212}:     "Leisure Time, Inc.",
+       [3]byte{0, 1, 213}:     "HAEDONG INFO & COMM CO., LTD",
+       [3]byte{0, 1, 214}:     "manroland AG",
+       [3]byte{0, 1, 215}:     "F5 Networks, Inc.",
+       [3]byte{0, 1, 216}:     "Teltronics, Inc.",
+       [3]byte{0, 1, 217}:     "Sigma, Inc.",
+       [3]byte{0, 1, 218}:     "WINCOMM Corporation",
+       [3]byte{0, 1, 219}:     "Freecom Technologies GmbH",
+       [3]byte{0, 1, 220}:     "Activetelco",
+       [3]byte{0, 1, 221}:     "Avail Networks",
+       [3]byte{0, 1, 222}:     "Trango Systems, Inc.",
+       [3]byte{0, 1, 223}:     "ISDN Communications, Ltd.",
+       [3]byte{0, 1, 224}:     "Fast Systems, Inc.",
+       [3]byte{0, 1, 225}:     "Kinpo Electronics, Inc.",
+       [3]byte{0, 1, 226}:     "Ando Electric Corporation",
+       [3]byte{0, 1, 227}:     "Siemens AG",
+       [3]byte{0, 1, 228}:     "Sitera, Inc.",
+       [3]byte{0, 1, 229}:     "Supernet, Inc.",
+       [3]byte{0, 1, 230}:     "Hewlett Packard",
+       [3]byte{0, 1, 231}:     "Hewlett Packard",
+       [3]byte{0, 1, 232}:     "Force10 Networks, Inc.",
+       [3]byte{0, 1, 233}:     "Litton Marine Systems B.V.",
+       [3]byte{0, 1, 234}:     "Cirilium Corp.",
+       [3]byte{0, 1, 235}:     "C-COM Corporation",
+       [3]byte{0, 1, 236}:     "Ericsson Group",
+       [3]byte{0, 1, 237}:     "SETA Corp.",
+       [3]byte{0, 1, 238}:     "Comtrol Europe, Ltd.",
+       [3]byte{0, 1, 239}:     "Camtel Technology Corp.",
+       [3]byte{0, 1, 240}:     "Tridium, Inc.",
+       [3]byte{0, 1, 241}:     "Innovative Concepts, Inc.",
+       [3]byte{0, 1, 242}:     "Mark of the Unicorn, Inc.",
+       [3]byte{0, 1, 243}:     "QPS, Inc.",
+       [3]byte{0, 1, 244}:     "Enterasys",
+       [3]byte{0, 1, 245}:     "ERIM S.A.",
+       [3]byte{0, 1, 246}:     "Association of Musical Electronics Industry",
+       [3]byte{0, 1, 247}:     "Image Display Systems, Inc.",
+       [3]byte{0, 1, 248}:     "TEXIO TECHNOLOGY CORPORATION",
+       [3]byte{0, 1, 249}:     "TeraGlobal Communications Corp.",
+       [3]byte{0, 1, 250}:     "HOROSCAS",
+       [3]byte{0, 1, 251}:     "DoTop Technology, Inc.",
+       [3]byte{0, 1, 252}:     "Keyence Corporation",
+       [3]byte{0, 1, 253}:     "Digital Voice Systems, Inc.",
+       [3]byte{0, 1, 254}:     "DIGITAL EQUIPMENT CORPORATION",
+       [3]byte{0, 1, 255}:     "Data Direct Networks, Inc.",
+       [3]byte{0, 2, 0}:       "Net & Sys Co., Ltd.",
+       [3]byte{0, 2, 1}:       "IFM Electronic gmbh",
+       [3]byte{0, 2, 2}:       "Amino Communications, Ltd.",
+       [3]byte{0, 2, 3}:       "Woonsang Telecom, Inc.",
+       [3]byte{0, 2, 4}:       "Bodmann Industries Elektronik GmbH",
+       [3]byte{0, 2, 5}:       "Hitachi Denshi, Ltd.",
+       [3]byte{0, 2, 6}:       "Telital R&D Denmark A/S",
+       [3]byte{0, 2, 7}:       "VisionGlobal Network Corp.",
+       [3]byte{0, 2, 8}:       "Unify Networks, Inc.",
+       [3]byte{0, 2, 9}:       "Shenzhen SED Information Technology Co., Ltd.",
+       [3]byte{0, 2, 10}:      "Gefran Spa",
+       [3]byte{0, 2, 11}:      "Native Networks, Inc.",
+       [3]byte{0, 2, 12}:      "Metro-Optix",
+       [3]byte{0, 2, 13}:      "Micronpc.com",
+       [3]byte{0, 2, 14}:      "ECI Telecom Ltd.",
+       [3]byte{0, 2, 15}:      "AATR",
+       [3]byte{0, 2, 16}:      "Fenecom",
+       [3]byte{0, 2, 17}:      "Nature Worldwide Technology Corp.",
+       [3]byte{0, 2, 18}:      "SierraCom",
+       [3]byte{0, 2, 19}:      "S.D.E.L.",
+       [3]byte{0, 2, 20}:      "DTVRO",
+       [3]byte{0, 2, 21}:      "Cotas Computer Technology A/B",
+       [3]byte{0, 2, 22}:      "Cisco Systems, Inc",
+       [3]byte{0, 2, 23}:      "Cisco Systems, Inc",
+       [3]byte{0, 2, 24}:      "Advanced Scientific Corp",
+       [3]byte{0, 2, 25}:      "Paralon Technologies",
+       [3]byte{0, 2, 26}:      "Zuma Networks",
+       [3]byte{0, 2, 27}:      "Kollmorgen-Servotronix",
+       [3]byte{0, 2, 28}:      "Network Elements, Inc.",
+       [3]byte{0, 2, 29}:      "Data General Communication Ltd.",
+       [3]byte{0, 2, 30}:      "SIMTEL S.R.L.",
+       [3]byte{0, 2, 31}:      "Aculab PLC",
+       [3]byte{0, 2, 32}:      "CANON FINETECH INC.",
+       [3]byte{0, 2, 33}:      "DSP Application, Ltd.",
+       [3]byte{0, 2, 34}:      "Chromisys, Inc.",
+       [3]byte{0, 2, 35}:      "ClickTV",
+       [3]byte{0, 2, 36}:      "C-COR",
+       [3]byte{0, 2, 37}:      "One Stop Systems",
+       [3]byte{0, 2, 38}:      "XESystems, Inc.",
+       [3]byte{0, 2, 39}:      "ESD Electronic System Design GmbH",
+       [3]byte{0, 2, 40}:      "Necsom, Ltd.",
+       [3]byte{0, 2, 41}:      "Adtec Corporation",
+       [3]byte{0, 2, 42}:      "Asound Electronic",
+       [3]byte{0, 2, 43}:      "SAXA, Inc.",
+       [3]byte{0, 2, 44}:      "ABB Bomem, Inc.",
+       [3]byte{0, 2, 45}:      "Agere Systems",
+       [3]byte{0, 2, 46}:      "TEAC Corp. R& D",
+       [3]byte{0, 2, 47}:      "P-Cube, Ltd.",
+       [3]byte{0, 2, 48}:      "Intersoft Electronics",
+       [3]byte{0, 2, 49}:      "Ingersoll-Rand",
+       [3]byte{0, 2, 50}:      "Avision, Inc.",
+       [3]byte{0, 2, 51}:      "Mantra Communications, Inc.",
+       [3]byte{0, 2, 52}:      "Imperial Technology, Inc.",
+       [3]byte{0, 2, 53}:      "Paragon Networks International",
+       [3]byte{0, 2, 54}:      "INIT GmbH",
+       [3]byte{0, 2, 55}:      "Cosmo Research Corp.",
+       [3]byte{0, 2, 56}:      "Serome Technology, Inc.",
+       [3]byte{0, 2, 57}:      "Visicom",
+       [3]byte{0, 2, 58}:      "ZSK Stickmaschinen GmbH",
+       [3]byte{0, 2, 59}:      "Ericsson",
+       [3]byte{0, 2, 60}:      "Creative Technology, Ltd.",
+       [3]byte{0, 2, 61}:      "Cisco Systems, Inc",
+       [3]byte{0, 2, 62}:      "Selta Telematica S.p.a",
+       [3]byte{0, 2, 63}:      "COMPAL ELECTRONICS, INC.",
+       [3]byte{0, 2, 64}:      "Seedek Co., Ltd.",
+       [3]byte{0, 2, 65}:      "Amer.com",
+       [3]byte{0, 2, 66}:      "Videoframe Systems",
+       [3]byte{0, 2, 67}:      "Raysis Co., Ltd.",
+       [3]byte{0, 2, 68}:      "SURECOM Technology Co.",
+       [3]byte{0, 2, 69}:      "Lampus Co, Ltd.",
+       [3]byte{0, 2, 70}:      "All-Win Tech Co., Ltd.",
+       [3]byte{0, 2, 71}:      "Great Dragon Information Technology (Group) Co., Ltd.",
+       [3]byte{0, 2, 72}:      "Pilz GmbH & Co.",
+       [3]byte{0, 2, 73}:      "Aviv Infocom Co, Ltd.",
+       [3]byte{0, 2, 74}:      "Cisco Systems, Inc",
+       [3]byte{0, 2, 75}:      "Cisco Systems, Inc",
+       [3]byte{0, 2, 76}:      "SiByte, Inc.",
+       [3]byte{0, 2, 77}:      "Mannesman Dematic Colby Pty. Ltd.",
+       [3]byte{0, 2, 78}:      "Datacard Group",
+       [3]byte{0, 2, 79}:      "IPM Datacom S.R.L.",
+       [3]byte{0, 2, 80}:      "Geyser Networks, Inc.",
+       [3]byte{0, 2, 81}:      "Soma Networks, Inc.",
+       [3]byte{0, 2, 82}:      "Carrier Corporation",
+       [3]byte{0, 2, 83}:      "Televideo, Inc.",
+       [3]byte{0, 2, 84}:      "WorldGate",
+       [3]byte{0, 2, 85}:      "IBM Corp",
+       [3]byte{0, 2, 86}:      "Alpha Processor, Inc.",
+       [3]byte{0, 2, 87}:      "Microcom Corp.",
+       [3]byte{0, 2, 88}:      "Flying Packets Communications",
+       [3]byte{0, 2, 89}:      "Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group",
+       [3]byte{0, 2, 90}:      "Catena Networks",
+       [3]byte{0, 2, 91}:      "Cambridge Silicon Radio",
+       [3]byte{0, 2, 92}:      "SCI Systems (Kunshan) Co., Ltd.",
+       [3]byte{0, 2, 93}:      "Calix Networks",
+       [3]byte{0, 2, 94}:      "High Technology Ltd",
+       [3]byte{0, 2, 95}:      "Nortel Networks",
+       [3]byte{0, 2, 96}:      "Accordion Networks, Inc.",
+       [3]byte{0, 2, 97}:      "Tilgin AB",
+       [3]byte{0, 2, 98}:      "Soyo Group Soyo Com Tech Co., Ltd",
+       [3]byte{0, 2, 99}:      "UPS Manufacturing SRL",
+       [3]byte{0, 2, 100}:     "AudioRamp.com",
+       [3]byte{0, 2, 101}:     "Virditech Co. Ltd.",
+       [3]byte{0, 2, 102}:     "Thermalogic Corporation",
+       [3]byte{0, 2, 103}:     "NODE RUNNER, INC.",
+       [3]byte{0, 2, 104}:     "Harris Government Communications",
+       [3]byte{0, 2, 105}:     "Nadatel Co., Ltd",
+       [3]byte{0, 2, 106}:     "Cocess Telecom Co., Ltd.",
+       [3]byte{0, 2, 107}:     "BCM Computers Co., Ltd.",
+       [3]byte{0, 2, 108}:     "Philips CFT",
+       [3]byte{0, 2, 109}:     "Adept Telecom",
+       [3]byte{0, 2, 110}:     "NeGeN Access, Inc.",
+       [3]byte{0, 2, 111}:     "Senao International Co., Ltd.",
+       [3]byte{0, 2, 112}:     "Crewave Co., Ltd.",
+       [3]byte{0, 2, 113}:     "Zhone Technologies",
+       [3]byte{0, 2, 114}:     "CC&C Technologies, Inc.",
+       [3]byte{0, 2, 115}:     "Coriolis Networks",
+       [3]byte{0, 2, 116}:     "Tommy Technologies Corp.",
+       [3]byte{0, 2, 117}:     "SMART Technologies, Inc.",
+       [3]byte{0, 2, 118}:     "Primax Electronics Ltd.",
+       [3]byte{0, 2, 119}:     "Cash Systemes Industrie",
+       [3]byte{0, 2, 120}:     "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{0, 2, 121}:     "Control Applications, Ltd.",
+       [3]byte{0, 2, 122}:     "IOI Technology Corporation",
+       [3]byte{0, 2, 123}:     "Amplify Net, Inc.",
+       [3]byte{0, 2, 124}:     "Trilithic, Inc.",
+       [3]byte{0, 2, 125}:     "Cisco Systems, Inc",
+       [3]byte{0, 2, 126}:     "Cisco Systems, Inc",
+       [3]byte{0, 2, 127}:     "ask-technologies.com",
+       [3]byte{0, 2, 128}:     "Mu Net, Inc.",
+       [3]byte{0, 2, 129}:     "Madge Ltd.",
+       [3]byte{0, 2, 130}:     "ViaClix, Inc.",
+       [3]byte{0, 2, 131}:     "Spectrum Controls, Inc.",
+       [3]byte{0, 2, 132}:     "AREVA T&D",
+       [3]byte{0, 2, 133}:     "Riverstone Networks",
+       [3]byte{0, 2, 134}:     "Occam Networks",
+       [3]byte{0, 2, 135}:     "Adapcom",
+       [3]byte{0, 2, 136}:     "GLOBAL VILLAGE COMMUNICATION",
+       [3]byte{0, 2, 137}:     "DNE Technologies",
+       [3]byte{0, 2, 138}:     "Ambit Microsystems Corporation",
+       [3]byte{0, 2, 139}:     "VDSL Systems OY",
+       [3]byte{0, 2, 140}:     "Micrel-Synergy Semiconductor",
+       [3]byte{0, 2, 141}:     "Movita Technologies, Inc.",
+       [3]byte{0, 2, 142}:     "Rapid 5 Networks, Inc.",
+       [3]byte{0, 2, 143}:     "Globetek, Inc.",
+       [3]byte{0, 2, 144}:     "Woorigisool, Inc.",
+       [3]byte{0, 2, 145}:     "Open Network Co., Ltd.",
+       [3]byte{0, 2, 146}:     "Logic Innovations, Inc.",
+       [3]byte{0, 2, 147}:     "Solid Data Systems",
+       [3]byte{0, 2, 148}:     "Tokyo Sokushin Co., Ltd.",
+       [3]byte{0, 2, 149}:     "IP.Access Limited",
+       [3]byte{0, 2, 150}:     "Lectron Co,. Ltd.",
+       [3]byte{0, 2, 151}:     "C-COR.net",
+       [3]byte{0, 2, 152}:     "Broadframe Corporation",
+       [3]byte{0, 2, 153}:     "Apex, Inc.",
+       [3]byte{0, 2, 154}:     "Storage Apps",
+       [3]byte{0, 2, 155}:     "Kreatel Communications AB",
+       [3]byte{0, 2, 156}:     "3COM",
+       [3]byte{0, 2, 157}:     "Merix Corp.",
+       [3]byte{0, 2, 158}:     "Information Equipment Co., Ltd.",
+       [3]byte{0, 2, 159}:     "L-3 Communication Aviation Recorders",
+       [3]byte{0, 2, 160}:     "Flatstack Ltd.",
+       [3]byte{0, 2, 161}:     "World Wide Packets",
+       [3]byte{0, 2, 162}:     "Hilscher GmbH",
+       [3]byte{0, 2, 163}:     "ABB Switzerland Ltd, Power Systems",
+       [3]byte{0, 2, 164}:     "AddPac Technology Co., Ltd.",
+       [3]byte{0, 2, 165}:     "Hewlett Packard",
+       [3]byte{0, 2, 166}:     "Effinet Systems Co., Ltd.",
+       [3]byte{0, 2, 167}:     "Vivace Networks",
+       [3]byte{0, 2, 168}:     "Air Link Technology",
+       [3]byte{0, 2, 169}:     "RACOM, s.r.o.",
+       [3]byte{0, 2, 170}:     "PLcom Co., Ltd.",
+       [3]byte{0, 2, 171}:     "CTC Union Technologies Co., Ltd.",
+       [3]byte{0, 2, 172}:     "3PAR data",
+       [3]byte{0, 2, 173}:     "HOYA Corporation",
+       [3]byte{0, 2, 174}:     "Scannex Electronics Ltd.",
+       [3]byte{0, 2, 175}:     "TeleCruz Technology, Inc.",
+       [3]byte{0, 2, 176}:     "Hokubu Communication & Industrial Co., Ltd.",
+       [3]byte{0, 2, 177}:     "Anritsu, Ltd.",
+       [3]byte{0, 2, 178}:     "Cablevision",
+       [3]byte{0, 2, 179}:     "Intel Corporation",
+       [3]byte{0, 2, 180}:     "DAPHNE",
+       [3]byte{0, 2, 181}:     "Avnet, Inc.",
+       [3]byte{0, 2, 182}:     "Acrosser Technology Co., Ltd.",
+       [3]byte{0, 2, 183}:     "Watanabe Electric Industry Co., Ltd.",
+       [3]byte{0, 2, 184}:     "WHI KONSULT AB",
+       [3]byte{0, 2, 185}:     "Cisco Systems, Inc",
+       [3]byte{0, 2, 186}:     "Cisco Systems, Inc",
+       [3]byte{0, 2, 187}:     "Continuous Computing Corp",
+       [3]byte{0, 2, 188}:     "LVL 7 Systems, Inc.",
+       [3]byte{0, 2, 189}:     "Bionet Co., Ltd.",
+       [3]byte{0, 2, 190}:     "Totsu Engineering, Inc.",
+       [3]byte{0, 2, 191}:     "dotRocket, Inc.",
+       [3]byte{0, 2, 192}:     "Bencent Tzeng Industry Co., Ltd.",
+       [3]byte{0, 2, 193}:     "Innovative Electronic Designs, Inc.",
+       [3]byte{0, 2, 194}:     "Net Vision Telecom",
+       [3]byte{0, 2, 195}:     "Arelnet Ltd.",
+       [3]byte{0, 2, 196}:     "Vector International BVBA",
+       [3]byte{0, 2, 197}:     "Evertz Microsystems Ltd.",
+       [3]byte{0, 2, 198}:     "Data Track Technology PLC",
+       [3]byte{0, 2, 199}:     "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 2, 200}:     "Technocom Communications Technology (pte) Ltd",
+       [3]byte{0, 2, 201}:     "Mellanox Technologies, Inc.",
+       [3]byte{0, 2, 202}:     "EndPoints, Inc.",
+       [3]byte{0, 2, 203}:     "TriState Ltd.",
+       [3]byte{0, 2, 204}:     "M.C.C.I",
+       [3]byte{0, 2, 205}:     "TeleDream, Inc.",
+       [3]byte{0, 2, 206}:     "FoxJet, Inc.",
+       [3]byte{0, 2, 207}:     "ZyGate Communications, Inc.",
+       [3]byte{0, 2, 208}:     "Comdial Corporation",
+       [3]byte{0, 2, 209}:     "Vivotek, Inc.",
+       [3]byte{0, 2, 210}:     "Workstation AG",
+       [3]byte{0, 2, 211}:     "NetBotz, Inc.",
+       [3]byte{0, 2, 212}:     "PDA Peripherals, Inc.",
+       [3]byte{0, 2, 213}:     "ACR",
+       [3]byte{0, 2, 214}:     "NICE Systems",
+       [3]byte{0, 2, 215}:     "EMPEG Ltd",
+       [3]byte{0, 2, 216}:     "BRECIS Communications Corporation",
+       [3]byte{0, 2, 217}:     "Reliable Controls",
+       [3]byte{0, 2, 218}:     "ExiO Communications, Inc.",
+       [3]byte{0, 2, 219}:     "NETSEC",
+       [3]byte{0, 2, 220}:     "Fujitsu General Limited",
+       [3]byte{0, 2, 221}:     "Bromax Communications, Ltd.",
+       [3]byte{0, 2, 222}:     "Astrodesign, Inc.",
+       [3]byte{0, 2, 223}:     "Net Com Systems, Inc.",
+       [3]byte{0, 2, 224}:     "ETAS GmbH",
+       [3]byte{0, 2, 225}:     "Integrated Network Corporation",
+       [3]byte{0, 2, 226}:     "NDC Infared Engineering",
+       [3]byte{0, 2, 227}:     "LITE-ON Communications, Inc.",
+       [3]byte{0, 2, 228}:     "JC HYUN Systems, Inc.",
+       [3]byte{0, 2, 229}:     "Timeware Ltd.",
+       [3]byte{0, 2, 230}:     "Gould Instrument Systems, Inc.",
+       [3]byte{0, 2, 231}:     "CAB GmbH & Co KG",
+       [3]byte{0, 2, 232}:     "E.D.&A.",
+       [3]byte{0, 2, 233}:     "CS Systemes De Securite - C3S",
+       [3]byte{0, 2, 234}:     "Focus Enhancements",
+       [3]byte{0, 2, 235}:     "Pico Communications",
+       [3]byte{0, 2, 236}:     "Maschoff Design Engineering",
+       [3]byte{0, 2, 237}:     "DXO Telecom Co., Ltd.",
+       [3]byte{0, 2, 238}:     "Nokia Danmark A/S",
+       [3]byte{0, 2, 239}:     "CCC Network Systems Group Ltd.",
+       [3]byte{0, 2, 240}:     "AME Optimedia Technology Co., Ltd.",
+       [3]byte{0, 2, 241}:     "Pinetron Co., Ltd.",
+       [3]byte{0, 2, 242}:     "eDevice, Inc.",
+       [3]byte{0, 2, 243}:     "Media Serve Co., Ltd.",
+       [3]byte{0, 2, 244}:     "PCTEL, Inc.",
+       [3]byte{0, 2, 245}:     "VIVE Synergies, Inc.",
+       [3]byte{0, 2, 246}:     "Equipe Communications",
+       [3]byte{0, 2, 247}:     "ARM",
+       [3]byte{0, 2, 248}:     "SEAKR Engineering, Inc.",
+       [3]byte{0, 2, 249}:     "MIMOS Berhad",
+       [3]byte{0, 2, 250}:     "DX Antenna Co., Ltd.",
+       [3]byte{0, 2, 251}:     "Baumuller Aulugen-Systemtechnik GmbH",
+       [3]byte{0, 2, 252}:     "Cisco Systems, Inc",
+       [3]byte{0, 2, 253}:     "Cisco Systems, Inc",
+       [3]byte{0, 2, 254}:     "Viditec, Inc.",
+       [3]byte{0, 2, 255}:     "Handan BroadInfoCom",
+       [3]byte{0, 3, 0}:       "Barracuda Networks, Inc.",
+       [3]byte{0, 3, 1}:       "EXFO",
+       [3]byte{0, 3, 2}:       "Charles Industries, Ltd.",
+       [3]byte{0, 3, 3}:       "JAMA Electronics Co., Ltd.",
+       [3]byte{0, 3, 4}:       "Pacific Broadband Communications",
+       [3]byte{0, 3, 5}:       "MSC Vertriebs GmbH",
+       [3]byte{0, 3, 6}:       "Fusion In Tech Co., Ltd.",
+       [3]byte{0, 3, 7}:       "Secure Works, Inc.",
+       [3]byte{0, 3, 8}:       "AM Communications, Inc.",
+       [3]byte{0, 3, 9}:       "Texcel Technology PLC",
+       [3]byte{0, 3, 10}:      "Argus Technologies",
+       [3]byte{0, 3, 11}:      "Hunter Technology, Inc.",
+       [3]byte{0, 3, 12}:      "Telesoft Technologies Ltd.",
+       [3]byte{0, 3, 13}:      "Uniwill Computer Corp.",
+       [3]byte{0, 3, 14}:      "Core Communications Co., Ltd.",
+       [3]byte{0, 3, 15}:      "Digital China (Shanghai) Networks Ltd.",
+       [3]byte{0, 3, 16}:      "E-Globaledge Corporation",
+       [3]byte{0, 3, 17}:      "Micro Technology Co., Ltd.",
+       [3]byte{0, 3, 18}:      "TR-Systemtechnik GmbH",
+       [3]byte{0, 3, 19}:      "Access Media SPA",
+       [3]byte{0, 3, 20}:      "Teleware Network Systems",
+       [3]byte{0, 3, 21}:      "Cidco Incorporated",
+       [3]byte{0, 3, 22}:      "Nobell Communications, Inc.",
+       [3]byte{0, 3, 23}:      "Merlin Systems, Inc.",
+       [3]byte{0, 3, 24}:      "Cyras Systems, Inc.",
+       [3]byte{0, 3, 25}:      "Infineon AG",
+       [3]byte{0, 3, 26}:      "Beijing Broad Telecom Ltd., China",
+       [3]byte{0, 3, 27}:      "Cellvision Systems, Inc.",
+       [3]byte{0, 3, 28}:      "Svenska Hardvarufabriken AB",
+       [3]byte{0, 3, 29}:      "Taiwan Commate Computer, Inc.",
+       [3]byte{0, 3, 30}:      "Optranet, Inc.",
+       [3]byte{0, 3, 31}:      "Condev Ltd.",
+       [3]byte{0, 3, 32}:      "Xpeed, Inc.",
+       [3]byte{0, 3, 33}:      "Reco Research Co., Ltd.",
+       [3]byte{0, 3, 34}:      "IDIS Co., Ltd.",
+       [3]byte{0, 3, 35}:      "Cornet Technology, Inc.",
+       [3]byte{0, 3, 36}:      "SANYO Consumer Electronics Co., Ltd.",
+       [3]byte{0, 3, 37}:      "Arima Computer Corp.",
+       [3]byte{0, 3, 38}:      "Iwasaki Information Systems Co., Ltd.",
+       [3]byte{0, 3, 39}:      "ACT'L",
+       [3]byte{0, 3, 40}:      "Mace Group, Inc.",
+       [3]byte{0, 3, 41}:      "F3, Inc.",
+       [3]byte{0, 3, 42}:      "UniData Communication Systems, Inc.",
+       [3]byte{0, 3, 43}:      "GAI Datenfunksysteme GmbH",
+       [3]byte{0, 3, 44}:      "ABB Switzerland Ltd",
+       [3]byte{0, 3, 45}:      "IBASE Technology, Inc.",
+       [3]byte{0, 3, 46}:      "Scope Information Management, Ltd.",
+       [3]byte{0, 3, 47}:      "Global Sun Technology, Inc.",
+       [3]byte{0, 3, 48}:      "Imagenics, Co., Ltd.",
+       [3]byte{0, 3, 49}:      "Cisco Systems, Inc",
+       [3]byte{0, 3, 50}:      "Cisco Systems, Inc",
+       [3]byte{0, 3, 51}:      "Digitel Co., Ltd.",
+       [3]byte{0, 3, 52}:      "Newport Electronics",
+       [3]byte{0, 3, 53}:      "Mirae Technology",
+       [3]byte{0, 3, 54}:      "Zetes Technologies",
+       [3]byte{0, 3, 55}:      "Vaone, Inc.",
+       [3]byte{0, 3, 56}:      "Oak Technology",
+       [3]byte{0, 3, 57}:      "Eurologic Systems, Ltd.",
+       [3]byte{0, 3, 58}:      "Silicon Wave, Inc.",
+       [3]byte{0, 3, 59}:      "TAMI Tech Co., Ltd.",
+       [3]byte{0, 3, 60}:      "Daiden Co., Ltd.",
+       [3]byte{0, 3, 61}:      "ILSHin Lab",
+       [3]byte{0, 3, 62}:      "Tateyama System Laboratory Co., Ltd.",
+       [3]byte{0, 3, 63}:      "BigBand Networks, Ltd.",
+       [3]byte{0, 3, 64}:      "Floware Wireless Systems, Ltd.",
+       [3]byte{0, 3, 65}:      "Axon Digital Design",
+       [3]byte{0, 3, 66}:      "Nortel Networks",
+       [3]byte{0, 3, 67}:      "Martin Professional A/S",
+       [3]byte{0, 3, 68}:      "Tietech.Co., Ltd.",
+       [3]byte{0, 3, 69}:      "Routrek Networks Corporation",
+       [3]byte{0, 3, 70}:      "Hitachi Kokusai Electric, Inc.",
+       [3]byte{0, 3, 71}:      "Intel Corporation",
+       [3]byte{0, 3, 72}:      "Norscan Instruments, Ltd.",
+       [3]byte{0, 3, 73}:      "Vidicode Datacommunicatie B.V.",
+       [3]byte{0, 3, 74}:      "RIAS Corporation",
+       [3]byte{0, 3, 75}:      "Nortel Networks",
+       [3]byte{0, 3, 76}:      "Shanghai DigiVision Technology Co., Ltd.",
+       [3]byte{0, 3, 77}:      "Chiaro Networks, Ltd.",
+       [3]byte{0, 3, 78}:      "Pos Data Company, Ltd.",
+       [3]byte{0, 3, 79}:      "Sur-Gard Security",
+       [3]byte{0, 3, 80}:      "BTICINO SPA",
+       [3]byte{0, 3, 81}:      "Diebold, Inc.",
+       [3]byte{0, 3, 82}:      "Colubris Networks",
+       [3]byte{0, 3, 83}:      "Mitac, Inc.",
+       [3]byte{0, 3, 84}:      "Fiber Logic Communications",
+       [3]byte{0, 3, 85}:      "TeraBeam Internet Systems",
+       [3]byte{0, 3, 86}:      "Wincor Nixdorf International GmbH",
+       [3]byte{0, 3, 87}:      "Intervoice-Brite, Inc.",
+       [3]byte{0, 3, 88}:      "Hanyang Digitech Co.Ltd",
+       [3]byte{0, 3, 89}:      "DigitalSis",
+       [3]byte{0, 3, 90}:      "Photron Limited",
+       [3]byte{0, 3, 91}:      "BridgeWave Communications",
+       [3]byte{0, 3, 92}:      "Saint Song Corp.",
+       [3]byte{0, 3, 93}:      "Bosung Hi-Net Co., Ltd.",
+       [3]byte{0, 3, 94}:      "Metropolitan Area Networks, Inc.",
+       [3]byte{0, 3, 95}:      "Prüftechnik Condition Monitoring GmbH & Co. KG",
+       [3]byte{0, 3, 96}:      "PAC Interactive Technology, Inc.",
+       [3]byte{0, 3, 97}:      "Widcomm, Inc.",
+       [3]byte{0, 3, 98}:      "Vodtel Communications, Inc.",
+       [3]byte{0, 3, 99}:      "Miraesys Co., Ltd.",
+       [3]byte{0, 3, 100}:     "Scenix Semiconductor, Inc.",
+       [3]byte{0, 3, 101}:     "Kira Information & Communications, Ltd.",
+       [3]byte{0, 3, 102}:     "ASM Pacific Technology",
+       [3]byte{0, 3, 103}:     "Jasmine Networks, Inc.",
+       [3]byte{0, 3, 104}:     "Embedone Co., Ltd.",
+       [3]byte{0, 3, 105}:     "Nippon Antenna Co., Ltd.",
+       [3]byte{0, 3, 106}:     "Mainnet, Ltd.",
+       [3]byte{0, 3, 107}:     "Cisco Systems, Inc",
+       [3]byte{0, 3, 108}:     "Cisco Systems, Inc",
+       [3]byte{0, 3, 109}:     "Runtop, Inc.",
+       [3]byte{0, 3, 110}:     "Nicon Systems (Pty) Limited",
+       [3]byte{0, 3, 111}:     "Telsey SPA",
+       [3]byte{0, 3, 112}:     "NXTV, Inc.",
+       [3]byte{0, 3, 113}:     "Acomz Networks Corp.",
+       [3]byte{0, 3, 114}:     "ULAN",
+       [3]byte{0, 3, 115}:     "Aselsan A.S",
+       [3]byte{0, 3, 116}:     "Control Microsystems",
+       [3]byte{0, 3, 117}:     "NetMedia, Inc.",
+       [3]byte{0, 3, 118}:     "Graphtec Technology, Inc.",
+       [3]byte{0, 3, 119}:     "Gigabit Wireless",
+       [3]byte{0, 3, 120}:     "HUMAX Co., Ltd.",
+       [3]byte{0, 3, 121}:     "Proscend Communications, Inc.",
+       [3]byte{0, 3, 122}:     "Taiyo Yuden Co., Ltd.",
+       [3]byte{0, 3, 123}:     "IDEC IZUMI Corporation",
+       [3]byte{0, 3, 124}:     "Coax Media",
+       [3]byte{0, 3, 125}:     "Stellcom",
+       [3]byte{0, 3, 126}:     "PORTech Communications, Inc.",
+       [3]byte{0, 3, 127}:     "Atheros Communications, Inc.",
+       [3]byte{0, 3, 128}:     "SSH Communications Security Corp.",
+       [3]byte{0, 3, 129}:     "Ingenico International",
+       [3]byte{0, 3, 130}:     "A-One Co., Ltd.",
+       [3]byte{0, 3, 131}:     "Metera Networks, Inc.",
+       [3]byte{0, 3, 132}:     "AETA",
+       [3]byte{0, 3, 133}:     "Actelis Networks, Inc.",
+       [3]byte{0, 3, 134}:     "Ho Net, Inc.",
+       [3]byte{0, 3, 135}:     "Blaze Network Products",
+       [3]byte{0, 3, 136}:     "Fastfame Technology Co., Ltd.",
+       [3]byte{0, 3, 137}:     "PLANTRONICS, INC.",
+       [3]byte{0, 3, 138}:     "America Online, Inc.",
+       [3]byte{0, 3, 139}:     "PLUS-ONE I&T, Inc.",
+       [3]byte{0, 3, 140}:     "Total Impact",
+       [3]byte{0, 3, 141}:     "PCS Revenue Control Systems, Inc.",
+       [3]byte{0, 3, 142}:     "Atoga Systems, Inc.",
+       [3]byte{0, 3, 143}:     "Weinschel Corporation",
+       [3]byte{0, 3, 144}:     "Digital Video Communications, Inc.",
+       [3]byte{0, 3, 145}:     "Advanced Digital Broadcast, Ltd.",
+       [3]byte{0, 3, 146}:     "Hyundai Teletek Co., Ltd.",
+       [3]byte{0, 3, 147}:     "Apple, Inc.",
+       [3]byte{0, 3, 148}:     "Connect One",
+       [3]byte{0, 3, 149}:     "California Amplifier",
+       [3]byte{0, 3, 150}:     "EZ Cast Co., Ltd.",
+       [3]byte{0, 3, 151}:     "Watchfront Limited",
+       [3]byte{0, 3, 152}:     "WISI",
+       [3]byte{0, 3, 153}:     "Dongju Informations & Communications Co., Ltd.",
+       [3]byte{0, 3, 154}:     "SiConnect",
+       [3]byte{0, 3, 155}:     "NetChip Technology, Inc.",
+       [3]byte{0, 3, 156}:     "OptiMight Communications, Inc.",
+       [3]byte{0, 3, 157}:     "Qisda Corporation",
+       [3]byte{0, 3, 158}:     "Tera System Co., Ltd.",
+       [3]byte{0, 3, 159}:     "Cisco Systems, Inc",
+       [3]byte{0, 3, 160}:     "Cisco Systems, Inc",
+       [3]byte{0, 3, 161}:     "HIPER Information & Communication, Inc.",
+       [3]byte{0, 3, 162}:     "Catapult Communications",
+       [3]byte{0, 3, 163}:     "MAVIX, Ltd.",
+       [3]byte{0, 3, 164}:     "Imation Corp.",
+       [3]byte{0, 3, 165}:     "Medea Corporation",
+       [3]byte{0, 3, 166}:     "Traxit Technology, Inc.",
+       [3]byte{0, 3, 167}:     "Unixtar Technology, Inc.",
+       [3]byte{0, 3, 168}:     "IDOT Computers, Inc.",
+       [3]byte{0, 3, 169}:     "AXCENT Media AG",
+       [3]byte{0, 3, 170}:     "Watlow",
+       [3]byte{0, 3, 171}:     "Bridge Information Systems",
+       [3]byte{0, 3, 172}:     "Fronius Schweissmaschinen",
+       [3]byte{0, 3, 173}:     "Emerson Energy Systems AB",
+       [3]byte{0, 3, 174}:     "Allied Advanced Manufacturing Pte, Ltd.",
+       [3]byte{0, 3, 175}:     "Paragea Communications",
+       [3]byte{0, 3, 176}:     "Xsense Technology Corp.",
+       [3]byte{0, 3, 177}:     "Hospira Inc.",
+       [3]byte{0, 3, 178}:     "Radware",
+       [3]byte{0, 3, 179}:     "IA Link Systems Co., Ltd.",
+       [3]byte{0, 3, 180}:     "Macrotek International Corp.",
+       [3]byte{0, 3, 181}:     "Entra Technology Co.",
+       [3]byte{0, 3, 182}:     "QSI Corporation",
+       [3]byte{0, 3, 183}:     "ZACCESS Systems",
+       [3]byte{0, 3, 184}:     "NetKit Solutions, LLC",
+       [3]byte{0, 3, 185}:     "Hualong Telecom Co., Ltd.",
+       [3]byte{0, 3, 186}:     "Oracle Corporation",
+       [3]byte{0, 3, 187}:     "Signal Communications Limited",
+       [3]byte{0, 3, 188}:     "COT GmbH",
+       [3]byte{0, 3, 189}:     "OmniCluster Technologies, Inc.",
+       [3]byte{0, 3, 190}:     "Netility",
+       [3]byte{0, 3, 191}:     "Centerpoint Broadband Technologies, Inc.",
+       [3]byte{0, 3, 192}:     "RFTNC Co., Ltd.",
+       [3]byte{0, 3, 193}:     "Packet Dynamics Ltd",
+       [3]byte{0, 3, 194}:     "Solphone K.K.",
+       [3]byte{0, 3, 195}:     "Micronik Multimedia",
+       [3]byte{0, 3, 196}:     "Tomra Systems ASA",
+       [3]byte{0, 3, 197}:     "Mobotix AG",
+       [3]byte{0, 3, 198}:     "ICUE Systems, Inc.",
+       [3]byte{0, 3, 199}:     "hopf Elektronik GmbH",
+       [3]byte{0, 3, 200}:     "CML Emergency Services",
+       [3]byte{0, 3, 201}:     "TECOM Co., Ltd.",
+       [3]byte{0, 3, 202}:     "MTS Systems Corp.",
+       [3]byte{0, 3, 203}:     "Nippon Systems Development Co., Ltd.",
+       [3]byte{0, 3, 204}:     "Momentum Computer, Inc.",
+       [3]byte{0, 3, 205}:     "Clovertech, Inc.",
+       [3]byte{0, 3, 206}:     "ETEN Technologies, Inc.",
+       [3]byte{0, 3, 207}:     "Muxcom, Inc.",
+       [3]byte{0, 3, 208}:     "KOANKEISO Co., Ltd.",
+       [3]byte{0, 3, 209}:     "Takaya Corporation",
+       [3]byte{0, 3, 210}:     "Crossbeam Systems, Inc.",
+       [3]byte{0, 3, 211}:     "Internet Energy Systems, Inc.",
+       [3]byte{0, 3, 212}:     "Alloptic, Inc.",
+       [3]byte{0, 3, 213}:     "Advanced Communications Co., Ltd.",
+       [3]byte{0, 3, 214}:     "RADVision, Ltd.",
+       [3]byte{0, 3, 215}:     "NextNet Wireless, Inc.",
+       [3]byte{0, 3, 216}:     "iMPath Networks, Inc.",
+       [3]byte{0, 3, 217}:     "Secheron SA",
+       [3]byte{0, 3, 218}:     "Takamisawa Cybernetics Co., Ltd.",
+       [3]byte{0, 3, 219}:     "Apogee Electronics Corp.",
+       [3]byte{0, 3, 220}:     "Lexar Media, Inc.",
+       [3]byte{0, 3, 221}:     "Comark Interactive Solutions",
+       [3]byte{0, 3, 222}:     "OTC Wireless",
+       [3]byte{0, 3, 223}:     "Desana Systems",
+       [3]byte{0, 3, 224}:     "ARRIS Group, Inc.",
+       [3]byte{0, 3, 225}:     "Winmate Communication, Inc.",
+       [3]byte{0, 3, 226}:     "Comspace Corporation",
+       [3]byte{0, 3, 227}:     "Cisco Systems, Inc",
+       [3]byte{0, 3, 228}:     "Cisco Systems, Inc",
+       [3]byte{0, 3, 229}:     "Hermstedt SG",
+       [3]byte{0, 3, 230}:     "Entone, Inc.",
+       [3]byte{0, 3, 231}:     "Logostek Co. Ltd.",
+       [3]byte{0, 3, 232}:     "Wavelength Digital Limited",
+       [3]byte{0, 3, 233}:     "Akara Canada, Inc.",
+       [3]byte{0, 3, 234}:     "Mega System Technologies, Inc.",
+       [3]byte{0, 3, 235}:     "Atrica",
+       [3]byte{0, 3, 236}:     "ICG Research, Inc.",
+       [3]byte{0, 3, 237}:     "Shinkawa Electric Co., Ltd.",
+       [3]byte{0, 3, 238}:     "MKNet Corporation",
+       [3]byte{0, 3, 239}:     "Oneline AG",
+       [3]byte{0, 3, 240}:     "Redfern Broadband Networks",
+       [3]byte{0, 3, 241}:     "Cicada Semiconductor, Inc.",
+       [3]byte{0, 3, 242}:     "Seneca Networks",
+       [3]byte{0, 3, 243}:     "Dazzle Multimedia, Inc.",
+       [3]byte{0, 3, 244}:     "NetBurner",
+       [3]byte{0, 3, 245}:     "Chip2Chip",
+       [3]byte{0, 3, 246}:     "Allegro Networks, Inc.",
+       [3]byte{0, 3, 247}:     "Plast-Control GmbH",
+       [3]byte{0, 3, 248}:     "SanCastle Technologies, Inc.",
+       [3]byte{0, 3, 249}:     "Pleiades Communications, Inc.",
+       [3]byte{0, 3, 250}:     "TiMetra Networks",
+       [3]byte{0, 3, 251}:     "ENEGATE Co.,Ltd.",
+       [3]byte{0, 3, 252}:     "Intertex Data AB",
+       [3]byte{0, 3, 253}:     "Cisco Systems, Inc",
+       [3]byte{0, 3, 254}:     "Cisco Systems, Inc",
+       [3]byte{0, 3, 255}:     "Microsoft Corporation",
+       [3]byte{0, 4, 0}:       "LEXMARK INTERNATIONAL, INC.",
+       [3]byte{0, 4, 1}:       "Osaki Electric Co., Ltd.",
+       [3]byte{0, 4, 2}:       "Nexsan Technologies, Ltd.",
+       [3]byte{0, 4, 3}:       "Nexsi Corporation",
+       [3]byte{0, 4, 4}:       "Makino Milling Machine Co., Ltd.",
+       [3]byte{0, 4, 5}:       "ACN Technologies",
+       [3]byte{0, 4, 6}:       "Fa. Metabox AG",
+       [3]byte{0, 4, 7}:       "Topcon Positioning Systems, Inc.",
+       [3]byte{0, 4, 8}:       "Sanko Electronics Co., Ltd.",
+       [3]byte{0, 4, 9}:       "Cratos Networks",
+       [3]byte{0, 4, 10}:      "Sage Systems",
+       [3]byte{0, 4, 11}:      "3COM EUROPE LTD.",
+       [3]byte{0, 4, 12}:      "Kanno Works, Ltd.",
+       [3]byte{0, 4, 13}:      "Avaya Inc",
+       [3]byte{0, 4, 14}:      "AVM GmbH",
+       [3]byte{0, 4, 15}:      "Asus Network Technologies, Inc.",
+       [3]byte{0, 4, 16}:      "Spinnaker Networks, Inc.",
+       [3]byte{0, 4, 17}:      "Inkra Networks, Inc.",
+       [3]byte{0, 4, 18}:      "WaveSmith Networks, Inc.",
+       [3]byte{0, 4, 19}:      "SNOM Technology AG",
+       [3]byte{0, 4, 20}:      "Umezawa Musen Denki Co., Ltd.",
+       [3]byte{0, 4, 21}:      "Rasteme Systems Co., Ltd.",
+       [3]byte{0, 4, 22}:      "Parks S/A Comunicacoes Digitais",
+       [3]byte{0, 4, 23}:      "ELAU AG",
+       [3]byte{0, 4, 24}:      "Teltronic S.A.U.",
+       [3]byte{0, 4, 25}:      "Fibercycle Networks, Inc.",
+       [3]byte{0, 4, 26}:      "Ines Test and Measurement GmbH & CoKG",
+       [3]byte{0, 4, 27}:      "Bridgeworks Ltd.",
+       [3]byte{0, 4, 28}:      "ipDialog, Inc.",
+       [3]byte{0, 4, 29}:      "Corega of America",
+       [3]byte{0, 4, 30}:      "Shikoku Instrumentation Co., Ltd.",
+       [3]byte{0, 4, 31}:      "Sony Interactive Entertainment Inc.",
+       [3]byte{0, 4, 32}:      "Slim Devices, Inc.",
+       [3]byte{0, 4, 33}:      "Ocular Networks",
+       [3]byte{0, 4, 34}:      "Studio Technologies, Inc",
+       [3]byte{0, 4, 35}:      "Intel Corporation",
+       [3]byte{0, 4, 36}:      "TMC s.r.l.",
+       [3]byte{0, 4, 37}:      "Atmel Corporation",
+       [3]byte{0, 4, 38}:      "Autosys",
+       [3]byte{0, 4, 39}:      "Cisco Systems, Inc",
+       [3]byte{0, 4, 40}:      "Cisco Systems, Inc",
+       [3]byte{0, 4, 41}:      "Pixord Corporation",
+       [3]byte{0, 4, 42}:      "Wireless Networks, Inc.",
+       [3]byte{0, 4, 43}:      "IT Access Co., Ltd.",
+       [3]byte{0, 4, 44}:      "Minet, Inc.",
+       [3]byte{0, 4, 45}:      "Sarian Systems, Ltd.",
+       [3]byte{0, 4, 46}:      "Netous Technologies, Ltd.",
+       [3]byte{0, 4, 47}:      "International Communications Products, Inc.",
+       [3]byte{0, 4, 48}:      "Netgem",
+       [3]byte{0, 4, 49}:      "GlobalStreams, Inc.",
+       [3]byte{0, 4, 50}:      "Voyetra Turtle Beach, Inc.",
+       [3]byte{0, 4, 51}:      "Cyberboard A/S",
+       [3]byte{0, 4, 52}:      "Accelent Systems, Inc.",
+       [3]byte{0, 4, 53}:      "InfiNet LLC",
+       [3]byte{0, 4, 54}:      "ELANsat Technologies, Inc.",
+       [3]byte{0, 4, 55}:      "Powin Information Technology, Inc.",
+       [3]byte{0, 4, 56}:      "Nortel Networks",
+       [3]byte{0, 4, 57}:      "Rosco Entertainment Technology, Inc.",
+       [3]byte{0, 4, 58}:      "Intelligent Telecommunications, Inc.",
+       [3]byte{0, 4, 59}:      "Lava Computer Mfg., Inc.",
+       [3]byte{0, 4, 60}:      "SONOS Co., Ltd.",
+       [3]byte{0, 4, 61}:      "INDEL AG",
+       [3]byte{0, 4, 62}:      "Telencomm",
+       [3]byte{0, 4, 63}:      "ESTeem Wireless Modems, Inc",
+       [3]byte{0, 4, 64}:      "cyberPIXIE, Inc.",
+       [3]byte{0, 4, 65}:      "Half Dome Systems, Inc.",
+       [3]byte{0, 4, 66}:      "NACT",
+       [3]byte{0, 4, 67}:      "Agilent Technologies, Inc.",
+       [3]byte{0, 4, 68}:      "Western Multiplex Corporation",
+       [3]byte{0, 4, 69}:      "LMS Skalar Instruments GmbH",
+       [3]byte{0, 4, 70}:      "CYZENTECH Co., Ltd.",
+       [3]byte{0, 4, 71}:      "Acrowave Systems Co., Ltd.",
+       [3]byte{0, 4, 72}:      "Polaroid Corporation",
+       [3]byte{0, 4, 73}:      "Mapletree Networks",
+       [3]byte{0, 4, 74}:      "iPolicy Networks, Inc.",
+       [3]byte{0, 4, 75}:      "NVIDIA",
+       [3]byte{0, 4, 76}:      "JENOPTIK",
+       [3]byte{0, 4, 77}:      "Cisco Systems, Inc",
+       [3]byte{0, 4, 78}:      "Cisco Systems, Inc",
+       [3]byte{0, 4, 79}:      "Schubert System Elektronik Gmbh",
+       [3]byte{0, 4, 80}:      "DMD Computers SRL",
+       [3]byte{0, 4, 81}:      "Medrad, Inc.",
+       [3]byte{0, 4, 82}:      "RocketLogix, Inc.",
+       [3]byte{0, 4, 83}:      "YottaYotta, Inc.",
+       [3]byte{0, 4, 84}:      "Quadriga UK",
+       [3]byte{0, 4, 85}:      "ANTARA.net",
+       [3]byte{0, 4, 86}:      "Cambium Networks Limited",
+       [3]byte{0, 4, 87}:      "Universal Access Technology, Inc.",
+       [3]byte{0, 4, 88}:      "Fusion X Co., Ltd.",
+       [3]byte{0, 4, 89}:      "Veristar Corporation",
+       [3]byte{0, 4, 90}:      "The Linksys Group, Inc.",
+       [3]byte{0, 4, 91}:      "Techsan Electronics Co., Ltd.",
+       [3]byte{0, 4, 92}:      "Mobiwave Pte Ltd",
+       [3]byte{0, 4, 93}:      "BEKA Elektronik",
+       [3]byte{0, 4, 94}:      "PolyTrax Information Technology AG",
+       [3]byte{0, 4, 95}:      "Avalue Technology, Inc.",
+       [3]byte{0, 4, 96}:      "Knilink Technology, Inc.",
+       [3]byte{0, 4, 97}:      "EPOX Computer Co., Ltd.",
+       [3]byte{0, 4, 98}:      "DAKOS Data & Communication Co., Ltd.",
+       [3]byte{0, 4, 99}:      "Bosch Security Systems",
+       [3]byte{0, 4, 100}:     "Pulse-Link Inc",
+       [3]byte{0, 4, 101}:     "i.s.t isdn-support technik GmbH",
+       [3]byte{0, 4, 102}:     "ARMITEL Co.",
+       [3]byte{0, 4, 103}:     "Wuhan Research Institute of MII",
+       [3]byte{0, 4, 104}:     "Vivity, Inc.",
+       [3]byte{0, 4, 105}:     "Innocom, Inc.",
+       [3]byte{0, 4, 106}:     "Navini Networks",
+       [3]byte{0, 4, 107}:     "Palm Wireless, Inc.",
+       [3]byte{0, 4, 108}:     "Cyber Technology Co., Ltd.",
+       [3]byte{0, 4, 109}:     "Cisco Systems, Inc",
+       [3]byte{0, 4, 110}:     "Cisco Systems, Inc",
+       [3]byte{0, 4, 111}:     "Digitel S/A Industria Eletronica",
+       [3]byte{0, 4, 112}:     "ipUnplugged AB",
+       [3]byte{0, 4, 113}:     "IPrad",
+       [3]byte{0, 4, 114}:     "Telelynx, Inc.",
+       [3]byte{0, 4, 115}:     "Photonex Corporation",
+       [3]byte{0, 4, 116}:     "LEGRAND",
+       [3]byte{0, 4, 117}:     "3 Com Corporation",
+       [3]byte{0, 4, 118}:     "3 Com Corporation",
+       [3]byte{0, 4, 119}:     "Scalant Systems, Inc.",
+       [3]byte{0, 4, 120}:     "G. Star Technology Corporation",
+       [3]byte{0, 4, 121}:     "Radius Co., Ltd.",
+       [3]byte{0, 4, 122}:     "AXXESSIT ASA",
+       [3]byte{0, 4, 123}:     "Schlumberger",
+       [3]byte{0, 4, 124}:     "Skidata AG",
+       [3]byte{0, 4, 125}:     "Pelco",
+       [3]byte{0, 4, 126}:     "Siqura B.V.",
+       [3]byte{0, 4, 127}:     "Chr. Mayr GmbH & Co. KG",
+       [3]byte{0, 4, 128}:     "Brocade Communications Systems, Inc.",
+       [3]byte{0, 4, 129}:     "Econolite Control Products, Inc.",
+       [3]byte{0, 4, 130}:     "Medialogic Corp.",
+       [3]byte{0, 4, 131}:     "Deltron Technology, Inc.",
+       [3]byte{0, 4, 132}:     "Amann GmbH",
+       [3]byte{0, 4, 133}:     "PicoLight",
+       [3]byte{0, 4, 134}:     "ITTC, University of Kansas",
+       [3]byte{0, 4, 135}:     "Cogency Semiconductor, Inc.",
+       [3]byte{0, 4, 136}:     "Eurotherm Controls",
+       [3]byte{0, 4, 137}:     "YAFO Networks, Inc.",
+       [3]byte{0, 4, 138}:     "Temia Vertriebs GmbH",
+       [3]byte{0, 4, 139}:     "Poscon Corporation",
+       [3]byte{0, 4, 140}:     "Nayna Networks, Inc.",
+       [3]byte{0, 4, 141}:     "Teo Technologies, Inc",
+       [3]byte{0, 4, 142}:     "Ohm Tech Labs, Inc.",
+       [3]byte{0, 4, 143}:     "TD Systems Corporation",
+       [3]byte{0, 4, 144}:     "Optical Access",
+       [3]byte{0, 4, 145}:     "Technovision, Inc.",
+       [3]byte{0, 4, 146}:     "Hive Internet, Ltd.",
+       [3]byte{0, 4, 147}:     "Tsinghua Unisplendour Co., Ltd.",
+       [3]byte{0, 4, 148}:     "Breezecom, Ltd.",
+       [3]byte{0, 4, 149}:     "Tejas Networks India Limited",
+       [3]byte{0, 4, 150}:     "Extreme Networks, Inc.",
+       [3]byte{0, 4, 151}:     "MacroSystem Digital Video AG",
+       [3]byte{0, 4, 152}:     "Mahi Networks",
+       [3]byte{0, 4, 153}:     "Chino Corporation",
+       [3]byte{0, 4, 154}:     "Cisco Systems, Inc",
+       [3]byte{0, 4, 155}:     "Cisco Systems, Inc",
+       [3]byte{0, 4, 156}:     "Surgient Networks, Inc.",
+       [3]byte{0, 4, 157}:     "Ipanema Technologies",
+       [3]byte{0, 4, 158}:     "Wirelink Co., Ltd.",
+       [3]byte{0, 4, 159}:     "Freescale Semiconductor",
+       [3]byte{0, 4, 160}:     "Verity Instruments, Inc.",
+       [3]byte{0, 4, 161}:     "Pathway Connectivity",
+       [3]byte{0, 4, 162}:     "L.S.I. Japan Co., Ltd.",
+       [3]byte{0, 4, 163}:     "Microchip Technology Inc.",
+       [3]byte{0, 4, 164}:     "NetEnabled, Inc.",
+       [3]byte{0, 4, 165}:     "Barco Projection Systems NV",
+       [3]byte{0, 4, 166}:     "SAF Tehnika Ltd.",
+       [3]byte{0, 4, 167}:     "FabiaTech Corporation",
+       [3]byte{0, 4, 168}:     "Broadmax Technologies, Inc.",
+       [3]byte{0, 4, 169}:     "SandStream Technologies, Inc.",
+       [3]byte{0, 4, 170}:     "Jetstream Communications",
+       [3]byte{0, 4, 171}:     "Comverse Network Systems, Inc.",
+       [3]byte{0, 4, 172}:     "IBM Corp",
+       [3]byte{0, 4, 173}:     "Malibu Networks",
+       [3]byte{0, 4, 174}:     "Sullair Corporation",
+       [3]byte{0, 4, 175}:     "Digital Fountain, Inc.",
+       [3]byte{0, 4, 176}:     "ELESIGN Co., Ltd.",
+       [3]byte{0, 4, 177}:     "Signal Technology, Inc.",
+       [3]byte{0, 4, 178}:     "ESSEGI SRL",
+       [3]byte{0, 4, 179}:     "Videotek, Inc.",
+       [3]byte{0, 4, 180}:     "CIAC",
+       [3]byte{0, 4, 181}:     "Equitrac Corporation",
+       [3]byte{0, 4, 182}:     "Stratex Networks, Inc.",
+       [3]byte{0, 4, 183}:     "AMB i.t. Holding",
+       [3]byte{0, 4, 184}:     "Kumahira Co., Ltd.",
+       [3]byte{0, 4, 185}:     "S.I. Soubou, Inc.",
+       [3]byte{0, 4, 186}:     "KDD Media Will Corporation",
+       [3]byte{0, 4, 187}:     "Bardac Corporation",
+       [3]byte{0, 4, 188}:     "Giantec, Inc.",
+       [3]byte{0, 4, 189}:     "ARRIS Group, Inc.",
+       [3]byte{0, 4, 190}:     "OptXCon, Inc.",
+       [3]byte{0, 4, 191}:     "VersaLogic Corp.",
+       [3]byte{0, 4, 192}:     "Cisco Systems, Inc",
+       [3]byte{0, 4, 193}:     "Cisco Systems, Inc",
+       [3]byte{0, 4, 194}:     "Magnipix, Inc.",
+       [3]byte{0, 4, 195}:     "CASTOR Informatique",
+       [3]byte{0, 4, 196}:     "Allen & Heath Limited",
+       [3]byte{0, 4, 197}:     "ASE Technologies, USA",
+       [3]byte{0, 4, 198}:     "YAMAHA MOTOR CO.,LTD",
+       [3]byte{0, 4, 199}:     "NetMount",
+       [3]byte{0, 4, 200}:     "LIBA Maschinenfabrik GmbH",
+       [3]byte{0, 4, 201}:     "Micro Electron Co., Ltd.",
+       [3]byte{0, 4, 202}:     "FreeMs Corp.",
+       [3]byte{0, 4, 203}:     "Tdsoft Communication, Ltd.",
+       [3]byte{0, 4, 204}:     "Peek Traffic B.V.",
+       [3]byte{0, 4, 205}:     "Extenway Solutions Inc",
+       [3]byte{0, 4, 206}:     "Patria Ailon",
+       [3]byte{0, 4, 207}:     "Seagate Technology",
+       [3]byte{0, 4, 208}:     "Softlink s.r.o.",
+       [3]byte{0, 4, 209}:     "Drew Technologies, Inc.",
+       [3]byte{0, 4, 210}:     "Adcon Telemetry GmbH",
+       [3]byte{0, 4, 211}:     "Toyokeiki Co., Ltd.",
+       [3]byte{0, 4, 212}:     "Proview Electronics Co., Ltd.",
+       [3]byte{0, 4, 213}:     "Hitachi Information & Communication Engineering, Ltd.",
+       [3]byte{0, 4, 214}:     "Takagi Industrial Co., Ltd.",
+       [3]byte{0, 4, 215}:     "Omitec Instrumentation Ltd.",
+       [3]byte{0, 4, 216}:     "IPWireless, Inc.",
+       [3]byte{0, 4, 217}:     "Titan Electronics, Inc.",
+       [3]byte{0, 4, 218}:     "Relax Technology, Inc.",
+       [3]byte{0, 4, 219}:     "Tellus Group Corp.",
+       [3]byte{0, 4, 220}:     "Nortel Networks",
+       [3]byte{0, 4, 221}:     "Cisco Systems, Inc",
+       [3]byte{0, 4, 222}:     "Cisco Systems, Inc",
+       [3]byte{0, 4, 223}:     "Teracom Telematica Ltda.",
+       [3]byte{0, 4, 224}:     "Procket Networks",
+       [3]byte{0, 4, 225}:     "Infinior Microsystems",
+       [3]byte{0, 4, 226}:     "SMC Networks, Inc.",
+       [3]byte{0, 4, 227}:     "Accton Technology Corp",
+       [3]byte{0, 4, 228}:     "Daeryung Ind., Inc.",
+       [3]byte{0, 4, 229}:     "Glonet Systems, Inc.",
+       [3]byte{0, 4, 230}:     "Banyan Network Private Limited",
+       [3]byte{0, 4, 231}:     "Lightpointe Communications, Inc",
+       [3]byte{0, 4, 232}:     "IER, Inc.",
+       [3]byte{0, 4, 233}:     "Infiniswitch Corporation",
+       [3]byte{0, 4, 234}:     "Hewlett Packard",
+       [3]byte{0, 4, 235}:     "Paxonet Communications, Inc.",
+       [3]byte{0, 4, 236}:     "Memobox SA",
+       [3]byte{0, 4, 237}:     "Billion Electric Co., Ltd.",
+       [3]byte{0, 4, 238}:     "Lincoln Electric Company",
+       [3]byte{0, 4, 239}:     "Polestar Corp.",
+       [3]byte{0, 4, 240}:     "International Computers, Ltd",
+       [3]byte{0, 4, 241}:     "WhereNet",
+       [3]byte{0, 4, 242}:     "Polycom",
+       [3]byte{0, 4, 243}:     "FS FORTH-SYSTEME GmbH",
+       [3]byte{0, 4, 244}:     "Infinite Electronics Inc.",
+       [3]byte{0, 4, 245}:     "SnowShore Networks, Inc.",
+       [3]byte{0, 4, 246}:     "Amphus",
+       [3]byte{0, 4, 247}:     "Omega Band, Inc.",
+       [3]byte{0, 4, 248}:     "QUALICABLE TV Industria E Com., Ltda",
+       [3]byte{0, 4, 249}:     "Xtera Communications, Inc.",
+       [3]byte{0, 4, 250}:     "NBS Technologies Inc.",
+       [3]byte{0, 4, 251}:     "Commtech, Inc.",
+       [3]byte{0, 4, 252}:     "Stratus Computer (DE), Inc.",
+       [3]byte{0, 4, 253}:     "Japan Control Engineering Co., Ltd.",
+       [3]byte{0, 4, 254}:     "Pelago Networks",
+       [3]byte{0, 4, 255}:     "Acronet Co., Ltd.",
+       [3]byte{0, 5, 0}:       "Cisco Systems, Inc",
+       [3]byte{0, 5, 1}:       "Cisco Systems, Inc",
+       [3]byte{0, 5, 2}:       "Apple, Inc.",
+       [3]byte{0, 5, 3}:       "ICONAG",
+       [3]byte{0, 5, 4}:       "Naray Information & Communication Enterprise",
+       [3]byte{0, 5, 5}:       "Systems Integration Solutions, Inc.",
+       [3]byte{0, 5, 6}:       "Reddo Networks AB",
+       [3]byte{0, 5, 7}:       "Fine Appliance Corp.",
+       [3]byte{0, 5, 8}:       "Inetcam, Inc.",
+       [3]byte{0, 5, 9}:       "AVOC Nishimura Ltd.",
+       [3]byte{0, 5, 10}:      "ICS Spa",
+       [3]byte{0, 5, 11}:      "SICOM Systems, Inc.",
+       [3]byte{0, 5, 12}:      "Network Photonics, Inc.",
+       [3]byte{0, 5, 13}:      "Midstream Technologies, Inc.",
+       [3]byte{0, 5, 14}:      "3ware, Inc.",
+       [3]byte{0, 5, 15}:      "Tanaka S/S Ltd.",
+       [3]byte{0, 5, 16}:      "Infinite Shanghai Communication Terminals Ltd.",
+       [3]byte{0, 5, 17}:      "Complementary Technologies Ltd",
+       [3]byte{0, 5, 18}:      "Zebra Technologies Inc",
+       [3]byte{0, 5, 19}:      "VTLinx Multimedia Systems, Inc.",
+       [3]byte{0, 5, 20}:      "KDT Systems Co., Ltd.",
+       [3]byte{0, 5, 21}:      "Nuark Co., Ltd.",
+       [3]byte{0, 5, 22}:      "SMART Modular Technologies",
+       [3]byte{0, 5, 23}:      "Shellcomm, Inc.",
+       [3]byte{0, 5, 24}:      "Jupiters Technology",
+       [3]byte{0, 5, 25}:      "Siemens Building Technologies AG,",
+       [3]byte{0, 5, 26}:      "3COM EUROPE LTD.",
+       [3]byte{0, 5, 27}:      "Magic Control Technology Corporation",
+       [3]byte{0, 5, 28}:      "Xnet Technology Corp.",
+       [3]byte{0, 5, 29}:      "Airocon, Inc.",
+       [3]byte{0, 5, 30}:      "Brocade Communications Systems, Inc.",
+       [3]byte{0, 5, 31}:      "Taijin Media Co., Ltd.",
+       [3]byte{0, 5, 32}:      "Smartronix, Inc.",
+       [3]byte{0, 5, 33}:      "Control Microsystems",
+       [3]byte{0, 5, 34}:      "LEA*D Corporation, Inc.",
+       [3]byte{0, 5, 35}:      "AVL List GmbH",
+       [3]byte{0, 5, 36}:      "BTL System (HK) Limited",
+       [3]byte{0, 5, 37}:      "Puretek Industrial Co., Ltd.",
+       [3]byte{0, 5, 38}:      "IPAS GmbH",
+       [3]byte{0, 5, 39}:      "SJ Tek Co. Ltd",
+       [3]byte{0, 5, 40}:      "New Focus, Inc.",
+       [3]byte{0, 5, 41}:      "Shanghai Broadan Communication Technology Co., Ltd",
+       [3]byte{0, 5, 42}:      "Ikegami Tsushinki Co., Ltd.",
+       [3]byte{0, 5, 43}:      "HORIBA, Ltd.",
+       [3]byte{0, 5, 44}:      "Supreme Magic Corporation",
+       [3]byte{0, 5, 45}:      "Zoltrix International Limited",
+       [3]byte{0, 5, 46}:      "Cinta Networks",
+       [3]byte{0, 5, 47}:      "Leviton Network Solutions",
+       [3]byte{0, 5, 48}:      "Andiamo Systems, Inc.",
+       [3]byte{0, 5, 49}:      "Cisco Systems, Inc",
+       [3]byte{0, 5, 50}:      "Cisco Systems, Inc",
+       [3]byte{0, 5, 51}:      "Brocade Communications Systems, Inc.",
+       [3]byte{0, 5, 52}:      "Northstar Engineering Ltd.",
+       [3]byte{0, 5, 53}:      "Chip PC Ltd.",
+       [3]byte{0, 5, 54}:      "Danam Communications, Inc.",
+       [3]byte{0, 5, 55}:      "Nets Technology Co., Ltd.",
+       [3]byte{0, 5, 56}:      "Merilus, Inc.",
+       [3]byte{0, 5, 57}:      "A Brand New World in Sweden AB",
+       [3]byte{0, 5, 58}:      "Willowglen Services Pte Ltd",
+       [3]byte{0, 5, 59}:      "Harbour Networks Ltd., Co. Beijing",
+       [3]byte{0, 5, 60}:      "XIRCOM",
+       [3]byte{0, 5, 61}:      "Agere Systems",
+       [3]byte{0, 5, 62}:      "KID Systeme GmbH",
+       [3]byte{0, 5, 63}:      "VisionTek, Inc.",
+       [3]byte{0, 5, 64}:      "FAST Corporation",
+       [3]byte{0, 5, 65}:      "Advanced Systems Co., Ltd.",
+       [3]byte{0, 5, 66}:      "Otari, Inc.",
+       [3]byte{0, 5, 67}:      "IQ Wireless GmbH",
+       [3]byte{0, 5, 68}:      "Valley Technologies, Inc.",
+       [3]byte{0, 5, 69}:      "Internet Photonics",
+       [3]byte{0, 5, 70}:      "KDDI Network & Solultions Inc.",
+       [3]byte{0, 5, 71}:      "Starent Networks",
+       [3]byte{0, 5, 72}:      "Disco Corporation",
+       [3]byte{0, 5, 73}:      "Salira Optical Network Systems",
+       [3]byte{0, 5, 74}:      "Ario Data Networks, Inc.",
+       [3]byte{0, 5, 75}:      "Eaton Automation AG",
+       [3]byte{0, 5, 76}:      "RF Innovations Pty Ltd",
+       [3]byte{0, 5, 77}:      "Brans Technologies, Inc.",
+       [3]byte{0, 5, 78}:      "Philips",
+       [3]byte{0, 5, 79}:      "Garmin International",
+       [3]byte{0, 5, 80}:      "Vcomms Connect Limited",
+       [3]byte{0, 5, 81}:      "F & S Elektronik Systeme GmbH",
+       [3]byte{0, 5, 82}:      "Xycotec Computer GmbH",
+       [3]byte{0, 5, 83}:      "DVC Company, Inc.",
+       [3]byte{0, 5, 84}:      "Rangestar Wireless",
+       [3]byte{0, 5, 85}:      "Japan Cash Machine Co., Ltd.",
+       [3]byte{0, 5, 86}:      "360 Systems",
+       [3]byte{0, 5, 87}:      "Agile TV Corporation",
+       [3]byte{0, 5, 88}:      "Synchronous, Inc.",
+       [3]byte{0, 5, 89}:      "Intracom S.A.",
+       [3]byte{0, 5, 90}:      "Power Dsine Ltd.",
+       [3]byte{0, 5, 91}:      "Charles Industries, Ltd.",
+       [3]byte{0, 5, 92}:      "Kowa Company, Ltd.",
+       [3]byte{0, 5, 93}:      "D-LINK SYSTEMS, INC.",
+       [3]byte{0, 5, 94}:      "Cisco Systems, Inc",
+       [3]byte{0, 5, 95}:      "Cisco Systems, Inc",
+       [3]byte{0, 5, 96}:      "LEADER COMM.CO., LTD",
+       [3]byte{0, 5, 97}:      "nac Image Technology, Inc.",
+       [3]byte{0, 5, 98}:      "Digital View Limited",
+       [3]byte{0, 5, 99}:      "J-Works, Inc.",
+       [3]byte{0, 5, 100}:     "Tsinghua Bitway Co., Ltd.",
+       [3]byte{0, 5, 101}:     "Tailyn Communication Company Ltd.",
+       [3]byte{0, 5, 102}:     "Secui.com Corporation",
+       [3]byte{0, 5, 103}:     "Etymonic Design, Inc.",
+       [3]byte{0, 5, 104}:     "Piltofish Networks AB",
+       [3]byte{0, 5, 105}:     "VMware, Inc.",
+       [3]byte{0, 5, 106}:     "Heuft Systemtechnik GmbH",
+       [3]byte{0, 5, 107}:     "C.P. Technology Co., Ltd.",
+       [3]byte{0, 5, 108}:     "Hung Chang Co., Ltd.",
+       [3]byte{0, 5, 109}:     "Pacific Corporation",
+       [3]byte{0, 5, 110}:     "National Enhance Technology, Inc.",
+       [3]byte{0, 5, 111}:     "Innomedia Technologies Pvt. Ltd.",
+       [3]byte{0, 5, 112}:     "Baydel Ltd.",
+       [3]byte{0, 5, 113}:     "Seiwa Electronics Co.",
+       [3]byte{0, 5, 114}:     "Deonet Co., Ltd.",
+       [3]byte{0, 5, 115}:     "Cisco Systems, Inc",
+       [3]byte{0, 5, 116}:     "Cisco Systems, Inc",
+       [3]byte{0, 5, 117}:     "CDS-Electronics BV",
+       [3]byte{0, 5, 118}:     "NSM Technology Ltd.",
+       [3]byte{0, 5, 119}:     "SM Information & Communication",
+       [3]byte{0, 5, 120}:     "Private",
+       [3]byte{0, 5, 121}:     "Universal Control Solution Corp.",
+       [3]byte{0, 5, 122}:     "Overture Networks",
+       [3]byte{0, 5, 123}:     "Chung Nam Electronic Co., Ltd.",
+       [3]byte{0, 5, 124}:     "RCO Security AB",
+       [3]byte{0, 5, 125}:     "Sun Communications, Inc.",
+       [3]byte{0, 5, 126}:     "Eckelmann Steuerungstechnik GmbH",
+       [3]byte{0, 5, 127}:     "Acqis Technology",
+       [3]byte{0, 5, 128}:     "FibroLAN Ltd.",
+       [3]byte{0, 5, 129}:     "Snell",
+       [3]byte{0, 5, 130}:     "ClearCube Technology",
+       [3]byte{0, 5, 131}:     "ImageCom Limited",
+       [3]byte{0, 5, 132}:     "AbsoluteValue Systems, Inc.",
+       [3]byte{0, 5, 133}:     "Juniper Networks",
+       [3]byte{0, 5, 134}:     "Lucent Technologies",
+       [3]byte{0, 5, 135}:     "Locus, Incorporated",
+       [3]byte{0, 5, 136}:     "Sensoria Corp.",
+       [3]byte{0, 5, 137}:     "National Datacomputer",
+       [3]byte{0, 5, 138}:     "Netcom Co., Ltd.",
+       [3]byte{0, 5, 139}:     "IPmental, Inc.",
+       [3]byte{0, 5, 140}:     "Opentech Inc.",
+       [3]byte{0, 5, 141}:     "Lynx Photonic Networks, Inc.",
+       [3]byte{0, 5, 142}:     "Flextronics International GmbH & Co. Nfg. KG",
+       [3]byte{0, 5, 143}:     "CLCsoft co.",
+       [3]byte{0, 5, 144}:     "Swissvoice Ltd.",
+       [3]byte{0, 5, 145}:     "Active Silicon Ltd",
+       [3]byte{0, 5, 146}:     "Pultek Corp.",
+       [3]byte{0, 5, 147}:     "Grammar Engine Inc.",
+       [3]byte{0, 5, 148}:     "HMS Industrial Networks",
+       [3]byte{0, 5, 149}:     "Alesis Corporation",
+       [3]byte{0, 5, 150}:     "Genotech Co., Ltd.",
+       [3]byte{0, 5, 151}:     "Eagle Traffic Control Systems",
+       [3]byte{0, 5, 152}:     "CRONOS S.r.l.",
+       [3]byte{0, 5, 153}:     "DRS Test and Energy Management or DRS-TEM",
+       [3]byte{0, 5, 154}:     "Cisco Systems, Inc",
+       [3]byte{0, 5, 155}:     "Cisco Systems, Inc",
+       [3]byte{0, 5, 156}:     "Kleinknecht GmbH, Ing. Büro",
+       [3]byte{0, 5, 157}:     "Daniel Computing Systems, Inc.",
+       [3]byte{0, 5, 158}:     "Zinwell Corporation",
+       [3]byte{0, 5, 159}:     "Yotta Networks, Inc.",
+       [3]byte{0, 5, 160}:     "MOBILINE Kft.",
+       [3]byte{0, 5, 161}:     "Zenocom",
+       [3]byte{0, 5, 162}:     "CELOX Networks",
+       [3]byte{0, 5, 163}:     "QEI, Inc.",
+       [3]byte{0, 5, 164}:     "Lucid Voice Ltd.",
+       [3]byte{0, 5, 165}:     "KOTT",
+       [3]byte{0, 5, 166}:     "Extron Electronics",
+       [3]byte{0, 5, 167}:     "HYPERCHIP Inc.",
+       [3]byte{0, 5, 168}:     "WYLE ELECTRONICS",
+       [3]byte{0, 5, 169}:     "Princeton Networks, Inc.",
+       [3]byte{0, 5, 170}:     "Moore Industries International Inc.",
+       [3]byte{0, 5, 171}:     "Cyber Fone, Inc.",
+       [3]byte{0, 5, 172}:     "Northern Digital, Inc.",
+       [3]byte{0, 5, 173}:     "Topspin Communications, Inc.",
+       [3]byte{0, 5, 174}:     "Mediaport USA",
+       [3]byte{0, 5, 175}:     "InnoScan Computing A/S",
+       [3]byte{0, 5, 176}:     "Korea Computer Technology Co., Ltd.",
+       [3]byte{0, 5, 177}:     "ASB Technology BV",
+       [3]byte{0, 5, 178}:     "Medison Co., Ltd.",
+       [3]byte{0, 5, 179}:     "Asahi-Engineering Co., Ltd.",
+       [3]byte{0, 5, 180}:     "Aceex Corporation",
+       [3]byte{0, 5, 181}:     "Broadcom Technologies",
+       [3]byte{0, 5, 182}:     "INSYS Microelectronics GmbH",
+       [3]byte{0, 5, 183}:     "Arbor Technology Corp.",
+       [3]byte{0, 5, 184}:     "Electronic Design Associates, Inc.",
+       [3]byte{0, 5, 185}:     "Airvana, Inc.",
+       [3]byte{0, 5, 186}:     "Area Netwoeks, Inc.",
+       [3]byte{0, 5, 187}:     "Myspace AB",
+       [3]byte{0, 5, 188}:     "Resource Data Management Ltd",
+       [3]byte{0, 5, 189}:     "ROAX BV",
+       [3]byte{0, 5, 190}:     "Kongsberg Seatex AS",
+       [3]byte{0, 5, 191}:     "JustEzy Technology, Inc.",
+       [3]byte{0, 5, 192}:     "Digital Network Alacarte Co., Ltd.",
+       [3]byte{0, 5, 193}:     "A-Kyung Motion, Inc.",
+       [3]byte{0, 5, 194}:     "Soronti, Inc.",
+       [3]byte{0, 5, 195}:     "Pacific Instruments, Inc.",
+       [3]byte{0, 5, 196}:     "Telect, Inc.",
+       [3]byte{0, 5, 197}:     "Flaga HF",
+       [3]byte{0, 5, 198}:     "Triz Communications",
+       [3]byte{0, 5, 199}:     "I/F-COM A/S",
+       [3]byte{0, 5, 200}:     "VERYTECH",
+       [3]byte{0, 5, 201}:     "LG Innotek Co., Ltd.",
+       [3]byte{0, 5, 202}:     "Hitron Technology, Inc.",
+       [3]byte{0, 5, 203}:     "ROIS Technologies, Inc.",
+       [3]byte{0, 5, 204}:     "Sumtel Communications, Inc.",
+       [3]byte{0, 5, 205}:     "D&M Holdings Inc.",
+       [3]byte{0, 5, 206}:     "Prolink Microsystems Corporation",
+       [3]byte{0, 5, 207}:     "Thunder River Technologies, Inc.",
+       [3]byte{0, 5, 208}:     "Solinet Systems",
+       [3]byte{0, 5, 209}:     "Metavector Technologies",
+       [3]byte{0, 5, 210}:     "DAP Technologies",
+       [3]byte{0, 5, 211}:     "eProduction Solutions, Inc.",
+       [3]byte{0, 5, 212}:     "FutureSmart Networks, Inc.",
+       [3]byte{0, 5, 213}:     "Speedcom Wireless",
+       [3]byte{0, 5, 214}:     "L-3 Linkabit",
+       [3]byte{0, 5, 215}:     "Vista Imaging, Inc.",
+       [3]byte{0, 5, 216}:     "Arescom, Inc.",
+       [3]byte{0, 5, 217}:     "Techno Valley, Inc.",
+       [3]byte{0, 5, 218}:     "Apex Automationstechnik",
+       [3]byte{0, 5, 219}:     "PSI Nentec GmbH",
+       [3]byte{0, 5, 220}:     "Cisco Systems, Inc",
+       [3]byte{0, 5, 221}:     "Cisco Systems, Inc",
+       [3]byte{0, 5, 222}:     "Gi Fone Korea, Inc.",
+       [3]byte{0, 5, 223}:     "Electronic Innovation, Inc.",
+       [3]byte{0, 5, 224}:     "Empirix Corp.",
+       [3]byte{0, 5, 225}:     "Trellis Photonics, Ltd.",
+       [3]byte{0, 5, 226}:     "Creativ Network Technologies",
+       [3]byte{0, 5, 227}:     "LightSand Communications, Inc.",
+       [3]byte{0, 5, 228}:     "Red Lion Controls Inc.",
+       [3]byte{0, 5, 229}:     "Renishaw PLC",
+       [3]byte{0, 5, 230}:     "Egenera, Inc.",
+       [3]byte{0, 5, 231}:     "Netrake an AudioCodes Company",
+       [3]byte{0, 5, 232}:     "TurboWave, Inc.",
+       [3]byte{0, 5, 233}:     "Unicess Network, Inc.",
+       [3]byte{0, 5, 234}:     "Rednix",
+       [3]byte{0, 5, 235}:     "Blue Ridge Networks, Inc.",
+       [3]byte{0, 5, 236}:     "Mosaic Systems Inc.",
+       [3]byte{0, 5, 237}:     "Technikum Joanneum GmbH",
+       [3]byte{0, 5, 238}:     "Vanderbilt International (SWE) AB",
+       [3]byte{0, 5, 239}:     "ADOIR Digital Technology",
+       [3]byte{0, 5, 240}:     "SATEC",
+       [3]byte{0, 5, 241}:     "Vrcom, Inc.",
+       [3]byte{0, 5, 242}:     "Power R, Inc.",
+       [3]byte{0, 5, 243}:     "Webyn",
+       [3]byte{0, 5, 244}:     "System Base Co., Ltd.",
+       [3]byte{0, 5, 245}:     "Geospace Technologies",
+       [3]byte{0, 5, 246}:     "Young Chang Co. Ltd.",
+       [3]byte{0, 5, 247}:     "Analog Devices, Inc.",
+       [3]byte{0, 5, 248}:     "Real Time Access, Inc.",
+       [3]byte{0, 5, 249}:     "TOA Corporation",
+       [3]byte{0, 5, 250}:     "IPOptical, Inc.",
+       [3]byte{0, 5, 251}:     "ShareGate, Inc.",
+       [3]byte{0, 5, 252}:     "Schenck Pegasus Corp.",
+       [3]byte{0, 5, 253}:     "PacketLight Networks Ltd.",
+       [3]byte{0, 5, 254}:     "Traficon N.V.",
+       [3]byte{0, 5, 255}:     "SNS Solutions, Inc.",
+       [3]byte{0, 6, 0}:       "Toshiba Teli Corporation",
+       [3]byte{0, 6, 1}:       "Otanikeiki Co., Ltd.",
+       [3]byte{0, 6, 2}:       "Cirkitech Electronics Co.",
+       [3]byte{0, 6, 3}:       "Baker Hughes Inc.",
+       [3]byte{0, 6, 4}:       "@Track Communications, Inc.",
+       [3]byte{0, 6, 5}:       "Inncom International, Inc.",
+       [3]byte{0, 6, 6}:       "RapidWAN, Inc.",
+       [3]byte{0, 6, 7}:       "Omni Directional Control Technology Inc.",
+       [3]byte{0, 6, 8}:       "At-Sky SAS",
+       [3]byte{0, 6, 9}:       "Crossport Systems",
+       [3]byte{0, 6, 10}:      "Blue2space",
+       [3]byte{0, 6, 11}:      "Artesyn Embedded Technologies",
+       [3]byte{0, 6, 12}:      "Melco Industries, Inc.",
+       [3]byte{0, 6, 13}:      "Wave7 Optics",
+       [3]byte{0, 6, 14}:      "IGYS Systems, Inc.",
+       [3]byte{0, 6, 15}:      "Narad Networks Inc",
+       [3]byte{0, 6, 16}:      "Abeona Networks Inc",
+       [3]byte{0, 6, 17}:      "Zeus Wireless, Inc.",
+       [3]byte{0, 6, 18}:      "Accusys, Inc.",
+       [3]byte{0, 6, 19}:      "Kawasaki Microelectronics Incorporated",
+       [3]byte{0, 6, 20}:      "Prism Holdings",
+       [3]byte{0, 6, 21}:      "Kimoto Electric Co., Ltd.",
+       [3]byte{0, 6, 22}:      "Tel Net Co., Ltd.",
+       [3]byte{0, 6, 23}:      "Redswitch Inc.",
+       [3]byte{0, 6, 24}:      "DigiPower Manufacturing Inc.",
+       [3]byte{0, 6, 25}:      "Connection Technology Systems",
+       [3]byte{0, 6, 26}:      "Zetari Inc.",
+       [3]byte{0, 6, 27}:      "Notebook Development Lab.  Lenovo Japan Ltd.",
+       [3]byte{0, 6, 28}:      "Hoshino Metal Industries, Ltd.",
+       [3]byte{0, 6, 29}:      "MIP Telecom, Inc.",
+       [3]byte{0, 6, 30}:      "Maxan Systems",
+       [3]byte{0, 6, 31}:      "Vision Components GmbH",
+       [3]byte{0, 6, 32}:      "Serial System Ltd.",
+       [3]byte{0, 6, 33}:      "Hinox, Co., Ltd.",
+       [3]byte{0, 6, 34}:      "Chung Fu Chen Yeh Enterprise Corp.",
+       [3]byte{0, 6, 35}:      "MGE UPS Systems France",
+       [3]byte{0, 6, 36}:      "Gentner Communications Corp.",
+       [3]byte{0, 6, 37}:      "The Linksys Group, Inc.",
+       [3]byte{0, 6, 38}:      "MWE GmbH",
+       [3]byte{0, 6, 39}:      "Uniwide Technologies, Inc.",
+       [3]byte{0, 6, 40}:      "Cisco Systems, Inc",
+       [3]byte{0, 6, 41}:      "IBM Corp",
+       [3]byte{0, 6, 42}:      "Cisco Systems, Inc",
+       [3]byte{0, 6, 43}:      "INTRASERVER TECHNOLOGY",
+       [3]byte{0, 6, 44}:      "Bivio Networks",
+       [3]byte{0, 6, 45}:      "TouchStar Technologies, L.L.C.",
+       [3]byte{0, 6, 46}:      "Aristos Logic Corp.",
+       [3]byte{0, 6, 47}:      "Pivotech Systems Inc.",
+       [3]byte{0, 6, 48}:      "Adtranz Sweden",
+       [3]byte{0, 6, 49}:      "Calix Inc.",
+       [3]byte{0, 6, 50}:      "Mesco Engineering GmbH",
+       [3]byte{0, 6, 51}:      "Cross Match Technologies GmbH",
+       [3]byte{0, 6, 52}:      "GTE Airfone Inc.",
+       [3]byte{0, 6, 53}:      "PacketAir Networks, Inc.",
+       [3]byte{0, 6, 54}:      "Jedai Broadband Networks",
+       [3]byte{0, 6, 55}:      "Toptrend-Meta Information (ShenZhen) Inc.",
+       [3]byte{0, 6, 56}:      "Sungjin C&C Co., Ltd.",
+       [3]byte{0, 6, 57}:      "Newtec",
+       [3]byte{0, 6, 58}:      "Dura Micro, Inc.",
+       [3]byte{0, 6, 59}:      "Arcturus Networks Inc.",
+       [3]byte{0, 6, 60}:      "Intrinsyc Software International Inc.",
+       [3]byte{0, 6, 61}:      "Microwave Data Systems Inc.",
+       [3]byte{0, 6, 62}:      "Opthos Inc.",
+       [3]byte{0, 6, 63}:      "Everex Communications Inc.",
+       [3]byte{0, 6, 64}:      "White Rock Networks",
+       [3]byte{0, 6, 65}:      "ITCN",
+       [3]byte{0, 6, 66}:      "Genetel Systems Inc.",
+       [3]byte{0, 6, 67}:      "SONO Computer Co., Ltd.",
+       [3]byte{0, 6, 68}:      "neix,Inc",
+       [3]byte{0, 6, 69}:      "Meisei Electric Co. Ltd.",
+       [3]byte{0, 6, 70}:      "ShenZhen XunBao Network Technology Co Ltd",
+       [3]byte{0, 6, 71}:      "Etrali S.A.",
+       [3]byte{0, 6, 72}:      "Seedsware, Inc.",
+       [3]byte{0, 6, 73}:      "3M Deutschland GmbH",
+       [3]byte{0, 6, 74}:      "Honeywell Co., Ltd. (KOREA)",
+       [3]byte{0, 6, 75}:      "Alexon Co., Ltd.",
+       [3]byte{0, 6, 76}:      "Invicta Networks, Inc.",
+       [3]byte{0, 6, 77}:      "Sencore",
+       [3]byte{0, 6, 78}:      "Broad Net Technology Inc.",
+       [3]byte{0, 6, 79}:      "PRO-NETS Technology Corporation",
+       [3]byte{0, 6, 80}:      "Tiburon Networks, Inc.",
+       [3]byte{0, 6, 81}:      "Aspen Networks Inc.",
+       [3]byte{0, 6, 82}:      "Cisco Systems, Inc",
+       [3]byte{0, 6, 83}:      "Cisco Systems, Inc",
+       [3]byte{0, 6, 84}:      "Winpresa Building Automation Technologies GmbH",
+       [3]byte{0, 6, 85}:      "Yipee, Inc.",
+       [3]byte{0, 6, 86}:      "Tactel AB",
+       [3]byte{0, 6, 87}:      "Market Central, Inc.",
+       [3]byte{0, 6, 88}:      "Helmut Fischer GmbH Institut für Elektronik und Messtechnik",
+       [3]byte{0, 6, 89}:      "EAL (Apeldoorn) B.V.",
+       [3]byte{0, 6, 90}:      "Strix Systems",
+       [3]byte{0, 6, 91}:      "Dell Inc.",
+       [3]byte{0, 6, 92}:      "Malachite Technologies, Inc.",
+       [3]byte{0, 6, 93}:      "Heidelberg Web Systems",
+       [3]byte{0, 6, 94}:      "Photuris, Inc.",
+       [3]byte{0, 6, 95}:      "ECI Telecom Ltd.",
+       [3]byte{0, 6, 96}:      "NADEX Co., Ltd.",
+       [3]byte{0, 6, 97}:      "NIA Home Technologies Corp.",
+       [3]byte{0, 6, 98}:      "MBM Technology Ltd.",
+       [3]byte{0, 6, 99}:      "Human Technology Co., Ltd.",
+       [3]byte{0, 6, 100}:     "Fostex Corporation",
+       [3]byte{0, 6, 101}:     "Sunny Giken, Inc.",
+       [3]byte{0, 6, 102}:     "Roving Networks",
+       [3]byte{0, 6, 103}:     "Tripp Lite",
+       [3]byte{0, 6, 104}:     "Vicon Industries Inc.",
+       [3]byte{0, 6, 105}:     "Datasound Laboratories Ltd",
+       [3]byte{0, 6, 106}:     "InfiniCon Systems, Inc.",
+       [3]byte{0, 6, 107}:     "Sysmex Corporation",
+       [3]byte{0, 6, 108}:     "Robinson Corporation",
+       [3]byte{0, 6, 109}:     "Compuprint S.P.A.",
+       [3]byte{0, 6, 110}:     "Delta Electronics, Inc.",
+       [3]byte{0, 6, 111}:     "Korea Data Systems",
+       [3]byte{0, 6, 112}:     "Upponetti Oy",
+       [3]byte{0, 6, 113}:     "Softing AG",
+       [3]byte{0, 6, 114}:     "Netezza",
+       [3]byte{0, 6, 115}:     "TKH Security Solutions USA",
+       [3]byte{0, 6, 116}:     "Spectrum Control, Inc.",
+       [3]byte{0, 6, 117}:     "Banderacom, Inc.",
+       [3]byte{0, 6, 118}:     "Novra Technologies Inc.",
+       [3]byte{0, 6, 119}:     "SICK AG",
+       [3]byte{0, 6, 120}:     "D&M Holdings Inc.",
+       [3]byte{0, 6, 121}:     "Konami Corporation",
+       [3]byte{0, 6, 122}:     "JMP Systems",
+       [3]byte{0, 6, 123}:     "Toplink C&C Corporation",
+       [3]byte{0, 6, 124}:     "Cisco Systems, Inc",
+       [3]byte{0, 6, 125}:     "Takasago Ltd.",
+       [3]byte{0, 6, 126}:     "WinCom Systems, Inc.",
+       [3]byte{0, 6, 127}:     "Digeo, Inc.",
+       [3]byte{0, 6, 128}:     "Card Access, Inc.",
+       [3]byte{0, 6, 129}:     "Goepel Electronic GmbH",
+       [3]byte{0, 6, 130}:     "Convedia",
+       [3]byte{0, 6, 131}:     "Bravara Communications, Inc.",
+       [3]byte{0, 6, 132}:     "Biacore AB",
+       [3]byte{0, 6, 133}:     "NetNearU Corporation",
+       [3]byte{0, 6, 134}:     "ZARDCOM Co., Ltd.",
+       [3]byte{0, 6, 135}:     "Omnitron Systems Technology, Inc.",
+       [3]byte{0, 6, 136}:     "Telways Communication Co., Ltd.",
+       [3]byte{0, 6, 137}:     "yLez Technologies Pte Ltd",
+       [3]byte{0, 6, 138}:     "NeuronNet Co. Ltd. R&D Center",
+       [3]byte{0, 6, 139}:     "AirRunner Technologies, Inc.",
+       [3]byte{0, 6, 140}:     "3COM CORPORATION",
+       [3]byte{0, 6, 141}:     "SEPATON, Inc.",
+       [3]byte{0, 6, 142}:     "HID Corporation",
+       [3]byte{0, 6, 143}:     "Telemonitor, Inc.",
+       [3]byte{0, 6, 144}:     "Euracom Communication GmbH",
+       [3]byte{0, 6, 145}:     "PT Inovacao",
+       [3]byte{0, 6, 146}:     "Intruvert Networks, Inc.",
+       [3]byte{0, 6, 147}:     "Flexus Computer Technology, Inc.",
+       [3]byte{0, 6, 148}:     "Mobillian Corporation",
+       [3]byte{0, 6, 149}:     "Ensure Technologies, Inc.",
+       [3]byte{0, 6, 150}:     "Advent Networks",
+       [3]byte{0, 6, 151}:     "R & D Center",
+       [3]byte{0, 6, 152}:     "egnite GmbH",
+       [3]byte{0, 6, 153}:     "Vida Design Co.",
+       [3]byte{0, 6, 154}:     "e & Tel",
+       [3]byte{0, 6, 155}:     "AVT Audio Video Technologies GmbH",
+       [3]byte{0, 6, 156}:     "Transmode Systems AB",
+       [3]byte{0, 6, 157}:     "Petards Ltd",
+       [3]byte{0, 6, 158}:     "UNIQA, Inc.",
+       [3]byte{0, 6, 159}:     "Kuokoa Networks",
+       [3]byte{0, 6, 160}:     "Mx Imaging",
+       [3]byte{0, 6, 161}:     "Celsian Technologies, Inc.",
+       [3]byte{0, 6, 162}:     "Microtune, Inc.",
+       [3]byte{0, 6, 163}:     "Bitran Corporation",
+       [3]byte{0, 6, 164}:     "INNOWELL Corp.",
+       [3]byte{0, 6, 165}:     "PINON Corp.",
+       [3]byte{0, 6, 166}:     "Artistic Licence Engineering Ltd",
+       [3]byte{0, 6, 167}:     "Primarion",
+       [3]byte{0, 6, 168}:     "KC Technology, Inc.",
+       [3]byte{0, 6, 169}:     "Universal Instruments Corp.",
+       [3]byte{0, 6, 170}:     "VT Miltope",
+       [3]byte{0, 6, 171}:     "W-Link Systems, Inc.",
+       [3]byte{0, 6, 172}:     "Intersoft Co.",
+       [3]byte{0, 6, 173}:     "KB Electronics Ltd.",
+       [3]byte{0, 6, 174}:     "Himachal Futuristic Communications Ltd",
+       [3]byte{0, 6, 175}:     "Xalted Networks",
+       [3]byte{0, 6, 176}:     "Comtech EF Data Corp.",
+       [3]byte{0, 6, 177}:     "Sonicwall",
+       [3]byte{0, 6, 178}:     "Linxtek Co.",
+       [3]byte{0, 6, 179}:     "Diagraph Corporation",
+       [3]byte{0, 6, 180}:     "Vorne Industries, Inc.",
+       [3]byte{0, 6, 181}:     "Source Photonics, Inc.",
+       [3]byte{0, 6, 182}:     "Nir-Or Israel Ltd.",
+       [3]byte{0, 6, 183}:     "TELEM GmbH",
+       [3]byte{0, 6, 184}:     "Bandspeed Pty Ltd",
+       [3]byte{0, 6, 185}:     "A5TEK Corp.",
+       [3]byte{0, 6, 186}:     "Westwave Communications",
+       [3]byte{0, 6, 187}:     "ATI Technologies Inc.",
+       [3]byte{0, 6, 188}:     "Macrolink, Inc.",
+       [3]byte{0, 6, 189}:     "BNTECHNOLOGY Co., Ltd.",
+       [3]byte{0, 6, 190}:     "Baumer Optronic GmbH",
+       [3]byte{0, 6, 191}:     "Accella Technologies Co., Ltd.",
+       [3]byte{0, 6, 192}:     "United Internetworks, Inc.",
+       [3]byte{0, 6, 193}:     "Cisco Systems, Inc",
+       [3]byte{0, 6, 194}:     "Smartmatic Corporation",
+       [3]byte{0, 6, 195}:     "Schindler Elevator Ltd.",
+       [3]byte{0, 6, 196}:     "Piolink Inc.",
+       [3]byte{0, 6, 197}:     "INNOVI Technologies Limited",
+       [3]byte{0, 6, 198}:     "lesswire AG",
+       [3]byte{0, 6, 199}:     "RFNET Technologies Pte Ltd (S)",
+       [3]byte{0, 6, 200}:     "Sumitomo Metal Micro Devices, Inc.",
+       [3]byte{0, 6, 201}:     "Technical Marketing Research, Inc.",
+       [3]byte{0, 6, 202}:     "American Computer & Digital Components, Inc. (ACDC)",
+       [3]byte{0, 6, 203}:     "Jotron Electronics A/S",
+       [3]byte{0, 6, 204}:     "JMI Electronics Co., Ltd.",
+       [3]byte{0, 6, 205}:     "Leaf Imaging Ltd.",
+       [3]byte{0, 6, 206}:     "DATENO",
+       [3]byte{0, 6, 207}:     "Thales Avionics In-Flight Systems, LLC",
+       [3]byte{0, 6, 208}:     "Elgar Electronics Corp.",
+       [3]byte{0, 6, 209}:     "Tahoe Networks, Inc.",
+       [3]byte{0, 6, 210}:     "Tundra Semiconductor Corp.",
+       [3]byte{0, 6, 211}:     "Alpha Telecom, Inc. U.S.A.",
+       [3]byte{0, 6, 212}:     "Interactive Objects, Inc.",
+       [3]byte{0, 6, 213}:     "Diamond Systems Corp.",
+       [3]byte{0, 6, 214}:     "Cisco Systems, Inc",
+       [3]byte{0, 6, 215}:     "Cisco Systems, Inc",
+       [3]byte{0, 6, 216}:     "Maple Optical Systems",
+       [3]byte{0, 6, 217}:     "IPM-Net S.p.A.",
+       [3]byte{0, 6, 218}:     "ITRAN Communications Ltd.",
+       [3]byte{0, 6, 219}:     "ICHIPS Co., Ltd.",
+       [3]byte{0, 6, 220}:     "Syabas Technology (Amquest)",
+       [3]byte{0, 6, 221}:     "AT & T Laboratories - Cambridge Ltd",
+       [3]byte{0, 6, 222}:     "Flash Technology",
+       [3]byte{0, 6, 223}:     "AIDONIC Corporation",
+       [3]byte{0, 6, 224}:     "MAT Co., Ltd.",
+       [3]byte{0, 6, 225}:     "Techno Trade s.a",
+       [3]byte{0, 6, 226}:     "Ceemax Technology Co., Ltd.",
+       [3]byte{0, 6, 227}:     "Quantitative Imaging Corporation",
+       [3]byte{0, 6, 228}:     "Citel Technologies Ltd.",
+       [3]byte{0, 6, 229}:     "Fujian Newland Computer Ltd. Co.",
+       [3]byte{0, 6, 230}:     "DongYang Telecom Co., Ltd.",
+       [3]byte{0, 6, 231}:     "Bit Blitz Communications Inc.",
+       [3]byte{0, 6, 232}:     "Optical Network Testing, Inc.",
+       [3]byte{0, 6, 233}:     "Intime Corp.",
+       [3]byte{0, 6, 234}:     "ELZET80 Mikrocomputer GmbH&Co. KG",
+       [3]byte{0, 6, 235}:     "Global Data",
+       [3]byte{0, 6, 236}:     "Harris Corporation",
+       [3]byte{0, 6, 237}:     "Inara Networks",
+       [3]byte{0, 6, 238}:     "Shenyang Neu-era Information & Technology Stock Co., Ltd",
+       [3]byte{0, 6, 239}:     "Maxxan Systems, Inc.",
+       [3]byte{0, 6, 240}:     "Digeo, Inc.",
+       [3]byte{0, 6, 241}:     "Optillion",
+       [3]byte{0, 6, 242}:     "Platys Communications",
+       [3]byte{0, 6, 243}:     "AcceLight Networks",
+       [3]byte{0, 6, 244}:     "Prime Electronics & Satellitics Inc.",
+       [3]byte{0, 6, 245}:     "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 6, 246}:     "Cisco Systems, Inc",
+       [3]byte{0, 6, 247}:     "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 6, 248}:     "The Boeing Company",
+       [3]byte{0, 6, 249}:     "Mitsui Zosen Systems Research Inc.",
+       [3]byte{0, 6, 250}:     "IP SQUARE Co, Ltd.",
+       [3]byte{0, 6, 251}:     "Hitachi Printing Solutions, Ltd.",
+       [3]byte{0, 6, 252}:     "Fnet Co., Ltd.",
+       [3]byte{0, 6, 253}:     "Comjet Information Systems Corp.",
+       [3]byte{0, 6, 254}:     "Ambrado, Inc",
+       [3]byte{0, 6, 255}:     "Sheba Systems Co., Ltd.",
+       [3]byte{0, 7, 0}:       "Zettamedia Korea",
+       [3]byte{0, 7, 1}:       "RACAL-DATACOM",
+       [3]byte{0, 7, 2}:       "Varian Medical Systems",
+       [3]byte{0, 7, 3}:       "CSEE Transport",
+       [3]byte{0, 7, 4}:       "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 7, 5}:       "Endress & Hauser GmbH & Co",
+       [3]byte{0, 7, 6}:       "Sanritz Corporation",
+       [3]byte{0, 7, 7}:       "Interalia Inc.",
+       [3]byte{0, 7, 8}:       "Bitrage Inc.",
+       [3]byte{0, 7, 9}:       "Westerstrand Urfabrik AB",
+       [3]byte{0, 7, 10}:      "Unicom Automation Co., Ltd.",
+       [3]byte{0, 7, 11}:      "Novabase SGPS, SA",
+       [3]byte{0, 7, 12}:      "SVA-Intrusion.com Co. Ltd.",
+       [3]byte{0, 7, 13}:      "Cisco Systems, Inc",
+       [3]byte{0, 7, 14}:      "Cisco Systems, Inc",
+       [3]byte{0, 7, 15}:      "Fujant, Inc.",
+       [3]byte{0, 7, 16}:      "Adax, Inc.",
+       [3]byte{0, 7, 17}:      "Acterna",
+       [3]byte{0, 7, 18}:      "JAL Information Technology",
+       [3]byte{0, 7, 19}:      "IP One, Inc.",
+       [3]byte{0, 7, 20}:      "Brightcom",
+       [3]byte{0, 7, 21}:      "General Research of Electronics, Inc.",
+       [3]byte{0, 7, 22}:      "J & S Marine Ltd.",
+       [3]byte{0, 7, 23}:      "Wieland Electric GmbH",
+       [3]byte{0, 7, 24}:      "iCanTek Co., Ltd.",
+       [3]byte{0, 7, 25}:      "Mobiis Co., Ltd.",
+       [3]byte{0, 7, 26}:      "Finedigital Inc.",
+       [3]byte{0, 7, 27}:      "CDVI Americas Ltd",
+       [3]byte{0, 7, 28}:      "AT&T",
+       [3]byte{0, 7, 29}:      "Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A.",
+       [3]byte{0, 7, 30}:      "Tri-M Engineering / Nupak Dev. Corp.",
+       [3]byte{0, 7, 31}:      "European Systems Integration",
+       [3]byte{0, 7, 32}:      "Trutzschler GmbH & Co. KG",
+       [3]byte{0, 7, 33}:      "Formac Elektronik GmbH",
+       [3]byte{0, 7, 34}:      "The Nielsen Company",
+       [3]byte{0, 7, 35}:      "ELCON Systemtechnik GmbH",
+       [3]byte{0, 7, 36}:      "Telemax Co., Ltd.",
+       [3]byte{0, 7, 37}:      "Bematech International Corp.",
+       [3]byte{0, 7, 38}:      "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{0, 7, 39}:      "Zi Corporation (HK) Ltd.",
+       [3]byte{0, 7, 40}:      "Neo Telecom",
+       [3]byte{0, 7, 41}:      "Kistler Instrumente AG",
+       [3]byte{0, 7, 42}:      "Innovance Networks",
+       [3]byte{0, 7, 43}:      "Jung Myung Telecom Co., Ltd.",
+       [3]byte{0, 7, 44}:      "Fabricom",
+       [3]byte{0, 7, 45}:      "CNSystems",
+       [3]byte{0, 7, 46}:      "North Node AB",
+       [3]byte{0, 7, 47}:      "Intransa, Inc.",
+       [3]byte{0, 7, 48}:      "Hutchison OPTEL Telecom Technology Co., Ltd.",
+       [3]byte{0, 7, 49}:      "Ophir-Spiricon LLC",
+       [3]byte{0, 7, 50}:      "AAEON Technology Inc.",
+       [3]byte{0, 7, 51}:      "DANCONTROL Engineering",
+       [3]byte{0, 7, 52}:      "ONStor, Inc.",
+       [3]byte{0, 7, 53}:      "Flarion Technologies, Inc.",
+       [3]byte{0, 7, 54}:      "Data Video Technologies Co., Ltd.",
+       [3]byte{0, 7, 55}:      "Soriya Co. Ltd.",
+       [3]byte{0, 7, 56}:      "Young Technology Co., Ltd.",
+       [3]byte{0, 7, 57}:      "Scotty Group Austria Gmbh",
+       [3]byte{0, 7, 58}:      "Inventel Systemes",
+       [3]byte{0, 7, 59}:      "Tenovis GmbH & Co KG",
+       [3]byte{0, 7, 60}:      "Telecom Design",
+       [3]byte{0, 7, 61}:      "Nanjing Postel Telecommunications Co., Ltd.",
+       [3]byte{0, 7, 62}:      "China Great-Wall Computer Shenzhen Co., Ltd.",
+       [3]byte{0, 7, 63}:      "Woojyun Systec Co., Ltd.",
+       [3]byte{0, 7, 64}:      "BUFFALO.INC",
+       [3]byte{0, 7, 65}:      "Sierra Automated Systems",
+       [3]byte{0, 7, 66}:      "Ormazabal",
+       [3]byte{0, 7, 67}:      "Chelsio Communications",
+       [3]byte{0, 7, 68}:      "Unico, Inc.",
+       [3]byte{0, 7, 69}:      "Radlan Computer Communications Ltd.",
+       [3]byte{0, 7, 70}:      "TURCK, Inc.",
+       [3]byte{0, 7, 71}:      "Mecalc",
+       [3]byte{0, 7, 72}:      "The Imaging Source Europe",
+       [3]byte{0, 7, 73}:      "CENiX Inc.",
+       [3]byte{0, 7, 74}:      "Carl Valentin GmbH",
+       [3]byte{0, 7, 75}:      "Daihen Corporation",
+       [3]byte{0, 7, 76}:      "Beicom Inc.",
+       [3]byte{0, 7, 77}:      "Zebra Technologies Corp.",
+       [3]byte{0, 7, 78}:      "IPFRONT Inc",
+       [3]byte{0, 7, 79}:      "Cisco Systems, Inc",
+       [3]byte{0, 7, 80}:      "Cisco Systems, Inc",
+       [3]byte{0, 7, 81}:      "m-u-t AG",
+       [3]byte{0, 7, 82}:      "Rhythm Watch Co., Ltd.",
+       [3]byte{0, 7, 83}:      "Beijing Qxcomm Technology Co., Ltd.",
+       [3]byte{0, 7, 84}:      "Xyterra Computing, Inc.",
+       [3]byte{0, 7, 85}:      "Lafon",
+       [3]byte{0, 7, 86}:      "Juyoung Telecom",
+       [3]byte{0, 7, 87}:      "Topcall International AG",
+       [3]byte{0, 7, 88}:      "Dragonwave",
+       [3]byte{0, 7, 89}:      "Boris Manufacturing Corp.",
+       [3]byte{0, 7, 90}:      "Air Products and Chemicals, Inc.",
+       [3]byte{0, 7, 91}:      "Gibson Guitars",
+       [3]byte{0, 7, 92}:      "Eastman Kodak Company",
+       [3]byte{0, 7, 93}:      "Celleritas Inc.",
+       [3]byte{0, 7, 94}:      "Ametek Power Instruments",
+       [3]byte{0, 7, 95}:      "VCS Video Communication Systems AG",
+       [3]byte{0, 7, 96}:      "TOMIS Information & Telecom Corp.",
+       [3]byte{0, 7, 97}:      "29530",
+       [3]byte{0, 7, 98}:      "Group Sense Limited",
+       [3]byte{0, 7, 99}:      "Sunniwell Cyber Tech. Co., Ltd.",
+       [3]byte{0, 7, 100}:     "YoungWoo Telecom Co. Ltd.",
+       [3]byte{0, 7, 101}:     "Jade Quantum Technologies, Inc.",
+       [3]byte{0, 7, 102}:     "Chou Chin Industrial Co., Ltd.",
+       [3]byte{0, 7, 103}:     "Yuxing Electronics Company Limited",
+       [3]byte{0, 7, 104}:     "Danfoss A/S",
+       [3]byte{0, 7, 105}:     "Italiana Macchi SpA",
+       [3]byte{0, 7, 106}:     "NEXTEYE Co., Ltd.",
+       [3]byte{0, 7, 107}:     "Stralfors AB",
+       [3]byte{0, 7, 108}:     "Daehanet, Inc.",
+       [3]byte{0, 7, 109}:     "Flexlight Networks",
+       [3]byte{0, 7, 110}:     "Sinetica Corporation Limited",
+       [3]byte{0, 7, 111}:     "Synoptics Limited",
+       [3]byte{0, 7, 112}:     "Ubiquoss Inc",
+       [3]byte{0, 7, 113}:     "Embedded System Corporation",
+       [3]byte{0, 7, 114}:     "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{0, 7, 115}:     "Ascom Powerline Communications Ltd.",
+       [3]byte{0, 7, 116}:     "GuangZhou Thinker Technology Co. Ltd.",
+       [3]byte{0, 7, 117}:     "Valence Semiconductor, Inc.",
+       [3]byte{0, 7, 118}:     "Federal APD",
+       [3]byte{0, 7, 119}:     "Motah Ltd.",
+       [3]byte{0, 7, 120}:     "GERSTEL GmbH & Co. KG",
+       [3]byte{0, 7, 121}:     "Sungil Telecom Co., Ltd.",
+       [3]byte{0, 7, 122}:     "Infoware System Co., Ltd.",
+       [3]byte{0, 7, 123}:     "Millimetrix Broadband Networks",
+       [3]byte{0, 7, 124}:     "Westermo Teleindustri AB",
+       [3]byte{0, 7, 125}:     "Cisco Systems, Inc",
+       [3]byte{0, 7, 126}:     "Elrest GmbH",
+       [3]byte{0, 7, 127}:     "J Communications Co., Ltd.",
+       [3]byte{0, 7, 128}:     "Bluegiga Technologies OY",
+       [3]byte{0, 7, 129}:     "Itron Inc.",
+       [3]byte{0, 7, 130}:     "Oracle Corporation",
+       [3]byte{0, 7, 131}:     "SynCom Network, Inc.",
+       [3]byte{0, 7, 132}:     "Cisco Systems, Inc",
+       [3]byte{0, 7, 133}:     "Cisco Systems, Inc",
+       [3]byte{0, 7, 134}:     "Wireless Networks Inc.",
+       [3]byte{0, 7, 135}:     "Idea System Co., Ltd.",
+       [3]byte{0, 7, 136}:     "Clipcomm, Inc.",
+       [3]byte{0, 7, 137}:     "DONGWON SYSTEMS",
+       [3]byte{0, 7, 138}:     "Mentor Data System Inc.",
+       [3]byte{0, 7, 139}:     "Wegener Communications, Inc.",
+       [3]byte{0, 7, 140}:     "Elektronikspecialisten i Borlange AB",
+       [3]byte{0, 7, 141}:     "NetEngines Ltd.",
+       [3]byte{0, 7, 142}:     "Garz & Friche GmbH",
+       [3]byte{0, 7, 143}:     "Emkay Innovative Products",
+       [3]byte{0, 7, 144}:     "Tri-M Technologies (s) Limited",
+       [3]byte{0, 7, 145}:     "International Data Communications, Inc.",
+       [3]byte{0, 7, 146}:     "Sütron Electronic GmbH",
+       [3]byte{0, 7, 147}:     "Shin Satellite Public Company Limited",
+       [3]byte{0, 7, 148}:     "Simple Devices, Inc.",
+       [3]byte{0, 7, 149}:     "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 7, 150}:     "LSI Systems, Inc.",
+       [3]byte{0, 7, 151}:     "Netpower Co., Ltd.",
+       [3]byte{0, 7, 152}:     "Selea SRL",
+       [3]byte{0, 7, 153}:     "Tipping Point Technologies, Inc.",
+       [3]byte{0, 7, 154}:     "Verint Systems Inc",
+       [3]byte{0, 7, 155}:     "Aurora Networks",
+       [3]byte{0, 7, 156}:     "Golden Electronics Technology Co., Ltd.",
+       [3]byte{0, 7, 157}:     "Musashi Co., Ltd.",
+       [3]byte{0, 7, 158}:     "Ilinx Co., Ltd.",
+       [3]byte{0, 7, 159}:     "Action Digital Inc.",
+       [3]byte{0, 7, 160}:     "e-Watch Inc.",
+       [3]byte{0, 7, 161}:     "VIASYS Healthcare GmbH",
+       [3]byte{0, 7, 162}:     "Opteon Corporation",
+       [3]byte{0, 7, 163}:     "Ositis Software, Inc.",
+       [3]byte{0, 7, 164}:     "GN Netcom Ltd.",
+       [3]byte{0, 7, 165}:     "Y.D.K Co. Ltd.",
+       [3]byte{0, 7, 166}:     "Leviton Manufacturing Co., Inc.",
+       [3]byte{0, 7, 167}:     "A-Z Inc.",
+       [3]byte{0, 7, 168}:     "Haier Group Technologies Ltd.",
+       [3]byte{0, 7, 169}:     "Novasonics",
+       [3]byte{0, 7, 170}:     "Quantum Data Inc.",
+       [3]byte{0, 7, 171}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 7, 172}:     "Eolring",
+       [3]byte{0, 7, 173}:     "Pentacon GmbH Foto-und Feinwerktechnik",
+       [3]byte{0, 7, 174}:     "Britestream Networks, Inc.",
+       [3]byte{0, 7, 175}:     "Red Lion Controls, LP",
+       [3]byte{0, 7, 176}:     "Office Details, Inc.",
+       [3]byte{0, 7, 177}:     "Equator Technologies",
+       [3]byte{0, 7, 178}:     "Transaccess S.A.",
+       [3]byte{0, 7, 179}:     "Cisco Systems, Inc",
+       [3]byte{0, 7, 180}:     "Cisco Systems, Inc",
+       [3]byte{0, 7, 181}:     "Any One Wireless Ltd.",
+       [3]byte{0, 7, 182}:     "Telecom Technology Ltd.",
+       [3]byte{0, 7, 183}:     "Samurai Ind. Prods Eletronicos Ltda",
+       [3]byte{0, 7, 184}:     "Corvalent Corporation",
+       [3]byte{0, 7, 185}:     "Ginganet Corporation",
+       [3]byte{0, 7, 186}:     "UTStarcom Inc",
+       [3]byte{0, 7, 187}:     "Candera Inc.",
+       [3]byte{0, 7, 188}:     "Identix Inc.",
+       [3]byte{0, 7, 189}:     "Radionet Ltd.",
+       [3]byte{0, 7, 190}:     "DataLogic SpA",
+       [3]byte{0, 7, 191}:     "Armillaire Technologies, Inc.",
+       [3]byte{0, 7, 192}:     "NetZerver Inc.",
+       [3]byte{0, 7, 193}:     "Overture Networks, Inc.",
+       [3]byte{0, 7, 194}:     "Netsys Telecom",
+       [3]byte{0, 7, 195}:     "Thomson",
+       [3]byte{0, 7, 196}:     "JEAN Co. Ltd.",
+       [3]byte{0, 7, 197}:     "Gcom, Inc.",
+       [3]byte{0, 7, 198}:     "VDS Vosskuhler GmbH",
+       [3]byte{0, 7, 199}:     "Synectics Systems Limited",
+       [3]byte{0, 7, 200}:     "Brain21, Inc.",
+       [3]byte{0, 7, 201}:     "Technol Seven Co., Ltd.",
+       [3]byte{0, 7, 202}:     "Creatix Polymedia Ges Fur Kommunikaitonssysteme",
+       [3]byte{0, 7, 203}:     "FREEBOX SAS",
+       [3]byte{0, 7, 204}:     "Kaba Benzing GmbH",
+       [3]byte{0, 7, 205}:     "Kumoh Electronic Co, Ltd",
+       [3]byte{0, 7, 206}:     "Cabletime Limited",
+       [3]byte{0, 7, 207}:     "Anoto AB",
+       [3]byte{0, 7, 208}:     "Automat Engenharia de Automação Ltda.",
+       [3]byte{0, 7, 209}:     "Spectrum Signal Processing Inc.",
+       [3]byte{0, 7, 210}:     "Logopak Systeme GmbH & Co. KG",
+       [3]byte{0, 7, 211}:     "SPGPrints B.V.",
+       [3]byte{0, 7, 212}:     "Zhejiang Yutong Network Communication Co Ltd.",
+       [3]byte{0, 7, 213}:     "3e Technologies Int;., Inc.",
+       [3]byte{0, 7, 214}:     "Commil Ltd.",
+       [3]byte{0, 7, 215}:     "Caporis Networks AG",
+       [3]byte{0, 7, 216}:     "Hitron Technologies. Inc",
+       [3]byte{0, 7, 217}:     "Splicecom",
+       [3]byte{0, 7, 218}:     "Neuro Telecom Co., Ltd.",
+       [3]byte{0, 7, 219}:     "Kirana Networks, Inc.",
+       [3]byte{0, 7, 220}:     "Atek Co, Ltd.",
+       [3]byte{0, 7, 221}:     "Cradle Technologies",
+       [3]byte{0, 7, 222}:     "eCopilt AB",
+       [3]byte{0, 7, 223}:     "Vbrick Systems Inc.",
+       [3]byte{0, 7, 224}:     "Palm Inc.",
+       [3]byte{0, 7, 225}:     "WIS Communications Co. Ltd.",
+       [3]byte{0, 7, 226}:     "Bitworks, Inc.",
+       [3]byte{0, 7, 227}:     "Navcom Technology, Inc.",
+       [3]byte{0, 7, 228}:     "SoftRadio Co., Ltd.",
+       [3]byte{0, 7, 229}:     "Coup Corporation",
+       [3]byte{0, 7, 230}:     "edgeflow Canada Inc.",
+       [3]byte{0, 7, 231}:     "FreeWave Technologies",
+       [3]byte{0, 7, 232}:     "EdgeWave",
+       [3]byte{0, 7, 233}:     "Intel Corporation",
+       [3]byte{0, 7, 234}:     "Massana, Inc.",
+       [3]byte{0, 7, 235}:     "Cisco Systems, Inc",
+       [3]byte{0, 7, 236}:     "Cisco Systems, Inc",
+       [3]byte{0, 7, 237}:     "Altera Corporation",
+       [3]byte{0, 7, 238}:     "telco Informationssysteme GmbH",
+       [3]byte{0, 7, 239}:     "Lockheed Martin Tactical Systems",
+       [3]byte{0, 7, 240}:     "LogiSync LLC",
+       [3]byte{0, 7, 241}:     "TeraBurst Networks Inc.",
+       [3]byte{0, 7, 242}:     "IOA Corporation",
+       [3]byte{0, 7, 243}:     "Thinkengine Networks",
+       [3]byte{0, 7, 244}:     "Eletex Co., Ltd.",
+       [3]byte{0, 7, 245}:     "Bridgeco Co AG",
+       [3]byte{0, 7, 246}:     "Qqest Software Systems",
+       [3]byte{0, 7, 247}:     "Galtronics",
+       [3]byte{0, 7, 248}:     "ITDevices, Inc.",
+       [3]byte{0, 7, 249}:     "Sensaphone",
+       [3]byte{0, 7, 250}:     "ITT Co., Ltd.",
+       [3]byte{0, 7, 251}:     "Giga Stream UMTS Technologies GmbH",
+       [3]byte{0, 7, 252}:     "Adept Systems Inc.",
+       [3]byte{0, 7, 253}:     "LANergy Ltd.",
+       [3]byte{0, 7, 254}:     "Rigaku Corporation",
+       [3]byte{0, 7, 255}:     "Gluon Networks",
+       [3]byte{0, 8, 0}:       "MULTITECH SYSTEMS, INC.",
+       [3]byte{0, 8, 1}:       "HighSpeed Surfing Inc.",
+       [3]byte{0, 8, 2}:       "Hewlett Packard",
+       [3]byte{0, 8, 3}:       "Cos Tron",
+       [3]byte{0, 8, 4}:       "ICA Inc.",
+       [3]byte{0, 8, 5}:       "Techno-Holon Corporation",
+       [3]byte{0, 8, 6}:       "Raonet Systems, Inc.",
+       [3]byte{0, 8, 7}:       "Access Devices Limited",
+       [3]byte{0, 8, 8}:       "PPT Vision, Inc.",
+       [3]byte{0, 8, 9}:       "Systemonic AG",
+       [3]byte{0, 8, 10}:      "Espera-Werke GmbH",
+       [3]byte{0, 8, 11}:      "Birka BPA Informationssystem AB",
+       [3]byte{0, 8, 12}:      "VDA Elettronica spa",
+       [3]byte{0, 8, 13}:      "Toshiba",
+       [3]byte{0, 8, 14}:      "ARRIS Group, Inc.",
+       [3]byte{0, 8, 15}:      "Proximion Fiber Optics AB",
+       [3]byte{0, 8, 16}:      "Key Technology, Inc.",
+       [3]byte{0, 8, 17}:      "VOIX Corporation",
+       [3]byte{0, 8, 18}:      "GM-2 Corporation",
+       [3]byte{0, 8, 19}:      "Diskbank, Inc.",
+       [3]byte{0, 8, 20}:      "TIL Technologies",
+       [3]byte{0, 8, 21}:      "CATS Co., Ltd.",
+       [3]byte{0, 8, 22}:      "Bluelon ApS",
+       [3]byte{0, 8, 23}:      "EmergeCore Networks LLC",
+       [3]byte{0, 8, 24}:      "Pixelworks, Inc.",
+       [3]byte{0, 8, 25}:      "Banksys",
+       [3]byte{0, 8, 26}:      "Sanrad Intelligence Storage Communications (2000) Ltd.",
+       [3]byte{0, 8, 27}:      "Windigo Systems",
+       [3]byte{0, 8, 28}:      "@pos.com",
+       [3]byte{0, 8, 29}:      "Ipsil, Incorporated",
+       [3]byte{0, 8, 30}:      "Repeatit AB",
+       [3]byte{0, 8, 31}:      "Pou Yuen Tech Corp. Ltd.",
+       [3]byte{0, 8, 32}:      "Cisco Systems, Inc",
+       [3]byte{0, 8, 33}:      "Cisco Systems, Inc",
+       [3]byte{0, 8, 34}:      "InPro Comm",
+       [3]byte{0, 8, 35}:      "Texa Corp.",
+       [3]byte{0, 8, 36}:      "Nuance Document Imaging",
+       [3]byte{0, 8, 37}:      "Acme Packet",
+       [3]byte{0, 8, 38}:      "Colorado Med Tech",
+       [3]byte{0, 8, 39}:      "ADB Broadband Italia",
+       [3]byte{0, 8, 40}:      "Koei Engineering Ltd.",
+       [3]byte{0, 8, 41}:      "Aval Nagasaki Corporation",
+       [3]byte{0, 8, 42}:      "Powerwallz Network Security",
+       [3]byte{0, 8, 43}:      "Wooksung Electronics, Inc.",
+       [3]byte{0, 8, 44}:      "Homag AG",
+       [3]byte{0, 8, 45}:      "Indus Teqsite Private Limited",
+       [3]byte{0, 8, 46}:      "Multitone Electronics PLC",
+       [3]byte{0, 8, 47}:      "Cisco Systems, Inc",
+       [3]byte{0, 8, 48}:      "Cisco Systems, Inc",
+       [3]byte{0, 8, 49}:      "Cisco Systems, Inc",
+       [3]byte{0, 8, 50}:      "Cisco Systems, Inc",
+       [3]byte{0, 8, 78}:      "DivergeNet, Inc.",
+       [3]byte{0, 8, 79}:      "Qualstar Corporation",
+       [3]byte{0, 8, 80}:      "Arizona Instrument Corp.",
+       [3]byte{0, 8, 81}:      "Canadian Bank Note Company, Ltd.",
+       [3]byte{0, 8, 82}:      "Davolink Co. Inc.",
+       [3]byte{0, 8, 83}:      "Schleicher GmbH & Co. Relaiswerke KG",
+       [3]byte{0, 8, 84}:      "Netronix, Inc.",
+       [3]byte{0, 8, 85}:      "NASA-Goddard Space Flight Center",
+       [3]byte{0, 8, 86}:      "Gamatronic Electronic Industries Ltd.",
+       [3]byte{0, 8, 87}:      "Polaris Networks, Inc.",
+       [3]byte{0, 8, 88}:      "Novatechnology Inc.",
+       [3]byte{0, 8, 89}:      "ShenZhen Unitone Electronics Co., Ltd.",
+       [3]byte{0, 8, 90}:      "IntiGate Inc.",
+       [3]byte{0, 8, 91}:      "Hanbit Electronics Co., Ltd.",
+       [3]byte{0, 8, 92}:      "Shanghai Dare Technologies Co. Ltd.",
+       [3]byte{0, 8, 93}:      "Aastra",
+       [3]byte{0, 8, 94}:      "PCO AG",
+       [3]byte{0, 8, 95}:      "Picanol N.V.",
+       [3]byte{0, 8, 96}:      "LodgeNet Entertainment Corp.",
+       [3]byte{0, 8, 97}:      "SoftEnergy Co., Ltd.",
+       [3]byte{0, 8, 98}:      "NEC Eluminant Technologies, Inc.",
+       [3]byte{0, 8, 99}:      "Entrisphere Inc.",
+       [3]byte{0, 8, 100}:     "Fasy S.p.A.",
+       [3]byte{0, 8, 101}:     "JASCOM CO., LTD",
+       [3]byte{0, 8, 102}:     "DSX Access Systems, Inc.",
+       [3]byte{0, 8, 103}:     "Uptime Devices",
+       [3]byte{0, 8, 104}:     "PurOptix",
+       [3]byte{0, 8, 105}:     "Command-e Technology Co.,Ltd.",
+       [3]byte{0, 8, 106}:     "Securiton Gmbh",
+       [3]byte{0, 8, 107}:     "MIPSYS",
+       [3]byte{0, 8, 108}:     "Plasmon LMS",
+       [3]byte{0, 8, 109}:     "Missouri FreeNet",
+       [3]byte{0, 8, 110}:     "Hyglo AB",
+       [3]byte{0, 8, 111}:     "Resources Computer Network Ltd.",
+       [3]byte{0, 8, 112}:     "Rasvia Systems, Inc.",
+       [3]byte{0, 8, 113}:     "NORTHDATA Co., Ltd.",
+       [3]byte{0, 8, 114}:     "Sorenson Communications",
+       [3]byte{0, 8, 115}:     "DapTechnology B.V.",
+       [3]byte{0, 8, 116}:     "Dell Inc.",
+       [3]byte{0, 8, 117}:     "Acorp Electronics Corp.",
+       [3]byte{0, 8, 118}:     "SDSystem",
+       [3]byte{0, 8, 119}:     "Liebert-Hiross Spa",
+       [3]byte{0, 8, 120}:     "Benchmark Storage Innovations",
+       [3]byte{0, 8, 121}:     "CEM Corporation",
+       [3]byte{0, 8, 122}:     "Wipotec GmbH",
+       [3]byte{0, 8, 123}:     "RTX Telecom A/S",
+       [3]byte{0, 8, 124}:     "Cisco Systems, Inc",
+       [3]byte{0, 8, 125}:     "Cisco Systems, Inc",
+       [3]byte{0, 8, 126}:     "Bon Electro-Telecom Inc.",
+       [3]byte{0, 8, 127}:     "SPAUN electronic GmbH & Co. KG",
+       [3]byte{0, 8, 128}:     "BroadTel Canada Communications inc.",
+       [3]byte{0, 8, 129}:     "DIGITAL HANDS CO.,LTD.",
+       [3]byte{0, 8, 130}:     "SIGMA CORPORATION",
+       [3]byte{0, 8, 131}:     "Hewlett Packard",
+       [3]byte{0, 8, 132}:     "Index Braille AB",
+       [3]byte{0, 8, 133}:     "EMS Dr. Thomas Wünsche",
+       [3]byte{0, 8, 134}:     "Hansung Teliann, Inc.",
+       [3]byte{0, 8, 135}:     "Maschinenfabrik Reinhausen GmbH",
+       [3]byte{0, 8, 136}:     "OULLIM Information Technology Inc,.",
+       [3]byte{0, 8, 137}:     "Echostar Technologies Corp",
+       [3]byte{0, 8, 138}:     "Minds@Work",
+       [3]byte{0, 8, 139}:     "Tropic Networks Inc.",
+       [3]byte{0, 8, 140}:     "Quanta Network Systems Inc.",
+       [3]byte{0, 8, 141}:     "Sigma-Links Inc.",
+       [3]byte{0, 8, 142}:     "Nihon Computer Co., Ltd.",
+       [3]byte{0, 8, 143}:     "ADVANCED DIGITAL TECHNOLOGY",
+       [3]byte{0, 8, 144}:     "AVILINKS SA",
+       [3]byte{0, 8, 145}:     "Lyan Inc.",
+       [3]byte{0, 8, 146}:     "EM Solutions",
+       [3]byte{0, 8, 147}:     "LE INFORMATION COMMUNICATION INC.",
+       [3]byte{0, 8, 148}:     "InnoVISION Multimedia Ltd.",
+       [3]byte{0, 8, 149}:     "DIRC Technologie GmbH & Co.KG",
+       [3]byte{0, 8, 150}:     "Printronix, Inc.",
+       [3]byte{0, 8, 151}:     "Quake Technologies",
+       [3]byte{0, 8, 152}:     "Gigabit Optics Corporation",
+       [3]byte{0, 8, 153}:     "Netbind, Inc.",
+       [3]byte{0, 8, 154}:     "Alcatel Microelectronics",
+       [3]byte{0, 8, 155}:     "ICP Electronics Inc.",
+       [3]byte{0, 8, 156}:     "Elecs Industry Co., Ltd.",
+       [3]byte{0, 8, 157}:     "UHD-Elektronik",
+       [3]byte{0, 8, 158}:     "Beijing Enter-Net co.LTD",
+       [3]byte{0, 8, 159}:     "EFM Networks",
+       [3]byte{0, 8, 160}:     "Stotz Feinmesstechnik GmbH",
+       [3]byte{0, 8, 161}:     "CNet Technology Inc.",
+       [3]byte{0, 8, 162}:     "ADI Engineering, Inc.",
+       [3]byte{0, 8, 163}:     "Cisco Systems, Inc",
+       [3]byte{0, 8, 164}:     "Cisco Systems, Inc",
+       [3]byte{0, 8, 165}:     "Peninsula Systems Inc.",
+       [3]byte{0, 8, 166}:     "Multiware & Image Co., Ltd.",
+       [3]byte{0, 8, 167}:     "iLogic Inc.",
+       [3]byte{0, 8, 168}:     "Systec Co., Ltd.",
+       [3]byte{0, 8, 169}:     "SangSang Technology, Inc.",
+       [3]byte{0, 8, 170}:     "KARAM",
+       [3]byte{0, 8, 171}:     "EnerLinx.com, Inc.",
+       [3]byte{0, 8, 172}:     "Eltromat GmbH",
+       [3]byte{0, 8, 173}:     "Toyo-Linx Co., Ltd.",
+       [3]byte{0, 8, 174}:     "PacketFront Network Products AB",
+       [3]byte{0, 8, 175}:     "Novatec Corporation",
+       [3]byte{0, 8, 176}:     "BKtel communications GmbH",
+       [3]byte{0, 8, 177}:     "ProQuent Systems",
+       [3]byte{0, 8, 178}:     "SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD",
+       [3]byte{0, 8, 179}:     "Fastwel",
+       [3]byte{0, 8, 180}:     "SYSPOL",
+       [3]byte{0, 8, 181}:     "TAI GUEN ENTERPRISE CO., LTD",
+       [3]byte{0, 8, 182}:     "RouteFree, Inc.",
+       [3]byte{0, 8, 183}:     "HIT Incorporated",
+       [3]byte{0, 8, 184}:     "E.F. Johnson",
+       [3]byte{0, 8, 185}:     "Kaonmedia CO., LTD.",
+       [3]byte{0, 8, 186}:     "Erskine Systems Ltd",
+       [3]byte{0, 8, 187}:     "NetExcell",
+       [3]byte{0, 8, 188}:     "Ilevo AB",
+       [3]byte{0, 8, 189}:     "TEPG-US",
+       [3]byte{0, 8, 190}:     "XENPAK MSA Group",
+       [3]byte{0, 8, 191}:     "Aptus Elektronik AB",
+       [3]byte{0, 8, 192}:     "ASA SYSTEMS",
+       [3]byte{0, 8, 193}:     "Avistar Communications Corporation",
+       [3]byte{0, 8, 194}:     "Cisco Systems, Inc",
+       [3]byte{0, 8, 195}:     "Contex A/S",
+       [3]byte{0, 8, 196}:     "Hikari Co.,Ltd.",
+       [3]byte{0, 8, 197}:     "Liontech Co., Ltd.",
+       [3]byte{0, 8, 198}:     "Philips Consumer Communications",
+       [3]byte{0, 8, 199}:     "Hewlett Packard",
+       [3]byte{0, 8, 200}:     "Soneticom, Inc.",
+       [3]byte{0, 8, 201}:     "TechniSat Digital GmbH Daun",
+       [3]byte{0, 8, 202}:     "TwinHan Technology Co.,Ltd",
+       [3]byte{0, 8, 203}:     "Zeta Broadband Inc.",
+       [3]byte{0, 8, 204}:     "Remotec, Inc.",
+       [3]byte{0, 8, 205}:     "With-Net Inc",
+       [3]byte{0, 8, 206}:     "IPMobileNet Inc.",
+       [3]byte{0, 8, 207}:     "Nippon Koei Power Systems Co., Ltd.",
+       [3]byte{0, 8, 208}:     "Musashi Engineering Co., LTD.",
+       [3]byte{0, 8, 209}:     "KAREL INC.",
+       [3]byte{0, 8, 210}:     "ZOOM Networks Inc.",
+       [3]byte{0, 8, 211}:     "Hercules Technologies S.A.S.",
+       [3]byte{0, 8, 212}:     "IneoQuest Technologies, Inc",
+       [3]byte{0, 8, 213}:     "Vanguard Networks Solutions, LLC",
+       [3]byte{0, 8, 214}:     "HASSNET Inc.",
+       [3]byte{0, 8, 215}:     "HOW CORPORATION",
+       [3]byte{0, 8, 216}:     "Dowkey Microwave",
+       [3]byte{0, 8, 217}:     "Mitadenshi Co.,LTD",
+       [3]byte{0, 8, 218}:     "SofaWare Technologies Ltd.",
+       [3]byte{0, 8, 219}:     "Corrigent Systems",
+       [3]byte{0, 8, 220}:     "Wiznet",
+       [3]byte{0, 8, 221}:     "Telena Communications, Inc.",
+       [3]byte{0, 8, 222}:     "3UP Systems",
+       [3]byte{0, 8, 223}:     "Alistel Inc.",
+       [3]byte{0, 8, 224}:     "ATO Technology Ltd.",
+       [3]byte{0, 8, 225}:     "Barix AG",
+       [3]byte{0, 8, 226}:     "Cisco Systems, Inc",
+       [3]byte{0, 8, 227}:     "Cisco Systems, Inc",
+       [3]byte{0, 8, 228}:     "Envenergy Inc",
+       [3]byte{0, 8, 229}:     "IDK Corporation",
+       [3]byte{0, 8, 230}:     "Littlefeet",
+       [3]byte{0, 8, 231}:     "SHI ControlSystems,Ltd.",
+       [3]byte{0, 8, 232}:     "Excel Master Ltd.",
+       [3]byte{0, 8, 233}:     "NextGig",
+       [3]byte{0, 8, 234}:     "Motion Control Engineering, Inc",
+       [3]byte{0, 8, 235}:     "ROMWin Co.,Ltd.",
+       [3]byte{0, 8, 236}:     "Optical Zonu Corporation",
+       [3]byte{0, 8, 237}:     "ST&T Instrument Corp.",
+       [3]byte{0, 8, 238}:     "Logic Product Development",
+       [3]byte{0, 8, 239}:     "DIBAL,S.A.",
+       [3]byte{0, 8, 240}:     "Next Generation Systems, Inc.",
+       [3]byte{0, 8, 241}:     "Voltaire",
+       [3]byte{0, 8, 242}:     "C&S Technology",
+       [3]byte{0, 8, 243}:     "WANY",
+       [3]byte{0, 8, 244}:     "Bluetake Technology Co., Ltd.",
+       [3]byte{0, 8, 245}:     "YESTECHNOLOGY Co.,Ltd.",
+       [3]byte{0, 8, 246}:     "Sumitomo Electric Industries,Ltd",
+       [3]byte{0, 8, 247}:     "Hitachi Ltd, Semiconductor & Integrated Circuits Gr",
+       [3]byte{0, 8, 248}:     "UTC CCS",
+       [3]byte{0, 8, 249}:     "Artesyn Embedded Technologies",
+       [3]byte{0, 8, 250}:     "KEB Automation KG",
+       [3]byte{0, 8, 251}:     "SonoSite, Inc.",
+       [3]byte{0, 8, 252}:     "Gigaphoton Inc.",
+       [3]byte{0, 8, 253}:     "BlueKorea Co., Ltd.",
+       [3]byte{0, 8, 254}:     "UNIK C&C Co.,Ltd.",
+       [3]byte{0, 8, 255}:     "Trilogy Communications Ltd",
+       [3]byte{0, 9, 0}:       "TMT",
+       [3]byte{0, 9, 1}:       "Shenzhen Shixuntong Information & Technoligy Co",
+       [3]byte{0, 9, 2}:       "Redline Communications Inc.",
+       [3]byte{0, 9, 3}:       "Panasas, Inc",
+       [3]byte{0, 9, 4}:       "MONDIAL electronic",
+       [3]byte{0, 9, 5}:       "iTEC Technologies Ltd.",
+       [3]byte{0, 9, 6}:       "Esteem Networks",
+       [3]byte{0, 9, 7}:       "Chrysalis Development",
+       [3]byte{0, 9, 8}:       "VTech Technology Corp.",
+       [3]byte{0, 9, 9}:       "Telenor Connect A/S",
+       [3]byte{0, 9, 10}:      "SnedFar Technology Co., Ltd.",
+       [3]byte{0, 9, 11}:      "MTL  Instruments PLC",
+       [3]byte{0, 9, 12}:      "Mayekawa Mfg. Co. Ltd.",
+       [3]byte{0, 9, 13}:      "LEADER ELECTRONICS CORP.",
+       [3]byte{0, 9, 14}:      "Helix Technology Inc.",
+       [3]byte{0, 9, 15}:      "Fortinet Inc.",
+       [3]byte{0, 9, 16}:      "Simple Access Inc.",
+       [3]byte{0, 9, 17}:      "Cisco Systems, Inc",
+       [3]byte{0, 9, 18}:      "Cisco Systems, Inc",
+       [3]byte{0, 9, 19}:      "SystemK Corporation",
+       [3]byte{0, 9, 20}:      "COMPUTROLS INC.",
+       [3]byte{0, 9, 21}:      "CAS Corp.",
+       [3]byte{0, 9, 22}:      "Listman Home Technologies, Inc.",
+       [3]byte{0, 9, 23}:      "WEM Technology Inc",
+       [3]byte{0, 9, 24}:      "SAMSUNG TECHWIN CO.,LTD",
+       [3]byte{0, 9, 25}:      "MDS Gateways",
+       [3]byte{0, 9, 26}:      "Macat Optics & Electronics Co., Ltd.",
+       [3]byte{0, 9, 27}:      "Digital Generation Inc.",
+       [3]byte{0, 9, 28}:      "CacheVision, Inc",
+       [3]byte{0, 9, 29}:      "Proteam Computer Corporation",
+       [3]byte{0, 9, 30}:      "Firstech Technology Corp.",
+       [3]byte{0, 9, 31}:      "A&D Co., Ltd.",
+       [3]byte{0, 9, 32}:      "EpoX COMPUTER CO.,LTD.",
+       [3]byte{0, 9, 33}:      "Planmeca Oy",
+       [3]byte{0, 9, 34}:      "TST Biometrics GmbH",
+       [3]byte{0, 9, 35}:      "Heaman System Co., Ltd",
+       [3]byte{0, 9, 36}:      "Telebau GmbH",
+       [3]byte{0, 9, 37}:      "VSN Systemen BV",
+       [3]byte{0, 9, 38}:      "YODA COMMUNICATIONS, INC.",
+       [3]byte{0, 9, 39}:      "TOYOKEIKI CO.,LTD.",
+       [3]byte{0, 9, 40}:      "Telecore",
+       [3]byte{0, 9, 41}:      "Sanyo Industries (UK) Limited",
+       [3]byte{0, 9, 42}:      "MYTECS Co.,Ltd.",
+       [3]byte{0, 9, 43}:      "iQstor Networks, Inc.",
+       [3]byte{0, 9, 44}:      "Hitpoint Inc.",
+       [3]byte{0, 9, 45}:      "HTC Corporation",
+       [3]byte{0, 9, 46}:      "B&Tech System Inc.",
+       [3]byte{0, 9, 47}:      "Akom Technology Corporation",
+       [3]byte{0, 9, 48}:      "AeroConcierge Inc.",
+       [3]byte{0, 9, 49}:      "Future Internet, Inc.",
+       [3]byte{0, 9, 50}:      "Omnilux",
+       [3]byte{0, 9, 51}:      "Ophit Co.Ltd.",
+       [3]byte{0, 9, 52}:      "Dream-Multimedia-Tv GmbH",
+       [3]byte{0, 9, 53}:      "Sandvine Incorporated",
+       [3]byte{0, 9, 54}:      "Ipetronik GmbH & Co. KG",
+       [3]byte{0, 9, 55}:      "Inventec Appliance Corp",
+       [3]byte{0, 9, 56}:      "Allot Communications",
+       [3]byte{0, 9, 57}:      "ShibaSoku Co.,Ltd.",
+       [3]byte{0, 9, 58}:      "Molex",
+       [3]byte{0, 9, 59}:      "HYUNDAI NETWORKS INC.",
+       [3]byte{0, 9, 60}:      "Jacques Technologies P/L",
+       [3]byte{0, 9, 61}:      "Newisys,Inc.",
+       [3]byte{0, 9, 62}:      "C&I Technologies",
+       [3]byte{0, 9, 63}:      "Double-Win Enterpirse CO., LTD",
+       [3]byte{0, 9, 64}:      "AGFEO GmbH & Co. KG",
+       [3]byte{0, 9, 65}:      "Allied Telesis R&D Center K.K.",
+       [3]byte{0, 9, 66}:      "Wireless Technologies, Inc",
+       [3]byte{0, 9, 67}:      "Cisco Systems, Inc",
+       [3]byte{0, 9, 68}:      "Cisco Systems, Inc",
+       [3]byte{0, 9, 69}:      "Palmmicro Communications Inc",
+       [3]byte{0, 9, 70}:      "Cluster Labs GmbH",
+       [3]byte{0, 9, 71}:      "Aztek, Inc.",
+       [3]byte{0, 9, 72}:      "Vista Control Systems, Corp.",
+       [3]byte{0, 9, 73}:      "Glyph Technologies Inc.",
+       [3]byte{0, 9, 74}:      "Homenet Communications",
+       [3]byte{0, 9, 75}:      "FillFactory NV",
+       [3]byte{0, 9, 76}:      "Communication Weaver Co.,Ltd.",
+       [3]byte{0, 9, 77}:      "Braintree Communications Pty Ltd",
+       [3]byte{0, 9, 78}:      "BARTECH SYSTEMS INTERNATIONAL, INC",
+       [3]byte{0, 9, 79}:      "elmegt GmbH & Co. KG",
+       [3]byte{0, 9, 80}:      "Independent Storage Corporation",
+       [3]byte{0, 9, 81}:      "Apogee Imaging Systems",
+       [3]byte{0, 9, 82}:      "Auerswald GmbH & Co. KG",
+       [3]byte{0, 9, 83}:      "Linkage System Integration Co.Ltd.",
+       [3]byte{0, 9, 84}:      "AMiT spol. s. r. o.",
+       [3]byte{0, 9, 85}:      "Young Generation International Corp.",
+       [3]byte{0, 9, 86}:      "Network Systems Group, Ltd. (NSG)",
+       [3]byte{0, 9, 87}:      "Supercaller, Inc.",
+       [3]byte{0, 9, 88}:      "INTELNET S.A.",
+       [3]byte{0, 9, 89}:      "Sitecsoft",
+       [3]byte{0, 9, 90}:      "RACEWOOD TECHNOLOGY",
+       [3]byte{0, 9, 91}:      "NETGEAR",
+       [3]byte{0, 9, 92}:      "Philips Medical Systems - Cardiac and Monitoring Systems (CM",
+       [3]byte{0, 9, 93}:      "Dialogue Technology Corp.",
+       [3]byte{0, 9, 94}:      "Masstech Group Inc.",
+       [3]byte{0, 9, 95}:      "Telebyte, Inc.",
+       [3]byte{0, 9, 96}:      "YOZAN Inc.",
+       [3]byte{0, 9, 97}:      "Switchgear and Instrumentation Ltd",
+       [3]byte{0, 9, 98}:      "Sonitor Technologies AS",
+       [3]byte{0, 9, 99}:      "Dominion Lasercom Inc.",
+       [3]byte{0, 9, 100}:     "Hi-Techniques, Inc.",
+       [3]byte{0, 9, 101}:     "HyunJu Computer Co., Ltd.",
+       [3]byte{0, 9, 102}:     "TRIMBLE EUROPE BV",
+       [3]byte{0, 9, 103}:     "Tachyon, Inc",
+       [3]byte{0, 9, 104}:     "TECHNOVENTURE, INC.",
+       [3]byte{0, 9, 105}:     "Meret Optical Communications",
+       [3]byte{0, 9, 106}:     "Cloverleaf Communications Inc.",
+       [3]byte{0, 9, 107}:     "IBM Corp",
+       [3]byte{0, 9, 108}:     "Imedia Semiconductor Corp.",
+       [3]byte{0, 9, 109}:     "Powernet Technologies Corp.",
+       [3]byte{0, 9, 110}:     "GIANT ELECTRONICS LTD.",
+       [3]byte{0, 9, 111}:     "Beijing Zhongqing Elegant Tech. Corp.,Limited",
+       [3]byte{0, 9, 112}:     "Vibration Research Corporation",
+       [3]byte{0, 9, 113}:     "Time Management, Inc.",
+       [3]byte{0, 9, 114}:     "Securebase,Inc",
+       [3]byte{0, 9, 115}:     "Lenten Technology Co., Ltd.",
+       [3]byte{0, 9, 116}:     "Innopia Technologies, Inc.",
+       [3]byte{0, 9, 117}:     "fSONA Communications Corporation",
+       [3]byte{0, 9, 118}:     "Datasoft ISDN Systems GmbH",
+       [3]byte{0, 9, 119}:     "Brunner Elektronik AG",
+       [3]byte{0, 9, 120}:     "AIJI System Co., Ltd.",
+       [3]byte{0, 9, 121}:     "Advanced Television Systems Committee, Inc.",
+       [3]byte{0, 9, 122}:     "Louis Design Labs.",
+       [3]byte{0, 9, 123}:     "Cisco Systems, Inc",
+       [3]byte{0, 9, 124}:     "Cisco Systems, Inc",
+       [3]byte{0, 9, 125}:     "SecWell Networks Oy",
+       [3]byte{0, 9, 126}:     "IMI TECHNOLOGY CO., LTD",
+       [3]byte{0, 9, 127}:     "Vsecure 2000 LTD.",
+       [3]byte{0, 9, 128}:     "Power Zenith Inc.",
+       [3]byte{0, 9, 129}:     "Newport Networks",
+       [3]byte{0, 9, 130}:     "Loewe Opta GmbH",
+       [3]byte{0, 9, 131}:     "GlobalTop Technology, Inc.",
+       [3]byte{0, 9, 132}:     "MyCasa Network Inc.",
+       [3]byte{0, 9, 133}:     "Auto Telecom Company",
+       [3]byte{0, 9, 134}:     "Metalink LTD.",
+       [3]byte{0, 9, 135}:     "NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD.",
+       [3]byte{0, 9, 136}:     "Nudian Electron Co., Ltd.",
+       [3]byte{0, 9, 137}:     "VividLogic Inc.",
+       [3]byte{0, 9, 138}:     "EqualLogic Inc",
+       [3]byte{0, 9, 139}:     "Entropic Communications, Inc.",
+       [3]byte{0, 9, 140}:     "Option Wireless Sweden",
+       [3]byte{0, 9, 141}:     "Velocity Semiconductor",
+       [3]byte{0, 9, 142}:     "ipcas GmbH",
+       [3]byte{0, 9, 143}:     "Cetacean Networks",
+       [3]byte{0, 9, 144}:     "ACKSYS Communications & systems",
+       [3]byte{0, 9, 145}:     "GE Fanuc Automation Manufacturing, Inc.",
+       [3]byte{0, 9, 146}:     "InterEpoch Technology,INC.",
+       [3]byte{0, 9, 147}:     "Visteon Corporation",
+       [3]byte{0, 9, 148}:     "Cronyx Engineering",
+       [3]byte{0, 9, 149}:     "Castle Technology Ltd",
+       [3]byte{0, 9, 150}:     "RDI",
+       [3]byte{0, 9, 151}:     "Nortel Networks",
+       [3]byte{0, 9, 152}:     "Capinfo Company Limited",
+       [3]byte{0, 9, 153}:     "CP GEORGES RENAULT",
+       [3]byte{0, 9, 154}:     "ELMO COMPANY, LIMITED",
+       [3]byte{0, 9, 155}:     "Western Telematic Inc.",
+       [3]byte{0, 9, 156}:     "Naval Research Laboratory",
+       [3]byte{0, 9, 157}:     "Haliplex Communications",
+       [3]byte{0, 9, 158}:     "Testech, Inc.",
+       [3]byte{0, 9, 159}:     "VIDEX INC.",
+       [3]byte{0, 9, 160}:     "Microtechno Corporation",
+       [3]byte{0, 9, 161}:     "Telewise Communications, Inc.",
+       [3]byte{0, 9, 162}:     "Interface Co., Ltd.",
+       [3]byte{0, 9, 163}:     "Leadfly Techologies Corp. Ltd.",
+       [3]byte{0, 9, 164}:     "HARTEC Corporation",
+       [3]byte{0, 9, 165}:     "HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD",
+       [3]byte{0, 9, 166}:     "Ignis Optics, Inc.",
+       [3]byte{0, 9, 167}:     "Bang & Olufsen A/S",
+       [3]byte{0, 9, 168}:     "Eastmode Pte Ltd",
+       [3]byte{0, 9, 169}:     "Ikanos Communications",
+       [3]byte{0, 9, 170}:     "Data Comm for Business, Inc.",
+       [3]byte{0, 9, 171}:     "Netcontrol Oy",
+       [3]byte{0, 9, 172}:     "LANVOICE",
+       [3]byte{0, 9, 173}:     "HYUNDAI SYSCOMM, INC.",
+       [3]byte{0, 9, 174}:     "OKANO ELECTRIC CO.,LTD",
+       [3]byte{0, 9, 175}:     "e-generis",
+       [3]byte{0, 9, 176}:     "Onkyo Corporation",
+       [3]byte{0, 9, 177}:     "Kanematsu Electronics, Ltd.",
+       [3]byte{0, 9, 178}:     "L&F Inc.",
+       [3]byte{0, 9, 179}:     "MCM Systems Ltd",
+       [3]byte{0, 9, 180}:     "KISAN TELECOM CO., LTD.",
+       [3]byte{0, 9, 181}:     "3J Tech. Co., Ltd.",
+       [3]byte{0, 9, 182}:     "Cisco Systems, Inc",
+       [3]byte{0, 9, 183}:     "Cisco Systems, Inc",
+       [3]byte{0, 9, 184}:     "Entise Systems",
+       [3]byte{0, 9, 185}:     "Action Imaging Solutions",
+       [3]byte{0, 9, 186}:     "MAKU Informationstechik GmbH",
+       [3]byte{0, 9, 187}:     "MathStar, Inc.",
+       [3]byte{0, 9, 188}:     "Utility, Inc",
+       [3]byte{0, 9, 189}:     "Epygi Technologies, Ltd.",
+       [3]byte{0, 9, 190}:     "Mamiya-OP Co.,Ltd.",
+       [3]byte{0, 9, 191}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 9, 192}:     "6WIND",
+       [3]byte{0, 9, 193}:     "PROCES-DATA A/S",
+       [3]byte{0, 9, 194}:     "Onity, Inc.",
+       [3]byte{0, 9, 195}:     "NETAS",
+       [3]byte{0, 9, 196}:     "Medicore Co., Ltd",
+       [3]byte{0, 9, 197}:     "KINGENE Technology Corporation",
+       [3]byte{0, 9, 198}:     "Visionics Corporation",
+       [3]byte{0, 9, 199}:     "Movistec",
+       [3]byte{0, 9, 200}:     "SINAGAWA TSUSHIN KEISOU SERVICE",
+       [3]byte{0, 9, 201}:     "BlueWINC Co., Ltd.",
+       [3]byte{0, 9, 202}:     "iMaxNetworks(Shenzhen)Limited.",
+       [3]byte{0, 9, 203}:     "HBrain",
+       [3]byte{0, 9, 204}:     "Moog GmbH",
+       [3]byte{0, 9, 205}:     "HUDSON SOFT CO.,LTD.",
+       [3]byte{0, 9, 206}:     "SpaceBridge Semiconductor Corp.",
+       [3]byte{0, 9, 207}:     "iAd GmbH",
+       [3]byte{0, 9, 208}:     "Solacom Technologies Inc.",
+       [3]byte{0, 9, 209}:     "SERANOA NETWORKS INC",
+       [3]byte{0, 9, 210}:     "Mai Logic Inc.",
+       [3]byte{0, 9, 211}:     "Western DataCom Co., Inc.",
+       [3]byte{0, 9, 212}:     "Transtech Networks",
+       [3]byte{0, 9, 213}:     "Signal Communication, Inc.",
+       [3]byte{0, 9, 214}:     "KNC One GmbH",
+       [3]byte{0, 9, 215}:     "DC Security Products",
+       [3]byte{0, 9, 216}:     "Fält Communications AB",
+       [3]byte{0, 9, 217}:     "Neoscale Systems, Inc",
+       [3]byte{0, 9, 218}:     "Control Module Inc.",
+       [3]byte{0, 9, 219}:     "eSpace",
+       [3]byte{0, 9, 220}:     "Galaxis Technology AG",
+       [3]byte{0, 9, 221}:     "Mavin Technology Inc.",
+       [3]byte{0, 9, 222}:     "Samjin Information & Communications Co., Ltd.",
+       [3]byte{0, 9, 223}:     "Vestel Komunikasyon Sanayi ve Ticaret A.S.",
+       [3]byte{0, 9, 224}:     "XEMICS S.A.",
+       [3]byte{0, 9, 225}:     "Gemtek Technology Co., Ltd.",
+       [3]byte{0, 9, 226}:     "Sinbon Electronics Co., Ltd.",
+       [3]byte{0, 9, 227}:     "Angel Iglesias S.A.",
+       [3]byte{0, 9, 228}:     "K Tech Infosystem Inc.",
+       [3]byte{0, 9, 229}:     "Hottinger Baldwin Messtechnik GmbH",
+       [3]byte{0, 9, 230}:     "Cyber Switching Inc.",
+       [3]byte{0, 9, 231}:     "ADC Techonology",
+       [3]byte{0, 9, 232}:     "Cisco Systems, Inc",
+       [3]byte{0, 9, 233}:     "Cisco Systems, Inc",
+       [3]byte{0, 9, 234}:     "YEM Inc.",
+       [3]byte{0, 9, 235}:     "HuMANDATA LTD.",
+       [3]byte{0, 9, 236}:     "Daktronics, Inc.",
+       [3]byte{0, 9, 237}:     "CipherOptics",
+       [3]byte{0, 9, 238}:     "MEIKYO ELECTRIC CO.,LTD",
+       [3]byte{0, 9, 239}:     "Vocera Communications",
+       [3]byte{0, 9, 240}:     "Shimizu Technology Inc.",
+       [3]byte{0, 9, 241}:     "Yamaki Electric Corporation",
+       [3]byte{0, 9, 242}:     "Cohu, Inc., Electronics Division",
+       [3]byte{0, 9, 243}:     "WELL Communication Corp.",
+       [3]byte{0, 9, 244}:     "Alcon Laboratories, Inc.",
+       [3]byte{0, 9, 245}:     "Emerson Network Power Co.,Ltd",
+       [3]byte{0, 9, 246}:     "Shenzhen Eastern Digital Tech Ltd.",
+       [3]byte{0, 9, 247}:     "SED, a division of Calian",
+       [3]byte{0, 9, 248}:     "UNIMO TECHNOLOGY CO., LTD.",
+       [3]byte{0, 9, 249}:     "ART JAPAN CO., LTD.",
+       [3]byte{0, 9, 251}:     "Philips Patient Monitoring",
+       [3]byte{0, 9, 252}:     "IPFLEX Inc.",
+       [3]byte{0, 9, 253}:     "Ubinetics Limited",
+       [3]byte{0, 9, 254}:     "Daisy Technologies, Inc.",
+       [3]byte{0, 9, 255}:     "X.net 2000 GmbH",
+       [3]byte{0, 10, 0}:      "Mediatek Corp.",
+       [3]byte{0, 10, 1}:      "SOHOware, Inc.",
+       [3]byte{0, 10, 2}:      "ANNSO CO., LTD.",
+       [3]byte{0, 10, 3}:      "ENDESA SERVICIOS, S.L.",
+       [3]byte{0, 10, 4}:      "3Com Ltd",
+       [3]byte{0, 10, 5}:      "Widax Corp.",
+       [3]byte{0, 10, 6}:      "Teledex LLC",
+       [3]byte{0, 10, 7}:      "WebWayOne Ltd",
+       [3]byte{0, 10, 8}:      "Alpine Electronics, Inc.",
+       [3]byte{0, 10, 9}:      "TaraCom Integrated Products, Inc.",
+       [3]byte{0, 10, 10}:     "SUNIX Co., Ltd.",
+       [3]byte{0, 10, 11}:     "Sealevel Systems, Inc.",
+       [3]byte{0, 10, 12}:     "Scientific Research Corporation",
+       [3]byte{0, 10, 13}:     "FCI Deutschland GmbH",
+       [3]byte{0, 10, 14}:     "Invivo Research Inc.",
+       [3]byte{0, 10, 15}:     "Ilryung Telesys, Inc",
+       [3]byte{0, 10, 16}:     "FAST media integrations AG",
+       [3]byte{0, 10, 17}:     "ExPet Technologies, Inc",
+       [3]byte{0, 10, 18}:     "Azylex Technology, Inc",
+       [3]byte{0, 10, 19}:     "Honeywell Video Systems",
+       [3]byte{0, 10, 20}:     "TECO a.s.",
+       [3]byte{0, 10, 21}:     "Silicon Data, Inc",
+       [3]byte{0, 10, 22}:     "Lassen Research",
+       [3]byte{0, 10, 23}:     "NESTAR COMMUNICATIONS, INC",
+       [3]byte{0, 10, 24}:     "Vichel Inc.",
+       [3]byte{0, 10, 25}:     "Valere Power, Inc.",
+       [3]byte{0, 10, 26}:     "Imerge Ltd",
+       [3]byte{0, 10, 27}:     "Stream Labs",
+       [3]byte{0, 10, 28}:     "Bridge Information Co., Ltd.",
+       [3]byte{0, 10, 29}:     "Optical Communications Products Inc.",
+       [3]byte{0, 10, 30}:     "Red-M Products Limited",
+       [3]byte{0, 10, 31}:     "ART WARE Telecommunication Co., Ltd.",
+       [3]byte{0, 10, 32}:     "SVA Networks, Inc.",
+       [3]byte{0, 10, 33}:     "Integra Telecom Co. Ltd",
+       [3]byte{0, 10, 34}:     "Amperion Inc",
+       [3]byte{0, 10, 35}:     "Parama Networks Inc",
+       [3]byte{0, 10, 36}:     "Octave Communications",
+       [3]byte{0, 10, 37}:     "CERAGON NETWORKS",
+       [3]byte{0, 10, 38}:     "CEIA S.p.A.",
+       [3]byte{0, 10, 39}:     "Apple, Inc.",
+       [3]byte{0, 10, 40}:     "Motorola",
+       [3]byte{0, 10, 41}:     "Pan Dacom Networking AG",
+       [3]byte{0, 10, 42}:     "QSI Systems Inc.",
+       [3]byte{0, 10, 43}:     "Etherstuff",
+       [3]byte{0, 10, 44}:     "Active Tchnology Corporation",
+       [3]byte{0, 10, 45}:     "Cabot Communications Limited",
+       [3]byte{0, 10, 46}:     "MAPLE NETWORKS CO., LTD",
+       [3]byte{0, 10, 47}:     "Artnix Inc.",
+       [3]byte{0, 10, 48}:     "Visteon Corporation",
+       [3]byte{0, 10, 49}:     "HCV Consulting",
+       [3]byte{0, 10, 50}:     "Xsido Corporation",
+       [3]byte{0, 10, 51}:     "Emulex Corporation",
+       [3]byte{0, 10, 52}:     "Identicard Systems Incorporated",
+       [3]byte{0, 10, 53}:     "Xilinx",
+       [3]byte{0, 10, 54}:     "Synelec Telecom Multimedia",
+       [3]byte{0, 10, 55}:     "Procera Networks, Inc.",
+       [3]byte{0, 10, 56}:     "Apani Networks",
+       [3]byte{0, 10, 57}:     "LoPA Information Technology",
+       [3]byte{0, 10, 58}:     "J-THREE INTERNATIONAL Holding Co., Ltd.",
+       [3]byte{0, 10, 59}:     "GCT Semiconductor, Inc",
+       [3]byte{0, 10, 60}:     "Enerpoint Ltd.",
+       [3]byte{0, 10, 61}:     "Elo Sistemas Eletronicos S.A.",
+       [3]byte{0, 10, 62}:     "EADS Telecom",
+       [3]byte{0, 10, 63}:     "Data East Corporation",
+       [3]byte{0, 10, 64}:     "Crown Audio -- Harmanm International",
+       [3]byte{0, 10, 65}:     "Cisco Systems, Inc",
+       [3]byte{0, 10, 66}:     "Cisco Systems, Inc",
+       [3]byte{0, 10, 67}:     "Chunghwa Telecom Co., Ltd.",
+       [3]byte{0, 10, 68}:     "Avery Dennison Deutschland GmbH",
+       [3]byte{0, 10, 69}:     "Audio-Technica Corp.",
+       [3]byte{0, 10, 70}:     "ARO WELDING TECHNOLOGIES SAS",
+       [3]byte{0, 10, 71}:     "Allied Vision Technologies",
+       [3]byte{0, 10, 72}:     "Albatron Technology",
+       [3]byte{0, 10, 73}:     "F5 Networks, Inc.",
+       [3]byte{0, 10, 74}:     "Targa Systems Ltd.",
+       [3]byte{0, 10, 75}:     "DataPower Technology, Inc.",
+       [3]byte{0, 10, 76}:     "Molecular Devices Corporation",
+       [3]byte{0, 10, 77}:     "Noritz Corporation",
+       [3]byte{0, 10, 78}:     "UNITEK Electronics INC.",
+       [3]byte{0, 10, 79}:     "Brain Boxes Limited",
+       [3]byte{0, 10, 80}:     "REMOTEK CORPORATION",
+       [3]byte{0, 10, 81}:     "GyroSignal Technology Co., Ltd.",
+       [3]byte{0, 10, 82}:     "AsiaRF Ltd.",
+       [3]byte{0, 10, 83}:     "Intronics, Incorporated",
+       [3]byte{0, 10, 84}:     "Laguna Hills, Inc.",
+       [3]byte{0, 10, 85}:     "MARKEM Corporation",
+       [3]byte{0, 10, 86}:     "HITACHI Maxell Ltd.",
+       [3]byte{0, 10, 87}:     "Hewlett Packard",
+       [3]byte{0, 10, 88}:     "Freyer & Siegel Elektronik GmbH & Co. KG",
+       [3]byte{0, 10, 89}:     "HW server",
+       [3]byte{0, 10, 90}:     "GreenNET Technologies Co.,Ltd.",
+       [3]byte{0, 10, 91}:     "Power-One as",
+       [3]byte{0, 10, 92}:     "Carel s.p.a.",
+       [3]byte{0, 10, 93}:     "FingerTec Worldwide Sdn Bhd",
+       [3]byte{0, 10, 94}:     "3COM Corporation",
+       [3]byte{0, 10, 95}:     "almedio inc.",
+       [3]byte{0, 10, 96}:     "Autostar Technology Pte Ltd",
+       [3]byte{0, 10, 97}:     "Cellinx Systems Inc.",
+       [3]byte{0, 10, 98}:     "Crinis Networks, Inc.",
+       [3]byte{0, 10, 99}:     "DHD GmbH",
+       [3]byte{0, 10, 100}:    "Eracom Technologies",
+       [3]byte{0, 10, 101}:    "GentechMedia.co.,ltd.",
+       [3]byte{0, 10, 102}:    "MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.",
+       [3]byte{0, 10, 103}:    "OngCorp",
+       [3]byte{0, 10, 104}:    "Solarflare Communications Inc",
+       [3]byte{0, 10, 105}:    "SUNNY bell Technology Co., Ltd.",
+       [3]byte{0, 10, 106}:    "SVM Microwaves s.r.o.",
+       [3]byte{0, 10, 107}:    "Tadiran Telecom Business Systems LTD",
+       [3]byte{0, 10, 108}:    "Walchem Corporation",
+       [3]byte{0, 10, 109}:    "EKS Elektronikservice GmbH",
+       [3]byte{0, 10, 110}:    "Harmonic, Inc",
+       [3]byte{0, 10, 111}:    "ZyFLEX Technologies Inc",
+       [3]byte{0, 10, 112}:    "MPLS Forum",
+       [3]byte{0, 10, 113}:    "Avrio Technologies, Inc",
+       [3]byte{0, 10, 114}:    "STEC, INC.",
+       [3]byte{0, 10, 115}:    "Scientific Atlanta",
+       [3]byte{0, 10, 116}:    "Manticom Networks Inc.",
+       [3]byte{0, 10, 117}:    "Caterpillar, Inc",
+       [3]byte{0, 10, 118}:    "Beida Jade Bird Huaguang Technology Co.,Ltd",
+       [3]byte{0, 10, 119}:    "Bluewire Technologies LLC",
+       [3]byte{0, 10, 120}:    "OLITEC",
+       [3]byte{0, 10, 121}:    "corega K.K",
+       [3]byte{0, 10, 122}:    "Kyoritsu Electric Co., Ltd.",
+       [3]byte{0, 10, 123}:    "Cornelius Consult",
+       [3]byte{0, 10, 124}:    "Tecton Ltd",
+       [3]byte{0, 10, 125}:    "Valo, Inc.",
+       [3]byte{0, 10, 126}:    "The Advantage Group",
+       [3]byte{0, 10, 127}:    "Teradon Industries, Inc",
+       [3]byte{0, 10, 128}:    "Telkonet Inc.",
+       [3]byte{0, 10, 129}:    "TEIMA Audiotex S.L.",
+       [3]byte{0, 10, 130}:    "TATSUTA SYSTEM ELECTRONICS CO.,LTD.",
+       [3]byte{0, 10, 131}:    "SALTO SYSTEMS S.L.",
+       [3]byte{0, 10, 132}:    "Rainsun Enterprise Co., Ltd.",
+       [3]byte{0, 10, 133}:    "PLAT'C2,Inc",
+       [3]byte{0, 10, 134}:    "Lenze",
+       [3]byte{0, 10, 135}:    "Integrated Micromachines Inc.",
+       [3]byte{0, 10, 136}:    "InCypher S.A.",
+       [3]byte{0, 10, 137}:    "Creval Systems, Inc.",
+       [3]byte{0, 10, 138}:    "Cisco Systems, Inc",
+       [3]byte{0, 10, 139}:    "Cisco Systems, Inc",
+       [3]byte{0, 10, 140}:    "Guardware Systems Ltd.",
+       [3]byte{0, 10, 141}:    "EUROTHERM LIMITED",
+       [3]byte{0, 10, 142}:    "Invacom Ltd",
+       [3]byte{0, 10, 143}:    "Aska International Inc.",
+       [3]byte{0, 10, 144}:    "Bayside Interactive, Inc.",
+       [3]byte{0, 10, 145}:    "HemoCue AB",
+       [3]byte{0, 10, 146}:    "Presonus Corporation",
+       [3]byte{0, 10, 147}:    "W2 Networks, Inc.",
+       [3]byte{0, 10, 148}:    "ShangHai cellink CO., LTD",
+       [3]byte{0, 10, 149}:    "Apple, Inc.",
+       [3]byte{0, 10, 150}:    "MEWTEL TECHNOLOGY INC.",
+       [3]byte{0, 10, 151}:    "SONICblue, Inc.",
+       [3]byte{0, 10, 152}:    "M+F Gwinner GmbH & Co",
+       [3]byte{0, 10, 153}:    "Calamp Wireless Networks Inc",
+       [3]byte{0, 10, 154}:    "Aiptek International Inc",
+       [3]byte{0, 10, 155}:    "TB Group Inc",
+       [3]byte{0, 10, 156}:    "Server Technology, Inc.",
+       [3]byte{0, 10, 157}:    "King Young Technology Co. Ltd.",
+       [3]byte{0, 10, 158}:    "BroadWeb Corportation",
+       [3]byte{0, 10, 159}:    "Pannaway Technologies, Inc.",
+       [3]byte{0, 10, 160}:    "Cedar Point Communications",
+       [3]byte{0, 10, 161}:    "V V S Limited",
+       [3]byte{0, 10, 162}:    "SYSTEK INC.",
+       [3]byte{0, 10, 163}:    "SHIMAFUJI ELECTRIC CO.,LTD.",
+       [3]byte{0, 10, 164}:    "SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD",
+       [3]byte{0, 10, 165}:    "MAXLINK INDUSTRIES LIMITED",
+       [3]byte{0, 10, 166}:    "Hochiki Corporation",
+       [3]byte{0, 10, 167}:    "FEI Electron Optics",
+       [3]byte{0, 10, 168}:    "ePipe Pty. Ltd.",
+       [3]byte{0, 10, 169}:    "Brooks Automation GmbH",
+       [3]byte{0, 10, 170}:    "AltiGen Communications Inc.",
+       [3]byte{0, 10, 171}:    "Toyota Technical Development Corporation",
+       [3]byte{0, 10, 172}:    "TerraTec Electronic GmbH",
+       [3]byte{0, 10, 173}:    "Stargames Corporation",
+       [3]byte{0, 10, 174}:    "Rosemount Process Analytical",
+       [3]byte{0, 10, 175}:    "Pipal Systems",
+       [3]byte{0, 10, 176}:    "LOYTEC electronics GmbH",
+       [3]byte{0, 10, 177}:    "GENETEC Corporation",
+       [3]byte{0, 10, 178}:    "Fresnel Wireless Systems",
+       [3]byte{0, 10, 179}:    "Fa. GIRA",
+       [3]byte{0, 10, 180}:    "ETIC Telecommunications",
+       [3]byte{0, 10, 181}:    "Digital Electronic Network",
+       [3]byte{0, 10, 182}:    "COMPUNETIX, INC",
+       [3]byte{0, 10, 183}:    "Cisco Systems, Inc",
+       [3]byte{0, 10, 184}:    "Cisco Systems, Inc",
+       [3]byte{0, 10, 185}:    "Astera Technologies Corp.",
+       [3]byte{0, 10, 186}:    "Arcon Technology Limited",
+       [3]byte{0, 10, 187}:    "Taiwan Secom Co,. Ltd",
+       [3]byte{0, 10, 188}:    "Seabridge Ltd.",
+       [3]byte{0, 10, 189}:    "Rupprecht & Patashnick Co.",
+       [3]byte{0, 10, 190}:    "OPNET Technologies CO., LTD.",
+       [3]byte{0, 10, 191}:    "HIROTA SS",
+       [3]byte{0, 10, 192}:    "Fuyoh Video Industry CO., LTD.",
+       [3]byte{0, 10, 193}:    "Futuretel",
+       [3]byte{0, 10, 194}:    "Wuhan FiberHome Digital Technology Co.,Ltd.",
+       [3]byte{0, 10, 195}:    "eM Technics Co., Ltd.",
+       [3]byte{0, 10, 196}:    "Daewoo Teletech Co., Ltd",
+       [3]byte{0, 10, 197}:    "Color Kinetics",
+       [3]byte{0, 10, 198}:    "Overture Networks.",
+       [3]byte{0, 10, 199}:    "Unication Group",
+       [3]byte{0, 10, 200}:    "ZPSYS CO.,LTD. (Planning&Management)",
+       [3]byte{0, 10, 201}:    "Zambeel Inc",
+       [3]byte{0, 10, 202}:    "YOKOYAMA SHOKAI CO.,Ltd.",
+       [3]byte{0, 10, 203}:    "XPAK MSA Group",
+       [3]byte{0, 10, 204}:    "Winnow Networks, Inc.",
+       [3]byte{0, 10, 205}:    "Sunrich Technology Limited",
+       [3]byte{0, 10, 206}:    "RADIANTECH, INC.",
+       [3]byte{0, 10, 207}:    "PROVIDEO Multimedia Co. Ltd.",
+       [3]byte{0, 10, 208}:    "Niigata Develoment Center,  F.I.T. Co., Ltd.",
+       [3]byte{0, 10, 209}:    "MWS",
+       [3]byte{0, 10, 210}:    "JEPICO Corporation",
+       [3]byte{0, 10, 211}:    "INITECH Co., Ltd",
+       [3]byte{0, 10, 212}:    "CoreBell Systems Inc.",
+       [3]byte{0, 10, 213}:    "Brainchild Electronic Co., Ltd.",
+       [3]byte{0, 10, 214}:    "BeamReach Networks",
+       [3]byte{0, 10, 215}:    "Origin ELECTRIC CO.,LTD.",
+       [3]byte{0, 10, 216}:    "IPCserv Technology Corp.",
+       [3]byte{0, 10, 217}:    "Sony Mobile Communications AB",
+       [3]byte{0, 10, 218}:    "Vindicator Technologies",
+       [3]byte{0, 10, 219}:    "SkyPilot Network, Inc",
+       [3]byte{0, 10, 220}:    "RuggedCom Inc.",
+       [3]byte{0, 10, 221}:    "Allworx Corp.",
+       [3]byte{0, 10, 222}:    "Happy Communication Co., Ltd.",
+       [3]byte{0, 10, 223}:    "Gennum Corporation",
+       [3]byte{0, 10, 224}:    "Fujitsu Softek",
+       [3]byte{0, 10, 225}:    "EG Technology",
+       [3]byte{0, 10, 226}:    "Binatone Electronics International, Ltd",
+       [3]byte{0, 10, 227}:    "YANG MEI TECHNOLOGY CO., LTD",
+       [3]byte{0, 10, 228}:    "Wistron Corporation",
+       [3]byte{0, 10, 229}:    "ScottCare Corporation",
+       [3]byte{0, 10, 230}:    "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 10, 231}:    "ELIOP S.A.",
+       [3]byte{0, 10, 232}:    "Cathay Roxus Information Technology Co. LTD",
+       [3]byte{0, 10, 233}:    "AirVast Technology Inc.",
+       [3]byte{0, 10, 234}:    "ADAM ELEKTRONIK LTD. ŞTI",
+       [3]byte{0, 10, 235}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 10, 236}:    "Koatsu Gas Kogyo Co., Ltd.",
+       [3]byte{0, 10, 237}:    "HARTING Electronics GmbH",
+       [3]byte{0, 10, 238}:    "GCD Hard- & Software GmbH",
+       [3]byte{0, 10, 239}:    "OTRUM ASA",
+       [3]byte{0, 10, 240}:    "SHIN-OH ELECTRONICS CO., LTD. R&D",
+       [3]byte{0, 10, 241}:    "Clarity Design, Inc.",
+       [3]byte{0, 10, 242}:    "NeoAxiom Corp.",
+       [3]byte{0, 10, 243}:    "Cisco Systems, Inc",
+       [3]byte{0, 10, 244}:    "Cisco Systems, Inc",
+       [3]byte{0, 10, 245}:    "Airgo Networks, Inc.",
+       [3]byte{0, 10, 246}:    "Emerson Climate Technologies Retail Solutions, Inc.",
+       [3]byte{0, 10, 247}:    "Broadcom",
+       [3]byte{0, 10, 248}:    "American Telecare Inc.",
+       [3]byte{0, 10, 249}:    "HiConnect, Inc.",
+       [3]byte{0, 10, 250}:    "Traverse Technologies Australia",
+       [3]byte{0, 10, 251}:    "Ambri Limited",
+       [3]byte{0, 10, 252}:    "Core Tec Communications, LLC",
+       [3]byte{0, 10, 253}:    "Kentec Electronics",
+       [3]byte{0, 10, 254}:    "NovaPal Ltd",
+       [3]byte{0, 10, 255}:    "Kilchherr Elektronik AG",
+       [3]byte{0, 11, 0}:      "FUJIAN START COMPUTER EQUIPMENT CO.,LTD",
+       [3]byte{0, 11, 1}:      "DAIICHI ELECTRONICS CO., LTD.",
+       [3]byte{0, 11, 2}:      "Dallmeier electronic",
+       [3]byte{0, 11, 3}:      "Taekwang Industrial Co., Ltd",
+       [3]byte{0, 11, 4}:      "Volktek Corporation",
+       [3]byte{0, 11, 5}:      "Pacific Broadband Networks",
+       [3]byte{0, 11, 6}:      "ARRIS Group, Inc.",
+       [3]byte{0, 11, 7}:      "Voxpath Networks",
+       [3]byte{0, 11, 8}:      "Pillar Data Systems",
+       [3]byte{0, 11, 9}:      "Ifoundry Systems Singapore",
+       [3]byte{0, 11, 10}:     "dBm Optics",
+       [3]byte{0, 11, 11}:     "Corrent Corporation",
+       [3]byte{0, 11, 12}:     "Agile Systems Inc.",
+       [3]byte{0, 11, 13}:     "Air2U, Inc.",
+       [3]byte{0, 11, 14}:     "Trapeze Networks",
+       [3]byte{0, 11, 15}:     "Bosch Rexroth",
+       [3]byte{0, 11, 16}:     "11wave Technonlogy Co.,Ltd",
+       [3]byte{0, 11, 17}:     "HIMEJI ABC TRADING CO.,LTD.",
+       [3]byte{0, 11, 18}:     "NURI Telecom Co., Ltd.",
+       [3]byte{0, 11, 19}:     "ZETRON INC",
+       [3]byte{0, 11, 20}:     "ViewSonic Corporation",
+       [3]byte{0, 11, 21}:     "Platypus Technology",
+       [3]byte{0, 11, 22}:     "Communication Machinery Corporation",
+       [3]byte{0, 11, 23}:     "MKS Instruments",
+       [3]byte{0, 11, 24}:     "Private",
+       [3]byte{0, 11, 25}:     "Vernier Networks, Inc.",
+       [3]byte{0, 11, 26}:     "Industrial Defender, Inc.",
+       [3]byte{0, 11, 27}:     "Systronix, Inc.",
+       [3]byte{0, 11, 28}:     "SIBCO bv",
+       [3]byte{0, 11, 29}:     "LayerZero Power Systems, Inc.",
+       [3]byte{0, 11, 30}:     "KAPPA opto-electronics GmbH",
+       [3]byte{0, 11, 31}:     "I CON Computer Co.",
+       [3]byte{0, 11, 32}:     "Hirata corporation",
+       [3]byte{0, 11, 33}:     "G-Star Communications Inc.",
+       [3]byte{0, 11, 34}:     "Environmental Systems and Services",
+       [3]byte{0, 11, 35}:     "Siemens Subscriber Networks",
+       [3]byte{0, 11, 36}:     "AirLogic",
+       [3]byte{0, 11, 37}:     "Aeluros",
+       [3]byte{0, 11, 38}:     "Wetek Corporation",
+       [3]byte{0, 11, 39}:     "Scion Corporation",
+       [3]byte{0, 11, 40}:     "Quatech Inc.",
+       [3]byte{0, 11, 41}:     "LS(LG) Industrial Systems co.,Ltd",
+       [3]byte{0, 11, 42}:     "HOWTEL Co., Ltd.",
+       [3]byte{0, 11, 43}:     "HOSTNET CORPORATION",
+       [3]byte{0, 11, 44}:     "Eiki Industrial Co. Ltd.",
+       [3]byte{0, 11, 45}:     "Danfoss Inc.",
+       [3]byte{0, 11, 46}:     "Cal-Comp Electronics & Communications Company Ltd.",
+       [3]byte{0, 11, 47}:     "bplan GmbH",
+       [3]byte{0, 11, 48}:     "Beijing Gongye Science & Technology Co.,Ltd",
+       [3]byte{0, 11, 49}:     "Yantai ZhiYang Scientific and technology industry CO., LTD",
+       [3]byte{0, 11, 50}:     "VORMETRIC, INC.",
+       [3]byte{0, 11, 51}:     "Vivato Technologies",
+       [3]byte{0, 11, 52}:     "ShangHai Broadband Technologies CO.LTD",
+       [3]byte{0, 11, 53}:     "Quad Bit System co., Ltd.",
+       [3]byte{0, 11, 54}:     "Productivity Systems, Inc.",
+       [3]byte{0, 11, 55}:     "MANUFACTURE DES MONTRES ROLEX SA",
+       [3]byte{0, 11, 56}:     "Knürr GmbH",
+       [3]byte{0, 11, 57}:     "Keisoku Giken Co.,Ltd.",
+       [3]byte{0, 11, 58}:     "QuStream Corporation",
+       [3]byte{0, 11, 59}:     "devolo AG",
+       [3]byte{0, 11, 60}:     "Cygnal Integrated Products, Inc.",
+       [3]byte{0, 11, 61}:     "CONTAL OK Ltd.",
+       [3]byte{0, 11, 62}:     "BittWare, Inc",
+       [3]byte{0, 11, 63}:     "Anthology Solutions Inc.",
+       [3]byte{0, 11, 64}:     "Oclaro",
+       [3]byte{0, 11, 65}:     "Ing. Büro Dr. Beutlhauser",
+       [3]byte{0, 11, 66}:     "commax Co., Ltd.",
+       [3]byte{0, 11, 67}:     "Microscan Systems, Inc.",
+       [3]byte{0, 11, 68}:     "Concord IDea Corp.",
+       [3]byte{0, 11, 69}:     "Cisco Systems, Inc",
+       [3]byte{0, 11, 70}:     "Cisco Systems, Inc",
+       [3]byte{0, 11, 71}:     "Advanced Energy",
+       [3]byte{0, 11, 72}:     "sofrel",
+       [3]byte{0, 11, 73}:     "RF-Link System Inc.",
+       [3]byte{0, 11, 74}:     "Visimetrics (UK) Ltd",
+       [3]byte{0, 11, 75}:     "VISIOWAVE SA",
+       [3]byte{0, 11, 76}:     "Clarion (M) Sdn Bhd",
+       [3]byte{0, 11, 77}:     "Emuzed",
+       [3]byte{0, 11, 78}:     "VertexRSI, General Dynamics SatCOM Technologies, Inc.",
+       [3]byte{0, 11, 79}:     "Verifone",
+       [3]byte{0, 11, 80}:     "Oxygnet",
+       [3]byte{0, 11, 81}:     "Micetek International Inc.",
+       [3]byte{0, 11, 82}:     "JOYMAX ELECTRONICS CO. LTD.",
+       [3]byte{0, 11, 83}:     "INITIUM Co., Ltd.",
+       [3]byte{0, 11, 84}:     "BiTMICRO Networks, Inc.",
+       [3]byte{0, 11, 85}:     "ADInstruments",
+       [3]byte{0, 11, 86}:     "Cybernetics",
+       [3]byte{0, 11, 87}:     "Silicon Laboratories",
+       [3]byte{0, 11, 88}:     "Astronautics C.A  LTD",
+       [3]byte{0, 11, 89}:     "ScriptPro, LLC",
+       [3]byte{0, 11, 90}:     "HyperEdge",
+       [3]byte{0, 11, 91}:     "Rincon Research Corporation",
+       [3]byte{0, 11, 92}:     "Newtech Co.,Ltd",
+       [3]byte{0, 11, 93}:     "FUJITSU LIMITED",
+       [3]byte{0, 11, 94}:     "Audio Engineering Society Inc.",
+       [3]byte{0, 11, 95}:     "Cisco Systems, Inc",
+       [3]byte{0, 11, 96}:     "Cisco Systems, Inc",
+       [3]byte{0, 11, 97}:     "Friedrich Lütze GmbH & Co. KG",
+       [3]byte{0, 11, 98}:     "ib-mohnen KG",
+       [3]byte{0, 11, 99}:     "Kaleidescape",
+       [3]byte{0, 11, 100}:    "Kieback & Peter GmbH & Co KG",
+       [3]byte{0, 11, 101}:    "Sy.A.C. srl",
+       [3]byte{0, 11, 102}:    "Teralink Communications",
+       [3]byte{0, 11, 103}:    "Topview Technology Corporation",
+       [3]byte{0, 11, 104}:    "Addvalue Communications Pte Ltd",
+       [3]byte{0, 11, 105}:    "Franke Finland Oy",
+       [3]byte{0, 11, 106}:    "Asiarock Technology Limited",
+       [3]byte{0, 11, 107}:    "Wistron Neweb Corporation",
+       [3]byte{0, 11, 108}:    "Sychip Inc.",
+       [3]byte{0, 11, 109}:    "SOLECTRON JAPAN NAKANIIDA",
+       [3]byte{0, 11, 110}:    "Neff Instrument Corp.",
+       [3]byte{0, 11, 111}:    "Media Streaming Networks Inc",
+       [3]byte{0, 11, 112}:    "Load Technology, Inc.",
+       [3]byte{0, 11, 113}:    "Litchfield Communications Inc.",
+       [3]byte{0, 11, 114}:    "Lawo AG",
+       [3]byte{0, 11, 115}:    "Kodeos Communications",
+       [3]byte{0, 11, 116}:    "Kingwave Technology Co., Ltd.",
+       [3]byte{0, 11, 117}:    "Iosoft Ltd.",
+       [3]byte{0, 11, 118}:    "ET&T Technology Co. Ltd.",
+       [3]byte{0, 11, 119}:    "Cogent Systems, Inc.",
+       [3]byte{0, 11, 120}:    "TAIFATECH INC.",
+       [3]byte{0, 11, 121}:    "X-COM, Inc.",
+       [3]byte{0, 11, 122}:    "L-3 Linkabit",
+       [3]byte{0, 11, 123}:    "Test-Um Inc.",
+       [3]byte{0, 11, 124}:    "Telex Communications",
+       [3]byte{0, 11, 125}:    "SOLOMON EXTREME INTERNATIONAL LTD.",
+       [3]byte{0, 11, 126}:    "SAGINOMIYA Seisakusho Inc.",
+       [3]byte{0, 11, 127}:    "Align Engineering LLC",
+       [3]byte{0, 11, 128}:    "Lycium Networks",
+       [3]byte{0, 11, 129}:    "Kaparel Corporation",
+       [3]byte{0, 11, 130}:    "Grandstream Networks, Inc.",
+       [3]byte{0, 11, 131}:    "DATAWATT B.V.",
+       [3]byte{0, 11, 132}:    "BODET",
+       [3]byte{0, 11, 133}:    "Cisco Systems, Inc",
+       [3]byte{0, 11, 134}:    "Aruba Networks",
+       [3]byte{0, 11, 135}:    "American Reliance Inc.",
+       [3]byte{0, 11, 136}:    "Vidisco ltd.",
+       [3]byte{0, 11, 137}:    "Top Global Technology, Ltd.",
+       [3]byte{0, 11, 138}:    "MITEQ Inc.",
+       [3]byte{0, 11, 139}:    "KERAJET, S.A.",
+       [3]byte{0, 11, 140}:    "Flextronics",
+       [3]byte{0, 11, 141}:    "Avvio Networks",
+       [3]byte{0, 11, 142}:    "Ascent Corporation",
+       [3]byte{0, 11, 143}:    "AKITA ELECTRONICS SYSTEMS CO.,LTD.",
+       [3]byte{0, 11, 144}:    "ADVA Optical Networking Ltd.",
+       [3]byte{0, 11, 145}:    "Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH",
+       [3]byte{0, 11, 146}:    "Ascom Danmark A/S",
+       [3]byte{0, 11, 147}:    "Ritter Elektronik",
+       [3]byte{0, 11, 148}:    "Digital Monitoring Products, Inc.",
+       [3]byte{0, 11, 149}:    "eBet Gaming Systems Pty Ltd",
+       [3]byte{0, 11, 150}:    "Innotrac Diagnostics Oy",
+       [3]byte{0, 11, 151}:    "Matsushita Electric Industrial Co.,Ltd.",
+       [3]byte{0, 11, 152}:    "NiceTechVision",
+       [3]byte{0, 11, 153}:    "SensAble Technologies, Inc.",
+       [3]byte{0, 11, 154}:    "Shanghai Ulink Telecom Equipment Co. Ltd.",
+       [3]byte{0, 11, 155}:    "Sirius System Co, Ltd.",
+       [3]byte{0, 11, 156}:    "TriBeam Technologies, Inc.",
+       [3]byte{0, 11, 157}:    "TwinMOS Technologies Inc.",
+       [3]byte{0, 11, 158}:    "Yasing Technology Corp.",
+       [3]byte{0, 11, 159}:    "Neue ELSA GmbH",
+       [3]byte{0, 11, 160}:    "T&L Information Inc.",
+       [3]byte{0, 11, 161}:    "Fujikura Solutions Ltd.",
+       [3]byte{0, 11, 162}:    "Sumitomo Electric Industries,Ltd",
+       [3]byte{0, 11, 163}:    "Siemens AG, I&S",
+       [3]byte{0, 11, 164}:    "Shiron Satellite Communications Ltd. (1996)",
+       [3]byte{0, 11, 165}:    "Quasar Cipta Mandiri, PT",
+       [3]byte{0, 11, 166}:    "Miyakawa Electric Works Ltd.",
+       [3]byte{0, 11, 167}:    "Maranti Networks",
+       [3]byte{0, 11, 168}:    "HANBACK ELECTRONICS CO., LTD.",
+       [3]byte{0, 11, 169}:    "CloudShield Technologies, Inc.",
+       [3]byte{0, 11, 170}:    "Aiphone co.,Ltd",
+       [3]byte{0, 11, 171}:    "Advantech Technology (CHINA) Co., Ltd.",
+       [3]byte{0, 11, 172}:    "3Com Ltd",
+       [3]byte{0, 11, 173}:    "PC-PoS Inc.",
+       [3]byte{0, 11, 174}:    "Vitals System Inc.",
+       [3]byte{0, 11, 175}:    "WOOJU COMMUNICATIONS Co,.Ltd",
+       [3]byte{0, 11, 176}:    "Sysnet Telematica srl",
+       [3]byte{0, 11, 177}:    "Super Star Technology Co., Ltd.",
+       [3]byte{0, 11, 178}:    "SMALLBIG TECHNOLOGY",
+       [3]byte{0, 11, 179}:    "RiT technologies Ltd.",
+       [3]byte{0, 11, 180}:    "RDC Semiconductor Inc.,",
+       [3]byte{0, 11, 181}:    "nStor Technologies, Inc.",
+       [3]byte{0, 11, 182}:    "Metalligence Technology Corp.",
+       [3]byte{0, 11, 183}:    "Micro Systems Co.,Ltd.",
+       [3]byte{0, 11, 184}:    "Kihoku Electronic Co.",
+       [3]byte{0, 11, 185}:    "Imsys AB",
+       [3]byte{0, 11, 186}:    "Harmonic, Inc",
+       [3]byte{0, 11, 187}:    "Etin Systems Co., Ltd",
+       [3]byte{0, 11, 188}:    "En Garde Systems, Inc.",
+       [3]byte{0, 11, 189}:    "Connexionz Limited",
+       [3]byte{0, 11, 190}:    "Cisco Systems, Inc",
+       [3]byte{0, 11, 191}:    "Cisco Systems, Inc",
+       [3]byte{0, 11, 192}:    "China IWNComm Co., Ltd.",
+       [3]byte{0, 11, 193}:    "Bay Microsystems, Inc.",
+       [3]byte{0, 11, 194}:    "Corinex Communication Corp.",
+       [3]byte{0, 11, 195}:    "Multiplex, Inc.",
+       [3]byte{0, 11, 196}:    "BIOTRONIK GmbH & Co",
+       [3]byte{0, 11, 197}:    "SMC Networks, Inc.",
+       [3]byte{0, 11, 198}:    "ISAC, Inc.",
+       [3]byte{0, 11, 199}:    "ICET S.p.A.",
+       [3]byte{0, 11, 200}:    "AirFlow Networks",
+       [3]byte{0, 11, 201}:    "Electroline Equipment",
+       [3]byte{0, 11, 202}:    "DATAVAN TC",
+       [3]byte{0, 11, 203}:    "Fagor Automation , S. Coop",
+       [3]byte{0, 11, 204}:    "JUSAN, S.A.",
+       [3]byte{0, 11, 205}:    "Hewlett Packard",
+       [3]byte{0, 11, 206}:    "Free2move AB",
+       [3]byte{0, 11, 207}:    "AGFA NDT INC.",
+       [3]byte{0, 11, 208}:    "XiMeta Technology Americas Inc.",
+       [3]byte{0, 11, 209}:    "Aeronix, Inc.",
+       [3]byte{0, 11, 210}:    "Remopro Technology Inc.",
+       [3]byte{0, 11, 211}:    "cd3o",
+       [3]byte{0, 11, 212}:    "Beijing Wise Technology & Science Development Co.Ltd",
+       [3]byte{0, 11, 213}:    "Nvergence, Inc.",
+       [3]byte{0, 11, 214}:    "Paxton Access Ltd",
+       [3]byte{0, 11, 215}:    "DORMA Time + Access GmbH",
+       [3]byte{0, 11, 216}:    "Industrial Scientific Corp.",
+       [3]byte{0, 11, 217}:    "General Hydrogen",
+       [3]byte{0, 11, 218}:    "EyeCross Co.,Inc.",
+       [3]byte{0, 11, 219}:    "Dell Inc.",
+       [3]byte{0, 11, 220}:    "AKCP",
+       [3]byte{0, 11, 221}:    "TOHOKU RICOH Co., LTD.",
+       [3]byte{0, 11, 222}:    "TELDIX GmbH",
+       [3]byte{0, 11, 223}:    "Shenzhen RouterD Networks Limited",
+       [3]byte{0, 11, 224}:    "SercoNet Ltd.",
+       [3]byte{0, 11, 225}:    "Nokia NET Product Operations",
+       [3]byte{0, 11, 226}:    "Lumenera Corporation",
+       [3]byte{0, 11, 227}:    "Key Stream Co., Ltd.",
+       [3]byte{0, 11, 228}:    "Hosiden Corporation",
+       [3]byte{0, 11, 229}:    "HIMS International Corporation",
+       [3]byte{0, 11, 230}:    "Datel Electronics",
+       [3]byte{0, 11, 231}:    "COMFLUX TECHNOLOGY INC.",
+       [3]byte{0, 11, 232}:    "AOIP",
+       [3]byte{0, 11, 233}:    "Actel Corporation",
+       [3]byte{0, 11, 234}:    "Zultys Technologies",
+       [3]byte{0, 11, 235}:    "Systegra AG",
+       [3]byte{0, 11, 236}:    "NIPPON ELECTRIC INSTRUMENT, INC.",
+       [3]byte{0, 11, 237}:    "ELM Inc.",
+       [3]byte{0, 11, 238}:    "inc.jet, Incorporated",
+       [3]byte{0, 11, 239}:    "Code Corporation",
+       [3]byte{0, 11, 240}:    "MoTEX Products Co., Ltd.",
+       [3]byte{0, 11, 241}:    "LAP Laser Applikations",
+       [3]byte{0, 11, 242}:    "Chih-Kan Technology Co., Ltd.",
+       [3]byte{0, 11, 243}:    "BAE SYSTEMS",
+       [3]byte{0, 11, 244}:    "Private",
+       [3]byte{0, 11, 245}:    "Shanghai Sibo Telecom Technology Co.,Ltd",
+       [3]byte{0, 11, 246}:    "Nitgen Co., Ltd",
+       [3]byte{0, 11, 247}:    "NIDEK CO.,LTD",
+       [3]byte{0, 11, 248}:    "Infinera",
+       [3]byte{0, 11, 249}:    "Gemstone Communications, Inc.",
+       [3]byte{0, 11, 250}:    "EXEMYS SRL",
+       [3]byte{0, 11, 251}:    "D-NET International Corporation",
+       [3]byte{0, 11, 252}:    "Cisco Systems, Inc",
+       [3]byte{0, 11, 253}:    "Cisco Systems, Inc",
+       [3]byte{0, 11, 254}:    "CASTEL Broadband Limited",
+       [3]byte{0, 11, 255}:    "Berkeley Camera Engineering",
+       [3]byte{0, 12, 0}:      "BEB Industrie-Elektronik AG",
+       [3]byte{0, 12, 1}:      "Abatron AG",
+       [3]byte{0, 12, 2}:      "ABB Oy",
+       [3]byte{0, 12, 3}:      "HDMI Licensing, LLC",
+       [3]byte{0, 12, 4}:      "Tecnova",
+       [3]byte{0, 12, 5}:      "RPA Reserch Co., Ltd.",
+       [3]byte{0, 12, 6}:      "Nixvue Systems  Pte Ltd",
+       [3]byte{0, 12, 7}:      "Iftest AG",
+       [3]byte{0, 12, 8}:      "HUMEX Technologies Corp.",
+       [3]byte{0, 12, 9}:      "Hitachi IE Systems Co., Ltd",
+       [3]byte{0, 12, 10}:     "Guangdong Province Electronic Technology Research Institute",
+       [3]byte{0, 12, 11}:     "Broadbus Technologies",
+       [3]byte{0, 12, 12}:     "APPRO TECHNOLOGY INC.",
+       [3]byte{0, 12, 13}:     "Communications & Power Industries / Satcom Division",
+       [3]byte{0, 12, 14}:     "XtremeSpectrum, Inc.",
+       [3]byte{0, 12, 15}:     "Techno-One Co., Ltd",
+       [3]byte{0, 12, 16}:     "PNI Corporation",
+       [3]byte{0, 12, 17}:     "NIPPON DEMPA CO.,LTD.",
+       [3]byte{0, 12, 18}:     "Micro-Optronic-Messtechnik GmbH",
+       [3]byte{0, 12, 19}:     "MediaQ",
+       [3]byte{0, 12, 20}:     "Diagnostic Instruments, Inc.",
+       [3]byte{0, 12, 21}:     "CyberPower Systems, Inc.",
+       [3]byte{0, 12, 22}:     "Concorde Microsystems Inc.",
+       [3]byte{0, 12, 23}:     "AJA Video Systems Inc",
+       [3]byte{0, 12, 24}:     "Zenisu Keisoku Inc.",
+       [3]byte{0, 12, 25}:     "Telio Communications GmbH",
+       [3]byte{0, 12, 26}:     "Quest Technical Solutions Inc.",
+       [3]byte{0, 12, 27}:     "ORACOM Co, Ltd.",
+       [3]byte{0, 12, 28}:     "MicroWeb Co., Ltd.",
+       [3]byte{0, 12, 29}:     "Mettler & Fuchs AG",
+       [3]byte{0, 12, 30}:     "Global Cache",
+       [3]byte{0, 12, 31}:     "Glimmerglass Networks",
+       [3]byte{0, 12, 32}:     "Fi WIn, Inc.",
+       [3]byte{0, 12, 33}:     "Faculty of Science and Technology, Keio University",
+       [3]byte{0, 12, 34}:     "Double D Electronics Ltd",
+       [3]byte{0, 12, 35}:     "Beijing Lanchuan Tech. Co., Ltd.",
+       [3]byte{0, 12, 36}:     "ANATOR",
+       [3]byte{0, 12, 37}:     "Allied Telesis Labs, Inc.",
+       [3]byte{0, 12, 38}:     "Weintek Labs. Inc.",
+       [3]byte{0, 12, 39}:     "Sammy Corporation",
+       [3]byte{0, 12, 40}:     "RIFATRON",
+       [3]byte{0, 12, 41}:     "VMware, Inc.",
+       [3]byte{0, 12, 42}:     "OCTTEL Communication Co., Ltd.",
+       [3]byte{0, 12, 43}:     "ELIAS Technology, Inc.",
+       [3]byte{0, 12, 44}:     "Enwiser Inc.",
+       [3]byte{0, 12, 45}:     "FullWave Technology Co., Ltd.",
+       [3]byte{0, 12, 46}:     "Openet information technology(shenzhen) Co., Ltd.",
+       [3]byte{0, 12, 47}:     "SeorimTechnology Co.,Ltd.",
+       [3]byte{0, 12, 48}:     "Cisco Systems, Inc",
+       [3]byte{0, 12, 49}:     "Cisco Systems, Inc",
+       [3]byte{0, 12, 50}:     "Avionic Design Development GmbH",
+       [3]byte{0, 12, 51}:     "Compucase Enterprise Co. Ltd.",
+       [3]byte{0, 12, 52}:     "Vixen Co., Ltd.",
+       [3]byte{0, 12, 53}:     "KaVo Dental GmbH & Co. KG",
+       [3]byte{0, 12, 54}:     "SHARP TAKAYA ELECTRONICS INDUSTRY CO.,LTD.",
+       [3]byte{0, 12, 55}:     "Geomation, Inc.",
+       [3]byte{0, 12, 56}:     "TelcoBridges Inc.",
+       [3]byte{0, 12, 57}:     "Sentinel Wireless Inc.",
+       [3]byte{0, 12, 58}:     "Oxance",
+       [3]byte{0, 12, 59}:     "Orion Electric Co., Ltd.",
+       [3]byte{0, 12, 60}:     "MediaChorus, Inc.",
+       [3]byte{0, 12, 61}:     "Glsystech Co., Ltd.",
+       [3]byte{0, 12, 62}:     "Crest Audio",
+       [3]byte{0, 12, 63}:     "Cogent Defence & Security Networks,",
+       [3]byte{0, 12, 64}:     "Altech Controls",
+       [3]byte{0, 12, 65}:     "Cisco-Linksys, LLC",
+       [3]byte{0, 12, 66}:     "Routerboard.com",
+       [3]byte{0, 12, 67}:     "Ralink Technology, Corp.",
+       [3]byte{0, 12, 68}:     "Automated Interfaces, Inc.",
+       [3]byte{0, 12, 69}:     "Animation Technologies Inc.",
+       [3]byte{0, 12, 70}:     "Allied Telesyn Inc.",
+       [3]byte{0, 12, 71}:     "SK Teletech(R&D Planning Team)",
+       [3]byte{0, 12, 72}:     "QoStek Corporation",
+       [3]byte{0, 12, 73}:     "Dangaard Telecom Denmark A/S",
+       [3]byte{0, 12, 74}:     "Cygnus Microsystems (P) Limited",
+       [3]byte{0, 12, 75}:     "Cheops Elektronik",
+       [3]byte{0, 12, 76}:     "Arcor AG&Co.",
+       [3]byte{0, 12, 77}:     "Curtiss-Wright Controls Avionics & Electronics",
+       [3]byte{0, 12, 78}:     "Winbest Technology CO,LT",
+       [3]byte{0, 12, 79}:     "UDTech Japan Corporation",
+       [3]byte{0, 12, 80}:     "Seagate Technology",
+       [3]byte{0, 12, 81}:     "Scientific Technologies Inc.",
+       [3]byte{0, 12, 82}:     "Roll Systems Inc.",
+       [3]byte{0, 12, 83}:     "Private",
+       [3]byte{0, 12, 84}:     "Pedestal Networks, Inc",
+       [3]byte{0, 12, 85}:     "Microlink Communications Inc.",
+       [3]byte{0, 12, 86}:     "Megatel Computer (1986) Corp.",
+       [3]byte{0, 12, 87}:     "MACKIE Engineering Services Belgium BVBA",
+       [3]byte{0, 12, 88}:     "M&S Systems",
+       [3]byte{0, 12, 89}:     "Indyme Electronics, Inc.",
+       [3]byte{0, 12, 90}:     "IBSmm Embedded Electronics Consulting",
+       [3]byte{0, 12, 91}:     "HANWANG TECHNOLOGY CO.,LTD",
+       [3]byte{0, 12, 92}:     "GTN Systems B.V.",
+       [3]byte{0, 12, 93}:     "CHIC TECHNOLOGY (CHINA) CORP.",
+       [3]byte{0, 12, 94}:     "Calypso Medical",
+       [3]byte{0, 12, 95}:     "Avtec, Inc.",
+       [3]byte{0, 12, 96}:     "ACM Systems",
+       [3]byte{0, 12, 97}:     "AC Tech corporation DBA Advanced Digital",
+       [3]byte{0, 12, 98}:     "ABB AB, Cewe-Control",
+       [3]byte{0, 12, 99}:     "Zenith Electronics Corporation",
+       [3]byte{0, 12, 100}:    "X2 MSA Group",
+       [3]byte{0, 12, 101}:    "Sunin Telecom",
+       [3]byte{0, 12, 102}:    "Pronto Networks Inc",
+       [3]byte{0, 12, 103}:    "OYO ELECTRIC CO.,LTD",
+       [3]byte{0, 12, 104}:    "SigmaTel, Inc.",
+       [3]byte{0, 12, 105}:    "National Radio Astronomy Observatory",
+       [3]byte{0, 12, 106}:    "MBARI",
+       [3]byte{0, 12, 107}:    "Kurz Industrie-Elektronik GmbH",
+       [3]byte{0, 12, 108}:    "Elgato Systems LLC",
+       [3]byte{0, 12, 109}:    "Edwards Ltd.",
+       [3]byte{0, 12, 110}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 12, 111}:    "Amtek system co.,LTD.",
+       [3]byte{0, 12, 112}:    "ACC GmbH",
+       [3]byte{0, 12, 113}:    "Wybron, Inc",
+       [3]byte{0, 12, 114}:    "Tempearl Industrial Co., Ltd.",
+       [3]byte{0, 12, 115}:    "TELSON ELECTRONICS CO., LTD",
+       [3]byte{0, 12, 116}:    "RIVERTEC CORPORATION",
+       [3]byte{0, 12, 117}:    "Oriental integrated electronics. LTD",
+       [3]byte{0, 12, 118}:    "MICRO-STAR INTERNATIONAL CO., LTD.",
+       [3]byte{0, 12, 119}:    "Life Racing Ltd",
+       [3]byte{0, 12, 120}:    "In-Tech Electronics Limited",
+       [3]byte{0, 12, 121}:    "Extel Communications P/L",
+       [3]byte{0, 12, 122}:    "DaTARIUS Technologies GmbH",
+       [3]byte{0, 12, 123}:    "ALPHA PROJECT Co.,Ltd.",
+       [3]byte{0, 12, 124}:    "Internet Information Image Inc.",
+       [3]byte{0, 12, 125}:    "TEIKOKU ELECTRIC MFG. CO., LTD",
+       [3]byte{0, 12, 126}:    "Tellium Incorporated",
+       [3]byte{0, 12, 127}:    "synertronixx GmbH",
+       [3]byte{0, 12, 128}:    "Opelcomm Inc.",
+       [3]byte{0, 12, 129}:    "Schneider Electric (Australia)",
+       [3]byte{0, 12, 130}:    "NETWORK TECHNOLOGIES INC",
+       [3]byte{0, 12, 131}:    "Logical Solutions",
+       [3]byte{0, 12, 132}:    "Eazix, Inc.",
+       [3]byte{0, 12, 133}:    "Cisco Systems, Inc",
+       [3]byte{0, 12, 134}:    "Cisco Systems, Inc",
+       [3]byte{0, 12, 135}:    "AMD",
+       [3]byte{0, 12, 136}:    "Apache Micro Peripherals, Inc.",
+       [3]byte{0, 12, 137}:    "AC Electric Vehicles, Ltd.",
+       [3]byte{0, 12, 138}:    "Bose Corporation",
+       [3]byte{0, 12, 139}:    "Connect Tech Inc",
+       [3]byte{0, 12, 140}:    "KODICOM CO.,LTD.",
+       [3]byte{0, 12, 141}:    "MATRIX VISION GmbH",
+       [3]byte{0, 12, 142}:    "Mentor Engineering Inc",
+       [3]byte{0, 12, 143}:    "Nergal s.r.l.",
+       [3]byte{0, 12, 144}:    "Octasic Inc.",
+       [3]byte{0, 12, 145}:    "Riverhead Networks Inc.",
+       [3]byte{0, 12, 146}:    "WolfVision Gmbh",
+       [3]byte{0, 12, 147}:    "Xeline Co., Ltd.",
+       [3]byte{0, 12, 148}:    "United Electronic Industries, Inc. (EUI)",
+       [3]byte{0, 12, 149}:    "PrimeNet",
+       [3]byte{0, 12, 150}:    "OQO, Inc.",
+       [3]byte{0, 12, 151}:    "NV ADB TTV Technologies SA",
+       [3]byte{0, 12, 152}:    "LETEK Communications Inc.",
+       [3]byte{0, 12, 153}:    "HITEL LINK Co.,Ltd",
+       [3]byte{0, 12, 154}:    "Hitech Electronics Corp.",
+       [3]byte{0, 12, 155}:    "EE Solutions, Inc",
+       [3]byte{0, 12, 156}:    "Chongho information & communications",
+       [3]byte{0, 12, 157}:    "UbeeAirWalk, Inc.",
+       [3]byte{0, 12, 158}:    "MemoryLink Corp.",
+       [3]byte{0, 12, 159}:    "NKE Corporation",
+       [3]byte{0, 12, 160}:    "StorCase Technology, Inc.",
+       [3]byte{0, 12, 161}:    "SIGMACOM Co., LTD.",
+       [3]byte{0, 12, 162}:    "Harmonic Video Network",
+       [3]byte{0, 12, 163}:    "Rancho Technology, Inc.",
+       [3]byte{0, 12, 164}:    "Prompttec Product Management GmbH",
+       [3]byte{0, 12, 165}:    "Naman NZ LTd",
+       [3]byte{0, 12, 166}:    "Mintera Corporation",
+       [3]byte{0, 12, 167}:    "Metro (Suzhou) Technologies Co., Ltd.",
+       [3]byte{0, 12, 168}:    "Garuda Networks Corporation",
+       [3]byte{0, 12, 169}:    "Ebtron Inc.",
+       [3]byte{0, 12, 170}:    "Cubic Transportation Systems Inc",
+       [3]byte{0, 12, 171}:    "Commend International GmbH",
+       [3]byte{0, 12, 172}:    "Citizen Watch Co., Ltd.",
+       [3]byte{0, 12, 173}:    "BTU International",
+       [3]byte{0, 12, 174}:    "Ailocom Oy",
+       [3]byte{0, 12, 175}:    "TRI TERM CO.,LTD.",
+       [3]byte{0, 12, 176}:    "Star Semiconductor Corporation",
+       [3]byte{0, 12, 177}:    "Salland Engineering (Europe) BV",
+       [3]byte{0, 12, 178}:    "UNION co., ltd.",
+       [3]byte{0, 12, 179}:    "ROUND Co.,Ltd.",
+       [3]byte{0, 12, 180}:    "AutoCell Laboratories, Inc.",
+       [3]byte{0, 12, 181}:    "Premier Technolgies, Inc",
+       [3]byte{0, 12, 182}:    "NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD",
+       [3]byte{0, 12, 183}:    "Nanjing Huazhuo Electronics Co., Ltd.",
+       [3]byte{0, 12, 184}:    "MEDION AG",
+       [3]byte{0, 12, 185}:    "LEA",
+       [3]byte{0, 12, 186}:    "Jamex, Inc.",
+       [3]byte{0, 12, 187}:    "ISKRAEMECO",
+       [3]byte{0, 12, 188}:    "Iscutum",
+       [3]byte{0, 12, 189}:    "Interface Masters, Inc",
+       [3]byte{0, 12, 190}:    "Innominate Security Technologies AG",
+       [3]byte{0, 12, 191}:    "Holy Stone Ent. Co., Ltd.",
+       [3]byte{0, 12, 192}:    "Genera Oy",
+       [3]byte{0, 12, 193}:    "Eaton Corporation",
+       [3]byte{0, 12, 194}:    "ControlNet (India) Private Limited",
+       [3]byte{0, 12, 195}:    "BeWAN systems",
+       [3]byte{0, 12, 196}:    "Tiptel AG",
+       [3]byte{0, 12, 197}:    "Nextlink Co., Ltd.",
+       [3]byte{0, 12, 198}:    "Ka-Ro electronics GmbH",
+       [3]byte{0, 12, 199}:    "Intelligent Computer Solutions Inc.",
+       [3]byte{0, 12, 200}:    "Xytronix Research & Design, Inc.",
+       [3]byte{0, 12, 201}:    "ILWOO DATA & TECHNOLOGY CO.,LTD",
+       [3]byte{0, 12, 202}:    "HGST a Western Digital Company",
+       [3]byte{0, 12, 203}:    "Design Combus Ltd",
+       [3]byte{0, 12, 204}:    "Aeroscout Ltd.",
+       [3]byte{0, 12, 205}:    "IEC - TC57",
+       [3]byte{0, 12, 206}:    "Cisco Systems, Inc",
+       [3]byte{0, 12, 207}:    "Cisco Systems, Inc",
+       [3]byte{0, 12, 208}:    "Symetrix",
+       [3]byte{0, 12, 209}:    "SFOM Technology Corp.",
+       [3]byte{0, 12, 210}:    "Schaffner EMV AG",
+       [3]byte{0, 12, 211}:    "Prettl Elektronik Radeberg GmbH",
+       [3]byte{0, 12, 212}:    "Positron Public Safety Systems inc.",
+       [3]byte{0, 12, 213}:    "Passave Inc.",
+       [3]byte{0, 12, 214}:    "PARTNER TECH",
+       [3]byte{0, 12, 215}:    "Nallatech Ltd",
+       [3]byte{0, 12, 216}:    "M. K. Juchheim GmbH & Co",
+       [3]byte{0, 12, 217}:    "Itcare Co., Ltd",
+       [3]byte{0, 12, 218}:    "FreeHand Systems, Inc.",
+       [3]byte{0, 12, 219}:    "Brocade Communications Systems, Inc.",
+       [3]byte{0, 12, 220}:    "BECS Technology, Inc",
+       [3]byte{0, 12, 221}:    "AOS technologies AG",
+       [3]byte{0, 12, 222}:    "ABB STOTZ-KONTAKT GmbH",
+       [3]byte{0, 12, 223}:    "PULNiX America, Inc",
+       [3]byte{0, 12, 224}:    "Trek Diagnostics Inc.",
+       [3]byte{0, 12, 225}:    "The Open Group",
+       [3]byte{0, 12, 226}:    "Rolls-Royce",
+       [3]byte{0, 12, 227}:    "Option International N.V.",
+       [3]byte{0, 12, 228}:    "NeuroCom International, Inc.",
+       [3]byte{0, 12, 229}:    "ARRIS Group, Inc.",
+       [3]byte{0, 12, 230}:    "Meru Networks Inc",
+       [3]byte{0, 12, 231}:    "MediaTek Inc.",
+       [3]byte{0, 12, 232}:    "GuangZhou AnJuBao Co., Ltd",
+       [3]byte{0, 12, 233}:    "BLOOMBERG L.P.",
+       [3]byte{0, 12, 234}:    "aphona Kommunikationssysteme",
+       [3]byte{0, 12, 235}:    "CNMP Networks, Inc.",
+       [3]byte{0, 12, 236}:    "Spectracom Corp.",
+       [3]byte{0, 12, 237}:    "Real Digital Media",
+       [3]byte{0, 12, 238}:    "jp-embedded",
+       [3]byte{0, 12, 239}:    "Open Networks Engineering Ltd",
+       [3]byte{0, 12, 240}:    "M & N GmbH",
+       [3]byte{0, 12, 241}:    "Intel Corporation",
+       [3]byte{0, 12, 242}:    "GAMESA Eólica",
+       [3]byte{0, 12, 243}:    "CALL IMAGE SA",
+       [3]byte{0, 12, 244}:    "AKATSUKI ELECTRIC MFG.CO.,LTD.",
+       [3]byte{0, 12, 245}:    "InfoExpress",
+       [3]byte{0, 12, 246}:    "Sitecom Europe BV",
+       [3]byte{0, 12, 247}:    "Nortel Networks",
+       [3]byte{0, 12, 248}:    "Nortel Networks",
+       [3]byte{0, 12, 249}:    "Xylem Water Solutions",
+       [3]byte{0, 12, 250}:    "Digital Systems Corp",
+       [3]byte{0, 12, 251}:    "Korea Network Systems",
+       [3]byte{0, 12, 252}:    "S2io Technologies Corp",
+       [3]byte{0, 12, 253}:    "Hyundai ImageQuest Co.,Ltd.",
+       [3]byte{0, 12, 254}:    "Grand Electronic Co., Ltd",
+       [3]byte{0, 12, 255}:    "MRO-TEK LIMITED",
+       [3]byte{0, 13, 0}:      "Seaway Networks Inc.",
+       [3]byte{0, 13, 1}:      "P&E Microcomputer Systems, Inc.",
+       [3]byte{0, 13, 2}:      "NEC Platforms, Ltd.",
+       [3]byte{0, 13, 3}:      "Matrics, Inc.",
+       [3]byte{0, 13, 4}:      "Foxboro Eckardt Development GmbH",
+       [3]byte{0, 13, 5}:      "cybernet manufacturing inc.",
+       [3]byte{0, 13, 6}:      "Compulogic Limited",
+       [3]byte{0, 13, 7}:      "Calrec Audio Ltd",
+       [3]byte{0, 13, 8}:      "AboveCable, Inc.",
+       [3]byte{0, 13, 9}:      "Yuehua(Zhuhai) Electronic CO. LTD",
+       [3]byte{0, 13, 10}:     "Projectiondesign as",
+       [3]byte{0, 13, 11}:     "BUFFALO.INC",
+       [3]byte{0, 13, 12}:     "MDI Security Systems",
+       [3]byte{0, 13, 13}:     "ITSupported, LLC",
+       [3]byte{0, 13, 14}:     "Inqnet Systems, Inc.",
+       [3]byte{0, 13, 15}:     "Finlux Ltd",
+       [3]byte{0, 13, 16}:     "Embedtronics Oy",
+       [3]byte{0, 13, 17}:     "DENTSPLY - Gendex",
+       [3]byte{0, 13, 18}:     "AXELL Corporation",
+       [3]byte{0, 13, 19}:     "Wilhelm Rutenbeck GmbH&Co.KG",
+       [3]byte{0, 13, 20}:     "Vtech Innovation LP dba Advanced American Telephones",
+       [3]byte{0, 13, 21}:     "Voipac s.r.o.",
+       [3]byte{0, 13, 22}:     "UHS Systems Pty Ltd",
+       [3]byte{0, 13, 23}:     "Turbo Networks Co.Ltd",
+       [3]byte{0, 13, 24}:     "Mega-Trend Electronics CO., LTD.",
+       [3]byte{0, 13, 25}:     "ROBE Show lighting",
+       [3]byte{0, 13, 26}:     "Mustek System Inc.",
+       [3]byte{0, 13, 27}:     "Kyoto Electronics Manufacturing Co., Ltd.",
+       [3]byte{0, 13, 28}:     "Amesys Defense",
+       [3]byte{0, 13, 29}:     "HIGH-TEK HARNESS ENT. CO., LTD.",
+       [3]byte{0, 13, 30}:     "Control Techniques",
+       [3]byte{0, 13, 31}:     "AV Digital",
+       [3]byte{0, 13, 32}:     "ASAHIKASEI TECHNOSYSTEM CO.,LTD.",
+       [3]byte{0, 13, 33}:     "WISCORE Inc.",
+       [3]byte{0, 13, 34}:     "Unitronics LTD",
+       [3]byte{0, 13, 35}:     "Smart Solution, Inc",
+       [3]byte{0, 13, 36}:     "SENTEC E&E CO., LTD.",
+       [3]byte{0, 13, 37}:     "SANDEN CORPORATION",
+       [3]byte{0, 13, 38}:     "Primagraphics Limited",
+       [3]byte{0, 13, 39}:     "MICROPLEX Printware AG",
+       [3]byte{0, 13, 40}:     "Cisco Systems, Inc",
+       [3]byte{0, 13, 41}:     "Cisco Systems, Inc",
+       [3]byte{0, 13, 42}:     "Scanmatic AS",
+       [3]byte{0, 13, 43}:     "Racal Instruments",
+       [3]byte{0, 13, 44}:     "Net2Edge Limited",
+       [3]byte{0, 13, 45}:     "NCT Deutschland GmbH",
+       [3]byte{0, 13, 46}:     "Matsushita Avionics Systems Corporation",
+       [3]byte{0, 13, 47}:     "AIN Comm.Tech.Co., LTD",
+       [3]byte{0, 13, 48}:     "IceFyre Semiconductor",
+       [3]byte{0, 13, 49}:     "Compellent Technologies, Inc.",
+       [3]byte{0, 13, 50}:     "DispenseSource, Inc.",
+       [3]byte{0, 13, 51}:     "Prediwave Corp.",
+       [3]byte{0, 13, 52}:     "Shell International Exploration and Production, Inc.",
+       [3]byte{0, 13, 53}:     "PAC International Ltd",
+       [3]byte{0, 13, 54}:     "Wu Han Routon Electronic Co., Ltd",
+       [3]byte{0, 13, 55}:     "WIPLUG",
+       [3]byte{0, 13, 56}:     "NISSIN INC.",
+       [3]byte{0, 13, 57}:     "Network Electronics",
+       [3]byte{0, 13, 58}:     "Microsoft Corp.",
+       [3]byte{0, 13, 59}:     "Microelectronics Technology Inc.",
+       [3]byte{0, 13, 60}:     "i.Tech Dynamic Ltd",
+       [3]byte{0, 13, 61}:     "Hammerhead Systems, Inc.",
+       [3]byte{0, 13, 62}:     "APLUX Communications Ltd.",
+       [3]byte{0, 13, 63}:     "VTI Instruments Corporation",
+       [3]byte{0, 13, 64}:     "Verint Loronix Video Solutions",
+       [3]byte{0, 13, 65}:     "Siemens AG ICM MP UC RD IT KLF1",
+       [3]byte{0, 13, 66}:     "Newbest Development Limited",
+       [3]byte{0, 13, 67}:     "DRS Tactical Systems Inc.",
+       [3]byte{0, 13, 68}:     "Audio BU - Logitech",
+       [3]byte{0, 13, 69}:     "Tottori SANYO Electric Co., Ltd.",
+       [3]byte{0, 13, 70}:     "Parker SSD Drives",
+       [3]byte{0, 13, 71}:     "Collex",
+       [3]byte{0, 13, 72}:     "AEWIN Technologies Co., Ltd.",
+       [3]byte{0, 13, 73}:     "Triton Systems of Delaware, Inc.",
+       [3]byte{0, 13, 74}:     "Steag ETA-Optik",
+       [3]byte{0, 13, 75}:     "Roku, Inc.",
+       [3]byte{0, 13, 76}:     "Outline Electronics Ltd.",
+       [3]byte{0, 13, 77}:     "Ninelanes",
+       [3]byte{0, 13, 78}:     "NDR Co.,LTD.",
+       [3]byte{0, 13, 79}:     "Kenwood Corporation",
+       [3]byte{0, 13, 80}:     "Galazar Networks",
+       [3]byte{0, 13, 81}:     "DIVR Systems, Inc.",
+       [3]byte{0, 13, 82}:     "Comart system",
+       [3]byte{0, 13, 83}:     "Beijing 5w Communication Corp.",
+       [3]byte{0, 13, 84}:     "3Com Ltd",
+       [3]byte{0, 13, 85}:     "SANYCOM Technology Co.,Ltd",
+       [3]byte{0, 13, 86}:     "Dell Inc.",
+       [3]byte{0, 13, 87}:     "Fujitsu I-Network Systems Limited.",
+       [3]byte{0, 13, 88}:     "Private",
+       [3]byte{0, 13, 89}:     "Amity Systems, Inc.",
+       [3]byte{0, 13, 90}:     "Tiesse SpA",
+       [3]byte{0, 13, 91}:     "Smart Empire Investments Limited",
+       [3]byte{0, 13, 92}:     "Robert Bosch GmbH, VT-ATMO",
+       [3]byte{0, 13, 93}:     "Raritan Computer, Inc",
+       [3]byte{0, 13, 94}:     "NEC Personal Products",
+       [3]byte{0, 13, 95}:     "Minds Inc",
+       [3]byte{0, 13, 96}:     "IBM Corp",
+       [3]byte{0, 13, 97}:     "Giga-Byte Technology Co., Ltd.",
+       [3]byte{0, 13, 98}:     "Funkwerk Dabendorf GmbH",
+       [3]byte{0, 13, 99}:     "DENT Instruments, Inc.",
+       [3]byte{0, 13, 100}:    "COMAG Handels AG",
+       [3]byte{0, 13, 101}:    "Cisco Systems, Inc",
+       [3]byte{0, 13, 102}:    "Cisco Systems, Inc",
+       [3]byte{0, 13, 103}:    "Ericsson",
+       [3]byte{0, 13, 104}:    "Vinci Systems, Inc.",
+       [3]byte{0, 13, 105}:    "TMT&D Corporation",
+       [3]byte{0, 13, 106}:    "Redwood Technologies LTD",
+       [3]byte{0, 13, 107}:    "Mita-Teknik A/S",
+       [3]byte{0, 13, 108}:    "M-Audio",
+       [3]byte{0, 13, 109}:    "K-Tech Devices Corp.",
+       [3]byte{0, 13, 110}:    "K-Patents Oy",
+       [3]byte{0, 13, 111}:    "Ember Corporation",
+       [3]byte{0, 13, 112}:    "Datamax Corporation",
+       [3]byte{0, 13, 113}:    "boca systems",
+       [3]byte{0, 13, 114}:    "2Wire Inc",
+       [3]byte{0, 13, 115}:    "Technical Support, Inc.",
+       [3]byte{0, 13, 116}:    "Sand Network Systems, Inc.",
+       [3]byte{0, 13, 117}:    "Kobian Pte Ltd - Taiwan Branch",
+       [3]byte{0, 13, 118}:    "Hokuto Denshi Co,. Ltd.",
+       [3]byte{0, 13, 119}:    "FalconStor Software",
+       [3]byte{0, 13, 120}:    "Engineering & Security",
+       [3]byte{0, 13, 121}:    "Dynamic Solutions Co,.Ltd.",
+       [3]byte{0, 13, 122}:    "DiGATTO Asia Pacific Pte Ltd",
+       [3]byte{0, 13, 123}:    "Consensys Computers Inc.",
+       [3]byte{0, 13, 124}:    "Codian Ltd",
+       [3]byte{0, 13, 125}:    "Afco Systems",
+       [3]byte{0, 13, 126}:    "Axiowave Networks, Inc.",
+       [3]byte{0, 13, 127}:    "MIDAS  COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch)",
+       [3]byte{0, 13, 128}:    "Online Development Inc",
+       [3]byte{0, 13, 129}:    "Pepperl+Fuchs GmbH",
+       [3]byte{0, 13, 130}:    "PHS srl",
+       [3]byte{0, 13, 131}:    "Sanmina-SCI Hungary  Ltd.",
+       [3]byte{0, 13, 132}:    "Makus Inc.",
+       [3]byte{0, 13, 133}:    "Tapwave, Inc.",
+       [3]byte{0, 13, 134}:    "Huber + Suhner AG",
+       [3]byte{0, 13, 135}:    "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 13, 136}:    "D-Link Corporation",
+       [3]byte{0, 13, 137}:    "Bils Technology Inc",
+       [3]byte{0, 13, 138}:    "Winners Electronics Co., Ltd.",
+       [3]byte{0, 13, 139}:    "T&D Corporation",
+       [3]byte{0, 13, 140}:    "Shanghai Wedone Digital Ltd. CO.",
+       [3]byte{0, 13, 141}:    "Prosoft Technology, Inc",
+       [3]byte{0, 13, 142}:    "Koden Electronics Co., Ltd.",
+       [3]byte{0, 13, 143}:    "King Tsushin Kogyo Co., LTD.",
+       [3]byte{0, 13, 144}:    "Factum Electronics AB",
+       [3]byte{0, 13, 145}:    "Eclipse (HQ Espana) S.L.",
+       [3]byte{0, 13, 146}:    "ARIMA Communications Corp.",
+       [3]byte{0, 13, 147}:    "Apple, Inc.",
+       [3]byte{0, 13, 148}:    "AFAR Communications,Inc",
+       [3]byte{0, 13, 149}:    "Opti-cell, Inc.",
+       [3]byte{0, 13, 150}:    "Vtera Technology Inc.",
+       [3]byte{0, 13, 151}:    "ABB Inc./Tropos",
+       [3]byte{0, 13, 152}:    "S.W.A.C. Schmitt-Walter Automation Consult GmbH",
+       [3]byte{0, 13, 153}:    "Orbital Sciences Corp.; Launch Systems Group",
+       [3]byte{0, 13, 154}:    "INFOTEC LTD",
+       [3]byte{0, 13, 155}:    "Heraeus Electro-Nite International N.V.",
+       [3]byte{0, 13, 156}:    "Elan GmbH & Co KG",
+       [3]byte{0, 13, 157}:    "Hewlett Packard",
+       [3]byte{0, 13, 158}:    "TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd.",
+       [3]byte{0, 13, 159}:    "RF Micro Devices",
+       [3]byte{0, 13, 160}:    "NEDAP N.V.",
+       [3]byte{0, 13, 161}:    "MIRAE ITS Co.,LTD.",
+       [3]byte{0, 13, 162}:    "Infrant Technologies, Inc.",
+       [3]byte{0, 13, 163}:    "Emerging Technologies Limited",
+       [3]byte{0, 13, 164}:    "DOSCH & AMAND SYSTEMS AG",
+       [3]byte{0, 13, 165}:    "Fabric7 Systems, Inc",
+       [3]byte{0, 13, 166}:    "Universal Switching Corporation",
+       [3]byte{0, 13, 167}:    "Private",
+       [3]byte{0, 13, 168}:    "Teletronics Technology Corporation",
+       [3]byte{0, 13, 169}:    "T.E.A.M. S.L.",
+       [3]byte{0, 13, 170}:    "S.A.Tehnology co.,Ltd.",
+       [3]byte{0, 13, 171}:    "Parker Hannifin GmbH Electromechanical Division Europe",
+       [3]byte{0, 13, 172}:    "Japan CBM Corporation",
+       [3]byte{0, 13, 173}:    "Dataprobe, Inc.",
+       [3]byte{0, 13, 174}:    "SAMSUNG HEAVY INDUSTRIES CO., LTD.",
+       [3]byte{0, 13, 175}:    "Plexus Corp (UK) Ltd",
+       [3]byte{0, 13, 176}:    "Olym-tech Co.,Ltd.",
+       [3]byte{0, 13, 177}:    "Japan Network Service Co., Ltd.",
+       [3]byte{0, 13, 178}:    "Ammasso, Inc.",
+       [3]byte{0, 13, 179}:    "SDO Communication Corperation",
+       [3]byte{0, 13, 180}:    "NETASQ",
+       [3]byte{0, 13, 181}:    "GLOBALSAT TECHNOLOGY CORPORATION",
+       [3]byte{0, 13, 182}:    "Broadcom",
+       [3]byte{0, 13, 183}:    "SANKO ELECTRIC CO,.LTD",
+       [3]byte{0, 13, 184}:    "SCHILLER AG",
+       [3]byte{0, 13, 185}:    "PC Engines GmbH",
+       [3]byte{0, 13, 186}:    "Océ Document Technologies GmbH",
+       [3]byte{0, 13, 187}:    "Nippon Dentsu Co.,Ltd.",
+       [3]byte{0, 13, 188}:    "Cisco Systems, Inc",
+       [3]byte{0, 13, 189}:    "Cisco Systems, Inc",
+       [3]byte{0, 13, 190}:    "Bel Fuse Europe Ltd.,UK",
+       [3]byte{0, 13, 191}:    "TekTone Sound & Signal Mfg., Inc.",
+       [3]byte{0, 13, 192}:    "Spagat AS",
+       [3]byte{0, 13, 193}:    "SafeWeb Inc",
+       [3]byte{0, 13, 194}:    "Private",
+       [3]byte{0, 13, 195}:    "First Communication, Inc.",
+       [3]byte{0, 13, 196}:    "Emcore Corporation",
+       [3]byte{0, 13, 197}:    "EchoStar Global B.V.",
+       [3]byte{0, 13, 198}:    "DigiRose Technology Co., Ltd.",
+       [3]byte{0, 13, 199}:    "COSMIC ENGINEERING INC.",
+       [3]byte{0, 13, 200}:    "AirMagnet, Inc",
+       [3]byte{0, 13, 201}:    "THALES Elektronik Systeme GmbH",
+       [3]byte{0, 13, 202}:    "Tait Electronics",
+       [3]byte{0, 13, 203}:    "Petcomkorea Co., Ltd.",
+       [3]byte{0, 13, 204}:    "NEOSMART Corp.",
+       [3]byte{0, 13, 205}:    "GROUPE TXCOM",
+       [3]byte{0, 13, 206}:    "Dynavac Technology Pte Ltd",
+       [3]byte{0, 13, 207}:    "Cidra Corp.",
+       [3]byte{0, 13, 208}:    "TetraTec Instruments GmbH",
+       [3]byte{0, 13, 209}:    "Stryker Corporation",
+       [3]byte{0, 13, 210}:    "Simrad Optronics ASA",
+       [3]byte{0, 13, 211}:    "SAMWOO Telecommunication Co.,Ltd.",
+       [3]byte{0, 13, 212}:    "Symantec Corporation",
+       [3]byte{0, 13, 213}:    "O'RITE TECHNOLOGY CO.,LTD",
+       [3]byte{0, 13, 214}:    "ITI    LTD",
+       [3]byte{0, 13, 215}:    "Bright",
+       [3]byte{0, 13, 216}:    "BBN",
+       [3]byte{0, 13, 217}:    "Anton Paar GmbH",
+       [3]byte{0, 13, 218}:    "ALLIED TELESIS K.K.",
+       [3]byte{0, 13, 219}:    "AIRWAVE TECHNOLOGIES INC.",
+       [3]byte{0, 13, 220}:    "VAC",
+       [3]byte{0, 13, 221}:    "Profilo Telra Elektronik Sanayi ve Ticaret. A.Ş",
+       [3]byte{0, 13, 222}:    "Joyteck Co., Ltd.",
+       [3]byte{0, 13, 223}:    "Japan Image & Network Inc.",
+       [3]byte{0, 13, 224}:    "ICPDAS Co.,LTD",
+       [3]byte{0, 13, 225}:    "Control Products, Inc.",
+       [3]byte{0, 13, 226}:    "CMZ Sistemi Elettronici",
+       [3]byte{0, 13, 227}:    "AT Sweden AB",
+       [3]byte{0, 13, 228}:    "DIGINICS, Inc.",
+       [3]byte{0, 13, 229}:    "Samsung Thales",
+       [3]byte{0, 13, 230}:    "YOUNGBO ENGINEERING CO.,LTD",
+       [3]byte{0, 13, 231}:    "Snap-on OEM Group",
+       [3]byte{0, 13, 232}:    "Nasaco Electronics Pte. Ltd",
+       [3]byte{0, 13, 233}:    "Napatech Aps",
+       [3]byte{0, 13, 234}:    "Kingtel Telecommunication Corp.",
+       [3]byte{0, 13, 235}:    "CompXs Limited",
+       [3]byte{0, 13, 236}:    "Cisco Systems, Inc",
+       [3]byte{0, 13, 237}:    "Cisco Systems, Inc",
+       [3]byte{0, 13, 238}:    "Andrew RF Power Amplifier Group",
+       [3]byte{0, 13, 239}:    "Soc. Coop. Bilanciai",
+       [3]byte{0, 13, 240}:    "QCOM TECHNOLOGY INC.",
+       [3]byte{0, 13, 241}:    "IONIX INC.",
+       [3]byte{0, 13, 242}:    "Private",
+       [3]byte{0, 13, 243}:    "Asmax Solutions",
+       [3]byte{0, 13, 244}:    "Watertek Co.",
+       [3]byte{0, 13, 245}:    "Teletronics International Inc.",
+       [3]byte{0, 13, 246}:    "Technology Thesaurus Corp.",
+       [3]byte{0, 13, 247}:    "Space Dynamics Lab",
+       [3]byte{0, 13, 248}:    "ORGA Kartensysteme GmbH",
+       [3]byte{0, 13, 249}:    "NDS Limited",
+       [3]byte{0, 13, 250}:    "Micro Control Systems Ltd.",
+       [3]byte{0, 13, 251}:    "Komax AG",
+       [3]byte{0, 13, 252}:    "ITFOR Inc.",
+       [3]byte{0, 13, 253}:    "Huges Hi-Tech Inc.,",
+       [3]byte{0, 13, 254}:    "Hauppauge Computer Works, Inc.",
+       [3]byte{0, 13, 255}:    "CHENMING MOLD INDUSTRY CORP.",
+       [3]byte{0, 14, 0}:      "Atrie",
+       [3]byte{0, 14, 1}:      "ASIP Technologies Inc.",
+       [3]byte{0, 14, 2}:      "Advantech AMT Inc.",
+       [3]byte{0, 14, 3}:      "Emulex Corporation",
+       [3]byte{0, 14, 4}:      "CMA/Microdialysis AB",
+       [3]byte{0, 14, 5}:      "WIRELESS MATRIX CORP.",
+       [3]byte{0, 14, 6}:      "Team Simoco Ltd",
+       [3]byte{0, 14, 7}:      "Sony Mobile Communications AB",
+       [3]byte{0, 14, 8}:      "Cisco-Linksys, LLC",
+       [3]byte{0, 14, 9}:      "Shenzhen Coship Software Co.,LTD.",
+       [3]byte{0, 14, 10}:     "SAKUMA DESIGN OFFICE",
+       [3]byte{0, 14, 11}:     "Netac Technology Co., Ltd.",
+       [3]byte{0, 14, 12}:     "Intel Corporation",
+       [3]byte{0, 14, 13}:     "Hesch Schröder GmbH",
+       [3]byte{0, 14, 14}:     "ESA elettronica S.P.A.",
+       [3]byte{0, 14, 15}:     "ERMME",
+       [3]byte{0, 14, 16}:     "C-guys, Inc.",
+       [3]byte{0, 14, 17}:     "BDT Büro und Datentechnik GmbH & Co.KG",
+       [3]byte{0, 14, 18}:     "Adaptive Micro Systems Inc.",
+       [3]byte{0, 14, 19}:     "Accu-Sort Systems inc.",
+       [3]byte{0, 14, 20}:     "Visionary Solutions, Inc.",
+       [3]byte{0, 14, 21}:     "Tadlys LTD",
+       [3]byte{0, 14, 22}:     "SouthWing S.L.",
+       [3]byte{0, 14, 23}:     "Private",
+       [3]byte{0, 14, 24}:     "MyA Technology",
+       [3]byte{0, 14, 25}:     "LogicaCMG Pty Ltd",
+       [3]byte{0, 14, 26}:     "JPS Communications",
+       [3]byte{0, 14, 27}:     "IAV GmbH",
+       [3]byte{0, 14, 28}:     "Hach Company",
+       [3]byte{0, 14, 29}:     "ARION Technology Inc.",
+       [3]byte{0, 14, 30}:     "QLogic Corporation",
+       [3]byte{0, 14, 31}:     "TCL Networks Equipment Co., Ltd.",
+       [3]byte{0, 14, 32}:     "ACCESS Systems Americas, Inc.",
+       [3]byte{0, 14, 33}:     "MTU Friedrichshafen GmbH",
+       [3]byte{0, 14, 34}:     "Private",
+       [3]byte{0, 14, 35}:     "Incipient, Inc.",
+       [3]byte{0, 14, 36}:     "Huwell Technology Inc.",
+       [3]byte{0, 14, 37}:     "Hannae Technology Co., Ltd",
+       [3]byte{0, 14, 38}:     "Gincom Technology Corp.",
+       [3]byte{0, 14, 39}:     "Crere Networks, Inc.",
+       [3]byte{0, 14, 40}:     "Dynamic Ratings P/L",
+       [3]byte{0, 14, 41}:     "Shester Communications Inc",
+       [3]byte{0, 14, 42}:     "Private",
+       [3]byte{0, 14, 43}:     "Safari Technologies",
+       [3]byte{0, 14, 44}:     "Netcodec co.",
+       [3]byte{0, 14, 45}:     "Hyundai Digital Technology Co.,Ltd.",
+       [3]byte{0, 14, 46}:     "Edimax Technology Co. Ltd.",
+       [3]byte{0, 14, 47}:     "Roche Diagnostics GmbH",
+       [3]byte{0, 14, 48}:     "AERAS Networks, Inc.",
+       [3]byte{0, 14, 49}:     "Olympus Soft Imaging Solutions GmbH",
+       [3]byte{0, 14, 50}:     "Kontron Medical",
+       [3]byte{0, 14, 51}:     "Shuko Electronics Co.,Ltd",
+       [3]byte{0, 14, 52}:     "NexGen City, LP",
+       [3]byte{0, 14, 53}:     "Intel Corporation",
+       [3]byte{0, 14, 54}:     "HEINESYS, Inc.",
+       [3]byte{0, 14, 55}:     "Harms & Wende GmbH & Co.KG",
+       [3]byte{0, 14, 56}:     "Cisco Systems, Inc",
+       [3]byte{0, 14, 57}:     "Cisco Systems, Inc",
+       [3]byte{0, 14, 58}:     "Cirrus Logic",
+       [3]byte{0, 14, 59}:     "Hawking Technologies, Inc.",
+       [3]byte{0, 14, 60}:     "Transact Technologies Inc",
+       [3]byte{0, 14, 61}:     "Televic N.V.",
+       [3]byte{0, 14, 62}:     "Sun Optronics Inc",
+       [3]byte{0, 14, 63}:     "Soronti, Inc.",
+       [3]byte{0, 14, 64}:     "Nortel Networks",
+       [3]byte{0, 14, 65}:     "NIHON MECHATRONICS CO.,LTD.",
+       [3]byte{0, 14, 66}:     "Motic Incoporation Ltd.",
+       [3]byte{0, 14, 67}:     "G-Tek Electronics Sdn. Bhd.",
+       [3]byte{0, 14, 68}:     "Digital 5, Inc.",
+       [3]byte{0, 14, 69}:     "Beijing Newtry Electronic Technology Ltd",
+       [3]byte{0, 14, 70}:     "Niigata Seimitsu Co.,Ltd.",
+       [3]byte{0, 14, 71}:     "NCI System Co.,Ltd.",
+       [3]byte{0, 14, 72}:     "Lipman TransAction Solutions",
+       [3]byte{0, 14, 73}:     "Forsway Scandinavia AB",
+       [3]byte{0, 14, 74}:     "Changchun Huayu WEBPAD Co.,LTD",
+       [3]byte{0, 14, 75}:     "atrium c and i",
+       [3]byte{0, 14, 76}:     "Bermai Inc.",
+       [3]byte{0, 14, 77}:     "Numesa Inc.",
+       [3]byte{0, 14, 78}:     "Waveplus Technology Co., Ltd.",
+       [3]byte{0, 14, 79}:     "Trajet GmbH",
+       [3]byte{0, 14, 80}:     "Thomson Telecom Belgium",
+       [3]byte{0, 14, 81}:     "tecna elettronica srl",
+       [3]byte{0, 14, 82}:     "Optium Corporation",
+       [3]byte{0, 14, 83}:     "AV TECH CORPORATION",
+       [3]byte{0, 14, 84}:     "AlphaCell Wireless Ltd.",
+       [3]byte{0, 14, 85}:     "AUVITRAN",
+       [3]byte{0, 14, 86}:     "4G Systems GmbH & Co. KG",
+       [3]byte{0, 14, 87}:     "Iworld Networking, Inc.",
+       [3]byte{0, 14, 88}:     "Sonos, Inc.",
+       [3]byte{0, 14, 89}:     "Sagemcom Broadband SAS",
+       [3]byte{0, 14, 90}:     "TELEFIELD inc.",
+       [3]byte{0, 14, 91}:     "ParkerVision - Direct2Data",
+       [3]byte{0, 14, 92}:     "ARRIS Group, Inc.",
+       [3]byte{0, 14, 93}:     "Triple Play Technologies A/S",
+       [3]byte{0, 14, 94}:     "Raisecom Technology",
+       [3]byte{0, 14, 95}:     "activ-net GmbH & Co. KG",
+       [3]byte{0, 14, 96}:     "360SUN Digital Broadband Corporation",
+       [3]byte{0, 14, 97}:     "MICROTROL LIMITED",
+       [3]byte{0, 14, 98}:     "Nortel Networks",
+       [3]byte{0, 14, 99}:     "Lemke Diagnostics GmbH",
+       [3]byte{0, 14, 100}:    "Elphel, Inc",
+       [3]byte{0, 14, 101}:    "TransCore",
+       [3]byte{0, 14, 102}:    "Hitachi Industry & Control Solutions, Ltd.",
+       [3]byte{0, 14, 103}:    "Eltis Microelectronics Ltd.",
+       [3]byte{0, 14, 104}:    "E-TOP Network Technology Inc.",
+       [3]byte{0, 14, 105}:    "China Electric Power Research Institute",
+       [3]byte{0, 14, 106}:    "3Com Ltd",
+       [3]byte{0, 14, 107}:    "Janitza electronics GmbH",
+       [3]byte{0, 14, 108}:    "Device Drivers Limited",
+       [3]byte{0, 14, 109}:    "Murata Manufacturing Co., Ltd.",
+       [3]byte{0, 14, 110}:    "MAT S.A. (Mircrelec Advanced Technology)",
+       [3]byte{0, 14, 111}:    "IRIS Corporation Berhad",
+       [3]byte{0, 14, 112}:    "in2 Networks",
+       [3]byte{0, 14, 113}:    "Gemstar Technology Development Ltd.",
+       [3]byte{0, 14, 114}:    "CTS electronics",
+       [3]byte{0, 14, 115}:    "Tpack A/S",
+       [3]byte{0, 14, 116}:    "Solar Telecom. Tech",
+       [3]byte{0, 14, 117}:    "New York Air Brake Corp.",
+       [3]byte{0, 14, 118}:    "GEMSOC INNOVISION INC.",
+       [3]byte{0, 14, 119}:    "Decru, Inc.",
+       [3]byte{0, 14, 120}:    "Amtelco",
+       [3]byte{0, 14, 121}:    "Ample Communications Inc.",
+       [3]byte{0, 14, 122}:    "GemWon Communications Co., Ltd.",
+       [3]byte{0, 14, 123}:    "Toshiba",
+       [3]byte{0, 14, 124}:    "Televes S.A.",
+       [3]byte{0, 14, 125}:    "Electronics Line 3000 Ltd.",
+       [3]byte{0, 14, 126}:    "ionSign Oy",
+       [3]byte{0, 14, 127}:    "Hewlett Packard",
+       [3]byte{0, 14, 128}:    "Thomson Technology Inc",
+       [3]byte{0, 14, 129}:    "Devicescape Software, Inc.",
+       [3]byte{0, 14, 130}:    "Commtech Wireless",
+       [3]byte{0, 14, 131}:    "Cisco Systems, Inc",
+       [3]byte{0, 14, 132}:    "Cisco Systems, Inc",
+       [3]byte{0, 14, 133}:    "Catalyst Enterprises, Inc.",
+       [3]byte{0, 14, 134}:    "Alcatel North America",
+       [3]byte{0, 14, 135}:    "adp Gauselmann GmbH",
+       [3]byte{0, 14, 136}:    "VIDEOTRON CORP.",
+       [3]byte{0, 14, 137}:    "CLEMATIC",
+       [3]byte{0, 14, 138}:    "Avara Technologies Pty. Ltd.",
+       [3]byte{0, 14, 139}:    "Astarte Technology Co, Ltd.",
+       [3]byte{0, 14, 140}:    "Siemens AG A&D ET",
+       [3]byte{0, 14, 141}:    "Systems in Progress Holding GmbH",
+       [3]byte{0, 14, 142}:    "SparkLAN Communications, Inc.",
+       [3]byte{0, 14, 143}:    "Sercomm Corp.",
+       [3]byte{0, 14, 144}:    "PONICO CORP.",
+       [3]byte{0, 14, 145}:    "Navico Auckland Ltd",
+       [3]byte{0, 14, 146}:    "Open Telecom",
+       [3]byte{0, 14, 147}:    "Milénio 3 Sistemas Electrónicos, Lda.",
+       [3]byte{0, 14, 148}:    "Maas International BV",
+       [3]byte{0, 14, 149}:    "Fujiya Denki Seisakusho Co.,Ltd.",
+       [3]byte{0, 14, 150}:    "Cubic Defense Applications, Inc.",
+       [3]byte{0, 14, 151}:    "Ultracker Technology CO., Inc",
+       [3]byte{0, 14, 152}:    "HME Clear-Com LTD.",
+       [3]byte{0, 14, 153}:    "Spectrum Digital, Inc",
+       [3]byte{0, 14, 154}:    "BOE TECHNOLOGY GROUP CO.,LTD",
+       [3]byte{0, 14, 155}:    "Ambit Microsystems Corporation",
+       [3]byte{0, 14, 156}:    "Benchmark Electronics",
+       [3]byte{0, 14, 157}:    "Tiscali UK Ltd",
+       [3]byte{0, 14, 158}:    "Topfield Co., Ltd",
+       [3]byte{0, 14, 159}:    "TEMIC SDS GmbH",
+       [3]byte{0, 14, 160}:    "NetKlass Technology Inc.",
+       [3]byte{0, 14, 161}:    "Formosa Teletek Corporation",
+       [3]byte{0, 14, 162}:    "McAfee, Inc",
+       [3]byte{0, 14, 163}:    "CNCR-IT CO.,LTD,HangZhou P.R.CHINA",
+       [3]byte{0, 14, 164}:    "Certance Inc.",
+       [3]byte{0, 14, 165}:    "BLIP Systems",
+       [3]byte{0, 14, 166}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 14, 167}:    "Endace Technology",
+       [3]byte{0, 14, 168}:    "United Technologists Europe Limited",
+       [3]byte{0, 14, 169}:    "Shanghai Xun Shi Communications Equipment Ltd. Co.",
+       [3]byte{0, 14, 170}:    "Scalent Systems, Inc.",
+       [3]byte{0, 14, 171}:    "Cray Inc",
+       [3]byte{0, 14, 172}:    "MINTRON ENTERPRISE CO., LTD.",
+       [3]byte{0, 14, 173}:    "Metanoia Technologies, Inc.",
+       [3]byte{0, 14, 174}:    "GAWELL TECHNOLOGIES CORP.",
+       [3]byte{0, 14, 175}:    "CASTEL",
+       [3]byte{0, 14, 176}:    "Solutions Radio BV",
+       [3]byte{0, 14, 177}:    "Newcotech,Ltd",
+       [3]byte{0, 14, 178}:    "Micro-Research Finland Oy",
+       [3]byte{0, 14, 179}:    "Hewlett Packard",
+       [3]byte{0, 14, 180}:    "GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD.",
+       [3]byte{0, 14, 181}:    "Ecastle Electronics Co., Ltd.",
+       [3]byte{0, 14, 182}:    "Riverbed Technology, Inc.",
+       [3]byte{0, 14, 183}:    "Knovative, Inc.",
+       [3]byte{0, 14, 184}:    "Iiga co.,Ltd",
+       [3]byte{0, 14, 185}:    "HASHIMOTO Electronics Industry Co.,Ltd.",
+       [3]byte{0, 14, 186}:    "HANMI SEMICONDUCTOR CO., LTD.",
+       [3]byte{0, 14, 187}:    "Everbee Networks",
+       [3]byte{0, 14, 188}:    "Paragon Fidelity GmbH",
+       [3]byte{0, 14, 189}:    "Burdick, a Quinton Compny",
+       [3]byte{0, 14, 190}:    "B&B Electronics Manufacturing Co.",
+       [3]byte{0, 14, 191}:    "Remsdaq Limited",
+       [3]byte{0, 14, 192}:    "Nortel Networks",
+       [3]byte{0, 14, 193}:    "MYNAH Technologies",
+       [3]byte{0, 14, 194}:    "Lowrance Electronics, Inc.",
+       [3]byte{0, 14, 195}:    "Logic Controls, Inc.",
+       [3]byte{0, 14, 196}:    "Iskra Transmission d.d.",
+       [3]byte{0, 14, 197}:    "Digital Multitools Inc",
+       [3]byte{0, 14, 198}:    "ASIX ELECTRONICS CORP.",
+       [3]byte{0, 14, 199}:    "Motorola Korea",
+       [3]byte{0, 14, 200}:    "Zoran Corporation",
+       [3]byte{0, 14, 201}:    "YOKO Technology Corp.",
+       [3]byte{0, 14, 202}:    "WTSS Inc",
+       [3]byte{0, 14, 203}:    "VineSys Technology",
+       [3]byte{0, 14, 204}:    "Tableau, LLC",
+       [3]byte{0, 14, 205}:    "SKOV A/S",
+       [3]byte{0, 14, 206}:    "S.I.T.T.I. S.p.A.",
+       [3]byte{0, 14, 207}:    "PROFIBUS Nutzerorganisation e.V.",
+       [3]byte{0, 14, 208}:    "Privaris, Inc.",
+       [3]byte{0, 14, 209}:    "Osaka Micro Computer.",
+       [3]byte{0, 14, 210}:    "Filtronic plc",
+       [3]byte{0, 14, 211}:    "Epicenter, Inc.",
+       [3]byte{0, 14, 212}:    "CRESITT INDUSTRIE",
+       [3]byte{0, 14, 213}:    "COPAN Systems Inc.",
+       [3]byte{0, 14, 214}:    "Cisco Systems, Inc",
+       [3]byte{0, 14, 215}:    "Cisco Systems, Inc",
+       [3]byte{0, 14, 216}:    "Positron Access Solutions Corp",
+       [3]byte{0, 14, 217}:    "Aksys, Ltd.",
+       [3]byte{0, 14, 218}:    "C-TECH UNITED CORP.",
+       [3]byte{0, 14, 219}:    "XiNCOM Corp.",
+       [3]byte{0, 14, 220}:    "Tellion INC.",
+       [3]byte{0, 14, 221}:    "SHURE INCORPORATED",
+       [3]byte{0, 14, 222}:    "REMEC, Inc.",
+       [3]byte{0, 14, 223}:    "PLX Technology",
+       [3]byte{0, 14, 224}:    "Mcharge",
+       [3]byte{0, 14, 225}:    "ExtremeSpeed Inc.",
+       [3]byte{0, 14, 226}:    "Custom Engineering",
+       [3]byte{0, 14, 227}:    "Chiyu Technology Co.,Ltd",
+       [3]byte{0, 14, 228}:    "BOE TECHNOLOGY GROUP CO.,LTD",
+       [3]byte{0, 14, 229}:    "bitWallet, Inc.",
+       [3]byte{0, 14, 230}:    "Adimos Systems LTD",
+       [3]byte{0, 14, 231}:    "AAC ELECTRONICS CORP.",
+       [3]byte{0, 14, 232}:    "Zioncom Electronics (Shenzhen) Ltd.",
+       [3]byte{0, 14, 233}:    "WayTech Development, Inc.",
+       [3]byte{0, 14, 234}:    "Shadong Luneng Jicheng Electronics,Co.,Ltd",
+       [3]byte{0, 14, 235}:    "Sandmartin(zhong shan)Electronics Co.,Ltd",
+       [3]byte{0, 14, 236}:    "Orban",
+       [3]byte{0, 14, 237}:    "Nokia Danmark A/S",
+       [3]byte{0, 14, 238}:    "Muco Industrie BV",
+       [3]byte{0, 14, 239}:    "Private",
+       [3]byte{0, 14, 240}:    "Festo AG & Co. KG",
+       [3]byte{0, 14, 241}:    "EZQUEST INC.",
+       [3]byte{0, 14, 242}:    "Infinico Corporation",
+       [3]byte{0, 14, 243}:    "Smarthome",
+       [3]byte{0, 14, 244}:    "Kasda Networks Inc",
+       [3]byte{0, 14, 245}:    "iPAC Technology Co., Ltd.",
+       [3]byte{0, 14, 246}:    "E-TEN Information Systems Co., Ltd.",
+       [3]byte{0, 14, 247}:    "Vulcan Portals Inc",
+       [3]byte{0, 14, 248}:    "SBC ASI",
+       [3]byte{0, 14, 249}:    "REA Elektronik GmbH",
+       [3]byte{0, 14, 250}:    "Optoway Technology Incorporation",
+       [3]byte{0, 14, 251}:    "Macey Enterprises",
+       [3]byte{0, 14, 252}:    "JTAG Technologies B.V.",
+       [3]byte{0, 14, 253}:    "FUJINON CORPORATION",
+       [3]byte{0, 14, 254}:    "EndRun Technologies LLC",
+       [3]byte{0, 14, 255}:    "Megasolution,Inc.",
+       [3]byte{0, 15, 0}:      "Legra Systems, Inc.",
+       [3]byte{0, 15, 1}:      "DIGITALKS INC",
+       [3]byte{0, 15, 2}:      "Digicube Technology Co., Ltd",
+       [3]byte{0, 15, 3}:      "COM&C CO., LTD",
+       [3]byte{0, 15, 4}:      "cim-usa inc",
+       [3]byte{0, 15, 5}:      "3B SYSTEM INC.",
+       [3]byte{0, 15, 6}:      "Nortel Networks",
+       [3]byte{0, 15, 7}:      "Mangrove Systems, Inc.",
+       [3]byte{0, 15, 8}:      "Indagon Oy",
+       [3]byte{0, 15, 9}:      "Private",
+       [3]byte{0, 15, 10}:     "Clear Edge Networks",
+       [3]byte{0, 15, 11}:     "Kentima Technologies AB",
+       [3]byte{0, 15, 12}:     "SYNCHRONIC ENGINEERING",
+       [3]byte{0, 15, 13}:     "Hunt Electronic Co., Ltd.",
+       [3]byte{0, 15, 14}:     "WaveSplitter Technologies, Inc.",
+       [3]byte{0, 15, 15}:     "Real ID Technology Co., Ltd.",
+       [3]byte{0, 15, 16}:     "RDM Corporation",
+       [3]byte{0, 15, 17}:     "Prodrive B.V.",
+       [3]byte{0, 15, 18}:     "Panasonic Europe Ltd.",
+       [3]byte{0, 15, 19}:     "Nisca corporation",
+       [3]byte{0, 15, 20}:     "Mindray Co., Ltd.",
+       [3]byte{0, 15, 21}:     "Kjaerulff1 A/S",
+       [3]byte{0, 15, 22}:     "JAY HOW TECHNOLOGY CO.,",
+       [3]byte{0, 15, 23}:     "Insta Elektro GmbH",
+       [3]byte{0, 15, 24}:     "Industrial Control Systems",
+       [3]byte{0, 15, 25}:     "Boston Scientific",
+       [3]byte{0, 15, 26}:     "Gaming Support B.V.",
+       [3]byte{0, 15, 27}:     "Ego Systems Inc.",
+       [3]byte{0, 15, 28}:     "DigitAll World Co., Ltd",
+       [3]byte{0, 15, 29}:     "Cosmo Techs Co., Ltd.",
+       [3]byte{0, 15, 30}:     "Chengdu KT Electric Co.of High & New Technology",
+       [3]byte{0, 15, 31}:     "Dell Inc.",
+       [3]byte{0, 15, 32}:     "Hewlett Packard",
+       [3]byte{0, 15, 33}:     "Scientific Atlanta, Inc",
+       [3]byte{0, 15, 34}:     "Helius, Inc.",
+       [3]byte{0, 15, 35}:     "Cisco Systems, Inc",
+       [3]byte{0, 15, 36}:     "Cisco Systems, Inc",
+       [3]byte{0, 15, 37}:     "AimValley B.V.",
+       [3]byte{0, 15, 38}:     "WorldAccxx  LLC",
+       [3]byte{0, 15, 39}:     "TEAL Electronics, Inc.",
+       [3]byte{0, 15, 40}:     "Itronix Corporation",
+       [3]byte{0, 15, 41}:     "Augmentix Corporation",
+       [3]byte{0, 15, 42}:     "Cableware Electronics",
+       [3]byte{0, 15, 43}:     "GREENBELL SYSTEMS",
+       [3]byte{0, 15, 44}:     "Uplogix, Inc.",
+       [3]byte{0, 15, 45}:     "CHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP.",
+       [3]byte{0, 15, 46}:     "Megapower International Corp.",
+       [3]byte{0, 15, 47}:     "W-LINX TECHNOLOGY CO., LTD.",
+       [3]byte{0, 15, 48}:     "Raza Microelectronics Inc",
+       [3]byte{0, 15, 49}:     "Allied Vision Technologies Canada Inc",
+       [3]byte{0, 15, 50}:     "Lootom Telcovideo Network Wuxi Co Ltd",
+       [3]byte{0, 15, 51}:     "DUALi Inc.",
+       [3]byte{0, 15, 52}:     "Cisco Systems, Inc",
+       [3]byte{0, 15, 53}:     "Cisco Systems, Inc",
+       [3]byte{0, 15, 54}:     "Accurate Techhnologies, Inc.",
+       [3]byte{0, 15, 55}:     "Xambala Incorporated",
+       [3]byte{0, 15, 56}:     "Netstar",
+       [3]byte{0, 15, 57}:     "IRIS SENSORS",
+       [3]byte{0, 15, 58}:     "HISHARP",
+       [3]byte{0, 15, 59}:     "Fuji System Machines Co., Ltd.",
+       [3]byte{0, 15, 60}:     "Endeleo Limited",
+       [3]byte{0, 15, 61}:     "D-Link Corporation",
+       [3]byte{0, 15, 62}:     "CardioNet, Inc",
+       [3]byte{0, 15, 63}:     "Big Bear Networks",
+       [3]byte{0, 15, 64}:     "Optical Internetworking Forum",
+       [3]byte{0, 15, 65}:     "Zipher Ltd",
+       [3]byte{0, 15, 66}:     "Xalyo Systems",
+       [3]byte{0, 15, 67}:     "Wasabi Systems Inc.",
+       [3]byte{0, 15, 68}:     "Tivella Inc.",
+       [3]byte{0, 15, 69}:     "Stretch, Inc.",
+       [3]byte{0, 15, 70}:     "SINAR AG",
+       [3]byte{0, 15, 71}:     "ROBOX SPA",
+       [3]byte{0, 15, 72}:     "Polypix Inc.",
+       [3]byte{0, 15, 73}:     "Northover Solutions Limited",
+       [3]byte{0, 15, 74}:     "Kyushu-kyohan co.,ltd",
+       [3]byte{0, 15, 75}:     "Oracle Corporation",
+       [3]byte{0, 15, 76}:     "Elextech INC",
+       [3]byte{0, 15, 77}:     "TalkSwitch",
+       [3]byte{0, 15, 78}:     "Cellink",
+       [3]byte{0, 15, 79}:     "PCS Systemtechnik GmbH",
+       [3]byte{0, 15, 80}:     "StreamScale Limited",
+       [3]byte{0, 15, 81}:     "Azul Systems, Inc.",
+       [3]byte{0, 15, 82}:     "YORK Refrigeration, Marine & Controls",
+       [3]byte{0, 15, 83}:     "Solarflare Communications Inc",
+       [3]byte{0, 15, 84}:     "Entrelogic Corporation",
+       [3]byte{0, 15, 85}:     "Datawire Communication Networks Inc.",
+       [3]byte{0, 15, 86}:     "Continuum Photonics Inc",
+       [3]byte{0, 15, 87}:     "CABLELOGIC Co., Ltd.",
+       [3]byte{0, 15, 88}:     "Adder Technology Limited",
+       [3]byte{0, 15, 89}:     "Phonak AG",
+       [3]byte{0, 15, 90}:     "Peribit Networks",
+       [3]byte{0, 15, 91}:     "Delta Information Systems, Inc.",
+       [3]byte{0, 15, 92}:     "Day One Digital Media Limited",
+       [3]byte{0, 15, 93}:     "Genexis BV",
+       [3]byte{0, 15, 94}:     "Veo",
+       [3]byte{0, 15, 95}:     "Nicety Technologies Inc. (NTS)",
+       [3]byte{0, 15, 96}:     "Lifetron Co.,Ltd",
+       [3]byte{0, 15, 97}:     "Hewlett Packard",
+       [3]byte{0, 15, 98}:     "Alcatel Bell Space N.V.",
+       [3]byte{0, 15, 99}:     "Obzerv Technologies",
+       [3]byte{0, 15, 100}:    "D&R Electronica Weesp BV",
+       [3]byte{0, 15, 101}:    "icube Corp.",
+       [3]byte{0, 15, 102}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 15, 103}:    "West Instruments",
+       [3]byte{0, 15, 104}:    "Vavic Network Technology, Inc.",
+       [3]byte{0, 15, 105}:    "SEW Eurodrive GmbH & Co. KG",
+       [3]byte{0, 15, 106}:    "Nortel Networks",
+       [3]byte{0, 15, 107}:    "GateWare Communications GmbH",
+       [3]byte{0, 15, 108}:    "ADDI-DATA GmbH",
+       [3]byte{0, 15, 109}:    "Midas Engineering",
+       [3]byte{0, 15, 110}:    "BBox",
+       [3]byte{0, 15, 111}:    "FTA Communication Technologies",
+       [3]byte{0, 15, 112}:    "Wintec Industries, inc.",
+       [3]byte{0, 15, 113}:    "Sanmei Electronics Co.,Ltd",
+       [3]byte{0, 15, 114}:    "Sandburst",
+       [3]byte{0, 15, 115}:    "RS Automation Co., Ltd",
+       [3]byte{0, 15, 116}:    "Qamcom Technology AB",
+       [3]byte{0, 15, 117}:    "First Silicon Solutions",
+       [3]byte{0, 15, 118}:    "Digital Keystone, Inc.",
+       [3]byte{0, 15, 119}:    "DENTUM CO.,LTD",
+       [3]byte{0, 15, 120}:    "Datacap Systems Inc",
+       [3]byte{0, 15, 121}:    "Bluetooth Interest Group Inc.",
+       [3]byte{0, 15, 122}:    "BeiJing NuQX Technology CO.,LTD",
+       [3]byte{0, 15, 123}:    "Arce Sistemas, S.A.",
+       [3]byte{0, 15, 124}:    "ACTi Corporation",
+       [3]byte{0, 15, 125}:    "Xirrus",
+       [3]byte{0, 15, 126}:    "Ablerex Electronics Co., LTD",
+       [3]byte{0, 15, 127}:    "UBSTORAGE Co.,Ltd.",
+       [3]byte{0, 15, 128}:    "Trinity Security Systems,Inc.",
+       [3]byte{0, 15, 129}:    "PAL Pacific Inc.",
+       [3]byte{0, 15, 130}:    "Mortara Instrument, Inc.",
+       [3]byte{0, 15, 131}:    "Brainium Technologies Inc.",
+       [3]byte{0, 15, 132}:    "Astute Networks, Inc.",
+       [3]byte{0, 15, 133}:    "ADDO-Japan Corporation",
+       [3]byte{0, 15, 134}:    "BlackBerry RTS",
+       [3]byte{0, 15, 135}:    "Maxcess International",
+       [3]byte{0, 15, 136}:    "AMETEK, Inc.",
+       [3]byte{0, 15, 137}:    "Winnertec System Co., Ltd.",
+       [3]byte{0, 15, 138}:    "WideView",
+       [3]byte{0, 15, 139}:    "Orion MultiSystems Inc",
+       [3]byte{0, 15, 140}:    "Gigawavetech Pte Ltd",
+       [3]byte{0, 15, 141}:    "FAST TV-Server AG",
+       [3]byte{0, 15, 142}:    "DONGYANG TELECOM CO.,LTD.",
+       [3]byte{0, 15, 143}:    "Cisco Systems, Inc",
+       [3]byte{0, 15, 144}:    "Cisco Systems, Inc",
+       [3]byte{0, 15, 145}:    "Aerotelecom Co.,Ltd.",
+       [3]byte{0, 15, 146}:    "Microhard Systems Inc.",
+       [3]byte{0, 15, 147}:    "Landis+Gyr Ltd.",
+       [3]byte{0, 15, 148}:    "Genexis BV",
+       [3]byte{0, 15, 149}:    "ELECOM Co.,LTD Laneed Division",
+       [3]byte{0, 15, 150}:    "Telco Systems, Inc.",
+       [3]byte{0, 15, 151}:    "Avanex Corporation",
+       [3]byte{0, 15, 152}:    "Avamax Co. Ltd.",
+       [3]byte{0, 15, 153}:    "APAC opto Electronics Inc.",
+       [3]byte{0, 15, 154}:    "Synchrony, Inc.",
+       [3]byte{0, 15, 155}:    "Ross Video Limited",
+       [3]byte{0, 15, 156}:    "Panduit Corp",
+       [3]byte{0, 15, 157}:    "DisplayLink (UK) Ltd",
+       [3]byte{0, 15, 158}:    "Murrelektronik GmbH",
+       [3]byte{0, 15, 159}:    "ARRIS Group, Inc.",
+       [3]byte{0, 15, 160}:    "CANON KOREA BUSINESS SOLUTIONS INC.",
+       [3]byte{0, 15, 161}:    "Gigabit Systems Inc.",
+       [3]byte{0, 15, 162}:    "2xWireless",
+       [3]byte{0, 15, 163}:    "Alpha Networks Inc.",
+       [3]byte{0, 15, 164}:    "Sprecher Automation GmbH",
+       [3]byte{0, 15, 165}:    "BWA Technology GmbH",
+       [3]byte{0, 15, 166}:    "S2 Security Corporation",
+       [3]byte{0, 15, 167}:    "Raptor Networks Technology",
+       [3]byte{0, 15, 168}:    "Photometrics, Inc.",
+       [3]byte{0, 15, 169}:    "PC Fabrik",
+       [3]byte{0, 15, 170}:    "Nexus Technologies",
+       [3]byte{0, 15, 171}:    "Kyushu Electronics Systems Inc.",
+       [3]byte{0, 15, 172}:    "IEEE 802.11",
+       [3]byte{0, 15, 173}:    "FMN communications GmbH",
+       [3]byte{0, 15, 174}:    "E2O Communications",
+       [3]byte{0, 15, 175}:    "Dialog Inc.",
+       [3]byte{0, 15, 176}:    "COMPAL ELECTRONICS, INC.",
+       [3]byte{0, 15, 177}:    "Cognio Inc.",
+       [3]byte{0, 15, 178}:    "Broadband Pacenet (India) Pvt. Ltd.",
+       [3]byte{0, 15, 179}:    "Actiontec Electronics, Inc",
+       [3]byte{0, 15, 180}:    "Timespace Technology",
+       [3]byte{0, 15, 181}:    "NETGEAR",
+       [3]byte{0, 15, 182}:    "Europlex Technologies",
+       [3]byte{0, 15, 183}:    "Cavium",
+       [3]byte{0, 15, 184}:    "CallURL Inc.",
+       [3]byte{0, 15, 185}:    "Adaptive Instruments",
+       [3]byte{0, 15, 186}:    "Tevebox AB",
+       [3]byte{0, 15, 187}:    "Nokia Siemens Networks GmbH & Co. KG.",
+       [3]byte{0, 15, 188}:    "Onkey Technologies, Inc.",
+       [3]byte{0, 15, 189}:    "MRV Communications (Networks) LTD",
+       [3]byte{0, 15, 190}:    "e-w/you Inc.",
+       [3]byte{0, 15, 191}:    "DGT Sp. z o.o.",
+       [3]byte{0, 15, 192}:    "DELCOMp",
+       [3]byte{0, 15, 193}:    "WAVE Corporation",
+       [3]byte{0, 15, 194}:    "Uniwell Corporation",
+       [3]byte{0, 15, 195}:    "PalmPalm Technology, Inc.",
+       [3]byte{0, 15, 196}:    "NST co.,LTD.",
+       [3]byte{0, 15, 197}:    "KeyMed Ltd",
+       [3]byte{0, 15, 198}:    "Eurocom Industries A/S",
+       [3]byte{0, 15, 199}:    "Dionica R&D Ltd.",
+       [3]byte{0, 15, 200}:    "Chantry Networks",
+       [3]byte{0, 15, 201}:    "Allnet GmbH",
+       [3]byte{0, 15, 202}:    "A-JIN TECHLINE CO, LTD",
+       [3]byte{0, 15, 203}:    "3Com Ltd",
+       [3]byte{0, 15, 204}:    "ARRIS Group, Inc.",
+       [3]byte{0, 15, 205}:    "Nortel Networks",
+       [3]byte{0, 15, 206}:    "Kikusui Electronics Corp.",
+       [3]byte{0, 15, 207}:    "DataWind Research",
+       [3]byte{0, 15, 208}:    "ASTRI",
+       [3]byte{0, 15, 209}:    "Applied Wireless Identifications Group, Inc.",
+       [3]byte{0, 15, 210}:    "EWA Technologies, Inc.",
+       [3]byte{0, 15, 211}:    "Digium",
+       [3]byte{0, 15, 212}:    "Soundcraft",
+       [3]byte{0, 15, 213}:    "Schwechat - RISE",
+       [3]byte{0, 15, 214}:    "Sarotech Co., Ltd",
+       [3]byte{0, 15, 215}:    "Harman Music Group",
+       [3]byte{0, 15, 216}:    "Force, Inc.",
+       [3]byte{0, 15, 217}:    "FlexDSL Telecommunications AG",
+       [3]byte{0, 15, 218}:    "YAZAKI CORPORATION",
+       [3]byte{0, 15, 219}:    "Westell Technologies Inc.",
+       [3]byte{0, 15, 220}:    "Ueda Japan  Radio Co., Ltd.",
+       [3]byte{0, 15, 221}:    "SORDIN AB",
+       [3]byte{0, 15, 222}:    "Sony Mobile Communications AB",
+       [3]byte{0, 15, 223}:    "SOLOMON Technology Corp.",
+       [3]byte{0, 15, 224}:    "NComputing Co.,Ltd.",
+       [3]byte{0, 15, 225}:    "ID DIGITAL CORPORATION",
+       [3]byte{0, 15, 226}:    "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{0, 15, 227}:    "Damm Cellular Systems A/S",
+       [3]byte{0, 15, 228}:    "Pantech Co.,Ltd",
+       [3]byte{0, 15, 229}:    "MERCURY SECURITY CORPORATION",
+       [3]byte{0, 15, 230}:    "MBTech Systems, Inc.",
+       [3]byte{0, 15, 231}:    "Lutron Electronics Co., Inc.",
+       [3]byte{0, 15, 232}:    "Lobos, Inc.",
+       [3]byte{0, 15, 233}:    "GW TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 15, 234}:    "Giga-Byte Technology Co.,LTD.",
+       [3]byte{0, 15, 235}:    "Cylon Controls",
+       [3]byte{0, 15, 236}:    "ARKUS Inc.",
+       [3]byte{0, 15, 237}:    "Anam Electronics Co., Ltd",
+       [3]byte{0, 15, 238}:    "XTec, Incorporated",
+       [3]byte{0, 15, 239}:    "Thales e-Transactions GmbH",
+       [3]byte{0, 15, 240}:    "Sunray Co. Ltd.",
+       [3]byte{0, 15, 241}:    "nex-G Systems Pte.Ltd",
+       [3]byte{0, 15, 242}:    "Loud Technologies Inc.",
+       [3]byte{0, 15, 243}:    "Jung Myoung Communications&Technology",
+       [3]byte{0, 15, 244}:    "Guntermann & Drunck GmbH",
+       [3]byte{0, 15, 245}:    "GN&S company",
+       [3]byte{0, 15, 246}:    "DARFON LIGHTING CORP",
+       [3]byte{0, 15, 247}:    "Cisco Systems, Inc",
+       [3]byte{0, 15, 248}:    "Cisco Systems, Inc",
+       [3]byte{0, 15, 249}:    "Valcretec, Inc.",
+       [3]byte{0, 15, 250}:    "Optinel Systems, Inc.",
+       [3]byte{0, 15, 251}:    "Nippon Denso Industry Co., Ltd.",
+       [3]byte{0, 15, 252}:    "Merit Li-Lin Ent.",
+       [3]byte{0, 15, 253}:    "Glorytek Network Inc.",
+       [3]byte{0, 15, 254}:    "G-PRO COMPUTER",
+       [3]byte{0, 15, 255}:    "Control4",
+       [3]byte{0, 16, 0}:      "CABLE TELEVISION LABORATORIES, INC.",
+       [3]byte{0, 16, 1}:      "Citel",
+       [3]byte{0, 16, 2}:      "ACTIA",
+       [3]byte{0, 16, 3}:      "IMATRON, INC.",
+       [3]byte{0, 16, 4}:      "THE BRANTLEY COILE COMPANY,INC",
+       [3]byte{0, 16, 5}:      "UEC COMMERCIAL",
+       [3]byte{0, 16, 6}:      "Thales Contact Solutions Ltd.",
+       [3]byte{0, 16, 7}:      "Cisco Systems, Inc",
+       [3]byte{0, 16, 8}:      "VIENNA SYSTEMS CORPORATION",
+       [3]byte{0, 16, 9}:      "HORANET",
+       [3]byte{0, 16, 10}:     "WILLIAMS COMMUNICATIONS GROUP",
+       [3]byte{0, 16, 11}:     "Cisco Systems, Inc",
+       [3]byte{0, 16, 12}:     "ITO CO., LTD.",
+       [3]byte{0, 16, 13}:     "Cisco Systems, Inc",
+       [3]byte{0, 16, 14}:     "MICRO LINEAR COPORATION",
+       [3]byte{0, 16, 15}:     "INDUSTRIAL CPU SYSTEMS",
+       [3]byte{0, 16, 16}:     "INITIO CORPORATION",
+       [3]byte{0, 16, 17}:     "Cisco Systems, Inc",
+       [3]byte{0, 16, 18}:     "PROCESSOR SYSTEMS (I) PVT LTD",
+       [3]byte{0, 16, 19}:     "Kontron America, Inc.",
+       [3]byte{0, 16, 20}:     "Cisco Systems, Inc",
+       [3]byte{0, 16, 21}:     "OOmon Inc.",
+       [3]byte{0, 16, 22}:     "T.SQWARE",
+       [3]byte{0, 16, 23}:     "Bosch Access Systems GmbH",
+       [3]byte{0, 16, 24}:     "Broadcom",
+       [3]byte{0, 16, 25}:     "SIRONA DENTAL SYSTEMS GmbH & Co. KG",
+       [3]byte{0, 16, 26}:     "PictureTel Corp.",
+       [3]byte{0, 16, 27}:     "CORNET TECHNOLOGY, INC.",
+       [3]byte{0, 16, 28}:     "OHM TECHNOLOGIES INTL, LLC",
+       [3]byte{0, 16, 29}:     "WINBOND ELECTRONICS CORP.",
+       [3]byte{0, 16, 30}:     "MATSUSHITA ELECTRONIC INSTRUMENTS CORP.",
+       [3]byte{0, 16, 31}:     "Cisco Systems, Inc",
+       [3]byte{0, 16, 32}:     "Hand Held Products Inc",
+       [3]byte{0, 16, 33}:     "ENCANTO NETWORKS, INC.",
+       [3]byte{0, 16, 34}:     "SatCom Media Corporation",
+       [3]byte{0, 16, 35}:     "Network Equipment Technologies",
+       [3]byte{0, 16, 36}:     "NAGOYA ELECTRIC WORKS CO., LTD",
+       [3]byte{0, 16, 37}:     "Grayhill, Inc",
+       [3]byte{0, 16, 38}:     "ACCELERATED NETWORKS, INC.",
+       [3]byte{0, 16, 39}:     "L-3 COMMUNICATIONS EAST",
+       [3]byte{0, 16, 40}:     "COMPUTER TECHNICA, INC.",
+       [3]byte{0, 16, 41}:     "Cisco Systems, Inc",
+       [3]byte{0, 16, 42}:     "ZF MICROSYSTEMS, INC.",
+       [3]byte{0, 16, 43}:     "UMAX DATA SYSTEMS, INC.",
+       [3]byte{0, 16, 44}:     "Lasat Networks A/S",
+       [3]byte{0, 16, 45}:     "HITACHI SOFTWARE ENGINEERING",
+       [3]byte{0, 16, 46}:     "NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD.",
+       [3]byte{0, 16, 47}:     "Cisco Systems, Inc",
+       [3]byte{0, 16, 48}:     "EION Inc.",
+       [3]byte{0, 16, 49}:     "OBJECTIVE COMMUNICATIONS, INC.",
+       [3]byte{0, 16, 50}:     "ALTA TECHNOLOGY",
+       [3]byte{0, 16, 51}:     "ACCESSLAN COMMUNICATIONS, INC.",
+       [3]byte{0, 16, 52}:     "GNP Computers",
+       [3]byte{0, 16, 53}:     "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 16, 54}:     "INTER-TEL INTEGRATED SYSTEMS",
+       [3]byte{0, 16, 55}:     "CYQ've Technology Co., Ltd.",
+       [3]byte{0, 16, 56}:     "MICRO RESEARCH INSTITUTE, INC.",
+       [3]byte{0, 16, 57}:     "Vectron Systems AG",
+       [3]byte{0, 16, 58}:     "DIAMOND NETWORK TECH",
+       [3]byte{0, 16, 59}:     "HIPPI NETWORKING FORUM",
+       [3]byte{0, 16, 60}:     "IC ENSEMBLE, INC.",
+       [3]byte{0, 16, 61}:     "PHASECOM, LTD.",
+       [3]byte{0, 16, 62}:     "NETSCHOOLS CORPORATION",
+       [3]byte{0, 16, 63}:     "TOLLGRADE COMMUNICATIONS, INC.",
+       [3]byte{0, 16, 64}:     "INTERMEC CORPORATION",
+       [3]byte{0, 16, 65}:     "BRISTOL BABCOCK, INC.",
+       [3]byte{0, 16, 66}:     "Alacritech, Inc.",
+       [3]byte{0, 16, 67}:     "A2 CORPORATION",
+       [3]byte{0, 16, 68}:     "InnoLabs Corporation",
+       [3]byte{0, 16, 69}:     "Nortel Networks",
+       [3]byte{0, 16, 70}:     "ALCORN MCBRIDE INC.",
+       [3]byte{0, 16, 71}:     "ECHO ELETRIC CO. LTD.",
+       [3]byte{0, 16, 72}:     "HTRC AUTOMATION, INC.",
+       [3]byte{0, 16, 73}:     "ShoreTel, Inc",
+       [3]byte{0, 16, 74}:     "The Parvus Corporation",
+       [3]byte{0, 16, 75}:     "3COM CORPORATION",
+       [3]byte{0, 16, 76}:     "Teledyne LeCroy, Inc",
+       [3]byte{0, 16, 77}:     "SURTEC INDUSTRIES, INC.",
+       [3]byte{0, 16, 78}:     "CEOLOGIC",
+       [3]byte{0, 16, 79}:     "Oracle Corporation",
+       [3]byte{0, 16, 80}:     "RION CO., LTD.",
+       [3]byte{0, 16, 81}:     "CMICRO CORPORATION",
+       [3]byte{0, 16, 82}:     "METTLER-TOLEDO (ALBSTADT) GMBH",
+       [3]byte{0, 16, 83}:     "COMPUTER TECHNOLOGY CORP.",
+       [3]byte{0, 16, 84}:     "Cisco Systems, Inc",
+       [3]byte{0, 16, 85}:     "FUJITSU MICROELECTRONICS, INC.",
+       [3]byte{0, 16, 86}:     "SODICK CO., LTD.",
+       [3]byte{0, 16, 87}:     "Rebel.com, Inc.",
+       [3]byte{0, 16, 88}:     "ArrowPoint Communications",
+       [3]byte{0, 16, 89}:     "DIABLO RESEARCH CO. LLC",
+       [3]byte{0, 16, 90}:     "3COM CORPORATION",
+       [3]byte{0, 16, 91}:     "NET INSIGHT AB",
+       [3]byte{0, 16, 92}:     "QUANTUM DESIGNS (H.K.) LTD.",
+       [3]byte{0, 16, 93}:     "Draeger Medical",
+       [3]byte{0, 16, 94}:     "Spirent plc, Service Assurance Broadband",
+       [3]byte{0, 16, 95}:     "ZODIAC DATA SYSTEMS",
+       [3]byte{0, 16, 96}:     "BILLIONTON SYSTEMS, INC.",
+       [3]byte{0, 16, 97}:     "HOSTLINK CORP.",
+       [3]byte{0, 16, 98}:     "NX SERVER, ILNC.",
+       [3]byte{0, 16, 99}:     "STARGUIDE DIGITAL NETWORKS",
+       [3]byte{0, 16, 100}:    "DNPG, LLC",
+       [3]byte{0, 16, 101}:    "RADYNE CORPORATION",
+       [3]byte{0, 16, 102}:    "ADVANCED CONTROL SYSTEMS, INC.",
+       [3]byte{0, 16, 103}:    "Ericsson",
+       [3]byte{0, 16, 104}:    "COMOS TELECOM",
+       [3]byte{0, 16, 105}:    "HELIOSS COMMUNICATIONS, INC.",
+       [3]byte{0, 16, 106}:    "DIGITAL MICROWAVE CORPORATION",
+       [3]byte{0, 16, 107}:    "SONUS NETWORKS, INC.",
+       [3]byte{0, 16, 108}:    "EDNT GmbH",
+       [3]byte{0, 16, 109}:    "Axxcelera Broadband Wireless",
+       [3]byte{0, 16, 110}:    "TADIRAN COM. LTD.",
+       [3]byte{0, 16, 111}:    "TRENTON TECHNOLOGY INC.",
+       [3]byte{0, 16, 112}:    "CARADON TREND LTD.",
+       [3]byte{0, 16, 113}:    "ADVANET INC.",
+       [3]byte{0, 16, 114}:    "GVN TECHNOLOGIES, INC.",
+       [3]byte{0, 16, 115}:    "TECHNOBOX, INC.",
+       [3]byte{0, 16, 116}:    "ATEN INTERNATIONAL CO., LTD.",
+       [3]byte{0, 16, 117}:    "Segate Technology LLC",
+       [3]byte{0, 16, 118}:    "EUREM GmbH",
+       [3]byte{0, 16, 119}:    "SAF DRIVE SYSTEMS, LTD.",
+       [3]byte{0, 16, 120}:    "NUERA COMMUNICATIONS, INC.",
+       [3]byte{0, 16, 121}:    "Cisco Systems, Inc",
+       [3]byte{0, 16, 122}:    "AmbiCom, Inc.",
+       [3]byte{0, 16, 123}:    "Cisco Systems, Inc",
+       [3]byte{0, 16, 124}:    "P-COM, INC.",
+       [3]byte{0, 16, 125}:    "AURORA COMMUNICATIONS, LTD.",
+       [3]byte{0, 16, 126}:    "BACHMANN ELECTRONIC GmbH",
+       [3]byte{0, 16, 127}:    "CRESTRON ELECTRONICS, INC.",
+       [3]byte{0, 16, 128}:    "METAWAVE COMMUNICATIONS",
+       [3]byte{0, 16, 129}:    "DPS, INC.",
+       [3]byte{0, 16, 130}:    "JNA TELECOMMUNICATIONS LIMITED",
+       [3]byte{0, 16, 131}:    "Hewlett Packard",
+       [3]byte{0, 16, 132}:    "K-BOT COMMUNICATIONS",
+       [3]byte{0, 16, 133}:    "POLARIS COMMUNICATIONS, INC.",
+       [3]byte{0, 16, 134}:    "ATTO Technology, Inc.",
+       [3]byte{0, 16, 135}:    "XSTREAMIS PLC",
+       [3]byte{0, 16, 136}:    "AMERICAN NETWORKS INC.",
+       [3]byte{0, 16, 137}:    "WebSonic",
+       [3]byte{0, 16, 138}:    "TeraLogic, Inc.",
+       [3]byte{0, 16, 139}:    "LASERANIMATION SOLLINGER GMBH",
+       [3]byte{0, 16, 140}:    "Fujitsu Services Ltd",
+       [3]byte{0, 16, 141}:    "Johnson Controls, Inc.",
+       [3]byte{0, 16, 142}:    "HUGH SYMONS CONCEPT Technologies Ltd.",
+       [3]byte{0, 16, 143}:    "RAPTOR SYSTEMS",
+       [3]byte{0, 16, 144}:    "CIMETRICS, INC.",
+       [3]byte{0, 16, 145}:    "NO WIRES NEEDED BV",
+       [3]byte{0, 16, 146}:    "NETCORE INC.",
+       [3]byte{0, 16, 147}:    "CMS COMPUTERS, LTD.",
+       [3]byte{0, 16, 148}:    "Performance Analysis Broadband, Spirent plc",
+       [3]byte{0, 16, 149}:    "Thomson Inc.",
+       [3]byte{0, 16, 150}:    "TRACEWELL SYSTEMS, INC.",
+       [3]byte{0, 16, 151}:    "WinNet Metropolitan Communications Systems, Inc.",
+       [3]byte{0, 16, 152}:    "STARNET TECHNOLOGIES, INC.",
+       [3]byte{0, 16, 153}:    "InnoMedia, Inc.",
+       [3]byte{0, 16, 154}:    "NETLINE",
+       [3]byte{0, 16, 155}:    "Emulex Corporation",
+       [3]byte{0, 16, 156}:    "M-SYSTEM CO., LTD.",
+       [3]byte{0, 16, 157}:    "CLARINET SYSTEMS, INC.",
+       [3]byte{0, 16, 158}:    "AWARE, INC.",
+       [3]byte{0, 16, 159}:    "PAVO, INC.",
+       [3]byte{0, 16, 160}:    "INNOVEX TECHNOLOGIES, INC.",
+       [3]byte{0, 16, 161}:    "KENDIN SEMICONDUCTOR, INC.",
+       [3]byte{0, 16, 162}:    "TNS",
+       [3]byte{0, 16, 163}:    "OMNITRONIX, INC.",
+       [3]byte{0, 16, 164}:    "XIRCOM",
+       [3]byte{0, 16, 165}:    "OXFORD INSTRUMENTS",
+       [3]byte{0, 16, 166}:    "Cisco Systems, Inc",
+       [3]byte{0, 16, 167}:    "UNEX TECHNOLOGY CORPORATION",
+       [3]byte{0, 16, 168}:    "RELIANCE COMPUTER CORP.",
+       [3]byte{0, 16, 169}:    "ADHOC TECHNOLOGIES",
+       [3]byte{0, 16, 170}:    "MEDIA4, INC.",
+       [3]byte{0, 16, 171}:    "KOITO ELECTRIC INDUSTRIES, LTD.",
+       [3]byte{0, 16, 172}:    "IMCI TECHNOLOGIES",
+       [3]byte{0, 16, 173}:    "SOFTRONICS USB, INC.",
+       [3]byte{0, 16, 174}:    "SHINKO ELECTRIC INDUSTRIES CO.",
+       [3]byte{0, 16, 175}:    "TAC SYSTEMS, INC.",
+       [3]byte{0, 16, 176}:    "MERIDIAN TECHNOLOGY CORP.",
+       [3]byte{0, 16, 177}:    "FOR-A CO., LTD.",
+       [3]byte{0, 16, 178}:    "COACTIVE AESTHETICS",
+       [3]byte{0, 16, 179}:    "NOKIA MULTIMEDIA TERMINALS",
+       [3]byte{0, 16, 180}:    "ATMOSPHERE NETWORKS",
+       [3]byte{0, 16, 181}:    "Accton Technology Corp",
+       [3]byte{0, 16, 182}:    "ENTRATA COMMUNICATIONS CORP.",
+       [3]byte{0, 16, 183}:    "COYOTE TECHNOLOGIES, LLC",
+       [3]byte{0, 16, 184}:    "ISHIGAKI COMPUTER SYSTEM CO.",
+       [3]byte{0, 16, 185}:    "MAXTOR CORP.",
+       [3]byte{0, 16, 186}:    "MARTINHO-DAVIS SYSTEMS, INC.",
+       [3]byte{0, 16, 187}:    "DATA & INFORMATION TECHNOLOGY",
+       [3]byte{0, 16, 188}:    "Aastra Telecom",
+       [3]byte{0, 16, 189}:    "THE TELECOMMUNICATION TECHNOLOGY COMMITTEE (TTC)",
+       [3]byte{0, 16, 190}:    "MARCH NETWORKS CORPORATION",
+       [3]byte{0, 16, 191}:    "InterAir Wireless",
+       [3]byte{0, 16, 192}:    "ARMA, Inc.",
+       [3]byte{0, 16, 193}:    "OI ELECTRIC CO.,LTD",
+       [3]byte{0, 16, 194}:    "WILLNET, INC.",
+       [3]byte{0, 16, 195}:    "CSI-CONTROL SYSTEMS",
+       [3]byte{0, 16, 196}:    "MEDIA GLOBAL LINKS CO., LTD.",
+       [3]byte{0, 16, 197}:    "PROTOCOL TECHNOLOGIES, INC.",
+       [3]byte{0, 16, 198}:    "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{0, 16, 199}:    "DATA TRANSMISSION NETWORK",
+       [3]byte{0, 16, 200}:    "COMMUNICATIONS ELECTRONICS SECURITY GROUP",
+       [3]byte{0, 16, 201}:    "MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO.",
+       [3]byte{0, 16, 202}:    "Telco Systems, Inc.",
+       [3]byte{0, 16, 203}:    "FACIT K.K.",
+       [3]byte{0, 16, 204}:    "CLP COMPUTER LOGISTIK PLANUNG GmbH",
+       [3]byte{0, 16, 205}:    "INTERFACE CONCEPT",
+       [3]byte{0, 16, 206}:    "VOLAMP, LTD.",
+       [3]byte{0, 16, 207}:    "FIBERLANE COMMUNICATIONS",
+       [3]byte{0, 16, 208}:    "WITCOM, LTD.",
+       [3]byte{0, 16, 209}:    "Top Layer Networks, Inc.",
+       [3]byte{0, 16, 210}:    "NITTO TSUSHINKI CO., LTD",
+       [3]byte{0, 16, 211}:    "GRIPS ELECTRONIC GMBH",
+       [3]byte{0, 16, 212}:    "STORAGE COMPUTER CORPORATION",
+       [3]byte{0, 16, 213}:    "IMASDE CANARIAS, S.A.",
+       [3]byte{0, 16, 214}:    "Exelis",
+       [3]byte{0, 16, 215}:    "ARGOSY RESEARCH INC.",
+       [3]byte{0, 16, 216}:    "CALISTA",
+       [3]byte{0, 16, 217}:    "IBM JAPAN, FUJISAWA MT+D",
+       [3]byte{0, 16, 218}:    "Kollmorgen Corp",
+       [3]byte{0, 16, 219}:    "Juniper Networks",
+       [3]byte{0, 16, 220}:    "MICRO-STAR INTERNATIONAL CO., LTD.",
+       [3]byte{0, 16, 221}:    "ENABLE SEMICONDUCTOR, INC.",
+       [3]byte{0, 16, 222}:    "INTERNATIONAL DATACASTING CORPORATION",
+       [3]byte{0, 16, 223}:    "RISE COMPUTER INC.",
+       [3]byte{0, 16, 224}:    "Oracle Corporation",
+       [3]byte{0, 16, 225}:    "S.I. TECH, INC.",
+       [3]byte{0, 16, 226}:    "ArrayComm, Inc.",
+       [3]byte{0, 16, 227}:    "Hewlett Packard",
+       [3]byte{0, 16, 228}:    "NSI CORPORATION",
+       [3]byte{0, 16, 229}:    "SOLECTRON TEXAS",
+       [3]byte{0, 16, 230}:    "APPLIED INTELLIGENT SYSTEMS, INC.",
+       [3]byte{0, 16, 231}:    "Breezecom, Ltd.",
+       [3]byte{0, 16, 232}:    "TELOCITY, INCORPORATED",
+       [3]byte{0, 16, 233}:    "RAIDTEC LTD.",
+       [3]byte{0, 16, 234}:    "ADEPT TECHNOLOGY",
+       [3]byte{0, 16, 235}:    "SELSIUS SYSTEMS, INC.",
+       [3]byte{0, 16, 236}:    "RPCG, LLC",
+       [3]byte{0, 16, 237}:    "SUNDANCE TECHNOLOGY, INC.",
+       [3]byte{0, 16, 238}:    "CTI PRODUCTS, INC.",
+       [3]byte{0, 16, 239}:    "DBTEL INCORPORATED",
+       [3]byte{0, 16, 240}:    "RITTAL-WERK RUDOLF LOH GmbH & Co.",
+       [3]byte{0, 16, 241}:    "I-O CORPORATION",
+       [3]byte{0, 16, 242}:    "ANTEC",
+       [3]byte{0, 16, 243}:    "Nexcom International Co., Ltd.",
+       [3]byte{0, 16, 244}:    "Vertical Communications",
+       [3]byte{0, 16, 245}:    "AMHERST SYSTEMS, INC.",
+       [3]byte{0, 16, 246}:    "Cisco Systems, Inc",
+       [3]byte{0, 16, 247}:    "IRIICHI TECHNOLOGIES Inc.",
+       [3]byte{0, 16, 248}:    "TEXIO TECHNOLOGY CORPORATION",
+       [3]byte{0, 16, 249}:    "UNIQUE SYSTEMS, INC.",
+       [3]byte{0, 16, 250}:    "Apple, Inc.",
+       [3]byte{0, 16, 251}:    "ZIDA TECHNOLOGIES LIMITED",
+       [3]byte{0, 16, 252}:    "BROADBAND NETWORKS, INC.",
+       [3]byte{0, 16, 253}:    "COCOM A/S",
+       [3]byte{0, 16, 254}:    "DIGITAL EQUIPMENT CORPORATION",
+       [3]byte{0, 16, 255}:    "Cisco Systems, Inc",
+       [3]byte{0, 17, 0}:      "Schneider Electric",
+       [3]byte{0, 17, 1}:      "CET Technologies Pte Ltd",
+       [3]byte{0, 17, 2}:      "Aurora Multimedia Corp.",
+       [3]byte{0, 17, 3}:      "kawamura electric inc.",
+       [3]byte{0, 17, 4}:      "TELEXY",
+       [3]byte{0, 17, 5}:      "Sunplus Technology Co., Ltd.",
+       [3]byte{0, 17, 6}:      "Siemens NV (Belgium)",
+       [3]byte{0, 17, 7}:      "RGB Networks Inc.",
+       [3]byte{0, 17, 8}:      "Orbital Data Corporation",
+       [3]byte{0, 17, 9}:      "Micro-Star International",
+       [3]byte{0, 17, 10}:     "Hewlett Packard",
+       [3]byte{0, 17, 11}:     "Franklin Technology Systems",
+       [3]byte{0, 17, 12}:     "Atmark Techno, Inc.",
+       [3]byte{0, 17, 13}:     "SANBlaze Technology, Inc.",
+       [3]byte{0, 17, 14}:     "Tsurusaki Sealand Transportation Co. Ltd.",
+       [3]byte{0, 17, 15}:     "netplat,Inc.",
+       [3]byte{0, 17, 16}:     "Maxanna Technology Co., Ltd.",
+       [3]byte{0, 17, 17}:     "Intel Corporation",
+       [3]byte{0, 17, 18}:     "Honeywell CMSS",
+       [3]byte{0, 17, 19}:     "Fraunhofer FOKUS",
+       [3]byte{0, 17, 20}:     "EverFocus Electronics Corp.",
+       [3]byte{0, 17, 21}:     "EPIN Technologies, Inc.",
+       [3]byte{0, 17, 22}:     "COTEAU VERT CO., LTD.",
+       [3]byte{0, 17, 23}:     "CESNET",
+       [3]byte{0, 17, 24}:     "BLX IC Design Corp., Ltd.",
+       [3]byte{0, 17, 25}:     "Solteras, Inc.",
+       [3]byte{0, 17, 26}:     "ARRIS Group, Inc.",
+       [3]byte{0, 17, 27}:     "Targa Systems Div L-3 Communications",
+       [3]byte{0, 17, 28}:     "Pleora Technologies Inc.",
+       [3]byte{0, 17, 29}:     "Hectrix Limited",
+       [3]byte{0, 17, 30}:     "EPSG (Ethernet Powerlink Standardization Group)",
+       [3]byte{0, 17, 31}:     "Doremi Labs, Inc.",
+       [3]byte{0, 17, 32}:     "Cisco Systems, Inc",
+       [3]byte{0, 17, 33}:     "Cisco Systems, Inc",
+       [3]byte{0, 17, 34}:     "CIMSYS Inc",
+       [3]byte{0, 17, 35}:     "Appointech, Inc.",
+       [3]byte{0, 17, 36}:     "Apple, Inc.",
+       [3]byte{0, 17, 37}:     "IBM Corp",
+       [3]byte{0, 17, 38}:     "Venstar Inc.",
+       [3]byte{0, 17, 39}:     "TASI, Inc",
+       [3]byte{0, 17, 40}:     "Streamit",
+       [3]byte{0, 17, 41}:     "Paradise Datacom Ltd.",
+       [3]byte{0, 17, 42}:     "Niko NV",
+       [3]byte{0, 17, 43}:     "NetModule AG",
+       [3]byte{0, 17, 44}:     "IZT GmbH",
+       [3]byte{0, 17, 45}:     "iPulse Systems",
+       [3]byte{0, 17, 46}:     "CEICOM",
+       [3]byte{0, 17, 47}:     "ASUSTek COMPUTER INC.",
+       [3]byte{0, 17, 48}:     "Allied Telesis (Hong Kong) Ltd.",
+       [3]byte{0, 17, 49}:     "UNATECH. CO.,LTD",
+       [3]byte{0, 17, 50}:     "Synology Incorporated",
+       [3]byte{0, 17, 51}:     "Siemens Austria SIMEA",
+       [3]byte{0, 17, 52}:     "MediaCell, Inc.",
+       [3]byte{0, 17, 53}:     "Grandeye Ltd",
+       [3]byte{0, 17, 54}:     "Goodrich Sensor Systems",
+       [3]byte{0, 17, 55}:     "AICHI ELECTRIC CO., LTD.",
+       [3]byte{0, 17, 56}:     "TAISHIN CO., LTD.",
+       [3]byte{0, 17, 57}:     "STOEBER ANTRIEBSTECHNIK GmbH + Co. KG.",
+       [3]byte{0, 17, 58}:     "SHINBORAM",
+       [3]byte{0, 17, 59}:     "Micronet Communications Inc.",
+       [3]byte{0, 17, 60}:     "Micronas GmbH",
+       [3]byte{0, 17, 61}:     "KN SOLTEC CO.,LTD.",
+       [3]byte{0, 17, 62}:     "JL Corporation",
+       [3]byte{0, 17, 63}:     "Alcatel DI",
+       [3]byte{0, 17, 64}:     "Nanometrics Inc.",
+       [3]byte{0, 17, 65}:     "GoodMan Corporation",
+       [3]byte{0, 17, 66}:     "e-SMARTCOM  INC.",
+       [3]byte{0, 17, 67}:     "Dell Inc.",
+       [3]byte{0, 17, 68}:     "Assurance Technology Corp",
+       [3]byte{0, 17, 69}:     "ValuePoint Networks",
+       [3]byte{0, 17, 70}:     "Telecard-Pribor Ltd",
+       [3]byte{0, 17, 71}:     "Secom-Industry co.LTD.",
+       [3]byte{0, 17, 72}:     "Prolon Control Systems",
+       [3]byte{0, 17, 73}:     "Proliphix Inc.",
+       [3]byte{0, 17, 74}:     "KAYABA INDUSTRY Co,.Ltd.",
+       [3]byte{0, 17, 75}:     "Francotyp-Postalia GmbH",
+       [3]byte{0, 17, 76}:     "caffeina applied research ltd.",
+       [3]byte{0, 17, 77}:     "Atsumi Electric Co.,LTD.",
+       [3]byte{0, 17, 78}:     "690885 Ontario Inc.",
+       [3]byte{0, 17, 79}:     "US Digital Television, Inc",
+       [3]byte{0, 17, 80}:     "Belkin Corporation",
+       [3]byte{0, 17, 81}:     "Mykotronx",
+       [3]byte{0, 17, 82}:     "Eidsvoll Electronics AS",
+       [3]byte{0, 17, 83}:     "Trident Tek, Inc.",
+       [3]byte{0, 17, 84}:     "Webpro Technologies Inc.",
+       [3]byte{0, 17, 85}:     "Sevis Systems",
+       [3]byte{0, 17, 86}:     "Pharos Systems NZ",
+       [3]byte{0, 17, 87}:     "Oki Electric Industry Co., Ltd.",
+       [3]byte{0, 17, 88}:     "Nortel Networks",
+       [3]byte{0, 17, 89}:     "MATISSE NETWORKS INC",
+       [3]byte{0, 17, 90}:     "Ivoclar Vivadent AG",
+       [3]byte{0, 17, 91}:     "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 17, 92}:     "Cisco Systems, Inc",
+       [3]byte{0, 17, 93}:     "Cisco Systems, Inc",
+       [3]byte{0, 17, 94}:     "ProMinent Dosiertechnik GmbH",
+       [3]byte{0, 17, 95}:     "ITX Security Co., Ltd.",
+       [3]byte{0, 17, 96}:     "ARTDIO Company Co., LTD",
+       [3]byte{0, 17, 97}:     "NetStreams, LLC",
+       [3]byte{0, 17, 98}:     "STAR MICRONICS CO.,LTD.",
+       [3]byte{0, 17, 99}:     "SYSTEM SPA DEPT. ELECTRONICS",
+       [3]byte{0, 17, 100}:    "ACARD Technology Corp.",
+       [3]byte{0, 17, 101}:    "ZNYX Networks, Inc.",
+       [3]byte{0, 17, 102}:    "Taelim Electronics Co., Ltd.",
+       [3]byte{0, 17, 103}:    "Integrated System Solution Corp.",
+       [3]byte{0, 17, 104}:    "HomeLogic LLC",
+       [3]byte{0, 17, 105}:    "EMS Satcom",
+       [3]byte{0, 17, 106}:    "Domo Ltd",
+       [3]byte{0, 17, 107}:    "Digital Data Communications Asia Co.,Ltd",
+       [3]byte{0, 17, 108}:    "Nanwang Multimedia Inc.,Ltd",
+       [3]byte{0, 17, 109}:    "American Time and Signal",
+       [3]byte{0, 17, 110}:    "Peplink International Ltd.",
+       [3]byte{0, 17, 111}:    "Netforyou Co., LTD.",
+       [3]byte{0, 17, 112}:    "GSC SRL",
+       [3]byte{0, 17, 113}:    "DEXTER Communications, Inc.",
+       [3]byte{0, 17, 114}:    "COTRON CORPORATION",
+       [3]byte{0, 17, 115}:    "SMART Storage Systems",
+       [3]byte{0, 17, 116}:    "Mojo Networks, Inc.",
+       [3]byte{0, 17, 117}:    "Intel Corporation",
+       [3]byte{0, 17, 118}:    "Intellambda Systems, Inc.",
+       [3]byte{0, 17, 119}:    "Coaxial Networks, Inc.",
+       [3]byte{0, 17, 120}:    "Chiron Technology Ltd",
+       [3]byte{0, 17, 121}:    "Singular Technology Co. Ltd.",
+       [3]byte{0, 17, 122}:    "Singim International Corp.",
+       [3]byte{0, 17, 123}:    "Büchi  Labortechnik AG",
+       [3]byte{0, 17, 124}:    "e-zy.net",
+       [3]byte{0, 17, 125}:    "ZMD America, Inc.",
+       [3]byte{0, 17, 126}:    "Midmark Corp",
+       [3]byte{0, 17, 127}:    "Neotune Information Technology Corporation,.LTD",
+       [3]byte{0, 17, 128}:    "ARRIS Group, Inc.",
+       [3]byte{0, 17, 129}:    "InterEnergy Co.Ltd,",
+       [3]byte{0, 17, 130}:    "IMI Norgren Ltd",
+       [3]byte{0, 17, 131}:    "Datalogic ADC, Inc.",
+       [3]byte{0, 17, 132}:    "Humo Laboratory,Ltd.",
+       [3]byte{0, 17, 133}:    "Hewlett Packard",
+       [3]byte{0, 17, 134}:    "Prime Systems, Inc.",
+       [3]byte{0, 17, 135}:    "Category Solutions, Inc",
+       [3]byte{0, 17, 136}:    "Enterasys",
+       [3]byte{0, 17, 137}:    "Aerotech Inc",
+       [3]byte{0, 17, 138}:    "Viewtran Technology Limited",
+       [3]byte{0, 17, 139}:    "Alcatel-Lucent Enterprise",
+       [3]byte{0, 17, 140}:    "Missouri Department of Transportation",
+       [3]byte{0, 17, 141}:    "Hanchang System Corp.",
+       [3]byte{0, 17, 142}:    "Halytech Mace",
+       [3]byte{0, 17, 143}:    "EUTECH INSTRUMENTS PTE. LTD.",
+       [3]byte{0, 17, 144}:    "Digital Design Corporation",
+       [3]byte{0, 17, 145}:    "CTS-Clima Temperatur Systeme GmbH",
+       [3]byte{0, 17, 146}:    "Cisco Systems, Inc",
+       [3]byte{0, 17, 147}:    "Cisco Systems, Inc",
+       [3]byte{0, 17, 148}:    "Chi Mei Communication Systems, Inc.",
+       [3]byte{0, 17, 149}:    "D-Link Corporation",
+       [3]byte{0, 17, 150}:    "Actuality Systems, Inc.",
+       [3]byte{0, 17, 151}:    "Monitoring Technologies Limited",
+       [3]byte{0, 17, 152}:    "Prism Media Products Limited",
+       [3]byte{0, 17, 153}:    "2wcom Systems GmbH",
+       [3]byte{0, 17, 154}:    "Alkeria srl",
+       [3]byte{0, 17, 155}:    "Telesynergy Research Inc.",
+       [3]byte{0, 17, 156}:    "EP&T Energy",
+       [3]byte{0, 17, 157}:    "Diginfo Technology Corporation",
+       [3]byte{0, 17, 158}:    "Solectron Brazil",
+       [3]byte{0, 17, 159}:    "Nokia Danmark A/S",
+       [3]byte{0, 17, 160}:    "Vtech Engineering Canada Ltd",
+       [3]byte{0, 17, 161}:    "VISION NETWARE CO.,LTD",
+       [3]byte{0, 17, 162}:    "Manufacturing Technology Inc",
+       [3]byte{0, 17, 163}:    "LanReady Technologies Inc.",
+       [3]byte{0, 17, 164}:    "JStream Technologies Inc.",
+       [3]byte{0, 17, 165}:    "Fortuna Electronic Corp.",
+       [3]byte{0, 17, 166}:    "Sypixx Networks",
+       [3]byte{0, 17, 167}:    "Infilco Degremont Inc.",
+       [3]byte{0, 17, 168}:    "Quest Technologies",
+       [3]byte{0, 17, 169}:    "MOIMSTONE Co., LTD",
+       [3]byte{0, 17, 170}:    "Uniclass Technology, Co., LTD",
+       [3]byte{0, 17, 171}:    "TRUSTABLE TECHNOLOGY CO.,LTD.",
+       [3]byte{0, 17, 172}:    "Simtec Electronics",
+       [3]byte{0, 17, 173}:    "Shanghai Ruijie Technology",
+       [3]byte{0, 17, 174}:    "ARRIS Group, Inc.",
+       [3]byte{0, 17, 175}:    "Medialink-i,Inc",
+       [3]byte{0, 17, 176}:    "Fortelink Inc.",
+       [3]byte{0, 17, 177}:    "BlueExpert Technology Corp.",
+       [3]byte{0, 17, 178}:    "2001 Technology Inc.",
+       [3]byte{0, 17, 179}:    "YOSHIMIYA CO.,LTD.",
+       [3]byte{0, 17, 180}:    "Westermo Teleindustri AB",
+       [3]byte{0, 17, 181}:    "Shenzhen Powercom Co.,Ltd",
+       [3]byte{0, 17, 182}:    "Open Systems International",
+       [3]byte{0, 17, 183}:    "Octalix B.V.",
+       [3]byte{0, 17, 184}:    "Liebherr - Elektronik GmbH",
+       [3]byte{0, 17, 185}:    "Inner Range Pty. Ltd.",
+       [3]byte{0, 17, 186}:    "Elexol Pty Ltd",
+       [3]byte{0, 17, 187}:    "Cisco Systems, Inc",
+       [3]byte{0, 17, 188}:    "Cisco Systems, Inc",
+       [3]byte{0, 17, 189}:    "Bombardier Transportation",
+       [3]byte{0, 17, 190}:    "AGP Telecom Co. Ltd",
+       [3]byte{0, 17, 191}:    "AESYS S.p.A.",
+       [3]byte{0, 17, 192}:    "Aday Technology Inc",
+       [3]byte{0, 17, 193}:    "4P MOBILE DATA PROCESSING",
+       [3]byte{0, 17, 194}:    "United Fiber Optic Communication",
+       [3]byte{0, 17, 195}:    "Transceiving System Technology Corporation",
+       [3]byte{0, 17, 196}:    "Terminales de Telecomunicacion Terrestre, S.L.",
+       [3]byte{0, 17, 197}:    "TEN Technology",
+       [3]byte{0, 17, 198}:    "Seagate Technology",
+       [3]byte{0, 17, 199}:    "Raymarine UK Ltd",
+       [3]byte{0, 17, 200}:    "Powercom Co., Ltd.",
+       [3]byte{0, 17, 201}:    "MTT Corporation",
+       [3]byte{0, 17, 202}:    "Long Range Systems, Inc.",
+       [3]byte{0, 17, 203}:    "Jacobsons AB",
+       [3]byte{0, 17, 204}:    "Guangzhou Jinpeng Group Co.,Ltd.",
+       [3]byte{0, 17, 205}:    "Axsun Technologies",
+       [3]byte{0, 17, 206}:    "Ubisense Limited",
+       [3]byte{0, 17, 207}:    "Thrane & Thrane A/S",
+       [3]byte{0, 17, 208}:    "Tandberg Data ASA",
+       [3]byte{0, 17, 209}:    "Soft Imaging System GmbH",
+       [3]byte{0, 17, 210}:    "Perception Digital Ltd",
+       [3]byte{0, 17, 211}:    "NextGenTel Holding ASA",
+       [3]byte{0, 17, 212}:    "NetEnrich, Inc",
+       [3]byte{0, 17, 213}:    "Hangzhou Sunyard System Engineering Co.,Ltd.",
+       [3]byte{0, 17, 214}:    "HandEra, Inc.",
+       [3]byte{0, 17, 215}:    "eWerks Inc",
+       [3]byte{0, 17, 216}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 17, 217}:    "TiVo",
+       [3]byte{0, 17, 218}:    "Vivaas Technology Inc.",
+       [3]byte{0, 17, 219}:    "Land-Cellular Corporation",
+       [3]byte{0, 17, 220}:    "Glunz & Jensen",
+       [3]byte{0, 17, 221}:    "FROMUS TEC. Co., Ltd.",
+       [3]byte{0, 17, 222}:    "EURILOGIC",
+       [3]byte{0, 17, 223}:    "Current Energy",
+       [3]byte{0, 17, 224}:    "U-MEDIA Communications, Inc.",
+       [3]byte{0, 17, 225}:    "Arcelik A.S",
+       [3]byte{0, 17, 226}:    "Hua Jung Components Co., Ltd.",
+       [3]byte{0, 17, 227}:    "Thomson, Inc.",
+       [3]byte{0, 17, 228}:    "Danelec Electronics A/S",
+       [3]byte{0, 17, 229}:    "KCodes Corporation",
+       [3]byte{0, 17, 230}:    "Scientific Atlanta",
+       [3]byte{0, 17, 231}:    "WORLDSAT - Texas de France",
+       [3]byte{0, 17, 232}:    "Tixi.Com",
+       [3]byte{0, 17, 233}:    "STARNEX CO., LTD.",
+       [3]byte{0, 17, 234}:    "IWICS Inc.",
+       [3]byte{0, 17, 235}:    "Innovative Integration",
+       [3]byte{0, 17, 236}:    "AVIX INC.",
+       [3]byte{0, 17, 237}:    "802 Global",
+       [3]byte{0, 17, 238}:    "Estari, Inc.",
+       [3]byte{0, 17, 239}:    "Conitec Datensysteme GmbH",
+       [3]byte{0, 17, 240}:    "Wideful Limited",
+       [3]byte{0, 17, 241}:    "QinetiQ Ltd",
+       [3]byte{0, 17, 242}:    "Institute of Network Technologies",
+       [3]byte{0, 17, 243}:    "NeoMedia Europe AG",
+       [3]byte{0, 17, 244}:    "woori-net",
+       [3]byte{0, 17, 245}:    "ASKEY COMPUTER CORP",
+       [3]byte{0, 17, 246}:    "Asia Pacific Microsystems , Inc.",
+       [3]byte{0, 17, 247}:    "Shenzhen Forward Industry Co., Ltd",
+       [3]byte{0, 17, 248}:    "AIRAYA Corp",
+       [3]byte{0, 17, 249}:    "Nortel Networks",
+       [3]byte{0, 17, 250}:    "Rane Corporation",
+       [3]byte{0, 17, 251}:    "Heidelberg Engineering GmbH",
+       [3]byte{0, 17, 252}:    "HARTING Electronics GmbH",
+       [3]byte{0, 17, 253}:    "KORG INC.",
+       [3]byte{0, 17, 254}:    "Keiyo System Research, Inc.",
+       [3]byte{0, 17, 255}:    "Digitro Tecnologia Ltda",
+       [3]byte{0, 18, 0}:      "Cisco Systems, Inc",
+       [3]byte{0, 18, 1}:      "Cisco Systems, Inc",
+       [3]byte{0, 18, 2}:      "Decrane Aerospace - Audio International Inc.",
+       [3]byte{0, 18, 3}:      "ActivNetworks",
+       [3]byte{0, 18, 4}:      "u10 Networks, Inc.",
+       [3]byte{0, 18, 5}:      "Terrasat Communications, Inc.",
+       [3]byte{0, 18, 6}:      "iQuest (NZ) Ltd",
+       [3]byte{0, 18, 7}:      "Head Strong International Limited",
+       [3]byte{0, 18, 8}:      "Gantner Instruments GmbH",
+       [3]byte{0, 18, 9}:      "Fastrax Ltd",
+       [3]byte{0, 18, 10}:     "Emerson Climate Technologies GmbH",
+       [3]byte{0, 18, 11}:     "Chinasys Technologies Limited",
+       [3]byte{0, 18, 12}:     "CE-Infosys Pte Ltd",
+       [3]byte{0, 18, 13}:     "Advanced Telecommunication Technologies, Inc.",
+       [3]byte{0, 18, 14}:     "AboCom",
+       [3]byte{0, 18, 15}:     "IEEE 802.3",
+       [3]byte{0, 18, 16}:     "WideRay Corp",
+       [3]byte{0, 18, 17}:     "Protechna Herbst GmbH & Co. KG",
+       [3]byte{0, 18, 18}:     "PLUS  Corporation",
+       [3]byte{0, 18, 19}:     "Metrohm AG",
+       [3]byte{0, 18, 20}:     "Koenig & Bauer AG",
+       [3]byte{0, 18, 21}:     "iStor Networks, Inc.",
+       [3]byte{0, 18, 22}:     "ICP Internet Communication Payment AG",
+       [3]byte{0, 18, 23}:     "Cisco-Linksys, LLC",
+       [3]byte{0, 18, 24}:     "ARUZE Corporation",
+       [3]byte{0, 18, 25}:     "General Datacomm LLC",
+       [3]byte{0, 18, 26}:     "Techno Soft Systemnics Inc.",
+       [3]byte{0, 18, 27}:     "Sound Devices, LLC",
+       [3]byte{0, 18, 28}:     "PARROT SA",
+       [3]byte{0, 18, 29}:     "Netfabric Corporation",
+       [3]byte{0, 18, 30}:     "Juniper Networks",
+       [3]byte{0, 18, 31}:     "Harding Instruments",
+       [3]byte{0, 18, 32}:     "Cadco Systems",
+       [3]byte{0, 18, 33}:     "B.Braun Melsungen AG",
+       [3]byte{0, 18, 34}:     "Skardin (UK) Ltd",
+       [3]byte{0, 18, 35}:     "Pixim",
+       [3]byte{0, 18, 36}:     "NexQL Corporation",
+       [3]byte{0, 18, 37}:     "ARRIS Group, Inc.",
+       [3]byte{0, 18, 38}:     "Japan Direx Corporation",
+       [3]byte{0, 18, 39}:     "Franklin Electric Co., Inc.",
+       [3]byte{0, 18, 40}:     "Data Ltd.",
+       [3]byte{0, 18, 41}:     "BroadEasy Technologies Co.,Ltd",
+       [3]byte{0, 18, 42}:     "VTech Telecommunications Ltd.",
+       [3]byte{0, 18, 43}:     "Virbiage Pty Ltd",
+       [3]byte{0, 18, 44}:     "Soenen Controls N.V.",
+       [3]byte{0, 18, 45}:     "SiNett Corporation",
+       [3]byte{0, 18, 46}:     "Signal Technology - AISD",
+       [3]byte{0, 18, 47}:     "Sanei Electric Inc.",
+       [3]byte{0, 18, 48}:     "Picaso Infocommunication CO., LTD.",
+       [3]byte{0, 18, 49}:     "Motion Control Systems, Inc.",
+       [3]byte{0, 18, 50}:     "LeWiz Communications Inc.",
+       [3]byte{0, 18, 51}:     "JRC TOKKI Co.,Ltd.",
+       [3]byte{0, 18, 52}:     "Camille Bauer",
+       [3]byte{0, 18, 53}:     "Andrew Corporation",
+       [3]byte{0, 18, 54}:     "ConSentry Networks",
+       [3]byte{0, 18, 55}:     "Texas Instruments",
+       [3]byte{0, 18, 56}:     "SetaBox Technology Co., Ltd.",
+       [3]byte{0, 18, 57}:     "S Net Systems Inc.",
+       [3]byte{0, 18, 58}:     "Posystech Inc., Co.",
+       [3]byte{0, 18, 59}:     "KeRo Systems ApS",
+       [3]byte{0, 18, 60}:     "Second Rule LLC",
+       [3]byte{0, 18, 61}:     "GES Co, Ltd",
+       [3]byte{0, 18, 62}:     "ERUNE technology Co., Ltd.",
+       [3]byte{0, 18, 63}:     "Dell Inc.",
+       [3]byte{0, 18, 64}:     "AMOI ELECTRONICS CO.,LTD",
+       [3]byte{0, 18, 65}:     "a2i marketing center",
+       [3]byte{0, 18, 66}:     "Millennial Net",
+       [3]byte{0, 18, 67}:     "Cisco Systems, Inc",
+       [3]byte{0, 18, 68}:     "Cisco Systems, Inc",
+       [3]byte{0, 18, 69}:     "Zellweger Analytics, Inc.",
+       [3]byte{0, 18, 70}:     "T.O.M TECHNOLOGY INC..",
+       [3]byte{0, 18, 71}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 18, 72}:     "Dell EMC",
+       [3]byte{0, 18, 73}:     "Delta Elettronica S.p.A.",
+       [3]byte{0, 18, 74}:     "Dedicated Devices, Inc.",
+       [3]byte{0, 18, 75}:     "Texas Instruments",
+       [3]byte{0, 18, 76}:     "BBWM Corporation",
+       [3]byte{0, 18, 77}:     "Inducon BV",
+       [3]byte{0, 18, 78}:     "XAC AUTOMATION CORP.",
+       [3]byte{0, 18, 79}:     "Pentair Thermal Management",
+       [3]byte{0, 18, 80}:     "Tokyo Aircaft Instrument Co., Ltd.",
+       [3]byte{0, 18, 81}:     "SILINK",
+       [3]byte{0, 18, 82}:     "Citronix, LLC",
+       [3]byte{0, 18, 83}:     "AudioDev AB",
+       [3]byte{0, 18, 84}:     "Spectra Technologies Holdings Company Ltd",
+       [3]byte{0, 18, 85}:     "NetEffect Incorporated",
+       [3]byte{0, 18, 86}:     "LG INFORMATION & COMM.",
+       [3]byte{0, 18, 87}:     "LeapComm Communication Technologies Inc.",
+       [3]byte{0, 18, 88}:     "Activis Polska",
+       [3]byte{0, 18, 89}:     "THERMO ELECTRON KARLSRUHE",
+       [3]byte{0, 18, 90}:     "Microsoft Corporation",
+       [3]byte{0, 18, 91}:     "KAIMEI ELECTRONI",
+       [3]byte{0, 18, 92}:     "Green Hills Software, Inc.",
+       [3]byte{0, 18, 93}:     "CyberNet Inc.",
+       [3]byte{0, 18, 94}:     "CAEN",
+       [3]byte{0, 18, 95}:     "AWIND Inc.",
+       [3]byte{0, 18, 96}:     "Stanton Magnetics,inc.",
+       [3]byte{0, 18, 97}:     "Adaptix, Inc",
+       [3]byte{0, 18, 98}:     "Nokia Danmark A/S",
+       [3]byte{0, 18, 99}:     "Data Voice Technologies GmbH",
+       [3]byte{0, 18, 100}:    "daum electronic gmbh",
+       [3]byte{0, 18, 101}:    "Enerdyne Technologies, Inc.",
+       [3]byte{0, 18, 102}:    "Swisscom Hospitality Services SA",
+       [3]byte{0, 18, 103}:    "Panasonic Corporation",
+       [3]byte{0, 18, 104}:    "IPS d.o.o.",
+       [3]byte{0, 18, 105}:    "Value Electronics",
+       [3]byte{0, 18, 106}:    "OPTOELECTRONICS Co., Ltd.",
+       [3]byte{0, 18, 107}:    "Ascalade Communications Limited",
+       [3]byte{0, 18, 108}:    "Visonic Technologies 1993 Ltd.",
+       [3]byte{0, 18, 109}:    "University of California, Berkeley",
+       [3]byte{0, 18, 110}:    "Seidel Elektronik GmbH Nfg.KG",
+       [3]byte{0, 18, 111}:    "Rayson Technology Co., Ltd.",
+       [3]byte{0, 18, 112}:    "NGES Denro Systems",
+       [3]byte{0, 18, 113}:    "Measurement Computing Corp",
+       [3]byte{0, 18, 114}:    "Redux Communications Ltd.",
+       [3]byte{0, 18, 115}:    "Stoke Inc",
+       [3]byte{0, 18, 116}:    "NIT lab",
+       [3]byte{0, 18, 117}:    "Sentilla Corporation",
+       [3]byte{0, 18, 118}:    "CG Power Systems Ireland Limited",
+       [3]byte{0, 18, 119}:    "Korenix Technologies Co., Ltd.",
+       [3]byte{0, 18, 120}:    "International Bar Code",
+       [3]byte{0, 18, 121}:    "Hewlett Packard",
+       [3]byte{0, 18, 122}:    "Sanyu Industry Co.,Ltd.",
+       [3]byte{0, 18, 123}:    "VIA Networking Technologies, Inc.",
+       [3]byte{0, 18, 124}:    "SWEGON AB",
+       [3]byte{0, 18, 125}:    "MobileAria",
+       [3]byte{0, 18, 126}:    "Digital Lifestyles Group, Inc.",
+       [3]byte{0, 18, 127}:    "Cisco Systems, Inc",
+       [3]byte{0, 18, 128}:    "Cisco Systems, Inc",
+       [3]byte{0, 18, 129}:    "March Networks S.p.A.",
+       [3]byte{0, 18, 130}:    "Qovia",
+       [3]byte{0, 18, 131}:    "Nortel Networks",
+       [3]byte{0, 18, 132}:    "Lab33 Srl",
+       [3]byte{0, 18, 133}:    "Gizmondo Europe Ltd",
+       [3]byte{0, 18, 134}:    "ENDEVCO CORP",
+       [3]byte{0, 18, 135}:    "Digital Everywhere Unterhaltungselektronik GmbH",
+       [3]byte{0, 18, 136}:    "2Wire Inc",
+       [3]byte{0, 18, 137}:    "Advance Sterilization Products",
+       [3]byte{0, 18, 138}:    "ARRIS Group, Inc.",
+       [3]byte{0, 18, 139}:    "Sensory Networks Inc",
+       [3]byte{0, 18, 140}:    "Woodward Governor",
+       [3]byte{0, 18, 141}:    "STB Datenservice GmbH",
+       [3]byte{0, 18, 142}:    "Q-Free ASA",
+       [3]byte{0, 18, 143}:    "Montilio",
+       [3]byte{0, 18, 144}:    "KYOWA Electric & Machinery Corp.",
+       [3]byte{0, 18, 145}:    "KWS Computersysteme GmbH",
+       [3]byte{0, 18, 146}:    "Griffin Technology",
+       [3]byte{0, 18, 147}:    "GE Energy",
+       [3]byte{0, 18, 148}:    "SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC",
+       [3]byte{0, 18, 149}:    "Aiware Inc.",
+       [3]byte{0, 18, 150}:    "Addlogix",
+       [3]byte{0, 18, 151}:    "O2Micro, Inc.",
+       [3]byte{0, 18, 152}:    "MICO ELECTRIC(SHENZHEN) LIMITED",
+       [3]byte{0, 18, 153}:    "Ktech Telecommunications Inc",
+       [3]byte{0, 18, 154}:    "IRT Electronics Pty Ltd",
+       [3]byte{0, 18, 155}:    "E2S Electronic Engineering Solutions, S.L.",
+       [3]byte{0, 18, 156}:    "Yulinet",
+       [3]byte{0, 18, 157}:    "First International Computer do Brasil",
+       [3]byte{0, 18, 158}:    "Surf Communications Inc.",
+       [3]byte{0, 18, 159}:    "RAE Systems",
+       [3]byte{0, 18, 160}:    "NeoMeridian Sdn Bhd",
+       [3]byte{0, 18, 161}:    "BluePacket Communications Co., Ltd.",
+       [3]byte{0, 18, 162}:    "VITA",
+       [3]byte{0, 18, 163}:    "Trust International B.V.",
+       [3]byte{0, 18, 164}:    "ThingMagic, LLC",
+       [3]byte{0, 18, 165}:    "Stargen, Inc.",
+       [3]byte{0, 18, 166}:    "Dolby Australia",
+       [3]byte{0, 18, 167}:    "ISR TECHNOLOGIES Inc",
+       [3]byte{0, 18, 168}:    "intec GmbH",
+       [3]byte{0, 18, 169}:    "3Com Ltd",
+       [3]byte{0, 18, 170}:    "IEE, Inc.",
+       [3]byte{0, 18, 171}:    "WiLife, Inc.",
+       [3]byte{0, 18, 172}:    "ONTIMETEK INC.",
+       [3]byte{0, 18, 173}:    "IDS GmbH",
+       [3]byte{0, 18, 174}:    "HLS HARD-LINE Solutions Inc.",
+       [3]byte{0, 18, 175}:    "ELPRO Technologies",
+       [3]byte{0, 18, 176}:    "Efore Oyj   (Plc)",
+       [3]byte{0, 18, 177}:    "Dai Nippon Printing Co., Ltd",
+       [3]byte{0, 18, 178}:    "AVOLITES LTD.",
+       [3]byte{0, 18, 179}:    "Advance Wireless Technology Corp.",
+       [3]byte{0, 18, 180}:    "Work Microwave GmbH",
+       [3]byte{0, 18, 181}:    "Vialta, Inc.",
+       [3]byte{0, 18, 182}:    "Santa Barbara Infrared, Inc.",
+       [3]byte{0, 18, 183}:    "PTW Freiburg",
+       [3]byte{0, 18, 184}:    "G2 Microsystems",
+       [3]byte{0, 18, 185}:    "Fusion Digital Technology",
+       [3]byte{0, 18, 186}:    "FSI Systems, Inc.",
+       [3]byte{0, 18, 187}:    "Telecommunications Industry Association TR-41 Committee",
+       [3]byte{0, 18, 188}:    "Echolab LLC",
+       [3]byte{0, 18, 189}:    "Avantec Manufacturing Limited",
+       [3]byte{0, 18, 190}:    "Astek Corporation",
+       [3]byte{0, 18, 191}:    "Arcadyan Technology Corporation",
+       [3]byte{0, 18, 192}:    "HotLava Systems, Inc.",
+       [3]byte{0, 18, 193}:    "Check Point Software Technologies",
+       [3]byte{0, 18, 194}:    "Apex Electronics Factory",
+       [3]byte{0, 18, 195}:    "WIT S.A.",
+       [3]byte{0, 18, 196}:    "Viseon, Inc.",
+       [3]byte{0, 18, 197}:    "V-Show  Technology (China) Co.,Ltd",
+       [3]byte{0, 18, 198}:    "TGC America, Inc",
+       [3]byte{0, 18, 199}:    "SECURAY Technologies Ltd.Co.",
+       [3]byte{0, 18, 200}:    "Perfect tech",
+       [3]byte{0, 18, 201}:    "ARRIS Group, Inc.",
+       [3]byte{0, 18, 202}:    "Mechatronic Brick Aps",
+       [3]byte{0, 18, 203}:    "CSS Inc.",
+       [3]byte{0, 18, 204}:    "Bitatek CO., LTD",
+       [3]byte{0, 18, 205}:    "ASEM SpA",
+       [3]byte{0, 18, 206}:    "Advanced Cybernetics Group",
+       [3]byte{0, 18, 207}:    "Accton Technology Corp",
+       [3]byte{0, 18, 208}:    "Gossen-Metrawatt-GmbH",
+       [3]byte{0, 18, 209}:    "Texas Instruments",
+       [3]byte{0, 18, 210}:    "Texas Instruments",
+       [3]byte{0, 18, 211}:    "Zetta Systems, Inc.",
+       [3]byte{0, 18, 212}:    "Princeton Technology, Ltd",
+       [3]byte{0, 18, 213}:    "Motion Reality Inc.",
+       [3]byte{0, 18, 214}:    "Jiangsu Yitong High-Tech Co.,Ltd",
+       [3]byte{0, 18, 215}:    "Invento Networks, Inc.",
+       [3]byte{0, 18, 216}:    "International Games System Co., Ltd.",
+       [3]byte{0, 18, 217}:    "Cisco Systems, Inc",
+       [3]byte{0, 18, 218}:    "Cisco Systems, Inc",
+       [3]byte{0, 18, 219}:    "ZIEHL industrie-elektronik GmbH + Co KG",
+       [3]byte{0, 18, 220}:    "SunCorp Industrial Limited",
+       [3]byte{0, 18, 221}:    "Shengqu Information Technology (Shanghai) Co., Ltd.",
+       [3]byte{0, 18, 222}:    "Radio Components Sweden AB",
+       [3]byte{0, 18, 223}:    "Novomatic AG",
+       [3]byte{0, 18, 224}:    "Codan Limited",
+       [3]byte{0, 18, 225}:    "Alliant Networks, Inc",
+       [3]byte{0, 18, 226}:    "ALAXALA Networks Corporation",
+       [3]byte{0, 18, 227}:    "Agat-RT, Ltd.",
+       [3]byte{0, 18, 228}:    "ZIEHL industrie-electronik GmbH + Co KG",
+       [3]byte{0, 18, 229}:    "Time America, Inc.",
+       [3]byte{0, 18, 230}:    "SPECTEC COMPUTER CO., LTD.",
+       [3]byte{0, 18, 231}:    "Projectek Networking Electronics Corp.",
+       [3]byte{0, 18, 232}:    "Fraunhofer IMS",
+       [3]byte{0, 18, 233}:    "Abbey Systems Ltd",
+       [3]byte{0, 18, 234}:    "Trane",
+       [3]byte{0, 18, 235}:    "PDH Solutions, LLC",
+       [3]byte{0, 18, 236}:    "Movacolor b.v.",
+       [3]byte{0, 18, 237}:    "AVG Advanced Technologies",
+       [3]byte{0, 18, 238}:    "Sony Mobile Communications AB",
+       [3]byte{0, 18, 239}:    "OneAccess SA",
+       [3]byte{0, 18, 240}:    "Intel Corporate",
+       [3]byte{0, 18, 241}:    "IFOTEC",
+       [3]byte{0, 18, 242}:    "Brocade Communications Systems, Inc.",
+       [3]byte{0, 18, 243}:    "connectBlue AB",
+       [3]byte{0, 18, 244}:    "Belco International Co.,Ltd.",
+       [3]byte{0, 18, 245}:    "Imarda New Zealand Limited",
+       [3]byte{0, 18, 246}:    "MDK CO.,LTD.",
+       [3]byte{0, 18, 247}:    "Xiamen Xinglian Electronics Co., Ltd.",
+       [3]byte{0, 18, 248}:    "WNI Resources, LLC",
+       [3]byte{0, 18, 249}:    "URYU SEISAKU, LTD.",
+       [3]byte{0, 18, 250}:    "THX LTD",
+       [3]byte{0, 18, 251}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 18, 252}:    "PLANET System Co.,LTD",
+       [3]byte{0, 18, 253}:    "OPTIMUS IC S.A.",
+       [3]byte{0, 18, 254}:    "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{0, 18, 255}:    "Lely Industries N.V.",
+       [3]byte{0, 19, 0}:      "IT-FACTORY, INC.",
+       [3]byte{0, 19, 1}:      "IronGate S.L.",
+       [3]byte{0, 19, 2}:      "Intel Corporate",
+       [3]byte{0, 19, 3}:      "GateConnect",
+       [3]byte{0, 19, 4}:      "Flaircomm Technologies Co. LTD",
+       [3]byte{0, 19, 5}:      "Epicom, Inc.",
+       [3]byte{0, 19, 6}:      "Always On Wireless",
+       [3]byte{0, 19, 7}:      "Paravirtual Corporation",
+       [3]byte{0, 19, 8}:      "Nuvera Fuel Cells",
+       [3]byte{0, 19, 9}:      "Ocean Broadband Networks",
+       [3]byte{0, 19, 10}:     "Nortel Networks",
+       [3]byte{0, 19, 11}:     "Mextal B.V.",
+       [3]byte{0, 19, 12}:     "HF System Corporation",
+       [3]byte{0, 19, 13}:     "GALILEO AVIONICA",
+       [3]byte{0, 19, 14}:     "Focusrite Audio Engineering Limited",
+       [3]byte{0, 19, 15}:     "EGEMEN Bilgisayar Muh San ve Tic LTD STI",
+       [3]byte{0, 19, 16}:     "Cisco-Linksys, LLC",
+       [3]byte{0, 19, 17}:     "ARRIS Group, Inc.",
+       [3]byte{0, 19, 18}:     "Amedia Networks Inc.",
+       [3]byte{0, 19, 19}:     "GuangZhou Post & Telecom Equipment ltd",
+       [3]byte{0, 19, 20}:     "Asiamajor Inc.",
+       [3]byte{0, 19, 21}:     "Sony Interactive Entertainment Inc.",
+       [3]byte{0, 19, 22}:     "L-S-B Broadcast Technologies GmbH",
+       [3]byte{0, 19, 23}:     "GN Netcom A/S",
+       [3]byte{0, 19, 24}:     "DGSTATION Co., Ltd.",
+       [3]byte{0, 19, 25}:     "Cisco Systems, Inc",
+       [3]byte{0, 19, 26}:     "Cisco Systems, Inc",
+       [3]byte{0, 19, 27}:     "BeCell Innovations Corp.",
+       [3]byte{0, 19, 28}:     "LiteTouch, Inc.",
+       [3]byte{0, 19, 29}:     "Scanvaegt International A/S",
+       [3]byte{0, 19, 30}:     "Peiker acustic GmbH & Co. KG",
+       [3]byte{0, 19, 31}:     "NxtPhase T&D, Corp.",
+       [3]byte{0, 19, 32}:     "Intel Corporate",
+       [3]byte{0, 19, 33}:     "Hewlett Packard",
+       [3]byte{0, 19, 34}:     "DAQ Electronics, Inc.",
+       [3]byte{0, 19, 35}:     "Cap Co., Ltd.",
+       [3]byte{0, 19, 36}:     "Schneider Electric Ultra Terminal",
+       [3]byte{0, 19, 37}:     "Cortina Systems Inc",
+       [3]byte{0, 19, 38}:     "ECM Systems Ltd",
+       [3]byte{0, 19, 39}:     "Data Acquisitions limited",
+       [3]byte{0, 19, 40}:     "Westech Korea Inc.,",
+       [3]byte{0, 19, 41}:     "VSST Co., LTD",
+       [3]byte{0, 19, 42}:     "Sitronics Telecom Solutions",
+       [3]byte{0, 19, 43}:     "Phoenix Digital",
+       [3]byte{0, 19, 44}:     "MAZ Brandenburg GmbH",
+       [3]byte{0, 19, 45}:     "iWise Communications",
+       [3]byte{0, 19, 46}:     "ITian Coporation",
+       [3]byte{0, 19, 47}:     "Interactek",
+       [3]byte{0, 19, 48}:     "EURO PROTECTION SURVEILLANCE",
+       [3]byte{0, 19, 49}:     "CellPoint Connect",
+       [3]byte{0, 19, 50}:     "Beijing Topsec Network Security Technology Co., Ltd.",
+       [3]byte{0, 19, 51}:     "BaudTec Corporation",
+       [3]byte{0, 19, 52}:     "Arkados, Inc.",
+       [3]byte{0, 19, 53}:     "VS Industry Berhad",
+       [3]byte{0, 19, 54}:     "Tianjin 712 Communication Broadcasting co., ltd.",
+       [3]byte{0, 19, 55}:     "Orient Power Home Network Ltd.",
+       [3]byte{0, 19, 56}:     "FRESENIUS-VIAL",
+       [3]byte{0, 19, 57}:     "CCV Deutschland GmbH",
+       [3]byte{0, 19, 58}:     "VadaTech Inc.",
+       [3]byte{0, 19, 59}:     "Speed Dragon Multimedia Limited",
+       [3]byte{0, 19, 60}:     "QUINTRON SYSTEMS INC.",
+       [3]byte{0, 19, 61}:     "Micro Memory Curtiss Wright Co",
+       [3]byte{0, 19, 62}:     "MetaSwitch",
+       [3]byte{0, 19, 63}:     "Eppendorf Instrumente GmbH",
+       [3]byte{0, 19, 64}:     "AD.EL s.r.l.",
+       [3]byte{0, 19, 65}:     "Shandong New Beiyang Information Technology Co.,Ltd",
+       [3]byte{0, 19, 66}:     "Vision Research, Inc.",
+       [3]byte{0, 19, 67}:     "Matsushita Electronic Components (Europe) GmbH",
+       [3]byte{0, 19, 68}:     "Fargo Electronics Inc.",
+       [3]byte{0, 19, 69}:     "Eaton Corporation",
+       [3]byte{0, 19, 70}:     "D-Link Corporation",
+       [3]byte{0, 19, 71}:     "Red Lion Controls, LP",
+       [3]byte{0, 19, 72}:     "Artila Electronics Co., Ltd.",
+       [3]byte{0, 19, 73}:     "Zyxel Communications Corporation",
+       [3]byte{0, 19, 74}:     "Engim, Inc.",
+       [3]byte{0, 19, 75}:     "ToGoldenNet Technology Inc.",
+       [3]byte{0, 19, 76}:     "YDT Technology International",
+       [3]byte{0, 19, 77}:     "Inepro BV",
+       [3]byte{0, 19, 78}:     "Valox Systems, Inc.",
+       [3]byte{0, 19, 79}:     "Tranzeo Wireless Technologies Inc.",
+       [3]byte{0, 19, 80}:     "Silver Spring Networks, Inc",
+       [3]byte{0, 19, 81}:     "Niles Audio Corporation",
+       [3]byte{0, 19, 82}:     "Naztec, Inc.",
+       [3]byte{0, 19, 83}:     "HYDAC Filtertechnik GMBH",
+       [3]byte{0, 19, 84}:     "Zcomax Technologies, Inc.",
+       [3]byte{0, 19, 85}:     "TOMEN Cyber-business Solutions, Inc.",
+       [3]byte{0, 19, 86}:     "FLIR Radiation Inc",
+       [3]byte{0, 19, 87}:     "Soyal Technology Co., Ltd.",
+       [3]byte{0, 19, 88}:     "Realm Systems, Inc.",
+       [3]byte{0, 19, 89}:     "ProTelevision Technologies A/S",
+       [3]byte{0, 19, 90}:     "Project T&E Limited",
+       [3]byte{0, 19, 91}:     "PanelLink Cinema, LLC",
+       [3]byte{0, 19, 92}:     "OnSite Systems, Inc.",
+       [3]byte{0, 19, 93}:     "NTTPC Communications, Inc.",
+       [3]byte{0, 19, 94}:     "EAB/RWI/K",
+       [3]byte{0, 19, 95}:     "Cisco Systems, Inc",
+       [3]byte{0, 19, 96}:     "Cisco Systems, Inc",
+       [3]byte{0, 19, 97}:     "Biospace Co., Ltd.",
+       [3]byte{0, 19, 98}:     "ShinHeung Precision Co., Ltd.",
+       [3]byte{0, 19, 99}:     "Verascape, Inc.",
+       [3]byte{0, 19, 100}:    "Paradigm Technology Inc..",
+       [3]byte{0, 19, 101}:    "Nortel Networks",
+       [3]byte{0, 19, 102}:    "Neturity Technologies Inc.",
+       [3]byte{0, 19, 103}:    "Narayon. Co., Ltd.",
+       [3]byte{0, 19, 104}:    "Saab Danmark A/S",
+       [3]byte{0, 19, 105}:    "Honda Electron Co., LED.",
+       [3]byte{0, 19, 106}:    "Hach Lange Sarl",
+       [3]byte{0, 19, 107}:    "E-TEC",
+       [3]byte{0, 19, 108}:    "TomTom",
+       [3]byte{0, 19, 109}:    "Tentaculus AB",
+       [3]byte{0, 19, 110}:    "Techmetro Corp.",
+       [3]byte{0, 19, 111}:    "PacketMotion, Inc.",
+       [3]byte{0, 19, 112}:    "Nokia Danmark A/S",
+       [3]byte{0, 19, 113}:    "ARRIS Group, Inc.",
+       [3]byte{0, 19, 114}:    "Dell Inc.",
+       [3]byte{0, 19, 115}:    "BLwave Electronics Co., Ltd",
+       [3]byte{0, 19, 116}:    "Atheros Communications, Inc.",
+       [3]byte{0, 19, 117}:    "American Security Products Co.",
+       [3]byte{0, 19, 118}:    "Tabor Electronics Ltd.",
+       [3]byte{0, 19, 119}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 19, 120}:    "Qsan Technology, Inc.",
+       [3]byte{0, 19, 121}:    "PONDER INFORMATION INDUSTRIES LTD.",
+       [3]byte{0, 19, 122}:    "Netvox Technology Co., Ltd.",
+       [3]byte{0, 19, 123}:    "Movon Corporation",
+       [3]byte{0, 19, 124}:    "Kaicom co., Ltd.",
+       [3]byte{0, 19, 125}:    "Dynalab, Inc.",
+       [3]byte{0, 19, 126}:    "CorEdge Networks, Inc.",
+       [3]byte{0, 19, 127}:    "Cisco Systems, Inc",
+       [3]byte{0, 19, 128}:    "Cisco Systems, Inc",
+       [3]byte{0, 19, 129}:    "CHIPS & Systems, Inc.",
+       [3]byte{0, 19, 130}:    "Cetacea Networks Corporation",
+       [3]byte{0, 19, 131}:    "Application Technologies and Engineering Research Laboratory",
+       [3]byte{0, 19, 132}:    "Advanced Motion Controls",
+       [3]byte{0, 19, 133}:    "Add-On Technology Co., LTD.",
+       [3]byte{0, 19, 134}:    "ABB Inc./Totalflow",
+       [3]byte{0, 19, 135}:    "27M Technologies AB",
+       [3]byte{0, 19, 136}:    "WiMedia Alliance",
+       [3]byte{0, 19, 137}:    "Redes de Telefonía Móvil S.A.",
+       [3]byte{0, 19, 138}:    "QINGDAO GOERTEK ELECTRONICS CO.,LTD.",
+       [3]byte{0, 19, 139}:    "Phantom Technologies LLC",
+       [3]byte{0, 19, 140}:    "Kumyoung.Co.Ltd",
+       [3]byte{0, 19, 141}:    "Kinghold",
+       [3]byte{0, 19, 142}:    "FOAB Elektronik AB",
+       [3]byte{0, 19, 143}:    "Asiarock Technology Limited",
+       [3]byte{0, 19, 144}:    "Termtek Computer Co., Ltd",
+       [3]byte{0, 19, 145}:    "OUEN CO.,LTD.",
+       [3]byte{0, 19, 146}:    "Ruckus Wireless",
+       [3]byte{0, 19, 147}:    "Panta Systems, Inc.",
+       [3]byte{0, 19, 148}:    "Infohand Co.,Ltd",
+       [3]byte{0, 19, 149}:    "congatec AG",
+       [3]byte{0, 19, 150}:    "Acbel Polytech Inc.",
+       [3]byte{0, 19, 151}:    "Oracle Corporation",
+       [3]byte{0, 19, 152}:    "TrafficSim Co.,Ltd",
+       [3]byte{0, 19, 153}:    "STAC Corporation.",
+       [3]byte{0, 19, 154}:    "K-ubique ID Corp.",
+       [3]byte{0, 19, 155}:    "ioIMAGE Ltd.",
+       [3]byte{0, 19, 156}:    "Exavera Technologies, Inc.",
+       [3]byte{0, 19, 157}:    "MaxLinear Hispania S.L.U.",
+       [3]byte{0, 19, 158}:    "Ciara Technologies Inc.",
+       [3]byte{0, 19, 159}:    "Electronics Design Services, Co., Ltd.",
+       [3]byte{0, 19, 160}:    "ALGOSYSTEM Co., Ltd.",
+       [3]byte{0, 19, 161}:    "Crow Electronic Engeneering",
+       [3]byte{0, 19, 162}:    "MaxStream, Inc",
+       [3]byte{0, 19, 163}:    "Siemens Com CPE Devices",
+       [3]byte{0, 19, 164}:    "KeyEye Communications",
+       [3]byte{0, 19, 165}:    "General Solutions, LTD.",
+       [3]byte{0, 19, 166}:    "Extricom Ltd",
+       [3]byte{0, 19, 167}:    "BATTELLE MEMORIAL INSTITUTE",
+       [3]byte{0, 19, 168}:    "Tanisys Technology",
+       [3]byte{0, 19, 169}:    "Sony Corporation",
+       [3]byte{0, 19, 170}:    "ALS  & TEC Ltd.",
+       [3]byte{0, 19, 171}:    "Telemotive AG",
+       [3]byte{0, 19, 172}:    "Sunmyung Electronics Co., LTD",
+       [3]byte{0, 19, 173}:    "Sendo Ltd",
+       [3]byte{0, 19, 174}:    "Radiance Technologies, Inc.",
+       [3]byte{0, 19, 175}:    "NUMA Technology,Inc.",
+       [3]byte{0, 19, 176}:    "Jablotron",
+       [3]byte{0, 19, 177}:    "Intelligent Control Systems (Asia) Pte Ltd",
+       [3]byte{0, 19, 178}:    "Carallon Limited",
+       [3]byte{0, 19, 179}:    "Ecom Communications Technology Co., Ltd.",
+       [3]byte{0, 19, 180}:    "Appear TV",
+       [3]byte{0, 19, 181}:    "Wavesat",
+       [3]byte{0, 19, 182}:    "Sling Media, Inc.",
+       [3]byte{0, 19, 183}:    "Scantech ID",
+       [3]byte{0, 19, 184}:    "RyCo Electronic Systems Limited",
+       [3]byte{0, 19, 185}:    "BM SPA",
+       [3]byte{0, 19, 186}:    "ReadyLinks Inc",
+       [3]byte{0, 19, 187}:    "Smartvue Corporation",
+       [3]byte{0, 19, 188}:    "Artimi Ltd",
+       [3]byte{0, 19, 189}:    "HYMATOM SA",
+       [3]byte{0, 19, 190}:    "Virtual Conexions",
+       [3]byte{0, 19, 191}:    "Media System Planning Corp.",
+       [3]byte{0, 19, 192}:    "Trix Tecnologia Ltda.",
+       [3]byte{0, 19, 193}:    "Asoka USA Corporation",
+       [3]byte{0, 19, 194}:    "WACOM Co.,Ltd",
+       [3]byte{0, 19, 195}:    "Cisco Systems, Inc",
+       [3]byte{0, 19, 196}:    "Cisco Systems, Inc",
+       [3]byte{0, 19, 197}:    "LIGHTRON FIBER-OPTIC DEVICES INC.",
+       [3]byte{0, 19, 198}:    "OpenGear, Inc",
+       [3]byte{0, 19, 199}:    "IONOS Co.,Ltd.",
+       [3]byte{0, 19, 200}:    "ADB Broadband Italia",
+       [3]byte{0, 19, 201}:    "Beyond Achieve Enterprises Ltd.",
+       [3]byte{0, 19, 202}:    "Pico Digital",
+       [3]byte{0, 19, 203}:    "Zenitel Norway AS",
+       [3]byte{0, 19, 204}:    "Tall Maple Systems",
+       [3]byte{0, 19, 205}:    "MTI co. LTD",
+       [3]byte{0, 19, 206}:    "Intel Corporate",
+       [3]byte{0, 19, 207}:    "4Access Communications",
+       [3]byte{0, 19, 208}:    "t+ Medical Ltd",
+       [3]byte{0, 19, 209}:    "KIRK telecom A/S",
+       [3]byte{0, 19, 210}:    "PAGE IBERICA, S.A.",
+       [3]byte{0, 19, 211}:    "MICRO-STAR INTERNATIONAL CO., LTD.",
+       [3]byte{0, 19, 212}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 19, 213}:    "RuggedCom",
+       [3]byte{0, 19, 214}:    "TII NETWORK TECHNOLOGIES, INC.",
+       [3]byte{0, 19, 215}:    "SPIDCOM Technologies SA",
+       [3]byte{0, 19, 216}:    "Princeton Instruments",
+       [3]byte{0, 19, 217}:    "Matrix Product Development, Inc.",
+       [3]byte{0, 19, 218}:    "Diskware Co., Ltd",
+       [3]byte{0, 19, 219}:    "SHOEI Electric Co.,Ltd",
+       [3]byte{0, 19, 220}:    "IBTEK INC.",
+       [3]byte{0, 19, 221}:    "Abbott Diagnostics",
+       [3]byte{0, 19, 222}:    "Adapt4, LLC",
+       [3]byte{0, 19, 223}:    "Ryvor Corp.",
+       [3]byte{0, 19, 224}:    "Murata Manufacturing Co., Ltd.",
+       [3]byte{0, 19, 225}:    "Iprobe AB",
+       [3]byte{0, 19, 226}:    "GeoVision Inc.",
+       [3]byte{0, 19, 227}:    "CoVi Technologies, Inc.",
+       [3]byte{0, 19, 228}:    "YANGJAE SYSTEMS CORP.",
+       [3]byte{0, 19, 229}:    "TENOSYS, INC.",
+       [3]byte{0, 19, 230}:    "Technolution",
+       [3]byte{0, 19, 231}:    "Halcro",
+       [3]byte{0, 19, 232}:    "Intel Corporate",
+       [3]byte{0, 19, 233}:    "VeriWave, Inc.",
+       [3]byte{0, 19, 234}:    "Kamstrup A/S",
+       [3]byte{0, 19, 235}:    "Sysmaster Corporation",
+       [3]byte{0, 19, 236}:    "Netsnapper Technologies SARL",
+       [3]byte{0, 19, 237}:    "PSIA",
+       [3]byte{0, 19, 238}:    "JBX Designs Inc.",
+       [3]byte{0, 19, 239}:    "Kingjon Digital Technology Co.,Ltd",
+       [3]byte{0, 19, 240}:    "Wavefront Semiconductor",
+       [3]byte{0, 19, 241}:    "AMOD Technology Co., Ltd.",
+       [3]byte{0, 19, 242}:    "Klas Ltd",
+       [3]byte{0, 19, 243}:    "Giga-byte Communications Inc.",
+       [3]byte{0, 19, 244}:    "Psitek (Pty) Ltd",
+       [3]byte{0, 19, 245}:    "Akimbi Systems",
+       [3]byte{0, 19, 246}:    "Cintech",
+       [3]byte{0, 19, 247}:    "SMC Networks, Inc.",
+       [3]byte{0, 19, 248}:    "Dex Security Solutions",
+       [3]byte{0, 19, 249}:    "Cavera Systems",
+       [3]byte{0, 19, 250}:    "LifeSize Communications, Inc",
+       [3]byte{0, 19, 251}:    "RKC INSTRUMENT INC.",
+       [3]byte{0, 19, 252}:    "SiCortex, Inc",
+       [3]byte{0, 19, 253}:    "Nokia Danmark A/S",
+       [3]byte{0, 19, 254}:    "GRANDTEC ELECTRONIC CORP.",
+       [3]byte{0, 19, 255}:    "Dage-MTI of MC, Inc.",
+       [3]byte{0, 20, 0}:      "MINERVA KOREA CO., LTD",
+       [3]byte{0, 20, 1}:      "Rivertree Networks Corp.",
+       [3]byte{0, 20, 2}:      "kk-electronic a/s",
+       [3]byte{0, 20, 3}:      "Renasis, LLC",
+       [3]byte{0, 20, 4}:      "ARRIS Group, Inc.",
+       [3]byte{0, 20, 5}:      "OpenIB, Inc.",
+       [3]byte{0, 20, 6}:      "Go Networks",
+       [3]byte{0, 20, 7}:      "Sperian Protection Instrumentation",
+       [3]byte{0, 20, 8}:      "Eka Systems Inc.",
+       [3]byte{0, 20, 9}:      "MAGNETI MARELLI   S.E. S.p.A.",
+       [3]byte{0, 20, 10}:     "WEPIO Co., Ltd.",
+       [3]byte{0, 20, 11}:     "FIRST INTERNATIONAL COMPUTER, INC.",
+       [3]byte{0, 20, 12}:     "GKB CCTV CO., LTD.",
+       [3]byte{0, 20, 13}:     "Nortel Networks",
+       [3]byte{0, 20, 14}:     "Nortel Networks",
+       [3]byte{0, 20, 15}:     "Federal State Unitary Enterprise Leningrad R&D Institute of",
+       [3]byte{0, 20, 16}:     "Suzhou Keda Technology CO.,Ltd",
+       [3]byte{0, 20, 17}:     "Deutschmann Automation GmbH & Co. KG",
+       [3]byte{0, 20, 18}:     "S-TEC electronics AG",
+       [3]byte{0, 20, 19}:     "Trebing & Himstedt Prozeßautomation GmbH & Co. KG",
+       [3]byte{0, 20, 20}:     "Jumpnode Systems LLC.",
+       [3]byte{0, 20, 21}:     "Intec Automation inc.",
+       [3]byte{0, 20, 22}:     "Scosche Industries, Inc.",
+       [3]byte{0, 20, 23}:     "RSE Informations Technologie GmbH",
+       [3]byte{0, 20, 24}:     "C4Line",
+       [3]byte{0, 20, 25}:     "SIDSA",
+       [3]byte{0, 20, 26}:     "DEICY CORPORATION",
+       [3]byte{0, 20, 27}:     "Cisco Systems, Inc",
+       [3]byte{0, 20, 28}:     "Cisco Systems, Inc",
+       [3]byte{0, 20, 29}:     "LTi DRIVES GmbH",
+       [3]byte{0, 20, 30}:     "P.A. Semi, Inc.",
+       [3]byte{0, 20, 31}:     "SunKwang Electronics Co., Ltd",
+       [3]byte{0, 20, 32}:     "G-Links networking company",
+       [3]byte{0, 20, 33}:     "Total Wireless Technologies Pte. Ltd.",
+       [3]byte{0, 20, 34}:     "Dell Inc.",
+       [3]byte{0, 20, 35}:     "J-S Co. NEUROCOM",
+       [3]byte{0, 20, 36}:     "Merry Electrics CO., LTD.",
+       [3]byte{0, 20, 37}:     "Galactic Computing Corp.",
+       [3]byte{0, 20, 38}:     "NL Technology",
+       [3]byte{0, 20, 39}:     "JazzMutant",
+       [3]byte{0, 20, 40}:     "Vocollect Inc",
+       [3]byte{0, 20, 41}:     "V Center Technologies Co., Ltd.",
+       [3]byte{0, 20, 42}:     "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 20, 43}:     "Edata Communication Inc.",
+       [3]byte{0, 20, 44}:     "Koncept International, Inc.",
+       [3]byte{0, 20, 45}:     "Toradex AG",
+       [3]byte{0, 20, 46}:     "77 Elektronika Kft.",
+       [3]byte{0, 20, 47}:     "Savvius",
+       [3]byte{0, 20, 48}:     "ViPowER, Inc",
+       [3]byte{0, 20, 49}:     "PDL Electronics Ltd",
+       [3]byte{0, 20, 50}:     "Tarallax Wireless, Inc.",
+       [3]byte{0, 20, 51}:     "Empower Technologies(Canada) Inc.",
+       [3]byte{0, 20, 52}:     "Keri Systems, Inc",
+       [3]byte{0, 20, 53}:     "CityCom Corp.",
+       [3]byte{0, 20, 54}:     "Qwerty Elektronik AB",
+       [3]byte{0, 20, 55}:     "GSTeletech Co.,Ltd.",
+       [3]byte{0, 20, 56}:     "Hewlett Packard Enterprise",
+       [3]byte{0, 20, 57}:     "Blonder Tongue Laboratories, Inc",
+       [3]byte{0, 20, 58}:     "RAYTALK INTERNATIONAL SRL",
+       [3]byte{0, 20, 59}:     "Sensovation AG",
+       [3]byte{0, 20, 60}:     "Rheinmetall Canada Inc.",
+       [3]byte{0, 20, 61}:     "Aevoe Inc.",
+       [3]byte{0, 20, 62}:     "AirLink Communications, Inc.",
+       [3]byte{0, 20, 63}:     "Hotway Technology Corporation",
+       [3]byte{0, 20, 64}:     "ATOMIC Corporation",
+       [3]byte{0, 20, 65}:     "Innovation Sound Technology Co., LTD.",
+       [3]byte{0, 20, 66}:     "ATTO CORPORATION",
+       [3]byte{0, 20, 67}:     "Consultronics Europe Ltd",
+       [3]byte{0, 20, 68}:     "Grundfos Holding",
+       [3]byte{0, 20, 69}:     "Telefon-Gradnja d.o.o.",
+       [3]byte{0, 20, 70}:     "SuperVision Solutions LLC",
+       [3]byte{0, 20, 71}:     "BOAZ Inc.",
+       [3]byte{0, 20, 72}:     "Inventec Multimedia & Telecom Corporation",
+       [3]byte{0, 20, 73}:     "Sichuan Changhong Electric Ltd.",
+       [3]byte{0, 20, 74}:     "Taiwan Thick-Film Ind. Corp.",
+       [3]byte{0, 20, 75}:     "Hifn, Inc.",
+       [3]byte{0, 20, 76}:     "General Meters Corp.",
+       [3]byte{0, 20, 77}:     "Intelligent Systems",
+       [3]byte{0, 20, 78}:     "SRISA",
+       [3]byte{0, 20, 79}:     "Oracle Corporation",
+       [3]byte{0, 20, 80}:     "Heim Systems GmbH",
+       [3]byte{0, 20, 81}:     "Apple, Inc.",
+       [3]byte{0, 20, 82}:     "CALCULEX,INC.",
+       [3]byte{0, 20, 83}:     "ADVANTECH TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 20, 84}:     "Symwave",
+       [3]byte{0, 20, 85}:     "Coder Electronics Corporation",
+       [3]byte{0, 20, 86}:     "Edge Products",
+       [3]byte{0, 20, 87}:     "T-VIPS AS",
+       [3]byte{0, 20, 88}:     "HS Automatic ApS",
+       [3]byte{0, 20, 89}:     "Moram Co., Ltd.",
+       [3]byte{0, 20, 90}:     "Neratec Solutions AG",
+       [3]byte{0, 20, 91}:     "SeekerNet Inc.",
+       [3]byte{0, 20, 92}:     "Intronics B.V.",
+       [3]byte{0, 20, 93}:     "WJ Communications, Inc.",
+       [3]byte{0, 20, 94}:     "IBM Corp",
+       [3]byte{0, 20, 95}:     "ADITEC CO. LTD",
+       [3]byte{0, 20, 96}:     "Kyocera Wireless Corp.",
+       [3]byte{0, 20, 97}:     "CORONA CORPORATION",
+       [3]byte{0, 20, 98}:     "Digiwell Technology, inc",
+       [3]byte{0, 20, 99}:     "IDCS N.V.",
+       [3]byte{0, 20, 100}:    "Cryptosoft",
+       [3]byte{0, 20, 101}:    "Novo Nordisk A/S",
+       [3]byte{0, 20, 102}:    "Kleinhenz Elektronik GmbH",
+       [3]byte{0, 20, 103}:    "ArrowSpan Inc.",
+       [3]byte{0, 20, 104}:    "CelPlan International, Inc.",
+       [3]byte{0, 20, 105}:    "Cisco Systems, Inc",
+       [3]byte{0, 20, 106}:    "Cisco Systems, Inc",
+       [3]byte{0, 20, 107}:    "Anagran, Inc.",
+       [3]byte{0, 20, 108}:    "NETGEAR",
+       [3]byte{0, 20, 109}:    "RF Technologies",
+       [3]byte{0, 20, 110}:    "H. Stoll GmbH & Co. KG",
+       [3]byte{0, 20, 111}:    "Kohler Co",
+       [3]byte{0, 20, 112}:    "Prokom Software SA",
+       [3]byte{0, 20, 113}:    "Eastern Asia Technology Limited",
+       [3]byte{0, 20, 114}:    "China Broadband Wireless IP Standard Group",
+       [3]byte{0, 20, 115}:    "Bookham Inc",
+       [3]byte{0, 20, 116}:    "K40 Electronics",
+       [3]byte{0, 20, 117}:    "Wiline Networks, Inc.",
+       [3]byte{0, 20, 118}:    "MultiCom Industries Limited",
+       [3]byte{0, 20, 119}:    "Nertec  Inc.",
+       [3]byte{0, 20, 120}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 20, 121}:    "NEC Magnus Communications,Ltd.",
+       [3]byte{0, 20, 122}:    "Eubus GmbH",
+       [3]byte{0, 20, 123}:    "Iteris, Inc.",
+       [3]byte{0, 20, 124}:    "3Com Ltd",
+       [3]byte{0, 20, 125}:    "Aeon Digital International",
+       [3]byte{0, 20, 126}:    "InnerWireless",
+       [3]byte{0, 20, 127}:    "Thomson Telecom Belgium",
+       [3]byte{0, 20, 128}:    "Hitachi-LG Data Storage Korea, Inc",
+       [3]byte{0, 20, 129}:    "Multilink Inc",
+       [3]byte{0, 20, 130}:    "Aurora Networks",
+       [3]byte{0, 20, 131}:    "eXS Inc.",
+       [3]byte{0, 20, 132}:    "Cermate Technologies Inc.",
+       [3]byte{0, 20, 133}:    "Giga-Byte",
+       [3]byte{0, 20, 134}:    "Echo Digital Audio Corporation",
+       [3]byte{0, 20, 135}:    "American Technology Integrators",
+       [3]byte{0, 20, 136}:    "Akorri",
+       [3]byte{0, 20, 137}:    "B15402100 - JANDEI, S.L.",
+       [3]byte{0, 20, 138}:    "Elin Ebg Traction Gmbh",
+       [3]byte{0, 20, 139}:    "Globo Electronic GmbH & Co. KG",
+       [3]byte{0, 20, 140}:    "General Dynamics Mission Systems",
+       [3]byte{0, 20, 141}:    "Cubic Defense Simulation Systems",
+       [3]byte{0, 20, 142}:    "Tele Power Inc.",
+       [3]byte{0, 20, 143}:    "Protronic (Far East) Ltd.",
+       [3]byte{0, 20, 144}:    "ASP Corporation",
+       [3]byte{0, 20, 145}:    "Daniels Electronics Ltd. dbo Codan Rado Communications",
+       [3]byte{0, 20, 146}:    "Liteon, Mobile Media Solution SBU",
+       [3]byte{0, 20, 147}:    "Systimax Solutions",
+       [3]byte{0, 20, 148}:    "ESU AG",
+       [3]byte{0, 20, 149}:    "2Wire Inc",
+       [3]byte{0, 20, 150}:    "Phonic Corp.",
+       [3]byte{0, 20, 151}:    "ZHIYUAN Eletronics co.,ltd.",
+       [3]byte{0, 20, 152}:    "Viking Design Technology",
+       [3]byte{0, 20, 153}:    "Helicomm Inc",
+       [3]byte{0, 20, 154}:    "ARRIS Group, Inc.",
+       [3]byte{0, 20, 155}:    "Nokota Communications, LLC",
+       [3]byte{0, 20, 156}:    "HF Company",
+       [3]byte{0, 20, 157}:    "Sound ID Inc.",
+       [3]byte{0, 20, 158}:    "UbONE Co., Ltd",
+       [3]byte{0, 20, 159}:    "System and Chips, Inc.",
+       [3]byte{0, 20, 160}:    "Accsense, Inc.",
+       [3]byte{0, 20, 161}:    "Synchronous Communication Corp",
+       [3]byte{0, 20, 162}:    "Core Micro Systems Inc.",
+       [3]byte{0, 20, 163}:    "Vitelec BV",
+       [3]byte{0, 20, 164}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 20, 165}:    "Gemtek Technology Co., Ltd.",
+       [3]byte{0, 20, 166}:    "Teranetics, Inc.",
+       [3]byte{0, 20, 167}:    "Nokia Danmark A/S",
+       [3]byte{0, 20, 168}:    "Cisco Systems, Inc",
+       [3]byte{0, 20, 169}:    "Cisco Systems, Inc",
+       [3]byte{0, 20, 170}:    "Ashly Audio, Inc.",
+       [3]byte{0, 20, 171}:    "Senhai Electronic Technology Co., Ltd.",
+       [3]byte{0, 20, 172}:    "Bountiful WiFi",
+       [3]byte{0, 20, 173}:    "Gassner Wiege- und Meßtechnik GmbH",
+       [3]byte{0, 20, 174}:    "Wizlogics Co., Ltd.",
+       [3]byte{0, 20, 175}:    "Datasym POS Inc.",
+       [3]byte{0, 20, 176}:    "Naeil Community",
+       [3]byte{0, 20, 177}:    "Axell Wireless Limited",
+       [3]byte{0, 20, 178}:    "mCubelogics Corporation",
+       [3]byte{0, 20, 179}:    "CoreStar International Corp",
+       [3]byte{0, 20, 180}:    "General Dynamics United Kingdom Ltd",
+       [3]byte{0, 20, 181}:    "PHYSIOMETRIX,INC",
+       [3]byte{0, 20, 182}:    "Enswer Technology Inc.",
+       [3]byte{0, 20, 183}:    "AR Infotek Inc.",
+       [3]byte{0, 20, 184}:    "Hill-Rom",
+       [3]byte{0, 20, 185}:    "MSTAR SEMICONDUCTOR",
+       [3]byte{0, 20, 186}:    "Carvers SA de CV",
+       [3]byte{0, 20, 187}:    "Open Interface North America",
+       [3]byte{0, 20, 188}:    "SYNECTIC TELECOM EXPORTS PVT. LTD.",
+       [3]byte{0, 20, 189}:    "incNETWORKS, Inc",
+       [3]byte{0, 20, 190}:    "Wink communication technology CO.LTD",
+       [3]byte{0, 20, 191}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 20, 192}:    "Symstream Technology Group Ltd",
+       [3]byte{0, 20, 193}:    "U.S. Robotics Corporation",
+       [3]byte{0, 20, 194}:    "Hewlett Packard",
+       [3]byte{0, 20, 195}:    "Seagate Technology",
+       [3]byte{0, 20, 196}:    "Vitelcom Mobile Technology",
+       [3]byte{0, 20, 197}:    "Alive Technologies Pty Ltd",
+       [3]byte{0, 20, 198}:    "Quixant Ltd",
+       [3]byte{0, 20, 199}:    "Nortel Networks",
+       [3]byte{0, 20, 200}:    "Contemporary Research Corp",
+       [3]byte{0, 20, 201}:    "Brocade Communications Systems, Inc.",
+       [3]byte{0, 20, 202}:    "Key Radio Systems Limited",
+       [3]byte{0, 20, 203}:    "LifeSync Corporation",
+       [3]byte{0, 20, 204}:    "Zetec, Inc.",
+       [3]byte{0, 20, 205}:    "DigitalZone Co., Ltd.",
+       [3]byte{0, 20, 206}:    "NF CORPORATION",
+       [3]byte{0, 20, 207}:    "INVISIO Communications",
+       [3]byte{0, 20, 208}:    "BTI Systems Inc.",
+       [3]byte{0, 20, 209}:    "TRENDnet, Inc.",
+       [3]byte{0, 20, 210}:    "Kyuden Technosystems Corporation",
+       [3]byte{0, 20, 211}:    "SEPSA",
+       [3]byte{0, 20, 212}:    "K Technology Corporation",
+       [3]byte{0, 20, 213}:    "Datang Telecom Technology CO. , LCD,Optical Communication Br",
+       [3]byte{0, 20, 214}:    "Jeongmin Electronics Co.,Ltd.",
+       [3]byte{0, 20, 215}:    "Datastore Technology Corp",
+       [3]byte{0, 20, 216}:    "bio-logic SA",
+       [3]byte{0, 20, 217}:    "IP Fabrics, Inc.",
+       [3]byte{0, 20, 218}:    "Huntleigh Healthcare",
+       [3]byte{0, 20, 219}:    "Elma Trenew Electronic GmbH",
+       [3]byte{0, 20, 220}:    "Communication System Design & Manufacturing (CSDM)",
+       [3]byte{0, 20, 221}:    "Covergence Inc.",
+       [3]byte{0, 20, 222}:    "Sage Instruments Inc.",
+       [3]byte{0, 20, 223}:    "HI-P Tech Corporation",
+       [3]byte{0, 20, 224}:    "LET'S Corporation",
+       [3]byte{0, 20, 225}:    "Data Display AG",
+       [3]byte{0, 20, 226}:    "datacom systems inc.",
+       [3]byte{0, 20, 227}:    "mm-lab GmbH",
+       [3]byte{0, 20, 228}:    "infinias, LLC",
+       [3]byte{0, 20, 229}:    "Alticast",
+       [3]byte{0, 20, 230}:    "AIM Infrarotmodule GmbH",
+       [3]byte{0, 20, 231}:    "Stolinx,. Inc",
+       [3]byte{0, 20, 232}:    "ARRIS Group, Inc.",
+       [3]byte{0, 20, 233}:    "Nortech International",
+       [3]byte{0, 20, 234}:    "S Digm Inc. (Safe Paradigm Inc.)",
+       [3]byte{0, 20, 235}:    "AwarePoint Corporation",
+       [3]byte{0, 20, 236}:    "Acro Telecom",
+       [3]byte{0, 20, 237}:    "Airak, Inc.",
+       [3]byte{0, 20, 238}:    "Western Digital Technologies, Inc.",
+       [3]byte{0, 20, 239}:    "TZero Technologies, Inc.",
+       [3]byte{0, 20, 240}:    "Business Security OL AB",
+       [3]byte{0, 20, 241}:    "Cisco Systems, Inc",
+       [3]byte{0, 20, 242}:    "Cisco Systems, Inc",
+       [3]byte{0, 20, 243}:    "ViXS Systems Inc",
+       [3]byte{0, 20, 244}:    "DekTec Digital Video B.V.",
+       [3]byte{0, 20, 245}:    "OSI Security Devices",
+       [3]byte{0, 20, 246}:    "Juniper Networks",
+       [3]byte{0, 20, 247}:    "CREVIS Co., LTD",
+       [3]byte{0, 20, 248}:    "Scientific Atlanta",
+       [3]byte{0, 20, 249}:    "Vantage Controls",
+       [3]byte{0, 20, 250}:    "AsGa S.A.",
+       [3]byte{0, 20, 251}:    "Technical Solutions Inc.",
+       [3]byte{0, 20, 252}:    "Extandon, Inc.",
+       [3]byte{0, 20, 253}:    "Thecus Technology Corp.",
+       [3]byte{0, 20, 254}:    "Artech Electronics",
+       [3]byte{0, 20, 255}:    "Precise Automation, Inc.",
+       [3]byte{0, 21, 0}:      "Intel Corporate",
+       [3]byte{0, 21, 1}:      "LexBox",
+       [3]byte{0, 21, 2}:      "BETA tech",
+       [3]byte{0, 21, 3}:      "PROFIcomms s.r.o.",
+       [3]byte{0, 21, 4}:      "GAME PLUS CO., LTD.",
+       [3]byte{0, 21, 5}:      "Actiontec Electronics, Inc",
+       [3]byte{0, 21, 6}:      "Neo Photonics",
+       [3]byte{0, 21, 7}:      "Renaissance Learning Inc",
+       [3]byte{0, 21, 8}:      "Global Target Enterprise Inc",
+       [3]byte{0, 21, 9}:      "Plus Technology Co., Ltd",
+       [3]byte{0, 21, 10}:     "Sonoa Systems, Inc",
+       [3]byte{0, 21, 11}:     "SAGE INFOTECH LTD.",
+       [3]byte{0, 21, 12}:     "AVM GmbH",
+       [3]byte{0, 21, 13}:     "Hoana Medical, Inc.",
+       [3]byte{0, 21, 14}:     "OPENBRAIN TECHNOLOGIES CO., LTD.",
+       [3]byte{0, 21, 15}:     "mingjong",
+       [3]byte{0, 21, 16}:     "Techsphere Co., Ltd",
+       [3]byte{0, 21, 17}:     "Data Center Systems",
+       [3]byte{0, 21, 18}:     "Zurich University of Applied Sciences",
+       [3]byte{0, 21, 19}:     "EFS sas",
+       [3]byte{0, 21, 20}:     "Hu Zhou NAVA Networks&Electronics Ltd.",
+       [3]byte{0, 21, 21}:     "Leipold+Co.GmbH",
+       [3]byte{0, 21, 22}:     "URIEL SYSTEMS INC.",
+       [3]byte{0, 21, 23}:     "Intel Corporate",
+       [3]byte{0, 21, 24}:     "Shenzhen 10MOONS Technology Development CO.,Ltd",
+       [3]byte{0, 21, 25}:     "StoreAge Networking Technologies",
+       [3]byte{0, 21, 26}:     "Hunter Engineering Company",
+       [3]byte{0, 21, 27}:     "Isilon Systems Inc.",
+       [3]byte{0, 21, 28}:     "LENECO",
+       [3]byte{0, 21, 29}:     "M2I CORPORATION",
+       [3]byte{0, 21, 30}:     "Ethernet Powerlink Standardization Group (EPSG)",
+       [3]byte{0, 21, 31}:     "Multivision Intelligent Surveillance (Hong Kong) Ltd",
+       [3]byte{0, 21, 32}:     "Radiocrafts AS",
+       [3]byte{0, 21, 33}:     "Horoquartz",
+       [3]byte{0, 21, 34}:     "Dea Security",
+       [3]byte{0, 21, 35}:     "Meteor Communications Corporation",
+       [3]byte{0, 21, 36}:     "Numatics, Inc.",
+       [3]byte{0, 21, 37}:     "Chamberlain Access Solutions",
+       [3]byte{0, 21, 38}:     "Remote Technologies Inc",
+       [3]byte{0, 21, 39}:     "Balboa Instruments",
+       [3]byte{0, 21, 40}:     "Beacon Medical Products LLC d.b.a. BeaconMedaes",
+       [3]byte{0, 21, 41}:     "N3 Corporation",
+       [3]byte{0, 21, 42}:     "Nokia Corporation",
+       [3]byte{0, 21, 43}:     "Cisco Systems, Inc",
+       [3]byte{0, 21, 44}:     "Cisco Systems, Inc",
+       [3]byte{0, 21, 45}:     "TenX Networks, LLC",
+       [3]byte{0, 21, 46}:     "PacketHop, Inc.",
+       [3]byte{0, 21, 47}:     "ARRIS Group, Inc.",
+       [3]byte{0, 21, 48}:     "Dell EMC",
+       [3]byte{0, 21, 49}:     "KOCOM",
+       [3]byte{0, 21, 50}:     "Consumer Technologies Group, LLC",
+       [3]byte{0, 21, 51}:     "NADAM.CO.,LTD",
+       [3]byte{0, 21, 52}:     "A Beltrónica-Companhia de Comunicações, Lda",
+       [3]byte{0, 21, 53}:     "OTE Spa",
+       [3]byte{0, 21, 54}:     "Powertech co.,Ltd",
+       [3]byte{0, 21, 55}:     "Ventus Networks",
+       [3]byte{0, 21, 56}:     "RFID, Inc.",
+       [3]byte{0, 21, 57}:     "Technodrive srl",
+       [3]byte{0, 21, 58}:     "Shenzhen Syscan Technology Co.,Ltd.",
+       [3]byte{0, 21, 59}:     "EMH metering GmbH & Co. KG",
+       [3]byte{0, 21, 60}:     "Kprotech Co., Ltd.",
+       [3]byte{0, 21, 61}:     "ELIM PRODUCT CO.",
+       [3]byte{0, 21, 62}:     "Q-Matic Sweden AB",
+       [3]byte{0, 21, 63}:     "Alcatel Alenia Space Italia",
+       [3]byte{0, 21, 64}:     "Nortel Networks",
+       [3]byte{0, 21, 65}:     "StrataLight Communications, Inc.",
+       [3]byte{0, 21, 66}:     "MICROHARD S.R.L.",
+       [3]byte{0, 21, 67}:     "Aberdeen Test Center",
+       [3]byte{0, 21, 68}:     "coM.s.a.t. AG",
+       [3]byte{0, 21, 69}:     "SEECODE Co., Ltd.",
+       [3]byte{0, 21, 70}:     "ITG Worldwide Sdn Bhd",
+       [3]byte{0, 21, 71}:     "AiZen Solutions Inc.",
+       [3]byte{0, 21, 72}:     "CUBE TECHNOLOGIES",
+       [3]byte{0, 21, 73}:     "Dixtal Biomedica Ind. Com. Ltda",
+       [3]byte{0, 21, 74}:     "WANSHIH ELECTRONIC CO., LTD",
+       [3]byte{0, 21, 75}:     "Wonde Proud Technology Co., Ltd",
+       [3]byte{0, 21, 76}:     "Saunders Electronics",
+       [3]byte{0, 21, 77}:     "Netronome Systems, Inc.",
+       [3]byte{0, 21, 78}:     "IEC",
+       [3]byte{0, 21, 79}:     "one RF Technology",
+       [3]byte{0, 21, 80}:     "Nits Technology Inc",
+       [3]byte{0, 21, 81}:     "RadioPulse Inc.",
+       [3]byte{0, 21, 82}:     "Wi-Gear Inc.",
+       [3]byte{0, 21, 83}:     "Cytyc Corporation",
+       [3]byte{0, 21, 84}:     "Atalum Wireless S.A.",
+       [3]byte{0, 21, 85}:     "DFM GmbH",
+       [3]byte{0, 21, 86}:     "Sagemcom Broadband SAS",
+       [3]byte{0, 21, 87}:     "Olivetti",
+       [3]byte{0, 21, 88}:     "FOXCONN",
+       [3]byte{0, 21, 89}:     "Securaplane Technologies, Inc.",
+       [3]byte{0, 21, 90}:     "DAINIPPON PHARMACEUTICAL CO., LTD.",
+       [3]byte{0, 21, 91}:     "Sampo Corporation",
+       [3]byte{0, 21, 92}:     "Dresser Wayne",
+       [3]byte{0, 21, 93}:     "Microsoft Corporation",
+       [3]byte{0, 21, 94}:     "Morgan Stanley",
+       [3]byte{0, 21, 95}:     "GreenPeak Technologies",
+       [3]byte{0, 21, 96}:     "Hewlett Packard",
+       [3]byte{0, 21, 97}:     "JJPlus Corporation",
+       [3]byte{0, 21, 98}:     "Cisco Systems, Inc",
+       [3]byte{0, 21, 99}:     "Cisco Systems, Inc",
+       [3]byte{0, 21, 100}:    "BEHRINGER Spezielle Studiotechnik GmbH",
+       [3]byte{0, 21, 101}:    "XIAMEN YEALINK NETWORK TECHNOLOGY CO.,LTD",
+       [3]byte{0, 21, 102}:    "A-First Technology Co., Ltd.",
+       [3]byte{0, 21, 103}:    "RADWIN Inc.",
+       [3]byte{0, 21, 104}:    "Dilithium Networks",
+       [3]byte{0, 21, 105}:    "PECO II, Inc.",
+       [3]byte{0, 21, 106}:    "DG2L Technologies Pvt. Ltd.",
+       [3]byte{0, 21, 107}:    "Perfisans Networks Corp.",
+       [3]byte{0, 21, 108}:    "SANE SYSTEM CO., LTD",
+       [3]byte{0, 21, 109}:    "Ubiquiti Networks Inc.",
+       [3]byte{0, 21, 110}:    "A. W. Communication Systems Ltd",
+       [3]byte{0, 21, 111}:    "Xiranet Communications GmbH",
+       [3]byte{0, 21, 112}:    "Zebra Technologies Inc",
+       [3]byte{0, 21, 113}:    "Nolan Systems",
+       [3]byte{0, 21, 114}:    "Red-Lemon",
+       [3]byte{0, 21, 115}:    "NewSoft  Technology Corporation",
+       [3]byte{0, 21, 116}:    "Horizon Semiconductors Ltd.",
+       [3]byte{0, 21, 117}:    "Nevis Networks Inc.",
+       [3]byte{0, 21, 118}:    "LABiTec - Labor Biomedical Technologies GmbH",
+       [3]byte{0, 21, 119}:    "Allied Telesis, Inc.",
+       [3]byte{0, 21, 120}:    "Audio / Video Innovations",
+       [3]byte{0, 21, 121}:    "Lunatone Industrielle Elektronik GmbH",
+       [3]byte{0, 21, 122}:    "Telefin S.p.A.",
+       [3]byte{0, 21, 123}:    "Leuze electronic GmbH + Co. KG",
+       [3]byte{0, 21, 124}:    "Dave Networks, Inc.",
+       [3]byte{0, 21, 125}:    "POSDATA",
+       [3]byte{0, 21, 126}:    "Weidmüller Interface GmbH & Co. KG",
+       [3]byte{0, 21, 127}:    "ChuanG International Holding CO.,LTD.",
+       [3]byte{0, 21, 128}:    "U-WAY CORPORATION",
+       [3]byte{0, 21, 129}:    "MAKUS Inc.",
+       [3]byte{0, 21, 130}:    "Pulse Eight Limited",
+       [3]byte{0, 21, 131}:    "IVT corporation",
+       [3]byte{0, 21, 132}:    "Schenck Process GmbH",
+       [3]byte{0, 21, 133}:    "Aonvision Technolopy Corp.",
+       [3]byte{0, 21, 134}:    "Xiamen Overseas Chinese Electronic Co., Ltd.",
+       [3]byte{0, 21, 135}:    "Takenaka Seisakusho Co.,Ltd",
+       [3]byte{0, 21, 136}:    "Salutica Allied Solutions Sdn Bhd",
+       [3]byte{0, 21, 137}:    "D-MAX Technology Co.,Ltd",
+       [3]byte{0, 21, 138}:    "SURECOM Technology Corp.",
+       [3]byte{0, 21, 139}:    "Park Air Systems Ltd",
+       [3]byte{0, 21, 140}:    "Liab ApS",
+       [3]byte{0, 21, 141}:    "Jennic Ltd",
+       [3]byte{0, 21, 142}:    "Plustek.INC",
+       [3]byte{0, 21, 143}:    "NTT Advanced Technology Corporation",
+       [3]byte{0, 21, 144}:    "Hectronic GmbH",
+       [3]byte{0, 21, 145}:    "RLW Inc.",
+       [3]byte{0, 21, 146}:    "Facom UK Ltd (Melksham)",
+       [3]byte{0, 21, 147}:    "U4EA Technologies Inc.",
+       [3]byte{0, 21, 148}:    "BIXOLON CO.,LTD",
+       [3]byte{0, 21, 149}:    "Quester Tangent Corporation",
+       [3]byte{0, 21, 150}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 151}:    "AETA AUDIO SYSTEMS",
+       [3]byte{0, 21, 152}:    "Kolektor group",
+       [3]byte{0, 21, 153}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 21, 154}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 155}:    "Nortel Networks",
+       [3]byte{0, 21, 156}:    "B-KYUNG SYSTEM Co.,Ltd.",
+       [3]byte{0, 21, 157}:    "Tripp Lite",
+       [3]byte{0, 21, 158}:    "Mad Catz Interactive Inc",
+       [3]byte{0, 21, 159}:    "Terascala, Inc.",
+       [3]byte{0, 21, 160}:    "Nokia Danmark A/S",
+       [3]byte{0, 21, 161}:    "ECA-SINTERS",
+       [3]byte{0, 21, 162}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 163}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 164}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 165}:    "DCI Co., Ltd.",
+       [3]byte{0, 21, 166}:    "Digital Electronics Products Ltd.",
+       [3]byte{0, 21, 167}:    "Robatech AG",
+       [3]byte{0, 21, 168}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 169}:    "KWANG WOO I&C CO.,LTD",
+       [3]byte{0, 21, 170}:    "Rextechnik International Co.,",
+       [3]byte{0, 21, 171}:    "PRO CO SOUND INC",
+       [3]byte{0, 21, 172}:    "Capelon AB",
+       [3]byte{0, 21, 173}:    "Accedian Networks",
+       [3]byte{0, 21, 174}:    "kyung il",
+       [3]byte{0, 21, 175}:    "AzureWave Technology Inc.",
+       [3]byte{0, 21, 176}:    "AUTOTELENET CO.,LTD",
+       [3]byte{0, 21, 177}:    "Ambient Corporation",
+       [3]byte{0, 21, 178}:    "Advanced Industrial Computer, Inc.",
+       [3]byte{0, 21, 179}:    "Caretech AB",
+       [3]byte{0, 21, 180}:    "Polymap  Wireless LLC",
+       [3]byte{0, 21, 181}:    "CI Network Corp.",
+       [3]byte{0, 21, 182}:    "ShinMaywa Industries, Ltd.",
+       [3]byte{0, 21, 183}:    "Toshiba",
+       [3]byte{0, 21, 184}:    "Tahoe",
+       [3]byte{0, 21, 185}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 21, 186}:    "iba AG",
+       [3]byte{0, 21, 187}:    "SMA Solar Technology AG",
+       [3]byte{0, 21, 188}:    "Develco",
+       [3]byte{0, 21, 189}:    "Group 4 Technology Ltd",
+       [3]byte{0, 21, 190}:    "Iqua Ltd.",
+       [3]byte{0, 21, 191}:    "technicob",
+       [3]byte{0, 21, 192}:    "DIGITAL TELEMEDIA CO.,LTD.",
+       [3]byte{0, 21, 193}:    "Sony Interactive Entertainment Inc.",
+       [3]byte{0, 21, 194}:    "3M Germany",
+       [3]byte{0, 21, 195}:    "Ruf Telematik AG",
+       [3]byte{0, 21, 196}:    "FLOVEL CO., LTD.",
+       [3]byte{0, 21, 197}:    "Dell Inc.",
+       [3]byte{0, 21, 198}:    "Cisco Systems, Inc",
+       [3]byte{0, 21, 199}:    "Cisco Systems, Inc",
+       [3]byte{0, 21, 200}:    "FlexiPanel Ltd",
+       [3]byte{0, 21, 201}:    "Gumstix, Inc",
+       [3]byte{0, 21, 202}:    "TeraRecon, Inc.",
+       [3]byte{0, 21, 203}:    "Surf Communication Solutions Ltd.",
+       [3]byte{0, 21, 204}:    "UQUEST, LTD.",
+       [3]byte{0, 21, 205}:    "Exartech International Corp.",
+       [3]byte{0, 21, 206}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 207}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 208}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 209}:    "ARRIS Group, Inc.",
+       [3]byte{0, 21, 210}:    "Xantech Corporation",
+       [3]byte{0, 21, 211}:    "Pantech&Curitel Communications, Inc.",
+       [3]byte{0, 21, 212}:    "Emitor AB",
+       [3]byte{0, 21, 213}:    "NICEVT",
+       [3]byte{0, 21, 214}:    "OSLiNK Sp. z o.o.",
+       [3]byte{0, 21, 215}:    "Reti Corporation",
+       [3]byte{0, 21, 216}:    "Interlink Electronics",
+       [3]byte{0, 21, 217}:    "PKC Electronics Oy",
+       [3]byte{0, 21, 218}:    "IRITEL A.D.",
+       [3]byte{0, 21, 219}:    "Canesta Inc.",
+       [3]byte{0, 21, 220}:    "KT&C Co., Ltd.",
+       [3]byte{0, 21, 221}:    "IP Control Systems Ltd.",
+       [3]byte{0, 21, 222}:    "Nokia Danmark A/S",
+       [3]byte{0, 21, 223}:    "Clivet S.p.A.",
+       [3]byte{0, 21, 224}:    "Ericsson",
+       [3]byte{0, 21, 225}:    "Picochip Ltd",
+       [3]byte{0, 21, 226}:    "Dr.Ing. Herbert Knauer GmbH",
+       [3]byte{0, 21, 227}:    "Dream Technologies Corporation",
+       [3]byte{0, 21, 228}:    "Zimmer Elektromedizin",
+       [3]byte{0, 21, 229}:    "Cheertek Inc.",
+       [3]byte{0, 21, 230}:    "MOBILE TECHNIKA Inc.",
+       [3]byte{0, 21, 231}:    "Quantec Tontechnik",
+       [3]byte{0, 21, 232}:    "Nortel Networks",
+       [3]byte{0, 21, 233}:    "D-Link Corporation",
+       [3]byte{0, 21, 234}:    "Tellumat (Pty) Ltd",
+       [3]byte{0, 21, 235}:    "zte corporation",
+       [3]byte{0, 21, 236}:    "Boca Devices LLC",
+       [3]byte{0, 21, 237}:    "Fulcrum Microsystems, Inc.",
+       [3]byte{0, 21, 238}:    "Omnex Control Systems",
+       [3]byte{0, 21, 239}:    "NEC TOKIN Corporation",
+       [3]byte{0, 21, 240}:    "EGO BV",
+       [3]byte{0, 21, 241}:    "KYLINK Communications Corp.",
+       [3]byte{0, 21, 242}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 21, 243}:    "PELTOR AB",
+       [3]byte{0, 21, 244}:    "Eventide",
+       [3]byte{0, 21, 245}:    "Sustainable Energy Systems",
+       [3]byte{0, 21, 246}:    "SCIENCE AND ENGINEERING SERVICES, INC.",
+       [3]byte{0, 21, 247}:    "Wintecronics Ltd.",
+       [3]byte{0, 21, 248}:    "Kingtronics Industrial Co. Ltd.",
+       [3]byte{0, 21, 249}:    "Cisco Systems, Inc",
+       [3]byte{0, 21, 250}:    "Cisco Systems, Inc",
+       [3]byte{0, 21, 251}:    "setex schermuly textile computer gmbh",
+       [3]byte{0, 21, 252}:    "Littelfuse Startco",
+       [3]byte{0, 21, 253}:    "Complete Media Systems",
+       [3]byte{0, 21, 254}:    "SCHILLING ROBOTICS LLC",
+       [3]byte{0, 21, 255}:    "Novatel Wireless Solutions, Inc.",
+       [3]byte{0, 22, 0}:      "CelleBrite Mobile Synchronization",
+       [3]byte{0, 22, 1}:      "BUFFALO.INC",
+       [3]byte{0, 22, 2}:      "CEYON TECHNOLOGY CO.,LTD.",
+       [3]byte{0, 22, 3}:      "COOLKSKY Co., LTD",
+       [3]byte{0, 22, 4}:      "Sigpro",
+       [3]byte{0, 22, 5}:      "YORKVILLE SOUND INC.",
+       [3]byte{0, 22, 6}:      "Ideal Industries",
+       [3]byte{0, 22, 7}:      "Curves International Inc.",
+       [3]byte{0, 22, 8}:      "Sequans Communications",
+       [3]byte{0, 22, 9}:      "Unitech electronics co., ltd.",
+       [3]byte{0, 22, 10}:     "SWEEX Europe BV",
+       [3]byte{0, 22, 11}:     "TVWorks LLC",
+       [3]byte{0, 22, 12}:     "LPL  DEVELOPMENT S.A. DE C.V",
+       [3]byte{0, 22, 13}:     "Be Here Corporation",
+       [3]byte{0, 22, 14}:     "Optica Technologies Inc.",
+       [3]byte{0, 22, 15}:     "BADGER METER INC",
+       [3]byte{0, 22, 16}:     "Carina Technology",
+       [3]byte{0, 22, 17}:     "Altecon Srl",
+       [3]byte{0, 22, 18}:     "Otsuka Electronics Co., Ltd.",
+       [3]byte{0, 22, 19}:     "LibreStream Technologies Inc.",
+       [3]byte{0, 22, 20}:     "Picosecond Pulse Labs",
+       [3]byte{0, 22, 21}:     "Nittan Company, Limited",
+       [3]byte{0, 22, 22}:     "BROWAN COMMUNICATION INC.",
+       [3]byte{0, 22, 23}:     "MSI",
+       [3]byte{0, 22, 24}:     "HIVION Co., Ltd.",
+       [3]byte{0, 22, 25}:     "Lancelan Technologies S.L.",
+       [3]byte{0, 22, 26}:     "Dametric AB",
+       [3]byte{0, 22, 27}:     "Micronet Corporation",
+       [3]byte{0, 22, 28}:     "e:cue",
+       [3]byte{0, 22, 29}:     "Innovative Wireless Technologies, Inc.",
+       [3]byte{0, 22, 30}:     "Woojinnet",
+       [3]byte{0, 22, 31}:     "SUNWAVETEC Co., Ltd.",
+       [3]byte{0, 22, 32}:     "Sony Mobile Communications AB",
+       [3]byte{0, 22, 33}:     "Colorado Vnet",
+       [3]byte{0, 22, 34}:     "BBH SYSTEMS GMBH",
+       [3]byte{0, 22, 35}:     "Interval Media",
+       [3]byte{0, 22, 36}:     "Teneros, Inc.",
+       [3]byte{0, 22, 37}:     "Impinj, Inc.",
+       [3]byte{0, 22, 38}:     "ARRIS Group, Inc.",
+       [3]byte{0, 22, 39}:     "embedded-logic DESIGN AND MORE GmbH",
+       [3]byte{0, 22, 40}:     "Magicard Ltd",
+       [3]byte{0, 22, 41}:     "Nivus GmbH",
+       [3]byte{0, 22, 42}:     "Antik computers & communications s.r.o.",
+       [3]byte{0, 22, 43}:     "Togami Electric Mfg.co.,Ltd.",
+       [3]byte{0, 22, 44}:     "Xanboo",
+       [3]byte{0, 22, 45}:     "STNet Co., Ltd.",
+       [3]byte{0, 22, 46}:     "Space Shuttle Hi-Tech Co., Ltd.",
+       [3]byte{0, 22, 47}:     "Geutebrück GmbH",
+       [3]byte{0, 22, 48}:     "Vativ Technologies",
+       [3]byte{0, 22, 49}:     "Xteam",
+       [3]byte{0, 22, 50}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 22, 51}:     "Oxford Diagnostics Ltd.",
+       [3]byte{0, 22, 52}:     "Mathtech, Inc.",
+       [3]byte{0, 22, 53}:     "Hewlett Packard",
+       [3]byte{0, 22, 54}:     "QUANTA COMPUTER INC.",
+       [3]byte{0, 22, 55}:     "CITEL SpA",
+       [3]byte{0, 22, 56}:     "TECOM Co., Ltd.",
+       [3]byte{0, 22, 57}:     "Ubiquam Co., Ltd.",
+       [3]byte{0, 22, 58}:     "YVES TECHNOLOGY CO., LTD.",
+       [3]byte{0, 22, 59}:     "VertexRSI/General Dynamics",
+       [3]byte{0, 22, 60}:     "Rebox B.V.",
+       [3]byte{0, 22, 61}:     "Tsinghua Tongfang Legend Silicon Tech. Co., Ltd.",
+       [3]byte{0, 22, 62}:     "Xensource, Inc.",
+       [3]byte{0, 22, 63}:     "CReTE SYSTEMS Inc.",
+       [3]byte{0, 22, 64}:     "Asmobile Communication Inc.",
+       [3]byte{0, 22, 65}:     "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{0, 22, 66}:     "Pangolin",
+       [3]byte{0, 22, 67}:     "Sunhillo Corporation",
+       [3]byte{0, 22, 68}:     "LITE-ON Technology Corp.",
+       [3]byte{0, 22, 69}:     "Power Distribution, Inc.",
+       [3]byte{0, 22, 70}:     "Cisco Systems, Inc",
+       [3]byte{0, 22, 71}:     "Cisco Systems, Inc",
+       [3]byte{0, 22, 72}:     "SSD Company Limited",
+       [3]byte{0, 22, 73}:     "SetOne GmbH",
+       [3]byte{0, 22, 74}:     "Vibration Technology Limited",
+       [3]byte{0, 22, 75}:     "Quorion Data Systems GmbH",
+       [3]byte{0, 22, 76}:     "PLANET INT Co., Ltd",
+       [3]byte{0, 22, 77}:     "Alcatel-Lucent IPD",
+       [3]byte{0, 22, 78}:     "Nokia Danmark A/S",
+       [3]byte{0, 22, 79}:     "World Ethnic Broadcastin Inc.",
+       [3]byte{0, 22, 80}:     "Kratos EPD",
+       [3]byte{0, 22, 81}:     "Exeo Systems",
+       [3]byte{0, 22, 82}:     "Hoatech Technologies, Inc.",
+       [3]byte{0, 22, 83}:     "LEGO System A/S IE Electronics Division",
+       [3]byte{0, 22, 84}:     "Flex-P Industries Sdn. Bhd.",
+       [3]byte{0, 22, 85}:     "FUHO TECHNOLOGY Co., LTD",
+       [3]byte{0, 22, 86}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 22, 87}:     "Aegate Ltd",
+       [3]byte{0, 22, 88}:     "Fusiontech Technologies Inc.",
+       [3]byte{0, 22, 89}:     "Z.M.P. RADWAG",
+       [3]byte{0, 22, 90}:     "Harman Specialty Group",
+       [3]byte{0, 22, 91}:     "Grip Audio",
+       [3]byte{0, 22, 92}:     "Trackflow Ltd",
+       [3]byte{0, 22, 93}:     "AirDefense, Inc.",
+       [3]byte{0, 22, 94}:     "Precision I/O",
+       [3]byte{0, 22, 95}:     "Fairmount Automation",
+       [3]byte{0, 22, 96}:     "Nortel Networks",
+       [3]byte{0, 22, 97}:     "Novatium Solutions (P) Ltd",
+       [3]byte{0, 22, 98}:     "Liyuh Technology Ltd.",
+       [3]byte{0, 22, 99}:     "KBT Mobile",
+       [3]byte{0, 22, 100}:    "Prod-El SpA",
+       [3]byte{0, 22, 101}:    "Cellon France",
+       [3]byte{0, 22, 102}:    "Quantier Communication Inc.",
+       [3]byte{0, 22, 103}:    "A-TEC Subsystem INC.",
+       [3]byte{0, 22, 104}:    "Eishin Electronics",
+       [3]byte{0, 22, 105}:    "MRV Communication (Networks) LTD",
+       [3]byte{0, 22, 106}:    "TPS",
+       [3]byte{0, 22, 107}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 22, 108}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 22, 109}:    "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+       [3]byte{0, 22, 110}:    "Arbitron Inc.",
+       [3]byte{0, 22, 111}:    "Intel Corporate",
+       [3]byte{0, 22, 112}:    "SKNET Corporation",
+       [3]byte{0, 22, 113}:    "Symphox Information Co.",
+       [3]byte{0, 22, 114}:    "Zenway enterprise ltd",
+       [3]byte{0, 22, 115}:    "Bury GmbH & Co. KG",
+       [3]byte{0, 22, 116}:    "EuroCB (Phils.), Inc.",
+       [3]byte{0, 22, 117}:    "ARRIS Group, Inc.",
+       [3]byte{0, 22, 118}:    "Intel Corporate",
+       [3]byte{0, 22, 119}:    "Bihl + Wiedemann GmbH",
+       [3]byte{0, 22, 120}:    "SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD",
+       [3]byte{0, 22, 121}:    "eOn Communications",
+       [3]byte{0, 22, 122}:    "Skyworth Overseas Development Ltd.",
+       [3]byte{0, 22, 123}:    "Haver&Boecker",
+       [3]byte{0, 22, 124}:    "iRex Technologies BV",
+       [3]byte{0, 22, 125}:    "Sky-Line Information Co., Ltd.",
+       [3]byte{0, 22, 126}:    "DIBOSS.CO.,LTD",
+       [3]byte{0, 22, 127}:    "Bluebird Soft Inc.",
+       [3]byte{0, 22, 128}:    "Bally Gaming + Systems",
+       [3]byte{0, 22, 129}:    "Vector Informatik GmbH",
+       [3]byte{0, 22, 130}:    "Pro Dex, Inc",
+       [3]byte{0, 22, 131}:    "WEBIO International Co.,.Ltd.",
+       [3]byte{0, 22, 132}:    "Donjin Co.,Ltd.",
+       [3]byte{0, 22, 133}:    "Elisa Oyj",
+       [3]byte{0, 22, 134}:    "Karl Storz Imaging",
+       [3]byte{0, 22, 135}:    "Chubb CSC-Vendor AP",
+       [3]byte{0, 22, 136}:    "ServerEngines LLC",
+       [3]byte{0, 22, 137}:    "Pilkor Electronics Co., Ltd",
+       [3]byte{0, 22, 138}:    "id-Confirm Inc",
+       [3]byte{0, 22, 139}:    "Paralan Corporation",
+       [3]byte{0, 22, 140}:    "DSL Partner AS",
+       [3]byte{0, 22, 141}:    "KORWIN CO., Ltd.",
+       [3]byte{0, 22, 142}:    "Vimicro corporation",
+       [3]byte{0, 22, 143}:    "GN Netcom A/S",
+       [3]byte{0, 22, 144}:    "J-TEK INCORPORATION",
+       [3]byte{0, 22, 145}:    "Moser-Baer AG",
+       [3]byte{0, 22, 146}:    "Scientific-Atlanta, Inc.",
+       [3]byte{0, 22, 147}:    "PowerLink Technology Inc.",
+       [3]byte{0, 22, 148}:    "Sennheiser Communications A/S",
+       [3]byte{0, 22, 149}:    "AVC Technology (International) Limited",
+       [3]byte{0, 22, 150}:    "QDI Technology (H.K.) Limited",
+       [3]byte{0, 22, 151}:    "NEC Corporation",
+       [3]byte{0, 22, 152}:    "T&A Mobile Phones",
+       [3]byte{0, 22, 153}:    "Tonic DVB Marketing Ltd",
+       [3]byte{0, 22, 154}:    "Quadrics Ltd",
+       [3]byte{0, 22, 155}:    "Alstom Transport",
+       [3]byte{0, 22, 156}:    "Cisco Systems, Inc",
+       [3]byte{0, 22, 157}:    "Cisco Systems, Inc",
+       [3]byte{0, 22, 158}:    "TV One Ltd",
+       [3]byte{0, 22, 159}:    "Vimtron Electronics Co., Ltd.",
+       [3]byte{0, 22, 160}:    "Auto-Maskin",
+       [3]byte{0, 22, 161}:    "3Leaf Networks",
+       [3]byte{0, 22, 162}:    "CentraLite Systems, Inc.",
+       [3]byte{0, 22, 163}:    "Ingeteam Transmission&Distribution, S.A.",
+       [3]byte{0, 22, 164}:    "Ezurio Ltd",
+       [3]byte{0, 22, 165}:    "Tandberg Storage ASA",
+       [3]byte{0, 22, 166}:    "Dovado FZ-LLC",
+       [3]byte{0, 22, 167}:    "AWETA G&P",
+       [3]byte{0, 22, 168}:    "CWT CO., LTD.",
+       [3]byte{0, 22, 169}:    "2EI",
+       [3]byte{0, 22, 170}:    "Kei Communication Technology Inc.",
+       [3]byte{0, 22, 171}:    "Dansensor A/S",
+       [3]byte{0, 22, 172}:    "Toho Technology Corp.",
+       [3]byte{0, 22, 173}:    "BT-Links Company Limited",
+       [3]byte{0, 22, 174}:    "INVENTEL",
+       [3]byte{0, 22, 175}:    "Shenzhen Union Networks Equipment Co.,Ltd.",
+       [3]byte{0, 22, 176}:    "VK Corporation",
+       [3]byte{0, 22, 177}:    "KBS",
+       [3]byte{0, 22, 178}:    "DriveCam Inc",
+       [3]byte{0, 22, 179}:    "Photonicbridges (China) Co., Ltd.",
+       [3]byte{0, 22, 180}:    "Private",
+       [3]byte{0, 22, 181}:    "ARRIS Group, Inc.",
+       [3]byte{0, 22, 182}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 22, 183}:    "Seoul Commtech",
+       [3]byte{0, 22, 184}:    "Sony Mobile Communications AB",
+       [3]byte{0, 22, 185}:    "ProCurve Networking by HP",
+       [3]byte{0, 22, 186}:    "WEATHERNEWS INC.",
+       [3]byte{0, 22, 187}:    "Law-Chain Computer Technology Co Ltd",
+       [3]byte{0, 22, 188}:    "Nokia Danmark A/S",
+       [3]byte{0, 22, 189}:    "ATI Industrial Automation",
+       [3]byte{0, 22, 190}:    "INFRANET, Inc.",
+       [3]byte{0, 22, 191}:    "PaloDEx Group Oy",
+       [3]byte{0, 22, 192}:    "Semtech Corporation",
+       [3]byte{0, 22, 193}:    "Eleksen Ltd",
+       [3]byte{0, 22, 194}:    "Avtec Systems Inc",
+       [3]byte{0, 22, 195}:    "BA Systems Inc",
+       [3]byte{0, 22, 196}:    "SiRF Technology, Inc.",
+       [3]byte{0, 22, 197}:    "Shenzhen Xing Feng Industry Co.,Ltd",
+       [3]byte{0, 22, 198}:    "North Atlantic Industries",
+       [3]byte{0, 22, 199}:    "Cisco Systems, Inc",
+       [3]byte{0, 22, 200}:    "Cisco Systems, Inc",
+       [3]byte{0, 22, 201}:    "NAT Seattle, Inc.",
+       [3]byte{0, 22, 202}:    "Nortel Networks",
+       [3]byte{0, 22, 203}:    "Apple, Inc.",
+       [3]byte{0, 22, 204}:    "Xcute Mobile Corp.",
+       [3]byte{0, 22, 205}:    "HIJI HIGH-TECH CO., LTD.",
+       [3]byte{0, 22, 206}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 22, 207}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 22, 208}:    "ATech elektronika d.o.o.",
+       [3]byte{0, 22, 209}:    "ZAT a.s.",
+       [3]byte{0, 22, 210}:    "Caspian",
+       [3]byte{0, 22, 211}:    "Wistron Corporation",
+       [3]byte{0, 22, 212}:    "Compal Communications, Inc.",
+       [3]byte{0, 22, 213}:    "Synccom Co., Ltd",
+       [3]byte{0, 22, 214}:    "TDA Tech Pty Ltd",
+       [3]byte{0, 22, 215}:    "Sunways AG",
+       [3]byte{0, 22, 216}:    "Senea AB",
+       [3]byte{0, 22, 217}:    "NINGBO BIRD CO.,LTD.",
+       [3]byte{0, 22, 218}:    "Futronic Technology Co. Ltd.",
+       [3]byte{0, 22, 219}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 22, 220}:    "ARCHOS",
+       [3]byte{0, 22, 221}:    "Gigabeam Corporation",
+       [3]byte{0, 22, 222}:    "FAST Inc",
+       [3]byte{0, 22, 223}:    "Lundinova AB",
+       [3]byte{0, 22, 224}:    "3Com Ltd",
+       [3]byte{0, 22, 225}:    "SiliconStor, Inc.",
+       [3]byte{0, 22, 226}:    "American Fibertek, Inc.",
+       [3]byte{0, 22, 227}:    "ASKEY COMPUTER CORP",
+       [3]byte{0, 22, 228}:    "VANGUARD SECURITY ENGINEERING CORP.",
+       [3]byte{0, 22, 229}:    "FORDLEY DEVELOPMENT LIMITED",
+       [3]byte{0, 22, 230}:    "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{0, 22, 231}:    "Dynamix Promotions Limited",
+       [3]byte{0, 22, 232}:    "Sigma Designs, Inc.",
+       [3]byte{0, 22, 233}:    "Tiba Medical Inc",
+       [3]byte{0, 22, 234}:    "Intel Corporate",
+       [3]byte{0, 22, 235}:    "Intel Corporate",
+       [3]byte{0, 22, 236}:    "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 22, 237}:    "Utility, Inc",
+       [3]byte{0, 22, 238}:    "Royaldigital Inc.",
+       [3]byte{0, 22, 239}:    "Koko Fitness, Inc.",
+       [3]byte{0, 22, 240}:    "Dell",
+       [3]byte{0, 22, 241}:    "OmniSense, LLC",
+       [3]byte{0, 22, 242}:    "Dmobile System Co., Ltd.",
+       [3]byte{0, 22, 243}:    "CAST Information Co., Ltd",
+       [3]byte{0, 22, 244}:    "Eidicom Co., Ltd.",
+       [3]byte{0, 22, 245}:    "Dalian Golden Hualu Digital Technology Co.,Ltd",
+       [3]byte{0, 22, 246}:    "Video Products Group",
+       [3]byte{0, 22, 247}:    "L-3 Communications, Aviation Recorders",
+       [3]byte{0, 22, 248}:    "AVIQTECH TECHNOLOGY CO., LTD.",
+       [3]byte{0, 22, 249}:    "CETRTA POT, d.o.o., Kranj",
+       [3]byte{0, 22, 250}:    "ECI Telecom Ltd.",
+       [3]byte{0, 22, 251}:    "SHENZHEN MTC CO LTD",
+       [3]byte{0, 22, 252}:    "TOHKEN CO.,LTD.",
+       [3]byte{0, 22, 253}:    "Jaty Electronics",
+       [3]byte{0, 22, 254}:    "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 22, 255}:    "Wamin Optocomm Mfg Corp",
+       [3]byte{0, 23, 0}:      "ARRIS Group, Inc.",
+       [3]byte{0, 23, 1}:      "KDE, Inc.",
+       [3]byte{0, 23, 2}:      "Osung Midicom Co., Ltd",
+       [3]byte{0, 23, 3}:      "MOSDAN Internation Co.,Ltd",
+       [3]byte{0, 23, 4}:      "Shinco Electronics Group Co.,Ltd",
+       [3]byte{0, 23, 5}:      "Methode Electronics",
+       [3]byte{0, 23, 6}:      "Techfaithwireless Communication Technology Limited.",
+       [3]byte{0, 23, 7}:      "InGrid, Inc",
+       [3]byte{0, 23, 8}:      "Hewlett Packard",
+       [3]byte{0, 23, 9}:      "Exalt Communications",
+       [3]byte{0, 23, 10}:     "INEW DIGITAL COMPANY",
+       [3]byte{0, 23, 11}:     "Contela, Inc.",
+       [3]byte{0, 23, 12}:     "Twig Com Ltd.",
+       [3]byte{0, 23, 13}:     "Dust Networks Inc.",
+       [3]byte{0, 23, 14}:     "Cisco Systems, Inc",
+       [3]byte{0, 23, 15}:     "Cisco Systems, Inc",
+       [3]byte{0, 23, 16}:     "Casa Systems Inc.",
+       [3]byte{0, 23, 17}:     "GE Healthcare Bio-Sciences AB",
+       [3]byte{0, 23, 18}:     "ISCO International",
+       [3]byte{0, 23, 19}:     "Tiger NetCom",
+       [3]byte{0, 23, 20}:     "BR Controls Nederland bv",
+       [3]byte{0, 23, 21}:     "Qstik",
+       [3]byte{0, 23, 22}:     "Qno Technology Inc.",
+       [3]byte{0, 23, 23}:     "Leica Geosystems AG",
+       [3]byte{0, 23, 24}:     "Vansco Electronics Oy",
+       [3]byte{0, 23, 25}:     "Audiocodes USA, Inc",
+       [3]byte{0, 23, 26}:     "Winegard Company",
+       [3]byte{0, 23, 27}:     "Innovation Lab Corp.",
+       [3]byte{0, 23, 28}:     "NT MicroSystems, Inc.",
+       [3]byte{0, 23, 29}:     "DIGIT",
+       [3]byte{0, 23, 30}:     "Theo Benning GmbH & Co. KG",
+       [3]byte{0, 23, 31}:     "IMV Corporation",
+       [3]byte{0, 23, 32}:     "Image Sensing Systems, Inc.",
+       [3]byte{0, 23, 33}:     "FITRE S.p.A.",
+       [3]byte{0, 23, 34}:     "Hanazeder Electronic GmbH",
+       [3]byte{0, 23, 35}:     "Summit Data Communications",
+       [3]byte{0, 23, 36}:     "Studer Professional Audio GmbH",
+       [3]byte{0, 23, 37}:     "Liquid Computing",
+       [3]byte{0, 23, 38}:     "m2c Electronic Technology Ltd.",
+       [3]byte{0, 23, 39}:     "Thermo Ramsey Italia s.r.l.",
+       [3]byte{0, 23, 40}:     "Selex Communications",
+       [3]byte{0, 23, 41}:     "Ubicod Co.LTD",
+       [3]byte{0, 23, 42}:     "Proware Technology Corp.(By Unifosa)",
+       [3]byte{0, 23, 43}:     "Global Technologies Inc.",
+       [3]byte{0, 23, 44}:     "TAEJIN INFOTECH",
+       [3]byte{0, 23, 45}:     "Axcen Photonics Corporation",
+       [3]byte{0, 23, 46}:     "FXC Inc.",
+       [3]byte{0, 23, 47}:     "NeuLion Incorporated",
+       [3]byte{0, 23, 48}:     "Automation Electronics",
+       [3]byte{0, 23, 49}:     "ASUSTek COMPUTER INC.",
+       [3]byte{0, 23, 50}:     "Science-Technical Center RISSA",
+       [3]byte{0, 23, 51}:     "SFR",
+       [3]byte{0, 23, 52}:     "ADC Telecommunications",
+       [3]byte{0, 23, 53}:     "Intel Wireless Network Group",
+       [3]byte{0, 23, 54}:     "iiTron Inc.",
+       [3]byte{0, 23, 55}:     "Industrie Dial Face S.p.A.",
+       [3]byte{0, 23, 56}:     "International Business Machines",
+       [3]byte{0, 23, 57}:     "Bright Headphone Electronics Company",
+       [3]byte{0, 23, 58}:     "Cloudastructure Inc",
+       [3]byte{0, 23, 59}:     "Cisco Systems, Inc",
+       [3]byte{0, 23, 60}:     "Extreme Engineering Solutions",
+       [3]byte{0, 23, 61}:     "Neology",
+       [3]byte{0, 23, 62}:     "LeucotronEquipamentos Ltda.",
+       [3]byte{0, 23, 63}:     "Belkin International Inc.",
+       [3]byte{0, 23, 64}:     "Bluberi Gaming Technologies Inc",
+       [3]byte{0, 23, 65}:     "DEFIDEV",
+       [3]byte{0, 23, 66}:     "FUJITSU LIMITED",
+       [3]byte{0, 23, 67}:     "Deck Srl",
+       [3]byte{0, 23, 68}:     "Araneo Ltd.",
+       [3]byte{0, 23, 69}:     "INNOTZ CO., Ltd",
+       [3]byte{0, 23, 70}:     "Freedom9 Inc.",
+       [3]byte{0, 23, 71}:     "Trimble",
+       [3]byte{0, 23, 72}:     "Neokoros Brasil Ltda",
+       [3]byte{0, 23, 73}:     "HYUNDAE YONG-O-SA CO.,LTD",
+       [3]byte{0, 23, 74}:     "SOCOMEC",
+       [3]byte{0, 23, 75}:     "Nokia Danmark A/S",
+       [3]byte{0, 23, 76}:     "Millipore",
+       [3]byte{0, 23, 77}:     "DYNAMIC NETWORK FACTORY, INC.",
+       [3]byte{0, 23, 78}:     "Parama-tech Co.,Ltd.",
+       [3]byte{0, 23, 79}:     "iCatch Inc.",
+       [3]byte{0, 23, 80}:     "GSI Group, MicroE Systems",
+       [3]byte{0, 23, 81}:     "Online Corporation",
+       [3]byte{0, 23, 82}:     "DAGS, Inc",
+       [3]byte{0, 23, 83}:     "nFore Technology Inc.",
+       [3]byte{0, 23, 84}:     "Arkino HiTOP Corporation Limited",
+       [3]byte{0, 23, 85}:     "GE Security",
+       [3]byte{0, 23, 86}:     "Vinci Labs Oy",
+       [3]byte{0, 23, 87}:     "RIX TECHNOLOGY LIMITED",
+       [3]byte{0, 23, 88}:     "ThruVision Ltd",
+       [3]byte{0, 23, 89}:     "Cisco Systems, Inc",
+       [3]byte{0, 23, 90}:     "Cisco Systems, Inc",
+       [3]byte{0, 23, 91}:     "ACS Solutions Switzerland Ltd.",
+       [3]byte{0, 23, 92}:     "SHARP CORPORATION",
+       [3]byte{0, 23, 93}:     "Dongseo system.",
+       [3]byte{0, 23, 94}:     "Zed-3",
+       [3]byte{0, 23, 95}:     "XENOLINK Communications Co., Ltd.",
+       [3]byte{0, 23, 96}:     "Naito Densei Machida MFG.CO.,LTD",
+       [3]byte{0, 23, 97}:     "Private",
+       [3]byte{0, 23, 98}:     "Solar Technology, Inc.",
+       [3]byte{0, 23, 99}:     "Essentia S.p.A.",
+       [3]byte{0, 23, 100}:    "ATMedia GmbH",
+       [3]byte{0, 23, 101}:    "Nortel Networks",
+       [3]byte{0, 23, 102}:    "Accense Technology, Inc.",
+       [3]byte{0, 23, 103}:    "Earforce AS",
+       [3]byte{0, 23, 104}:    "Zinwave Ltd",
+       [3]byte{0, 23, 105}:    "Cymphonix Corp",
+       [3]byte{0, 23, 106}:    "Avago Technologies",
+       [3]byte{0, 23, 107}:    "Kiyon, Inc.",
+       [3]byte{0, 23, 108}:    "Pivot3, Inc.",
+       [3]byte{0, 23, 109}:    "CORE CORPORATION",
+       [3]byte{0, 23, 110}:    "DUCATI SISTEMI",
+       [3]byte{0, 23, 111}:    "PAX Computer Technology(Shenzhen) Ltd.",
+       [3]byte{0, 23, 112}:    "Arti Industrial Electronics Ltd.",
+       [3]byte{0, 23, 113}:    "APD Communications Ltd",
+       [3]byte{0, 23, 114}:    "ASTRO Strobel Kommunikationssysteme GmbH",
+       [3]byte{0, 23, 115}:    "Laketune Technologies Co. Ltd",
+       [3]byte{0, 23, 116}:    "Elesta GmbH",
+       [3]byte{0, 23, 117}:    "TTE Germany GmbH",
+       [3]byte{0, 23, 118}:    "Meso Scale Diagnostics, LLC",
+       [3]byte{0, 23, 119}:    "Obsidian Research Corporation",
+       [3]byte{0, 23, 120}:    "Central Music Co.",
+       [3]byte{0, 23, 121}:    "QuickTel",
+       [3]byte{0, 23, 122}:    "ASSA ABLOY AB",
+       [3]byte{0, 23, 123}:    "Azalea Networks inc",
+       [3]byte{0, 23, 124}:    "Smartlink Network Systems Limited",
+       [3]byte{0, 23, 125}:    "IDT Technology Limited",
+       [3]byte{0, 23, 126}:    "Meshcom Technologies Inc.",
+       [3]byte{0, 23, 127}:    "Worldsmart Retech",
+       [3]byte{0, 23, 128}:    "Applied Biosystems B.V.",
+       [3]byte{0, 23, 129}:    "Greystone Data System, Inc.",
+       [3]byte{0, 23, 130}:    "LoBenn Inc.",
+       [3]byte{0, 23, 131}:    "Texas Instruments",
+       [3]byte{0, 23, 132}:    "ARRIS Group, Inc.",
+       [3]byte{0, 23, 133}:    "Sparr Electronics Ltd",
+       [3]byte{0, 23, 134}:    "wisembed",
+       [3]byte{0, 23, 135}:    "Brother, Brother & Sons ApS",
+       [3]byte{0, 23, 136}:    "Philips Lighting BV",
+       [3]byte{0, 23, 137}:    "Zenitron Corporation",
+       [3]byte{0, 23, 138}:    "DARTS TECHNOLOGIES CORP.",
+       [3]byte{0, 23, 139}:    "Teledyne Technologies Incorporated",
+       [3]byte{0, 23, 140}:    "Independent Witness, Inc",
+       [3]byte{0, 23, 141}:    "Checkpoint Systems, Inc.",
+       [3]byte{0, 23, 142}:    "Gunnebo Cash Automation AB",
+       [3]byte{0, 23, 143}:    "NINGBO YIDONG ELECTRONIC CO.,LTD.",
+       [3]byte{0, 23, 144}:    "HYUNDAI DIGITECH Co, Ltd.",
+       [3]byte{0, 23, 145}:    "LinTech GmbH",
+       [3]byte{0, 23, 146}:    "Falcom Wireless Comunications Gmbh",
+       [3]byte{0, 23, 147}:    "Tigi Corporation",
+       [3]byte{0, 23, 148}:    "Cisco Systems, Inc",
+       [3]byte{0, 23, 149}:    "Cisco Systems, Inc",
+       [3]byte{0, 23, 150}:    "Rittmeyer AG",
+       [3]byte{0, 23, 151}:    "Telsy Elettronica S.p.A.",
+       [3]byte{0, 23, 152}:    "Azonic Technology Co., LTD",
+       [3]byte{0, 23, 153}:    "SmarTire Systems Inc.",
+       [3]byte{0, 23, 154}:    "D-Link Corporation",
+       [3]byte{0, 23, 155}:    "CHANT SINCERE CO.,LTD",
+       [3]byte{0, 23, 156}:    "DEPRAG SCHULZ GMBH u. CO.",
+       [3]byte{0, 23, 157}:    "Kelman Limited",
+       [3]byte{0, 23, 158}:    "Sirit Inc",
+       [3]byte{0, 23, 159}:    "Apricorn",
+       [3]byte{0, 23, 160}:    "RoboTech srl",
+       [3]byte{0, 23, 161}:    "3soft inc.",
+       [3]byte{0, 23, 162}:    "Camrivox Ltd.",
+       [3]byte{0, 23, 163}:    "MIX s.r.l.",
+       [3]byte{0, 23, 164}:    "Hewlett Packard",
+       [3]byte{0, 23, 165}:    "Ralink Technology Corp",
+       [3]byte{0, 23, 166}:    "YOSIN ELECTRONICS CO., LTD.",
+       [3]byte{0, 23, 167}:    "Mobile Computing Promotion Consortium",
+       [3]byte{0, 23, 168}:    "EDM Corporation",
+       [3]byte{0, 23, 169}:    "Sentivision",
+       [3]byte{0, 23, 170}:    "elab-experience inc.",
+       [3]byte{0, 23, 171}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 23, 172}:    "O'Neil Product Development Inc.",
+       [3]byte{0, 23, 173}:    "AceNet Corporation",
+       [3]byte{0, 23, 174}:    "GAI-Tronics",
+       [3]byte{0, 23, 175}:    "Enermet",
+       [3]byte{0, 23, 176}:    "Nokia Danmark A/S",
+       [3]byte{0, 23, 177}:    "ACIST Medical Systems, Inc.",
+       [3]byte{0, 23, 178}:    "SK Telesys",
+       [3]byte{0, 23, 179}:    "Aftek Infosys Limited",
+       [3]byte{0, 23, 180}:    "Remote Security Systems, LLC",
+       [3]byte{0, 23, 181}:    "Peerless Systems Corporation",
+       [3]byte{0, 23, 182}:    "Aquantia",
+       [3]byte{0, 23, 183}:    "Tonze Technology Co.",
+       [3]byte{0, 23, 184}:    "NOVATRON CO., LTD.",
+       [3]byte{0, 23, 185}:    "Gambro Lundia AB",
+       [3]byte{0, 23, 186}:    "SEDO CO., LTD.",
+       [3]byte{0, 23, 187}:    "Syrinx Industrial Electronics",
+       [3]byte{0, 23, 188}:    "Touchtunes Music Corporation",
+       [3]byte{0, 23, 189}:    "Tibetsystem",
+       [3]byte{0, 23, 190}:    "Tratec Telecom B.V.",
+       [3]byte{0, 23, 191}:    "Coherent Research Limited",
+       [3]byte{0, 23, 192}:    "PureTech Systems, Inc.",
+       [3]byte{0, 23, 193}:    "CM Precision Technology LTD.",
+       [3]byte{0, 23, 194}:    "ADB Broadband Italia",
+       [3]byte{0, 23, 195}:    "KTF Technologies Inc.",
+       [3]byte{0, 23, 196}:    "Quanta Microsystems, INC.",
+       [3]byte{0, 23, 197}:    "SonicWALL",
+       [3]byte{0, 23, 198}:    "Cross Match Technologies Inc",
+       [3]byte{0, 23, 199}:    "MARA Systems Consulting AB",
+       [3]byte{0, 23, 200}:    "KYOCERA Display Corporation",
+       [3]byte{0, 23, 201}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 23, 202}:    "Qisda Corporation",
+       [3]byte{0, 23, 203}:    "Juniper Networks",
+       [3]byte{0, 23, 204}:    "Alcatel-Lucent",
+       [3]byte{0, 23, 205}:    "CEC Wireless R&D Ltd.",
+       [3]byte{0, 23, 206}:    "Screen Service Spa",
+       [3]byte{0, 23, 207}:    "iMCA-GmbH",
+       [3]byte{0, 23, 208}:    "Opticom Communications, LLC",
+       [3]byte{0, 23, 209}:    "Nortel Networks",
+       [3]byte{0, 23, 210}:    "THINLINX PTY LTD",
+       [3]byte{0, 23, 211}:    "Etymotic Research, Inc.",
+       [3]byte{0, 23, 212}:    "Monsoon Multimedia, Inc",
+       [3]byte{0, 23, 213}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 23, 214}:    "Bluechips Microhouse Co.,Ltd.",
+       [3]byte{0, 23, 215}:    "ION Geophysical Corporation Inc.",
+       [3]byte{0, 23, 216}:    "Magnum Semiconductor, Inc.",
+       [3]byte{0, 23, 217}:    "AAI Corporation",
+       [3]byte{0, 23, 218}:    "Spans Logic",
+       [3]byte{0, 23, 219}:    "CANKO TECHNOLOGIES INC.",
+       [3]byte{0, 23, 220}:    "DAEMYUNG ZERO1",
+       [3]byte{0, 23, 221}:    "Clipsal Australia",
+       [3]byte{0, 23, 222}:    "Advantage Six Ltd",
+       [3]byte{0, 23, 223}:    "Cisco Systems, Inc",
+       [3]byte{0, 23, 224}:    "Cisco Systems, Inc",
+       [3]byte{0, 23, 225}:    "DACOS Technologies Co., Ltd.",
+       [3]byte{0, 23, 226}:    "ARRIS Group, Inc.",
+       [3]byte{0, 23, 227}:    "Texas Instruments",
+       [3]byte{0, 23, 228}:    "Texas Instruments",
+       [3]byte{0, 23, 229}:    "Texas Instruments",
+       [3]byte{0, 23, 230}:    "Texas Instruments",
+       [3]byte{0, 23, 231}:    "Texas Instruments",
+       [3]byte{0, 23, 232}:    "Texas Instruments",
+       [3]byte{0, 23, 233}:    "Texas Instruments",
+       [3]byte{0, 23, 234}:    "Texas Instruments",
+       [3]byte{0, 23, 235}:    "Texas Instruments",
+       [3]byte{0, 23, 236}:    "Texas Instruments",
+       [3]byte{0, 23, 237}:    "WooJooIT Ltd.",
+       [3]byte{0, 23, 238}:    "ARRIS Group, Inc.",
+       [3]byte{0, 23, 239}:    "IBM Corp",
+       [3]byte{0, 23, 240}:    "SZCOM Broadband Network Technology Co.,Ltd",
+       [3]byte{0, 23, 241}:    "Renu Electronics Pvt Ltd",
+       [3]byte{0, 23, 242}:    "Apple, Inc.",
+       [3]byte{0, 23, 243}:    "Harris Corparation",
+       [3]byte{0, 23, 244}:    "ZERON ALLIANCE",
+       [3]byte{0, 23, 245}:    "LIG NEOPTEK",
+       [3]byte{0, 23, 246}:    "Pyramid Meriden Inc.",
+       [3]byte{0, 23, 247}:    "CEM Solutions Pvt Ltd",
+       [3]byte{0, 23, 248}:    "Motech Industries Inc.",
+       [3]byte{0, 23, 249}:    "Forcom Sp. z o.o.",
+       [3]byte{0, 23, 250}:    "Microsoft Corporation",
+       [3]byte{0, 23, 251}:    "FA",
+       [3]byte{0, 23, 252}:    "Suprema Inc.",
+       [3]byte{0, 23, 253}:    "Amulet Hotkey",
+       [3]byte{0, 23, 254}:    "TALOS SYSTEM INC.",
+       [3]byte{0, 23, 255}:    "PLAYLINE Co.,Ltd.",
+       [3]byte{0, 24, 0}:      "UNIGRAND LTD",
+       [3]byte{0, 24, 1}:      "Actiontec Electronics, Inc",
+       [3]byte{0, 24, 2}:      "Alpha Networks Inc.",
+       [3]byte{0, 24, 3}:      "ArcSoft Shanghai Co. LTD",
+       [3]byte{0, 24, 4}:      "E-TEK DIGITAL TECHNOLOGY LIMITED",
+       [3]byte{0, 24, 5}:      "Beijing InHand Networking Technology Co.,Ltd.",
+       [3]byte{0, 24, 6}:      "Hokkei Industries Co., Ltd.",
+       [3]byte{0, 24, 7}:      "Fanstel Corp.",
+       [3]byte{0, 24, 8}:      "SightLogix, Inc.",
+       [3]byte{0, 24, 9}:      "CRESYN",
+       [3]byte{0, 24, 10}:     "Cisco Meraki",
+       [3]byte{0, 24, 11}:     "Brilliant Telecommunications",
+       [3]byte{0, 24, 12}:     "Optelian Access Networks",
+       [3]byte{0, 24, 13}:     "Terabytes Server Storage Tech Corp",
+       [3]byte{0, 24, 14}:     "Avega Systems",
+       [3]byte{0, 24, 15}:     "Nokia Danmark A/S",
+       [3]byte{0, 24, 16}:     "IPTrade S.A.",
+       [3]byte{0, 24, 17}:     "Neuros Technology International, LLC.",
+       [3]byte{0, 24, 18}:     "Beijing Xinwei Telecom Technology Co., Ltd.",
+       [3]byte{0, 24, 19}:     "Sony Mobile Communications AB",
+       [3]byte{0, 24, 20}:     "Mitutoyo Corporation",
+       [3]byte{0, 24, 21}:     "GZ Technologies, Inc.",
+       [3]byte{0, 24, 22}:     "Ubixon Co., Ltd.",
+       [3]byte{0, 24, 23}:     "D. E. Shaw Research, LLC",
+       [3]byte{0, 24, 24}:     "Cisco Systems, Inc",
+       [3]byte{0, 24, 25}:     "Cisco Systems, Inc",
+       [3]byte{0, 24, 26}:     "AVerMedia Information Inc.",
+       [3]byte{0, 24, 27}:     "TaiJin Metal Co., Ltd.",
+       [3]byte{0, 24, 28}:     "Exterity Limited",
+       [3]byte{0, 24, 29}:     "ASIA ELECTRONICS CO.,LTD",
+       [3]byte{0, 24, 30}:     "GDX Technologies Ltd.",
+       [3]byte{0, 24, 31}:     "Palmmicro Communications",
+       [3]byte{0, 24, 32}:     "w5networks",
+       [3]byte{0, 24, 33}:     "SINDORICOH",
+       [3]byte{0, 24, 34}:     "CEC TELECOM CO.,LTD.",
+       [3]byte{0, 24, 35}:     "Delta Electronics, Inc.",
+       [3]byte{0, 24, 36}:     "Kimaldi Electronics, S.L.",
+       [3]byte{0, 24, 37}:     "Private",
+       [3]byte{0, 24, 38}:     "Cale Access AB",
+       [3]byte{0, 24, 39}:     "NEC UNIFIED SOLUTIONS NEDERLAND B.V.",
+       [3]byte{0, 24, 40}:     "e2v technologies (UK) ltd.",
+       [3]byte{0, 24, 41}:     "Gatsometer",
+       [3]byte{0, 24, 42}:     "Taiwan Video & Monitor",
+       [3]byte{0, 24, 43}:     "Softier",
+       [3]byte{0, 24, 44}:     "Ascend Networks, Inc.",
+       [3]byte{0, 24, 45}:     "Artec Design",
+       [3]byte{0, 24, 46}:     "XStreamHD",
+       [3]byte{0, 24, 47}:     "Texas Instruments",
+       [3]byte{0, 24, 48}:     "Texas Instruments",
+       [3]byte{0, 24, 49}:     "Texas Instruments",
+       [3]byte{0, 24, 50}:     "Texas Instruments",
+       [3]byte{0, 24, 51}:     "Texas Instruments",
+       [3]byte{0, 24, 52}:     "Texas Instruments",
+       [3]byte{0, 24, 53}:     "Thoratec / ITC",
+       [3]byte{0, 24, 54}:     "Reliance Electric Limited",
+       [3]byte{0, 24, 55}:     "Universal ABIT Co., Ltd.",
+       [3]byte{0, 24, 56}:     "PanAccess Communications,Inc.",
+       [3]byte{0, 24, 57}:     "Cisco-Linksys, LLC",
+       [3]byte{0, 24, 58}:     "Westell Technologies Inc.",
+       [3]byte{0, 24, 59}:     "CENITS Co., Ltd.",
+       [3]byte{0, 24, 60}:     "Encore Software Limited",
+       [3]byte{0, 24, 61}:     "Vertex Link Corporation",
+       [3]byte{0, 24, 62}:     "Digilent, Inc",
+       [3]byte{0, 24, 63}:     "2Wire Inc",
+       [3]byte{0, 24, 64}:     "3 Phoenix, Inc.",
+       [3]byte{0, 24, 65}:     "High Tech Computer Corp",
+       [3]byte{0, 24, 66}:     "Nokia Danmark A/S",
+       [3]byte{0, 24, 67}:     "Dawevision Ltd",
+       [3]byte{0, 24, 68}:     "Heads Up Technologies, Inc.",
+       [3]byte{0, 24, 69}:     "Pulsar-Telecom LLC.",
+       [3]byte{0, 24, 70}:     "Crypto S.A.",
+       [3]byte{0, 24, 71}:     "AceNet Technology Inc.",
+       [3]byte{0, 24, 72}:     "Vecima Networks Inc.",
+       [3]byte{0, 24, 73}:     "Pigeon Point Systems LLC",
+       [3]byte{0, 24, 74}:     "Catcher, Inc.",
+       [3]byte{0, 24, 75}:     "Las Vegas Gaming, Inc.",
+       [3]byte{0, 24, 76}:     "Bogen Communications",
+       [3]byte{0, 24, 77}:     "NETGEAR",
+       [3]byte{0, 24, 78}:     "Lianhe Technologies, Inc.",
+       [3]byte{0, 24, 79}:     "8 Ways Technology Corp.",
+       [3]byte{0, 24, 80}:     "Secfone Kft",
+       [3]byte{0, 24, 81}:     "SWsoft",
+       [3]byte{0, 24, 82}:     "StorLink Semiconductors, Inc.",
+       [3]byte{0, 24, 83}:     "Atera Networks LTD.",
+       [3]byte{0, 24, 84}:     "Argard Co., Ltd",
+       [3]byte{0, 24, 85}:     "Aeromaritime Systembau GmbH",
+       [3]byte{0, 24, 86}:     "EyeFi, Inc",
+       [3]byte{0, 24, 87}:     "Unilever R&D",
+       [3]byte{0, 24, 88}:     "TagMaster AB",
+       [3]byte{0, 24, 89}:     "Strawberry Linux Co.,Ltd.",
+       [3]byte{0, 24, 90}:     "uControl, Inc.",
+       [3]byte{0, 24, 91}:     "Network Chemistry, Inc",
+       [3]byte{0, 24, 92}:     "EDSLAB Technologies",
+       [3]byte{0, 24, 93}:     "TAIGUEN TECHNOLOGY (SHEN-ZHEN) CO., LTD.",
+       [3]byte{0, 24, 94}:     "Nexterm Inc.",
+       [3]byte{0, 24, 95}:     "TAC Inc.",
+       [3]byte{0, 24, 96}:     "SIM Technology Group Shanghai Simcom Ltd.,",
+       [3]byte{0, 24, 97}:     "Ooma, Inc.",
+       [3]byte{0, 24, 98}:     "Seagate Technology",
+       [3]byte{0, 24, 99}:     "Veritech Electronics Limited",
+       [3]byte{0, 24, 100}:    "Eaton Corporation",
+       [3]byte{0, 24, 101}:    "Siemens Healthcare Diagnostics Manufacturing Ltd",
+       [3]byte{0, 24, 102}:    "Leutron Vision",
+       [3]byte{0, 24, 103}:    "Datalogic ADC",
+       [3]byte{0, 24, 104}:    "Cisco SPVTG",
+       [3]byte{0, 24, 105}:    "KINGJIM",
+       [3]byte{0, 24, 106}:    "Global Link Digital Technology Co,.LTD",
+       [3]byte{0, 24, 107}:    "Sambu Communics CO., LTD.",
+       [3]byte{0, 24, 108}:    "Neonode AB",
+       [3]byte{0, 24, 109}:    "Zhenjiang Sapphire Electronic Industry CO.",
+       [3]byte{0, 24, 110}:    "3Com Ltd",
+       [3]byte{0, 24, 111}:    "Setha Industria Eletronica LTDA",
+       [3]byte{0, 24, 112}:    "E28 Shanghai Limited",
+       [3]byte{0, 24, 113}:    "Hewlett Packard",
+       [3]byte{0, 24, 114}:    "Expertise Engineering",
+       [3]byte{0, 24, 115}:    "Cisco Systems, Inc",
+       [3]byte{0, 24, 116}:    "Cisco Systems, Inc",
+       [3]byte{0, 24, 117}:    "AnaCise Testnology Pte Ltd",
+       [3]byte{0, 24, 118}:    "WowWee Ltd.",
+       [3]byte{0, 24, 119}:    "Amplex A/S",
+       [3]byte{0, 24, 120}:    "Mackware GmbH",
+       [3]byte{0, 24, 121}:    "dSys",
+       [3]byte{0, 24, 122}:    "Wiremold",
+       [3]byte{0, 24, 123}:    "4NSYS Co. Ltd.",
+       [3]byte{0, 24, 124}:    "INTERCROSS, LLC",
+       [3]byte{0, 24, 125}:    "Armorlink Co .Ltd",
+       [3]byte{0, 24, 126}:    "RGB Spectrum",
+       [3]byte{0, 24, 127}:    "ZODIANET",
+       [3]byte{0, 24, 128}:    "Maxim Integrated Products",
+       [3]byte{0, 24, 129}:    "Buyang Electronics Industrial Co., Ltd",
+       [3]byte{0, 24, 130}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 24, 131}:    "FORMOSA21 INC.",
+       [3]byte{0, 24, 132}:    "Fon Technology S.L.",
+       [3]byte{0, 24, 133}:    "Avigilon Corporation",
+       [3]byte{0, 24, 134}:    "EL-TECH, INC.",
+       [3]byte{0, 24, 135}:    "Metasystem SpA",
+       [3]byte{0, 24, 136}:    "GOTIVE a.s.",
+       [3]byte{0, 24, 137}:    "WinNet Solutions Limited",
+       [3]byte{0, 24, 138}:    "Infinova LLC",
+       [3]byte{0, 24, 139}:    "Dell Inc.",
+       [3]byte{0, 24, 140}:    "Mobile Action Technology Inc.",
+       [3]byte{0, 24, 141}:    "Nokia Danmark A/S",
+       [3]byte{0, 24, 142}:    "Ekahau, Inc.",
+       [3]byte{0, 24, 143}:    "Montgomery Technology, Inc.",
+       [3]byte{0, 24, 144}:    "RadioCOM, s.r.o.",
+       [3]byte{0, 24, 145}:    "Zhongshan General K-mate Electronics Co., Ltd",
+       [3]byte{0, 24, 146}:    "ads-tec GmbH",
+       [3]byte{0, 24, 147}:    "SHENZHEN PHOTON BROADBAND TECHNOLOGY CO.,LTD",
+       [3]byte{0, 24, 148}:    "NPCore, Inc.",
+       [3]byte{0, 24, 149}:    "Hansun Technologies Inc.",
+       [3]byte{0, 24, 150}:    "Great Well Electronic LTD",
+       [3]byte{0, 24, 151}:    "JESS-LINK PRODUCTS Co., LTD",
+       [3]byte{0, 24, 152}:    "KINGSTATE ELECTRONICS CORPORATION",
+       [3]byte{0, 24, 153}:    "ShenZhen jieshun Science&Technology Industry CO,LTD.",
+       [3]byte{0, 24, 154}:    "HANA Micron Inc.",
+       [3]byte{0, 24, 155}:    "Thomson Inc.",
+       [3]byte{0, 24, 156}:    "Weldex Corporation",
+       [3]byte{0, 24, 157}:    "Navcast Inc.",
+       [3]byte{0, 24, 158}:    "OMNIKEY GmbH.",
+       [3]byte{0, 24, 159}:    "Lenntek Corporation",
+       [3]byte{0, 24, 160}:    "Cierma Ascenseurs",
+       [3]byte{0, 24, 161}:    "Tiqit Computers, Inc.",
+       [3]byte{0, 24, 162}:    "XIP Technology AB",
+       [3]byte{0, 24, 163}:    "ZIPPY TECHNOLOGY CORP.",
+       [3]byte{0, 24, 164}:    "ARRIS Group, Inc.",
+       [3]byte{0, 24, 165}:    "ADigit Technologies Corp.",
+       [3]byte{0, 24, 166}:    "Persistent Systems, LLC",
+       [3]byte{0, 24, 167}:    "Yoggie Security Systems LTD.",
+       [3]byte{0, 24, 168}:    "AnNeal Technology Inc.",
+       [3]byte{0, 24, 169}:    "Ethernet Direct Corporation",
+       [3]byte{0, 24, 170}:    "Protec Fire Detection plc",
+       [3]byte{0, 24, 171}:    "BEIJING LHWT MICROELECTRONICS INC.",
+       [3]byte{0, 24, 172}:    "Shanghai Jiao Da HISYS Technology Co. Ltd.",
+       [3]byte{0, 24, 173}:    "NIDEC SANKYO CORPORATION",
+       [3]byte{0, 24, 174}:    "TVT CO.,LTD",
+       [3]byte{0, 24, 175}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 24, 176}:    "Nortel Networks",
+       [3]byte{0, 24, 177}:    "IBM Corp",
+       [3]byte{0, 24, 178}:    "ADEUNIS RF",
+       [3]byte{0, 24, 179}:    "TEC WizHome Co., Ltd.",
+       [3]byte{0, 24, 180}:    "Dawon Media Inc.",
+       [3]byte{0, 24, 181}:    "Magna Carta",
+       [3]byte{0, 24, 182}:    "S3C, Inc.",
+       [3]byte{0, 24, 183}:    "D3 LED, LLC",
+       [3]byte{0, 24, 184}:    "New Voice International AG",
+       [3]byte{0, 24, 185}:    "Cisco Systems, Inc",
+       [3]byte{0, 24, 186}:    "Cisco Systems, Inc",
+       [3]byte{0, 24, 187}:    "Eliwell Controls srl",
+       [3]byte{0, 24, 188}:    "ZAO NVP Bolid",
+       [3]byte{0, 24, 189}:    "SHENZHEN DVBWORLD TECHNOLOGY CO., LTD.",
+       [3]byte{0, 24, 190}:    "ANSA Corporation",
+       [3]byte{0, 24, 191}:    "Essence Technology Solution, Inc.",
+       [3]byte{0, 24, 192}:    "ARRIS Group, Inc.",
+       [3]byte{0, 24, 193}:    "Almitec Informática e Comércio",
+       [3]byte{0, 24, 194}:    "Firetide, Inc",
+       [3]byte{0, 24, 195}:    "CS Corporation",
+       [3]byte{0, 24, 196}:    "Raba Technologies LLC",
+       [3]byte{0, 24, 197}:    "Nokia Danmark A/S",
+       [3]byte{0, 24, 198}:    "OPW Fuel Management Systems",
+       [3]byte{0, 24, 199}:    "Real Time Automation",
+       [3]byte{0, 24, 200}:    "ISONAS Inc.",
+       [3]byte{0, 24, 201}:    "EOps Technology Limited",
+       [3]byte{0, 24, 202}:    "Viprinet GmbH",
+       [3]byte{0, 24, 203}:    "Tecobest Technology Limited",
+       [3]byte{0, 24, 204}:    "AXIOHM SAS",
+       [3]byte{0, 24, 205}:    "Erae Electronics Industry Co., Ltd",
+       [3]byte{0, 24, 206}:    "Dreamtech Co., Ltd",
+       [3]byte{0, 24, 207}:    "Baldor Electric Company",
+       [3]byte{0, 24, 208}:    "AtRoad,  A Trimble Company",
+       [3]byte{0, 24, 209}:    "Siemens Home & Office Comm. Devices",
+       [3]byte{0, 24, 210}:    "High-Gain Antennas LLC",
+       [3]byte{0, 24, 211}:    "TEAMCAST",
+       [3]byte{0, 24, 212}:    "Unified Display Interface SIG",
+       [3]byte{0, 24, 213}:    "REIGNCOM",
+       [3]byte{0, 24, 214}:    "Swirlnet A/S",
+       [3]byte{0, 24, 215}:    "JAVAD GNSS, Inc.",
+       [3]byte{0, 24, 216}:    "ARCH METER Corporation",
+       [3]byte{0, 24, 217}:    "Santosha Internatonal, Inc",
+       [3]byte{0, 24, 218}:    "AMBER wireless GmbH",
+       [3]byte{0, 24, 219}:    "EPL Technology Ltd",
+       [3]byte{0, 24, 220}:    "Prostar Co., Ltd.",
+       [3]byte{0, 24, 221}:    "Silicondust Engineering Ltd",
+       [3]byte{0, 24, 222}:    "Intel Corporate",
+       [3]byte{0, 24, 223}:    "The Morey Corporation",
+       [3]byte{0, 24, 224}:    "ANAVEO",
+       [3]byte{0, 24, 225}:    "Verkerk Service Systemen",
+       [3]byte{0, 24, 226}:    "Topdata Sistemas de Automacao Ltda",
+       [3]byte{0, 24, 227}:    "Visualgate Systems, Inc.",
+       [3]byte{0, 24, 228}:    "YIGUANG",
+       [3]byte{0, 24, 229}:    "Adhoco AG",
+       [3]byte{0, 24, 230}:    "Computer Hardware Design SIA",
+       [3]byte{0, 24, 231}:    "Cameo Communications, INC.",
+       [3]byte{0, 24, 232}:    "Hacetron Corporation",
+       [3]byte{0, 24, 233}:    "Numata Corporation",
+       [3]byte{0, 24, 234}:    "Alltec GmbH",
+       [3]byte{0, 24, 235}:    "Blue Zen Enterprises Private Limited",
+       [3]byte{0, 24, 236}:    "Welding Technology Corporation",
+       [3]byte{0, 24, 237}:    "Accutech Ultrasystems Co., Ltd.",
+       [3]byte{0, 24, 238}:    "Videology Imaging Solutions, Inc.",
+       [3]byte{0, 24, 239}:    "Escape Communications, Inc.",
+       [3]byte{0, 24, 240}:    "JOYTOTO Co., Ltd.",
+       [3]byte{0, 24, 241}:    "Chunichi Denshi Co.,LTD.",
+       [3]byte{0, 24, 242}:    "Beijing Tianyu Communication Equipment Co., Ltd",
+       [3]byte{0, 24, 243}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 24, 244}:    "EO TECHNICS Co., Ltd.",
+       [3]byte{0, 24, 245}:    "Shenzhen Streaming Video Technology Company Limited",
+       [3]byte{0, 24, 246}:    "Thomson Telecom Belgium",
+       [3]byte{0, 24, 247}:    "Kameleon Technologies",
+       [3]byte{0, 24, 248}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 24, 249}:    "VVOND, Inc.",
+       [3]byte{0, 24, 250}:    "Yushin Precision Equipment Co.,Ltd.",
+       [3]byte{0, 24, 251}:    "Compro Technology",
+       [3]byte{0, 24, 252}:    "Altec Electronic AG",
+       [3]byte{0, 24, 253}:    "Optimal Technologies International Inc.",
+       [3]byte{0, 24, 254}:    "Hewlett Packard",
+       [3]byte{0, 24, 255}:    "PowerQuattro Co.",
+       [3]byte{0, 25, 0}:      "Intelliverese - DBA Voicecom",
+       [3]byte{0, 25, 1}:      "F1MEDIA",
+       [3]byte{0, 25, 2}:      "Cambridge Consultants Ltd",
+       [3]byte{0, 25, 3}:      "Bigfoot Networks Inc",
+       [3]byte{0, 25, 4}:      "WB Electronics Sp. z o.o.",
+       [3]byte{0, 25, 5}:      "SCHRACK Seconet AG",
+       [3]byte{0, 25, 6}:      "Cisco Systems, Inc",
+       [3]byte{0, 25, 7}:      "Cisco Systems, Inc",
+       [3]byte{0, 25, 8}:      "Duaxes Corporation",
+       [3]byte{0, 25, 9}:      "DEVI - Danfoss A/S",
+       [3]byte{0, 25, 10}:     "HASWARE INC.",
+       [3]byte{0, 25, 11}:     "Southern Vision Systems, Inc.",
+       [3]byte{0, 25, 12}:     "Encore Electronics, Inc.",
+       [3]byte{0, 25, 13}:     "IEEE 1394c",
+       [3]byte{0, 25, 14}:     "Atech Technology Co., Ltd.",
+       [3]byte{0, 25, 15}:     "Advansus Corp.",
+       [3]byte{0, 25, 16}:     "Knick Elektronische Messgeraete GmbH & Co. KG",
+       [3]byte{0, 25, 17}:     "Just In Mobile Information Technologies (Shanghai) Co., Ltd.",
+       [3]byte{0, 25, 18}:     "Welcat Inc",
+       [3]byte{0, 25, 19}:     "Chuang-Yi Network Equipment Co.Ltd.",
+       [3]byte{0, 25, 20}:     "Winix Co., Ltd",
+       [3]byte{0, 25, 21}:     "TECOM Co., Ltd.",
+       [3]byte{0, 25, 22}:     "PayTec AG",
+       [3]byte{0, 25, 23}:     "Posiflex Inc.",
+       [3]byte{0, 25, 24}:     "Interactive Wear AG",
+       [3]byte{0, 25, 25}:     "ASTEL Inc.",
+       [3]byte{0, 25, 26}:     "IRLINK",
+       [3]byte{0, 25, 27}:     "Sputnik Engineering AG",
+       [3]byte{0, 25, 28}:     "Sensicast Systems",
+       [3]byte{0, 25, 29}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 25, 30}:     "Beyondwiz Co., Ltd.",
+       [3]byte{0, 25, 31}:     "Microlink communications Inc.",
+       [3]byte{0, 25, 32}:     "KUME electric Co.,Ltd.",
+       [3]byte{0, 25, 33}:     "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 25, 34}:     "CM Comandos Lineares",
+       [3]byte{0, 25, 35}:     "Phonex Korea Co., LTD.",
+       [3]byte{0, 25, 36}:     "LBNL  Engineering",
+       [3]byte{0, 25, 37}:     "Intelicis Corporation",
+       [3]byte{0, 25, 38}:     "BitsGen Co., Ltd.",
+       [3]byte{0, 25, 39}:     "ImCoSys Ltd",
+       [3]byte{0, 25, 40}:     "Siemens AG, Transportation Systems",
+       [3]byte{0, 25, 41}:     "2M2B Montadora de Maquinas Bahia Brasil LTDA",
+       [3]byte{0, 25, 42}:     "Antiope Associates",
+       [3]byte{0, 25, 43}:     "Aclara RF Systems Inc.",
+       [3]byte{0, 25, 44}:     "ARRIS Group, Inc.",
+       [3]byte{0, 25, 45}:     "Nokia Corporation",
+       [3]byte{0, 25, 46}:     "Spectral Instruments, Inc.",
+       [3]byte{0, 25, 47}:     "Cisco Systems, Inc",
+       [3]byte{0, 25, 48}:     "Cisco Systems, Inc",
+       [3]byte{0, 25, 49}:     "Balluff GmbH",
+       [3]byte{0, 25, 50}:     "Gude Analog- und Digialsysteme GmbH",
+       [3]byte{0, 25, 51}:     "Strix Systems, Inc.",
+       [3]byte{0, 25, 52}:     "TRENDON TOUCH TECHNOLOGY CORP.",
+       [3]byte{0, 25, 53}:     "DUERR DENTAL AG",
+       [3]byte{0, 25, 54}:     "STERLITE OPTICAL TECHNOLOGIES LIMITED",
+       [3]byte{0, 25, 55}:     "CommerceGuard AB",
+       [3]byte{0, 25, 56}:     "UMB Communications Co., Ltd.",
+       [3]byte{0, 25, 57}:     "Gigamips",
+       [3]byte{0, 25, 58}:     "OESOLUTIONS",
+       [3]byte{0, 25, 59}:     "Wilibox Deliberant Group LLC",
+       [3]byte{0, 25, 60}:     "HighPoint Technologies Incorporated",
+       [3]byte{0, 25, 61}:     "GMC Guardian Mobility Corp.",
+       [3]byte{0, 25, 62}:     "ADB Broadband Italia",
+       [3]byte{0, 25, 63}:     "RDI technology(Shenzhen) Co.,LTD",
+       [3]byte{0, 25, 64}:     "Rackable Systems",
+       [3]byte{0, 25, 65}:     "Pitney Bowes, Inc",
+       [3]byte{0, 25, 66}:     "ON SOFTWARE INTERNATIONAL LIMITED",
+       [3]byte{0, 25, 67}:     "Belden",
+       [3]byte{0, 25, 68}:     "Fossil Partners, L.P.",
+       [3]byte{0, 25, 69}:     "RF COncepts, LLC",
+       [3]byte{0, 25, 70}:     "Cianet Industria e Comercio S/A",
+       [3]byte{0, 25, 71}:     "Cisco SPVTG",
+       [3]byte{0, 25, 72}:     "AireSpider Networks",
+       [3]byte{0, 25, 73}:     "TENTEL  COMTECH CO., LTD.",
+       [3]byte{0, 25, 74}:     "TESTO AG",
+       [3]byte{0, 25, 75}:     "Sagemcom Broadband SAS",
+       [3]byte{0, 25, 76}:     "Fujian Stelcom information & Technology CO.,Ltd",
+       [3]byte{0, 25, 77}:     "Avago Technologies Sdn Bhd",
+       [3]byte{0, 25, 78}:     "Ultra Electronics - TCS (Tactical Communication Systems)",
+       [3]byte{0, 25, 79}:     "Nokia Danmark A/S",
+       [3]byte{0, 25, 80}:     "Harman Multimedia",
+       [3]byte{0, 25, 81}:     "NETCONS, s.r.o.",
+       [3]byte{0, 25, 82}:     "ACOGITO Co., Ltd",
+       [3]byte{0, 25, 83}:     "Chainleader Communications Corp.",
+       [3]byte{0, 25, 84}:     "Leaf Corporation.",
+       [3]byte{0, 25, 85}:     "Cisco Systems, Inc",
+       [3]byte{0, 25, 86}:     "Cisco Systems, Inc",
+       [3]byte{0, 25, 87}:     "Saafnet Canada Inc.",
+       [3]byte{0, 25, 88}:     "Bluetooth SIG, Inc.",
+       [3]byte{0, 25, 89}:     "Staccato Communications Inc.",
+       [3]byte{0, 25, 90}:     "Jenaer Antriebstechnik GmbH",
+       [3]byte{0, 25, 91}:     "D-Link Corporation",
+       [3]byte{0, 25, 92}:     "Innotech Corporation",
+       [3]byte{0, 25, 93}:     "ShenZhen XinHuaTong Opto Electronics Co.,Ltd",
+       [3]byte{0, 25, 94}:     "ARRIS Group, Inc.",
+       [3]byte{0, 25, 95}:     "Valemount Networks Corporation",
+       [3]byte{0, 25, 96}:     "DoCoMo Systems, Inc.",
+       [3]byte{0, 25, 97}:     "Blaupunkt  Embedded Systems GmbH",
+       [3]byte{0, 25, 98}:     "Commerciant, LP",
+       [3]byte{0, 25, 99}:     "Sony Mobile Communications AB",
+       [3]byte{0, 25, 100}:    "Doorking Inc.",
+       [3]byte{0, 25, 101}:    "YuHua TelTech (ShangHai) Co., Ltd.",
+       [3]byte{0, 25, 102}:    "Asiarock Technology Limited",
+       [3]byte{0, 25, 103}:    "TELDAT Sp.J.",
+       [3]byte{0, 25, 104}:    "Digital Video Networks(Shanghai) CO. LTD.",
+       [3]byte{0, 25, 105}:    "Nortel Networks",
+       [3]byte{0, 25, 106}:    "MikroM GmbH",
+       [3]byte{0, 25, 107}:    "Danpex Corporation",
+       [3]byte{0, 25, 108}:    "ETROVISION TECHNOLOGY",
+       [3]byte{0, 25, 109}:    "Raybit Systems Korea, Inc",
+       [3]byte{0, 25, 110}:    "Metacom (Pty) Ltd.",
+       [3]byte{0, 25, 111}:    "SensoPart GmbH",
+       [3]byte{0, 25, 112}:    "Z-Com, Inc.",
+       [3]byte{0, 25, 113}:    "Guangzhou Unicomp Technology Co.,Ltd",
+       [3]byte{0, 25, 114}:    "Plexus (Xiamen) Co.,ltd.",
+       [3]byte{0, 25, 115}:    "Zeugma Systems",
+       [3]byte{0, 25, 116}:    "16063",
+       [3]byte{0, 25, 117}:    "Beijing Huisen networks technology Inc",
+       [3]byte{0, 25, 118}:    "Xipher Technologies, LLC",
+       [3]byte{0, 25, 119}:    "Aerohive Networks Inc.",
+       [3]byte{0, 25, 120}:    "Datum Systems, Inc.",
+       [3]byte{0, 25, 121}:    "Nokia Danmark A/S",
+       [3]byte{0, 25, 122}:    "MAZeT GmbH",
+       [3]byte{0, 25, 123}:    "Picotest Corp.",
+       [3]byte{0, 25, 124}:    "Riedel Communications GmbH",
+       [3]byte{0, 25, 125}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 25, 126}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 25, 127}:    "PLANTRONICS, INC.",
+       [3]byte{0, 25, 128}:    "Gridpoint Systems",
+       [3]byte{0, 25, 129}:    "Vivox Inc",
+       [3]byte{0, 25, 130}:    "SmarDTV",
+       [3]byte{0, 25, 131}:    "CCT R&D Limited",
+       [3]byte{0, 25, 132}:    "ESTIC Corporation",
+       [3]byte{0, 25, 133}:    "IT Watchdogs, Inc",
+       [3]byte{0, 25, 134}:    "Cheng Hongjian",
+       [3]byte{0, 25, 135}:    "Panasonic Mobile Communications Co.,Ltd.",
+       [3]byte{0, 25, 136}:    "Wi2Wi, Inc",
+       [3]byte{0, 25, 137}:    "Sonitrol Corporation",
+       [3]byte{0, 25, 138}:    "Northrop Grumman Systems Corp.",
+       [3]byte{0, 25, 139}:    "Novera Optics Korea, Inc.",
+       [3]byte{0, 25, 140}:    "iXSea",
+       [3]byte{0, 25, 141}:    "Ocean Optics, Inc.",
+       [3]byte{0, 25, 142}:    "Oticon A/S",
+       [3]byte{0, 25, 143}:    "Alcatel Bell N.V.",
+       [3]byte{0, 25, 144}:    "ELM DATA Co., Ltd.",
+       [3]byte{0, 25, 145}:    "avinfo",
+       [3]byte{0, 25, 146}:    "Adtran Inc",
+       [3]byte{0, 25, 147}:    "Changshu Switchgear MFG. Co.,Ltd. (Former Changshu Switchgea",
+       [3]byte{0, 25, 148}:    "Jorjin Technologies Inc.",
+       [3]byte{0, 25, 149}:    "Jurong Hi-Tech (Suzhou)Co.ltd",
+       [3]byte{0, 25, 150}:    "TurboChef Technologies Inc.",
+       [3]byte{0, 25, 151}:    "Soft Device Sdn Bhd",
+       [3]byte{0, 25, 152}:    "SATO CORPORATION",
+       [3]byte{0, 25, 153}:    "Fujitsu Technology Solutions GmbH",
+       [3]byte{0, 25, 154}:    "EDO-EVI",
+       [3]byte{0, 25, 155}:    "Diversified Technical Systems, Inc.",
+       [3]byte{0, 25, 156}:    "CTRING",
+       [3]byte{0, 25, 157}:    "Vizio, Inc",
+       [3]byte{0, 25, 158}:    "Nifty",
+       [3]byte{0, 25, 159}:    "DKT A/S",
+       [3]byte{0, 25, 160}:    "NIHON DATA SYSTENS, INC.",
+       [3]byte{0, 25, 161}:    "LG INFORMATION & COMM.",
+       [3]byte{0, 25, 162}:    "ORDYN TECHNOLOGIES",
+       [3]byte{0, 25, 163}:    "asteel electronique atlantique",
+       [3]byte{0, 25, 164}:    "Austar Technology (hang zhou) Co.,Ltd",
+       [3]byte{0, 25, 165}:    "RadarFind Corporation",
+       [3]byte{0, 25, 166}:    "ARRIS Group, Inc.",
+       [3]byte{0, 25, 167}:    "ITU-T",
+       [3]byte{0, 25, 168}:    "WiQuest Communications",
+       [3]byte{0, 25, 169}:    "Cisco Systems, Inc",
+       [3]byte{0, 25, 170}:    "Cisco Systems, Inc",
+       [3]byte{0, 25, 171}:    "Raycom CO ., LTD",
+       [3]byte{0, 25, 172}:    "GSP SYSTEMS Inc.",
+       [3]byte{0, 25, 173}:    "BOBST SA",
+       [3]byte{0, 25, 174}:    "Hopling Technologies b.v.",
+       [3]byte{0, 25, 175}:    "Rigol Technologies, Inc.",
+       [3]byte{0, 25, 176}:    "HanYang System",
+       [3]byte{0, 25, 177}:    "Arrow7 Corporation",
+       [3]byte{0, 25, 178}:    "XYnetsoft Co.,Ltd",
+       [3]byte{0, 25, 179}:    "Stanford Research Systems",
+       [3]byte{0, 25, 180}:    "Intellio Ltd",
+       [3]byte{0, 25, 181}:    "Famar Fueguina S.A.",
+       [3]byte{0, 25, 182}:    "Euro Emme s.r.l.",
+       [3]byte{0, 25, 183}:    "Nokia Danmark A/S",
+       [3]byte{0, 25, 184}:    "Boundary Devices",
+       [3]byte{0, 25, 185}:    "Dell Inc.",
+       [3]byte{0, 25, 186}:    "Paradox Security Systems Ltd",
+       [3]byte{0, 25, 187}:    "Hewlett Packard",
+       [3]byte{0, 25, 188}:    "ELECTRO CHANCE SRL",
+       [3]byte{0, 25, 189}:    "New Media Life",
+       [3]byte{0, 25, 190}:    "Altai Technologies Limited",
+       [3]byte{0, 25, 191}:    "Citiway technology Co.,ltd",
+       [3]byte{0, 25, 192}:    "ARRIS Group, Inc.",
+       [3]byte{0, 25, 193}:    "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 25, 194}:    "Equustek Solutions, Inc.",
+       [3]byte{0, 25, 195}:    "Qualitrol",
+       [3]byte{0, 25, 196}:    "Infocrypt Inc.",
+       [3]byte{0, 25, 197}:    "Sony Interactive Entertainment Inc.",
+       [3]byte{0, 25, 198}:    "zte corporation",
+       [3]byte{0, 25, 199}:    "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{0, 25, 200}:    "AnyDATA Corporation",
+       [3]byte{0, 25, 201}:    "S&C ELECTRIC COMPANY",
+       [3]byte{0, 25, 202}:    "Broadata Communications, Inc",
+       [3]byte{0, 25, 203}:    "Zyxel Communications Corporation",
+       [3]byte{0, 25, 204}:    "RCG (HK) Ltd",
+       [3]byte{0, 25, 205}:    "Chengdu ethercom information technology Ltd.",
+       [3]byte{0, 25, 206}:    "Progressive Gaming International",
+       [3]byte{0, 25, 207}:    "SALICRU, S.A.",
+       [3]byte{0, 25, 208}:    "Cathexis",
+       [3]byte{0, 25, 209}:    "Intel Corporate",
+       [3]byte{0, 25, 210}:    "Intel Corporate",
+       [3]byte{0, 25, 211}:    "TRAK Microwave",
+       [3]byte{0, 25, 212}:    "ICX Technologies",
+       [3]byte{0, 25, 213}:    "IP Innovations, Inc.",
+       [3]byte{0, 25, 214}:    "LS Cable and System Ltd.",
+       [3]byte{0, 25, 215}:    "FORTUNETEK CO., LTD",
+       [3]byte{0, 25, 216}:    "MAXFOR",
+       [3]byte{0, 25, 217}:    "Zeutschel GmbH",
+       [3]byte{0, 25, 218}:    "Welltrans O&E Technology Co. , Ltd.",
+       [3]byte{0, 25, 219}:    "MICRO-STAR INTERNATIONAL CO., LTD.",
+       [3]byte{0, 25, 220}:    "ENENSYS Technologies",
+       [3]byte{0, 25, 221}:    "FEI-Zyfer, Inc.",
+       [3]byte{0, 25, 222}:    "MOBITEK",
+       [3]byte{0, 25, 223}:    "Thomson Inc.",
+       [3]byte{0, 25, 224}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 25, 225}:    "Nortel Networks",
+       [3]byte{0, 25, 226}:    "Juniper Networks",
+       [3]byte{0, 25, 227}:    "Apple, Inc.",
+       [3]byte{0, 25, 228}:    "2Wire Inc",
+       [3]byte{0, 25, 229}:    "Lynx Studio Technology, Inc.",
+       [3]byte{0, 25, 230}:    "TOYO MEDIC CO.,LTD.",
+       [3]byte{0, 25, 231}:    "Cisco Systems, Inc",
+       [3]byte{0, 25, 232}:    "Cisco Systems, Inc",
+       [3]byte{0, 25, 233}:    "S-Information Technolgy, Co., Ltd.",
+       [3]byte{0, 25, 234}:    "TeraMage Technologies Co., Ltd.",
+       [3]byte{0, 25, 235}:    "Pyronix Ltd",
+       [3]byte{0, 25, 236}:    "Sagamore Systems, Inc.",
+       [3]byte{0, 25, 237}:    "Axesstel Inc.",
+       [3]byte{0, 25, 238}:    "CARLO GAVAZZI CONTROLS SPA-Controls Division",
+       [3]byte{0, 25, 239}:    "SHENZHEN LINNKING ELECTRONICS CO.,LTD",
+       [3]byte{0, 25, 240}:    "UNIONMAN TECHNOLOGY CO.,LTD",
+       [3]byte{0, 25, 241}:    "Star Communication Network Technology Co.,Ltd",
+       [3]byte{0, 25, 242}:    "Teradyne K.K.",
+       [3]byte{0, 25, 243}:    "Cetis, Inc",
+       [3]byte{0, 25, 244}:    "Convergens Oy Ltd",
+       [3]byte{0, 25, 245}:    "Imagination Technologies Ltd",
+       [3]byte{0, 25, 246}:    "Acconet (PTE) Ltd",
+       [3]byte{0, 25, 247}:    "Onset Computer Corporation",
+       [3]byte{0, 25, 248}:    "Embedded Systems Design, Inc.",
+       [3]byte{0, 25, 249}:    "TDK-Lambda",
+       [3]byte{0, 25, 250}:    "Cable Vision Electronics CO., LTD.",
+       [3]byte{0, 25, 251}:    "BSkyB Ltd",
+       [3]byte{0, 25, 252}:    "PT. Ufoakses Sukses Luarbiasa",
+       [3]byte{0, 25, 253}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 25, 254}:    "SHENZHEN SEECOMM TECHNOLOGY CO.,LTD.",
+       [3]byte{0, 25, 255}:    "Finnzymes",
+       [3]byte{0, 26, 0}:      "MATRIX INC.",
+       [3]byte{0, 26, 1}:      "Smiths Medical",
+       [3]byte{0, 26, 2}:      "SECURE CARE PRODUCTS, INC",
+       [3]byte{0, 26, 3}:      "Angel Electronics Co., Ltd.",
+       [3]byte{0, 26, 4}:      "Interay Solutions BV",
+       [3]byte{0, 26, 5}:      "OPTIBASE LTD",
+       [3]byte{0, 26, 6}:      "OpVista, Inc.",
+       [3]byte{0, 26, 7}:      "Arecont Vision",
+       [3]byte{0, 26, 8}:      "Simoco Ltd.",
+       [3]byte{0, 26, 9}:      "Wayfarer Transit Systems Ltd",
+       [3]byte{0, 26, 10}:     "Adaptive Micro-Ware Inc.",
+       [3]byte{0, 26, 11}:     "BONA TECHNOLOGY INC.",
+       [3]byte{0, 26, 12}:     "Swe-Dish Satellite Systems AB",
+       [3]byte{0, 26, 13}:     "HandHeld entertainment, Inc.",
+       [3]byte{0, 26, 14}:     "Cheng Uei Precision Industry Co.,Ltd",
+       [3]byte{0, 26, 15}:     "Sistemas Avanzados de Control, S.A.",
+       [3]byte{0, 26, 16}:     "LUCENT TRANS ELECTRONICS CO.,LTD",
+       [3]byte{0, 26, 17}:     "Google, Inc.",
+       [3]byte{0, 26, 18}:     "Essilor",
+       [3]byte{0, 26, 19}:     "Wanlida Group Co., LTD",
+       [3]byte{0, 26, 20}:     "Xin Hua Control Engineering Co.,Ltd.",
+       [3]byte{0, 26, 21}:     "gemalto e-Payment",
+       [3]byte{0, 26, 22}:     "Nokia Danmark A/S",
+       [3]byte{0, 26, 23}:     "Teak Technologies, Inc.",
+       [3]byte{0, 26, 24}:     "Advanced Simulation Technology inc.",
+       [3]byte{0, 26, 25}:     "Computer Engineering Limited",
+       [3]byte{0, 26, 26}:     "Gentex Corporation/Electro-Acoustic Products",
+       [3]byte{0, 26, 27}:     "ARRIS Group, Inc.",
+       [3]byte{0, 26, 28}:     "GT&T Engineering Pte Ltd",
+       [3]byte{0, 26, 29}:     "PChome Online Inc.",
+       [3]byte{0, 26, 30}:     "Aruba Networks",
+       [3]byte{0, 26, 31}:     "Coastal Environmental Systems",
+       [3]byte{0, 26, 32}:     "CMOTECH Co. Ltd.",
+       [3]byte{0, 26, 33}:     "Brookhuis Applied Technologies BV",
+       [3]byte{0, 26, 34}:     "eQ-3 Entwicklung GmbH",
+       [3]byte{0, 26, 35}:     "Ice Qube, Inc",
+       [3]byte{0, 26, 36}:     "Galaxy Telecom Technologies Ltd",
+       [3]byte{0, 26, 37}:     "DELTA DORE",
+       [3]byte{0, 26, 38}:     "Deltanode Solutions AB",
+       [3]byte{0, 26, 39}:     "Ubistar",
+       [3]byte{0, 26, 40}:     "ASWT Co., LTD. Taiwan Branch H.K.",
+       [3]byte{0, 26, 41}:     "Johnson Outdoors Marine Electronics d/b/a Minnkota",
+       [3]byte{0, 26, 42}:     "Arcadyan Technology Corporation",
+       [3]byte{0, 26, 43}:     "Ayecom Technology Co., Ltd.",
+       [3]byte{0, 26, 44}:     "SATEC Co.,LTD",
+       [3]byte{0, 26, 45}:     "The Navvo Group",
+       [3]byte{0, 26, 46}:     "Ziova Coporation",
+       [3]byte{0, 26, 47}:     "Cisco Systems, Inc",
+       [3]byte{0, 26, 48}:     "Cisco Systems, Inc",
+       [3]byte{0, 26, 49}:     "SCAN COIN Industries AB",
+       [3]byte{0, 26, 50}:     "ACTIVA MULTIMEDIA",
+       [3]byte{0, 26, 51}:     "ASI Communications, Inc.",
+       [3]byte{0, 26, 52}:     "Konka Group Co., Ltd.",
+       [3]byte{0, 26, 53}:     "BARTEC GmbH",
+       [3]byte{0, 26, 54}:     "Aipermon GmbH & Co. KG",
+       [3]byte{0, 26, 55}:     "Lear Corporation",
+       [3]byte{0, 26, 56}:     "Sanmina-SCI",
+       [3]byte{0, 26, 57}:     "Merten GmbH&CoKG",
+       [3]byte{0, 26, 58}:     "Dongahelecomm",
+       [3]byte{0, 26, 59}:     "Doah Elecom Inc.",
+       [3]byte{0, 26, 60}:     "Technowave Ltd.",
+       [3]byte{0, 26, 61}:     "Ajin Vision Co.,Ltd",
+       [3]byte{0, 26, 62}:     "Faster Technology LLC",
+       [3]byte{0, 26, 63}:     "intelbras",
+       [3]byte{0, 26, 64}:     "A-FOUR TECH CO., LTD.",
+       [3]byte{0, 26, 65}:     "INOCOVA Co.,Ltd",
+       [3]byte{0, 26, 66}:     "Techcity Technology co., Ltd.",
+       [3]byte{0, 26, 67}:     "Logical Link Communications",
+       [3]byte{0, 26, 68}:     "JWTrading Co., Ltd",
+       [3]byte{0, 26, 69}:     "GN Netcom A/S",
+       [3]byte{0, 26, 70}:     "Digital Multimedia Technology Co., Ltd",
+       [3]byte{0, 26, 71}:     "Agami Systems, Inc.",
+       [3]byte{0, 26, 72}:     "Takacom Corporation",
+       [3]byte{0, 26, 73}:     "Micro Vision Co.,LTD",
+       [3]byte{0, 26, 74}:     "Qumranet Inc.",
+       [3]byte{0, 26, 75}:     "Hewlett Packard",
+       [3]byte{0, 26, 76}:     "Crossbow Technology, Inc",
+       [3]byte{0, 26, 77}:     "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{0, 26, 78}:     "NTI AG / LinMot",
+       [3]byte{0, 26, 79}:     "AVM GmbH",
+       [3]byte{0, 26, 80}:     "PheeNet Technology Corp.",
+       [3]byte{0, 26, 81}:     "Alfred Mann Foundation",
+       [3]byte{0, 26, 82}:     "Meshlinx Wireless Inc.",
+       [3]byte{0, 26, 83}:     "Zylaya",
+       [3]byte{0, 26, 84}:     "Hip Shing Electronics Ltd.",
+       [3]byte{0, 26, 85}:     "ACA-Digital Corporation",
+       [3]byte{0, 26, 86}:     "ViewTel Co,. Ltd.",
+       [3]byte{0, 26, 87}:     "Matrix Design Group, LLC",
+       [3]byte{0, 26, 88}:     "CCV Deutschland GmbH - Celectronic eHealth Div.",
+       [3]byte{0, 26, 89}:     "Ircona",
+       [3]byte{0, 26, 90}:     "Korea Electric Power Data Network  (KDN) Co., Ltd",
+       [3]byte{0, 26, 91}:     "NetCare Service Co., Ltd.",
+       [3]byte{0, 26, 92}:     "Euchner GmbH+Co. KG",
+       [3]byte{0, 26, 93}:     "Mobinnova Corp.",
+       [3]byte{0, 26, 94}:     "Thincom Technology Co.,Ltd",
+       [3]byte{0, 26, 95}:     "KitWorks.fi Ltd.",
+       [3]byte{0, 26, 96}:     "Wave Electronics Co.,Ltd.",
+       [3]byte{0, 26, 97}:     "PacStar Corp.",
+       [3]byte{0, 26, 98}:     "Data Robotics, Incorporated",
+       [3]byte{0, 26, 99}:     "Elster Solutions, LLC,",
+       [3]byte{0, 26, 100}:    "IBM Corp",
+       [3]byte{0, 26, 101}:    "Seluxit",
+       [3]byte{0, 26, 102}:    "ARRIS Group, Inc.",
+       [3]byte{0, 26, 103}:    "Infinite QL Sdn Bhd",
+       [3]byte{0, 26, 104}:    "Weltec Enterprise Co., Ltd.",
+       [3]byte{0, 26, 105}:    "Wuhan Yangtze Optical Technology CO.,Ltd.",
+       [3]byte{0, 26, 106}:    "Tranzas, Inc.",
+       [3]byte{0, 26, 107}:    "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{0, 26, 108}:    "Cisco Systems, Inc",
+       [3]byte{0, 26, 109}:    "Cisco Systems, Inc",
+       [3]byte{0, 26, 110}:    "Impro Technologies",
+       [3]byte{0, 26, 111}:    "MI.TEL s.r.l.",
+       [3]byte{0, 26, 112}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 26, 113}:    "Diostech Co., Ltd.",
+       [3]byte{0, 26, 114}:    "Mosart Semiconductor Corp.",
+       [3]byte{0, 26, 115}:    "Gemtek Technology Co., Ltd.",
+       [3]byte{0, 26, 116}:    "Procare International Co",
+       [3]byte{0, 26, 117}:    "Sony Mobile Communications AB",
+       [3]byte{0, 26, 118}:    "SDT information Technology Co.,LTD.",
+       [3]byte{0, 26, 119}:    "ARRIS Group, Inc.",
+       [3]byte{0, 26, 120}:    "ubtos",
+       [3]byte{0, 26, 121}:    "TELECOMUNICATION TECHNOLOGIES LTD.",
+       [3]byte{0, 26, 122}:    "Lismore Instruments Limited",
+       [3]byte{0, 26, 123}:    "Teleco, Inc.",
+       [3]byte{0, 26, 124}:    "Hirschmann Multimedia B.V.",
+       [3]byte{0, 26, 125}:    "cyber-blue(HK)Ltd",
+       [3]byte{0, 26, 126}:    "LN Srithai Comm Ltd.",
+       [3]byte{0, 26, 127}:    "GCI Science & Technology Co.,LTD",
+       [3]byte{0, 26, 128}:    "Sony Corporation",
+       [3]byte{0, 26, 129}:    "Zelax",
+       [3]byte{0, 26, 130}:    "PROBA Building Automation Co.,LTD",
+       [3]byte{0, 26, 131}:    "Pegasus Technologies Inc.",
+       [3]byte{0, 26, 132}:    "V One Multimedia Pte Ltd",
+       [3]byte{0, 26, 133}:    "NV Michel Van de Wiele",
+       [3]byte{0, 26, 134}:    "AdvancedIO Systems Inc",
+       [3]byte{0, 26, 135}:    "Canhold International Limited",
+       [3]byte{0, 26, 136}:    "Venergy,Co,Ltd",
+       [3]byte{0, 26, 137}:    "Nokia Danmark A/S",
+       [3]byte{0, 26, 138}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 26, 139}:    "CHUNIL ELECTRIC IND., CO.",
+       [3]byte{0, 26, 140}:    "Sophos Ltd",
+       [3]byte{0, 26, 141}:    "AVECS Bergen GmbH",
+       [3]byte{0, 26, 142}:    "3Way Networks Ltd",
+       [3]byte{0, 26, 143}:    "Nortel Networks",
+       [3]byte{0, 26, 144}:    "Trópico Sistemas e Telecomunicações da Amazônia LTDA.",
+       [3]byte{0, 26, 145}:    "FusionDynamic Ltd.",
+       [3]byte{0, 26, 146}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 26, 147}:    "ERCO Leuchten GmbH",
+       [3]byte{0, 26, 148}:    "Votronic GmbH",
+       [3]byte{0, 26, 149}:    "Hisense Mobile Communications Technoligy Co.,Ltd.",
+       [3]byte{0, 26, 150}:    "ECLER S.A.",
+       [3]byte{0, 26, 151}:    "fitivision technology Inc.",
+       [3]byte{0, 26, 152}:    "Asotel Communication Limited Taiwan Branch",
+       [3]byte{0, 26, 153}:    "Smarty (HZ) Information Electronics Co., Ltd",
+       [3]byte{0, 26, 154}:    "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+       [3]byte{0, 26, 155}:    "ADEC & Parter AG",
+       [3]byte{0, 26, 156}:    "RightHand Technologies, Inc.",
+       [3]byte{0, 26, 157}:    "Skipper Wireless, Inc.",
+       [3]byte{0, 26, 158}:    "ICON Digital International Limited",
+       [3]byte{0, 26, 159}:    "A-Link Ltd",
+       [3]byte{0, 26, 160}:    "Dell Inc.",
+       [3]byte{0, 26, 161}:    "Cisco Systems, Inc",
+       [3]byte{0, 26, 162}:    "Cisco Systems, Inc",
+       [3]byte{0, 26, 163}:    "DELORME",
+       [3]byte{0, 26, 164}:    "Future University-Hakodate",
+       [3]byte{0, 26, 165}:    "BRN Phoenix",
+       [3]byte{0, 26, 166}:    "Telefunken Radio Communication Systems GmbH &CO.KG",
+       [3]byte{0, 26, 167}:    "Torian Wireless",
+       [3]byte{0, 26, 168}:    "Mamiya Digital Imaging Co., Ltd.",
+       [3]byte{0, 26, 169}:    "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+       [3]byte{0, 26, 170}:    "Analogic Corp.",
+       [3]byte{0, 26, 171}:    "eWings s.r.l.",
+       [3]byte{0, 26, 172}:    "Corelatus AB",
+       [3]byte{0, 26, 173}:    "ARRIS Group, Inc.",
+       [3]byte{0, 26, 174}:    "Savant Systems LLC",
+       [3]byte{0, 26, 175}:    "BLUSENS TECHNOLOGY",
+       [3]byte{0, 26, 176}:    "Signal Networks Pvt. Ltd.,",
+       [3]byte{0, 26, 177}:    "Asia Pacific Satellite Industries Co., Ltd.",
+       [3]byte{0, 26, 178}:    "Cyber Solutions Inc.",
+       [3]byte{0, 26, 179}:    "VISIONITE INC.",
+       [3]byte{0, 26, 180}:    "FFEI Ltd.",
+       [3]byte{0, 26, 181}:    "Home Network System",
+       [3]byte{0, 26, 182}:    "Texas Instruments",
+       [3]byte{0, 26, 183}:    "Ethos Networks LTD.",
+       [3]byte{0, 26, 184}:    "Anseri Corporation",
+       [3]byte{0, 26, 185}:    "PMC",
+       [3]byte{0, 26, 186}:    "Caton Overseas Limited",
+       [3]byte{0, 26, 187}:    "Fontal Technology Incorporation",
+       [3]byte{0, 26, 188}:    "U4EA Technologies Ltd",
+       [3]byte{0, 26, 189}:    "Impatica Inc.",
+       [3]byte{0, 26, 190}:    "COMPUTER HI-TECH INC.",
+       [3]byte{0, 26, 191}:    "TRUMPF Laser Marking Systems AG",
+       [3]byte{0, 26, 192}:    "JOYBIEN TECHNOLOGIES CO., LTD.",
+       [3]byte{0, 26, 193}:    "3Com Ltd",
+       [3]byte{0, 26, 194}:    "YEC Co.,Ltd.",
+       [3]byte{0, 26, 195}:    "Scientific-Atlanta, Inc",
+       [3]byte{0, 26, 196}:    "2Wire Inc",
+       [3]byte{0, 26, 197}:    "BreakingPoint Systems, Inc.",
+       [3]byte{0, 26, 198}:    "Micro Control Designs",
+       [3]byte{0, 26, 199}:    "UNIPOINT",
+       [3]byte{0, 26, 200}:    "ISL (Instrumentation Scientifique de Laboratoire)",
+       [3]byte{0, 26, 201}:    "SUZUKEN CO.,LTD",
+       [3]byte{0, 26, 202}:    "Tilera Corporation",
+       [3]byte{0, 26, 203}:    "Autocom Products Ltd",
+       [3]byte{0, 26, 204}:    "Celestial Semiconductor, Ltd",
+       [3]byte{0, 26, 205}:    "Tidel Engineering LP",
+       [3]byte{0, 26, 206}:    "YUPITERU CORPORATION",
+       [3]byte{0, 26, 207}:    "C.T. ELETTRONICA",
+       [3]byte{0, 26, 208}:    "Albis Technologies AG",
+       [3]byte{0, 26, 209}:    "FARGO CO., LTD.",
+       [3]byte{0, 26, 210}:    "Eletronica Nitron Ltda",
+       [3]byte{0, 26, 211}:    "Vamp Ltd.",
+       [3]byte{0, 26, 212}:    "iPOX Technology Co., Ltd.",
+       [3]byte{0, 26, 213}:    "KMC CHAIN INDUSTRIAL CO., LTD.",
+       [3]byte{0, 26, 214}:    "JIAGNSU AETNA ELECTRIC CO.,LTD",
+       [3]byte{0, 26, 215}:    "Christie Digital Systems, Inc.",
+       [3]byte{0, 26, 216}:    "AlsterAero GmbH",
+       [3]byte{0, 26, 217}:    "International Broadband Electric Communications, Inc.",
+       [3]byte{0, 26, 218}:    "Biz-2-Me Inc.",
+       [3]byte{0, 26, 219}:    "ARRIS Group, Inc.",
+       [3]byte{0, 26, 220}:    "Nokia Danmark A/S",
+       [3]byte{0, 26, 221}:    "PePWave Ltd",
+       [3]byte{0, 26, 222}:    "ARRIS Group, Inc.",
+       [3]byte{0, 26, 223}:    "Interactivetv Pty Limited",
+       [3]byte{0, 26, 224}:    "Mythology Tech Express Inc.",
+       [3]byte{0, 26, 225}:    "EDGE ACCESS INC",
+       [3]byte{0, 26, 226}:    "Cisco Systems, Inc",
+       [3]byte{0, 26, 227}:    "Cisco Systems, Inc",
+       [3]byte{0, 26, 228}:    "Medicis Technologies Corporation",
+       [3]byte{0, 26, 229}:    "Mvox Technologies Inc.",
+       [3]byte{0, 26, 230}:    "Atlanta Advanced Communications Holdings Limited",
+       [3]byte{0, 26, 231}:    "Aztek Networks, Inc.",
+       [3]byte{0, 26, 232}:    "Unify Software and Solutions GmbH & Co. KG",
+       [3]byte{0, 26, 233}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 26, 234}:    "Radio Terminal Systems Pty Ltd",
+       [3]byte{0, 26, 235}:    "Allied Telesis R&D Center K.K.",
+       [3]byte{0, 26, 236}:    "Keumbee Electronics Co.,Ltd.",
+       [3]byte{0, 26, 237}:    "INCOTEC GmbH",
+       [3]byte{0, 26, 238}:    "Shenztech Ltd",
+       [3]byte{0, 26, 239}:    "Loopcomm Technology, Inc.",
+       [3]byte{0, 26, 240}:    "Alcatel-Lucent IPD",
+       [3]byte{0, 26, 241}:    "Embedded Artists AB",
+       [3]byte{0, 26, 242}:    "Dynavisions Schweiz AG",
+       [3]byte{0, 26, 243}:    "Samyoung Electronics",
+       [3]byte{0, 26, 244}:    "Handreamnet",
+       [3]byte{0, 26, 245}:    "PENTAONE. CO., LTD.",
+       [3]byte{0, 26, 246}:    "Woven Systems, Inc.",
+       [3]byte{0, 26, 247}:    "dataschalt e+a GmbH",
+       [3]byte{0, 26, 248}:    "Copley Controls Corporation",
+       [3]byte{0, 26, 249}:    "AeroVIronment (AV Inc)",
+       [3]byte{0, 26, 250}:    "Welch Allyn, Inc.",
+       [3]byte{0, 26, 251}:    "Joby Inc.",
+       [3]byte{0, 26, 252}:    "ModusLink Corporation",
+       [3]byte{0, 26, 253}:    "EVOLIS",
+       [3]byte{0, 26, 254}:    "SOFACREAL",
+       [3]byte{0, 26, 255}:    "Wizyoung Tech.",
+       [3]byte{0, 27, 0}:      "Neopost Technologies",
+       [3]byte{0, 27, 1}:      "Applied Radio Technologies",
+       [3]byte{0, 27, 2}:      "ED Co.Ltd",
+       [3]byte{0, 27, 3}:      "Action Technology (SZ) Co., Ltd",
+       [3]byte{0, 27, 4}:      "Affinity International S.p.a",
+       [3]byte{0, 27, 5}:      "YMC AG",
+       [3]byte{0, 27, 6}:      "Ateliers R. LAUMONIER",
+       [3]byte{0, 27, 7}:      "Mendocino Software",
+       [3]byte{0, 27, 8}:      "Danfoss Drives A/S",
+       [3]byte{0, 27, 9}:      "Matrix Telecom Pvt. Ltd.",
+       [3]byte{0, 27, 10}:     "Intelligent Distributed Controls Ltd",
+       [3]byte{0, 27, 11}:     "Phidgets Inc.",
+       [3]byte{0, 27, 12}:     "Cisco Systems, Inc",
+       [3]byte{0, 27, 13}:     "Cisco Systems, Inc",
+       [3]byte{0, 27, 14}:     "InoTec GmbH Organisationssysteme",
+       [3]byte{0, 27, 15}:     "Petratec",
+       [3]byte{0, 27, 16}:     "ShenZhen Kang Hui Technology Co.,ltd",
+       [3]byte{0, 27, 17}:     "D-Link Corporation",
+       [3]byte{0, 27, 18}:     "Apprion",
+       [3]byte{0, 27, 19}:     "Icron Technologies Corporation",
+       [3]byte{0, 27, 20}:     "Carex Lighting Equipment Factory",
+       [3]byte{0, 27, 21}:     "Voxtel, Inc.",
+       [3]byte{0, 27, 22}:     "Celtro Ltd.",
+       [3]byte{0, 27, 23}:     "Palo Alto Networks",
+       [3]byte{0, 27, 24}:     "Tsuken Electric Ind. Co.,Ltd",
+       [3]byte{0, 27, 25}:     "IEEE I&M Society TC9",
+       [3]byte{0, 27, 26}:     "e-trees Japan, Inc.",
+       [3]byte{0, 27, 27}:     "Siemens AG,",
+       [3]byte{0, 27, 28}:     "Coherent",
+       [3]byte{0, 27, 29}:     "Phoenix International Co., Ltd",
+       [3]byte{0, 27, 30}:     "HART Communication Foundation",
+       [3]byte{0, 27, 31}:     "DELTA - Danish Electronics, Light & Acoustics",
+       [3]byte{0, 27, 32}:     "TPine Technology",
+       [3]byte{0, 27, 33}:     "Intel Corporate",
+       [3]byte{0, 27, 34}:     "Palit Microsystems ( H.K.) Ltd.",
+       [3]byte{0, 27, 35}:     "SimpleComTools",
+       [3]byte{0, 27, 36}:     "QUANTA COMPUTER INC.",
+       [3]byte{0, 27, 37}:     "Nortel Networks",
+       [3]byte{0, 27, 38}:     "RON-Telecom ZAO",
+       [3]byte{0, 27, 39}:     "Merlin CSI",
+       [3]byte{0, 27, 40}:     "POLYGON, JSC",
+       [3]byte{0, 27, 41}:     "Avantis.Co.,Ltd",
+       [3]byte{0, 27, 42}:     "Cisco Systems, Inc",
+       [3]byte{0, 27, 43}:     "Cisco Systems, Inc",
+       [3]byte{0, 27, 44}:     "ATRON electronic GmbH",
+       [3]byte{0, 27, 45}:     "Med-Eng Systems Inc.",
+       [3]byte{0, 27, 46}:     "Sinkyo Electron Inc",
+       [3]byte{0, 27, 47}:     "NETGEAR",
+       [3]byte{0, 27, 48}:     "Solitech Inc.",
+       [3]byte{0, 27, 49}:     "Neural Image. Co. Ltd.",
+       [3]byte{0, 27, 50}:     "QLogic Corporation",
+       [3]byte{0, 27, 51}:     "Nokia Danmark A/S",
+       [3]byte{0, 27, 52}:     "Focus System Inc.",
+       [3]byte{0, 27, 53}:     "ChongQing JINOU Science & Technology Development CO.,Ltd",
+       [3]byte{0, 27, 54}:     "Tsubata Engineering Co.,Ltd. (Head Office)",
+       [3]byte{0, 27, 55}:     "Computec Oy",
+       [3]byte{0, 27, 56}:     "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{0, 27, 57}:     "Proxicast",
+       [3]byte{0, 27, 58}:     "SIMS Corp.",
+       [3]byte{0, 27, 59}:     "Yi-Qing CO., LTD",
+       [3]byte{0, 27, 60}:     "Software Technologies Group,Inc.",
+       [3]byte{0, 27, 61}:     "EuroTel Spa",
+       [3]byte{0, 27, 62}:     "Curtis, Inc.",
+       [3]byte{0, 27, 63}:     "ProCurve Networking by HP",
+       [3]byte{0, 27, 64}:     "Network Automation mxc AB",
+       [3]byte{0, 27, 65}:     "General Infinity Co.,Ltd.",
+       [3]byte{0, 27, 66}:     "Wise & Blue",
+       [3]byte{0, 27, 67}:     "Beijing DG Telecommunications equipment Co.,Ltd",
+       [3]byte{0, 27, 68}:     "SanDisk Corporation",
+       [3]byte{0, 27, 69}:     "ABB AS, Division Automation Products",
+       [3]byte{0, 27, 70}:     "Blueone Technology Co.,Ltd",
+       [3]byte{0, 27, 71}:     "Futarque A/S",
+       [3]byte{0, 27, 72}:     "Shenzhen Lantech Electronics Co., Ltd.",
+       [3]byte{0, 27, 73}:     "Roberts Radio limited",
+       [3]byte{0, 27, 74}:     "W&W Communications, Inc.",
+       [3]byte{0, 27, 75}:     "SANION Co., Ltd.",
+       [3]byte{0, 27, 76}:     "Signtech",
+       [3]byte{0, 27, 77}:     "Areca Technology Corporation",
+       [3]byte{0, 27, 78}:     "Navman New Zealand",
+       [3]byte{0, 27, 79}:     "Avaya Inc",
+       [3]byte{0, 27, 80}:     "Nizhny Novgorod Factory named after M.Frunze, FSUE (NZiF)",
+       [3]byte{0, 27, 81}:     "Vector Technology Corp.",
+       [3]byte{0, 27, 82}:     "ARRIS Group, Inc.",
+       [3]byte{0, 27, 83}:     "Cisco Systems, Inc",
+       [3]byte{0, 27, 84}:     "Cisco Systems, Inc",
+       [3]byte{0, 27, 85}:     "Hurco Automation Ltd.",
+       [3]byte{0, 27, 86}:     "Tehuti Networks Ltd.",
+       [3]byte{0, 27, 87}:     "SEMINDIA SYSTEMS PRIVATE LIMITED",
+       [3]byte{0, 27, 88}:     "ACE CAD Enterprise Co., Ltd.",
+       [3]byte{0, 27, 89}:     "Sony Mobile Communications AB",
+       [3]byte{0, 27, 90}:     "Apollo Imaging Technologies, Inc.",
+       [3]byte{0, 27, 91}:     "2Wire Inc",
+       [3]byte{0, 27, 92}:     "Azuretec Co., Ltd.",
+       [3]byte{0, 27, 93}:     "Vololink Pty Ltd",
+       [3]byte{0, 27, 94}:     "BPL Limited",
+       [3]byte{0, 27, 95}:     "Alien Technology",
+       [3]byte{0, 27, 96}:     "NAVIGON AG",
+       [3]byte{0, 27, 97}:     "Digital Acoustics, LLC",
+       [3]byte{0, 27, 98}:     "JHT Optoelectronics Co.,Ltd.",
+       [3]byte{0, 27, 99}:     "Apple, Inc.",
+       [3]byte{0, 27, 100}:    "IsaacLandKorea Co., Ltd,",
+       [3]byte{0, 27, 101}:    "China Gridcom Co., Ltd",
+       [3]byte{0, 27, 102}:    "Sennheiser electronic GmbH & Co. KG",
+       [3]byte{0, 27, 103}:    "Cisco Systems Inc",
+       [3]byte{0, 27, 104}:    "Modnnet Co., Ltd",
+       [3]byte{0, 27, 105}:    "Equaline Corporation",
+       [3]byte{0, 27, 106}:    "Powerwave Technologies Sweden AB",
+       [3]byte{0, 27, 107}:    "Swyx Solutions AG",
+       [3]byte{0, 27, 108}:    "LookX Digital Media BV",
+       [3]byte{0, 27, 109}:    "Midtronics, Inc.",
+       [3]byte{0, 27, 110}:    "Anue Systems, Inc.",
+       [3]byte{0, 27, 111}:    "Teletrak Ltd",
+       [3]byte{0, 27, 112}:    "IRI Ubiteq, INC.",
+       [3]byte{0, 27, 113}:    "Telular Corp.",
+       [3]byte{0, 27, 114}:    "Sicep s.p.a.",
+       [3]byte{0, 27, 115}:    "DTL Broadcast Ltd",
+       [3]byte{0, 27, 116}:    "MiraLink Corporation",
+       [3]byte{0, 27, 117}:    "Hypermedia Systems",
+       [3]byte{0, 27, 118}:    "Ripcode, Inc.",
+       [3]byte{0, 27, 119}:    "Intel Corporate",
+       [3]byte{0, 27, 120}:    "Hewlett Packard",
+       [3]byte{0, 27, 121}:    "FAIVELEY TRANSPORT",
+       [3]byte{0, 27, 122}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 27, 123}:    "The Tintometer Ltd",
+       [3]byte{0, 27, 124}:    "A & R Cambridge",
+       [3]byte{0, 27, 125}:    "CXR Anderson Jacobson",
+       [3]byte{0, 27, 126}:    "Beckmann GmbH",
+       [3]byte{0, 27, 127}:    "TMN Technologies Telecomunicacoes Ltda",
+       [3]byte{0, 27, 128}:    "LORD Corporation",
+       [3]byte{0, 27, 129}:    "DATAQ Instruments, Inc.",
+       [3]byte{0, 27, 130}:    "Taiwan Semiconductor Co., Ltd.",
+       [3]byte{0, 27, 131}:    "Finsoft Ltd",
+       [3]byte{0, 27, 132}:    "Scan Engineering Telecom",
+       [3]byte{0, 27, 133}:    "MAN Diesel SE",
+       [3]byte{0, 27, 134}:    "Bosch Access Systems GmbH",
+       [3]byte{0, 27, 135}:    "Deepsound Tech. Co., Ltd",
+       [3]byte{0, 27, 136}:    "Divinet Access Technologies Ltd",
+       [3]byte{0, 27, 137}:    "EMZA Visual Sense Ltd.",
+       [3]byte{0, 27, 138}:    "2M Electronic A/S",
+       [3]byte{0, 27, 139}:    "NEC Platforms, Ltd.",
+       [3]byte{0, 27, 140}:    "JMicron Technology Corp.",
+       [3]byte{0, 27, 141}:    "Electronic Computer Systems, Inc.",
+       [3]byte{0, 27, 142}:    "Hulu Sweden AB",
+       [3]byte{0, 27, 143}:    "Cisco Systems, Inc",
+       [3]byte{0, 27, 144}:    "Cisco Systems, Inc",
+       [3]byte{0, 27, 145}:    "EFKON AG",
+       [3]byte{0, 27, 146}:    "l-acoustics",
+       [3]byte{0, 27, 147}:    "JC Decaux SA DNT",
+       [3]byte{0, 27, 148}:    "T.E.M.A. S.p.A.",
+       [3]byte{0, 27, 149}:    "VIDEO SYSTEMS SRL",
+       [3]byte{0, 27, 150}:    "General Sensing",
+       [3]byte{0, 27, 151}:    "Violin Technologies",
+       [3]byte{0, 27, 152}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 27, 153}:    "KS System GmbH",
+       [3]byte{0, 27, 154}:    "Apollo Fire Detectors Ltd",
+       [3]byte{0, 27, 155}:    "Hose-McCann Communications",
+       [3]byte{0, 27, 156}:    "SATEL sp. z o.o.",
+       [3]byte{0, 27, 157}:    "Novus Security Sp. z o.o.",
+       [3]byte{0, 27, 158}:    "ASKEY COMPUTER CORP",
+       [3]byte{0, 27, 159}:    "Calyptech Pty Ltd",
+       [3]byte{0, 27, 160}:    "Awox",
+       [3]byte{0, 27, 161}:    "Åmic AB",
+       [3]byte{0, 27, 162}:    "IDS Imaging Development Systems GmbH",
+       [3]byte{0, 27, 163}:    "Flexit Group GmbH",
+       [3]byte{0, 27, 164}:    "S.A.E Afikim",
+       [3]byte{0, 27, 165}:    "MyungMin Systems, Inc.",
+       [3]byte{0, 27, 166}:    "intotech inc.",
+       [3]byte{0, 27, 167}:    "Lorica Solutions",
+       [3]byte{0, 27, 168}:    "UBI&MOBI,.Inc",
+       [3]byte{0, 27, 169}:    "Brother industries, LTD.",
+       [3]byte{0, 27, 170}:    "XenICs nv",
+       [3]byte{0, 27, 171}:    "Telchemy, Incorporated",
+       [3]byte{0, 27, 172}:    "Curtiss Wright Controls Embedded Computing",
+       [3]byte{0, 27, 173}:    "iControl Incorporated",
+       [3]byte{0, 27, 174}:    "Micro Control Systems, Inc",
+       [3]byte{0, 27, 175}:    "Nokia Danmark A/S",
+       [3]byte{0, 27, 176}:    "BHARAT ELECTRONICS",
+       [3]byte{0, 27, 177}:    "Wistron Neweb Corporation",
+       [3]byte{0, 27, 178}:    "Intellect International NV",
+       [3]byte{0, 27, 179}:    "Condalo GmbH",
+       [3]byte{0, 27, 180}:    "Airvod Limited",
+       [3]byte{0, 27, 181}:    "Cherry GmbH",
+       [3]byte{0, 27, 182}:    "Bird Electronic Corp.",
+       [3]byte{0, 27, 183}:    "Alta Heights Technology Corp.",
+       [3]byte{0, 27, 184}:    "BLUEWAY ELECTRONIC CO;LTD",
+       [3]byte{0, 27, 185}:    "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 27, 186}:    "Nortel Networks",
+       [3]byte{0, 27, 187}:    "RFTech Co.,Ltd",
+       [3]byte{0, 27, 188}:    "Silver Peak Systems, Inc.",
+       [3]byte{0, 27, 189}:    "FMC Kongsberg Subsea AS",
+       [3]byte{0, 27, 190}:    "ICOP Digital",
+       [3]byte{0, 27, 191}:    "Sagemcom Broadband SAS",
+       [3]byte{0, 27, 192}:    "Juniper Networks",
+       [3]byte{0, 27, 193}:    "HOLUX Technology, Inc.",
+       [3]byte{0, 27, 194}:    "Integrated Control Technology Limitied",
+       [3]byte{0, 27, 195}:    "Mobisolution Co.,Ltd",
+       [3]byte{0, 27, 196}:    "Ultratec, Inc.",
+       [3]byte{0, 27, 197}:    "IEEE Registration Authority",
+       [3]byte{0, 27, 198}:    "Strato Rechenzentrum AG",
+       [3]byte{0, 27, 199}:    "StarVedia Technology Inc.",
+       [3]byte{0, 27, 200}:    "MIURA CO.,LTD",
+       [3]byte{0, 27, 201}:    "FSN DISPLAY INC",
+       [3]byte{0, 27, 202}:    "Beijing Run Technology LTD. Company",
+       [3]byte{0, 27, 203}:    "PEMPEK SYSTEMS PTY LTD",
+       [3]byte{0, 27, 204}:    "KINGTEK CCTV ALLIANCE CO., LTD.",
+       [3]byte{0, 27, 205}:    "DAVISCOMMS (S) PTE LTD",
+       [3]byte{0, 27, 206}:    "Measurement Devices Ltd",
+       [3]byte{0, 27, 207}:    "Dataupia Corporation",
+       [3]byte{0, 27, 208}:    "IDENTEC SOLUTIONS",
+       [3]byte{0, 27, 209}:    "SOGESTMATIC",
+       [3]byte{0, 27, 210}:    "ULTRA-X ASIA PACIFIC Inc.",
+       [3]byte{0, 27, 211}:    "Panasonic Corporation AVC Networks Company",
+       [3]byte{0, 27, 212}:    "Cisco Systems, Inc",
+       [3]byte{0, 27, 213}:    "Cisco Systems, Inc",
+       [3]byte{0, 27, 214}:    "Kelvin Hughes Ltd",
+       [3]byte{0, 27, 215}:    "Cisco SPVTG",
+       [3]byte{0, 27, 216}:    "DVTel LTD",
+       [3]byte{0, 27, 217}:    "Edgewater Computer Systems",
+       [3]byte{0, 27, 218}:    "UTStarcom Inc",
+       [3]byte{0, 27, 219}:    "Valeo VECS",
+       [3]byte{0, 27, 220}:    "Vencer Co., Ltd.",
+       [3]byte{0, 27, 221}:    "ARRIS Group, Inc.",
+       [3]byte{0, 27, 222}:    "Renkus-Heinz, Inc.",
+       [3]byte{0, 27, 223}:    "Iskra Sistemi d.d.",
+       [3]byte{0, 27, 224}:    "TELENOT ELECTRONIC GmbH",
+       [3]byte{0, 27, 225}:    "ViaLogy",
+       [3]byte{0, 27, 226}:    "AhnLab,Inc.",
+       [3]byte{0, 27, 227}:    "Health Hero Network, Inc.",
+       [3]byte{0, 27, 228}:    "TOWNET SRL",
+       [3]byte{0, 27, 229}:    "802automation Limited",
+       [3]byte{0, 27, 230}:    "VR AG",
+       [3]byte{0, 27, 231}:    "Postek Electronics Co., Ltd.",
+       [3]byte{0, 27, 232}:    "Ultratronik GmbH",
+       [3]byte{0, 27, 233}:    "Broadcom",
+       [3]byte{0, 27, 234}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 27, 235}:    "DMP Electronics INC.",
+       [3]byte{0, 27, 236}:    "Netio Technologies Co., Ltd",
+       [3]byte{0, 27, 237}:    "Brocade Communications Systems, Inc.",
+       [3]byte{0, 27, 238}:    "Nokia Danmark A/S",
+       [3]byte{0, 27, 239}:    "Blossoms Digital Technology Co.,Ltd.",
+       [3]byte{0, 27, 240}:    "Value Platforms Limited",
+       [3]byte{0, 27, 241}:    "Nanjing SilverNet Software Co., Ltd.",
+       [3]byte{0, 27, 242}:    "KWORLD COMPUTER CO., LTD",
+       [3]byte{0, 27, 243}:    "TRANSRADIO SenderSysteme Berlin AG",
+       [3]byte{0, 27, 244}:    "KENWIN INDUSTRIAL(HK) LTD.",
+       [3]byte{0, 27, 245}:    "Tellink Sistemas de Telecomunicación S.L.",
+       [3]byte{0, 27, 246}:    "CONWISE Technology Corporation Ltd.",
+       [3]byte{0, 27, 247}:    "Lund IP Products AB",
+       [3]byte{0, 27, 248}:    "Digitrax Inc.",
+       [3]byte{0, 27, 249}:    "Intellitect Water Ltd",
+       [3]byte{0, 27, 250}:    "G.i.N. mbH",
+       [3]byte{0, 27, 251}:    "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 27, 252}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 27, 253}:    "Dignsys Inc.",
+       [3]byte{0, 27, 254}:    "Zavio Inc.",
+       [3]byte{0, 27, 255}:    "Millennia Media inc.",
+       [3]byte{0, 28, 0}:      "Entry Point, LLC",
+       [3]byte{0, 28, 1}:      "ABB Oy Drives",
+       [3]byte{0, 28, 2}:      "Pano Logic",
+       [3]byte{0, 28, 3}:      "Betty TV Technology AG",
+       [3]byte{0, 28, 4}:      "Airgain, Inc.",
+       [3]byte{0, 28, 5}:      "Nonin Medical Inc.",
+       [3]byte{0, 28, 6}:      "Siemens Numerical Control Ltd., Nanjing",
+       [3]byte{0, 28, 7}:      "Cwlinux Limited",
+       [3]byte{0, 28, 8}:      "Echo360, Inc.",
+       [3]byte{0, 28, 9}:      "SAE Electronic Co.,Ltd.",
+       [3]byte{0, 28, 10}:     "Shenzhen AEE Technology Co.,Ltd.",
+       [3]byte{0, 28, 11}:     "SmartAnt Telecom",
+       [3]byte{0, 28, 12}:     "TANITA Corporation",
+       [3]byte{0, 28, 13}:     "G-Technology, Inc.",
+       [3]byte{0, 28, 14}:     "Cisco Systems, Inc",
+       [3]byte{0, 28, 15}:     "Cisco Systems, Inc",
+       [3]byte{0, 28, 16}:     "Cisco-Linksys, LLC",
+       [3]byte{0, 28, 17}:     "ARRIS Group, Inc.",
+       [3]byte{0, 28, 18}:     "ARRIS Group, Inc.",
+       [3]byte{0, 28, 19}:     "OPTSYS TECHNOLOGY CO., LTD.",
+       [3]byte{0, 28, 20}:     "VMware, Inc.",
+       [3]byte{0, 28, 21}:     "iPhotonix LLC",
+       [3]byte{0, 28, 22}:     "ThyssenKrupp Elevator",
+       [3]byte{0, 28, 23}:     "Nortel Networks",
+       [3]byte{0, 28, 24}:     "Sicert S.r.L.",
+       [3]byte{0, 28, 25}:     "secunet Security Networks AG",
+       [3]byte{0, 28, 26}:     "Thomas Instrumentation, Inc",
+       [3]byte{0, 28, 27}:     "Hyperstone GmbH",
+       [3]byte{0, 28, 28}:     "Center Communication Systems GmbH",
+       [3]byte{0, 28, 29}:     "CHENZHOU GOSPELL DIGITAL TECHNOLOGY CO.,LTD",
+       [3]byte{0, 28, 30}:     "emtrion GmbH",
+       [3]byte{0, 28, 31}:     "Quest Retail Technology Pty Ltd",
+       [3]byte{0, 28, 32}:     "CLB Benelux",
+       [3]byte{0, 28, 33}:     "Nucsafe Inc.",
+       [3]byte{0, 28, 34}:     "Aeris Elettronica s.r.l.",
+       [3]byte{0, 28, 35}:     "Dell Inc.",
+       [3]byte{0, 28, 36}:     "Formosa Wireless Systems Corp.",
+       [3]byte{0, 28, 37}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 28, 38}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 28, 39}:     "Sunell Electronics Co.",
+       [3]byte{0, 28, 40}:     "Sphairon Technologies GmbH",
+       [3]byte{0, 28, 41}:     "CORE DIGITAL ELECTRONICS CO., LTD",
+       [3]byte{0, 28, 42}:     "Envisacor Technologies Inc.",
+       [3]byte{0, 28, 43}:     "Alertme.com Limited",
+       [3]byte{0, 28, 44}:     "Synapse",
+       [3]byte{0, 28, 45}:     "FlexRadio Systems",
+       [3]byte{0, 28, 46}:     "HPN Supply Chain",
+       [3]byte{0, 28, 47}:     "Pfister GmbH",
+       [3]byte{0, 28, 48}:     "Mode Lighting (UK ) Ltd.",
+       [3]byte{0, 28, 49}:     "Mobile XP Technology Co., LTD",
+       [3]byte{0, 28, 50}:     "Telian Corporation",
+       [3]byte{0, 28, 51}:     "Sutron",
+       [3]byte{0, 28, 52}:     "HUEY CHIAO INTERNATIONAL CO., LTD.",
+       [3]byte{0, 28, 53}:     "Nokia Danmark A/S",
+       [3]byte{0, 28, 54}:     "iNEWiT NV",
+       [3]byte{0, 28, 55}:     "Callpod, Inc.",
+       [3]byte{0, 28, 56}:     "Bio-Rad Laboratories, Inc.",
+       [3]byte{0, 28, 57}:     "S Netsystems Inc.",
+       [3]byte{0, 28, 58}:     "Element Labs, Inc.",
+       [3]byte{0, 28, 59}:     "AmRoad Technology Inc.",
+       [3]byte{0, 28, 60}:     "Seon Design Inc.",
+       [3]byte{0, 28, 61}:     "WaveStorm",
+       [3]byte{0, 28, 62}:     "ECKey Corporation",
+       [3]byte{0, 28, 63}:     "International Police Technologies, Inc.",
+       [3]byte{0, 28, 64}:     "VDG-Security bv",
+       [3]byte{0, 28, 65}:     "scemtec Transponder Technology GmbH",
+       [3]byte{0, 28, 66}:     "Parallels, Inc.",
+       [3]byte{0, 28, 67}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 28, 68}:     "Bosch Security Systems BV",
+       [3]byte{0, 28, 69}:     "Chenbro Micom Co., Ltd.",
+       [3]byte{0, 28, 70}:     "QTUM",
+       [3]byte{0, 28, 71}:     "Hangzhou Hollysys Automation Co., Ltd",
+       [3]byte{0, 28, 72}:     "WiDeFi, Inc.",
+       [3]byte{0, 28, 73}:     "Zoltan Technology Inc.",
+       [3]byte{0, 28, 74}:     "AVM GmbH",
+       [3]byte{0, 28, 75}:     "Gener8, Inc.",
+       [3]byte{0, 28, 76}:     "Petrotest Instruments",
+       [3]byte{0, 28, 77}:     "Aplix IP Holdings Corporation",
+       [3]byte{0, 28, 78}:     "TASA International Limited",
+       [3]byte{0, 28, 79}:     "MACAB AB",
+       [3]byte{0, 28, 80}:     "TCL Technoly Electronics (Huizhou) Co., Ltd.",
+       [3]byte{0, 28, 81}:     "Celeno Communications",
+       [3]byte{0, 28, 82}:     "VISIONEE SRL",
+       [3]byte{0, 28, 83}:     "Synergy Lighting Controls",
+       [3]byte{0, 28, 84}:     "Hillstone Networks Inc",
+       [3]byte{0, 28, 85}:     "Shenzhen Kaifa Technology Co.",
+       [3]byte{0, 28, 86}:     "Pado Systems, Inc.",
+       [3]byte{0, 28, 87}:     "Cisco Systems, Inc",
+       [3]byte{0, 28, 88}:     "Cisco Systems, Inc",
+       [3]byte{0, 28, 89}:     "DEVON IT",
+       [3]byte{0, 28, 90}:     "Advanced Relay Corporation",
+       [3]byte{0, 28, 91}:     "Chubb Electronic Security Systems Ltd",
+       [3]byte{0, 28, 92}:     "Integrated Medical Systems, Inc.",
+       [3]byte{0, 28, 93}:     "Leica Microsystems",
+       [3]byte{0, 28, 94}:     "ASTON France",
+       [3]byte{0, 28, 95}:     "Winland Electronics, Inc.",
+       [3]byte{0, 28, 96}:     "CSP Frontier Technologies,Inc.",
+       [3]byte{0, 28, 97}:     "Galaxy  Microsystems LImited",
+       [3]byte{0, 28, 98}:     "LG Electronics (Mobile Communications)",
+       [3]byte{0, 28, 99}:     "TRUEN",
+       [3]byte{0, 28, 100}:    "Landis+Gyr",
+       [3]byte{0, 28, 101}:    "JoeScan, Inc.",
+       [3]byte{0, 28, 102}:    "UCAMP CO.,LTD",
+       [3]byte{0, 28, 103}:    "Pumpkin Networks, Inc.",
+       [3]byte{0, 28, 104}:    "Anhui Sun Create Electronics Co., Ltd",
+       [3]byte{0, 28, 105}:    "Packet Vision Ltd",
+       [3]byte{0, 28, 106}:    "Weiss Engineering Ltd.",
+       [3]byte{0, 28, 107}:    "COVAX  Co. Ltd",
+       [3]byte{0, 28, 108}:    "30805",
+       [3]byte{0, 28, 109}:    "KYOHRITSU ELECTRONIC INDUSTRY CO., LTD.",
+       [3]byte{0, 28, 110}:    "Newbury Networks, Inc.",
+       [3]byte{0, 28, 111}:    "Emfit Ltd",
+       [3]byte{0, 28, 112}:    "NOVACOMM LTDA",
+       [3]byte{0, 28, 113}:    "Emergent Electronics",
+       [3]byte{0, 28, 114}:    "Mayer & Cie GmbH & Co KG",
+       [3]byte{0, 28, 115}:    "Arista Networks",
+       [3]byte{0, 28, 116}:    "Syswan Technologies Inc.",
+       [3]byte{0, 28, 117}:    "Segnet Ltd.",
+       [3]byte{0, 28, 118}:    "The Wandsworth Group Ltd",
+       [3]byte{0, 28, 119}:    "Prodys",
+       [3]byte{0, 28, 120}:    "WYPLAY SAS",
+       [3]byte{0, 28, 121}:    "Cohesive Financial Technologies LLC",
+       [3]byte{0, 28, 122}:    "Perfectone Netware Company Ltd",
+       [3]byte{0, 28, 123}:    "Castlenet Technology Inc.",
+       [3]byte{0, 28, 124}:    "PERQ SYSTEMS CORPORATION",
+       [3]byte{0, 28, 125}:    "Excelpoint Manufacturing Pte Ltd",
+       [3]byte{0, 28, 126}:    "Toshiba",
+       [3]byte{0, 28, 127}:    "Check Point Software Technologies",
+       [3]byte{0, 28, 128}:    "New Business Division/Rhea-Information CO., LTD.",
+       [3]byte{0, 28, 129}:    "NextGen Venturi LTD",
+       [3]byte{0, 28, 130}:    "Genew Technologies",
+       [3]byte{0, 28, 131}:    "New Level Telecom Co., Ltd.",
+       [3]byte{0, 28, 132}:    "STL Solution Co.,Ltd.",
+       [3]byte{0, 28, 133}:    "Eunicorn",
+       [3]byte{0, 28, 134}:    "Cranite Systems, Inc.",
+       [3]byte{0, 28, 135}:    "Uriver Inc.",
+       [3]byte{0, 28, 136}:    "TRANSYSTEM INC.",
+       [3]byte{0, 28, 137}:    "Force Communications, Inc.",
+       [3]byte{0, 28, 138}:    "Cirrascale Corporation",
+       [3]byte{0, 28, 139}:    "MJ Innovations Ltd.",
+       [3]byte{0, 28, 140}:    "DIAL TECHNOLOGY LTD.",
+       [3]byte{0, 28, 141}:    "Mesa Imaging",
+       [3]byte{0, 28, 142}:    "Alcatel-Lucent IPD",
+       [3]byte{0, 28, 143}:    "Advanced Electronic Design, Inc.",
+       [3]byte{0, 28, 144}:    "Empacket Corporation",
+       [3]byte{0, 28, 145}:    "Gefen Inc.",
+       [3]byte{0, 28, 146}:    "Tervela",
+       [3]byte{0, 28, 147}:    "ExaDigm Inc",
+       [3]byte{0, 28, 148}:    "LI-COR Biosciences",
+       [3]byte{0, 28, 149}:    "Opticomm Corporation",
+       [3]byte{0, 28, 150}:    "Linkwise Technology Pte Ltd",
+       [3]byte{0, 28, 151}:    "Enzytek Technology Inc.,",
+       [3]byte{0, 28, 152}:    "LUCKY TECHNOLOGY (HK) COMPANY LIMITED",
+       [3]byte{0, 28, 153}:    "Shunra Software Ltd.",
+       [3]byte{0, 28, 154}:    "Nokia Danmark A/S",
+       [3]byte{0, 28, 155}:    "FEIG ELECTRONIC GmbH",
+       [3]byte{0, 28, 156}:    "Nortel Networks",
+       [3]byte{0, 28, 157}:    "Liecthi AG",
+       [3]byte{0, 28, 158}:    "Dualtech IT AB",
+       [3]byte{0, 28, 159}:    "Razorstream, LLC",
+       [3]byte{0, 28, 160}:    "Production Resource Group, LLC",
+       [3]byte{0, 28, 161}:    "AKAMAI TECHNOLOGIES, INC.",
+       [3]byte{0, 28, 162}:    "ADB Broadband Italia",
+       [3]byte{0, 28, 163}:    "Terra",
+       [3]byte{0, 28, 164}:    "Sony Mobile Communications AB",
+       [3]byte{0, 28, 165}:    "Zygo Corporation",
+       [3]byte{0, 28, 166}:    "Win4NET",
+       [3]byte{0, 28, 167}:    "International Quartz Limited",
+       [3]byte{0, 28, 168}:    "AirTies Wireless Networks",
+       [3]byte{0, 28, 169}:    "Audiomatica Srl",
+       [3]byte{0, 28, 170}:    "Bellon Pty Ltd",
+       [3]byte{0, 28, 171}:    "Meyer Sound Laboratories, Inc.",
+       [3]byte{0, 28, 172}:    "Qniq Technology Corp.",
+       [3]byte{0, 28, 173}:    "Wuhan Telecommunication Devices Co.,Ltd",
+       [3]byte{0, 28, 174}:    "WiChorus, Inc.",
+       [3]byte{0, 28, 175}:    "Plato Networks Inc.",
+       [3]byte{0, 28, 176}:    "Cisco Systems, Inc",
+       [3]byte{0, 28, 177}:    "Cisco Systems, Inc",
+       [3]byte{0, 28, 178}:    "BPT SPA",
+       [3]byte{0, 28, 179}:    "Apple, Inc.",
+       [3]byte{0, 28, 180}:    "Iridium Satellite LLC",
+       [3]byte{0, 28, 181}:    "Neihua Network Technology Co.,LTD.(NHN)",
+       [3]byte{0, 28, 182}:    "Duzon CNT Co., Ltd.",
+       [3]byte{0, 28, 183}:    "USC DigiArk Corporation",
+       [3]byte{0, 28, 184}:    "CBC Co., Ltd",
+       [3]byte{0, 28, 185}:    "KWANG SUNG ELECTRONICS CO., LTD.",
+       [3]byte{0, 28, 186}:    "VerScient, Inc.",
+       [3]byte{0, 28, 187}:    "MusicianLink",
+       [3]byte{0, 28, 188}:    "CastGrabber, LLC",
+       [3]byte{0, 28, 189}:    "Ezze Mobile Tech., Inc.",
+       [3]byte{0, 28, 190}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 28, 191}:    "Intel Corporate",
+       [3]byte{0, 28, 192}:    "Intel Corporate",
+       [3]byte{0, 28, 193}:    "ARRIS Group, Inc.",
+       [3]byte{0, 28, 194}:    "Part II Research, Inc.",
+       [3]byte{0, 28, 195}:    "ARRIS Group, Inc.",
+       [3]byte{0, 28, 196}:    "Hewlett Packard",
+       [3]byte{0, 28, 197}:    "3Com Ltd",
+       [3]byte{0, 28, 198}:    "ProStor Systems",
+       [3]byte{0, 28, 199}:    "Rembrandt Technologies, LLC d/b/a REMSTREAM",
+       [3]byte{0, 28, 200}:    "INDUSTRONIC Industrie-Electronic GmbH & Co. KG",
+       [3]byte{0, 28, 201}:    "Kaise Electronic Technology Co., Ltd.",
+       [3]byte{0, 28, 202}:    "Shanghai Gaozhi Science & Technology Development Co.",
+       [3]byte{0, 28, 203}:    "Forth Corporation Public Company Limited",
+       [3]byte{0, 28, 204}:    "BlackBerry RTS",
+       [3]byte{0, 28, 205}:    "Alektrona Corporation",
+       [3]byte{0, 28, 206}:    "By Techdesign",
+       [3]byte{0, 28, 207}:    "LIMETEK",
+       [3]byte{0, 28, 208}:    "Circleone Co.,Ltd.",
+       [3]byte{0, 28, 209}:    "Waves Audio LTD",
+       [3]byte{0, 28, 210}:    "King Champion (Hong Kong) Limited",
+       [3]byte{0, 28, 211}:    "ZP Engineering SEL",
+       [3]byte{0, 28, 212}:    "Nokia Danmark A/S",
+       [3]byte{0, 28, 213}:    "ZeeVee, Inc.",
+       [3]byte{0, 28, 214}:    "Nokia Danmark A/S",
+       [3]byte{0, 28, 215}:    "Harman/Becker Automotive Systems GmbH",
+       [3]byte{0, 28, 216}:    "BlueAnt Wireless",
+       [3]byte{0, 28, 217}:    "GlobalTop Technology Inc.",
+       [3]byte{0, 28, 218}:    "Exegin Technologies Limited",
+       [3]byte{0, 28, 219}:    "CARPOINT CO.,LTD",
+       [3]byte{0, 28, 220}:    "Custom Computer Services, Inc.",
+       [3]byte{0, 28, 221}:    "COWBELL ENGINEERING CO., LTD.",
+       [3]byte{0, 28, 222}:    "Interactive Multimedia eXchange Inc.",
+       [3]byte{0, 28, 223}:    "Belkin International Inc.",
+       [3]byte{0, 28, 224}:    "DASAN TPS",
+       [3]byte{0, 28, 225}:    "INDRA SISTEMAS, S.A.",
+       [3]byte{0, 28, 226}:    "Attero Tech, LLC.",
+       [3]byte{0, 28, 227}:    "Optimedical Systems",
+       [3]byte{0, 28, 228}:    "EleSy JSC",
+       [3]byte{0, 28, 229}:    "MBS Electronic Systems GmbH",
+       [3]byte{0, 28, 230}:    "INNES",
+       [3]byte{0, 28, 231}:    "Rocon PLC Research Centre",
+       [3]byte{0, 28, 232}:    "Cummins Inc",
+       [3]byte{0, 28, 233}:    "Galaxy Technology Limited",
+       [3]byte{0, 28, 234}:    "Scientific-Atlanta, Inc",
+       [3]byte{0, 28, 235}:    "Nortel Networks",
+       [3]byte{0, 28, 236}:    "Mobilesoft (Aust.) Pty Ltd",
+       [3]byte{0, 28, 237}:    "ENVIRONNEMENT SA",
+       [3]byte{0, 28, 238}:    "SHARP Corporation",
+       [3]byte{0, 28, 239}:    "Primax Electronics Ltd.",
+       [3]byte{0, 28, 240}:    "D-Link Corporation",
+       [3]byte{0, 28, 241}:    "SUPoX Technology Co. , LTD.",
+       [3]byte{0, 28, 242}:    "Tenlon Technology Co.,Ltd.",
+       [3]byte{0, 28, 243}:    "EVS BROADCAST EQUIPMENT",
+       [3]byte{0, 28, 244}:    "Media Technology Systems Inc",
+       [3]byte{0, 28, 245}:    "Wiseblue Technology Limited",
+       [3]byte{0, 28, 246}:    "Cisco Systems, Inc",
+       [3]byte{0, 28, 247}:    "AudioScience",
+       [3]byte{0, 28, 248}:    "Parade Technologies, Ltd.",
+       [3]byte{0, 28, 249}:    "Cisco Systems, Inc",
+       [3]byte{0, 28, 250}:    "Alarm.com",
+       [3]byte{0, 28, 251}:    "ARRIS Group, Inc.",
+       [3]byte{0, 28, 252}:    "Sumitomo Electric Industries,Ltd",
+       [3]byte{0, 28, 253}:    "Universal Electronics, Inc.",
+       [3]byte{0, 28, 254}:    "Quartics Inc",
+       [3]byte{0, 28, 255}:    "Napera Networks Inc",
+       [3]byte{0, 29, 0}:      "Brivo Systems, LLC",
+       [3]byte{0, 29, 1}:      "Neptune Digital",
+       [3]byte{0, 29, 2}:      "Cybertech Telecom Development",
+       [3]byte{0, 29, 3}:      "Design Solutions Inc.",
+       [3]byte{0, 29, 4}:      "Zipit Wireless, Inc.",
+       [3]byte{0, 29, 5}:      "Eaton Corporation",
+       [3]byte{0, 29, 6}:      "HM Electronics, Inc.",
+       [3]byte{0, 29, 7}:      "Shenzhen Sang Fei Consumer Communications Co.,Ltd",
+       [3]byte{0, 29, 8}:      "Jiangsu Yinhe  Electronics Co.,Ltd.",
+       [3]byte{0, 29, 9}:      "Dell Inc.",
+       [3]byte{0, 29, 10}:     "Davis Instruments, Inc.",
+       [3]byte{0, 29, 11}:     "Power Standards Lab",
+       [3]byte{0, 29, 12}:     "MobileCompia",
+       [3]byte{0, 29, 13}:     "Sony Interactive Entertainment Inc.",
+       [3]byte{0, 29, 14}:     "Agapha Technology co., Ltd.",
+       [3]byte{0, 29, 15}:     "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 29, 16}:     "LightHaus Logic, Inc.",
+       [3]byte{0, 29, 17}:     "Analogue & Micro Ltd",
+       [3]byte{0, 29, 18}:     "ROHM CO., LTD.",
+       [3]byte{0, 29, 19}:     "NextGTV",
+       [3]byte{0, 29, 20}:     "SPERADTONE INFORMATION TECHNOLOGY LIMITED",
+       [3]byte{0, 29, 21}:     "Shenzhen Dolphin Electronic Co., Ltd",
+       [3]byte{0, 29, 22}:     "SFR",
+       [3]byte{0, 29, 23}:     "Digital Sky Corporation",
+       [3]byte{0, 29, 24}:     "Power Innovation GmbH",
+       [3]byte{0, 29, 25}:     "Arcadyan Technology Corporation",
+       [3]byte{0, 29, 26}:     "OvisLink S.A.",
+       [3]byte{0, 29, 27}:     "Sangean Electronics Inc.",
+       [3]byte{0, 29, 28}:     "Gennet s.a.",
+       [3]byte{0, 29, 29}:     "Inter-M Corporation",
+       [3]byte{0, 29, 30}:     "KYUSHU TEN CO.,LTD",
+       [3]byte{0, 29, 31}:     "Siauliu Tauro Televizoriai, JSC",
+       [3]byte{0, 29, 32}:     "Comtrend Corporation",
+       [3]byte{0, 29, 33}:     "Alcad SL",
+       [3]byte{0, 29, 34}:     "Foss Analytical A/S",
+       [3]byte{0, 29, 35}:     "SENSUS",
+       [3]byte{0, 29, 36}:     "Aclara Power-Line Systems Inc.",
+       [3]byte{0, 29, 37}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 29, 38}:     "Rockridgesound Technology Co.",
+       [3]byte{0, 29, 39}:     "NAC-INTERCOM",
+       [3]byte{0, 29, 40}:     "Sony Mobile Communications AB",
+       [3]byte{0, 29, 41}:     "Doro AB",
+       [3]byte{0, 29, 42}:     "SHENZHEN BUL-TECH CO.,LTD.",
+       [3]byte{0, 29, 43}:     "Wuhan Pont Technology CO. , LTD",
+       [3]byte{0, 29, 44}:     "Wavetrend Technologies (Pty) Limited",
+       [3]byte{0, 29, 45}:     "Pylone, Inc.",
+       [3]byte{0, 29, 46}:     "Ruckus Wireless",
+       [3]byte{0, 29, 47}:     "QuantumVision Corporation",
+       [3]byte{0, 29, 48}:     "YX Wireless S.A.",
+       [3]byte{0, 29, 49}:     "HIGHPRO INTERNATIONAL R&D CO,.LTD.",
+       [3]byte{0, 29, 50}:     "Longkay Communication & Technology (Shanghai) Co. Ltd",
+       [3]byte{0, 29, 51}:     "Maverick Systems Inc.",
+       [3]byte{0, 29, 52}:     "SYRIS Technology Corp",
+       [3]byte{0, 29, 53}:     "Viconics Electronics Inc.",
+       [3]byte{0, 29, 54}:     "ELECTRONICS CORPORATION OF INDIA LIMITED",
+       [3]byte{0, 29, 55}:     "Thales-Panda Transportation System",
+       [3]byte{0, 29, 56}:     "Seagate Technology",
+       [3]byte{0, 29, 57}:     "MOOHADIGITAL CO., LTD",
+       [3]byte{0, 29, 58}:     "mh acoustics LLC",
+       [3]byte{0, 29, 59}:     "Nokia Danmark A/S",
+       [3]byte{0, 29, 60}:     "Muscle Corporation",
+       [3]byte{0, 29, 61}:     "Avidyne Corporation",
+       [3]byte{0, 29, 62}:     "SAKA TECHNO SCIENCE CO.,LTD",
+       [3]byte{0, 29, 63}:     "Mitron Pty Ltd",
+       [3]byte{0, 29, 64}:     "Intel – GE Care Innovations LLC",
+       [3]byte{0, 29, 65}:     "Hardy Instruments",
+       [3]byte{0, 29, 66}:     "Nortel Networks",
+       [3]byte{0, 29, 67}:     "Shenzhen G-link Digital Technology Co., Ltd.",
+       [3]byte{0, 29, 68}:     "Krohne",
+       [3]byte{0, 29, 69}:     "Cisco Systems, Inc",
+       [3]byte{0, 29, 70}:     "Cisco Systems, Inc",
+       [3]byte{0, 29, 71}:     "Covote GmbH & Co KG",
+       [3]byte{0, 29, 72}:     "Sensor-Technik Wiedemann GmbH",
+       [3]byte{0, 29, 73}:     "Innovation Wireless Inc.",
+       [3]byte{0, 29, 74}:     "Carestream Health, Inc.",
+       [3]byte{0, 29, 75}:     "Grid Connect Inc.",
+       [3]byte{0, 29, 76}:     "Alcatel-Lucent",
+       [3]byte{0, 29, 77}:     "Adaptive Recognition Hungary, Inc",
+       [3]byte{0, 29, 78}:     "TCM Mobile LLC",
+       [3]byte{0, 29, 79}:     "Apple, Inc.",
+       [3]byte{0, 29, 80}:     "SPINETIX SA",
+       [3]byte{0, 29, 81}:     "Babcock & Wilcox Power Generation Group, Inc",
+       [3]byte{0, 29, 82}:     "Defzone B.V.",
+       [3]byte{0, 29, 83}:     "S&O Electronics (Malaysia) Sdn. Bhd.",
+       [3]byte{0, 29, 84}:     "Sunnic Technology & Merchandise INC.",
+       [3]byte{0, 29, 85}:     "ZANTAZ, Inc",
+       [3]byte{0, 29, 86}:     "Kramer Electronics Ltd.",
+       [3]byte{0, 29, 87}:     "CAETEC Messtechnik",
+       [3]byte{0, 29, 88}:     "CQ Inc",
+       [3]byte{0, 29, 89}:     "Mitra Energy & Infrastructure",
+       [3]byte{0, 29, 90}:     "2Wire Inc",
+       [3]byte{0, 29, 91}:     "Tecvan Informática Ltda",
+       [3]byte{0, 29, 92}:     "Tom Communication Industrial Co.,Ltd.",
+       [3]byte{0, 29, 93}:     "Control Dynamics Pty. Ltd.",
+       [3]byte{0, 29, 94}:     "COMING MEDIA CORP.",
+       [3]byte{0, 29, 95}:     "OverSpeed SARL",
+       [3]byte{0, 29, 96}:     "ASUSTek COMPUTER INC.",
+       [3]byte{0, 29, 97}:     "BIJ Corporation",
+       [3]byte{0, 29, 98}:     "InPhase Technologies",
+       [3]byte{0, 29, 99}:     "Miele & Cie. KG",
+       [3]byte{0, 29, 100}:    "Adam Communications Systems Int Ltd",
+       [3]byte{0, 29, 101}:    "Microwave Radio Communications",
+       [3]byte{0, 29, 102}:    "Hyundai Telecom",
+       [3]byte{0, 29, 103}:    "AMEC",
+       [3]byte{0, 29, 104}:    "Thomson Telecom Belgium",
+       [3]byte{0, 29, 105}:    "Knorr-Bremse IT-Services GmbH",
+       [3]byte{0, 29, 106}:    "Alpha Networks Inc.",
+       [3]byte{0, 29, 107}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 108}:    "ClariPhy Communications, Inc.",
+       [3]byte{0, 29, 109}:    "Confidant International LLC",
+       [3]byte{0, 29, 110}:    "Nokia Danmark A/S",
+       [3]byte{0, 29, 111}:    "Chainzone Technology Co., Ltd",
+       [3]byte{0, 29, 112}:    "Cisco Systems, Inc",
+       [3]byte{0, 29, 113}:    "Cisco Systems, Inc",
+       [3]byte{0, 29, 114}:    "Wistron Corporation",
+       [3]byte{0, 29, 115}:    "BUFFALO.INC",
+       [3]byte{0, 29, 116}:    "Tianjin China-Silicon Microelectronics Co., Ltd.",
+       [3]byte{0, 29, 117}:    "Radioscape PLC",
+       [3]byte{0, 29, 118}:    "Eyeheight Ltd.",
+       [3]byte{0, 29, 119}:    "NSGate",
+       [3]byte{0, 29, 120}:    "Invengo Information Technology Co.,Ltd",
+       [3]byte{0, 29, 121}:    "SIGNAMAX LLC",
+       [3]byte{0, 29, 122}:    "Wideband Semiconductor, Inc.",
+       [3]byte{0, 29, 123}:    "Ice Energy, Inc.",
+       [3]byte{0, 29, 124}:    "ABE Elettronica S.p.A.",
+       [3]byte{0, 29, 125}:    "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{0, 29, 126}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 29, 127}:    "Tekron International Ltd",
+       [3]byte{0, 29, 128}:    "Beijing Huahuan Eletronics Co.,Ltd",
+       [3]byte{0, 29, 129}:    "GUANGZHOU GATEWAY ELECTRONICS CO., LTD",
+       [3]byte{0, 29, 130}:    "GN Netcom A/S",
+       [3]byte{0, 29, 131}:    "Emitech Corporation",
+       [3]byte{0, 29, 132}:    "Gateway, Inc.",
+       [3]byte{0, 29, 133}:    "Call Direct Cellular Solutions",
+       [3]byte{0, 29, 134}:    "Shinwa Industries(China) Ltd.",
+       [3]byte{0, 29, 135}:    "VigTech Labs Sdn Bhd",
+       [3]byte{0, 29, 136}:    "Clearwire",
+       [3]byte{0, 29, 137}:    "VaultStor Corporation",
+       [3]byte{0, 29, 138}:    "TechTrex Inc",
+       [3]byte{0, 29, 139}:    "ADB Broadband Italia",
+       [3]byte{0, 29, 140}:    "La Crosse Technology LTD",
+       [3]byte{0, 29, 141}:    "Raytek GmbH",
+       [3]byte{0, 29, 142}:    "Alereon, Inc.",
+       [3]byte{0, 29, 143}:    "PureWave Networks",
+       [3]byte{0, 29, 144}:    "EMCO Flow Systems",
+       [3]byte{0, 29, 145}:    "Digitize, Inc",
+       [3]byte{0, 29, 146}:    "MICRO-STAR INT'L CO.,LTD.",
+       [3]byte{0, 29, 147}:    "Modacom",
+       [3]byte{0, 29, 148}:    "Climax Technology Co., Ltd",
+       [3]byte{0, 29, 149}:    "Flash, Inc.",
+       [3]byte{0, 29, 150}:    "WatchGuard Video",
+       [3]byte{0, 29, 151}:    "Alertus Technologies LLC",
+       [3]byte{0, 29, 152}:    "Nokia Danmark A/S",
+       [3]byte{0, 29, 153}:    "Cyan Optic, Inc.",
+       [3]byte{0, 29, 154}:    "GODEX INTERNATIONAL CO., LTD",
+       [3]byte{0, 29, 155}:    "Hokuyo Automatic Co., Ltd.",
+       [3]byte{0, 29, 156}:    "Rockwell Automation",
+       [3]byte{0, 29, 157}:    "ARTJOY INTERNATIONAL LIMITED",
+       [3]byte{0, 29, 158}:    "AXION TECHNOLOGIES",
+       [3]byte{0, 29, 159}:    "MATT   R.P.Traczynscy Sp.J.",
+       [3]byte{0, 29, 160}:    "Heng Yu Electronic Manufacturing Company Limited",
+       [3]byte{0, 29, 161}:    "Cisco Systems, Inc",
+       [3]byte{0, 29, 162}:    "Cisco Systems, Inc",
+       [3]byte{0, 29, 163}:    "SabiOso",
+       [3]byte{0, 29, 164}:    "Hangzhou System Technology CO., LTD",
+       [3]byte{0, 29, 165}:    "WB Electronics",
+       [3]byte{0, 29, 166}:    "Media Numerics Limited",
+       [3]byte{0, 29, 167}:    "Seamless Internet",
+       [3]byte{0, 29, 168}:    "Takahata Electronics Co.,Ltd",
+       [3]byte{0, 29, 169}:    "Castles Technology, Co., LTD",
+       [3]byte{0, 29, 170}:    "DrayTek Corp.",
+       [3]byte{0, 29, 171}:    "SwissQual License AG",
+       [3]byte{0, 29, 172}:    "Gigamon Systems LLC",
+       [3]byte{0, 29, 173}:    "Sinotech Engineering Consultants, Inc.  Geotechnical Enginee",
+       [3]byte{0, 29, 174}:    "CHANG TSENG TECHNOLOGY CO., LTD",
+       [3]byte{0, 29, 175}:    "Nortel Networks",
+       [3]byte{0, 29, 176}:    "FuJian HengTong Information Technology Co.,Ltd",
+       [3]byte{0, 29, 177}:    "Crescendo Networks",
+       [3]byte{0, 29, 178}:    "HOKKAIDO ELECTRIC ENGINEERING CO.,LTD.",
+       [3]byte{0, 29, 179}:    "HPN Supply Chain",
+       [3]byte{0, 29, 180}:    "KUMHO ENG CO.,LTD",
+       [3]byte{0, 29, 181}:    "Juniper Networks",
+       [3]byte{0, 29, 182}:    "BestComm Networks, Inc.",
+       [3]byte{0, 29, 183}:    "Tendril Networks, Inc.",
+       [3]byte{0, 29, 184}:    "Intoto Inc.",
+       [3]byte{0, 29, 185}:    "Wellspring Wireless",
+       [3]byte{0, 29, 186}:    "Sony Corporation",
+       [3]byte{0, 29, 187}:    "Dynamic System Electronics Corp.",
+       [3]byte{0, 29, 188}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 29, 189}:    "Versamed Inc.",
+       [3]byte{0, 29, 190}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 191}:    "Radiient Technologies, Inc.",
+       [3]byte{0, 29, 192}:    "Enphase Energy",
+       [3]byte{0, 29, 193}:    "Audinate Pty L",
+       [3]byte{0, 29, 194}:    "XORTEC OY",
+       [3]byte{0, 29, 195}:    "RIKOR TV, Ltd",
+       [3]byte{0, 29, 196}:    "AIOI Systems Co., Ltd.",
+       [3]byte{0, 29, 197}:    "Beijing Jiaxun Feihong Electricial Co., Ltd.",
+       [3]byte{0, 29, 198}:    "SNR Inc.",
+       [3]byte{0, 29, 199}:    "L-3 Communications Geneva Aerospace",
+       [3]byte{0, 29, 200}:    "Navionics Research Inc., dba SCADAmetrics",
+       [3]byte{0, 29, 201}:    "GainSpan Corp.",
+       [3]byte{0, 29, 202}:    "PAV Electronics Limited",
+       [3]byte{0, 29, 203}:    "Exéns Development Oy",
+       [3]byte{0, 29, 204}:    "Ayon Cyber Security, Inc",
+       [3]byte{0, 29, 205}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 206}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 207}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 208}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 209}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 210}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 211}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 212}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 213}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 214}:    "ARRIS Group, Inc.",
+       [3]byte{0, 29, 215}:    "Algolith",
+       [3]byte{0, 29, 216}:    "Microsoft Corporation",
+       [3]byte{0, 29, 217}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 29, 218}:    "Mikroelektronika spol. s r. o.",
+       [3]byte{0, 29, 219}:    "C-BEL Corporation",
+       [3]byte{0, 29, 220}:    "HangZhou DeChangLong Tech&Info Co.,Ltd",
+       [3]byte{0, 29, 221}:    "DAT H.K. LIMITED",
+       [3]byte{0, 29, 222}:    "Zhejiang Broadcast&Television Technology Co.,Ltd.",
+       [3]byte{0, 29, 223}:    "Sunitec Enterprise Co., Ltd.",
+       [3]byte{0, 29, 224}:    "Intel Corporate",
+       [3]byte{0, 29, 225}:    "Intel Corporate",
+       [3]byte{0, 29, 226}:    "Radionor Communications",
+       [3]byte{0, 29, 227}:    "Intuicom",
+       [3]byte{0, 29, 228}:    "Visioneered Image Systems",
+       [3]byte{0, 29, 229}:    "Cisco Systems, Inc",
+       [3]byte{0, 29, 230}:    "Cisco Systems, Inc",
+       [3]byte{0, 29, 231}:    "Marine Sonic Technology, Ltd.",
+       [3]byte{0, 29, 232}:    "Nikko Denki Tsushin Corporation(NDTC)",
+       [3]byte{0, 29, 233}:    "Nokia Danmark A/S",
+       [3]byte{0, 29, 234}:    "Commtest Instruments Ltd",
+       [3]byte{0, 29, 235}:    "DINEC International",
+       [3]byte{0, 29, 236}:    "Marusys",
+       [3]byte{0, 29, 237}:    "Grid Net, Inc.",
+       [3]byte{0, 29, 238}:    "NEXTVISION SISTEMAS DIGITAIS DE TELEVISÃO LTDA.",
+       [3]byte{0, 29, 239}:    "TRIMM, INC.",
+       [3]byte{0, 29, 240}:    "Vidient Systems, Inc.",
+       [3]byte{0, 29, 241}:    "Intego Systems, Inc.",
+       [3]byte{0, 29, 242}:    "Netflix, Inc.",
+       [3]byte{0, 29, 243}:    "SBS Science & Technology Co., Ltd",
+       [3]byte{0, 29, 244}:    "Magellan Technology Pty Limited",
+       [3]byte{0, 29, 245}:    "Sunshine Co,LTD",
+       [3]byte{0, 29, 246}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 29, 247}:    "R. STAHL Schaltgeräte GmbH",
+       [3]byte{0, 29, 248}:    "Webpro Vision Technology Corporation",
+       [3]byte{0, 29, 249}:    "Cybiotronics (Far East) Limited",
+       [3]byte{0, 29, 250}:    "Fujian LANDI Commercial Equipment Co.,Ltd",
+       [3]byte{0, 29, 251}:    "NETCLEUS Systems Corporation",
+       [3]byte{0, 29, 252}:    "KSIC",
+       [3]byte{0, 29, 253}:    "Nokia Danmark A/S",
+       [3]byte{0, 29, 254}:    "Palm, Inc",
+       [3]byte{0, 29, 255}:    "Network Critical Solutions Ltd",
+       [3]byte{0, 30, 0}:      "Shantou Institute of Ultrasonic Instruments",
+       [3]byte{0, 30, 1}:      "Renesas Technology Sales Co., Ltd.",
+       [3]byte{0, 30, 2}:      "Sougou Keikaku Kougyou Co.,Ltd.",
+       [3]byte{0, 30, 3}:      "LiComm Co., Ltd.",
+       [3]byte{0, 30, 4}:      "Hanson Research Corporation",
+       [3]byte{0, 30, 5}:      "Xseed Technologies & Computing",
+       [3]byte{0, 30, 6}:      "WIBRAIN",
+       [3]byte{0, 30, 7}:      "Winy Technology Co., Ltd.",
+       [3]byte{0, 30, 8}:      "Centec Networks Inc",
+       [3]byte{0, 30, 9}:      "ZEFATEK Co.,LTD",
+       [3]byte{0, 30, 10}:     "Syba Tech Limited",
+       [3]byte{0, 30, 11}:     "Hewlett Packard",
+       [3]byte{0, 30, 12}:     "Sherwood Information Partners, Inc.",
+       [3]byte{0, 30, 13}:     "Micran Ltd.",
+       [3]byte{0, 30, 14}:     "MAXI VIEW HOLDINGS LIMITED",
+       [3]byte{0, 30, 15}:     "Briot International",
+       [3]byte{0, 30, 16}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 30, 17}:     "ELELUX INTERNATIONAL LTD",
+       [3]byte{0, 30, 18}:     "Ecolab",
+       [3]byte{0, 30, 19}:     "Cisco Systems, Inc",
+       [3]byte{0, 30, 20}:     "Cisco Systems, Inc",
+       [3]byte{0, 30, 21}:     "Beech Hill Electronics",
+       [3]byte{0, 30, 22}:     "Keytronix",
+       [3]byte{0, 30, 23}:     "STN BV",
+       [3]byte{0, 30, 24}:     "Radio Activity srl",
+       [3]byte{0, 30, 25}:     "GTRI",
+       [3]byte{0, 30, 26}:     "Best Source Taiwan Inc.",
+       [3]byte{0, 30, 27}:     "Digital Stream Technology, Inc.",
+       [3]byte{0, 30, 28}:     "SWS Australia Pty Limited",
+       [3]byte{0, 30, 29}:     "East Coast Datacom, Inc.",
+       [3]byte{0, 30, 30}:     "Honeywell Life Safety",
+       [3]byte{0, 30, 31}:     "Nortel Networks",
+       [3]byte{0, 30, 32}:     "Intertain Inc.",
+       [3]byte{0, 30, 33}:     "Qisda Corporation",
+       [3]byte{0, 30, 34}:     "ARVOO Imaging Products BV",
+       [3]byte{0, 30, 35}:     "Electronic Educational Devices, Inc",
+       [3]byte{0, 30, 36}:     "Zhejiang Bell Technology Co.,ltd",
+       [3]byte{0, 30, 37}:     "INTEK DIGITAL",
+       [3]byte{0, 30, 38}:     "Digifriends Co. Ltd",
+       [3]byte{0, 30, 39}:     "SBN TECH Co.,Ltd.",
+       [3]byte{0, 30, 40}:     "Lumexis Corporation",
+       [3]byte{0, 30, 41}:     "Hypertherm Inc",
+       [3]byte{0, 30, 42}:     "NETGEAR",
+       [3]byte{0, 30, 43}:     "Radio Systems Design, Inc.",
+       [3]byte{0, 30, 44}:     "CyVerse Corporation",
+       [3]byte{0, 30, 45}:     "STIM",
+       [3]byte{0, 30, 46}:     "SIRTI S.p.A.",
+       [3]byte{0, 30, 47}:     "DiMoto Pty Ltd",
+       [3]byte{0, 30, 48}:     "Shireen Inc",
+       [3]byte{0, 30, 49}:     "INFOMARK CO.,LTD.",
+       [3]byte{0, 30, 50}:     "Zensys",
+       [3]byte{0, 30, 51}:     "INVENTEC Corporation",
+       [3]byte{0, 30, 52}:     "CryptoMetrics",
+       [3]byte{0, 30, 53}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 30, 54}:     "IPTE",
+       [3]byte{0, 30, 55}:     "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{0, 30, 56}:     "Bluecard Software Technology Co., Ltd.",
+       [3]byte{0, 30, 57}:     "Comsys Communication Ltd.",
+       [3]byte{0, 30, 58}:     "Nokia Danmark A/S",
+       [3]byte{0, 30, 59}:     "Nokia Danmark A/S",
+       [3]byte{0, 30, 60}:     "Lyngbox Media AB",
+       [3]byte{0, 30, 61}:     "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 30, 62}:     "KMW Inc.",
+       [3]byte{0, 30, 63}:     "TrellisWare Technologies, Inc.",
+       [3]byte{0, 30, 64}:     "Shanghai DareGlobal Technologies Co.,Ltd",
+       [3]byte{0, 30, 65}:     "Microwave Communication & Component, Inc.",
+       [3]byte{0, 30, 66}:     "Teltonika",
+       [3]byte{0, 30, 67}:     "AISIN AW CO.,LTD.",
+       [3]byte{0, 30, 68}:     "SANTEC",
+       [3]byte{0, 30, 69}:     "Sony Mobile Communications AB",
+       [3]byte{0, 30, 70}:     "ARRIS Group, Inc.",
+       [3]byte{0, 30, 71}:     "PT. Hariff Daya Tunggal Engineering",
+       [3]byte{0, 30, 72}:     "Wi-Links",
+       [3]byte{0, 30, 73}:     "Cisco Systems, Inc",
+       [3]byte{0, 30, 74}:     "Cisco Systems, Inc",
+       [3]byte{0, 30, 75}:     "City Theatrical",
+       [3]byte{0, 30, 76}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 30, 77}:     "Welkin Sciences, LLC",
+       [3]byte{0, 30, 78}:     "DAKO EDV-Ingenieur- und Systemhaus GmbH",
+       [3]byte{0, 30, 79}:     "Dell Inc.",
+       [3]byte{0, 30, 80}:     "BATTISTONI RESEARCH",
+       [3]byte{0, 30, 81}:     "Converter Industry Srl",
+       [3]byte{0, 30, 82}:     "Apple, Inc.",
+       [3]byte{0, 30, 83}:     "Further Tech Co., LTD",
+       [3]byte{0, 30, 84}:     "TOYO ELECTRIC Corporation",
+       [3]byte{0, 30, 85}:     "COWON SYSTEMS,Inc.",
+       [3]byte{0, 30, 86}:     "Bally Wulff Entertainment GmbH",
+       [3]byte{0, 30, 87}:     "ALCOMA, spol. s r.o.",
+       [3]byte{0, 30, 88}:     "D-Link Corporation",
+       [3]byte{0, 30, 89}:     "Silicon Turnkey Express, LLC",
+       [3]byte{0, 30, 90}:     "ARRIS Group, Inc.",
+       [3]byte{0, 30, 91}:     "Unitron Company, Inc.",
+       [3]byte{0, 30, 92}:     "RB GeneralEkonomik",
+       [3]byte{0, 30, 93}:     "Holosys d.o.o.",
+       [3]byte{0, 30, 94}:     "COmputime Ltd.",
+       [3]byte{0, 30, 95}:     "KwikByte, LLC",
+       [3]byte{0, 30, 96}:     "Digital Lighting Systems, Inc",
+       [3]byte{0, 30, 97}:     "ITEC GmbH",
+       [3]byte{0, 30, 98}:     "Siemon",
+       [3]byte{0, 30, 99}:     "Vibro-Meter SA",
+       [3]byte{0, 30, 100}:    "Intel Corporate",
+       [3]byte{0, 30, 101}:    "Intel Corporate",
+       [3]byte{0, 30, 102}:    "RESOL Elektronische Regelungen GmbH",
+       [3]byte{0, 30, 103}:    "Intel Corporate",
+       [3]byte{0, 30, 104}:    "QUANTA COMPUTER INC.",
+       [3]byte{0, 30, 105}:    "Thomson Inc.",
+       [3]byte{0, 30, 106}:    "Beijing Bluexon Technology Co.,Ltd",
+       [3]byte{0, 30, 107}:    "Cisco SPVTG",
+       [3]byte{0, 30, 108}:    "Opaque Systems",
+       [3]byte{0, 30, 109}:    "IT R&D Center",
+       [3]byte{0, 30, 110}:    "Shenzhen First Mile Communications Ltd",
+       [3]byte{0, 30, 111}:    "Magna-Power Electronics, Inc.",
+       [3]byte{0, 30, 112}:    "Cobham Defence Communications Ltd",
+       [3]byte{0, 30, 113}:    "MIrcom Group of Companies",
+       [3]byte{0, 30, 114}:    "PCS",
+       [3]byte{0, 30, 115}:    "zte corporation",
+       [3]byte{0, 30, 116}:    "Sagemcom Broadband SAS",
+       [3]byte{0, 30, 117}:    "LG Electronics (Mobile Communications)",
+       [3]byte{0, 30, 118}:    "Thermo Fisher Scientific",
+       [3]byte{0, 30, 119}:    "Air2App",
+       [3]byte{0, 30, 120}:    "Owitek Technology Ltd.,",
+       [3]byte{0, 30, 121}:    "Cisco Systems, Inc",
+       [3]byte{0, 30, 122}:    "Cisco Systems, Inc",
+       [3]byte{0, 30, 123}:    "R.I.CO. S.r.l.",
+       [3]byte{0, 30, 124}:    "Taiwick Limited",
+       [3]byte{0, 30, 125}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 30, 126}:    "Nortel Networks",
+       [3]byte{0, 30, 127}:    "CBM of America",
+       [3]byte{0, 30, 128}:    "Last Mile Ltd.",
+       [3]byte{0, 30, 129}:    "CNB Technology Inc.",
+       [3]byte{0, 30, 130}:    "SanDisk Corporation",
+       [3]byte{0, 30, 131}:    "LAN/MAN Standards Association (LMSC)",
+       [3]byte{0, 30, 132}:    "Pika Technologies Inc.",
+       [3]byte{0, 30, 133}:    "Lagotek Corporation",
+       [3]byte{0, 30, 134}:    "MEL Co.,Ltd.",
+       [3]byte{0, 30, 135}:    "Realease Limited",
+       [3]byte{0, 30, 136}:    "ANDOR SYSTEM SUPPORT CO., LTD.",
+       [3]byte{0, 30, 137}:    "CRFS Limited",
+       [3]byte{0, 30, 138}:    "eCopy, Inc",
+       [3]byte{0, 30, 139}:    "Infra Access Korea Co., Ltd.",
+       [3]byte{0, 30, 140}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 30, 141}:    "ARRIS Group, Inc.",
+       [3]byte{0, 30, 142}:    "Hunkeler AG",
+       [3]byte{0, 30, 143}:    "CANON INC.",
+       [3]byte{0, 30, 144}:    "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 30, 145}:    "KIMIN Electronic Co., Ltd.",
+       [3]byte{0, 30, 146}:    "JEULIN S.A.",
+       [3]byte{0, 30, 147}:    "CiriTech Systems Inc",
+       [3]byte{0, 30, 148}:    "SUPERCOM TECHNOLOGY CORPORATION",
+       [3]byte{0, 30, 149}:    "SIGMALINK",
+       [3]byte{0, 30, 150}:    "Sepura Plc",
+       [3]byte{0, 30, 151}:    "Medium Link System Technology CO., LTD,",
+       [3]byte{0, 30, 152}:    "GreenLine Communications",
+       [3]byte{0, 30, 153}:    "Vantanol Industrial Corporation",
+       [3]byte{0, 30, 154}:    "HAMILTON Bonaduz AG",
+       [3]byte{0, 30, 155}:    "San-Eisha, Ltd.",
+       [3]byte{0, 30, 156}:    "Fidustron INC",
+       [3]byte{0, 30, 157}:    "Recall Technologies, Inc.",
+       [3]byte{0, 30, 158}:    "ddm hopt + schuler Gmbh + Co. KG",
+       [3]byte{0, 30, 159}:    "Visioneering Systems, Inc.",
+       [3]byte{0, 30, 160}:    "XLN-t",
+       [3]byte{0, 30, 161}:    "Brunata a/s",
+       [3]byte{0, 30, 162}:    "Symx Systems, Inc.",
+       [3]byte{0, 30, 163}:    "Nokia Danmark A/S",
+       [3]byte{0, 30, 164}:    "Nokia Danmark A/S",
+       [3]byte{0, 30, 165}:    "ROBOTOUS, Inc.",
+       [3]byte{0, 30, 166}:    "Best IT World (India) Pvt. Ltd.",
+       [3]byte{0, 30, 167}:    "Actiontec Electronics, Inc",
+       [3]byte{0, 30, 168}:    "Datang Mobile Communications Equipment CO.,LTD",
+       [3]byte{0, 30, 169}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 30, 170}:    "E-Senza Technologies GmbH",
+       [3]byte{0, 30, 171}:    "TeleWell Oy",
+       [3]byte{0, 30, 172}:    "Armadeus Systems",
+       [3]byte{0, 30, 173}:    "Wingtech Group Limited",
+       [3]byte{0, 30, 174}:    "Continental Automotive Systems Inc.",
+       [3]byte{0, 30, 175}:    "Ophir Optronics Ltd",
+       [3]byte{0, 30, 176}:    "ImesD Electronica S.L.",
+       [3]byte{0, 30, 177}:    "Cryptsoft Pty Ltd",
+       [3]byte{0, 30, 178}:    "LG innotek",
+       [3]byte{0, 30, 179}:    "Primex Wireless",
+       [3]byte{0, 30, 180}:    "UNIFAT TECHNOLOGY LTD.",
+       [3]byte{0, 30, 181}:    "Ever Sparkle Technologies Ltd",
+       [3]byte{0, 30, 182}:    "TAG Heuer SA",
+       [3]byte{0, 30, 183}:    "TBTech, Co., Ltd.",
+       [3]byte{0, 30, 184}:    "Fortis, Inc.",
+       [3]byte{0, 30, 185}:    "Sing Fai Technology Limited",
+       [3]byte{0, 30, 186}:    "High Density Devices AS",
+       [3]byte{0, 30, 187}:    "BLUELIGHT TECHNOLOGY INC.",
+       [3]byte{0, 30, 188}:    "WINTECH AUTOMATION CO.,LTD.",
+       [3]byte{0, 30, 189}:    "Cisco Systems, Inc",
+       [3]byte{0, 30, 190}:    "Cisco Systems, Inc",
+       [3]byte{0, 30, 191}:    "Haas Automation Inc.",
+       [3]byte{0, 30, 192}:    "Microchip Technology Inc.",
+       [3]byte{0, 30, 193}:    "3COM EUROPE LTD",
+       [3]byte{0, 30, 194}:    "Apple, Inc.",
+       [3]byte{0, 30, 195}:    "Kozio, Inc.",
+       [3]byte{0, 30, 196}:    "Celio Corp",
+       [3]byte{0, 30, 197}:    "Middle Atlantic Products Inc",
+       [3]byte{0, 30, 198}:    "Obvius Holdings LLC",
+       [3]byte{0, 30, 199}:    "2Wire Inc",
+       [3]byte{0, 30, 200}:    "Rapid Mobile (Pty) Ltd",
+       [3]byte{0, 30, 201}:    "Dell Inc.",
+       [3]byte{0, 30, 202}:    "Nortel Networks",
+       [3]byte{0, 30, 203}:    "RPC Energoautomatika Ltd",
+       [3]byte{0, 30, 204}:    "CDVI",
+       [3]byte{0, 30, 205}:    "KYLAND Technology Co. LTD",
+       [3]byte{0, 30, 206}:    "BISA Technologies (Hong Kong) Limited",
+       [3]byte{0, 30, 207}:    "PHILIPS ELECTRONICS UK LTD",
+       [3]byte{0, 30, 208}:    "Ingespace",
+       [3]byte{0, 30, 209}:    "Keyprocessor B.V.",
+       [3]byte{0, 30, 210}:    "Ray Shine Video Technology Inc",
+       [3]byte{0, 30, 211}:    "Dot Technology Int'l Co., Ltd.",
+       [3]byte{0, 30, 212}:    "Doble Engineering",
+       [3]byte{0, 30, 213}:    "Tekon-Automatics",
+       [3]byte{0, 30, 214}:    "Alentec & Orion AB",
+       [3]byte{0, 30, 215}:    "H-Stream Wireless, Inc.",
+       [3]byte{0, 30, 216}:    "Digital United Inc.",
+       [3]byte{0, 30, 217}:    "Mitsubishi Precision Co.,LTd.",
+       [3]byte{0, 30, 218}:    "Wesemann Elektrotechniek B.V.",
+       [3]byte{0, 30, 219}:    "Giken Trastem Co., Ltd.",
+       [3]byte{0, 30, 220}:    "Sony Mobile Communications AB",
+       [3]byte{0, 30, 221}:    "WASKO S.A.",
+       [3]byte{0, 30, 222}:    "BYD COMPANY LIMITED",
+       [3]byte{0, 30, 223}:    "Master Industrialization Center Kista",
+       [3]byte{0, 30, 224}:    "Urmet Domus SpA",
+       [3]byte{0, 30, 225}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 30, 226}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 30, 227}:    "T&W Electronics (ShenZhen) Co.,Ltd",
+       [3]byte{0, 30, 228}:    "ACS Solutions France",
+       [3]byte{0, 30, 229}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 30, 230}:    "Shenzhen Advanced Video Info-Tech Co., Ltd.",
+       [3]byte{0, 30, 231}:    "Epic Systems Inc",
+       [3]byte{0, 30, 232}:    "Mytek",
+       [3]byte{0, 30, 233}:    "Stoneridge Electronics AB",
+       [3]byte{0, 30, 234}:    "Sensor Switch, Inc.",
+       [3]byte{0, 30, 235}:    "Talk-A-Phone Co.",
+       [3]byte{0, 30, 236}:    "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{0, 30, 237}:    "Adventiq Ltd.",
+       [3]byte{0, 30, 238}:    "ETL Systems Ltd",
+       [3]byte{0, 30, 239}:    "Cantronic International Limited",
+       [3]byte{0, 30, 240}:    "Gigafin Networks",
+       [3]byte{0, 30, 241}:    "Servimat",
+       [3]byte{0, 30, 242}:    "Micro Motion Inc",
+       [3]byte{0, 30, 243}:    "From2",
+       [3]byte{0, 30, 244}:    "L-3 Communications Display Systems",
+       [3]byte{0, 30, 245}:    "Hitek Automated Inc.",
+       [3]byte{0, 30, 246}:    "Cisco Systems, Inc",
+       [3]byte{0, 30, 247}:    "Cisco Systems, Inc",
+       [3]byte{0, 30, 248}:    "Emfinity Inc.",
+       [3]byte{0, 30, 249}:    "Pascom Kommunikations systeme GmbH.",
+       [3]byte{0, 30, 250}:    "PROTEI Ltd.",
+       [3]byte{0, 30, 251}:    "Trio Motion Technology Ltd",
+       [3]byte{0, 30, 252}:    "JSC MASSA-K",
+       [3]byte{0, 30, 253}:    "Microbit 2.0 AB",
+       [3]byte{0, 30, 254}:    "LEVEL s.r.o.",
+       [3]byte{0, 30, 255}:    "Mueller-Elektronik GmbH & Co. KG",
+       [3]byte{0, 31, 0}:      "Nokia Danmark A/S",
+       [3]byte{0, 31, 1}:      "Nokia Danmark A/S",
+       [3]byte{0, 31, 2}:      "Pixelmetrix Corporation Pte Ltd",
+       [3]byte{0, 31, 3}:      "NUM AG",
+       [3]byte{0, 31, 4}:      "Granch Ltd.",
+       [3]byte{0, 31, 5}:      "iTAS Technology Corp.",
+       [3]byte{0, 31, 6}:      "Integrated Dispatch Solutions",
+       [3]byte{0, 31, 7}:      "AZTEQ Mobile",
+       [3]byte{0, 31, 8}:      "RISCO LTD",
+       [3]byte{0, 31, 9}:      "Jastec",
+       [3]byte{0, 31, 10}:     "Nortel Networks",
+       [3]byte{0, 31, 11}:     "Federal State Unitary Enterprise Industrial UnionElectropribor",
+       [3]byte{0, 31, 12}:     "Intelligent Digital Services GmbH",
+       [3]byte{0, 31, 13}:     "L3 Communications - Telemetry West",
+       [3]byte{0, 31, 14}:     "Japan Kyastem Co., Ltd",
+       [3]byte{0, 31, 15}:     "Select Engineered Systems",
+       [3]byte{0, 31, 16}:     "TOLEDO DO BRASIL INDUSTRIA DE BALANCAS  LTDA",
+       [3]byte{0, 31, 17}:     "OPENMOKO, INC.",
+       [3]byte{0, 31, 18}:     "Juniper Networks",
+       [3]byte{0, 31, 19}:     "S.& A.S. Ltd.",
+       [3]byte{0, 31, 20}:     "NexG",
+       [3]byte{0, 31, 21}:     "Bioscrypt Inc",
+       [3]byte{0, 31, 22}:     "Wistron Corporation",
+       [3]byte{0, 31, 23}:     "IDX Company, Ltd.",
+       [3]byte{0, 31, 24}:     "Hakusan.Mfg.Co,.Ltd",
+       [3]byte{0, 31, 25}:     "BEN-RI ELECTRONICA S.A.",
+       [3]byte{0, 31, 26}:     "Prominvest",
+       [3]byte{0, 31, 27}:     "RoyalTek Company Ltd.",
+       [3]byte{0, 31, 28}:     "KOBISHI ELECTRIC Co.,Ltd.",
+       [3]byte{0, 31, 29}:     "Atlas Material Testing Technology LLC",
+       [3]byte{0, 31, 30}:     "Astec Technology Co., Ltd",
+       [3]byte{0, 31, 31}:     "Edimax Technology Co. Ltd.",
+       [3]byte{0, 31, 32}:     "Logitech Europe SA",
+       [3]byte{0, 31, 33}:     "Inner Mongolia Yin An Science & Technology Development Co.,L",
+       [3]byte{0, 31, 34}:     "Source Photonics, Inc.",
+       [3]byte{0, 31, 35}:     "Interacoustics",
+       [3]byte{0, 31, 36}:     "DIGITVIEW TECHNOLOGY CO., LTD.",
+       [3]byte{0, 31, 37}:     "MBS GmbH",
+       [3]byte{0, 31, 38}:     "Cisco Systems, Inc",
+       [3]byte{0, 31, 39}:     "Cisco Systems, Inc",
+       [3]byte{0, 31, 40}:     "HPN Supply Chain",
+       [3]byte{0, 31, 41}:     "Hewlett Packard",
+       [3]byte{0, 31, 42}:     "ACCM",
+       [3]byte{0, 31, 43}:     "Orange Logic",
+       [3]byte{0, 31, 44}:     "Starbridge Networks",
+       [3]byte{0, 31, 45}:     "Electro-Optical Imaging, Inc.",
+       [3]byte{0, 31, 46}:     "Triangle Research Int'l Pte Ltd",
+       [3]byte{0, 31, 47}:     "Berker GmbH & Co. KG",
+       [3]byte{0, 31, 48}:     "Travelping",
+       [3]byte{0, 31, 49}:     "Radiocomp",
+       [3]byte{0, 31, 50}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 31, 51}:     "NETGEAR",
+       [3]byte{0, 31, 52}:     "Lung Hwa Electronics Co., Ltd.",
+       [3]byte{0, 31, 53}:     "AIR802 LLC",
+       [3]byte{0, 31, 54}:     "Bellwin Information Co. Ltd.,",
+       [3]byte{0, 31, 55}:     "Genesis I&C",
+       [3]byte{0, 31, 56}:     "POSITRON",
+       [3]byte{0, 31, 57}:     "Construcciones y Auxiliar de Ferrocarriles, S.A.",
+       [3]byte{0, 31, 58}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 31, 59}:     "Intel Corporate",
+       [3]byte{0, 31, 60}:     "Intel Corporate",
+       [3]byte{0, 31, 61}:     "Qbit GmbH",
+       [3]byte{0, 31, 62}:     "RP-Technik e.K.",
+       [3]byte{0, 31, 63}:     "AVM GmbH",
+       [3]byte{0, 31, 64}:     "Speakercraft Inc.",
+       [3]byte{0, 31, 65}:     "Ruckus Wireless",
+       [3]byte{0, 31, 66}:     "Etherstack plc",
+       [3]byte{0, 31, 67}:     "ENTES ELEKTRONIK",
+       [3]byte{0, 31, 68}:     "GE Transportation Systems",
+       [3]byte{0, 31, 69}:     "Enterasys",
+       [3]byte{0, 31, 70}:     "Nortel Networks",
+       [3]byte{0, 31, 71}:     "MCS Logic Inc.",
+       [3]byte{0, 31, 72}:     "Mojix Inc.",
+       [3]byte{0, 31, 73}:     "Manhattan TV Ltd",
+       [3]byte{0, 31, 74}:     "Albentia Systems S.A.",
+       [3]byte{0, 31, 75}:     "Lineage Power",
+       [3]byte{0, 31, 76}:     "Roseman Engineering Ltd",
+       [3]byte{0, 31, 77}:     "Segnetics LLC",
+       [3]byte{0, 31, 78}:     "ConMed Linvatec",
+       [3]byte{0, 31, 79}:     "Thinkware Co. Ltd.",
+       [3]byte{0, 31, 80}:     "Swissdis AG",
+       [3]byte{0, 31, 81}:     "HD Communications Corp",
+       [3]byte{0, 31, 82}:     "UVT Unternehmensberatung fur Verkehr und Technik GmbH",
+       [3]byte{0, 31, 83}:     "GEMAC Gesellschaft für Mikroelektronikanwendung Chemnitz mbH",
+       [3]byte{0, 31, 84}:     "Lorex Technology Inc.",
+       [3]byte{0, 31, 85}:     "Honeywell Security (China) Co., Ltd.",
+       [3]byte{0, 31, 86}:     "DIGITAL FORECAST",
+       [3]byte{0, 31, 87}:     "Phonik Innovation Co.,LTD",
+       [3]byte{0, 31, 88}:     "EMH Energiemesstechnik GmbH",
+       [3]byte{0, 31, 89}:     "Kronback Tracers",
+       [3]byte{0, 31, 90}:     "Beckwith Electric Co.",
+       [3]byte{0, 31, 91}:     "Apple, Inc.",
+       [3]byte{0, 31, 92}:     "Nokia Danmark A/S",
+       [3]byte{0, 31, 93}:     "Nokia Danmark A/S",
+       [3]byte{0, 31, 94}:     "Dyna Technology Co.,Ltd.",
+       [3]byte{0, 31, 95}:     "Blatand GmbH",
+       [3]byte{0, 31, 96}:     "COMPASS SYSTEMS CORP.",
+       [3]byte{0, 31, 97}:     "Talent Communication Networks Inc.",
+       [3]byte{0, 31, 98}:     "JSC Stilsoft",
+       [3]byte{0, 31, 99}:     "JSC Goodwin-Europa",
+       [3]byte{0, 31, 100}:    "Beijing Autelan Technology Inc.",
+       [3]byte{0, 31, 101}:    "KOREA ELECTRIC TERMINAL CO., LTD.",
+       [3]byte{0, 31, 102}:    "PLANAR LLC",
+       [3]byte{0, 31, 103}:    "Hitachi,Ltd.",
+       [3]byte{0, 31, 104}:    "Martinsson Elektronik AB",
+       [3]byte{0, 31, 105}:    "Pingood Technology Co., Ltd.",
+       [3]byte{0, 31, 106}:    "PacketFlux Technologies, Inc.",
+       [3]byte{0, 31, 107}:    "LG Electronics (Mobile Communications)",
+       [3]byte{0, 31, 108}:    "Cisco Systems, Inc",
+       [3]byte{0, 31, 109}:    "Cisco Systems, Inc",
+       [3]byte{0, 31, 110}:    "Vtech Engineering Corporation",
+       [3]byte{0, 31, 111}:    "Fujian Sunnada Communication Co.,Ltd.",
+       [3]byte{0, 31, 112}:    "Botik Technologies LTD",
+       [3]byte{0, 31, 113}:    "xG Technology, Inc.",
+       [3]byte{0, 31, 114}:    "QingDao Hiphone Technology Co,.Ltd",
+       [3]byte{0, 31, 115}:    "Teraview Technology Co., Ltd.",
+       [3]byte{0, 31, 116}:    "Eigen Development",
+       [3]byte{0, 31, 117}:    "GiBahn Media",
+       [3]byte{0, 31, 118}:    "AirLogic Systems Inc.",
+       [3]byte{0, 31, 119}:    "HEOL DESIGN",
+       [3]byte{0, 31, 120}:    "Blue Fox Porini Textile",
+       [3]byte{0, 31, 121}:    "Lodam Electronics A/S",
+       [3]byte{0, 31, 122}:    "WiWide Inc.",
+       [3]byte{0, 31, 123}:    "TechNexion Ltd.",
+       [3]byte{0, 31, 124}:    "Witelcom AS",
+       [3]byte{0, 31, 125}:    "Embedded Wireless GmbH",
+       [3]byte{0, 31, 126}:    "ARRIS Group, Inc.",
+       [3]byte{0, 31, 127}:    "Phabrix Limited",
+       [3]byte{0, 31, 128}:    "Lucas Holding bv",
+       [3]byte{0, 31, 129}:    "Accel Semiconductor Corp",
+       [3]byte{0, 31, 130}:    "Cal-Comp Electronics & Communications Company Ltd.",
+       [3]byte{0, 31, 131}:    "Teleplan Technology Services Sdn Bhd",
+       [3]byte{0, 31, 132}:    "Gigle Semiconductor",
+       [3]byte{0, 31, 133}:    "Apriva ISS, LLC",
+       [3]byte{0, 31, 134}:    "digEcor",
+       [3]byte{0, 31, 135}:    "Skydigital Inc.",
+       [3]byte{0, 31, 136}:    "FMS Force Measuring Systems AG",
+       [3]byte{0, 31, 137}:    "Signalion GmbH",
+       [3]byte{0, 31, 138}:    "Ellion Digital Inc.",
+       [3]byte{0, 31, 139}:    "Cache IQ",
+       [3]byte{0, 31, 140}:    "CCS Inc.",
+       [3]byte{0, 31, 141}:    "Ingenieurbuero Stark GmbH und Ko. KG",
+       [3]byte{0, 31, 142}:    "Metris USA Inc.",
+       [3]byte{0, 31, 143}:    "Shanghai Bellmann Digital Source Co.,Ltd.",
+       [3]byte{0, 31, 144}:    "Actiontec Electronics, Inc",
+       [3]byte{0, 31, 145}:    "DBS Lodging Technologies, LLC",
+       [3]byte{0, 31, 146}:    "Avigilon Corporation",
+       [3]byte{0, 31, 147}:    "Xiotech Corporation",
+       [3]byte{0, 31, 148}:    "Lascar Electronics Ltd",
+       [3]byte{0, 31, 149}:    "Sagemcom Broadband SAS",
+       [3]byte{0, 31, 150}:    "APROTECH CO.LTD",
+       [3]byte{0, 31, 151}:    "BERTANA srl",
+       [3]byte{0, 31, 152}:    "DAIICHI-DENTSU LTD.",
+       [3]byte{0, 31, 153}:    "SERONICS co.ltd",
+       [3]byte{0, 31, 154}:    "Nortel Networks",
+       [3]byte{0, 31, 155}:    "POSBRO",
+       [3]byte{0, 31, 156}:    "LEDCO",
+       [3]byte{0, 31, 157}:    "Cisco Systems, Inc",
+       [3]byte{0, 31, 158}:    "Cisco Systems, Inc",
+       [3]byte{0, 31, 159}:    "Thomson Telecom Belgium",
+       [3]byte{0, 31, 160}:    "A10 Networks",
+       [3]byte{0, 31, 161}:    "Gtran Inc",
+       [3]byte{0, 31, 162}:    "Datron World Communications, Inc.",
+       [3]byte{0, 31, 163}:    "T&W Electronics(Shenzhen)Co.,Ltd.",
+       [3]byte{0, 31, 164}:    "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{0, 31, 165}:    "Blue-White Industries",
+       [3]byte{0, 31, 166}:    "Stilo srl",
+       [3]byte{0, 31, 167}:    "Sony Interactive Entertainment Inc.",
+       [3]byte{0, 31, 168}:    "Smart Energy Instruments Inc.",
+       [3]byte{0, 31, 169}:    "Atlanta DTH, Inc.",
+       [3]byte{0, 31, 170}:    "Taseon, Inc.",
+       [3]byte{0, 31, 171}:    "I.S HIGH TECH.INC",
+       [3]byte{0, 31, 172}:    "Goodmill Systems Ltd",
+       [3]byte{0, 31, 173}:    "Brown Innovations, Inc",
+       [3]byte{0, 31, 174}:    "Blick South Africa (Pty) Ltd",
+       [3]byte{0, 31, 175}:    "NextIO, Inc.",
+       [3]byte{0, 31, 176}:    "TimeIPS, Inc.",
+       [3]byte{0, 31, 177}:    "Cybertech Inc.",
+       [3]byte{0, 31, 178}:    "Sontheim Industrie Elektronik GmbH",
+       [3]byte{0, 31, 179}:    "2Wire Inc",
+       [3]byte{0, 31, 180}:    "SmartShare Systems",
+       [3]byte{0, 31, 181}:    "I/O Interconnect Inc.",
+       [3]byte{0, 31, 182}:    "Chi Lin Technology Co., Ltd.",
+       [3]byte{0, 31, 183}:    "WiMate Technologies Corp.",
+       [3]byte{0, 31, 184}:    "Universal Remote Control, Inc.",
+       [3]byte{0, 31, 185}:    "Paltronics",
+       [3]byte{0, 31, 186}:    "Boyoung Tech",
+       [3]byte{0, 31, 187}:    "Xenatech Co.,LTD",
+       [3]byte{0, 31, 188}:    "EVGA Corporation",
+       [3]byte{0, 31, 189}:    "Kyocera Wireless Corp.",
+       [3]byte{0, 31, 190}:    "Shenzhen Mopnet Industrial Co.,Ltd",
+       [3]byte{0, 31, 191}:    "Fulhua Microelectronics Corp. Taiwan Branch",
+       [3]byte{0, 31, 192}:    "Control Express Finland Oy",
+       [3]byte{0, 31, 193}:    "Hanlong Technology Co.,LTD",
+       [3]byte{0, 31, 194}:    "Jow Tong Technology Co Ltd",
+       [3]byte{0, 31, 195}:    "SmartSynch, Inc",
+       [3]byte{0, 31, 196}:    "ARRIS Group, Inc.",
+       [3]byte{0, 31, 197}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 31, 198}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 31, 199}:    "Casio Hitachi Mobile Communications Co., Ltd.",
+       [3]byte{0, 31, 200}:    "Up-Today Industrial Co., Ltd.",
+       [3]byte{0, 31, 201}:    "Cisco Systems, Inc",
+       [3]byte{0, 31, 202}:    "Cisco Systems, Inc",
+       [3]byte{0, 31, 203}:    "NIW Solutions",
+       [3]byte{0, 31, 204}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 31, 205}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 31, 206}:    "QTECH LLC",
+       [3]byte{0, 31, 207}:    "MSI Technology GmbH",
+       [3]byte{0, 31, 208}:    "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{0, 31, 209}:    "OPTEX CO.,LTD.",
+       [3]byte{0, 31, 210}:    "COMMTECH TECHNOLOGY MACAO COMMERCIAL OFFSHORE LTD.",
+       [3]byte{0, 31, 211}:    "RIVA Networks Inc.",
+       [3]byte{0, 31, 212}:    "4IPNET, INC.",
+       [3]byte{0, 31, 213}:    "MICRORISC s.r.o.",
+       [3]byte{0, 31, 214}:    "Shenzhen Allywll",
+       [3]byte{0, 31, 215}:    "TELERAD SA",
+       [3]byte{0, 31, 216}:    "A-TRUST COMPUTER CORPORATION",
+       [3]byte{0, 31, 217}:    "RSD Communications Ltd",
+       [3]byte{0, 31, 218}:    "Nortel Networks",
+       [3]byte{0, 31, 219}:    "Network Supply Corp.,",
+       [3]byte{0, 31, 220}:    "Mobile Safe Track Ltd",
+       [3]byte{0, 31, 221}:    "GDI LLC",
+       [3]byte{0, 31, 222}:    "Nokia Danmark A/S",
+       [3]byte{0, 31, 223}:    "Nokia Danmark A/S",
+       [3]byte{0, 31, 224}:    "EdgeVelocity Corp",
+       [3]byte{0, 31, 225}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 31, 226}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 31, 227}:    "LG Electronics (Mobile Communications)",
+       [3]byte{0, 31, 228}:    "Sony Mobile Communications AB",
+       [3]byte{0, 31, 229}:    "In-Circuit GmbH",
+       [3]byte{0, 31, 230}:    "Alphion Corporation",
+       [3]byte{0, 31, 231}:    "Simet",
+       [3]byte{0, 31, 232}:    "KURUSUGAWA Electronics Industry Inc,.",
+       [3]byte{0, 31, 233}:    "Printrex, Inc.",
+       [3]byte{0, 31, 234}:    "Applied Media Technologies Corporation",
+       [3]byte{0, 31, 235}:    "Trio Datacom Pty Ltd",
+       [3]byte{0, 31, 236}:    "Synapse Électronique",
+       [3]byte{0, 31, 237}:    "Tecan Systems Inc.",
+       [3]byte{0, 31, 238}:    "ubisys technologies GmbH",
+       [3]byte{0, 31, 239}:    "SHINSEI INDUSTRIES CO.,LTD",
+       [3]byte{0, 31, 240}:    "Audio Partnership",
+       [3]byte{0, 31, 241}:    "Paradox Hellas S.A.",
+       [3]byte{0, 31, 242}:    "VIA Technologies, Inc.",
+       [3]byte{0, 31, 243}:    "Apple, Inc.",
+       [3]byte{0, 31, 244}:    "Power Monitors, Inc.",
+       [3]byte{0, 31, 245}:    "Kongsberg Defence & Aerospace",
+       [3]byte{0, 31, 246}:    "PS Audio International",
+       [3]byte{0, 31, 247}:    "Nakajima All Precision Co., Ltd.",
+       [3]byte{0, 31, 248}:    "Siemens AG, Sector Industry, Drive Technologies, Motion Control Systems",
+       [3]byte{0, 31, 249}:    "Advanced Knowledge Associates",
+       [3]byte{0, 31, 250}:    "Coretree, Co, Ltd",
+       [3]byte{0, 31, 251}:    "Green Packet Bhd",
+       [3]byte{0, 31, 252}:    "Riccius+Sohn GmbH",
+       [3]byte{0, 31, 253}:    "Indigo Mobile Technologies Corp.",
+       [3]byte{0, 31, 254}:    "HPN Supply Chain",
+       [3]byte{0, 31, 255}:    "Respironics, Inc.",
+       [3]byte{0, 32, 0}:      "LEXMARK INTERNATIONAL, INC.",
+       [3]byte{0, 32, 1}:      "DSP SOLUTIONS, INC.",
+       [3]byte{0, 32, 2}:      "SERITECH ENTERPRISE CO., LTD.",
+       [3]byte{0, 32, 3}:      "PIXEL POWER LTD.",
+       [3]byte{0, 32, 4}:      "YAMATAKE-HONEYWELL CO., LTD.",
+       [3]byte{0, 32, 5}:      "SIMPLE TECHNOLOGY",
+       [3]byte{0, 32, 6}:      "GARRETT COMMUNICATIONS, INC.",
+       [3]byte{0, 32, 7}:      "SFA, INC.",
+       [3]byte{0, 32, 8}:      "CABLE & COMPUTER TECHNOLOGY",
+       [3]byte{0, 32, 9}:      "PACKARD BELL ELEC., INC.",
+       [3]byte{0, 32, 10}:     "SOURCE-COMM CORP.",
+       [3]byte{0, 32, 11}:     "OCTAGON SYSTEMS CORP.",
+       [3]byte{0, 32, 12}:     "ADASTRA SYSTEMS CORP.",
+       [3]byte{0, 32, 13}:     "CARL ZEISS",
+       [3]byte{0, 32, 14}:     "SATELLITE TECHNOLOGY MGMT, INC",
+       [3]byte{0, 32, 15}:     "EBRAINS Inc",
+       [3]byte{0, 32, 16}:     "JEOL SYSTEM TECHNOLOGY CO. LTD",
+       [3]byte{0, 32, 17}:     "CANOPUS CO., LTD.",
+       [3]byte{0, 32, 18}:     "CAMTRONICS MEDICAL SYSTEMS",
+       [3]byte{0, 32, 19}:     "DIVERSIFIED TECHNOLOGY, INC.",
+       [3]byte{0, 32, 20}:     "GLOBAL VIEW CO., LTD.",
+       [3]byte{0, 32, 21}:     "ACTIS COMPUTER SA",
+       [3]byte{0, 32, 22}:     "SHOWA ELECTRIC WIRE & CABLE CO",
+       [3]byte{0, 32, 23}:     "ORBOTECH",
+       [3]byte{0, 32, 24}:     "CIS TECHNOLOGY INC.",
+       [3]byte{0, 32, 25}:     "OHLER GMBH",
+       [3]byte{0, 32, 26}:     "MRV Communications, Inc.",
+       [3]byte{0, 32, 27}:     "NORTHERN TELECOM/NETWORK",
+       [3]byte{0, 32, 28}:     "EXCEL, INC.",
+       [3]byte{0, 32, 29}:     "KATANA PRODUCTS",
+       [3]byte{0, 32, 30}:     "NETQUEST CORPORATION",
+       [3]byte{0, 32, 31}:     "BEST POWER TECHNOLOGY, INC.",
+       [3]byte{0, 32, 32}:     "MEGATRON COMPUTER INDUSTRIES PTY, LTD.",
+       [3]byte{0, 32, 33}:     "ALGORITHMS SOFTWARE PVT. LTD.",
+       [3]byte{0, 32, 34}:     "NMS Communications",
+       [3]byte{0, 32, 35}:     "T.C. TECHNOLOGIES PTY. LTD",
+       [3]byte{0, 32, 36}:     "PACIFIC COMMUNICATION SCIENCES",
+       [3]byte{0, 32, 37}:     "CONTROL TECHNOLOGY, INC.",
+       [3]byte{0, 32, 38}:     "AMKLY SYSTEMS, INC.",
+       [3]byte{0, 32, 39}:     "MING FORTUNE INDUSTRY CO., LTD",
+       [3]byte{0, 32, 40}:     "WEST EGG SYSTEMS, INC.",
+       [3]byte{0, 32, 41}:     "TELEPROCESSING PRODUCTS, INC.",
+       [3]byte{0, 32, 42}:     "N.V. DZINE",
+       [3]byte{0, 32, 43}:     "ADVANCED TELECOMMUNICATIONS MODULES, LTD.",
+       [3]byte{0, 32, 44}:     "WELLTRONIX CO., LTD.",
+       [3]byte{0, 32, 45}:     "TAIYO CORPORATION",
+       [3]byte{0, 32, 46}:     "DAYSTAR DIGITAL",
+       [3]byte{0, 32, 47}:     "ZETA COMMUNICATIONS, LTD.",
+       [3]byte{0, 32, 48}:     "ANALOG & DIGITAL SYSTEMS",
+       [3]byte{0, 32, 49}:     "Tattile SRL",
+       [3]byte{0, 32, 50}:     "ALCATEL TAISEL",
+       [3]byte{0, 32, 51}:     "SYNAPSE TECHNOLOGIES, INC.",
+       [3]byte{0, 32, 52}:     "ROTEC INDUSTRIEAUTOMATION GMBH",
+       [3]byte{0, 32, 53}:     "IBM Corp",
+       [3]byte{0, 32, 54}:     "BMC SOFTWARE",
+       [3]byte{0, 32, 55}:     "Seagate Technology",
+       [3]byte{0, 32, 56}:     "VME MICROSYSTEMS INTERNATIONAL CORPORATION",
+       [3]byte{0, 32, 57}:     "SCINETS",
+       [3]byte{0, 32, 58}:     "DIGITAL BI0METRICS INC.",
+       [3]byte{0, 32, 59}:     "WISDM LTD.",
+       [3]byte{0, 32, 60}:     "EUROTIME AB",
+       [3]byte{0, 32, 61}:     "Honeywell ECC",
+       [3]byte{0, 32, 62}:     "LogiCan Technologies, Inc.",
+       [3]byte{0, 32, 63}:     "JUKI CORPORATION",
+       [3]byte{0, 32, 64}:     "ARRIS Group, Inc.",
+       [3]byte{0, 32, 65}:     "DATA NET",
+       [3]byte{0, 32, 66}:     "DATAMETRICS CORP.",
+       [3]byte{0, 32, 67}:     "NEURON COMPANY LIMITED",
+       [3]byte{0, 32, 68}:     "GENITECH PTY LTD",
+       [3]byte{0, 32, 69}:     "ION Networks, Inc.",
+       [3]byte{0, 32, 70}:     "CIPRICO, INC.",
+       [3]byte{0, 32, 71}:     "STEINBRECHER CORP.",
+       [3]byte{0, 32, 72}:     "Marconi Communications",
+       [3]byte{0, 32, 73}:     "COMTRON, INC.",
+       [3]byte{0, 32, 74}:     "PRONET GMBH",
+       [3]byte{0, 32, 75}:     "AUTOCOMPUTER CO., LTD.",
+       [3]byte{0, 32, 76}:     "MITRON COMPUTER PTE LTD.",
+       [3]byte{0, 32, 77}:     "INOVIS GMBH",
+       [3]byte{0, 32, 78}:     "NETWORK SECURITY SYSTEMS, INC.",
+       [3]byte{0, 32, 79}:     "DEUTSCHE AEROSPACE AG",
+       [3]byte{0, 32, 80}:     "KOREA COMPUTER INC.",
+       [3]byte{0, 32, 81}:     "Verilink Corporation",
+       [3]byte{0, 32, 82}:     "RAGULA SYSTEMS",
+       [3]byte{0, 32, 83}:     "HUNTSVILLE MICROSYSTEMS, INC.",
+       [3]byte{0, 32, 84}:     "Sycamore Networks",
+       [3]byte{0, 32, 85}:     "ALTECH CO., LTD.",
+       [3]byte{0, 32, 86}:     "NEOPRODUCTS",
+       [3]byte{0, 32, 87}:     "TITZE DATENTECHNIK GmbH",
+       [3]byte{0, 32, 88}:     "ALLIED SIGNAL INC.",
+       [3]byte{0, 32, 89}:     "MIRO COMPUTER PRODUCTS AG",
+       [3]byte{0, 32, 90}:     "COMPUTER IDENTICS",
+       [3]byte{0, 32, 91}:     "Kentrox, LLC",
+       [3]byte{0, 32, 92}:     "InterNet Systems of Florida, Inc.",
+       [3]byte{0, 32, 93}:     "NANOMATIC OY",
+       [3]byte{0, 32, 94}:     "CASTLE ROCK, INC.",
+       [3]byte{0, 32, 95}:     "GAMMADATA COMPUTER GMBH",
+       [3]byte{0, 32, 96}:     "ALCATEL ITALIA S.p.A.",
+       [3]byte{0, 32, 97}:     "GarrettCom, Inc.",
+       [3]byte{0, 32, 98}:     "SCORPION LOGIC, LTD.",
+       [3]byte{0, 32, 99}:     "WIPRO INFOTECH LTD.",
+       [3]byte{0, 32, 100}:    "PROTEC MICROSYSTEMS, INC.",
+       [3]byte{0, 32, 101}:    "SUPERNET NETWORKING INC.",
+       [3]byte{0, 32, 102}:    "GENERAL MAGIC, INC.",
+       [3]byte{0, 32, 103}:    "Private",
+       [3]byte{0, 32, 104}:    "ISDYNE",
+       [3]byte{0, 32, 105}:    "ISDN SYSTEMS CORPORATION",
+       [3]byte{0, 32, 106}:    "OSAKA COMPUTER CORP.",
+       [3]byte{0, 32, 107}:    "KONICA MINOLTA HOLDINGS, INC.",
+       [3]byte{0, 32, 108}:    "EVERGREEN TECHNOLOGY CORP.",
+       [3]byte{0, 32, 109}:    "DATA RACE, INC.",
+       [3]byte{0, 32, 110}:    "XACT, INC.",
+       [3]byte{0, 32, 111}:    "FLOWPOINT CORPORATION",
+       [3]byte{0, 32, 112}:    "HYNET, LTD.",
+       [3]byte{0, 32, 113}:    "IBR GMBH",
+       [3]byte{0, 32, 114}:    "WORKLINK INNOVATIONS",
+       [3]byte{0, 32, 115}:    "FUSION SYSTEMS CORPORATION",
+       [3]byte{0, 32, 116}:    "SUNGWOON SYSTEMS",
+       [3]byte{0, 32, 117}:    "MOTOROLA COMMUNICATION ISRAEL",
+       [3]byte{0, 32, 118}:    "REUDO CORPORATION",
+       [3]byte{0, 32, 119}:    "KARDIOS SYSTEMS CORP.",
+       [3]byte{0, 32, 120}:    "RUNTOP, INC.",
+       [3]byte{0, 32, 121}:    "MIKRON GMBH",
+       [3]byte{0, 32, 122}:    "WiSE Communications, Inc.",
+       [3]byte{0, 32, 123}:    "Intel Corporation",
+       [3]byte{0, 32, 124}:    "AUTEC GMBH",
+       [3]byte{0, 32, 125}:    "ADVANCED COMPUTER APPLICATIONS",
+       [3]byte{0, 32, 126}:    "FINECOM CO., LTD.",
+       [3]byte{0, 32, 127}:    "KYOEI SANGYO CO., LTD.",
+       [3]byte{0, 32, 128}:    "SYNERGY (UK) LTD.",
+       [3]byte{0, 32, 129}:    "TITAN ELECTRONICS",
+       [3]byte{0, 32, 130}:    "ONEAC CORPORATION",
+       [3]byte{0, 32, 131}:    "PRESTICOM INCORPORATED",
+       [3]byte{0, 32, 132}:    "OCE PRINTING SYSTEMS, GMBH",
+       [3]byte{0, 32, 133}:    "Eaton Corporation",
+       [3]byte{0, 32, 134}:    "MICROTECH ELECTRONICS LIMITED",
+       [3]byte{0, 32, 135}:    "MEMOTEC, INC.",
+       [3]byte{0, 32, 136}:    "GLOBAL VILLAGE COMMUNICATION",
+       [3]byte{0, 32, 137}:    "T3PLUS NETWORKING, INC.",
+       [3]byte{0, 32, 138}:    "SONIX COMMUNICATIONS, LTD.",
+       [3]byte{0, 32, 139}:    "LAPIS TECHNOLOGIES, INC.",
+       [3]byte{0, 32, 140}:    "GALAXY NETWORKS, INC.",
+       [3]byte{0, 32, 141}:    "CMD TECHNOLOGY",
+       [3]byte{0, 32, 142}:    "CHEVIN SOFTWARE ENG. LTD.",
+       [3]byte{0, 32, 143}:    "ECI Telecom Ltd.",
+       [3]byte{0, 32, 144}:    "ADVANCED COMPRESSION TECHNOLOGY, INC.",
+       [3]byte{0, 32, 145}:    "J125, NATIONAL SECURITY AGENCY",
+       [3]byte{0, 32, 146}:    "CHESS ENGINEERING B.V.",
+       [3]byte{0, 32, 147}:    "LANDINGS TECHNOLOGY CORP.",
+       [3]byte{0, 32, 148}:    "CUBIX CORPORATION",
+       [3]byte{0, 32, 149}:    "RIVA ELECTRONICS",
+       [3]byte{0, 32, 150}:    "Invensys",
+       [3]byte{0, 32, 151}:    "APPLIED SIGNAL TECHNOLOGY",
+       [3]byte{0, 32, 152}:    "HECTRONIC AB",
+       [3]byte{0, 32, 153}:    "BON ELECTRIC CO., LTD.",
+       [3]byte{0, 32, 154}:    "THE 3DO COMPANY",
+       [3]byte{0, 32, 155}:    "ERSAT ELECTRONIC GMBH",
+       [3]byte{0, 32, 156}:    "PRIMARY ACCESS CORP.",
+       [3]byte{0, 32, 157}:    "LIPPERT AUTOMATIONSTECHNIK",
+       [3]byte{0, 32, 158}:    "BROWN'S OPERATING SYSTEM SERVICES, LTD.",
+       [3]byte{0, 32, 159}:    "MERCURY COMPUTER SYSTEMS, INC.",
+       [3]byte{0, 32, 160}:    "OA LABORATORY CO., LTD.",
+       [3]byte{0, 32, 161}:    "DOVATRON",
+       [3]byte{0, 32, 162}:    "GALCOM NETWORKING LTD.",
+       [3]byte{0, 32, 163}:    "Harmonic, Inc",
+       [3]byte{0, 32, 164}:    "MULTIPOINT NETWORKS",
+       [3]byte{0, 32, 165}:    "API ENGINEERING",
+       [3]byte{0, 32, 166}:    "Proxim Wireless",
+       [3]byte{0, 32, 167}:    "PAIRGAIN TECHNOLOGIES, INC.",
+       [3]byte{0, 32, 168}:    "SAST TECHNOLOGY CORP.",
+       [3]byte{0, 32, 169}:    "WHITE HORSE INDUSTRIAL",
+       [3]byte{0, 32, 170}:    "Ericsson Television Limited",
+       [3]byte{0, 32, 171}:    "MICRO INDUSTRIES CORP.",
+       [3]byte{0, 32, 172}:    "INTERFLEX DATENSYSTEME GMBH",
+       [3]byte{0, 32, 173}:    "LINQ SYSTEMS",
+       [3]byte{0, 32, 174}:    "ORNET DATA COMMUNICATION TECH.",
+       [3]byte{0, 32, 175}:    "3COM CORPORATION",
+       [3]byte{0, 32, 176}:    "GATEWAY DEVICES, INC.",
+       [3]byte{0, 32, 177}:    "COMTECH RESEARCH INC.",
+       [3]byte{0, 32, 178}:    "GKD Gesellschaft Fur Kommunikation Und Datentechnik",
+       [3]byte{0, 32, 179}:    "Tattile SRL",
+       [3]byte{0, 32, 180}:    "TERMA ELEKTRONIK AS",
+       [3]byte{0, 32, 181}:    "YASKAWA ELECTRIC CORPORATION",
+       [3]byte{0, 32, 182}:    "AGILE NETWORKS, INC.",
+       [3]byte{0, 32, 183}:    "NAMAQUA COMPUTERWARE",
+       [3]byte{0, 32, 184}:    "PRIME OPTION, INC.",
+       [3]byte{0, 32, 185}:    "METRICOM, INC.",
+       [3]byte{0, 32, 186}:    "CENTER FOR HIGH PERFORMANCE",
+       [3]byte{0, 32, 187}:    "ZAX CORPORATION",
+       [3]byte{0, 32, 188}:    "Long Reach Networks Pty Ltd",
+       [3]byte{0, 32, 189}:    "NIOBRARA R & D CORPORATION",
+       [3]byte{0, 32, 190}:    "LAN ACCESS CORP.",
+       [3]byte{0, 32, 191}:    "AEHR TEST SYSTEMS",
+       [3]byte{0, 32, 192}:    "PULSE ELECTRONICS, INC.",
+       [3]byte{0, 32, 193}:    "SAXA, Inc.",
+       [3]byte{0, 32, 194}:    "TEXAS MEMORY SYSTEMS, INC.",
+       [3]byte{0, 32, 195}:    "COUNTER SOLUTIONS LTD.",
+       [3]byte{0, 32, 196}:    "INET,INC.",
+       [3]byte{0, 32, 197}:    "EAGLE TECHNOLOGY",
+       [3]byte{0, 32, 198}:    "NECTEC",
+       [3]byte{0, 32, 199}:    "AKAI Professional M.I. Corp.",
+       [3]byte{0, 32, 200}:    "LARSCOM INCORPORATED",
+       [3]byte{0, 32, 201}:    "VICTRON BV",
+       [3]byte{0, 32, 202}:    "DIGITAL OCEAN",
+       [3]byte{0, 32, 203}:    "PRETEC ELECTRONICS CORP.",
+       [3]byte{0, 32, 204}:    "DIGITAL SERVICES, LTD.",
+       [3]byte{0, 32, 205}:    "HYBRID NETWORKS, INC.",
+       [3]byte{0, 32, 206}:    "LOGICAL DESIGN GROUP, INC.",
+       [3]byte{0, 32, 207}:    "TEST & MEASUREMENT SYSTEMS INC",
+       [3]byte{0, 32, 208}:    "VERSALYNX CORPORATION",
+       [3]byte{0, 32, 209}:    "MICROCOMPUTER SYSTEMS (M) SDN.",
+       [3]byte{0, 32, 210}:    "RAD DATA COMMUNICATIONS, LTD.",
+       [3]byte{0, 32, 211}:    "OST (OUEST STANDARD TELEMATIQU",
+       [3]byte{0, 32, 212}:    "Cabletron Systems, Inc.",
+       [3]byte{0, 32, 213}:    "VIPA GMBH",
+       [3]byte{0, 32, 214}:    "Breezecom, Ltd.",
+       [3]byte{0, 32, 215}:    "JAPAN MINICOMPUTER SYSTEMS CO., Ltd.",
+       [3]byte{0, 32, 216}:    "Nortel Networks",
+       [3]byte{0, 32, 217}:    "PANASONIC TECHNOLOGIES, INC./MIECO-US",
+       [3]byte{0, 32, 218}:    "Alcatel-Lucent Enterprise",
+       [3]byte{0, 32, 219}:    "XNET TECHNOLOGY, INC.",
+       [3]byte{0, 32, 220}:    "DENSITRON TAIWAN LTD.",
+       [3]byte{0, 32, 221}:    "Cybertec Pty Ltd",
+       [3]byte{0, 32, 222}:    "JAPAN DIGITAL LABORAT'Y CO.LTD",
+       [3]byte{0, 32, 223}:    "KYOSAN ELECTRIC MFG. CO., LTD.",
+       [3]byte{0, 32, 224}:    "Actiontec Electronics, Inc",
+       [3]byte{0, 32, 225}:    "ALAMAR ELECTRONICS",
+       [3]byte{0, 32, 226}:    "INFORMATION RESOURCE ENGINEERING",
+       [3]byte{0, 32, 227}:    "MCD KENCOM CORPORATION",
+       [3]byte{0, 32, 228}:    "HSING TECH ENTERPRISE CO., LTD",
+       [3]byte{0, 32, 229}:    "APEX DATA, INC.",
+       [3]byte{0, 32, 230}:    "LIDKOPING MACHINE TOOLS AB",
+       [3]byte{0, 32, 231}:    "B&W NUCLEAR SERVICE COMPANY",
+       [3]byte{0, 32, 232}:    "DATATREK CORPORATION",
+       [3]byte{0, 32, 233}:    "DANTEL",
+       [3]byte{0, 32, 234}:    "EFFICIENT NETWORKS, INC.",
+       [3]byte{0, 32, 235}:    "CINCINNATI MICROWAVE, INC.",
+       [3]byte{0, 32, 236}:    "TECHWARE SYSTEMS CORP.",
+       [3]byte{0, 32, 237}:    "GIGA-BYTE TECHNOLOGY CO., LTD.",
+       [3]byte{0, 32, 238}:    "GTECH CORPORATION",
+       [3]byte{0, 32, 239}:    "USC CORPORATION",
+       [3]byte{0, 32, 240}:    "UNIVERSAL MICROELECTRONICS CO.",
+       [3]byte{0, 32, 241}:    "ALTOS INDIA LIMITED",
+       [3]byte{0, 32, 242}:    "Oracle Corporation",
+       [3]byte{0, 32, 243}:    "RAYNET CORPORATION",
+       [3]byte{0, 32, 244}:    "SPECTRIX CORPORATION",
+       [3]byte{0, 32, 245}:    "PANDATEL AG",
+       [3]byte{0, 32, 246}:    "NET TEK  AND KARLNET, INC.",
+       [3]byte{0, 32, 247}:    "CYBERDATA CORPORATION",
+       [3]byte{0, 32, 248}:    "CARRERA COMPUTERS, INC.",
+       [3]byte{0, 32, 249}:    "PARALINK NETWORKS, INC.",
+       [3]byte{0, 32, 250}:    "GDE SYSTEMS, INC.",
+       [3]byte{0, 32, 251}:    "OCTEL COMMUNICATIONS CORP.",
+       [3]byte{0, 32, 252}:    "MATROX",
+       [3]byte{0, 32, 253}:    "ITV TECHNOLOGIES, INC.",
+       [3]byte{0, 32, 254}:    "TOPWARE INC. / GRAND COMPUTER",
+       [3]byte{0, 32, 255}:    "SYMMETRICAL TECHNOLOGIES",
+       [3]byte{0, 33, 0}:      "Gemtek Technology Co., Ltd.",
+       [3]byte{0, 33, 1}:      "Aplicaciones Electronicas Quasar (AEQ)",
+       [3]byte{0, 33, 2}:      "UpdateLogic Inc.",
+       [3]byte{0, 33, 3}:      "GHI Electronics, LLC",
+       [3]byte{0, 33, 4}:      "Gigaset Communications GmbH",
+       [3]byte{0, 33, 5}:      "Alcatel-Lucent IPD",
+       [3]byte{0, 33, 6}:      "RIM Testing Services",
+       [3]byte{0, 33, 7}:      "Seowonintech Co Ltd.",
+       [3]byte{0, 33, 8}:      "Nokia Danmark A/S",
+       [3]byte{0, 33, 9}:      "Nokia Danmark A/S",
+       [3]byte{0, 33, 10}:     "byd:sign Corporation",
+       [3]byte{0, 33, 11}:     "GEMINI TRAZE RFID PVT. LTD.",
+       [3]byte{0, 33, 12}:     "Cymtec Systems, Inc.",
+       [3]byte{0, 33, 13}:     "SAMSIN INNOTEC",
+       [3]byte{0, 33, 14}:     "Orpak Systems L.T.D.",
+       [3]byte{0, 33, 15}:     "Cernium Corp",
+       [3]byte{0, 33, 16}:     "Clearbox Systems",
+       [3]byte{0, 33, 17}:     "Uniphone Inc.",
+       [3]byte{0, 33, 18}:     "WISCOM SYSTEM CO.,LTD",
+       [3]byte{0, 33, 19}:     "Padtec S/A",
+       [3]byte{0, 33, 20}:     "Hylab Technology Inc.",
+       [3]byte{0, 33, 21}:     "PHYWE Systeme GmbH & Co. KG",
+       [3]byte{0, 33, 22}:     "Transcon Electronic Systems, spol. s r. o.",
+       [3]byte{0, 33, 23}:     "Tellord",
+       [3]byte{0, 33, 24}:     "Athena Tech, Inc.",
+       [3]byte{0, 33, 25}:     "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{0, 33, 26}:     "LInTech Corporation",
+       [3]byte{0, 33, 27}:     "Cisco Systems, Inc",
+       [3]byte{0, 33, 28}:     "Cisco Systems, Inc",
+       [3]byte{0, 33, 29}:     "Dataline AB",
+       [3]byte{0, 33, 30}:     "ARRIS Group, Inc.",
+       [3]byte{0, 33, 31}:     "SHINSUNG DELTATECH CO.,LTD.",
+       [3]byte{0, 33, 32}:     "Sequel Technologies",
+       [3]byte{0, 33, 33}:     "VRmagic GmbH",
+       [3]byte{0, 33, 34}:     "Chip-pro Ltd.",
+       [3]byte{0, 33, 35}:     "Aerosat Avionics",
+       [3]byte{0, 33, 36}:     "Optos Plc",
+       [3]byte{0, 33, 37}:     "KUK JE TONG SHIN Co.,LTD",
+       [3]byte{0, 33, 38}:     "Shenzhen Torch Equipment Co., Ltd.",
+       [3]byte{0, 33, 39}:     "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 33, 40}:     "Oracle Corporation",
+       [3]byte{0, 33, 41}:     "Cisco-Linksys, LLC",
+       [3]byte{0, 33, 42}:     "Audiovox Corporation",
+       [3]byte{0, 33, 43}:     "MSA Auer",
+       [3]byte{0, 33, 44}:     "SemIndia System Private Limited",
+       [3]byte{0, 33, 45}:     "SCIMOLEX CORPORATION",
+       [3]byte{0, 33, 46}:     "dresden-elektronik",
+       [3]byte{0, 33, 47}:     "Phoebe Micro Inc.",
+       [3]byte{0, 33, 48}:     "Keico Hightech Inc.",
+       [3]byte{0, 33, 49}:     "Blynke Inc.",
+       [3]byte{0, 33, 50}:     "Masterclock, Inc.",
+       [3]byte{0, 33, 51}:     "Building B, Inc",
+       [3]byte{0, 33, 52}:     "Brandywine Communications",
+       [3]byte{0, 33, 53}:     "ALCATEL-LUCENT",
+       [3]byte{0, 33, 54}:     "ARRIS Group, Inc.",
+       [3]byte{0, 33, 55}:     "Bay Controls, LLC",
+       [3]byte{0, 33, 56}:     "Cepheid",
+       [3]byte{0, 33, 57}:     "Escherlogic Inc.",
+       [3]byte{0, 33, 58}:     "Winchester Systems Inc.",
+       [3]byte{0, 33, 59}:     "Berkshire Products, Inc",
+       [3]byte{0, 33, 60}:     "AliphCom",
+       [3]byte{0, 33, 61}:     "Cermetek Microelectronics, Inc.",
+       [3]byte{0, 33, 62}:     "TomTom",
+       [3]byte{0, 33, 63}:     "A-Team Technology Ltd.",
+       [3]byte{0, 33, 64}:     "EN Technologies Inc.",
+       [3]byte{0, 33, 65}:     "RADLIVE",
+       [3]byte{0, 33, 66}:     "Advanced Control Systems doo",
+       [3]byte{0, 33, 67}:     "ARRIS Group, Inc.",
+       [3]byte{0, 33, 68}:     "SS Telecoms",
+       [3]byte{0, 33, 69}:     "Semptian Technologies Ltd.",
+       [3]byte{0, 33, 70}:     "Sanmina-SCI",
+       [3]byte{0, 33, 71}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 33, 72}:     "Kaco Solar Korea",
+       [3]byte{0, 33, 73}:     "China Daheng Group ,Inc.",
+       [3]byte{0, 33, 74}:     "Pixel Velocity, Inc",
+       [3]byte{0, 33, 75}:     "Shenzhen HAMP Science & Technology Co.,Ltd",
+       [3]byte{0, 33, 76}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 33, 77}:     "Guangzhou Skytone Transmission Technology Com. Ltd.",
+       [3]byte{0, 33, 78}:     "GS Yuasa Power Supply Ltd.",
+       [3]byte{0, 33, 79}:     "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 33, 80}:     "EYEVIEW ELECTRONICS",
+       [3]byte{0, 33, 81}:     "Millinet Co., Ltd.",
+       [3]byte{0, 33, 82}:     "General Satellite Research & Development Limited",
+       [3]byte{0, 33, 83}:     "SeaMicro Inc.",
+       [3]byte{0, 33, 84}:     "D-TACQ Solutions Ltd",
+       [3]byte{0, 33, 85}:     "Cisco Systems, Inc",
+       [3]byte{0, 33, 86}:     "Cisco Systems, Inc",
+       [3]byte{0, 33, 87}:     "National Datacast, Inc.",
+       [3]byte{0, 33, 88}:     "Style Flying Technology Co.",
+       [3]byte{0, 33, 89}:     "Juniper Networks",
+       [3]byte{0, 33, 90}:     "Hewlett Packard",
+       [3]byte{0, 33, 91}:     "SenseAnywhere",
+       [3]byte{0, 33, 92}:     "Intel Corporate",
+       [3]byte{0, 33, 93}:     "Intel Corporate",
+       [3]byte{0, 33, 94}:     "IBM Corp",
+       [3]byte{0, 33, 95}:     "IHSE GmbH",
+       [3]byte{0, 33, 96}:     "Hidea Solutions Co. Ltd.",
+       [3]byte{0, 33, 97}:     "Yournet Inc.",
+       [3]byte{0, 33, 98}:     "Nortel Networks",
+       [3]byte{0, 33, 99}:     "ASKEY COMPUTER CORP",
+       [3]byte{0, 33, 100}:    "Special Design Bureau for Seismic Instrumentation",
+       [3]byte{0, 33, 101}:    "Presstek Inc.",
+       [3]byte{0, 33, 102}:    "NovAtel Inc.",
+       [3]byte{0, 33, 103}:    "HWA JIN T&I Corp.",
+       [3]byte{0, 33, 104}:    "iVeia, LLC",
+       [3]byte{0, 33, 105}:    "Prologix, LLC.",
+       [3]byte{0, 33, 106}:    "Intel Corporate",
+       [3]byte{0, 33, 107}:    "Intel Corporate",
+       [3]byte{0, 33, 108}:    "ODVA",
+       [3]byte{0, 33, 109}:    "Soltech Co., Ltd.",
+       [3]byte{0, 33, 110}:    "Function ATI (Huizhou) Telecommunications Co., Ltd.",
+       [3]byte{0, 33, 111}:    "SymCom, Inc.",
+       [3]byte{0, 33, 112}:    "Dell Inc.",
+       [3]byte{0, 33, 113}:    "Wesung TNC Co., Ltd.",
+       [3]byte{0, 33, 114}:    "Seoultek Valley",
+       [3]byte{0, 33, 115}:    "Ion Torrent Systems, Inc.",
+       [3]byte{0, 33, 116}:    "AvaLAN Wireless",
+       [3]byte{0, 33, 117}:    "Pacific Satellite International Ltd.",
+       [3]byte{0, 33, 118}:    "YMax Telecom Ltd.",
+       [3]byte{0, 33, 119}:    "W. L. Gore & Associates",
+       [3]byte{0, 33, 120}:    "Matuschek Messtechnik GmbH",
+       [3]byte{0, 33, 121}:    "IOGEAR, Inc.",
+       [3]byte{0, 33, 122}:    "Sejin Electron, Inc.",
+       [3]byte{0, 33, 123}:    "Bastec AB",
+       [3]byte{0, 33, 124}:    "2Wire Inc",
+       [3]byte{0, 33, 125}:    "PYXIS S.R.L.",
+       [3]byte{0, 33, 126}:    "Telit Communication s.p.a",
+       [3]byte{0, 33, 127}:    "Intraco Technology Pte Ltd",
+       [3]byte{0, 33, 128}:    "ARRIS Group, Inc.",
+       [3]byte{0, 33, 129}:    "Si2 Microsystems Limited",
+       [3]byte{0, 33, 130}:    "SandLinks Systems, Ltd.",
+       [3]byte{0, 33, 131}:    "ANDRITZ HYDRO GmbH",
+       [3]byte{0, 33, 132}:    "POWERSOFT SRL",
+       [3]byte{0, 33, 133}:    "MICRO-STAR INT'L CO.,LTD.",
+       [3]byte{0, 33, 134}:    "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{0, 33, 135}:    "Imacs GmbH",
+       [3]byte{0, 33, 136}:    "EMC Corporation",
+       [3]byte{0, 33, 137}:    "AppTech, Inc.",
+       [3]byte{0, 33, 138}:    "Electronic Design and Manufacturing Company",
+       [3]byte{0, 33, 139}:    "Wescon Technology, Inc.",
+       [3]byte{0, 33, 140}:    "TopControl GMBH",
+       [3]byte{0, 33, 141}:    "AP Router Ind. Eletronica LTDA",
+       [3]byte{0, 33, 142}:    "MEKICS CO., LTD.",
+       [3]byte{0, 33, 143}:    "Avantgarde Acoustic Lautsprechersysteme GmbH",
+       [3]byte{0, 33, 144}:    "Goliath Solutions",
+       [3]byte{0, 33, 145}:    "D-Link Corporation",
+       [3]byte{0, 33, 146}:    "Baoding Galaxy Electronic Technology  Co.,Ltd",
+       [3]byte{0, 33, 147}:    "Videofon MV",
+       [3]byte{0, 33, 148}:    "Ping Communication",
+       [3]byte{0, 33, 149}:    "GWD Media Limited",
+       [3]byte{0, 33, 150}:    "Telsey  S.p.A.",
+       [3]byte{0, 33, 151}:    "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 33, 152}:    "Thai Radio Co, LTD",
+       [3]byte{0, 33, 153}:    "Vacon Plc",
+       [3]byte{0, 33, 154}:    "Cambridge Visual Networks Ltd",
+       [3]byte{0, 33, 155}:    "Dell Inc.",
+       [3]byte{0, 33, 156}:    "Honeywld Technology Corp.",
+       [3]byte{0, 33, 157}:    "Adesys BV",
+       [3]byte{0, 33, 158}:    "Sony Mobile Communications AB",
+       [3]byte{0, 33, 159}:    "SATEL OY",
+       [3]byte{0, 33, 160}:    "Cisco Systems, Inc",
+       [3]byte{0, 33, 161}:    "Cisco Systems, Inc",
+       [3]byte{0, 33, 162}:    "EKE-Electronics Ltd.",
+       [3]byte{0, 33, 163}:    "Micromint",
+       [3]byte{0, 33, 164}:    "Dbii Networks",
+       [3]byte{0, 33, 165}:    "ERLPhase Power Technologies Ltd.",
+       [3]byte{0, 33, 166}:    "Videotec Spa",
+       [3]byte{0, 33, 167}:    "Hantle System Co., Ltd.",
+       [3]byte{0, 33, 168}:    "Telephonics Corporation",
+       [3]byte{0, 33, 169}:    "Mobilink Telecom Co.,Ltd",
+       [3]byte{0, 33, 170}:    "Nokia Danmark A/S",
+       [3]byte{0, 33, 171}:    "Nokia Danmark A/S",
+       [3]byte{0, 33, 172}:    "Infrared Integrated Systems Ltd",
+       [3]byte{0, 33, 173}:    "Nordic ID Oy",
+       [3]byte{0, 33, 174}:    "ALCATEL-LUCENT FRANCE - WTD",
+       [3]byte{0, 33, 175}:    "Radio Frequency Systems",
+       [3]byte{0, 33, 176}:    "Tyco Telecommunications",
+       [3]byte{0, 33, 177}:    "DIGITAL SOLUTIONS LTD",
+       [3]byte{0, 33, 178}:    "Fiberblaze A/S",
+       [3]byte{0, 33, 179}:    "Ross Controls",
+       [3]byte{0, 33, 180}:    "APRO MEDIA CO., LTD",
+       [3]byte{0, 33, 181}:    "Galvanic Ltd",
+       [3]byte{0, 33, 182}:    "Triacta Power Technologies Inc.",
+       [3]byte{0, 33, 183}:    "Lexmark International Inc.",
+       [3]byte{0, 33, 184}:    "Inphi Corporation",
+       [3]byte{0, 33, 185}:    "Universal Devices Inc.",
+       [3]byte{0, 33, 186}:    "Texas Instruments",
+       [3]byte{0, 33, 187}:    "Riken Keiki Co., Ltd.",
+       [3]byte{0, 33, 188}:    "ZALA COMPUTER",
+       [3]byte{0, 33, 189}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 33, 190}:    "Cisco SPVTG",
+       [3]byte{0, 33, 191}:    "Hitachi High-Tech Control Systems Corporation",
+       [3]byte{0, 33, 192}:    "Mobile Appliance, Inc.",
+       [3]byte{0, 33, 193}:    "ABB Oy / Medium Voltage Products",
+       [3]byte{0, 33, 194}:    "GL Communications Inc",
+       [3]byte{0, 33, 195}:    "CORNELL Communications, Inc.",
+       [3]byte{0, 33, 196}:    "Consilium AB",
+       [3]byte{0, 33, 197}:    "3DSP Corp",
+       [3]byte{0, 33, 198}:    "CSJ Global, Inc.",
+       [3]byte{0, 33, 199}:    "Russound",
+       [3]byte{0, 33, 200}:    "LOHUIS Networks",
+       [3]byte{0, 33, 201}:    "Wavecom Asia Pacific Limited",
+       [3]byte{0, 33, 202}:    "ART System Co., Ltd.",
+       [3]byte{0, 33, 203}:    "SMS TECNOLOGIA ELETRONICA LTDA",
+       [3]byte{0, 33, 204}:    "Flextronics International",
+       [3]byte{0, 33, 205}:    "LiveTV",
+       [3]byte{0, 33, 206}:    "NTC-Metrotek",
+       [3]byte{0, 33, 207}:    "The Crypto Group",
+       [3]byte{0, 33, 208}:    "Global Display Solutions Spa",
+       [3]byte{0, 33, 209}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 33, 210}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 33, 211}:    "BOCOM SECURITY(ASIA PACIFIC) LIMITED",
+       [3]byte{0, 33, 212}:    "Vollmer Werke GmbH",
+       [3]byte{0, 33, 213}:    "X2E GmbH",
+       [3]byte{0, 33, 214}:    "LXI Consortium",
+       [3]byte{0, 33, 215}:    "Cisco Systems, Inc",
+       [3]byte{0, 33, 216}:    "Cisco Systems, Inc",
+       [3]byte{0, 33, 217}:    "SEKONIC CORPORATION",
+       [3]byte{0, 33, 218}:    "Automation Products Group Inc.",
+       [3]byte{0, 33, 219}:    "Santachi Video Technology (Shenzhen) Co., Ltd.",
+       [3]byte{0, 33, 220}:    "TECNOALARM S.r.l.",
+       [3]byte{0, 33, 221}:    "Northstar Systems Corp",
+       [3]byte{0, 33, 222}:    "Firepro Wireless",
+       [3]byte{0, 33, 223}:    "Martin Christ GmbH",
+       [3]byte{0, 33, 224}:    "CommAgility Ltd",
+       [3]byte{0, 33, 225}:    "Nortel Networks",
+       [3]byte{0, 33, 226}:    "visago Systems & Controls GmbH & Co. KG",
+       [3]byte{0, 33, 227}:    "SerialTek LLC",
+       [3]byte{0, 33, 228}:    "I-WIN",
+       [3]byte{0, 33, 229}:    "Display Solution AG",
+       [3]byte{0, 33, 230}:    "Starlight Video Limited",
+       [3]byte{0, 33, 231}:    "Informatics Services Corporation",
+       [3]byte{0, 33, 232}:    "Murata Manufacturing Co., Ltd.",
+       [3]byte{0, 33, 233}:    "Apple, Inc.",
+       [3]byte{0, 33, 234}:    "Bystronic Laser AG",
+       [3]byte{0, 33, 235}:    "ESP SYSTEMS, LLC",
+       [3]byte{0, 33, 236}:    "Solutronic GmbH",
+       [3]byte{0, 33, 237}:    "Telegesis",
+       [3]byte{0, 33, 238}:    "Full Spectrum Inc.",
+       [3]byte{0, 33, 239}:    "Kapsys",
+       [3]byte{0, 33, 240}:    "EW3 Technologies LLC",
+       [3]byte{0, 33, 241}:    "Tutus Data AB",
+       [3]byte{0, 33, 242}:    "EASY3CALL Technology Limited",
+       [3]byte{0, 33, 243}:    "Si14 SpA",
+       [3]byte{0, 33, 244}:    "INRange Systems, Inc",
+       [3]byte{0, 33, 245}:    "Western Engravers Supply, Inc.",
+       [3]byte{0, 33, 246}:    "Oracle Corporation",
+       [3]byte{0, 33, 247}:    "HPN Supply Chain",
+       [3]byte{0, 33, 248}:    "Enseo, Inc.",
+       [3]byte{0, 33, 249}:    "WIRECOM Technologies",
+       [3]byte{0, 33, 250}:    "A4SP Technologies Ltd.",
+       [3]byte{0, 33, 251}:    "LG Electronics (Mobile Communications)",
+       [3]byte{0, 33, 252}:    "Nokia Danmark A/S",
+       [3]byte{0, 33, 253}:    "LACROIX TRAFFIC S.A.U",
+       [3]byte{0, 33, 254}:    "Nokia Danmark A/S",
+       [3]byte{0, 33, 255}:    "Cyfrowy Polsat SA",
+       [3]byte{0, 34, 0}:      "IBM Corp",
+       [3]byte{0, 34, 1}:      "Aksys Networks Inc",
+       [3]byte{0, 34, 2}:      "Excito Elektronik i Skåne AB",
+       [3]byte{0, 34, 3}:      "Glensound Electronics Ltd",
+       [3]byte{0, 34, 4}:      "KORATEK",
+       [3]byte{0, 34, 5}:      "WeLink Solutions, Inc.",
+       [3]byte{0, 34, 6}:      "Cyberdyne Inc.",
+       [3]byte{0, 34, 7}:      "Inteno Broadband Technology AB",
+       [3]byte{0, 34, 8}:      "Certicom Corp",
+       [3]byte{0, 34, 9}:      "Omron Healthcare Co., Ltd",
+       [3]byte{0, 34, 10}:     "OnLive, Inc",
+       [3]byte{0, 34, 11}:     "National Source Coding Center",
+       [3]byte{0, 34, 12}:     "Cisco Systems, Inc",
+       [3]byte{0, 34, 13}:     "Cisco Systems, Inc",
+       [3]byte{0, 34, 14}:     "Indigo Security Co., Ltd.",
+       [3]byte{0, 34, 15}:     "MoCA (Multimedia over Coax Alliance)",
+       [3]byte{0, 34, 16}:     "ARRIS Group, Inc.",
+       [3]byte{0, 34, 17}:     "Rohati Systems",
+       [3]byte{0, 34, 18}:     "CAI Networks, Inc.",
+       [3]byte{0, 34, 19}:     "PCI CORPORATION",
+       [3]byte{0, 34, 20}:     "RINNAI KOREA",
+       [3]byte{0, 34, 21}:     "ASUSTek COMPUTER INC.",
+       [3]byte{0, 34, 22}:     "SHIBAURA VENDING MACHINE CORPORATION",
+       [3]byte{0, 34, 23}:     "Neat Electronics",
+       [3]byte{0, 34, 24}:     "Verivue Inc.",
+       [3]byte{0, 34, 25}:     "Dell Inc.",
+       [3]byte{0, 34, 26}:     "Audio Precision",
+       [3]byte{0, 34, 27}:     "Morega Systems",
+       [3]byte{0, 34, 28}:     "Private",
+       [3]byte{0, 34, 29}:     "Freegene Technology LTD",
+       [3]byte{0, 34, 30}:     "Media Devices Co., Ltd.",
+       [3]byte{0, 34, 31}:     "eSang Technologies Co., Ltd.",
+       [3]byte{0, 34, 32}:     "Mitac Technology Corp",
+       [3]byte{0, 34, 33}:     "ITOH DENKI CO,LTD.",
+       [3]byte{0, 34, 34}:     "Schaffner Deutschland GmbH",
+       [3]byte{0, 34, 35}:     "TimeKeeping Systems, Inc.",
+       [3]byte{0, 34, 36}:     "Good Will Instrument Co., Ltd.",
+       [3]byte{0, 34, 37}:     "Thales Avionics Ltd",
+       [3]byte{0, 34, 38}:     "Avaak, Inc.",
+       [3]byte{0, 34, 39}:     "uv-electronic GmbH",
+       [3]byte{0, 34, 40}:     "Breeze Innovations Ltd.",
+       [3]byte{0, 34, 41}:     "Compumedics Ltd",
+       [3]byte{0, 34, 42}:     "SoundEar A/S",
+       [3]byte{0, 34, 43}:     "Nucomm, Inc.",
+       [3]byte{0, 34, 44}:     "Ceton Corp",
+       [3]byte{0, 34, 45}:     "SMC Networks Inc.",
+       [3]byte{0, 34, 46}:     "maintech GmbH",
+       [3]byte{0, 34, 47}:     "Open Grid Computing, Inc.",
+       [3]byte{0, 34, 48}:     "FutureLogic Inc.",
+       [3]byte{0, 34, 49}:     "SMT&C Co., Ltd.",
+       [3]byte{0, 34, 50}:     "Design Design Technology Ltd",
+       [3]byte{0, 34, 51}:     "ADB Broadband Italia",
+       [3]byte{0, 34, 52}:     "Corventis Inc.",
+       [3]byte{0, 34, 53}:     "Strukton Systems bv",
+       [3]byte{0, 34, 54}:     "VECTOR SP. Z O.O.",
+       [3]byte{0, 34, 55}:     "Shinhint Group",
+       [3]byte{0, 34, 56}:     "LOGIPLUS",
+       [3]byte{0, 34, 57}:     "Indiana Life Sciences Incorporated",
+       [3]byte{0, 34, 58}:     "Cisco SPVTG",
+       [3]byte{0, 34, 59}:     "Communication Networks, LLC",
+       [3]byte{0, 34, 60}:     "RATIO Entwicklungen GmbH",
+       [3]byte{0, 34, 61}:     "JumpGen Systems, LLC",
+       [3]byte{0, 34, 62}:     "IRTrans GmbH",
+       [3]byte{0, 34, 63}:     "NETGEAR",
+       [3]byte{0, 34, 64}:     "Universal Telecom S/A",
+       [3]byte{0, 34, 65}:     "Apple, Inc.",
+       [3]byte{0, 34, 66}:     "Alacron Inc.",
+       [3]byte{0, 34, 67}:     "AzureWave Technology Inc.",
+       [3]byte{0, 34, 68}:     "Chengdu Linkon Communications Device Co., Ltd",
+       [3]byte{0, 34, 69}:     "Leine & Linde AB",
+       [3]byte{0, 34, 70}:     "Evoc Intelligent Technology Co.,Ltd.",
+       [3]byte{0, 34, 71}:     "DAC ENGINEERING CO., LTD.",
+       [3]byte{0, 34, 72}:     "Microsoft Corporation",
+       [3]byte{0, 34, 73}:     "HOME MULTIENERGY SL",
+       [3]byte{0, 34, 74}:     "RAYLASE AG",
+       [3]byte{0, 34, 75}:     "AIRTECH TECHNOLOGIES, INC.",
+       [3]byte{0, 34, 76}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 34, 77}:     "MITAC INTERNATIONAL CORP.",
+       [3]byte{0, 34, 78}:     "SEEnergy Corp.",
+       [3]byte{0, 34, 79}:     "Byzoro Networks Ltd.",
+       [3]byte{0, 34, 80}:     "Point Six Wireless, LLC",
+       [3]byte{0, 34, 81}:     "Lumasense Technologies",
+       [3]byte{0, 34, 82}:     "ZOLL Lifecor Corporation",
+       [3]byte{0, 34, 83}:     "Entorian Technologies",
+       [3]byte{0, 34, 84}:     "Bigelow Aerospace",
+       [3]byte{0, 34, 85}:     "Cisco Systems, Inc",
+       [3]byte{0, 34, 86}:     "Cisco Systems, Inc",
+       [3]byte{0, 34, 87}:     "3COM EUROPE LTD",
+       [3]byte{0, 34, 88}:     "Taiyo Yuden Co., Ltd.",
+       [3]byte{0, 34, 89}:     "Guangzhou New Postcom Equipment Co.,Ltd.",
+       [3]byte{0, 34, 90}:     "Garde Security AB",
+       [3]byte{0, 34, 91}:     "Teradici Corporation",
+       [3]byte{0, 34, 92}:     "Multimedia & Communication Technology",
+       [3]byte{0, 34, 93}:     "Digicable Network India Pvt. Ltd.",
+       [3]byte{0, 34, 94}:     "Uwin Technologies Co.,LTD",
+       [3]byte{0, 34, 95}:     "Liteon Technology Corporation",
+       [3]byte{0, 34, 96}:     "AFREEY Inc.",
+       [3]byte{0, 34, 97}:     "Frontier Silicon Ltd",
+       [3]byte{0, 34, 98}:     "BEP Marine",
+       [3]byte{0, 34, 99}:     "Koos Technical Services, Inc.",
+       [3]byte{0, 34, 100}:    "Hewlett Packard",
+       [3]byte{0, 34, 101}:    "Nokia Danmark A/S",
+       [3]byte{0, 34, 102}:    "Nokia Danmark A/S",
+       [3]byte{0, 34, 103}:    "Nortel Networks",
+       [3]byte{0, 34, 104}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 34, 105}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 34, 106}:    "Honeywell",
+       [3]byte{0, 34, 107}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 34, 108}:    "LinkSprite Technologies, Inc.",
+       [3]byte{0, 34, 109}:    "Shenzhen GIEC Electronics Co., Ltd.",
+       [3]byte{0, 34, 110}:    "Gowell Electronic Limited",
+       [3]byte{0, 34, 111}:    "3onedata Technology Co. Ltd.",
+       [3]byte{0, 34, 112}:    "ABK North America, LLC",
+       [3]byte{0, 34, 113}:    "Jäger Computergesteuerte Meßtechnik GmbH.",
+       [3]byte{0, 34, 114}:    "American Micro-Fuel Device Corp.",
+       [3]byte{0, 34, 115}:    "Techway",
+       [3]byte{0, 34, 116}:    "FamilyPhone AB",
+       [3]byte{0, 34, 117}:    "Belkin International Inc.",
+       [3]byte{0, 34, 118}:    "Triple EYE B.V.",
+       [3]byte{0, 34, 119}:    "NEC Australia Pty Ltd",
+       [3]byte{0, 34, 120}:    "Shenzhen  Tongfang Multimedia  Technology Co.,Ltd.",
+       [3]byte{0, 34, 121}:    "Nippon Conlux Co., Ltd.",
+       [3]byte{0, 34, 122}:    "Telecom Design",
+       [3]byte{0, 34, 123}:    "Apogee Labs, Inc.",
+       [3]byte{0, 34, 124}:    "Woori SMT Co.,ltd",
+       [3]byte{0, 34, 125}:    "YE DATA INC.",
+       [3]byte{0, 34, 126}:    "Chengdu 30Kaitian Communication Industry Co.Ltd",
+       [3]byte{0, 34, 127}:    "Ruckus Wireless",
+       [3]byte{0, 34, 128}:    "A2B Electronics AB",
+       [3]byte{0, 34, 129}:    "Daintree Networks Pty",
+       [3]byte{0, 34, 130}:    "8086 Consultancy",
+       [3]byte{0, 34, 131}:    "Juniper Networks",
+       [3]byte{0, 34, 132}:    "DESAY A&V SCIENCE AND TECHNOLOGY CO.,LTD",
+       [3]byte{0, 34, 133}:    "NOMUS COMM SYSTEMS",
+       [3]byte{0, 34, 134}:    "ASTRON",
+       [3]byte{0, 34, 135}:    "Titan Wireless LLC",
+       [3]byte{0, 34, 136}:    "Sagrad, Inc.",
+       [3]byte{0, 34, 137}:    "Optosecurity Inc.",
+       [3]byte{0, 34, 138}:    "Teratronik elektronische systeme gmbh",
+       [3]byte{0, 34, 139}:    "Kensington Computer Products Group",
+       [3]byte{0, 34, 140}:    "Photon Europe GmbH",
+       [3]byte{0, 34, 141}:    "GBS Laboratories LLC",
+       [3]byte{0, 34, 142}:    "TV-NUMERIC",
+       [3]byte{0, 34, 143}:    "CNRS",
+       [3]byte{0, 34, 144}:    "Cisco Systems, Inc",
+       [3]byte{0, 34, 145}:    "Cisco Systems, Inc",
+       [3]byte{0, 34, 146}:    "Cinetal",
+       [3]byte{0, 34, 147}:    "zte corporation",
+       [3]byte{0, 34, 148}:    "KYOCERA CORPORATION",
+       [3]byte{0, 34, 149}:    "SGM Technology for lighting spa",
+       [3]byte{0, 34, 150}:    "LinoWave Corporation",
+       [3]byte{0, 34, 151}:    "XMOS Semiconductor",
+       [3]byte{0, 34, 152}:    "Sony Mobile Communications AB",
+       [3]byte{0, 34, 153}:    "SeaMicro Inc.",
+       [3]byte{0, 34, 154}:    "Lastar, Inc.",
+       [3]byte{0, 34, 155}:    "AverLogic Technologies, Inc.",
+       [3]byte{0, 34, 156}:    "Verismo Networks Inc",
+       [3]byte{0, 34, 157}:    "PYUNG-HWA IND.CO.,LTD",
+       [3]byte{0, 34, 158}:    "Social Aid Research Co., Ltd.",
+       [3]byte{0, 34, 159}:    "Sensys Traffic AB",
+       [3]byte{0, 34, 160}:    "Delphi Corporation",
+       [3]byte{0, 34, 161}:    "Huawei Symantec Technologies Co.,Ltd.",
+       [3]byte{0, 34, 162}:    "Xtramus Technologies",
+       [3]byte{0, 34, 163}:    "California Eastern Laboratories",
+       [3]byte{0, 34, 164}:    "2Wire Inc",
+       [3]byte{0, 34, 165}:    "Texas Instruments",
+       [3]byte{0, 34, 166}:    "Sony Computer Entertainment America",
+       [3]byte{0, 34, 167}:    "Tyco Electronics AMP GmbH",
+       [3]byte{0, 34, 168}:    "Ouman Oy",
+       [3]byte{0, 34, 169}:    "LG Electronics (Mobile Communications)",
+       [3]byte{0, 34, 170}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 34, 171}:    "Shenzhen Turbosight Technology Ltd",
+       [3]byte{0, 34, 172}:    "Hangzhou Siyuan Tech. Co., Ltd",
+       [3]byte{0, 34, 173}:    "TELESIS TECHNOLOGIES, INC.",
+       [3]byte{0, 34, 174}:    "Mattel Inc.",
+       [3]byte{0, 34, 175}:    "Safety Vision",
+       [3]byte{0, 34, 176}:    "D-Link Corporation",
+       [3]byte{0, 34, 177}:    "Elbit Systems Ltd.",
+       [3]byte{0, 34, 178}:    "4RF Communications Ltd",
+       [3]byte{0, 34, 179}:    "Sei S.p.A.",
+       [3]byte{0, 34, 180}:    "ARRIS Group, Inc.",
+       [3]byte{0, 34, 181}:    "NOVITA",
+       [3]byte{0, 34, 182}:    "Superflow Technologies Group",
+       [3]byte{0, 34, 183}:    "GSS Grundig SAT-Systems GmbH",
+       [3]byte{0, 34, 184}:    "Norcott",
+       [3]byte{0, 34, 185}:    "Analogix Seminconductor, Inc",
+       [3]byte{0, 34, 186}:    "HUTH Elektronik Systeme GmbH",
+       [3]byte{0, 34, 187}:    "beyerdynamic GmbH & Co. KG",
+       [3]byte{0, 34, 188}:    "JDSU France SAS",
+       [3]byte{0, 34, 189}:    "Cisco Systems, Inc",
+       [3]byte{0, 34, 190}:    "Cisco Systems, Inc",
+       [3]byte{0, 34, 191}:    "SieAmp Group of Companies",
+       [3]byte{0, 34, 192}:    "Shenzhen Forcelink Electronic Co, Ltd",
+       [3]byte{0, 34, 193}:    "Active Storage Inc.",
+       [3]byte{0, 34, 194}:    "Proview Eletrônica do Brasil LTDA",
+       [3]byte{0, 34, 195}:    "Zeeport Technology Inc.",
+       [3]byte{0, 34, 196}:    "epro GmbH",
+       [3]byte{0, 34, 197}:    "INFORSON Co,Ltd.",
+       [3]byte{0, 34, 198}:    "Sutus Inc",
+       [3]byte{0, 34, 199}:    "SEGGER Microcontroller GmbH & Co. KG",
+       [3]byte{0, 34, 200}:    "Applied Instruments B.V.",
+       [3]byte{0, 34, 201}:    "Lenord, Bauer & Co GmbH",
+       [3]byte{0, 34, 202}:    "Anviz Biometric Tech. Co., Ltd.",
+       [3]byte{0, 34, 203}:    "IONODES Inc.",
+       [3]byte{0, 34, 204}:    "SciLog, Inc.",
+       [3]byte{0, 34, 205}:    "Ared Technology Co., Ltd.",
+       [3]byte{0, 34, 206}:    "Cisco SPVTG",
+       [3]byte{0, 34, 207}:    "PLANEX COMMUNICATIONS INC.",
+       [3]byte{0, 34, 208}:    "Polar Electro Oy",
+       [3]byte{0, 34, 209}:    "Albrecht Jung GmbH & Co. KG",
+       [3]byte{0, 34, 210}:    "All Earth Comércio de Eletrônicos LTDA.",
+       [3]byte{0, 34, 211}:    "Hub-Tech",
+       [3]byte{0, 34, 212}:    "ComWorth Co., Ltd.",
+       [3]byte{0, 34, 213}:    "Eaton Corp. Electrical Group Data Center Solutions - Pulizzi",
+       [3]byte{0, 34, 214}:    "Cypak AB",
+       [3]byte{0, 34, 215}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 34, 216}:    "Shenzhen GST Security and Safety Technology Limited",
+       [3]byte{0, 34, 217}:    "Fortex Industrial Ltd.",
+       [3]byte{0, 34, 218}:    "ANATEK, LLC",
+       [3]byte{0, 34, 219}:    "Translogic Corporation",
+       [3]byte{0, 34, 220}:    "Vigil Health Solutions Inc.",
+       [3]byte{0, 34, 221}:    "Protecta Electronics Ltd",
+       [3]byte{0, 34, 222}:    "OPPO Digital, Inc.",
+       [3]byte{0, 34, 223}:    "TAMUZ Monitors",
+       [3]byte{0, 34, 224}:    "Atlantic Software Technologies S.r.L.",
+       [3]byte{0, 34, 225}:    "ZORT Labs, LLC.",
+       [3]byte{0, 34, 226}:    "WABTEC Transit Division",
+       [3]byte{0, 34, 227}:    "Amerigon",
+       [3]byte{0, 34, 228}:    "APASS TECHNOLOGY CO., LTD.",
+       [3]byte{0, 34, 229}:    "Fisher-Rosemount Systems Inc.",
+       [3]byte{0, 34, 230}:    "Intelligent Data",
+       [3]byte{0, 34, 231}:    "WPS Parking Systems",
+       [3]byte{0, 34, 232}:    "Applition Co., Ltd.",
+       [3]byte{0, 34, 233}:    "ProVision Communications",
+       [3]byte{0, 34, 234}:    "Rustelcom Inc.",
+       [3]byte{0, 34, 235}:    "Data Respons A/S",
+       [3]byte{0, 34, 236}:    "IDEALBT TECHNOLOGY CORPORATION",
+       [3]byte{0, 34, 237}:    "TSI Power Corporation",
+       [3]byte{0, 34, 238}:    "Algo Communication Products Ltd",
+       [3]byte{0, 34, 239}:    "iWDL Technologies",
+       [3]byte{0, 34, 240}:    "3 Greens Aviation Limited",
+       [3]byte{0, 34, 241}:    "Private",
+       [3]byte{0, 34, 242}:    "SunPower Corp",
+       [3]byte{0, 34, 243}:    "SHARP Corporation",
+       [3]byte{0, 34, 244}:    "AMPAK Technology, Inc.",
+       [3]byte{0, 34, 245}:    "Advanced Realtime Tracking GmbH",
+       [3]byte{0, 34, 246}:    "Syracuse Research Corporation",
+       [3]byte{0, 34, 247}:    "Conceptronic",
+       [3]byte{0, 34, 248}:    "PIMA Electronic Systems Ltd.",
+       [3]byte{0, 34, 249}:    "Pollin Electronic GmbH",
+       [3]byte{0, 34, 250}:    "Intel Corporate",
+       [3]byte{0, 34, 251}:    "Intel Corporate",
+       [3]byte{0, 34, 252}:    "Nokia Danmark A/S",
+       [3]byte{0, 34, 253}:    "Nokia Danmark A/S",
+       [3]byte{0, 34, 254}:    "Advanced Illumination",
+       [3]byte{0, 34, 255}:    "NIVIS LLC",
+       [3]byte{0, 35, 0}:      "Cayee Computer Ltd.",
+       [3]byte{0, 35, 1}:      "Witron Technology Limited",
+       [3]byte{0, 35, 2}:      "Cobalt Digital, Inc.",
+       [3]byte{0, 35, 3}:      "LITE-ON IT Corporation",
+       [3]byte{0, 35, 4}:      "Cisco Systems, Inc",
+       [3]byte{0, 35, 5}:      "Cisco Systems, Inc",
+       [3]byte{0, 35, 6}:      "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 35, 7}:      "FUTURE INNOVATION TECH CO.,LTD",
+       [3]byte{0, 35, 8}:      "Arcadyan Technology Corporation",
+       [3]byte{0, 35, 9}:      "Janam Technologies LLC",
+       [3]byte{0, 35, 10}:     "ARBURG GmbH & Co KG",
+       [3]byte{0, 35, 11}:     "ARRIS Group, Inc.",
+       [3]byte{0, 35, 12}:     "CLOVER ELECTRONICS CO.,LTD.",
+       [3]byte{0, 35, 13}:     "Nortel Networks",
+       [3]byte{0, 35, 14}:     "Gorba AG",
+       [3]byte{0, 35, 15}:     "Hirsch Electronics Corporation",
+       [3]byte{0, 35, 16}:     "LNC Technology Co., Ltd.",
+       [3]byte{0, 35, 17}:     "Gloscom Co., Ltd.",
+       [3]byte{0, 35, 18}:     "Apple, Inc.",
+       [3]byte{0, 35, 19}:     "Qool Technologies Ltd.",
+       [3]byte{0, 35, 20}:     "Intel Corporate",
+       [3]byte{0, 35, 21}:     "Intel Corporate",
+       [3]byte{0, 35, 22}:     "KISAN ELECTRONICS CO",
+       [3]byte{0, 35, 23}:     "Lasercraft Inc",
+       [3]byte{0, 35, 24}:     "Toshiba",
+       [3]byte{0, 35, 25}:     "Sielox LLC",
+       [3]byte{0, 35, 26}:     "ITF Co., Ltd.",
+       [3]byte{0, 35, 27}:     "Danaher Motion - Kollmorgen",
+       [3]byte{0, 35, 28}:     "Fourier Systems Ltd.",
+       [3]byte{0, 35, 29}:     "Deltacom Electronics Ltd",
+       [3]byte{0, 35, 30}:     "Cezzer Multimedia Technologies",
+       [3]byte{0, 35, 31}:     "Guangda Electronic & Telecommunication Technology Development Co., Ltd.",
+       [3]byte{0, 35, 32}:     "Nicira Networks",
+       [3]byte{0, 35, 33}:     "Avitech International Corp",
+       [3]byte{0, 35, 34}:     "KISS Teknical Solutions, Inc.",
+       [3]byte{0, 35, 35}:     "Zylin AS",
+       [3]byte{0, 35, 36}:     "G-PRO COMPUTER",
+       [3]byte{0, 35, 37}:     "IOLAN Holding",
+       [3]byte{0, 35, 38}:     "FUJITSU LIMITED",
+       [3]byte{0, 35, 39}:     "Shouyo Electronics CO., LTD",
+       [3]byte{0, 35, 40}:     "ALCON TELECOMMUNICATIONS CO., LTD.",
+       [3]byte{0, 35, 41}:     "DDRdrive LLC",
+       [3]byte{0, 35, 42}:     "eonas IT-Beratung und -Entwicklung GmbH",
+       [3]byte{0, 35, 43}:     "IRD A/S",
+       [3]byte{0, 35, 44}:     "Senticare",
+       [3]byte{0, 35, 45}:     "SandForce",
+       [3]byte{0, 35, 46}:     "Kedah Electronics Engineering, LLC",
+       [3]byte{0, 35, 47}:     "Advanced Card Systems Ltd.",
+       [3]byte{0, 35, 48}:     "DIZIPIA, INC.",
+       [3]byte{0, 35, 49}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 35, 50}:     "Apple, Inc.",
+       [3]byte{0, 35, 51}:     "Cisco Systems, Inc",
+       [3]byte{0, 35, 52}:     "Cisco Systems, Inc",
+       [3]byte{0, 35, 53}:     "Linkflex Co.,Ltd",
+       [3]byte{0, 35, 54}:     "METEL s.r.o.",
+       [3]byte{0, 35, 55}:     "Global Star Solutions ULC",
+       [3]byte{0, 35, 56}:     "OJ-Electronics A/S",
+       [3]byte{0, 35, 57}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 35, 58}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 35, 59}:     "C-Matic Systems Ltd",
+       [3]byte{0, 35, 60}:     "Alflex",
+       [3]byte{0, 35, 61}:     "Novero holding B.V.",
+       [3]byte{0, 35, 62}:     "Alcatel-Lucent IPD",
+       [3]byte{0, 35, 63}:     "Purechoice Inc",
+       [3]byte{0, 35, 64}:     "MiXTelematics",
+       [3]byte{0, 35, 65}:     "Vanderbilt International (SWE) AB",
+       [3]byte{0, 35, 66}:     "Coffee Equipment Company",
+       [3]byte{0, 35, 67}:     "TEM AG",
+       [3]byte{0, 35, 68}:     "Objective Interface Systems, Inc.",
+       [3]byte{0, 35, 69}:     "Sony Mobile Communications AB",
+       [3]byte{0, 35, 70}:     "Vestac",
+       [3]byte{0, 35, 71}:     "ProCurve Networking by HP",
+       [3]byte{0, 35, 72}:     "Sagemcom Broadband SAS",
+       [3]byte{0, 35, 73}:     "Helmholtz Centre Berlin for Material and Energy",
+       [3]byte{0, 35, 74}:     "Private",
+       [3]byte{0, 35, 75}:     "Inyuan Technology Inc.",
+       [3]byte{0, 35, 76}:     "KTC AB",
+       [3]byte{0, 35, 77}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 35, 78}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 35, 79}:     "Luminous Power Technologies Pvt. Ltd.",
+       [3]byte{0, 35, 80}:     "LynTec",
+       [3]byte{0, 35, 81}:     "2Wire Inc",
+       [3]byte{0, 35, 82}:     "DATASENSOR S.p.A.",
+       [3]byte{0, 35, 83}:     "F E T Elettronica snc",
+       [3]byte{0, 35, 84}:     "ASUSTek COMPUTER INC.",
+       [3]byte{0, 35, 85}:     "Kinco Automation(Shanghai) Ltd.",
+       [3]byte{0, 35, 86}:     "Packet Forensics LLC",
+       [3]byte{0, 35, 87}:     "Pitronot Technologies and Engineering P.T.E. Ltd.",
+       [3]byte{0, 35, 88}:     "SYSTEL SA",
+       [3]byte{0, 35, 89}:     "Benchmark Electronics ( Thailand ) Public Company Limited",
+       [3]byte{0, 35, 90}:     "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{0, 35, 91}:     "Gulfstream",
+       [3]byte{0, 35, 92}:     "Aprius, Inc.",
+       [3]byte{0, 35, 93}:     "Cisco Systems, Inc",
+       [3]byte{0, 35, 94}:     "Cisco Systems, Inc",
+       [3]byte{0, 35, 95}:     "Silicon Micro Sensors GmbH",
+       [3]byte{0, 35, 96}:     "Lookit Technology Co., Ltd",
+       [3]byte{0, 35, 97}:     "Unigen Corporation",
+       [3]byte{0, 35, 98}:     "Goldline Controls",
+       [3]byte{0, 35, 99}:     "Zhuhai Raysharp Technology Co.,Ltd",
+       [3]byte{0, 35, 100}:    "Power Instruments Pte Ltd",
+       [3]byte{0, 35, 101}:    "Insta Elektro GmbH",
+       [3]byte{0, 35, 102}:    "Beijing Siasun Electronic System Co.,Ltd.",
+       [3]byte{0, 35, 103}:    "UniControls a.s.",
+       [3]byte{0, 35, 104}:    "Zebra Technologies Inc",
+       [3]byte{0, 35, 105}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 35, 106}:    "SmartRG Inc",
+       [3]byte{0, 35, 107}:    "Xembedded, Inc.",
+       [3]byte{0, 35, 108}:    "Apple, Inc.",
+       [3]byte{0, 35, 109}:    "ResMed Ltd",
+       [3]byte{0, 35, 110}:    "Burster GmbH & Co KG",
+       [3]byte{0, 35, 111}:    "DAQ System",
+       [3]byte{0, 35, 112}:    "Snell",
+       [3]byte{0, 35, 113}:    "SOAM Systel",
+       [3]byte{0, 35, 114}:    "MORE STAR INDUSTRIAL GROUP LIMITED",
+       [3]byte{0, 35, 115}:    "GridIron Systems, Inc.",
+       [3]byte{0, 35, 116}:    "ARRIS Group, Inc.",
+       [3]byte{0, 35, 117}:    "ARRIS Group, Inc.",
+       [3]byte{0, 35, 118}:    "HTC Corporation",
+       [3]byte{0, 35, 119}:    "Isotek Electronics Ltd",
+       [3]byte{0, 35, 120}:    "GN Netcom A/S",
+       [3]byte{0, 35, 121}:    "Union Business Machines Co. Ltd.",
+       [3]byte{0, 35, 122}:    "RIM",
+       [3]byte{0, 35, 123}:    "WHDI LLC",
+       [3]byte{0, 35, 124}:    "NEOTION",
+       [3]byte{0, 35, 125}:    "Hewlett Packard",
+       [3]byte{0, 35, 126}:    "ELSTER GMBH",
+       [3]byte{0, 35, 127}:    "PLANTRONICS, INC.",
+       [3]byte{0, 35, 128}:    "Nanoteq",
+       [3]byte{0, 35, 129}:    "Lengda Technology(Xiamen) Co.,Ltd.",
+       [3]byte{0, 35, 130}:    "Lih Rong electronic Enterprise Co., Ltd.",
+       [3]byte{0, 35, 131}:    "InMage Systems Inc",
+       [3]byte{0, 35, 132}:    "GGH Engineering s.r.l.",
+       [3]byte{0, 35, 133}:    "ANTIPODE",
+       [3]byte{0, 35, 134}:    "Tour & Andersson AB",
+       [3]byte{0, 35, 135}:    "ThinkFlood, Inc.",
+       [3]byte{0, 35, 136}:    "V.T. Telematica S.p.a.",
+       [3]byte{0, 35, 137}:    "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{0, 35, 138}:    "Ciena Corporation",
+       [3]byte{0, 35, 139}:    "QUANTA COMPUTER INC.",
+       [3]byte{0, 35, 140}:    "Private",
+       [3]byte{0, 35, 141}:    "Techno Design Co., Ltd.",
+       [3]byte{0, 35, 142}:    "ADB Broadband Italia",
+       [3]byte{0, 35, 143}:    "NIDEC COPAL CORPORATION",
+       [3]byte{0, 35, 144}:    "Algolware Corporation",
+       [3]byte{0, 35, 145}:    "Maxian",
+       [3]byte{0, 35, 146}:    "Proteus Industries Inc.",
+       [3]byte{0, 35, 147}:    "AJINEXTEK",
+       [3]byte{0, 35, 148}:    "Samjeon",
+       [3]byte{0, 35, 149}:    "ARRIS Group, Inc.",
+       [3]byte{0, 35, 150}:    "ANDES TECHNOLOGY CORPORATION",
+       [3]byte{0, 35, 151}:    "Westell Technologies Inc.",
+       [3]byte{0, 35, 152}:    "Vutlan sro",
+       [3]byte{0, 35, 153}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 35, 154}:    "EasyData Hardware GmbH",
+       [3]byte{0, 35, 155}:    "Elster Solutions, LLC",
+       [3]byte{0, 35, 156}:    "Juniper Networks",
+       [3]byte{0, 35, 157}:    "Mapower Electronics Co., Ltd",
+       [3]byte{0, 35, 158}:    "Jiangsu Lemote Technology Corporation Limited",
+       [3]byte{0, 35, 159}:    "Institut für Prüftechnik",
+       [3]byte{0, 35, 160}:    "Hana CNS Co., LTD.",
+       [3]byte{0, 35, 161}:    "Trend Electronics Ltd",
+       [3]byte{0, 35, 162}:    "ARRIS Group, Inc.",
+       [3]byte{0, 35, 163}:    "ARRIS Group, Inc.",
+       [3]byte{0, 35, 164}:    "New Concepts Development Corp.",
+       [3]byte{0, 35, 165}:    "SageTV, LLC",
+       [3]byte{0, 35, 166}:    "E-Mon",
+       [3]byte{0, 35, 167}:    "Redpine Signals, Inc.",
+       [3]byte{0, 35, 168}:    "Marshall Electronics",
+       [3]byte{0, 35, 169}:    "Beijing Detianquan Electromechanical Equipment Co., Ltd",
+       [3]byte{0, 35, 170}:    "HFR, Inc.",
+       [3]byte{0, 35, 171}:    "Cisco Systems, Inc",
+       [3]byte{0, 35, 172}:    "Cisco Systems, Inc",
+       [3]byte{0, 35, 173}:    "Xmark Corporation",
+       [3]byte{0, 35, 174}:    "Dell Inc.",
+       [3]byte{0, 35, 175}:    "ARRIS Group, Inc.",
+       [3]byte{0, 35, 176}:    "COMXION Technology Inc.",
+       [3]byte{0, 35, 177}:    "Longcheer Technology (Singapore) Pte Ltd",
+       [3]byte{0, 35, 178}:    "Intelligent Mechatronic Systems Inc",
+       [3]byte{0, 35, 179}:    "Lyyn AB",
+       [3]byte{0, 35, 180}:    "Nokia Danmark A/S",
+       [3]byte{0, 35, 181}:    "ORTANA LTD",
+       [3]byte{0, 35, 182}:    "SECURITE COMMUNICATIONS / HONEYWELL",
+       [3]byte{0, 35, 183}:    "Q-Light Co., Ltd.",
+       [3]byte{0, 35, 184}:    "Sichuan Jiuzhou Electronic Technology Co.,Ltd",
+       [3]byte{0, 35, 185}:    "Airbus Defence and Space Deutschland GmbH",
+       [3]byte{0, 35, 186}:    "Chroma",
+       [3]byte{0, 35, 187}:    "Schmitt Industries",
+       [3]byte{0, 35, 188}:    "EQ-SYS GmbH",
+       [3]byte{0, 35, 189}:    "Digital Ally, Inc.",
+       [3]byte{0, 35, 190}:    "Cisco SPVTG",
+       [3]byte{0, 35, 191}:    "Mainpine, Inc.",
+       [3]byte{0, 35, 192}:    "Broadway Networks",
+       [3]byte{0, 35, 193}:    "Securitas Direct AB",
+       [3]byte{0, 35, 194}:    "SAMSUNG Electronics. Co. LTD",
+       [3]byte{0, 35, 195}:    "LogMeIn, Inc.",
+       [3]byte{0, 35, 196}:    "Lux Lumen",
+       [3]byte{0, 35, 197}:    "Radiation Safety and Control Services Inc",
+       [3]byte{0, 35, 198}:    "SMC Corporation",
+       [3]byte{0, 35, 199}:    "AVSystem",
+       [3]byte{0, 35, 200}:    "TEAM-R",
+       [3]byte{0, 35, 201}:    "Sichuan Tianyi Information Science & Technology Stock CO.,LTD",
+       [3]byte{0, 35, 202}:    "Behind The Set, LLC",
+       [3]byte{0, 35, 203}:    "Shenzhen Full-join Technology Co.,Ltd",
+       [3]byte{0, 35, 204}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 35, 205}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 35, 206}:    "KITA DENSHI CORPORATION",
+       [3]byte{0, 35, 207}:    "CUMMINS-ALLISON CORP.",
+       [3]byte{0, 35, 208}:    "Uniloc USA Inc.",
+       [3]byte{0, 35, 209}:    "TRG",
+       [3]byte{0, 35, 210}:    "Inhand Electronics, Inc.",
+       [3]byte{0, 35, 211}:    "AirLink WiFi Networking Corp.",
+       [3]byte{0, 35, 212}:    "Texas Instruments",
+       [3]byte{0, 35, 213}:    "WAREMA electronic GmbH",
+       [3]byte{0, 35, 214}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 35, 215}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 35, 216}:    "Ball-It Oy",
+       [3]byte{0, 35, 217}:    "Banner Engineering",
+       [3]byte{0, 35, 218}:    "Industrial Computer Source (Deutschland)GmbH",
+       [3]byte{0, 35, 219}:    "saxnet gmbh",
+       [3]byte{0, 35, 220}:    "Benein, Inc",
+       [3]byte{0, 35, 221}:    "ELGIN S.A.",
+       [3]byte{0, 35, 222}:    "Ansync Inc.",
+       [3]byte{0, 35, 223}:    "Apple, Inc.",
+       [3]byte{0, 35, 224}:    "INO Therapeutics LLC",
+       [3]byte{0, 35, 225}:    "Cavena Image Products AB",
+       [3]byte{0, 35, 226}:    "SEA Signalisation",
+       [3]byte{0, 35, 227}:    "Microtronic AG",
+       [3]byte{0, 35, 228}:    "IPnect co. ltd.",
+       [3]byte{0, 35, 229}:    "IPaXiom Networks",
+       [3]byte{0, 35, 230}:    "Pirkus, Inc.",
+       [3]byte{0, 35, 231}:    "Hinke A/S",
+       [3]byte{0, 35, 232}:    "Demco Corp.",
+       [3]byte{0, 35, 233}:    "F5 Networks, Inc.",
+       [3]byte{0, 35, 234}:    "Cisco Systems, Inc",
+       [3]byte{0, 35, 235}:    "Cisco Systems, Inc",
+       [3]byte{0, 35, 236}:    "Algorithmix GmbH",
+       [3]byte{0, 35, 237}:    "ARRIS Group, Inc.",
+       [3]byte{0, 35, 238}:    "ARRIS Group, Inc.",
+       [3]byte{0, 35, 239}:    "Zuend Systemtechnik AG",
+       [3]byte{0, 35, 240}:    "Shanghai Jinghan Weighing Apparatus Co. Ltd.",
+       [3]byte{0, 35, 241}:    "Sony Mobile Communications AB",
+       [3]byte{0, 35, 242}:    "TVLogic",
+       [3]byte{0, 35, 243}:    "Glocom, Inc.",
+       [3]byte{0, 35, 244}:    "Masternaut",
+       [3]byte{0, 35, 245}:    "WILO SE",
+       [3]byte{0, 35, 246}:    "Softwell Technology Co., Ltd.",
+       [3]byte{0, 35, 247}:    "Private",
+       [3]byte{0, 35, 248}:    "Zyxel Communications Corporation",
+       [3]byte{0, 35, 249}:    "Double-Take Software, INC.",
+       [3]byte{0, 35, 250}:    "RG Nets, Inc.",
+       [3]byte{0, 35, 251}:    "IP Datatel, LLC.",
+       [3]byte{0, 35, 252}:    "Ultra Stereo Labs, Inc",
+       [3]byte{0, 35, 253}:    "AFT Atlas Fahrzeugtechnik GmbH",
+       [3]byte{0, 35, 254}:    "Biodevices, SA",
+       [3]byte{0, 35, 255}:    "Beijing HTTC Technology Ltd.",
+       [3]byte{0, 36, 0}:      "Nortel Networks",
+       [3]byte{0, 36, 1}:      "D-Link Corporation",
+       [3]byte{0, 36, 2}:      "Op-Tection GmbH",
+       [3]byte{0, 36, 3}:      "Nokia Danmark A/S",
+       [3]byte{0, 36, 4}:      "Nokia Danmark A/S",
+       [3]byte{0, 36, 5}:      "Dilog Nordic AB",
+       [3]byte{0, 36, 6}:      "Pointmobile",
+       [3]byte{0, 36, 7}:      "TELEM SAS",
+       [3]byte{0, 36, 8}:      "Pacific Biosciences",
+       [3]byte{0, 36, 9}:      "The Toro Company",
+       [3]byte{0, 36, 10}:     "US Beverage Net",
+       [3]byte{0, 36, 11}:     "Virtual Computer Inc.",
+       [3]byte{0, 36, 12}:     "DELEC GmbH",
+       [3]byte{0, 36, 13}:     "OnePath Networks LTD.",
+       [3]byte{0, 36, 14}:     "Inventec Besta Co., Ltd.",
+       [3]byte{0, 36, 15}:     "Ishii Tool & Engineering Corporation",
+       [3]byte{0, 36, 16}:     "NUETEQ Technology,Inc.",
+       [3]byte{0, 36, 17}:     "PharmaSmart LLC",
+       [3]byte{0, 36, 18}:     "Benign Technologies Co, Ltd.",
+       [3]byte{0, 36, 19}:     "Cisco Systems, Inc",
+       [3]byte{0, 36, 20}:     "Cisco Systems, Inc",
+       [3]byte{0, 36, 21}:     "Magnetic Autocontrol GmbH",
+       [3]byte{0, 36, 22}:     "Any Use",
+       [3]byte{0, 36, 23}:     "Thomson Telecom Belgium",
+       [3]byte{0, 36, 24}:     "Nextwave Semiconductor",
+       [3]byte{0, 36, 25}:     "Private",
+       [3]byte{0, 36, 26}:     "Red Beetle Inc.",
+       [3]byte{0, 36, 27}:     "iWOW Communications Pte Ltd",
+       [3]byte{0, 36, 28}:     "FuGang Electronic (DG) Co.,Ltd",
+       [3]byte{0, 36, 29}:     "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{0, 36, 30}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 36, 31}:     "DCT-Delta GmbH",
+       [3]byte{0, 36, 32}:     "NetUP Inc.",
+       [3]byte{0, 36, 33}:     "MICRO-STAR INT'L CO., LTD.",
+       [3]byte{0, 36, 34}:     "Knapp Logistik Automation GmbH",
+       [3]byte{0, 36, 35}:     "AzureWave Technologies (Shanghai) Inc.",
+       [3]byte{0, 36, 36}:     "Ace Axis Limited",
+       [3]byte{0, 36, 37}:     "Shenzhenshi chuangzhicheng Technology Co.,Ltd",
+       [3]byte{0, 36, 38}:     "NOHMI BOSAI LTD.",
+       [3]byte{0, 36, 39}:     "SSI COMPUTER CORP",
+       [3]byte{0, 36, 40}:     "EnergyICT",
+       [3]byte{0, 36, 41}:     "MK MASTER INC.",
+       [3]byte{0, 36, 42}:     "Hittite Microwave Corporation",
+       [3]byte{0, 36, 43}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 36, 44}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 36, 46}:     "Datastrip Inc.",
+       [3]byte{0, 36, 47}:     "Micron",
+       [3]byte{0, 36, 48}:     "Ruby Tech Corp.",
+       [3]byte{0, 36, 49}:     "Uni-v co.,ltd",
+       [3]byte{0, 36, 50}:     "Neostar Technology Co.,LTD",
+       [3]byte{0, 36, 51}:     "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 36, 52}:     "Lectrosonics, Inc.",
+       [3]byte{0, 36, 53}:     "WIDE CORPORATION",
+       [3]byte{0, 36, 54}:     "Apple, Inc.",
+       [3]byte{0, 36, 55}:     "Motorola - BSG",
+       [3]byte{0, 36, 56}:     "Brocade Communications Systems, Inc.",
+       [3]byte{0, 36, 57}:     "Digital Barriers Advanced Technologies",
+       [3]byte{0, 36, 58}:     "Ludl Electronic Products",
+       [3]byte{0, 36, 59}:     "CSSI (S) Pte Ltd",
+       [3]byte{0, 36, 60}:     "S.A.A.A.",
+       [3]byte{0, 36, 61}:     "Emerson Appliance Motors and Controls",
+       [3]byte{0, 36, 63}:     "Storwize, Inc.",
+       [3]byte{0, 36, 64}:     "Halo Monitoring, Inc.",
+       [3]byte{0, 36, 65}:     "Wanzl Metallwarenfabrik GmbH",
+       [3]byte{0, 36, 66}:     "Axona Limited",
+       [3]byte{0, 36, 67}:     "Nortel Networks",
+       [3]byte{0, 36, 68}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 36, 69}:     "Adtran Inc",
+       [3]byte{0, 36, 70}:     "MMB Research Inc.",
+       [3]byte{0, 36, 71}:     "Kaztek Systems",
+       [3]byte{0, 36, 72}:     "SpiderCloud Wireless, Inc",
+       [3]byte{0, 36, 73}:     "Shen Zhen Lite Star Electronics Technology Co., Ltd",
+       [3]byte{0, 36, 74}:     "Voyant International",
+       [3]byte{0, 36, 75}:     "PERCEPTRON INC",
+       [3]byte{0, 36, 76}:     "Solartron Metrology Ltd",
+       [3]byte{0, 36, 77}:     "Hokkaido Electronics Corporation",
+       [3]byte{0, 36, 78}:     "RadChips, Inc.",
+       [3]byte{0, 36, 79}:     "Asantron Technologies Ltd.",
+       [3]byte{0, 36, 80}:     "Cisco Systems, Inc",
+       [3]byte{0, 36, 81}:     "Cisco Systems, Inc",
+       [3]byte{0, 36, 82}:     "Silicon Software GmbH",
+       [3]byte{0, 36, 83}:     "Initra d.o.o.",
+       [3]byte{0, 36, 84}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 36, 85}:     "MuLogic BV",
+       [3]byte{0, 36, 86}:     "2Wire Inc",
+       [3]byte{0, 36, 88}:     "PA Bastion CC",
+       [3]byte{0, 36, 89}:     "ABB Automation products GmbH",
+       [3]byte{0, 36, 90}:     "Nanjing Panda Electronics Company Limited",
+       [3]byte{0, 36, 91}:     "RAIDON TECHNOLOGY, INC.",
+       [3]byte{0, 36, 92}:     "Design-Com Technologies Pty. Ltd.",
+       [3]byte{0, 36, 93}:     "Terberg besturingstechniek B.V.",
+       [3]byte{0, 36, 94}:     "Hivision Co.,ltd",
+       [3]byte{0, 36, 95}:     "Vine Telecom CO.,Ltd.",
+       [3]byte{0, 36, 96}:     "Giaval Science Development Co. Ltd.",
+       [3]byte{0, 36, 97}:     "Shin Wang Tech.",
+       [3]byte{0, 36, 98}:     "Rayzone Corporation",
+       [3]byte{0, 36, 99}:     "Phybridge Inc",
+       [3]byte{0, 36, 100}:    "Bridge Technologies Co AS",
+       [3]byte{0, 36, 101}:    "Elentec",
+       [3]byte{0, 36, 102}:    "Unitron nv",
+       [3]byte{0, 36, 103}:    "AOC International (Europe) GmbH",
+       [3]byte{0, 36, 104}:    "Sumavision Technologies Co.,Ltd",
+       [3]byte{0, 36, 105}:    "Smart Doorphones",
+       [3]byte{0, 36, 106}:    "Solid Year Co., Ltd.",
+       [3]byte{0, 36, 107}:    "Covia, Inc.",
+       [3]byte{0, 36, 108}:    "Aruba Networks",
+       [3]byte{0, 36, 109}:    "Weinzierl Engineering GmbH",
+       [3]byte{0, 36, 110}:    "Phihong USA Corp.",
+       [3]byte{0, 36, 111}:    "Onda Communication spa",
+       [3]byte{0, 36, 112}:    "AUROTECH ultrasound AS.",
+       [3]byte{0, 36, 113}:    "Fusion MultiSystems dba Fusion-io",
+       [3]byte{0, 36, 114}:    "ReDriven Power Inc.",
+       [3]byte{0, 36, 115}:    "3COM EUROPE LTD",
+       [3]byte{0, 36, 116}:    "Autronica Fire And Securirty",
+       [3]byte{0, 36, 117}:    "Compass System(Embedded Dept.)",
+       [3]byte{0, 36, 118}:    "TAP.tv",
+       [3]byte{0, 36, 119}:    "Tibbo Technology",
+       [3]byte{0, 36, 120}:    "Mag Tech Electronics Co Limited",
+       [3]byte{0, 36, 121}:    "Optec Displays, Inc.",
+       [3]byte{0, 36, 122}:    "FU YI CHENG Technology Co., Ltd.",
+       [3]byte{0, 36, 123}:    "Actiontec Electronics, Inc",
+       [3]byte{0, 36, 124}:    "Nokia Danmark A/S",
+       [3]byte{0, 36, 125}:    "Nokia Danmark A/S",
+       [3]byte{0, 36, 126}:    "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{0, 36, 127}:    "Nortel Networks",
+       [3]byte{0, 36, 128}:    "Meteocontrol GmbH",
+       [3]byte{0, 36, 129}:    "Hewlett Packard",
+       [3]byte{0, 36, 130}:    "Ruckus Wireless",
+       [3]byte{0, 36, 131}:    "LG Electronics (Mobile Communications)",
+       [3]byte{0, 36, 132}:    "Bang and Olufsen Medicom a/s",
+       [3]byte{0, 36, 133}:    "ConteXtream Ltd",
+       [3]byte{0, 36, 134}:    "DesignArt Networks",
+       [3]byte{0, 36, 135}:    "Blackboard Inc.",
+       [3]byte{0, 36, 136}:    "Centre For Development Of Telematics",
+       [3]byte{0, 36, 137}:    "Vodafone Omnitel N.V.",
+       [3]byte{0, 36, 138}:    "Kaga Electronics Co., Ltd.",
+       [3]byte{0, 36, 139}:    "HYBUS CO., LTD.",
+       [3]byte{0, 36, 140}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 36, 141}:    "Sony Interactive Entertainment Inc.",
+       [3]byte{0, 36, 142}:    "Infoware ZRt.",
+       [3]byte{0, 36, 143}:    "DO-MONIX",
+       [3]byte{0, 36, 144}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 36, 145}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 36, 146}:    "Motorola, Broadband Solutions Group",
+       [3]byte{0, 36, 147}:    "ARRIS Group, Inc.",
+       [3]byte{0, 36, 148}:    "Shenzhen Baoxin Tech CO., Ltd.",
+       [3]byte{0, 36, 149}:    "ARRIS Group, Inc.",
+       [3]byte{0, 36, 150}:    "Ginzinger electronic systems",
+       [3]byte{0, 36, 151}:    "Cisco Systems, Inc",
+       [3]byte{0, 36, 152}:    "Cisco Systems, Inc",
+       [3]byte{0, 36, 153}:    "Aquila Technologies",
+       [3]byte{0, 36, 154}:    "Beijing Zhongchuang Telecommunication Test Co., Ltd.",
+       [3]byte{0, 36, 155}:    "Action Star Enterprise Co., Ltd.",
+       [3]byte{0, 36, 156}:    "Bimeng Comunication System Co. Ltd",
+       [3]byte{0, 36, 157}:    "NES Technology Inc.",
+       [3]byte{0, 36, 158}:    "ADC-Elektronik GmbH",
+       [3]byte{0, 36, 159}:    "RIM Testing Services",
+       [3]byte{0, 36, 160}:    "ARRIS Group, Inc.",
+       [3]byte{0, 36, 161}:    "ARRIS Group, Inc.",
+       [3]byte{0, 36, 162}:    "Hong Kong Middleware Technology Limited",
+       [3]byte{0, 36, 163}:    "Sonim Technologies Inc",
+       [3]byte{0, 36, 164}:    "Siklu Communication",
+       [3]byte{0, 36, 165}:    "BUFFALO.INC",
+       [3]byte{0, 36, 166}:    "TELESTAR DIGITAL GmbH",
+       [3]byte{0, 36, 167}:    "Advanced Video Communications Inc.",
+       [3]byte{0, 36, 168}:    "ProCurve Networking by HP",
+       [3]byte{0, 36, 169}:    "Ag Leader Technology",
+       [3]byte{0, 36, 170}:    "Dycor Technologies Ltd.",
+       [3]byte{0, 36, 171}:    "A7 Engineering, Inc.",
+       [3]byte{0, 36, 172}:    "Hangzhou DPtech Technologies Co., Ltd.",
+       [3]byte{0, 36, 173}:    "Adolf Thies Gmbh & Co. KG",
+       [3]byte{0, 36, 174}:    "Morpho",
+       [3]byte{0, 36, 175}:    "Echostar Technologies Corp",
+       [3]byte{0, 36, 176}:    "ESAB AB",
+       [3]byte{0, 36, 177}:    "Coulomb Technologies",
+       [3]byte{0, 36, 178}:    "NETGEAR",
+       [3]byte{0, 36, 179}:    "Graf-Syteco GmbH & Co. KG",
+       [3]byte{0, 36, 180}:    "ESCATRONIC GmbH",
+       [3]byte{0, 36, 181}:    "Nortel Networks",
+       [3]byte{0, 36, 182}:    "Seagate Technology",
+       [3]byte{0, 36, 183}:    "GridPoint, Inc.",
+       [3]byte{0, 36, 184}:    "free alliance sdn bhd",
+       [3]byte{0, 36, 185}:    "Wuhan Higheasy Electronic Technology Development Co.Ltd",
+       [3]byte{0, 36, 186}:    "Texas Instruments",
+       [3]byte{0, 36, 187}:    "CENTRAL Corporation",
+       [3]byte{0, 36, 188}:    "HuRob Co.,Ltd",
+       [3]byte{0, 36, 189}:    "Hainzl Industriesysteme GmbH",
+       [3]byte{0, 36, 190}:    "Sony Corporation",
+       [3]byte{0, 36, 191}:    "CIAT",
+       [3]byte{0, 36, 192}:    "NTI COMODO INC",
+       [3]byte{0, 36, 193}:    "ARRIS Group, Inc.",
+       [3]byte{0, 36, 194}:    "Asumo Co.,Ltd.",
+       [3]byte{0, 36, 195}:    "Cisco Systems, Inc",
+       [3]byte{0, 36, 196}:    "Cisco Systems, Inc",
+       [3]byte{0, 36, 197}:    "Meridian Audio Limited",
+       [3]byte{0, 36, 198}:    "Hager Electro SAS",
+       [3]byte{0, 36, 199}:    "Mobilarm Ltd",
+       [3]byte{0, 36, 200}:    "Broadband Solutions Group",
+       [3]byte{0, 36, 201}:    "Broadband Solutions Group",
+       [3]byte{0, 36, 202}:    "Tobii Technology AB",
+       [3]byte{0, 36, 203}:    "Autonet Mobile",
+       [3]byte{0, 36, 204}:    "Fascinations Toys and Gifts, Inc.",
+       [3]byte{0, 36, 205}:    "Willow Garage, Inc.",
+       [3]byte{0, 36, 206}:    "Exeltech Inc",
+       [3]byte{0, 36, 207}:    "Inscape Data Corporation",
+       [3]byte{0, 36, 208}:    "Shenzhen SOGOOD Industry CO.,LTD.",
+       [3]byte{0, 36, 209}:    "Thomson Inc.",
+       [3]byte{0, 36, 210}:    "ASKEY COMPUTER CORP",
+       [3]byte{0, 36, 211}:    "QUALICA Inc.",
+       [3]byte{0, 36, 212}:    "FREEBOX SAS",
+       [3]byte{0, 36, 213}:    "Winward Industrial Limited",
+       [3]byte{0, 36, 214}:    "Intel Corporate",
+       [3]byte{0, 36, 215}:    "Intel Corporate",
+       [3]byte{0, 36, 216}:    "IlSung Precision",
+       [3]byte{0, 36, 217}:    "BICOM, Inc.",
+       [3]byte{0, 36, 218}:    "Innovar Systems Limited",
+       [3]byte{0, 36, 219}:    "Alcohol Monitoring Systems",
+       [3]byte{0, 36, 220}:    "Juniper Networks",
+       [3]byte{0, 36, 221}:    "Centrak, Inc.",
+       [3]byte{0, 36, 222}:    "GLOBAL Technology Inc.",
+       [3]byte{0, 36, 223}:    "Digitalbox Europe GmbH",
+       [3]byte{0, 36, 224}:    "DS Tech, LLC",
+       [3]byte{0, 36, 225}:    "Convey Computer Corp.",
+       [3]byte{0, 36, 226}:    "HASEGAWA ELECTRIC CO.,LTD.",
+       [3]byte{0, 36, 227}:    "CAO Group",
+       [3]byte{0, 36, 228}:    "Withings",
+       [3]byte{0, 36, 229}:    "Seer Technology, Inc",
+       [3]byte{0, 36, 230}:    "In Motion Technology Inc.",
+       [3]byte{0, 36, 231}:    "Plaster Networks",
+       [3]byte{0, 36, 232}:    "Dell Inc.",
+       [3]byte{0, 36, 233}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 36, 234}:    "iris-GmbH infrared & intelligent sensors",
+       [3]byte{0, 36, 235}:    "ClearPath Networks, Inc.",
+       [3]byte{0, 36, 236}:    "United Information Technology Co.,Ltd.",
+       [3]byte{0, 36, 237}:    "YT Elec. Co,.Ltd.",
+       [3]byte{0, 36, 238}:    "Wynmax Inc.",
+       [3]byte{0, 36, 239}:    "Sony Mobile Communications AB",
+       [3]byte{0, 36, 240}:    "Seanodes",
+       [3]byte{0, 36, 241}:    "Shenzhen Fanhai Sanjiang Electronics Co., Ltd.",
+       [3]byte{0, 36, 242}:    "Uniphone Telecommunication Co., Ltd.",
+       [3]byte{0, 36, 243}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 36, 244}:    "Kaminario, Ltd.",
+       [3]byte{0, 36, 245}:    "NDS Surgical Imaging",
+       [3]byte{0, 36, 246}:    "MIYOSHI ELECTRONICS CORPORATION",
+       [3]byte{0, 36, 247}:    "Cisco Systems, Inc",
+       [3]byte{0, 36, 248}:    "Technical Solutions Company Ltd.",
+       [3]byte{0, 36, 249}:    "Cisco Systems, Inc",
+       [3]byte{0, 36, 250}:    "Hilger u. Kern GMBH",
+       [3]byte{0, 36, 251}:    "Private",
+       [3]byte{0, 36, 252}:    "QuoPin Co., Ltd.",
+       [3]byte{0, 36, 253}:    "Accedian Networks Inc",
+       [3]byte{0, 36, 254}:    "AVM GmbH",
+       [3]byte{0, 36, 255}:    "QLogic Corporation",
+       [3]byte{0, 37, 0}:      "Apple, Inc.",
+       [3]byte{0, 37, 1}:      "JSC Supertel",
+       [3]byte{0, 37, 2}:      "NaturalPoint",
+       [3]byte{0, 37, 3}:      "IBM Corp",
+       [3]byte{0, 37, 4}:      "Valiant Communications Limited",
+       [3]byte{0, 37, 5}:      "eks Engel GmbH & Co. KG",
+       [3]byte{0, 37, 6}:      "A.I. ANTITACCHEGGIO ITALIA SRL",
+       [3]byte{0, 37, 7}:      "ASTAK Inc.",
+       [3]byte{0, 37, 8}:      "Maquet Cardiopulmonary AG",
+       [3]byte{0, 37, 9}:      "SHARETRONIC Group LTD",
+       [3]byte{0, 37, 10}:     "Security Expert Co. Ltd",
+       [3]byte{0, 37, 11}:     "CENTROFACTOR  INC",
+       [3]byte{0, 37, 12}:     "Enertrac",
+       [3]byte{0, 37, 13}:     "GZT Telkom-Telmor sp. z o.o.",
+       [3]byte{0, 37, 14}:     "gt german telematics gmbh",
+       [3]byte{0, 37, 15}:     "On-Ramp Wireless, Inc.",
+       [3]byte{0, 37, 16}:     "Pico-Tesla Magnetic Therapies",
+       [3]byte{0, 37, 17}:     "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{0, 37, 18}:     "zte corporation",
+       [3]byte{0, 37, 19}:     "CXP DIGITAL BV",
+       [3]byte{0, 37, 20}:     "PC Worth Int'l Co., Ltd.",
+       [3]byte{0, 37, 21}:     "SFR",
+       [3]byte{0, 37, 22}:     "Integrated Design Tools, Inc.",
+       [3]byte{0, 37, 23}:     "Venntis, LLC",
+       [3]byte{0, 37, 24}:     "Power PLUS Communications AG",
+       [3]byte{0, 37, 25}:     "Viaas Inc",
+       [3]byte{0, 37, 26}:     "Psiber Data Systems Inc.",
+       [3]byte{0, 37, 27}:     "Philips CareServant",
+       [3]byte{0, 37, 28}:     "EDT",
+       [3]byte{0, 37, 29}:     "DSA Encore, LLC",
+       [3]byte{0, 37, 30}:     "ROTEL TECHNOLOGIES",
+       [3]byte{0, 37, 31}:     "ZYNUS VISION INC.",
+       [3]byte{0, 37, 32}:     "SMA Railway Technology GmbH",
+       [3]byte{0, 37, 33}:     "Logitek Electronic Systems, Inc.",
+       [3]byte{0, 37, 34}:     "ASRock Incorporation",
+       [3]byte{0, 37, 35}:     "OCP Inc.",
+       [3]byte{0, 37, 36}:     "Lightcomm Technology Co., Ltd",
+       [3]byte{0, 37, 37}:     "CTERA Networks Ltd.",
+       [3]byte{0, 37, 38}:     "Genuine Technologies Co., Ltd.",
+       [3]byte{0, 37, 39}:     "Bitrode Corp.",
+       [3]byte{0, 37, 40}:     "Daido Signal Co., Ltd.",
+       [3]byte{0, 37, 41}:     "COMELIT GROUP S.P.A",
+       [3]byte{0, 37, 42}:     "Chengdu GeeYa Technology Co.,LTD",
+       [3]byte{0, 37, 43}:     "Stirling Energy Systems",
+       [3]byte{0, 37, 44}:     "Entourage Systems, Inc.",
+       [3]byte{0, 37, 45}:     "Kiryung Electronics",
+       [3]byte{0, 37, 46}:     "Cisco SPVTG",
+       [3]byte{0, 37, 47}:     "Energy, Inc.",
+       [3]byte{0, 37, 48}:     "Aetas Systems Inc.",
+       [3]byte{0, 37, 49}:     "Cloud Engines, Inc.",
+       [3]byte{0, 37, 50}:     "Digital Recorders",
+       [3]byte{0, 37, 51}:     "WITTENSTEIN AG",
+       [3]byte{0, 37, 53}:     "Minimax GmbH & Co KG",
+       [3]byte{0, 37, 54}:     "Oki Electric Industry Co., Ltd.",
+       [3]byte{0, 37, 55}:     "Runcom Technologies Ltd.",
+       [3]byte{0, 37, 56}:     "Samsung Electronics Co., Ltd., Memory Division",
+       [3]byte{0, 37, 57}:     "IfTA GmbH",
+       [3]byte{0, 37, 58}:     "CEVA, Ltd.",
+       [3]byte{0, 37, 59}:     "din Dietmar Nocker Facilitymanagement GmbH",
+       [3]byte{0, 37, 60}:     "2Wire Inc",
+       [3]byte{0, 37, 61}:     "DRS Consolidated Controls",
+       [3]byte{0, 37, 62}:     "Sensus Metering Systems",
+       [3]byte{0, 37, 64}:     "Quasar Technologies, Inc.",
+       [3]byte{0, 37, 65}:     "Maquet Critical Care AB",
+       [3]byte{0, 37, 66}:     "Pittasoft",
+       [3]byte{0, 37, 67}:     "MONEYTECH",
+       [3]byte{0, 37, 68}:     "LoJack Corporation",
+       [3]byte{0, 37, 69}:     "Cisco Systems, Inc",
+       [3]byte{0, 37, 70}:     "Cisco Systems, Inc",
+       [3]byte{0, 37, 71}:     "Nokia Danmark A/S",
+       [3]byte{0, 37, 72}:     "Nokia Danmark A/S",
+       [3]byte{0, 37, 73}:     "Jeorich Tech. Co.,Ltd.",
+       [3]byte{0, 37, 74}:     "RingCube Technologies, Inc.",
+       [3]byte{0, 37, 75}:     "Apple, Inc.",
+       [3]byte{0, 37, 76}:     "Videon Central, Inc.",
+       [3]byte{0, 37, 77}:     "Singapore Technologies Electronics Limited",
+       [3]byte{0, 37, 78}:     "Vertex Wireless Co., Ltd.",
+       [3]byte{0, 37, 79}:     "ELETTROLAB Srl",
+       [3]byte{0, 37, 80}:     "Riverbed Technology, Inc.",
+       [3]byte{0, 37, 81}:     "SE-Elektronic GmbH",
+       [3]byte{0, 37, 82}:     "VXi Corporation",
+       [3]byte{0, 37, 83}:     "ADB Broadband Italia",
+       [3]byte{0, 37, 84}:     "Pixel8 Networks",
+       [3]byte{0, 37, 85}:     "Visonic Technologies 1993 Ltd.",
+       [3]byte{0, 37, 86}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 37, 87}:     "BlackBerry RTS",
+       [3]byte{0, 37, 88}:     "MPEDIA",
+       [3]byte{0, 37, 89}:     "Syphan Technologies Ltd",
+       [3]byte{0, 37, 90}:     "Tantalus Systems Corp.",
+       [3]byte{0, 37, 91}:     "CoachComm, LLC",
+       [3]byte{0, 37, 92}:     "NEC Corporation",
+       [3]byte{0, 37, 93}:     "Morningstar Corporation",
+       [3]byte{0, 37, 94}:     "Shanghai Dare Technologies Co.,Ltd.",
+       [3]byte{0, 37, 95}:     "SenTec AG",
+       [3]byte{0, 37, 96}:     "Ibridge Networks & Communications Ltd.",
+       [3]byte{0, 37, 97}:     "ProCurve Networking by HP",
+       [3]byte{0, 37, 98}:     "interbro Co. Ltd.",
+       [3]byte{0, 37, 99}:     "Luxtera Inc",
+       [3]byte{0, 37, 100}:    "Dell Inc.",
+       [3]byte{0, 37, 101}:    "Vizimax Inc.",
+       [3]byte{0, 37, 102}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 37, 103}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 37, 104}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 37, 105}:    "Sagemcom Broadband SAS",
+       [3]byte{0, 37, 106}:    "inIT - Institut Industrial IT",
+       [3]byte{0, 37, 107}:    "ATENIX E.E. s.r.l.",
+       [3]byte{0, 37, 108}:    "Azimut Production Association JSC",
+       [3]byte{0, 37, 109}:    "Broadband Forum",
+       [3]byte{0, 37, 110}:    "Van Breda B.V.",
+       [3]byte{0, 37, 111}:    "Dantherm Power",
+       [3]byte{0, 37, 112}:    "Eastern Communications Company Limited",
+       [3]byte{0, 37, 113}:    "Zhejiang Tianle Digital Electric Co.,Ltd",
+       [3]byte{0, 37, 114}:    "Nemo-Q International AB",
+       [3]byte{0, 37, 115}:    "ST Electronics (Info-Security) Pte Ltd",
+       [3]byte{0, 37, 116}:    "KUNIMI MEDIA DEVICE Co., Ltd.",
+       [3]byte{0, 37, 117}:    "FiberPlex Technologies, LLC",
+       [3]byte{0, 37, 118}:    "NELI TECHNOLOGIES",
+       [3]byte{0, 37, 119}:    "D-BOX Technologies",
+       [3]byte{0, 37, 120}:    "JSC Concern Sozvezdie",
+       [3]byte{0, 37, 121}:    "J & F Labs",
+       [3]byte{0, 37, 122}:    "CAMCO Produktions- und Vertriebs-GmbH für  Beschallungs- und Beleuchtungsanlagen",
+       [3]byte{0, 37, 123}:    "STJ  ELECTRONICS  PVT  LTD",
+       [3]byte{0, 37, 124}:    "Huachentel Technology Development Co., Ltd",
+       [3]byte{0, 37, 125}:    "PointRed Telecom Private Ltd.",
+       [3]byte{0, 37, 126}:    "NEW POS Technology Limited",
+       [3]byte{0, 37, 127}:    "CallTechSolution Co.,Ltd",
+       [3]byte{0, 37, 128}:    "Equipson S.A.",
+       [3]byte{0, 37, 129}:    "x-star networks Inc.",
+       [3]byte{0, 37, 130}:    "Maksat Technologies (P) Ltd",
+       [3]byte{0, 37, 131}:    "Cisco Systems, Inc",
+       [3]byte{0, 37, 132}:    "Cisco Systems, Inc",
+       [3]byte{0, 37, 133}:    "KOKUYO S&T Co., Ltd.",
+       [3]byte{0, 37, 134}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 37, 135}:    "Vitality, Inc.",
+       [3]byte{0, 37, 136}:    "Genie Industries, Inc.",
+       [3]byte{0, 37, 137}:    "Hills Industries Limited",
+       [3]byte{0, 37, 138}:    "Pole/Zero Corporation",
+       [3]byte{0, 37, 139}:    "Mellanox Technologies, Inc.",
+       [3]byte{0, 37, 140}:    "ESUS ELEKTRONIK SAN. VE DIS. TIC. LTD. STI.",
+       [3]byte{0, 37, 141}:    "Haier",
+       [3]byte{0, 37, 142}:    "The Weather Channel",
+       [3]byte{0, 37, 143}:    "Trident Microsystems, Inc.",
+       [3]byte{0, 37, 144}:    "Super Micro Computer, Inc.",
+       [3]byte{0, 37, 145}:    "NEXTEK, Inc.",
+       [3]byte{0, 37, 146}:    "Guangzhou Shirui Electronic Co., Ltd",
+       [3]byte{0, 37, 147}:    "DatNet Informatikai Kft.",
+       [3]byte{0, 37, 148}:    "Eurodesign BG LTD",
+       [3]byte{0, 37, 149}:    "Northwest Signal Supply, Inc",
+       [3]byte{0, 37, 150}:    "GIGAVISION srl",
+       [3]byte{0, 37, 151}:    "Kalki Communication Technologies",
+       [3]byte{0, 37, 152}:    "Zhong Shan City Litai Electronic Industrial Co. Ltd",
+       [3]byte{0, 37, 153}:    "Hedon e.d. B.V.",
+       [3]byte{0, 37, 154}:    "CEStronics GmbH",
+       [3]byte{0, 37, 155}:    "Beijing PKUNITY Microsystems Technology Co., Ltd",
+       [3]byte{0, 37, 156}:    "Cisco-Linksys, LLC",
+       [3]byte{0, 37, 157}:    "Private",
+       [3]byte{0, 37, 158}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 37, 159}:    "TechnoDigital Technologies GmbH",
+       [3]byte{0, 37, 160}:    "Nintendo Co., Ltd.",
+       [3]byte{0, 37, 161}:    "Enalasys",
+       [3]byte{0, 37, 162}:    "Alta Definicion LINCEO S.L.",
+       [3]byte{0, 37, 163}:    "Trimax Wireless, Inc.",
+       [3]byte{0, 37, 164}:    "EuroDesign embedded technologies GmbH",
+       [3]byte{0, 37, 165}:    "Walnut Media Network",
+       [3]byte{0, 37, 166}:    "Central Network Solution Co., Ltd.",
+       [3]byte{0, 37, 167}:    "Comverge, Inc.",
+       [3]byte{0, 37, 168}:    "Kontron (BeiJing) Technology Co.,Ltd",
+       [3]byte{0, 37, 169}:    "Shanghai Embedway Information Technologies Co.,Ltd",
+       [3]byte{0, 37, 170}:    "Beijing Soul Technology Co.,Ltd.",
+       [3]byte{0, 37, 171}:    "AIO LCD PC BU / TPV",
+       [3]byte{0, 37, 172}:    "I-Tech corporation",
+       [3]byte{0, 37, 173}:    "Manufacturing Resources International",
+       [3]byte{0, 37, 174}:    "Microsoft Corporation",
+       [3]byte{0, 37, 175}:    "COMFILE Technology",
+       [3]byte{0, 37, 176}:    "Schmartz Inc",
+       [3]byte{0, 37, 177}:    "Maya-Creation Corporation",
+       [3]byte{0, 37, 178}:    "MBDA Deutschland GmbH",
+       [3]byte{0, 37, 179}:    "Hewlett Packard",
+       [3]byte{0, 37, 180}:    "Cisco Systems, Inc",
+       [3]byte{0, 37, 181}:    "Cisco Systems, Inc",
+       [3]byte{0, 37, 182}:    "Telecom FM",
+       [3]byte{0, 37, 183}:    "Costar  electronics, inc.,",
+       [3]byte{0, 37, 184}:    "Agile Communications, Inc.",
+       [3]byte{0, 37, 185}:    "Cypress Solutions Inc",
+       [3]byte{0, 37, 186}:    "Alcatel-Lucent IPD",
+       [3]byte{0, 37, 187}:    "INNERINT Co., Ltd.",
+       [3]byte{0, 37, 188}:    "Apple, Inc.",
+       [3]byte{0, 37, 189}:    "Italdata Ingegneria dell'Idea S.p.A.",
+       [3]byte{0, 37, 190}:    "Tektrap Systems Inc.",
+       [3]byte{0, 37, 191}:    "Wireless Cables Inc.",
+       [3]byte{0, 37, 192}:    "ZillionTV Corporation",
+       [3]byte{0, 37, 193}:    "Nawoo Korea Corp.",
+       [3]byte{0, 37, 194}:    "RingBell Co.,Ltd.",
+       [3]byte{0, 37, 195}:    "21168",
+       [3]byte{0, 37, 196}:    "Ruckus Wireless",
+       [3]byte{0, 37, 197}:    "Star Link Communication Pvt. Ltd.",
+       [3]byte{0, 37, 198}:    "kasercorp, ltd",
+       [3]byte{0, 37, 199}:    "altek Corporation",
+       [3]byte{0, 37, 200}:    "S-Access GmbH",
+       [3]byte{0, 37, 201}:    "SHENZHEN HUAPU DIGITAL CO., LTD",
+       [3]byte{0, 37, 202}:    "LS Research, LLC",
+       [3]byte{0, 37, 203}:    "Reiner SCT",
+       [3]byte{0, 37, 204}:    "Mobile Communications Korea Incorporated",
+       [3]byte{0, 37, 205}:    "Skylane Optics",
+       [3]byte{0, 37, 206}:    "InnerSpace",
+       [3]byte{0, 37, 207}:    "Nokia Danmark A/S",
+       [3]byte{0, 37, 208}:    "Nokia Danmark A/S",
+       [3]byte{0, 37, 209}:    "Eastern Asia Technology Limited",
+       [3]byte{0, 37, 210}:    "InpegVision Co., Ltd",
+       [3]byte{0, 37, 211}:    "AzureWave Technology Inc.",
+       [3]byte{0, 37, 212}:    "General Dynamics Mission Systems",
+       [3]byte{0, 37, 213}:    "Robonica (Pty) Ltd",
+       [3]byte{0, 37, 214}:    "The Kroger Co.",
+       [3]byte{0, 37, 215}:    "CEDO",
+       [3]byte{0, 37, 216}:    "KOREA MAINTENANCE",
+       [3]byte{0, 37, 217}:    "DataFab Systems Inc.",
+       [3]byte{0, 37, 218}:    "Secura Key",
+       [3]byte{0, 37, 219}:    "ATI Electronics(Shenzhen) Co., LTD",
+       [3]byte{0, 37, 220}:    "Sumitomo Electric Industries,Ltd",
+       [3]byte{0, 37, 221}:    "SUNNYTEK INFORMATION CO., LTD.",
+       [3]byte{0, 37, 222}:    "Probits Co., LTD.",
+       [3]byte{0, 37, 223}:    "Private",
+       [3]byte{0, 37, 224}:    "CeedTec Sdn Bhd",
+       [3]byte{0, 37, 225}:    "SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD",
+       [3]byte{0, 37, 226}:    "Everspring Industry Co., Ltd.",
+       [3]byte{0, 37, 227}:    "Hanshinit Inc.",
+       [3]byte{0, 37, 228}:    "OMNI-WiFi, LLC",
+       [3]byte{0, 37, 229}:    "LG Electronics (Mobile Communications)",
+       [3]byte{0, 37, 230}:    "Belgian Monitoring Systems bvba",
+       [3]byte{0, 37, 231}:    "Sony Mobile Communications AB",
+       [3]byte{0, 37, 232}:    "Idaho Technology",
+       [3]byte{0, 37, 233}:    "i-mate Development, Inc.",
+       [3]byte{0, 37, 234}:    "Iphion BV",
+       [3]byte{0, 37, 235}:    "Reutech Radar Systems (PTY) Ltd",
+       [3]byte{0, 37, 236}:    "Humanware",
+       [3]byte{0, 37, 237}:    "NuVo Technologies LLC",
+       [3]byte{0, 37, 238}:    "Avtex Ltd",
+       [3]byte{0, 37, 239}:    "I-TEC Co., Ltd.",
+       [3]byte{0, 37, 240}:    "Suga Electronics Limited",
+       [3]byte{0, 37, 241}:    "ARRIS Group, Inc.",
+       [3]byte{0, 37, 242}:    "ARRIS Group, Inc.",
+       [3]byte{0, 37, 243}:    "Nordwestdeutsche Zählerrevision",
+       [3]byte{0, 37, 244}:    "KoCo Connector AG",
+       [3]byte{0, 37, 245}:    "DVS Korea, Co., Ltd",
+       [3]byte{0, 37, 246}:    "netTALK.com, Inc.",
+       [3]byte{0, 37, 247}:    "Ansaldo STS USA",
+       [3]byte{0, 37, 249}:    "GMK electronic design GmbH",
+       [3]byte{0, 37, 250}:    "J&M Analytik AG",
+       [3]byte{0, 37, 251}:    "Tunstall Healthcare A/S",
+       [3]byte{0, 37, 252}:    "ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.",
+       [3]byte{0, 37, 253}:    "OBR Centrum Techniki Morskiej S.A.",
+       [3]byte{0, 37, 254}:    "Pilot Electronics Corporation",
+       [3]byte{0, 37, 255}:    "CreNova Multimedia Co., Ltd",
+       [3]byte{0, 38, 0}:      "TEAC Australia Pty Ltd.",
+       [3]byte{0, 38, 1}:      "Cutera Inc",
+       [3]byte{0, 38, 2}:      "SMART Temps LLC",
+       [3]byte{0, 38, 3}:      "Shenzhen Wistar Technology Co., Ltd",
+       [3]byte{0, 38, 4}:      "Audio Processing Technology Ltd",
+       [3]byte{0, 38, 5}:      "CC Systems AB",
+       [3]byte{0, 38, 6}:      "RAUMFELD GmbH",
+       [3]byte{0, 38, 7}:      "Enabling Technology Pty Ltd",
+       [3]byte{0, 38, 8}:      "Apple, Inc.",
+       [3]byte{0, 38, 9}:      "Phyllis Co., Ltd.",
+       [3]byte{0, 38, 10}:     "Cisco Systems, Inc",
+       [3]byte{0, 38, 11}:     "Cisco Systems, Inc",
+       [3]byte{0, 38, 12}:     "Dataram",
+       [3]byte{0, 38, 13}:     "Mercury Systems, Inc.",
+       [3]byte{0, 38, 14}:     "Ablaze Systems, LLC",
+       [3]byte{0, 38, 15}:     "Linn Products Ltd",
+       [3]byte{0, 38, 16}:     "Apacewave Technologies",
+       [3]byte{0, 38, 17}:     "Licera AB",
+       [3]byte{0, 38, 18}:     "Space Exploration Technologies",
+       [3]byte{0, 38, 19}:     "Engel Axil S.L.",
+       [3]byte{0, 38, 20}:     "KTNF",
+       [3]byte{0, 38, 21}:     "Teracom Limited",
+       [3]byte{0, 38, 22}:     "Rosemount Inc.",
+       [3]byte{0, 38, 23}:     "OEM Worldwide",
+       [3]byte{0, 38, 24}:     "ASUSTek COMPUTER INC.",
+       [3]byte{0, 38, 25}:     "FRC",
+       [3]byte{0, 38, 26}:     "Femtocomm System Technology Corp.",
+       [3]byte{0, 38, 27}:     "LAUREL BANK MACHINES CO., LTD.",
+       [3]byte{0, 38, 28}:     "NEOVIA INC.",
+       [3]byte{0, 38, 29}:     "COP SECURITY SYSTEM CORP.",
+       [3]byte{0, 38, 30}:     "QINGBANG ELEC(SZ) CO., LTD",
+       [3]byte{0, 38, 31}:     "SAE Magnetics (H.K.) Ltd.",
+       [3]byte{0, 38, 32}:     "ISGUS GmbH",
+       [3]byte{0, 38, 33}:     "InteliCloud Technology Inc.",
+       [3]byte{0, 38, 34}:     "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{0, 38, 35}:     "JRD Communication Inc",
+       [3]byte{0, 38, 36}:     "Thomson Inc.",
+       [3]byte{0, 38, 37}:     "MediaSputnik",
+       [3]byte{0, 38, 38}:     "Geophysical Survey Systems, Inc.",
+       [3]byte{0, 38, 39}:     "Truesell",
+       [3]byte{0, 38, 40}:     "companytec automação e controle ltda.",
+       [3]byte{0, 38, 41}:     "Juphoon System Software Inc.",
+       [3]byte{0, 38, 42}:     "Proxense, LLC",
+       [3]byte{0, 38, 43}:     "Wongs Electronics Co. Ltd.",
+       [3]byte{0, 38, 44}:     "IKT Advanced Technologies s.r.o.",
+       [3]byte{0, 38, 45}:     "Wistron Corporation",
+       [3]byte{0, 38, 46}:     "Chengdu Jiuzhou Electronic Technology Inc",
+       [3]byte{0, 38, 47}:     "HAMAMATSU TOA ELECTRONICS",
+       [3]byte{0, 38, 48}:     "ACOREL S.A.S",
+       [3]byte{0, 38, 49}:     "COMMTACT LTD",
+       [3]byte{0, 38, 50}:     "Instrumentation Technologies d.d.",
+       [3]byte{0, 38, 51}:     "MIR - Medical International Research",
+       [3]byte{0, 38, 52}:     "Infineta Systems, Inc",
+       [3]byte{0, 38, 53}:     "Bluetechnix GmbH",
+       [3]byte{0, 38, 54}:     "ARRIS Group, Inc.",
+       [3]byte{0, 38, 55}:     "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{0, 38, 56}:     "Xia Men Joyatech Co., Ltd.",
+       [3]byte{0, 38, 57}:     "T.M. Electronics, Inc.",
+       [3]byte{0, 38, 58}:     "Digitec Systems",
+       [3]byte{0, 38, 59}:     "Onbnetech",
+       [3]byte{0, 38, 60}:     "Bachmann Technology GmbH & Co. KG",
+       [3]byte{0, 38, 61}:     "MIA Corporation",
+       [3]byte{0, 38, 62}:     "Trapeze Networks",
+       [3]byte{0, 38, 63}:     "LIOS Technology GmbH",
+       [3]byte{0, 38, 64}:     "Baustem Broadband Technologies, Ltd.",
+       [3]byte{0, 38, 65}:     "ARRIS Group, Inc.",
+       [3]byte{0, 38, 66}:     "ARRIS Group, Inc.",
+       [3]byte{0, 38, 67}:     "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{0, 38, 68}:     "Thomson Telecom Belgium",
+       [3]byte{0, 38, 69}:     "Circontrol S.A.",
+       [3]byte{0, 38, 70}:     "SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED",
+       [3]byte{0, 38, 71}:     "WFE TECHNOLOGY CORP.",
+       [3]byte{0, 38, 72}:     "Emitech Corp.",
+       [3]byte{0, 38, 74}:     "Apple, Inc.",
+       [3]byte{0, 38, 76}:     "Shanghai DigiVision Technology Co., Ltd.",
+       [3]byte{0, 38, 77}:     "Arcadyan Technology Corporation",
+       [3]byte{0, 38, 78}:     "Rail & Road Protec GmbH",
+       [3]byte{0, 38, 79}:     "Krüger &Gothe GmbH",
+       [3]byte{0, 38, 80}:     "2Wire Inc",
+       [3]byte{0, 38, 81}:     "Cisco Systems, Inc",
+       [3]byte{0, 38, 82}:     "Cisco Systems, Inc",
+       [3]byte{0, 38, 83}:     "DaySequerra Corporation",
+       [3]byte{0, 38, 84}:     "3Com Corporation",
+       [3]byte{0, 38, 85}:     "Hewlett Packard",
+       [3]byte{0, 38, 86}:     "Sansonic Electronics USA",
+       [3]byte{0, 38, 87}:     "OOO NPP EKRA",
+       [3]byte{0, 38, 88}:     "T-Platforms (Cyprus) Limited",
+       [3]byte{0, 38, 89}:     "Nintendo Co., Ltd.",
+       [3]byte{0, 38, 90}:     "D-Link Corporation",
+       [3]byte{0, 38, 91}:     "Hitron Technologies. Inc",
+       [3]byte{0, 38, 92}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 38, 93}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 38, 94}:     "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 38, 95}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 38, 96}:     "Logiways",
+       [3]byte{0, 38, 97}:     "Irumtek Co., Ltd.",
+       [3]byte{0, 38, 98}:     "Actiontec Electronics, Inc",
+       [3]byte{0, 38, 99}:     "Shenzhen Huitaiwei Tech. Ltd, co.",
+       [3]byte{0, 38, 100}:    "Core System Japan",
+       [3]byte{0, 38, 101}:    "ProtectedLogic Corporation",
+       [3]byte{0, 38, 102}:    "EFM Networks",
+       [3]byte{0, 38, 103}:    "CARECOM CO.,LTD.",
+       [3]byte{0, 38, 104}:    "Nokia Danmark A/S",
+       [3]byte{0, 38, 105}:    "Nokia Danmark A/S",
+       [3]byte{0, 38, 106}:    "ESSENSIUM NV",
+       [3]byte{0, 38, 107}:    "SHINE UNION ENTERPRISE LIMITED",
+       [3]byte{0, 38, 108}:    "INVENTEC Corporation",
+       [3]byte{0, 38, 109}:    "MobileAccess Networks",
+       [3]byte{0, 38, 110}:    "Nissho-denki Co.,LTD.",
+       [3]byte{0, 38, 111}:    "Coordiwise Technology Corp.",
+       [3]byte{0, 38, 112}:    "Cinch Connectors",
+       [3]byte{0, 38, 113}:    "AUTOVISION Co., Ltd",
+       [3]byte{0, 38, 114}:    "AAMP of America",
+       [3]byte{0, 38, 115}:    "RICOH COMPANY,LTD.",
+       [3]byte{0, 38, 116}:    "Electronic Solutions, Inc.",
+       [3]byte{0, 38, 117}:    "Aztech Electronics Pte Ltd",
+       [3]byte{0, 38, 118}:    "COMMidt AS",
+       [3]byte{0, 38, 119}:    "DEIF A/S",
+       [3]byte{0, 38, 120}:    "Logic Instrument SA",
+       [3]byte{0, 38, 121}:    "Euphonic Technologies, Inc.",
+       [3]byte{0, 38, 122}:    "wuhan hongxin telecommunication technologies co.,ltd",
+       [3]byte{0, 38, 123}:    "GSI Helmholtzzentrum für Schwerionenforschung GmbH",
+       [3]byte{0, 38, 124}:    "Metz-Werke GmbH & Co KG",
+       [3]byte{0, 38, 125}:    "A-Max Technology Macao Commercial Offshore Company Limited",
+       [3]byte{0, 38, 126}:    "PARROT SA",
+       [3]byte{0, 38, 127}:    "Zenterio AB",
+       [3]byte{0, 38, 128}:    "SIL3 Pty.Ltd",
+       [3]byte{0, 38, 129}:    "Interspiro AB",
+       [3]byte{0, 38, 130}:    "Gemtek Technology Co., Ltd.",
+       [3]byte{0, 38, 131}:    "Ajoho Enterprise Co., Ltd.",
+       [3]byte{0, 38, 132}:    "KISAN SYSTEM",
+       [3]byte{0, 38, 133}:    "Digital Innovation",
+       [3]byte{0, 38, 134}:    "Quantenna Communcations, Inc.",
+       [3]byte{0, 38, 135}:    "corega K.K",
+       [3]byte{0, 38, 136}:    "Juniper Networks",
+       [3]byte{0, 38, 137}:    "General Dynamics Robotic Systems",
+       [3]byte{0, 38, 138}:    "Terrier SC Ltd",
+       [3]byte{0, 38, 139}:    "Guangzhou Escene Computer Technology Limited",
+       [3]byte{0, 38, 140}:    "StarLeaf Ltd.",
+       [3]byte{0, 38, 141}:    "CellTel S.p.A.",
+       [3]byte{0, 38, 142}:    "Alta Solutions, Inc.",
+       [3]byte{0, 38, 143}:    "MTA SpA",
+       [3]byte{0, 38, 144}:    "I DO IT",
+       [3]byte{0, 38, 145}:    "Sagemcom Broadband SAS",
+       [3]byte{0, 38, 146}:    "Mitsubishi Electric Corporation",
+       [3]byte{0, 38, 147}:    "QVidium Technologies, Inc.",
+       [3]byte{0, 38, 148}:    "Senscient Ltd",
+       [3]byte{0, 38, 149}:    "ZT Group Int'l Inc",
+       [3]byte{0, 38, 150}:    "NOOLIX Co., Ltd",
+       [3]byte{0, 38, 151}:    "Alpha  Technologies Inc.",
+       [3]byte{0, 38, 152}:    "Cisco Systems, Inc",
+       [3]byte{0, 38, 153}:    "Cisco Systems, Inc",
+       [3]byte{0, 38, 154}:    "Carina System Co., Ltd.",
+       [3]byte{0, 38, 155}:    "SOKRAT Ltd.",
+       [3]byte{0, 38, 156}:    "ITUS JAPAN CO. LTD",
+       [3]byte{0, 38, 157}:    "M2Mnet Co., Ltd.",
+       [3]byte{0, 38, 158}:    "QUANTA COMPUTER INC.",
+       [3]byte{0, 38, 159}:    "Private",
+       [3]byte{0, 38, 160}:    "moblic",
+       [3]byte{0, 38, 161}:    "Megger",
+       [3]byte{0, 38, 162}:    "Instrumentation Technology Systems",
+       [3]byte{0, 38, 163}:    "FQ Ingenieria Electronica S.A.",
+       [3]byte{0, 38, 164}:    "Novus Produtos Eletronicos Ltda",
+       [3]byte{0, 38, 165}:    "MICROROBOT.CO.,LTD",
+       [3]byte{0, 38, 166}:    "TRIXELL",
+       [3]byte{0, 38, 167}:    "CONNECT SRL",
+       [3]byte{0, 38, 168}:    "DAEHAP HYPER-TECH",
+       [3]byte{0, 38, 169}:    "Strong Technologies Pty Ltd",
+       [3]byte{0, 38, 170}:    "Kenmec Mechanical Engineering Co., Ltd.",
+       [3]byte{0, 38, 171}:    "Seiko Epson Corporation",
+       [3]byte{0, 38, 172}:    "Shanghai LUSTER Teraband photonic Co., Ltd.",
+       [3]byte{0, 38, 173}:    "Arada Systems, Inc.",
+       [3]byte{0, 38, 174}:    "Wireless Measurement Ltd",
+       [3]byte{0, 38, 175}:    "Duelco A/S",
+       [3]byte{0, 38, 176}:    "Apple, Inc.",
+       [3]byte{0, 38, 177}:    "Navis Auto Motive Systems, Inc.",
+       [3]byte{0, 38, 178}:    "Setrix GmbH",
+       [3]byte{0, 38, 179}:    "Thales Communications Inc",
+       [3]byte{0, 38, 180}:    "Ford Motor Company",
+       [3]byte{0, 38, 181}:    "ICOMM Tele Ltd",
+       [3]byte{0, 38, 182}:    "ASKEY COMPUTER CORP",
+       [3]byte{0, 38, 183}:    "Kingston Technology Company, Inc.",
+       [3]byte{0, 38, 184}:    "Actiontec Electronics, Inc",
+       [3]byte{0, 38, 185}:    "Dell Inc.",
+       [3]byte{0, 38, 186}:    "ARRIS Group, Inc.",
+       [3]byte{0, 38, 187}:    "Apple, Inc.",
+       [3]byte{0, 38, 188}:    "General Jack Technology Ltd.",
+       [3]byte{0, 38, 189}:    "JTEC Card & Communication Co., Ltd.",
+       [3]byte{0, 38, 190}:    "Schoonderbeek Elektronica Systemen B.V.",
+       [3]byte{0, 38, 191}:    "ShenZhen Temobi Science&Tech Development Co.,Ltd",
+       [3]byte{0, 38, 192}:    "EnergyHub",
+       [3]byte{0, 38, 193}:    "ARTRAY CO., LTD.",
+       [3]byte{0, 38, 194}:    "SCDI Co. LTD",
+       [3]byte{0, 38, 195}:    "Insightek Corp.",
+       [3]byte{0, 38, 196}:    "Cadmos microsystems S.r.l.",
+       [3]byte{0, 38, 197}:    "Guangdong Gosun Telecommunications Co.,Ltd",
+       [3]byte{0, 38, 198}:    "Intel Corporate",
+       [3]byte{0, 38, 199}:    "Intel Corporate",
+       [3]byte{0, 38, 200}:    "System Sensor",
+       [3]byte{0, 38, 201}:    "Proventix Systems, Inc.",
+       [3]byte{0, 38, 202}:    "Cisco Systems, Inc",
+       [3]byte{0, 38, 203}:    "Cisco Systems, Inc",
+       [3]byte{0, 38, 204}:    "Nokia Danmark A/S",
+       [3]byte{0, 38, 205}:    "PurpleComm, Inc.",
+       [3]byte{0, 38, 206}:    "Kozumi USA Corp.",
+       [3]byte{0, 38, 207}:    "DEKA R&D",
+       [3]byte{0, 38, 208}:    "Semihalf",
+       [3]byte{0, 38, 209}:    "S Squared Innovations Inc.",
+       [3]byte{0, 38, 210}:    "Pcube Systems, Inc.",
+       [3]byte{0, 38, 211}:    "Zeno Information System",
+       [3]byte{0, 38, 212}:    "IRCA SpA",
+       [3]byte{0, 38, 213}:    "Ory Solucoes em Comercio de Informatica Ltda.",
+       [3]byte{0, 38, 214}:    "Ningbo Andy Optoelectronic Co., Ltd.",
+       [3]byte{0, 38, 215}:    "KM Electornic Technology Co., Ltd.",
+       [3]byte{0, 38, 216}:    "Magic Point Inc.",
+       [3]byte{0, 38, 217}:    "ARRIS Group, Inc.",
+       [3]byte{0, 38, 218}:    "Universal Media Corporation /Slovakia/ s.r.o.",
+       [3]byte{0, 38, 219}:    "Ionics EMS Inc.",
+       [3]byte{0, 38, 220}:    "Optical Systems Design",
+       [3]byte{0, 38, 221}:    "Fival Science & Technology Co.,Ltd.",
+       [3]byte{0, 38, 222}:    "FDI MATELEC",
+       [3]byte{0, 38, 223}:    "TaiDoc Technology Corp.",
+       [3]byte{0, 38, 224}:    "ASITEQ",
+       [3]byte{0, 38, 225}:    "Stanford University, OpenFlow Group",
+       [3]byte{0, 38, 226}:    "LG Electronics (Mobile Communications)",
+       [3]byte{0, 38, 227}:    "DTI",
+       [3]byte{0, 38, 228}:    "Canal +",
+       [3]byte{0, 38, 229}:    "AEG Power Solutions",
+       [3]byte{0, 38, 230}:    "Visionhitech Co., Ltd.",
+       [3]byte{0, 38, 231}:    "Shanghai ONLAN Communication Tech. Co., Ltd.",
+       [3]byte{0, 38, 232}:    "Murata Manufacturing Co., Ltd.",
+       [3]byte{0, 38, 233}:    "SP Corp",
+       [3]byte{0, 38, 234}:    "Cheerchip Electronic Technology (ShangHai) Co., Ltd.",
+       [3]byte{0, 38, 235}:    "Advanced Spectrum Technology Co., Ltd.",
+       [3]byte{0, 38, 236}:    "Legrand Home Systems, Inc",
+       [3]byte{0, 38, 237}:    "zte corporation",
+       [3]byte{0, 38, 238}:    "TKM GmbH",
+       [3]byte{0, 38, 239}:    "Technology Advancement Group, Inc.",
+       [3]byte{0, 38, 240}:    "cTrixs International GmbH.",
+       [3]byte{0, 38, 241}:    "ProCurve Networking by HP",
+       [3]byte{0, 38, 242}:    "NETGEAR",
+       [3]byte{0, 38, 243}:    "SMC Networks",
+       [3]byte{0, 38, 244}:    "Nesslab",
+       [3]byte{0, 38, 245}:    "XRPLUS Inc.",
+       [3]byte{0, 38, 246}:    "Military Communication Institute",
+       [3]byte{0, 38, 247}:    "Nivetti Systems Pvt. Ltd.",
+       [3]byte{0, 38, 248}:    "Golden Highway Industry Development Co., Ltd.",
+       [3]byte{0, 38, 249}:    "S.E.M. srl",
+       [3]byte{0, 38, 250}:    "BandRich Inc.",
+       [3]byte{0, 38, 251}:    "AirDio Wireless, Inc.",
+       [3]byte{0, 38, 252}:    "AcSiP Technology Corp.",
+       [3]byte{0, 38, 253}:    "Interactive Intelligence",
+       [3]byte{0, 38, 254}:    "MKD Technology Inc.",
+       [3]byte{0, 38, 255}:    "BlackBerry RTS",
+       [3]byte{0, 39, 0}:      "Shenzhen Siglent Technology Co., Ltd.",
+       [3]byte{0, 39, 1}:      "INCOstartec GmbH",
+       [3]byte{0, 39, 2}:      "SolarEdge Technologies",
+       [3]byte{0, 39, 3}:      "Testech Electronics Pte Ltd",
+       [3]byte{0, 39, 4}:      "Accelerated Concepts, Inc",
+       [3]byte{0, 39, 5}:      "Sectronic",
+       [3]byte{0, 39, 6}:      "YOISYS",
+       [3]byte{0, 39, 7}:      "Lift Complex DS, JSC",
+       [3]byte{0, 39, 8}:      "Nordiag ASA",
+       [3]byte{0, 39, 9}:      "Nintendo Co., Ltd.",
+       [3]byte{0, 39, 10}:     "IEE S.A.",
+       [3]byte{0, 39, 11}:     "Adura Technologies",
+       [3]byte{0, 39, 12}:     "Cisco Systems, Inc",
+       [3]byte{0, 39, 13}:     "Cisco Systems, Inc",
+       [3]byte{0, 39, 14}:     "Intel Corporate",
+       [3]byte{0, 39, 15}:     "Envisionnovation Inc",
+       [3]byte{0, 39, 16}:     "Intel Corporate",
+       [3]byte{0, 39, 17}:     "LanPro Inc",
+       [3]byte{0, 39, 18}:     "MaxVision LLC",
+       [3]byte{0, 39, 19}:     "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{0, 39, 20}:     "Grainmustards, Co,ltd.",
+       [3]byte{0, 39, 21}:     "Rebound Telecom. Co., Ltd",
+       [3]byte{0, 39, 22}:     "Adachi-Syokai Co., Ltd.",
+       [3]byte{0, 39, 23}:     "CE Digital(Zhenjiang)Co.,Ltd",
+       [3]byte{0, 39, 24}:     "Suzhou NEW SEAUNION Video Technology Co.,Ltd",
+       [3]byte{0, 39, 25}:     "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 39, 26}:     "Geenovo Technology Ltd.",
+       [3]byte{0, 39, 27}:     "Alec Sicherheitssysteme GmbH",
+       [3]byte{0, 39, 28}:     "MERCURY CORPORATION",
+       [3]byte{0, 39, 29}:     "Comba Telecom Systems (China) Ltd.",
+       [3]byte{0, 39, 30}:     "Xagyl Communications",
+       [3]byte{0, 39, 31}:     "MIPRO Electronics Co., Ltd",
+       [3]byte{0, 39, 32}:     "NEW-SOL COM",
+       [3]byte{0, 39, 33}:     "Shenzhen Baoan Fenda Industrial Co., Ltd",
+       [3]byte{0, 39, 34}:     "Ubiquiti Networks Inc.",
+       [3]byte{0, 39, 144}:    "Cisco Systems, Inc",
+       [3]byte{0, 39, 227}:    "Cisco Systems, Inc",
+       [3]byte{0, 39, 248}:    "Brocade Communications Systems, Inc.",
+       [3]byte{0, 40, 159}:    "Semptian Co., Ltd.",
+       [3]byte{0, 40, 248}:    "Intel Corporate",
+       [3]byte{0, 41, 38}:     "Applied Optoelectronics, Inc Taiwan Branch",
+       [3]byte{0, 42, 16}:     "Cisco Systems, Inc",
+       [3]byte{0, 42, 106}:    "Cisco Systems, Inc",
+       [3]byte{0, 42, 175}:    "LARsys-Automation GmbH",
+       [3]byte{0, 44, 200}:    "Cisco Systems, Inc",
+       [3]byte{0, 45, 118}:    "TITECH GmbH",
+       [3]byte{0, 46, 199}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 48, 0}:      "ALLWELL TECHNOLOGY CORP.",
+       [3]byte{0, 48, 1}:      "SMP",
+       [3]byte{0, 48, 2}:      "Expand Networks",
+       [3]byte{0, 48, 3}:      "Phasys Ltd.",
+       [3]byte{0, 48, 4}:      "LEADTEK RESEARCH INC.",
+       [3]byte{0, 48, 5}:      "Fujitsu Siemens Computers",
+       [3]byte{0, 48, 6}:      "SUPERPOWER COMPUTER",
+       [3]byte{0, 48, 7}:      "OPTI, INC.",
+       [3]byte{0, 48, 8}:      "AVIO DIGITAL, INC.",
+       [3]byte{0, 48, 9}:      "Tachion Networks, Inc.",
+       [3]byte{0, 48, 10}:     "Aztech Electronics Pte Ltd",
+       [3]byte{0, 48, 11}:     "mPHASE Technologies, Inc.",
+       [3]byte{0, 48, 12}:     "CONGRUENCY, LTD.",
+       [3]byte{0, 48, 13}:     "MMC Technology, Inc.",
+       [3]byte{0, 48, 14}:     "Klotz Digital AG",
+       [3]byte{0, 48, 15}:     "IMT - Information Management T",
+       [3]byte{0, 48, 16}:     "VISIONETICS INTERNATIONAL",
+       [3]byte{0, 48, 17}:     "HMS Industrial Networks",
+       [3]byte{0, 48, 18}:     "DIGITAL ENGINEERING LTD.",
+       [3]byte{0, 48, 19}:     "NEC Corporation",
+       [3]byte{0, 48, 20}:     "DIVIO, INC.",
+       [3]byte{0, 48, 21}:     "CP CLARE CORP.",
+       [3]byte{0, 48, 22}:     "ISHIDA CO., LTD.",
+       [3]byte{0, 48, 23}:     "BlueArc UK Ltd",
+       [3]byte{0, 48, 24}:     "Jetway Information Co., Ltd.",
+       [3]byte{0, 48, 25}:     "Cisco Systems, Inc",
+       [3]byte{0, 48, 26}:     "SMARTBRIDGES PTE. LTD.",
+       [3]byte{0, 48, 27}:     "SHUTTLE, INC.",
+       [3]byte{0, 48, 28}:     "ALTVATER AIRDATA SYSTEMS",
+       [3]byte{0, 48, 29}:     "SKYSTREAM, INC.",
+       [3]byte{0, 48, 30}:     "3COM EUROPE LTD.",
+       [3]byte{0, 48, 31}:     "OPTICAL NETWORKS, INC.",
+       [3]byte{0, 48, 32}:     "TSI, Inc..",
+       [3]byte{0, 48, 33}:     "HSING TECH. ENTERPRISE CO.,LTD",
+       [3]byte{0, 48, 34}:     "Fong Kai Industrial Co., Ltd.",
+       [3]byte{0, 48, 35}:     "COGENT COMPUTER SYSTEMS, INC.",
+       [3]byte{0, 48, 36}:     "Cisco Systems, Inc",
+       [3]byte{0, 48, 37}:     "CHECKOUT COMPUTER SYSTEMS, LTD",
+       [3]byte{0, 48, 38}:     "HeiTel Digital Video GmbH",
+       [3]byte{0, 48, 39}:     "KERBANGO, INC.",
+       [3]byte{0, 48, 40}:     "FASE Saldatura srl",
+       [3]byte{0, 48, 41}:     "OPICOM",
+       [3]byte{0, 48, 42}:     "SOUTHERN INFORMATION",
+       [3]byte{0, 48, 43}:     "INALP NETWORKS, INC.",
+       [3]byte{0, 48, 44}:     "SYLANTRO SYSTEMS CORPORATION",
+       [3]byte{0, 48, 45}:     "QUANTUM BRIDGE COMMUNICATIONS",
+       [3]byte{0, 48, 46}:     "Hoft & Wessel AG",
+       [3]byte{0, 48, 47}:     "GE Aviation System",
+       [3]byte{0, 48, 48}:     "HARMONIX CORPORATION",
+       [3]byte{0, 48, 49}:     "LIGHTWAVE COMMUNICATIONS, INC.",
+       [3]byte{0, 48, 50}:     "MagicRam, Inc.",
+       [3]byte{0, 48, 51}:     "ORIENT TELECOM CO., LTD.",
+       [3]byte{0, 48, 52}:     "SET ENGINEERING",
+       [3]byte{0, 48, 53}:     "Corning Incorporated",
+       [3]byte{0, 48, 54}:     "RMP ELEKTRONIKSYSTEME GMBH",
+       [3]byte{0, 48, 55}:     "Packard Bell Nec Services",
+       [3]byte{0, 48, 56}:     "XCP, INC.",
+       [3]byte{0, 48, 57}:     "SOFTBOOK PRESS",
+       [3]byte{0, 48, 58}:     "MAATEL",
+       [3]byte{0, 48, 59}:     "PowerCom Technology",
+       [3]byte{0, 48, 60}:     "ONNTO CORP.",
+       [3]byte{0, 48, 61}:     "IVA CORPORATION",
+       [3]byte{0, 48, 62}:     "Radcom Ltd.",
+       [3]byte{0, 48, 63}:     "TurboComm Tech Inc.",
+       [3]byte{0, 48, 64}:     "Cisco Systems, Inc",
+       [3]byte{0, 48, 65}:     "SAEJIN T & M CO., LTD.",
+       [3]byte{0, 48, 66}:     "DeTeWe-Deutsche Telephonwerke",
+       [3]byte{0, 48, 67}:     "IDREAM TECHNOLOGIES, PTE. LTD.",
+       [3]byte{0, 48, 68}:     "CradlePoint, Inc",
+       [3]byte{0, 48, 69}:     "Village Networks, Inc. (VNI)",
+       [3]byte{0, 48, 70}:     "Controlled Electronic Manageme",
+       [3]byte{0, 48, 71}:     "NISSEI ELECTRIC CO., LTD.",
+       [3]byte{0, 48, 72}:     "Super Micro Computer, Inc.",
+       [3]byte{0, 48, 73}:     "BRYANT TECHNOLOGY, LTD.",
+       [3]byte{0, 48, 74}:     "Fraunhofer IPMS",
+       [3]byte{0, 48, 75}:     "ORBACOM SYSTEMS, INC.",
+       [3]byte{0, 48, 76}:     "APPIAN COMMUNICATIONS, INC.",
+       [3]byte{0, 48, 77}:     "ESI",
+       [3]byte{0, 48, 78}:     "BUSTEC PRODUCTION LTD.",
+       [3]byte{0, 48, 79}:     "PLANET Technology Corporation",
+       [3]byte{0, 48, 80}:     "Versa Technology",
+       [3]byte{0, 48, 81}:     "ORBIT AVIONIC & COMMUNICATION",
+       [3]byte{0, 48, 82}:     "ELASTIC NETWORKS",
+       [3]byte{0, 48, 83}:     "Basler AG",
+       [3]byte{0, 48, 84}:     "CASTLENET TECHNOLOGY, INC.",
+       [3]byte{0, 48, 85}:     "Renesas Technology America, Inc.",
+       [3]byte{0, 48, 86}:     "Beck IPC GmbH",
+       [3]byte{0, 48, 87}:     "QTelNet, Inc.",
+       [3]byte{0, 48, 88}:     "API MOTION",
+       [3]byte{0, 48, 89}:     "KONTRON COMPACT COMPUTERS AG",
+       [3]byte{0, 48, 90}:     "TELGEN CORPORATION",
+       [3]byte{0, 48, 91}:     "Toko Inc.",
+       [3]byte{0, 48, 92}:     "SMAR Laboratories Corp.",
+       [3]byte{0, 48, 93}:     "DIGITRA SYSTEMS, INC.",
+       [3]byte{0, 48, 94}:     "Abelko Innovation",
+       [3]byte{0, 48, 95}:     "Hasselblad",
+       [3]byte{0, 48, 96}:     "Powerfile, Inc.",
+       [3]byte{0, 48, 97}:     "MobyTEL",
+       [3]byte{0, 48, 98}:     "IP Video Networks Inc",
+       [3]byte{0, 48, 99}:     "SANTERA SYSTEMS, INC.",
+       [3]byte{0, 48, 100}:    "ADLINK TECHNOLOGY, INC.",
+       [3]byte{0, 48, 101}:    "Apple, Inc.",
+       [3]byte{0, 48, 102}:    "RFM",
+       [3]byte{0, 48, 103}:    "BIOSTAR Microtech Int'l Corp.",
+       [3]byte{0, 48, 104}:    "CYBERNETICS TECH. CO., LTD.",
+       [3]byte{0, 48, 105}:    "IMPACCT TECHNOLOGY CORP.",
+       [3]byte{0, 48, 106}:    "PENTA MEDIA CO., LTD.",
+       [3]byte{0, 48, 107}:    "CMOS SYSTEMS, INC.",
+       [3]byte{0, 48, 108}:    "Hitex Holding GmbH",
+       [3]byte{0, 48, 109}:    "LUCENT TECHNOLOGIES",
+       [3]byte{0, 48, 110}:    "Hewlett Packard",
+       [3]byte{0, 48, 111}:    "SEYEON TECH. CO., LTD.",
+       [3]byte{0, 48, 112}:    "1Net Corporation",
+       [3]byte{0, 48, 113}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 114}:    "Intellibyte Inc.",
+       [3]byte{0, 48, 115}:    "International Microsystems, In",
+       [3]byte{0, 48, 116}:    "EQUIINET LTD.",
+       [3]byte{0, 48, 117}:    "ADTECH",
+       [3]byte{0, 48, 118}:    "Akamba Corporation",
+       [3]byte{0, 48, 119}:    "ONPREM NETWORKS",
+       [3]byte{0, 48, 120}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 121}:    "CQOS, INC.",
+       [3]byte{0, 48, 122}:    "Advanced Technology & Systems",
+       [3]byte{0, 48, 123}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 124}:    "ADID SA",
+       [3]byte{0, 48, 125}:    "GRE AMERICA, INC.",
+       [3]byte{0, 48, 126}:    "Redflex Communication Systems",
+       [3]byte{0, 48, 127}:    "IRLAN LTD.",
+       [3]byte{0, 48, 128}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 129}:    "ALTOS C&C",
+       [3]byte{0, 48, 130}:    "TAIHAN ELECTRIC WIRE CO., LTD.",
+       [3]byte{0, 48, 131}:    "Ivron Systems",
+       [3]byte{0, 48, 132}:    "ALLIED TELESYN INTERNAIONAL",
+       [3]byte{0, 48, 133}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 134}:    "Transistor Devices, Inc.",
+       [3]byte{0, 48, 135}:    "VEGA GRIESHABER KG",
+       [3]byte{0, 48, 136}:    "Ericsson",
+       [3]byte{0, 48, 137}:    "Spectrapoint Wireless, LLC",
+       [3]byte{0, 48, 138}:    "NICOTRA SISTEMI S.P.A",
+       [3]byte{0, 48, 139}:    "Brix Networks",
+       [3]byte{0, 48, 140}:    "Quantum Corporation",
+       [3]byte{0, 48, 141}:    "Pinnacle Systems, Inc.",
+       [3]byte{0, 48, 142}:    "CROSS MATCH TECHNOLOGIES, INC.",
+       [3]byte{0, 48, 143}:    "MICRILOR, Inc.",
+       [3]byte{0, 48, 144}:    "CYRA TECHNOLOGIES, INC.",
+       [3]byte{0, 48, 145}:    "TAIWAN FIRST LINE ELEC. CORP.",
+       [3]byte{0, 48, 146}:    "ModuNORM GmbH",
+       [3]byte{0, 48, 147}:    "Sonnet Technologies, Inc",
+       [3]byte{0, 48, 148}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 149}:    "Procomp Informatics, Ltd.",
+       [3]byte{0, 48, 150}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 151}:    "AB Regin",
+       [3]byte{0, 48, 152}:    "Global Converging Technologies",
+       [3]byte{0, 48, 153}:    "BOENIG UND KALLENBACH OHG",
+       [3]byte{0, 48, 154}:    "ASTRO TERRA CORP.",
+       [3]byte{0, 48, 155}:    "Smartware",
+       [3]byte{0, 48, 156}:    "Timing Applications, Inc.",
+       [3]byte{0, 48, 157}:    "Nimble Microsystems, Inc.",
+       [3]byte{0, 48, 158}:    "WORKBIT CORPORATION.",
+       [3]byte{0, 48, 159}:    "AMBER NETWORKS",
+       [3]byte{0, 48, 160}:    "TYCO SUBMARINE SYSTEMS, LTD.",
+       [3]byte{0, 48, 161}:    "WEBGATE Inc.",
+       [3]byte{0, 48, 162}:    "Lightner Engineering",
+       [3]byte{0, 48, 163}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 164}:    "Woodwind Communications System",
+       [3]byte{0, 48, 165}:    "ACTIVE POWER",
+       [3]byte{0, 48, 166}:    "VIANET TECHNOLOGIES, LTD.",
+       [3]byte{0, 48, 167}:    "SCHWEITZER ENGINEERING",
+       [3]byte{0, 48, 168}:    "OL'E COMMUNICATIONS, INC.",
+       [3]byte{0, 48, 169}:    "Netiverse, Inc.",
+       [3]byte{0, 48, 170}:    "AXUS MICROSYSTEMS, INC.",
+       [3]byte{0, 48, 171}:    "DELTA NETWORKS, INC.",
+       [3]byte{0, 48, 172}:    "Systeme Lauer GmbH & Co., Ltd.",
+       [3]byte{0, 48, 173}:    "SHANGHAI COMMUNICATION",
+       [3]byte{0, 48, 174}:    "Times N System, Inc.",
+       [3]byte{0, 48, 175}:    "Honeywell GmbH",
+       [3]byte{0, 48, 176}:    "Convergenet Technologies",
+       [3]byte{0, 48, 177}:    "TrunkNet",
+       [3]byte{0, 48, 178}:    "L-3 Sonoma EO",
+       [3]byte{0, 48, 179}:    "San Valley Systems, Inc.",
+       [3]byte{0, 48, 180}:    "INTERSIL CORP.",
+       [3]byte{0, 48, 181}:    "Tadiran Microwave Networks",
+       [3]byte{0, 48, 182}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 183}:    "Teletrol Systems, Inc.",
+       [3]byte{0, 48, 184}:    "RiverDelta Networks",
+       [3]byte{0, 48, 185}:    "ECTEL",
+       [3]byte{0, 48, 186}:    "AC&T SYSTEM CO., LTD.",
+       [3]byte{0, 48, 187}:    "CacheFlow, Inc.",
+       [3]byte{0, 48, 188}:    "Optronic AG",
+       [3]byte{0, 48, 189}:    "BELKIN COMPONENTS",
+       [3]byte{0, 48, 190}:    "City-Net Technology, Inc.",
+       [3]byte{0, 48, 191}:    "MULTIDATA GMBH",
+       [3]byte{0, 48, 192}:    "Lara Technology, Inc.",
+       [3]byte{0, 48, 193}:    "Hewlett Packard",
+       [3]byte{0, 48, 194}:    "COMONE",
+       [3]byte{0, 48, 195}:    "FLUECKIGER ELEKTRONIK AG",
+       [3]byte{0, 48, 196}:    "Canon Imaging Systems Inc.",
+       [3]byte{0, 48, 197}:    "CADENCE DESIGN SYSTEMS, INC.",
+       [3]byte{0, 48, 198}:    "CONTROL SOLUTIONS, INC.",
+       [3]byte{0, 48, 199}:    "Macromate Corp.",
+       [3]byte{0, 48, 200}:    "GAD LINE, LTD.",
+       [3]byte{0, 48, 201}:    "LuxN, N",
+       [3]byte{0, 48, 202}:    "Discovery Com",
+       [3]byte{0, 48, 203}:    "OMNI FLOW COMPUTERS, INC.",
+       [3]byte{0, 48, 204}:    "Tenor Networks, Inc.",
+       [3]byte{0, 48, 205}:    "CONEXANT SYSTEMS, INC.",
+       [3]byte{0, 48, 206}:    "Zaffire",
+       [3]byte{0, 48, 207}:    "TWO TECHNOLOGIES, INC.",
+       [3]byte{0, 48, 208}:    "Tellabs",
+       [3]byte{0, 48, 209}:    "INOVA CORPORATION",
+       [3]byte{0, 48, 210}:    "WIN TECHNOLOGIES, CO., LTD.",
+       [3]byte{0, 48, 211}:    "Agilent Technologies, Inc.",
+       [3]byte{0, 48, 212}:    "AAE Systems, Inc.",
+       [3]byte{0, 48, 213}:    "DResearch GmbH",
+       [3]byte{0, 48, 214}:    "MSC VERTRIEBS GMBH",
+       [3]byte{0, 48, 215}:    "Innovative Systems, L.L.C.",
+       [3]byte{0, 48, 216}:    "SITEK",
+       [3]byte{0, 48, 217}:    "DATACORE SOFTWARE CORP.",
+       [3]byte{0, 48, 218}:    "Comtrend Corporation",
+       [3]byte{0, 48, 219}:    "Mindready Solutions, Inc.",
+       [3]byte{0, 48, 220}:    "RIGHTECH CORPORATION",
+       [3]byte{0, 48, 221}:    "INDIGITA CORPORATION",
+       [3]byte{0, 48, 222}:    "WAGO Kontakttechnik GmbH",
+       [3]byte{0, 48, 223}:    "KB/TEL TELECOMUNICACIONES",
+       [3]byte{0, 48, 224}:    "OXFORD SEMICONDUCTOR LTD.",
+       [3]byte{0, 48, 225}:    "Network Equipment Technologies, Inc.",
+       [3]byte{0, 48, 226}:    "GARNET SYSTEMS CO., LTD.",
+       [3]byte{0, 48, 227}:    "SEDONA NETWORKS CORP.",
+       [3]byte{0, 48, 228}:    "CHIYODA SYSTEM RIKEN",
+       [3]byte{0, 48, 229}:    "Amper Datos S.A.",
+       [3]byte{0, 48, 230}:    "Draeger Medical Systems, Inc.",
+       [3]byte{0, 48, 231}:    "CNF MOBILE SOLUTIONS, INC.",
+       [3]byte{0, 48, 232}:    "ENSIM CORP.",
+       [3]byte{0, 48, 233}:    "GMA COMMUNICATION MANUFACT'G",
+       [3]byte{0, 48, 234}:    "TeraForce Technology Corporation",
+       [3]byte{0, 48, 235}:    "TURBONET COMMUNICATIONS, INC.",
+       [3]byte{0, 48, 236}:    "BORGARDT",
+       [3]byte{0, 48, 237}:    "Expert Magnetics Corp.",
+       [3]byte{0, 48, 238}:    "DSG Technology, Inc.",
+       [3]byte{0, 48, 239}:    "NEON TECHNOLOGY, INC.",
+       [3]byte{0, 48, 240}:    "Uniform Industrial Corp.",
+       [3]byte{0, 48, 241}:    "Accton Technology Corp",
+       [3]byte{0, 48, 242}:    "Cisco Systems, Inc",
+       [3]byte{0, 48, 243}:    "At Work Computers",
+       [3]byte{0, 48, 244}:    "STARDOT TECHNOLOGIES",
+       [3]byte{0, 48, 245}:    "Wild Lab. Ltd.",
+       [3]byte{0, 48, 246}:    "SECURELOGIX CORPORATION",
+       [3]byte{0, 48, 247}:    "RAMIX INC.",
+       [3]byte{0, 48, 248}:    "Dynapro Systems, Inc.",
+       [3]byte{0, 48, 249}:    "Sollae Systems Co., Ltd.",
+       [3]byte{0, 48, 250}:    "TELICA, INC.",
+       [3]byte{0, 48, 251}:    "AZS Technology AG",
+       [3]byte{0, 48, 252}:    "Terawave Communications, Inc.",
+       [3]byte{0, 48, 253}:    "INTEGRATED SYSTEMS DESIGN",
+       [3]byte{0, 48, 254}:    "DSA GmbH",
+       [3]byte{0, 48, 255}:    "DataFab Systems Inc.",
+       [3]byte{0, 49, 70}:     "Juniper Networks",
+       [3]byte{0, 50, 58}:     "so-logic",
+       [3]byte{0, 51, 108}:    "SynapSense Corporation",
+       [3]byte{0, 52, 218}:    "LG Electronics (Mobile Communications)",
+       [3]byte{0, 52, 241}:    "Radicom Research, Inc.",
+       [3]byte{0, 52, 254}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 53, 26}:     "Cisco Systems, Inc",
+       [3]byte{0, 53, 50}:     "Electro-Metrics Corporation",
+       [3]byte{0, 53, 96}:     "Rosen Aviation",
+       [3]byte{0, 54, 118}:    "ARRIS Group, Inc.",
+       [3]byte{0, 54, 248}:    "Conti Temic microelectronic GmbH",
+       [3]byte{0, 54, 254}:    "SuperVision",
+       [3]byte{0, 55, 109}:    "Murata Manufacturing Co., Ltd.",
+       [3]byte{0, 55, 183}:    "Sagemcom Broadband SAS",
+       [3]byte{0, 56, 223}:    "Cisco Systems, Inc",
+       [3]byte{0, 58, 125}:    "Cisco Systems, Inc",
+       [3]byte{0, 58, 152}:    "Cisco Systems, Inc",
+       [3]byte{0, 58, 153}:    "Cisco Systems, Inc",
+       [3]byte{0, 58, 154}:    "Cisco Systems, Inc",
+       [3]byte{0, 58, 155}:    "Cisco Systems, Inc",
+       [3]byte{0, 58, 156}:    "Cisco Systems, Inc",
+       [3]byte{0, 58, 157}:    "NEC Platforms, Ltd.",
+       [3]byte{0, 58, 175}:    "BlueBit Ltd.",
+       [3]byte{0, 60, 197}:    "WONWOO Engineering Co., Ltd",
+       [3]byte{0, 61, 65}:     "Hatteland Computer AS",
+       [3]byte{0, 62, 225}:    "Apple, Inc.",
+       [3]byte{0, 64, 0}:      "PCI COMPONENTES DA AMZONIA LTD",
+       [3]byte{0, 64, 1}:      "Zero One Technology Co. Ltd.",
+       [3]byte{0, 64, 2}:      "PERLE SYSTEMS LIMITED",
+       [3]byte{0, 64, 3}:      "Emerson Process Management Power & Water Solutions, Inc.",
+       [3]byte{0, 64, 4}:      "ICM CO. LTD.",
+       [3]byte{0, 64, 5}:      "ANI COMMUNICATIONS INC.",
+       [3]byte{0, 64, 6}:      "SAMPO TECHNOLOGY CORPORATION",
+       [3]byte{0, 64, 7}:      "TELMAT INFORMATIQUE",
+       [3]byte{0, 64, 8}:      "A PLUS INFO CORPORATION",
+       [3]byte{0, 64, 9}:      "TACHIBANA TECTRON CO., LTD.",
+       [3]byte{0, 64, 10}:     "PIVOTAL TECHNOLOGIES, INC.",
+       [3]byte{0, 64, 11}:     "Cisco Systems, Inc",
+       [3]byte{0, 64, 12}:     "GENERAL MICRO SYSTEMS, INC.",
+       [3]byte{0, 64, 13}:     "LANNET DATA COMMUNICATIONS,LTD",
+       [3]byte{0, 64, 14}:     "MEMOTEC, INC.",
+       [3]byte{0, 64, 15}:     "DATACOM TECHNOLOGIES",
+       [3]byte{0, 64, 16}:     "SONIC SYSTEMS, INC.",
+       [3]byte{0, 64, 17}:     "ANDOVER CONTROLS CORPORATION",
+       [3]byte{0, 64, 18}:     "WINDATA, INC.",
+       [3]byte{0, 64, 19}:     "NTT DATA COMM. SYSTEMS CORP.",
+       [3]byte{0, 64, 20}:     "COMSOFT GMBH",
+       [3]byte{0, 64, 21}:     "ASCOM INFRASYS AG",
+       [3]byte{0, 64, 22}:     "ADC - Global Connectivity Solutions Division",
+       [3]byte{0, 64, 23}:     "Silex Technology America",
+       [3]byte{0, 64, 24}:     "ADOBE SYSTEMS, INC.",
+       [3]byte{0, 64, 25}:     "AEON SYSTEMS, INC.",
+       [3]byte{0, 64, 26}:     "FUJI ELECTRIC CO., LTD.",
+       [3]byte{0, 64, 27}:     "PRINTER SYSTEMS CORP.",
+       [3]byte{0, 64, 28}:     "AST RESEARCH, INC.",
+       [3]byte{0, 64, 29}:     "INVISIBLE SOFTWARE, INC.",
+       [3]byte{0, 64, 30}:     "ICC",
+       [3]byte{0, 64, 31}:     "COLORGRAPH LTD",
+       [3]byte{0, 64, 32}:     "CommScope Inc",
+       [3]byte{0, 64, 33}:     "RASTER GRAPHICS",
+       [3]byte{0, 64, 34}:     "KLEVER COMPUTERS, INC.",
+       [3]byte{0, 64, 35}:     "LOGIC CORPORATION",
+       [3]byte{0, 64, 36}:     "COMPAC INC.",
+       [3]byte{0, 64, 37}:     "MOLECULAR DYNAMICS",
+       [3]byte{0, 64, 38}:     "BUFFALO.INC",
+       [3]byte{0, 64, 39}:     "SMC MASSACHUSETTS, INC.",
+       [3]byte{0, 64, 40}:     "NETCOMM LIMITED",
+       [3]byte{0, 64, 41}:     "Compex",
+       [3]byte{0, 64, 42}:     "Canoga Perkins Corporation",
+       [3]byte{0, 64, 43}:     "TRIGEM COMPUTER, INC.",
+       [3]byte{0, 64, 44}:     "ISIS DISTRIBUTED SYSTEMS, INC.",
+       [3]byte{0, 64, 45}:     "HARRIS ADACOM CORPORATION",
+       [3]byte{0, 64, 46}:     "PRECISION SOFTWARE, INC.",
+       [3]byte{0, 64, 47}:     "XLNT DESIGNS INC.",
+       [3]byte{0, 64, 48}:     "GK COMPUTER",
+       [3]byte{0, 64, 49}:     "KOKUSAI ELECTRIC CO., LTD",
+       [3]byte{0, 64, 50}:     "DIGITAL COMMUNICATIONS",
+       [3]byte{0, 64, 51}:     "ADDTRON TECHNOLOGY CO., LTD.",
+       [3]byte{0, 64, 52}:     "BUSTEK CORPORATION",
+       [3]byte{0, 64, 53}:     "OPCOM",
+       [3]byte{0, 64, 54}:     "Zoom Telephonics, Inc",
+       [3]byte{0, 64, 55}:     "SEA-ILAN, INC.",
+       [3]byte{0, 64, 56}:     "TALENT ELECTRIC INCORPORATED",
+       [3]byte{0, 64, 57}:     "OPTEC DAIICHI DENKO CO., LTD.",
+       [3]byte{0, 64, 58}:     "IMPACT TECHNOLOGIES",
+       [3]byte{0, 64, 59}:     "SYNERJET INTERNATIONAL CORP.",
+       [3]byte{0, 64, 60}:     "FORKS, INC.",
+       [3]byte{0, 64, 61}:     "Teradata Corporation",
+       [3]byte{0, 64, 62}:     "RASTER OPS CORPORATION",
+       [3]byte{0, 64, 63}:     "SSANGYONG COMPUTER SYSTEMS",
+       [3]byte{0, 64, 64}:     "RING ACCESS, INC.",
+       [3]byte{0, 64, 65}:     "FUJIKURA LTD.",
+       [3]byte{0, 64, 66}:     "N.A.T. GMBH",
+       [3]byte{0, 64, 67}:     "Nokia Siemens Networks GmbH & Co. KG.",
+       [3]byte{0, 64, 68}:     "QNIX COMPUTER CO., LTD.",
+       [3]byte{0, 64, 69}:     "TWINHEAD CORPORATION",
+       [3]byte{0, 64, 70}:     "UDC RESEARCH LIMITED",
+       [3]byte{0, 64, 71}:     "WIND RIVER SYSTEMS",
+       [3]byte{0, 64, 72}:     "SMD INFORMATICA S.A.",
+       [3]byte{0, 64, 73}:     "Roche Diagnostics International Ltd.",
+       [3]byte{0, 64, 74}:     "WEST AUSTRALIAN DEPARTMENT",
+       [3]byte{0, 64, 75}:     "MAPLE COMPUTER SYSTEMS",
+       [3]byte{0, 64, 76}:     "HYPERTEC PTY LTD.",
+       [3]byte{0, 64, 77}:     "TELECOMMUNICATIONS TECHNIQUES",
+       [3]byte{0, 64, 78}:     "FLUENT, INC.",
+       [3]byte{0, 64, 79}:     "SPACE & NAVAL WARFARE SYSTEMS",
+       [3]byte{0, 64, 80}:     "IRONICS, INCORPORATED",
+       [3]byte{0, 64, 81}:     "GRACILIS, INC.",
+       [3]byte{0, 64, 82}:     "STAR TECHNOLOGIES, INC.",
+       [3]byte{0, 64, 83}:     "AMPRO COMPUTERS",
+       [3]byte{0, 64, 84}:     "CONNECTION MACHINES SERVICES",
+       [3]byte{0, 64, 85}:     "METRONIX GMBH",
+       [3]byte{0, 64, 86}:     "MCM JAPAN LTD.",
+       [3]byte{0, 64, 87}:     "LOCKHEED - SANDERS",
+       [3]byte{0, 64, 88}:     "KRONOS, INC.",
+       [3]byte{0, 64, 89}:     "YOSHIDA KOGYO K. K.",
+       [3]byte{0, 64, 90}:     "GOLDSTAR INFORMATION & COMM.",
+       [3]byte{0, 64, 91}:     "FUNASSET LIMITED",
+       [3]byte{0, 64, 92}:     "FUTURE SYSTEMS, INC.",
+       [3]byte{0, 64, 93}:     "STAR-TEK, INC.",
+       [3]byte{0, 64, 94}:     "NORTH HILLS ISRAEL",
+       [3]byte{0, 64, 95}:     "AFE COMPUTERS LTD.",
+       [3]byte{0, 64, 96}:     "COMENDEC LTD",
+       [3]byte{0, 64, 97}:     "DATATECH ENTERPRISES CO., LTD.",
+       [3]byte{0, 64, 98}:     "E-SYSTEMS, INC./GARLAND DIV.",
+       [3]byte{0, 64, 99}:     "VIA TECHNOLOGIES, INC.",
+       [3]byte{0, 64, 100}:    "KLA INSTRUMENTS CORPORATION",
+       [3]byte{0, 64, 101}:    "GTE SPACENET",
+       [3]byte{0, 64, 102}:    "APRESIA Systems Ltd",
+       [3]byte{0, 64, 103}:    "OMNIBYTE CORPORATION",
+       [3]byte{0, 64, 104}:    "EXTENDED SYSTEMS",
+       [3]byte{0, 64, 105}:    "LEMCOM SYSTEMS, INC.",
+       [3]byte{0, 64, 106}:    "KENTEK INFORMATION SYSTEMS,INC",
+       [3]byte{0, 64, 107}:    "SYSGEN",
+       [3]byte{0, 64, 108}:    "COPERNIQUE",
+       [3]byte{0, 64, 109}:    "LANCO, INC.",
+       [3]byte{0, 64, 110}:    "COROLLARY, INC.",
+       [3]byte{0, 64, 111}:    "SYNC RESEARCH INC.",
+       [3]byte{0, 64, 112}:    "INTERWARE CO., LTD.",
+       [3]byte{0, 64, 113}:    "ATM COMPUTER GMBH",
+       [3]byte{0, 64, 114}:    "Applied Innovation Inc.",
+       [3]byte{0, 64, 115}:    "BASS ASSOCIATES",
+       [3]byte{0, 64, 116}:    "CABLE AND WIRELESS",
+       [3]byte{0, 64, 117}:    "Tattile SRL",
+       [3]byte{0, 64, 118}:    "Sun Conversion Technologies",
+       [3]byte{0, 64, 119}:    "MAXTON TECHNOLOGY CORPORATION",
+       [3]byte{0, 64, 120}:    "WEARNES AUTOMATION PTE LTD",
+       [3]byte{0, 64, 121}:    "JUKO MANUFACTURE COMPANY, LTD.",
+       [3]byte{0, 64, 122}:    "SOCIETE D'EXPLOITATION DU CNIT",
+       [3]byte{0, 64, 123}:    "SCIENTIFIC ATLANTA",
+       [3]byte{0, 64, 124}:    "QUME CORPORATION",
+       [3]byte{0, 64, 125}:    "EXTENSION TECHNOLOGY CORP.",
+       [3]byte{0, 64, 126}:    "EVERGREEN SYSTEMS, INC.",
+       [3]byte{0, 64, 127}:    "FLIR Systems",
+       [3]byte{0, 64, 128}:    "ATHENIX CORPORATION",
+       [3]byte{0, 64, 129}:    "MANNESMANN SCANGRAPHIC GMBH",
+       [3]byte{0, 64, 130}:    "LABORATORY EQUIPMENT CORP.",
+       [3]byte{0, 64, 131}:    "TDA INDUSTRIA DE PRODUTOS",
+       [3]byte{0, 64, 132}:    "HONEYWELL ACS",
+       [3]byte{0, 64, 133}:    "SAAB INSTRUMENTS AB",
+       [3]byte{0, 64, 134}:    "MICHELS & KLEBERHOFF COMPUTER",
+       [3]byte{0, 64, 135}:    "UBITREX CORPORATION",
+       [3]byte{0, 64, 136}:    "MOBIUS TECHNOLOGIES, INC.",
+       [3]byte{0, 64, 137}:    "MEIDENSHA CORPORATION",
+       [3]byte{0, 64, 138}:    "TPS TELEPROCESSING SYS. GMBH",
+       [3]byte{0, 64, 139}:    "RAYLAN CORPORATION",
+       [3]byte{0, 64, 140}:    "AXIS COMMUNICATIONS AB",
+       [3]byte{0, 64, 141}:    "THE GOODYEAR TIRE & RUBBER CO.",
+       [3]byte{0, 64, 142}:    "Tattile SRL",
+       [3]byte{0, 64, 143}:    "WM-DATA MINFO AB",
+       [3]byte{0, 64, 144}:    "ANSEL COMMUNICATIONS",
+       [3]byte{0, 64, 145}:    "PROCOMP INDUSTRIA ELETRONICA",
+       [3]byte{0, 64, 146}:    "ASP COMPUTER PRODUCTS, INC.",
+       [3]byte{0, 64, 147}:    "PAXDATA NETWORKS LTD.",
+       [3]byte{0, 64, 148}:    "SHOGRAPHICS, INC.",
+       [3]byte{0, 64, 149}:    "R.P.T. INTERGROUPS INT'L LTD.",
+       [3]byte{0, 64, 150}:    "Cisco Systems, Inc",
+       [3]byte{0, 64, 151}:    "DATEX DIVISION OF",
+       [3]byte{0, 64, 152}:    "DRESSLER GMBH & CO.",
+       [3]byte{0, 64, 153}:    "NEWGEN SYSTEMS CORP.",
+       [3]byte{0, 64, 154}:    "NETWORK EXPRESS, INC.",
+       [3]byte{0, 64, 155}:    "HAL COMPUTER SYSTEMS INC.",
+       [3]byte{0, 64, 156}:    "TRANSWARE",
+       [3]byte{0, 64, 157}:    "DIGIBOARD, INC.",
+       [3]byte{0, 64, 158}:    "CONCURRENT TECHNOLOGIES  LTD.",
+       [3]byte{0, 64, 159}:    "Telco Systems, Inc.",
+       [3]byte{0, 64, 160}:    "GOLDSTAR CO., LTD.",
+       [3]byte{0, 64, 161}:    "ERGO COMPUTING",
+       [3]byte{0, 64, 162}:    "KINGSTAR TECHNOLOGY INC.",
+       [3]byte{0, 64, 163}:    "MICROUNITY SYSTEMS ENGINEERING",
+       [3]byte{0, 64, 164}:    "ROSE ELECTRONICS",
+       [3]byte{0, 64, 165}:    "CLINICOMP INTL.",
+       [3]byte{0, 64, 166}:    "Cray, Inc.",
+       [3]byte{0, 64, 167}:    "ITAUTEC PHILCO S.A.",
+       [3]byte{0, 64, 168}:    "IMF INTERNATIONAL LTD.",
+       [3]byte{0, 64, 169}:    "DATACOM INC.",
+       [3]byte{0, 64, 170}:    "Valmet Automation",
+       [3]byte{0, 64, 171}:    "ROLAND DG CORPORATION",
+       [3]byte{0, 64, 172}:    "SUPER WORKSTATION, INC.",
+       [3]byte{0, 64, 173}:    "SMA REGELSYSTEME GMBH",
+       [3]byte{0, 64, 174}:    "DELTA CONTROLS, INC.",
+       [3]byte{0, 64, 175}:    "DIGITAL PRODUCTS, INC.",
+       [3]byte{0, 64, 176}:    "BYTEX CORPORATION, ENGINEERING",
+       [3]byte{0, 64, 177}:    "CODONICS INC.",
+       [3]byte{0, 64, 178}:    "SYSTEMFORSCHUNG",
+       [3]byte{0, 64, 179}:    "ParTech Inc.",
+       [3]byte{0, 64, 180}:    "NEXTCOM K.K.",
+       [3]byte{0, 64, 181}:    "VIDEO TECHNOLOGY COMPUTERS LTD",
+       [3]byte{0, 64, 182}:    "COMPUTERM  CORPORATION",
+       [3]byte{0, 64, 183}:    "STEALTH COMPUTER SYSTEMS",
+       [3]byte{0, 64, 184}:    "IDEA ASSOCIATES",
+       [3]byte{0, 64, 185}:    "MACQ ELECTRONIQUE SA",
+       [3]byte{0, 64, 186}:    "ALLIANT COMPUTER SYSTEMS CORP.",
+       [3]byte{0, 64, 187}:    "GOLDSTAR CABLE CO., LTD.",
+       [3]byte{0, 64, 188}:    "ALGORITHMICS LTD.",
+       [3]byte{0, 64, 189}:    "STARLIGHT NETWORKS, INC.",
+       [3]byte{0, 64, 190}:    "BOEING DEFENSE & SPACE",
+       [3]byte{0, 64, 191}:    "CHANNEL SYSTEMS INTERN'L INC.",
+       [3]byte{0, 64, 192}:    "VISTA CONTROLS CORPORATION",
+       [3]byte{0, 64, 193}:    "BIZERBA-WERKE WILHEIM KRAUT",
+       [3]byte{0, 64, 194}:    "APPLIED COMPUTING DEVICES",
+       [3]byte{0, 64, 195}:    "FISCHER AND PORTER CO.",
+       [3]byte{0, 64, 196}:    "KINKEI SYSTEM CORPORATION",
+       [3]byte{0, 64, 197}:    "MICOM COMMUNICATIONS INC.",
+       [3]byte{0, 64, 198}:    "FIBERNET RESEARCH, INC.",
+       [3]byte{0, 64, 199}:    "RUBY TECH CORPORATION",
+       [3]byte{0, 64, 200}:    "MILAN TECHNOLOGY CORPORATION",
+       [3]byte{0, 64, 201}:    "NCUBE",
+       [3]byte{0, 64, 202}:    "FIRST INTERNAT'L COMPUTER, INC",
+       [3]byte{0, 64, 203}:    "LANWAN TECHNOLOGIES",
+       [3]byte{0, 64, 204}:    "SILCOM MANUF'G TECHNOLOGY INC.",
+       [3]byte{0, 64, 205}:    "TERA MICROSYSTEMS, INC.",
+       [3]byte{0, 64, 206}:    "NET-SOURCE, INC.",
+       [3]byte{0, 64, 207}:    "STRAWBERRY TREE, INC.",
+       [3]byte{0, 64, 208}:    "MITAC INTERNATIONAL CORP.",
+       [3]byte{0, 64, 209}:    "FUKUDA DENSHI CO., LTD.",
+       [3]byte{0, 64, 210}:    "PAGINE CORPORATION",
+       [3]byte{0, 64, 211}:    "KIMPSION INTERNATIONAL CORP.",
+       [3]byte{0, 64, 212}:    "GAGE TALKER CORP.",
+       [3]byte{0, 64, 213}:    "Sartorius Mechatronics T&H GmbH",
+       [3]byte{0, 64, 214}:    "LOCAMATION B.V.",
+       [3]byte{0, 64, 215}:    "STUDIO GEN INC.",
+       [3]byte{0, 64, 216}:    "OCEAN OFFICE AUTOMATION LTD.",
+       [3]byte{0, 64, 217}:    "AMERICAN MEGATRENDS INC.",
+       [3]byte{0, 64, 218}:    "TELSPEC LTD",
+       [3]byte{0, 64, 219}:    "ADVANCED TECHNICAL SOLUTIONS",
+       [3]byte{0, 64, 220}:    "TRITEC ELECTRONIC GMBH",
+       [3]byte{0, 64, 221}:    "HONG TECHNOLOGIES",
+       [3]byte{0, 64, 222}:    "Elsag Datamat spa",
+       [3]byte{0, 64, 223}:    "DIGALOG SYSTEMS, INC.",
+       [3]byte{0, 64, 224}:    "ATOMWIDE LTD.",
+       [3]byte{0, 64, 225}:    "MARNER INTERNATIONAL, INC.",
+       [3]byte{0, 64, 226}:    "MESA RIDGE TECHNOLOGIES, INC.",
+       [3]byte{0, 64, 227}:    "QUIN SYSTEMS LTD",
+       [3]byte{0, 64, 228}:    "E-M TECHNOLOGY, INC.",
+       [3]byte{0, 64, 229}:    "SYBUS CORPORATION",
+       [3]byte{0, 64, 230}:    "C.A.E.N.",
+       [3]byte{0, 64, 231}:    "ARNOS INSTRUMENTS & COMPUTER",
+       [3]byte{0, 64, 232}:    "CHARLES RIVER DATA SYSTEMS,INC",
+       [3]byte{0, 64, 233}:    "ACCORD SYSTEMS, INC.",
+       [3]byte{0, 64, 234}:    "PLAIN TREE SYSTEMS INC",
+       [3]byte{0, 64, 235}:    "MARTIN MARIETTA CORPORATION",
+       [3]byte{0, 64, 236}:    "MIKASA SYSTEM ENGINEERING",
+       [3]byte{0, 64, 237}:    "NETWORK CONTROLS INT'NATL INC.",
+       [3]byte{0, 64, 238}:    "OPTIMEM",
+       [3]byte{0, 64, 239}:    "HYPERCOM, INC.",
+       [3]byte{0, 64, 240}:    "MicroBrain,Inc.",
+       [3]byte{0, 64, 241}:    "CHUO ELECTRONICS CO., LTD.",
+       [3]byte{0, 64, 242}:    "JANICH & KLASS COMPUTERTECHNIK",
+       [3]byte{0, 64, 243}:    "NETCOR",
+       [3]byte{0, 64, 244}:    "CAMEO COMMUNICATIONS, INC.",
+       [3]byte{0, 64, 245}:    "OEM ENGINES",
+       [3]byte{0, 64, 246}:    "KATRON COMPUTERS INC.",
+       [3]byte{0, 64, 247}:    "Polaroid Corporation",
+       [3]byte{0, 64, 248}:    "SYSTEMHAUS DISCOM",
+       [3]byte{0, 64, 249}:    "COMBINET",
+       [3]byte{0, 64, 250}:    "MICROBOARDS, INC.",
+       [3]byte{0, 64, 251}:    "CASCADE COMMUNICATIONS",
+       [3]byte{0, 64, 252}:    "IBR COMPUTER TECHNIK GMBH",
+       [3]byte{0, 64, 253}:    "LXE",
+       [3]byte{0, 64, 254}:    "SYMPLEX COMMUNICATIONS",
+       [3]byte{0, 64, 255}:    "TELEBIT CORPORATION",
+       [3]byte{0, 65, 180}:    "Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.",
+       [3]byte{0, 65, 210}:    "Cisco Systems, Inc",
+       [3]byte{0, 66, 82}:     "RLX Technologies",
+       [3]byte{0, 66, 90}:     "Cisco Systems, Inc",
+       [3]byte{0, 66, 104}:    "Cisco Systems, Inc",
+       [3]byte{0, 67, 255}:    "KETRON S.R.L.",
+       [3]byte{0, 69, 1}:      "Versus Technology, Inc.",
+       [3]byte{0, 70, 75}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 74, 119}:    "zte corporation",
+       [3]byte{0, 75, 243}:    "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{0, 77, 50}:     "Andon Health Co.,Ltd.",
+       [3]byte{0, 80, 0}:      "NEXO COMMUNICATIONS, INC.",
+       [3]byte{0, 80, 1}:      "YAMASHITA SYSTEMS CORP.",
+       [3]byte{0, 80, 2}:      "OMNISEC AG",
+       [3]byte{0, 80, 3}:      "Xrite Inc",
+       [3]byte{0, 80, 4}:      "3COM CORPORATION",
+       [3]byte{0, 80, 6}:      "TAC AB",
+       [3]byte{0, 80, 7}:      "SIEMENS TELECOMMUNICATION SYSTEMS LIMITED",
+       [3]byte{0, 80, 8}:      "TIVA MICROCOMPUTER CORP. (TMC)",
+       [3]byte{0, 80, 9}:      "PHILIPS BROADBAND NETWORKS",
+       [3]byte{0, 80, 10}:     "IRIS TECHNOLOGIES, INC.",
+       [3]byte{0, 80, 11}:     "Cisco Systems, Inc",
+       [3]byte{0, 80, 12}:     "e-Tek Labs, Inc.",
+       [3]byte{0, 80, 13}:     "SATORI ELECTORIC CO., LTD.",
+       [3]byte{0, 80, 14}:     "CHROMATIS NETWORKS, INC.",
+       [3]byte{0, 80, 15}:     "Cisco Systems, Inc",
+       [3]byte{0, 80, 16}:     "NovaNET Learning, Inc.",
+       [3]byte{0, 80, 18}:     "CBL - GMBH",
+       [3]byte{0, 80, 19}:     "Seagate Cloud Systems Inc",
+       [3]byte{0, 80, 20}:     "Cisco Systems, Inc",
+       [3]byte{0, 80, 21}:     "BRIGHT STAR ENGINEERING",
+       [3]byte{0, 80, 22}:     "Molex Canada Ltd",
+       [3]byte{0, 80, 23}:     "RSR S.R.L.",
+       [3]byte{0, 80, 24}:     "AMIT, Inc.",
+       [3]byte{0, 80, 25}:     "SPRING TIDE NETWORKS, INC.",
+       [3]byte{0, 80, 26}:     "IQinVision",
+       [3]byte{0, 80, 27}:     "ABL CANADA, INC.",
+       [3]byte{0, 80, 28}:     "JATOM SYSTEMS, INC.",
+       [3]byte{0, 80, 30}:     "Grass Valley, A Belden Brand",
+       [3]byte{0, 80, 31}:     "MRG SYSTEMS, LTD.",
+       [3]byte{0, 80, 32}:     "MEDIASTAR CO., LTD.",
+       [3]byte{0, 80, 33}:     "EIS INTERNATIONAL, INC.",
+       [3]byte{0, 80, 34}:     "ZONET TECHNOLOGY, INC.",
+       [3]byte{0, 80, 35}:     "PG DESIGN ELECTRONICS, INC.",
+       [3]byte{0, 80, 36}:     "NAVIC SYSTEMS, INC.",
+       [3]byte{0, 80, 38}:     "COSYSTEMS, INC.",
+       [3]byte{0, 80, 39}:     "GENICOM CORPORATION",
+       [3]byte{0, 80, 40}:     "AVAL COMMUNICATIONS",
+       [3]byte{0, 80, 41}:     "1394 PRINTER WORKING GROUP",
+       [3]byte{0, 80, 42}:     "Cisco Systems, Inc",
+       [3]byte{0, 80, 43}:     "GENRAD LTD.",
+       [3]byte{0, 80, 44}:     "SOYO COMPUTER, INC.",
+       [3]byte{0, 80, 45}:     "ACCEL, INC.",
+       [3]byte{0, 80, 46}:     "CAMBEX CORPORATION",
+       [3]byte{0, 80, 47}:     "TollBridge Technologies, Inc.",
+       [3]byte{0, 80, 48}:     "FUTURE PLUS SYSTEMS",
+       [3]byte{0, 80, 49}:     "AEROFLEX LABORATORIES, INC.",
+       [3]byte{0, 80, 50}:     "PICAZO COMMUNICATIONS, INC.",
+       [3]byte{0, 80, 51}:     "MAYAN NETWORKS",
+       [3]byte{0, 80, 54}:     "NETCAM, LTD.",
+       [3]byte{0, 80, 55}:     "KOGA ELECTRONICS CO.",
+       [3]byte{0, 80, 56}:     "DAIN TELECOM CO., LTD.",
+       [3]byte{0, 80, 57}:     "MARINER NETWORKS",
+       [3]byte{0, 80, 58}:     "DATONG ELECTRONICS LTD.",
+       [3]byte{0, 80, 59}:     "MEDIAFIRE CORPORATION",
+       [3]byte{0, 80, 60}:     "TSINGHUA NOVEL ELECTRONICS",
+       [3]byte{0, 80, 62}:     "Cisco Systems, Inc",
+       [3]byte{0, 80, 63}:     "ANCHOR GAMES",
+       [3]byte{0, 80, 64}:     "Panasonic Electric Works Co., Ltd.",
+       [3]byte{0, 80, 65}:     "Coretronic Corporation",
+       [3]byte{0, 80, 66}:     "SCI MANUFACTURING SINGAPORE PTE, LTD.",
+       [3]byte{0, 80, 67}:     "MARVELL SEMICONDUCTOR, INC.",
+       [3]byte{0, 80, 68}:     "ASACA CORPORATION",
+       [3]byte{0, 80, 69}:     "RIOWORKS SOLUTIONS, INC.",
+       [3]byte{0, 80, 70}:     "MENICX INTERNATIONAL CO., LTD.",
+       [3]byte{0, 80, 71}:     "Private",
+       [3]byte{0, 80, 72}:     "INFOLIBRIA",
+       [3]byte{0, 80, 73}:     "Arbor Networks Inc",
+       [3]byte{0, 80, 74}:     "ELTECO A.S.",
+       [3]byte{0, 80, 75}:     "BARCONET N.V.",
+       [3]byte{0, 80, 76}:     "Galil Motion Control",
+       [3]byte{0, 80, 77}:     "Tokyo Electron Device Limited",
+       [3]byte{0, 80, 78}:     "SIERRA MONITOR CORP.",
+       [3]byte{0, 80, 79}:     "OLENCOM ELECTRONICS",
+       [3]byte{0, 80, 80}:     "Cisco Systems, Inc",
+       [3]byte{0, 80, 81}:     "IWATSU ELECTRIC CO., LTD.",
+       [3]byte{0, 80, 82}:     "TIARA NETWORKS, INC.",
+       [3]byte{0, 80, 83}:     "Cisco Systems, Inc",
+       [3]byte{0, 80, 84}:     "Cisco Systems, Inc",
+       [3]byte{0, 80, 85}:     "DOMS A/S",
+       [3]byte{0, 80, 86}:     "VMware, Inc.",
+       [3]byte{0, 80, 87}:     "BROADBAND ACCESS SYSTEMS",
+       [3]byte{0, 80, 88}:     "Sangoma Technologies",
+       [3]byte{0, 80, 89}:     "iBAHN",
+       [3]byte{0, 80, 90}:     "NETWORK ALCHEMY, INC.",
+       [3]byte{0, 80, 91}:     "KAWASAKI LSI U.S.A., INC.",
+       [3]byte{0, 80, 92}:     "TUNDO CORPORATION",
+       [3]byte{0, 80, 94}:     "DIGITEK MICROLOGIC S.A.",
+       [3]byte{0, 80, 95}:     "BRAND INNOVATORS",
+       [3]byte{0, 80, 96}:     "TANDBERG TELECOM AS",
+       [3]byte{0, 80, 98}:     "KOUWELL ELECTRONICS CORP.  **",
+       [3]byte{0, 80, 99}:     "OY COMSEL SYSTEM AB",
+       [3]byte{0, 80, 100}:    "CAE ELECTRONICS",
+       [3]byte{0, 80, 101}:    "TDK-Lambda Corporation",
+       [3]byte{0, 80, 102}:    "AtecoM GmbH advanced telecomunication modules",
+       [3]byte{0, 80, 103}:    "AEROCOMM, INC.",
+       [3]byte{0, 80, 104}:    "ELECTRONIC INDUSTRIES ASSOCIATION",
+       [3]byte{0, 80, 105}:    "PixStream Incorporated",
+       [3]byte{0, 80, 106}:    "EDEVA, INC.",
+       [3]byte{0, 80, 107}:    "SPX-ATEG",
+       [3]byte{0, 80, 108}:    "Beijer Electronics Products AB",
+       [3]byte{0, 80, 109}:    "VIDEOJET SYSTEMS",
+       [3]byte{0, 80, 110}:    "CORDER ENGINEERING CORPORATION",
+       [3]byte{0, 80, 111}:    "G-CONNECT",
+       [3]byte{0, 80, 112}:    "CHAINTECH COMPUTER CO., LTD.",
+       [3]byte{0, 80, 113}:    "AIWA CO., LTD.",
+       [3]byte{0, 80, 114}:    "CORVIS CORPORATION",
+       [3]byte{0, 80, 115}:    "Cisco Systems, Inc",
+       [3]byte{0, 80, 116}:    "ADVANCED HI-TECH CORP.",
+       [3]byte{0, 80, 117}:    "KESTREL SOLUTIONS",
+       [3]byte{0, 80, 118}:    "IBM Corp",
+       [3]byte{0, 80, 119}:    "PROLIFIC TECHNOLOGY, INC.",
+       [3]byte{0, 80, 120}:    "MEGATON HOUSE, LTD.",
+       [3]byte{0, 80, 121}:    "Private",
+       [3]byte{0, 80, 122}:    "XPEED, INC.",
+       [3]byte{0, 80, 123}:    "MERLOT COMMUNICATIONS",
+       [3]byte{0, 80, 124}:    "VIDEOCON AG",
+       [3]byte{0, 80, 125}:    "IFP",
+       [3]byte{0, 80, 126}:    "NEWER TECHNOLOGY",
+       [3]byte{0, 80, 127}:    "DrayTek Corp.",
+       [3]byte{0, 80, 128}:    "Cisco Systems, Inc",
+       [3]byte{0, 80, 129}:    "MURATA MACHINERY, LTD.",
+       [3]byte{0, 80, 130}:    "FORESSON CORPORATION",
+       [3]byte{0, 80, 131}:    "GILBARCO, INC.",
+       [3]byte{0, 80, 132}:    "ATL PRODUCTS",
+       [3]byte{0, 80, 134}:    "TELKOM SA, LTD.",
+       [3]byte{0, 80, 135}:    "TERASAKI ELECTRIC CO., LTD.",
+       [3]byte{0, 80, 136}:    "AMANO CORPORATION",
+       [3]byte{0, 80, 137}:    "SAFETY MANAGEMENT SYSTEMS",
+       [3]byte{0, 80, 139}:    "Hewlett Packard",
+       [3]byte{0, 80, 140}:    "RSI SYSTEMS",
+       [3]byte{0, 80, 141}:    "ABIT COMPUTER CORPORATION",
+       [3]byte{0, 80, 142}:    "OPTIMATION, INC.",
+       [3]byte{0, 80, 143}:    "ASITA TECHNOLOGIES INT'L LTD.",
+       [3]byte{0, 80, 144}:    "DCTRI",
+       [3]byte{0, 80, 145}:    "NETACCESS, INC.",
+       [3]byte{0, 80, 146}:    "Rigaku Corporation Osaka Plant",
+       [3]byte{0, 80, 147}:    "BOEING",
+       [3]byte{0, 80, 148}:    "ARRIS Group, Inc.",
+       [3]byte{0, 80, 149}:    "PERACOM NETWORKS",
+       [3]byte{0, 80, 150}:    "SALIX TECHNOLOGIES, INC.",
+       [3]byte{0, 80, 151}:    "MMC-EMBEDDED COMPUTERTECHNIK GmbH",
+       [3]byte{0, 80, 152}:    "GLOBALOOP, LTD.",
+       [3]byte{0, 80, 153}:    "3COM EUROPE, LTD.",
+       [3]byte{0, 80, 154}:    "TAG ELECTRONIC SYSTEMS",
+       [3]byte{0, 80, 155}:    "SWITCHCORE AB",
+       [3]byte{0, 80, 156}:    "BETA RESEARCH",
+       [3]byte{0, 80, 157}:    "THE INDUSTREE B.V.",
+       [3]byte{0, 80, 158}:    "Les Technologies SoftAcoustik Inc.",
+       [3]byte{0, 80, 159}:    "HORIZON COMPUTER",
+       [3]byte{0, 80, 160}:    "DELTA COMPUTER SYSTEMS, INC.",
+       [3]byte{0, 80, 161}:    "CARLO GAVAZZI, INC.",
+       [3]byte{0, 80, 162}:    "Cisco Systems, Inc",
+       [3]byte{0, 80, 163}:    "TransMedia Communications, Inc.",
+       [3]byte{0, 80, 164}:    "IO TECH, INC.",
+       [3]byte{0, 80, 165}:    "CAPITOL BUSINESS SYSTEMS, LTD.",
+       [3]byte{0, 80, 166}:    "OPTRONICS",
+       [3]byte{0, 80, 167}:    "Cisco Systems, Inc",
+       [3]byte{0, 80, 168}:    "OpenCon Systems, Inc.",
+       [3]byte{0, 80, 169}:    "MOLDAT WIRELESS TECHNOLGIES",
+       [3]byte{0, 80, 170}:    "KONICA MINOLTA HOLDINGS, INC.",
+       [3]byte{0, 80, 171}:    "NALTEC, Inc.",
+       [3]byte{0, 80, 172}:    "MAPLE COMPUTER CORPORATION",
+       [3]byte{0, 80, 173}:    "CommUnique Wireless Corp.",
+       [3]byte{0, 80, 174}:    "FDK Co., Ltd",
+       [3]byte{0, 80, 175}:    "INTERGON, INC.",
+       [3]byte{0, 80, 176}:    "TECHNOLOGY ATLANTA CORPORATION",
+       [3]byte{0, 80, 177}:    "GIDDINGS & LEWIS",
+       [3]byte{0, 80, 178}:    "BRODEL GmbH",
+       [3]byte{0, 80, 179}:    "VOICEBOARD CORPORATION",
+       [3]byte{0, 80, 180}:    "SATCHWELL CONTROL SYSTEMS, LTD",
+       [3]byte{0, 80, 181}:    "FICHET SECURITE ELECTRONIQUE",
+       [3]byte{0, 80, 182}:    "GOOD WAY IND. CO., LTD.",
+       [3]byte{0, 80, 183}:    "BOSER TECHNOLOGY CO., LTD.",
+       [3]byte{0, 80, 184}:    "INOVA COMPUTERS GMBH & CO. KG",
+       [3]byte{0, 80, 185}:    "XITRON TECHNOLOGIES, INC.",
+       [3]byte{0, 80, 186}:    "D-Link Corporation",
+       [3]byte{0, 80, 187}:    "CMS TECHNOLOGIES",
+       [3]byte{0, 80, 188}:    "HAMMER STORAGE SOLUTIONS",
+       [3]byte{0, 80, 189}:    "Cisco Systems, Inc",
+       [3]byte{0, 80, 190}:    "FAST MULTIMEDIA AG",
+       [3]byte{0, 80, 191}:    "Metalligence Technology Corp.",
+       [3]byte{0, 80, 192}:    "GATAN, INC.",
+       [3]byte{0, 80, 193}:    "GEMFLEX NETWORKS, LTD.",
+       [3]byte{0, 80, 194}:    "IEEE Registration Authority",
+       [3]byte{0, 80, 196}:    "IMD",
+       [3]byte{0, 80, 197}:    "ADS Technologies, Inc",
+       [3]byte{0, 80, 198}:    "LOOP TELECOMMUNICATION INTERNATIONAL, INC.",
+       [3]byte{0, 80, 199}:    "Private",
+       [3]byte{0, 80, 200}:    "Addonics Technologies, Inc.",
+       [3]byte{0, 80, 201}:    "MASPRO DENKOH CORP.",
+       [3]byte{0, 80, 202}:    "NET TO NET TECHNOLOGIES",
+       [3]byte{0, 80, 203}:    "JETTER",
+       [3]byte{0, 80, 204}:    "Seagate Cloud Systems Inc",
+       [3]byte{0, 80, 205}:    "DIGIANSWER A/S",
+       [3]byte{0, 80, 206}:    "LG INTERNATIONAL CORP.",
+       [3]byte{0, 80, 207}:    "VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE",
+       [3]byte{0, 80, 208}:    "MINERVA SYSTEMS",
+       [3]byte{0, 80, 209}:    "Cisco Systems, Inc",
+       [3]byte{0, 80, 210}:    "CMC Electronics Inc",
+       [3]byte{0, 80, 211}:    "DIGITAL AUDIO PROCESSING PTY. LTD.",
+       [3]byte{0, 80, 212}:    "JOOHONG INFORMATION &",
+       [3]byte{0, 80, 213}:    "AD SYSTEMS CORP.",
+       [3]byte{0, 80, 214}:    "ATLAS COPCO TOOLS AB",
+       [3]byte{0, 80, 215}:    "TELSTRAT",
+       [3]byte{0, 80, 216}:    "UNICORN COMPUTER CORP.",
+       [3]byte{0, 80, 217}:    "ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA",
+       [3]byte{0, 80, 218}:    "3COM CORPORATION",
+       [3]byte{0, 80, 219}:    "CONTEMPORARY CONTROL",
+       [3]byte{0, 80, 220}:    "TAS TELEFONBAU A. SCHWABE GMBH & CO. KG",
+       [3]byte{0, 80, 221}:    "SERRA SOLDADURA, S.A.",
+       [3]byte{0, 80, 222}:    "SIGNUM SYSTEMS CORP.",
+       [3]byte{0, 80, 223}:    "AirFiber, Inc.",
+       [3]byte{0, 80, 225}:    "NS TECH ELECTRONICS SDN BHD",
+       [3]byte{0, 80, 226}:    "Cisco Systems, Inc",
+       [3]byte{0, 80, 227}:    "ARRIS Group, Inc.",
+       [3]byte{0, 80, 228}:    "Apple, Inc.",
+       [3]byte{0, 80, 230}:    "HAKUSAN CORPORATION",
+       [3]byte{0, 80, 231}:    "PARADISE INNOVATIONS (ASIA)",
+       [3]byte{0, 80, 232}:    "NOMADIX INC.",
+       [3]byte{0, 80, 234}:    "XEL COMMUNICATIONS, INC.",
+       [3]byte{0, 80, 235}:    "ALPHA-TOP CORPORATION",
+       [3]byte{0, 80, 236}:    "OLICOM A/S",
+       [3]byte{0, 80, 237}:    "ANDA NETWORKS",
+       [3]byte{0, 80, 238}:    "TEK DIGITEL CORPORATION",
+       [3]byte{0, 80, 239}:    "SPE Systemhaus GmbH",
+       [3]byte{0, 80, 240}:    "Cisco Systems, Inc",
+       [3]byte{0, 80, 241}:    "Intel Corporation",
+       [3]byte{0, 80, 242}:    "MICROSOFT CORP.",
+       [3]byte{0, 80, 243}:    "GLOBAL NET INFORMATION CO., Ltd.",
+       [3]byte{0, 80, 244}:    "SIGMATEK GMBH & CO. KG",
+       [3]byte{0, 80, 246}:    "PAN-INTERNATIONAL INDUSTRIAL CORP.",
+       [3]byte{0, 80, 247}:    "VENTURE MANUFACTURING (SINGAPORE) LTD.",
+       [3]byte{0, 80, 248}:    "ENTREGA TECHNOLOGIES, INC.",
+       [3]byte{0, 80, 249}:    "Sensormatic Electronics LLC",
+       [3]byte{0, 80, 250}:    "OXTEL, LTD.",
+       [3]byte{0, 80, 251}:    "VSK ELECTRONICS",
+       [3]byte{0, 80, 252}:    "Edimax Technology Co. Ltd.",
+       [3]byte{0, 80, 253}:    "VISIONCOMM CO., LTD.",
+       [3]byte{0, 80, 254}:    "PCTVnet ASA",
+       [3]byte{0, 80, 255}:    "HAKKO ELECTRONICS CO., LTD.",
+       [3]byte{0, 82, 24}:     "Wuxi Keboda Electron Co.Ltd",
+       [3]byte{0, 84, 159}:    "Avaya Inc",
+       [3]byte{0, 84, 175}:    "Continental Automotive Systems Inc.",
+       [3]byte{0, 84, 189}:    "Swelaser AB",
+       [3]byte{0, 85, 218}:    "IEEE Registration Authority",
+       [3]byte{0, 86, 43}:     "Cisco Systems, Inc",
+       [3]byte{0, 86, 205}:    "Apple, Inc.",
+       [3]byte{0, 87, 210}:    "Cisco Systems, Inc",
+       [3]byte{0, 89, 7}:      "LenovoEMC Products USA, LLC",
+       [3]byte{0, 89, 121}:    "Networked Energy Services",
+       [3]byte{0, 89, 172}:    "KPN. B.V.",
+       [3]byte{0, 89, 220}:    "Cisco Systems, Inc",
+       [3]byte{0, 90, 19}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 90, 57}:     "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 91, 161}:    "shanghai huayuan chuangxin software CO., LTD.",
+       [3]byte{0, 92, 134}:    "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 92, 177}:    "Gospell DIGITAL TECHNOLOGY CO., LTD",
+       [3]byte{0, 93, 3}:      "Xilinx, Inc",
+       [3]byte{0, 93, 115}:    "Cisco Systems, Inc",
+       [3]byte{0, 95, 134}:    "Cisco Systems, Inc",
+       [3]byte{0, 96, 0}:      "XYCOM INC.",
+       [3]byte{0, 96, 1}:      "InnoSys, Inc.",
+       [3]byte{0, 96, 2}:      "SCREEN SUBTITLING SYSTEMS, LTD",
+       [3]byte{0, 96, 3}:      "TERAOKA WEIGH SYSTEM PTE, LTD.",
+       [3]byte{0, 96, 4}:      "COMPUTADORES MODULARES SA",
+       [3]byte{0, 96, 5}:      "FEEDBACK DATA LTD.",
+       [3]byte{0, 96, 6}:      "SOTEC CO., LTD",
+       [3]byte{0, 96, 7}:      "ACRES GAMING, INC.",
+       [3]byte{0, 96, 8}:      "3COM CORPORATION",
+       [3]byte{0, 96, 9}:      "Cisco Systems, Inc",
+       [3]byte{0, 96, 10}:     "SORD COMPUTER CORPORATION",
+       [3]byte{0, 96, 11}:     "LOGWARE GmbH",
+       [3]byte{0, 96, 12}:     "Eurotech Inc.",
+       [3]byte{0, 96, 13}:     "Digital Logic GmbH",
+       [3]byte{0, 96, 14}:     "WAVENET INTERNATIONAL, INC.",
+       [3]byte{0, 96, 15}:     "Westell Technologies Inc.",
+       [3]byte{0, 96, 16}:     "NETWORK MACHINES, INC.",
+       [3]byte{0, 96, 17}:     "CRYSTAL SEMICONDUCTOR CORP.",
+       [3]byte{0, 96, 18}:     "POWER COMPUTING CORPORATION",
+       [3]byte{0, 96, 19}:     "NETSTAL MASCHINEN AG",
+       [3]byte{0, 96, 20}:     "EDEC CO., LTD.",
+       [3]byte{0, 96, 21}:     "NET2NET CORPORATION",
+       [3]byte{0, 96, 22}:     "CLARIION",
+       [3]byte{0, 96, 23}:     "TOKIMEC INC.",
+       [3]byte{0, 96, 24}:     "STELLAR ONE CORPORATION",
+       [3]byte{0, 96, 25}:     "Roche Diagnostics",
+       [3]byte{0, 96, 26}:     "KEITHLEY INSTRUMENTS",
+       [3]byte{0, 96, 27}:     "MESA ELECTRONICS",
+       [3]byte{0, 96, 28}:     "TELXON CORPORATION",
+       [3]byte{0, 96, 29}:     "LUCENT TECHNOLOGIES",
+       [3]byte{0, 96, 30}:     "SOFTLAB, INC.",
+       [3]byte{0, 96, 31}:     "STALLION TECHNOLOGIES",
+       [3]byte{0, 96, 32}:     "PIVOTAL NETWORKING, INC.",
+       [3]byte{0, 96, 33}:     "DSC CORPORATION",
+       [3]byte{0, 96, 34}:     "VICOM SYSTEMS, INC.",
+       [3]byte{0, 96, 35}:     "PERICOM SEMICONDUCTOR CORP.",
+       [3]byte{0, 96, 36}:     "GRADIENT TECHNOLOGIES, INC.",
+       [3]byte{0, 96, 37}:     "ACTIVE IMAGING PLC",
+       [3]byte{0, 96, 38}:     "VIKING Modular Solutions",
+       [3]byte{0, 96, 39}:     "Superior Modular Products",
+       [3]byte{0, 96, 40}:     "MACROVISION CORPORATION",
+       [3]byte{0, 96, 41}:     "CARY PERIPHERALS INC.",
+       [3]byte{0, 96, 42}:     "SYMICRON COMPUTER COMMUNICATIONS, LTD.",
+       [3]byte{0, 96, 43}:     "PEAK AUDIO",
+       [3]byte{0, 96, 44}:     "LINX Data Terminals, Inc.",
+       [3]byte{0, 96, 45}:     "ALERTON TECHNOLOGIES, INC.",
+       [3]byte{0, 96, 46}:     "CYCLADES CORPORATION",
+       [3]byte{0, 96, 47}:     "Cisco Systems, Inc",
+       [3]byte{0, 96, 48}:     "VILLAGE TRONIC ENTWICKLUNG",
+       [3]byte{0, 96, 49}:     "HRK SYSTEMS",
+       [3]byte{0, 96, 50}:     "I-CUBE, INC.",
+       [3]byte{0, 96, 51}:     "ACUITY IMAGING, INC.",
+       [3]byte{0, 96, 52}:     "ROBERT BOSCH GmbH",
+       [3]byte{0, 96, 53}:     "DALLAS SEMICONDUCTOR, INC.",
+       [3]byte{0, 96, 54}:     "AIT Austrian Institute of Technology GmbH",
+       [3]byte{0, 96, 55}:     "NXP Semiconductors",
+       [3]byte{0, 96, 56}:     "Nortel Networks",
+       [3]byte{0, 96, 57}:     "SanCom Technology, Inc.",
+       [3]byte{0, 96, 58}:     "QUICK CONTROLS LTD.",
+       [3]byte{0, 96, 59}:     "AMTEC spa",
+       [3]byte{0, 96, 60}:     "HAGIWARA SYS-COM CO., LTD.",
+       [3]byte{0, 96, 61}:     "3CX",
+       [3]byte{0, 96, 62}:     "Cisco Systems, Inc",
+       [3]byte{0, 96, 63}:     "PATAPSCO DESIGNS",
+       [3]byte{0, 96, 64}:     "NETRO CORP.",
+       [3]byte{0, 96, 65}:     "Yokogawa Digital Computer Corporation",
+       [3]byte{0, 96, 66}:     "TKS (USA), INC.",
+       [3]byte{0, 96, 67}:     "iDirect, INC.",
+       [3]byte{0, 96, 68}:     "LITTON/POLY-SCIENTIFIC",
+       [3]byte{0, 96, 69}:     "PATHLIGHT TECHNOLOGIES",
+       [3]byte{0, 96, 70}:     "VMETRO, INC.",
+       [3]byte{0, 96, 71}:     "Cisco Systems, Inc",
+       [3]byte{0, 96, 72}:     "Dell EMC",
+       [3]byte{0, 96, 73}:     "VINA TECHNOLOGIES",
+       [3]byte{0, 96, 74}:     "SAIC IDEAS GROUP",
+       [3]byte{0, 96, 75}:     "Safe-com GmbH & Co. KG",
+       [3]byte{0, 96, 76}:     "Sagemcom Broadband SAS",
+       [3]byte{0, 96, 77}:     "MMC NETWORKS, INC.",
+       [3]byte{0, 96, 78}:     "CYCLE COMPUTER CORPORATION, INC.",
+       [3]byte{0, 96, 79}:     "Tattile SRL",
+       [3]byte{0, 96, 80}:     "INTERNIX INC.",
+       [3]byte{0, 96, 81}:     "QUALITY SEMICONDUCTOR",
+       [3]byte{0, 96, 82}:     "PERIPHERALS ENTERPRISE CO., Ltd.",
+       [3]byte{0, 96, 83}:     "TOYODA MACHINE WORKS, LTD.",
+       [3]byte{0, 96, 84}:     "CONTROLWARE GMBH",
+       [3]byte{0, 96, 85}:     "CORNELL UNIVERSITY",
+       [3]byte{0, 96, 86}:     "NETWORK TOOLS, INC.",
+       [3]byte{0, 96, 87}:     "Murata Manufacturing Co., Ltd.",
+       [3]byte{0, 96, 88}:     "COPPER MOUNTAIN COMMUNICATIONS, INC.",
+       [3]byte{0, 96, 89}:     "TECHNICAL COMMUNICATIONS CORP.",
+       [3]byte{0, 96, 90}:     "CELCORE, INC.",
+       [3]byte{0, 96, 91}:     "IntraServer Technology, Inc.",
+       [3]byte{0, 96, 92}:     "Cisco Systems, Inc",
+       [3]byte{0, 96, 93}:     "SCANIVALVE CORP.",
+       [3]byte{0, 96, 94}:     "LIBERTY TECHNOLOGY NETWORKING",
+       [3]byte{0, 96, 95}:     "NIPPON UNISOFT CORPORATION",
+       [3]byte{0, 96, 96}:     "Data Innovations North America",
+       [3]byte{0, 96, 97}:     "WHISTLE COMMUNICATIONS CORP.",
+       [3]byte{0, 96, 98}:     "TELESYNC, INC.",
+       [3]byte{0, 96, 99}:     "PSION DACOM PLC.",
+       [3]byte{0, 96, 100}:    "NETCOMM LIMITED",
+       [3]byte{0, 96, 101}:    "BERNECKER & RAINER INDUSTRIE-ELEKTRONIC GmbH",
+       [3]byte{0, 96, 102}:    "LACROIX Trafic",
+       [3]byte{0, 96, 103}:    "ACER NETXUS INC.",
+       [3]byte{0, 96, 104}:    "Dialogic Corporation",
+       [3]byte{0, 96, 105}:    "Brocade Communications Systems, Inc.",
+       [3]byte{0, 96, 106}:    "MITSUBISHI WIRELESS COMMUNICATIONS. INC.",
+       [3]byte{0, 96, 107}:    "Synclayer Inc.",
+       [3]byte{0, 96, 108}:    "ARESCOM",
+       [3]byte{0, 96, 109}:    "DIGITAL EQUIPMENT CORP.",
+       [3]byte{0, 96, 110}:    "DAVICOM SEMICONDUCTOR, INC.",
+       [3]byte{0, 96, 111}:    "CLARION CORPORATION OF AMERICA",
+       [3]byte{0, 96, 112}:    "Cisco Systems, Inc",
+       [3]byte{0, 96, 113}:    "MIDAS LAB, INC.",
+       [3]byte{0, 96, 114}:    "VXL INSTRUMENTS, LIMITED",
+       [3]byte{0, 96, 115}:    "REDCREEK COMMUNICATIONS, INC.",
+       [3]byte{0, 96, 116}:    "QSC LLC",
+       [3]byte{0, 96, 117}:    "PENTEK, INC.",
+       [3]byte{0, 96, 118}:    "SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS",
+       [3]byte{0, 96, 119}:    "PRISA NETWORKS",
+       [3]byte{0, 96, 120}:    "POWER MEASUREMENT LTD.",
+       [3]byte{0, 96, 121}:    "Mainstream Data, Inc.",
+       [3]byte{0, 96, 122}:    "DVS GMBH",
+       [3]byte{0, 96, 123}:    "FORE SYSTEMS, INC.",
+       [3]byte{0, 96, 124}:    "WaveAccess, Ltd.",
+       [3]byte{0, 96, 125}:    "SENTIENT NETWORKS INC.",
+       [3]byte{0, 96, 126}:    "GIGALABS, INC.",
+       [3]byte{0, 96, 127}:    "AURORA TECHNOLOGIES, INC.",
+       [3]byte{0, 96, 128}:    "MICROTRONIX DATACOM LTD.",
+       [3]byte{0, 96, 129}:    "TV/COM INTERNATIONAL",
+       [3]byte{0, 96, 130}:    "NOVALINK TECHNOLOGIES, INC.",
+       [3]byte{0, 96, 131}:    "Cisco Systems, Inc",
+       [3]byte{0, 96, 132}:    "DIGITAL VIDEO",
+       [3]byte{0, 96, 133}:    "Storage Concepts",
+       [3]byte{0, 96, 134}:    "LOGIC REPLACEMENT TECH. LTD.",
+       [3]byte{0, 96, 135}:    "KANSAI ELECTRIC CO., LTD.",
+       [3]byte{0, 96, 136}:    "Analog Devices, Inc.",
+       [3]byte{0, 96, 137}:    "XATA",
+       [3]byte{0, 96, 138}:    "CITADEL COMPUTER",
+       [3]byte{0, 96, 139}:    "ConferTech International",
+       [3]byte{0, 96, 140}:    "3COM CORPORATION",
+       [3]byte{0, 96, 141}:    "UNIPULSE CORP.",
+       [3]byte{0, 96, 142}:    "HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH",
+       [3]byte{0, 96, 143}:    "TEKRAM TECHNOLOGY CO., LTD.",
+       [3]byte{0, 96, 144}:    "Artiza Networks Inc",
+       [3]byte{0, 96, 145}:    "FIRST PACIFIC NETWORKS, INC.",
+       [3]byte{0, 96, 146}:    "MICRO/SYS, INC.",
+       [3]byte{0, 96, 147}:    "VARIAN",
+       [3]byte{0, 96, 148}:    "IBM Corp",
+       [3]byte{0, 96, 149}:    "ACCU-TIME SYSTEMS, INC.",
+       [3]byte{0, 96, 150}:    "T.S. MICROTECH INC.",
+       [3]byte{0, 96, 151}:    "3COM CORPORATION",
+       [3]byte{0, 96, 152}:    "HT COMMUNICATIONS",
+       [3]byte{0, 96, 153}:    "SBE, Inc.",
+       [3]byte{0, 96, 154}:    "NJK TECHNO CO.",
+       [3]byte{0, 96, 155}:    "AstroNova, Inc",
+       [3]byte{0, 96, 156}:    "Perkin-Elmer Incorporated",
+       [3]byte{0, 96, 157}:    "PMI FOOD EQUIPMENT GROUP",
+       [3]byte{0, 96, 158}:    "ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS",
+       [3]byte{0, 96, 159}:    "PHAST CORPORATION",
+       [3]byte{0, 96, 160}:    "SWITCHED NETWORK TECHNOLOGIES, INC.",
+       [3]byte{0, 96, 161}:    "VPNet, Inc.",
+       [3]byte{0, 96, 162}:    "NIHON UNISYS LIMITED CO.",
+       [3]byte{0, 96, 163}:    "CONTINUUM TECHNOLOGY CORP.",
+       [3]byte{0, 96, 164}:    "GEW Technologies (PTY)Ltd",
+       [3]byte{0, 96, 165}:    "PERFORMANCE TELECOM CORP.",
+       [3]byte{0, 96, 166}:    "PARTICLE MEASURING SYSTEMS",
+       [3]byte{0, 96, 167}:    "MICROSENS GmbH & CO. KG",
+       [3]byte{0, 96, 168}:    "TIDOMAT AB",
+       [3]byte{0, 96, 169}:    "GESYTEC MBH",
+       [3]byte{0, 96, 170}:    "INTELLIGENT DEVICES INC. (IDI)",
+       [3]byte{0, 96, 171}:    "LARSCOM INCORPORATED",
+       [3]byte{0, 96, 172}:    "RESILIENCE CORPORATION",
+       [3]byte{0, 96, 173}:    "MegaChips Corporation",
+       [3]byte{0, 96, 174}:    "TRIO INFORMATION SYSTEMS AB",
+       [3]byte{0, 96, 175}:    "PACIFIC MICRO DATA, INC.",
+       [3]byte{0, 96, 176}:    "Hewlett Packard",
+       [3]byte{0, 96, 177}:    "Input/Output, Inc.",
+       [3]byte{0, 96, 178}:    "PROCESS CONTROL CORP.",
+       [3]byte{0, 96, 179}:    "Z-COM, INC.",
+       [3]byte{0, 96, 180}:    "GLENAYRE R&D INC.",
+       [3]byte{0, 96, 181}:    "KEBA GmbH",
+       [3]byte{0, 96, 182}:    "LAND COMPUTER CO., LTD.",
+       [3]byte{0, 96, 183}:    "CHANNELMATIC, INC.",
+       [3]byte{0, 96, 184}:    "CORELIS Inc.",
+       [3]byte{0, 96, 185}:    "NEC Platforms, Ltd",
+       [3]byte{0, 96, 186}:    "SAHARA NETWORKS, INC.",
+       [3]byte{0, 96, 187}:    "Cabletron Systems, Inc.",
+       [3]byte{0, 96, 188}:    "KeunYoung Electronics & Communication Co., Ltd.",
+       [3]byte{0, 96, 189}:    "Enginuity Communications",
+       [3]byte{0, 96, 190}:    "WEBTRONICS",
+       [3]byte{0, 96, 191}:    "MACRAIGOR SYSTEMS, INC.",
+       [3]byte{0, 96, 192}:    "Nera Networks AS",
+       [3]byte{0, 96, 193}:    "WaveSpan Corporation",
+       [3]byte{0, 96, 194}:    "MPL AG",
+       [3]byte{0, 96, 195}:    "NETVISION CORPORATION",
+       [3]byte{0, 96, 196}:    "SOLITON SYSTEMS K.K.",
+       [3]byte{0, 96, 197}:    "ANCOT CORP.",
+       [3]byte{0, 96, 198}:    "DCS AG",
+       [3]byte{0, 96, 199}:    "AMATI COMMUNICATIONS CORP.",
+       [3]byte{0, 96, 200}:    "KUKA WELDING SYSTEMS & ROBOTS",
+       [3]byte{0, 96, 201}:    "ControlNet, Inc.",
+       [3]byte{0, 96, 202}:    "HARMONIC SYSTEMS INCORPORATED",
+       [3]byte{0, 96, 203}:    "HITACHI ZOSEN CORPORATION",
+       [3]byte{0, 96, 204}:    "EMTRAK, INCORPORATED",
+       [3]byte{0, 96, 205}:    "VideoServer, Inc.",
+       [3]byte{0, 96, 206}:    "ACCLAIM COMMUNICATIONS",
+       [3]byte{0, 96, 207}:    "ALTEON NETWORKS, INC.",
+       [3]byte{0, 96, 208}:    "SNMP RESEARCH INCORPORATED",
+       [3]byte{0, 96, 209}:    "CASCADE COMMUNICATIONS",
+       [3]byte{0, 96, 210}:    "LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD.",
+       [3]byte{0, 96, 211}:    "AT&T",
+       [3]byte{0, 96, 212}:    "ELDAT COMMUNICATION LTD.",
+       [3]byte{0, 96, 213}:    "AMADA MIYACHI Co., Ltd",
+       [3]byte{0, 96, 214}:    "NovAtel Inc.",
+       [3]byte{0, 96, 215}:    "ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL)",
+       [3]byte{0, 96, 216}:    "ELMIC SYSTEMS, INC.",
+       [3]byte{0, 96, 217}:    "TRANSYS NETWORKS INC.",
+       [3]byte{0, 96, 218}:    "Red Lion Controls, LP",
+       [3]byte{0, 96, 219}:    "NTP ELEKTRONIK A/S",
+       [3]byte{0, 96, 220}:    "NEC Magnus Communications,Ltd.",
+       [3]byte{0, 96, 221}:    "MYRICOM, INC.",
+       [3]byte{0, 96, 222}:    "Kayser-Threde GmbH",
+       [3]byte{0, 96, 223}:    "Brocade Communications Systems, Inc.",
+       [3]byte{0, 96, 224}:    "AXIOM TECHNOLOGY CO., LTD.",
+       [3]byte{0, 96, 225}:    "ORCKIT COMMUNICATIONS LTD.",
+       [3]byte{0, 96, 226}:    "QUEST ENGINEERING & DEVELOPMENT",
+       [3]byte{0, 96, 227}:    "ARBIN INSTRUMENTS",
+       [3]byte{0, 96, 228}:    "COMPUSERVE, INC.",
+       [3]byte{0, 96, 229}:    "FUJI AUTOMATION CO., LTD.",
+       [3]byte{0, 96, 230}:    "SHOMITI SYSTEMS INCORPORATED",
+       [3]byte{0, 96, 231}:    "RANDATA",
+       [3]byte{0, 96, 232}:    "HITACHI COMPUTER PRODUCTS (AMERICA), INC.",
+       [3]byte{0, 96, 233}:    "ATOP TECHNOLOGIES, INC.",
+       [3]byte{0, 96, 234}:    "StreamLogic",
+       [3]byte{0, 96, 235}:    "FOURTHTRACK SYSTEMS",
+       [3]byte{0, 96, 236}:    "HERMARY OPTO ELECTRONICS INC.",
+       [3]byte{0, 96, 237}:    "RICARDO TEST AUTOMATION LTD.",
+       [3]byte{0, 96, 238}:    "APOLLO",
+       [3]byte{0, 96, 239}:    "FLYTECH TECHNOLOGY CO., LTD.",
+       [3]byte{0, 96, 240}:    "JOHNSON & JOHNSON MEDICAL, INC",
+       [3]byte{0, 96, 241}:    "EXP COMPUTER, INC.",
+       [3]byte{0, 96, 242}:    "LASERGRAPHICS, INC.",
+       [3]byte{0, 96, 243}:    "Performance Analysis Broadband, Spirent plc",
+       [3]byte{0, 96, 244}:    "ADVANCED COMPUTER SOLUTIONS, Inc.",
+       [3]byte{0, 96, 245}:    "ICON WEST, INC.",
+       [3]byte{0, 96, 246}:    "NEXTEST COMMUNICATIONS PRODUCTS, INC.",
+       [3]byte{0, 96, 247}:    "DATAFUSION SYSTEMS",
+       [3]byte{0, 96, 248}:    "Loran International Technologies Inc.",
+       [3]byte{0, 96, 249}:    "DIAMOND LANE COMMUNICATIONS",
+       [3]byte{0, 96, 250}:    "EDUCATIONAL TECHNOLOGY RESOURCES, INC.",
+       [3]byte{0, 96, 251}:    "PACKETEER, INC.",
+       [3]byte{0, 96, 252}:    "CONSERVATION THROUGH INNOVATION LTD.",
+       [3]byte{0, 96, 253}:    "NetICs, Inc.",
+       [3]byte{0, 96, 254}:    "LYNX SYSTEM DEVELOPERS, INC.",
+       [3]byte{0, 96, 255}:    "QuVis, Inc.",
+       [3]byte{0, 97, 113}:    "Apple, Inc.",
+       [3]byte{0, 98, 236}:    "Cisco Systems, Inc",
+       [3]byte{0, 100, 64}:    "Cisco Systems, Inc",
+       [3]byte{0, 100, 166}:   "Maquet CardioVascular",
+       [3]byte{0, 102, 75}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 107, 142}:   "Shanghai Feixun Communication Co.,Ltd.",
+       [3]byte{0, 107, 158}:   "Vizio, Inc",
+       [3]byte{0, 107, 160}:   "SHENZHEN UNIVERSAL INTELLISYS PTE LTD",
+       [3]byte{0, 107, 241}:   "Cisco Systems, Inc",
+       [3]byte{0, 108, 188}:   "Cisco Systems, Inc",
+       [3]byte{0, 108, 253}:   "Sichuan Changhong Electric Ltd.",
+       [3]byte{0, 109, 82}:    "Apple, Inc.",
+       [3]byte{0, 109, 251}:   "Vutrix Technologies Ltd",
+       [3]byte{0, 111, 100}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 112, 176}:   "M/A-COM INC. COMPANIES",
+       [3]byte{0, 112, 179}:   "DATA RECALL LTD.",
+       [3]byte{0, 113, 194}:   "PEGATRON CORPORATION",
+       [3]byte{0, 113, 204}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{0, 114, 99}:    "Netcore Technology Inc.",
+       [3]byte{0, 115, 141}:   "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{0, 115, 224}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 116, 156}:   "Ruijie Networks Co.,LTD",
+       [3]byte{0, 117, 50}:    "INID BV",
+       [3]byte{0, 117, 225}:   "Ampt, LLC",
+       [3]byte{0, 118, 134}:   "Cisco Systems, Inc",
+       [3]byte{0, 118, 177}:   "Somfy-Protect By Myfox SAS",
+       [3]byte{0, 120, 136}:   "Cisco Systems, Inc",
+       [3]byte{0, 120, 158}:   "Sagemcom Broadband SAS",
+       [3]byte{0, 120, 205}:   "Ignition Design Labs",
+       [3]byte{0, 123, 24}:    "SENTRY Co., LTD.",
+       [3]byte{0, 125, 250}:   "Volkswagen Group of America",
+       [3]byte{0, 126, 86}:    "China Dragon Technology Limited",
+       [3]byte{0, 127, 40}:    "Actiontec Electronics, Inc",
+       [3]byte{0, 128, 0}:     "MULTITECH SYSTEMS, INC.",
+       [3]byte{0, 128, 1}:     "PERIPHONICS CORPORATION",
+       [3]byte{0, 128, 2}:     "SATELCOM (UK) LTD",
+       [3]byte{0, 128, 3}:     "HYTEC ELECTRONICS LTD.",
+       [3]byte{0, 128, 4}:     "ANTLOW COMMUNICATIONS, LTD.",
+       [3]byte{0, 128, 5}:     "CACTUS COMPUTER INC.",
+       [3]byte{0, 128, 6}:     "COMPUADD CORPORATION",
+       [3]byte{0, 128, 7}:     "DLOG NC-SYSTEME",
+       [3]byte{0, 128, 8}:     "DYNATECH COMPUTER SYSTEMS",
+       [3]byte{0, 128, 9}:     "JUPITER SYSTEMS, INC.",
+       [3]byte{0, 128, 10}:    "JAPAN COMPUTER CORP.",
+       [3]byte{0, 128, 11}:    "CSK CORPORATION",
+       [3]byte{0, 128, 12}:    "VIDECOM LIMITED",
+       [3]byte{0, 128, 13}:    "VOSSWINKEL F.U.",
+       [3]byte{0, 128, 14}:    "ATLANTIX CORPORATION",
+       [3]byte{0, 128, 15}:    "STANDARD MICROSYSTEMS",
+       [3]byte{0, 128, 16}:    "COMMODORE INTERNATIONAL",
+       [3]byte{0, 128, 17}:    "DIGITAL SYSTEMS INT'L. INC.",
+       [3]byte{0, 128, 18}:    "INTEGRATED MEASUREMENT SYSTEMS",
+       [3]byte{0, 128, 19}:    "THOMAS-CONRAD CORPORATION",
+       [3]byte{0, 128, 20}:    "ESPRIT SYSTEMS",
+       [3]byte{0, 128, 21}:    "SEIKO SYSTEMS, INC.",
+       [3]byte{0, 128, 22}:    "WANDEL AND GOLTERMANN",
+       [3]byte{0, 128, 23}:    "PFU LIMITED",
+       [3]byte{0, 128, 24}:    "KOBE STEEL, LTD.",
+       [3]byte{0, 128, 25}:    "DAYNA COMMUNICATIONS, INC.",
+       [3]byte{0, 128, 26}:    "BELL ATLANTIC",
+       [3]byte{0, 128, 27}:    "KODIAK TECHNOLOGY",
+       [3]byte{0, 128, 28}:    "NEWPORT SYSTEMS SOLUTIONS",
+       [3]byte{0, 128, 29}:    "INTEGRATED INFERENCE MACHINES",
+       [3]byte{0, 128, 30}:    "XINETRON, INC.",
+       [3]byte{0, 128, 31}:    "KRUPP ATLAS ELECTRONIK GMBH",
+       [3]byte{0, 128, 32}:    "NETWORK PRODUCTS",
+       [3]byte{0, 128, 33}:    "Alcatel Canada Inc.",
+       [3]byte{0, 128, 34}:    "SCAN-OPTICS",
+       [3]byte{0, 128, 35}:    "INTEGRATED BUSINESS NETWORKS",
+       [3]byte{0, 128, 36}:    "KALPANA, INC.",
+       [3]byte{0, 128, 37}:    "Telit Wireless Solutions GmbH",
+       [3]byte{0, 128, 38}:    "NETWORK PRODUCTS CORPORATION",
+       [3]byte{0, 128, 39}:    "ADAPTIVE SYSTEMS, INC.",
+       [3]byte{0, 128, 40}:    "TRADPOST (HK) LTD",
+       [3]byte{0, 128, 41}:    "EAGLE TECHNOLOGY, INC.",
+       [3]byte{0, 128, 42}:    "TEST SYSTEMS & SIMULATIONS INC",
+       [3]byte{0, 128, 43}:    "INTEGRATED MARKETING CO",
+       [3]byte{0, 128, 44}:    "THE SAGE GROUP PLC",
+       [3]byte{0, 128, 45}:    "XYLOGICS INC",
+       [3]byte{0, 128, 46}:    "CASTLE ROCK COMPUTING",
+       [3]byte{0, 128, 47}:    "NATIONAL INSTRUMENTS CORP.",
+       [3]byte{0, 128, 48}:    "NEXUS ELECTRONICS",
+       [3]byte{0, 128, 49}:    "BASYS, CORP.",
+       [3]byte{0, 128, 50}:    "ACCESS CO., LTD.",
+       [3]byte{0, 128, 51}:    "EMS Aviation, Inc.",
+       [3]byte{0, 128, 52}:    "SMT GOUPIL",
+       [3]byte{0, 128, 53}:    "TECHNOLOGY WORKS, INC.",
+       [3]byte{0, 128, 54}:    "REFLEX MANUFACTURING SYSTEMS",
+       [3]byte{0, 128, 55}:    "Ericsson Group",
+       [3]byte{0, 128, 56}:    "DATA RESEARCH & APPLICATIONS",
+       [3]byte{0, 128, 57}:    "ALCATEL STC AUSTRALIA",
+       [3]byte{0, 128, 58}:    "VARITYPER, INC.",
+       [3]byte{0, 128, 59}:    "APT COMMUNICATIONS, INC.",
+       [3]byte{0, 128, 60}:    "TVS ELECTRONICS LTD",
+       [3]byte{0, 128, 61}:    "SURIGIKEN CO.,  LTD.",
+       [3]byte{0, 128, 62}:    "SYNERNETICS",
+       [3]byte{0, 128, 63}:    "TATUNG COMPANY",
+       [3]byte{0, 128, 64}:    "JOHN FLUKE MANUFACTURING CO.",
+       [3]byte{0, 128, 65}:    "VEB KOMBINAT ROBOTRON",
+       [3]byte{0, 128, 66}:    "Artesyn Embedded Technologies",
+       [3]byte{0, 128, 67}:    "NETWORLD, INC.",
+       [3]byte{0, 128, 68}:    "SYSTECH COMPUTER CORP.",
+       [3]byte{0, 128, 69}:    "MATSUSHITA ELECTRIC IND. CO",
+       [3]byte{0, 128, 70}:    "Tattile SRL",
+       [3]byte{0, 128, 71}:    "IN-NET CORP.",
+       [3]byte{0, 128, 72}:    "COMPEX INCORPORATED",
+       [3]byte{0, 128, 73}:    "NISSIN ELECTRIC CO., LTD.",
+       [3]byte{0, 128, 74}:    "PRO-LOG",
+       [3]byte{0, 128, 75}:    "EAGLE TECHNOLOGIES PTY.LTD.",
+       [3]byte{0, 128, 76}:    "CONTEC CO., LTD.",
+       [3]byte{0, 128, 77}:    "CYCLONE MICROSYSTEMS, INC.",
+       [3]byte{0, 128, 78}:    "APEX COMPUTER COMPANY",
+       [3]byte{0, 128, 79}:    "DAIKIN INDUSTRIES, LTD.",
+       [3]byte{0, 128, 80}:    "ZIATECH CORPORATION",
+       [3]byte{0, 128, 81}:    "FIBERMUX",
+       [3]byte{0, 128, 82}:    "TECHNICALLY ELITE CONCEPTS",
+       [3]byte{0, 128, 83}:    "INTELLICOM, INC.",
+       [3]byte{0, 128, 84}:    "FRONTIER TECHNOLOGIES CORP.",
+       [3]byte{0, 128, 85}:    "FERMILAB",
+       [3]byte{0, 128, 86}:    "SPHINX Electronics GmbH & Co KG",
+       [3]byte{0, 128, 87}:    "ADSOFT, LTD.",
+       [3]byte{0, 128, 88}:    "PRINTER SYSTEMS CORP.",
+       [3]byte{0, 128, 89}:    "STANLEY ELECTRIC CO., LTD",
+       [3]byte{0, 128, 90}:    "TULIP COMPUTERS INTERNAT'L B.V",
+       [3]byte{0, 128, 91}:    "CONDOR SYSTEMS, INC.",
+       [3]byte{0, 128, 92}:    "AGILIS CORPORATION",
+       [3]byte{0, 128, 93}:    "CANSTAR",
+       [3]byte{0, 128, 94}:    "LSI LOGIC CORPORATION",
+       [3]byte{0, 128, 95}:    "Hewlett Packard",
+       [3]byte{0, 128, 96}:    "NETWORK INTERFACE CORPORATION",
+       [3]byte{0, 128, 97}:    "LITTON SYSTEMS, INC.",
+       [3]byte{0, 128, 98}:    "INTERFACE  CO.",
+       [3]byte{0, 128, 99}:    "Hirschmann Automation and Control GmbH",
+       [3]byte{0, 128, 100}:   "WYSE TECHNOLOGY LLC",
+       [3]byte{0, 128, 101}:   "CYBERGRAPHIC SYSTEMS PTY LTD.",
+       [3]byte{0, 128, 102}:   "ARCOM CONTROL SYSTEMS, LTD.",
+       [3]byte{0, 128, 103}:   "SQUARE D COMPANY",
+       [3]byte{0, 128, 104}:   "YAMATECH SCIENTIFIC LTD.",
+       [3]byte{0, 128, 105}:   "COMPUTONE SYSTEMS",
+       [3]byte{0, 128, 106}:   "ERI (EMPAC RESEARCH INC.)",
+       [3]byte{0, 128, 107}:   "SCHMID TELECOMMUNICATION",
+       [3]byte{0, 128, 108}:   "Secure Systems & Services",
+       [3]byte{0, 128, 109}:   "CENTURY SYSTEMS CORP.",
+       [3]byte{0, 128, 110}:   "NIPPON STEEL CORPORATION",
+       [3]byte{0, 128, 111}:   "ONELAN LTD.",
+       [3]byte{0, 128, 112}:   "COMPUTADORAS MICRON",
+       [3]byte{0, 128, 113}:   "SAI TECHNOLOGY",
+       [3]byte{0, 128, 114}:   "MICROPLEX SYSTEMS LTD.",
+       [3]byte{0, 128, 115}:   "DWB ASSOCIATES",
+       [3]byte{0, 128, 116}:   "FISHER CONTROLS",
+       [3]byte{0, 128, 117}:   "PARSYTEC GMBH",
+       [3]byte{0, 128, 118}:   "MCNC",
+       [3]byte{0, 128, 119}:   "Brother industries, LTD.",
+       [3]byte{0, 128, 120}:   "PRACTICAL PERIPHERALS, INC.",
+       [3]byte{0, 128, 121}:   "MICROBUS DESIGNS LTD.",
+       [3]byte{0, 128, 122}:   "AITECH SYSTEMS LTD.",
+       [3]byte{0, 128, 123}:   "ARTEL COMMUNICATIONS CORP.",
+       [3]byte{0, 128, 124}:   "FIBERCOM, INC.",
+       [3]byte{0, 128, 125}:   "EQUINOX SYSTEMS INC.",
+       [3]byte{0, 128, 126}:   "SOUTHERN PACIFIC LTD.",
+       [3]byte{0, 128, 127}:   "DY-4 INCORPORATED",
+       [3]byte{0, 128, 128}:   "DATAMEDIA CORPORATION",
+       [3]byte{0, 128, 129}:   "KENDALL SQUARE RESEARCH CORP.",
+       [3]byte{0, 128, 130}:   "PEP MODULAR COMPUTERS GMBH",
+       [3]byte{0, 128, 131}:   "AMDAHL",
+       [3]byte{0, 128, 132}:   "THE CLOUD INC.",
+       [3]byte{0, 128, 133}:   "H-THREE SYSTEMS CORPORATION",
+       [3]byte{0, 128, 134}:   "COMPUTER GENERATION INC.",
+       [3]byte{0, 128, 135}:   "OKI ELECTRIC INDUSTRY CO., LTD",
+       [3]byte{0, 128, 136}:   "VICTOR COMPANY OF JAPAN, LTD.",
+       [3]byte{0, 128, 137}:   "TECNETICS (PTY) LTD.",
+       [3]byte{0, 128, 138}:   "SUMMIT MICROSYSTEMS CORP.",
+       [3]byte{0, 128, 139}:   "DACOLL LIMITED",
+       [3]byte{0, 128, 140}:   "NetScout Systems, Inc.",
+       [3]byte{0, 128, 141}:   "WESTCOAST TECHNOLOGY B.V.",
+       [3]byte{0, 128, 142}:   "RADSTONE TECHNOLOGY",
+       [3]byte{0, 128, 143}:   "C. ITOH ELECTRONICS, INC.",
+       [3]byte{0, 128, 144}:   "MICROTEK INTERNATIONAL, INC.",
+       [3]byte{0, 128, 145}:   "TOKYO ELECTRIC CO.,LTD",
+       [3]byte{0, 128, 146}:   "Silex Technology, Inc.",
+       [3]byte{0, 128, 147}:   "XYRON CORPORATION",
+       [3]byte{0, 128, 148}:   "ALFA LAVAL AUTOMATION AB",
+       [3]byte{0, 128, 149}:   "BASIC MERTON HANDELSGES.M.B.H.",
+       [3]byte{0, 128, 150}:   "HUMAN DESIGNED SYSTEMS, INC.",
+       [3]byte{0, 128, 151}:   "CENTRALP AUTOMATISMES",
+       [3]byte{0, 128, 152}:   "TDK CORPORATION",
+       [3]byte{0, 128, 153}:   "Eaton Industries GmbH",
+       [3]byte{0, 128, 154}:   "NOVUS NETWORKS LTD",
+       [3]byte{0, 128, 155}:   "JUSTSYSTEM CORPORATION",
+       [3]byte{0, 128, 156}:   "LUXCOM, INC.",
+       [3]byte{0, 128, 157}:   "Commscraft Ltd.",
+       [3]byte{0, 128, 158}:   "DATUS GMBH",
+       [3]byte{0, 128, 159}:   "ALE International",
+       [3]byte{0, 128, 160}:   "Hewlett Packard",
+       [3]byte{0, 128, 161}:   "MICROTEST, INC.",
+       [3]byte{0, 128, 162}:   "CREATIVE ELECTRONIC SYSTEMS",
+       [3]byte{0, 128, 163}:   "Lantronix",
+       [3]byte{0, 128, 164}:   "LIBERTY ELECTRONICS",
+       [3]byte{0, 128, 165}:   "SPEED INTERNATIONAL",
+       [3]byte{0, 128, 166}:   "REPUBLIC TECHNOLOGY, INC.",
+       [3]byte{0, 128, 167}:   "Honeywell International Inc",
+       [3]byte{0, 128, 168}:   "VITACOM CORPORATION",
+       [3]byte{0, 128, 169}:   "CLEARPOINT RESEARCH",
+       [3]byte{0, 128, 170}:   "MAXPEED",
+       [3]byte{0, 128, 171}:   "DUKANE NETWORK INTEGRATION",
+       [3]byte{0, 128, 172}:   "IMLOGIX, DIVISION OF GENESYS",
+       [3]byte{0, 128, 173}:   "CNET TECHNOLOGY, INC.",
+       [3]byte{0, 128, 174}:   "HUGHES NETWORK SYSTEMS",
+       [3]byte{0, 128, 175}:   "ALLUMER CO., LTD.",
+       [3]byte{0, 128, 176}:   "ADVANCED INFORMATION",
+       [3]byte{0, 128, 177}:   "SOFTCOM A/S",
+       [3]byte{0, 128, 178}:   "NETWORK EQUIPMENT TECHNOLOGIES",
+       [3]byte{0, 128, 179}:   "AVAL DATA CORPORATION",
+       [3]byte{0, 128, 180}:   "SOPHIA SYSTEMS",
+       [3]byte{0, 128, 181}:   "UNITED NETWORKS INC.",
+       [3]byte{0, 128, 182}:   "THEMIS COMPUTER",
+       [3]byte{0, 128, 183}:   "STELLAR COMPUTER",
+       [3]byte{0, 128, 184}:   "DMG MORI B.U.G. CO., LTD.",
+       [3]byte{0, 128, 185}:   "ARCHE TECHNOLIGIES INC.",
+       [3]byte{0, 128, 186}:   "SPECIALIX (ASIA) PTE, LTD",
+       [3]byte{0, 128, 187}:   "HUGHES LAN SYSTEMS",
+       [3]byte{0, 128, 188}:   "HITACHI ENGINEERING CO., LTD",
+       [3]byte{0, 128, 189}:   "THE FURUKAWA ELECTRIC CO., LTD",
+       [3]byte{0, 128, 190}:   "ARIES RESEARCH",
+       [3]byte{0, 128, 191}:   "TAKAOKA ELECTRIC MFG. CO. LTD.",
+       [3]byte{0, 128, 192}:   "PENRIL DATACOMM",
+       [3]byte{0, 128, 193}:   "LANEX CORPORATION",
+       [3]byte{0, 128, 194}:   "IEEE 802.1 Working Group",
+       [3]byte{0, 128, 195}:   "BICC INFORMATION SYSTEMS & SVC",
+       [3]byte{0, 128, 196}:   "DOCUMENT TECHNOLOGIES, INC.",
+       [3]byte{0, 128, 197}:   "NOVELLCO DE MEXICO",
+       [3]byte{0, 128, 198}:   "NATIONAL DATACOMM CORPORATION",
+       [3]byte{0, 128, 199}:   "XIRCOM",
+       [3]byte{0, 128, 200}:   "D-LINK SYSTEMS, INC.",
+       [3]byte{0, 128, 201}:   "ALBERTA MICROELECTRONIC CENTRE",
+       [3]byte{0, 128, 202}:   "NETCOM RESEARCH INCORPORATED",
+       [3]byte{0, 128, 203}:   "FALCO DATA PRODUCTS",
+       [3]byte{0, 128, 204}:   "MICROWAVE BYPASS SYSTEMS",
+       [3]byte{0, 128, 205}:   "MICRONICS COMPUTER, INC.",
+       [3]byte{0, 128, 206}:   "BROADCAST TELEVISION SYSTEMS",
+       [3]byte{0, 128, 207}:   "EMBEDDED PERFORMANCE INC.",
+       [3]byte{0, 128, 208}:   "COMPUTER PERIPHERALS, INC.",
+       [3]byte{0, 128, 209}:   "KIMTRON CORPORATION",
+       [3]byte{0, 128, 210}:   "SHINNIHONDENKO CO., LTD.",
+       [3]byte{0, 128, 211}:   "SHIVA CORP.",
+       [3]byte{0, 128, 212}:   "CHASE RESEARCH LTD.",
+       [3]byte{0, 128, 213}:   "CADRE TECHNOLOGIES",
+       [3]byte{0, 128, 214}:   "NUVOTECH, INC.",
+       [3]byte{0, 128, 215}:   "Fantum Engineering",
+       [3]byte{0, 128, 216}:   "NETWORK PERIPHERALS INC.",
+       [3]byte{0, 128, 217}:   "EMK Elektronik GmbH & Co. KG",
+       [3]byte{0, 128, 218}:   "Bruel & Kjaer Sound & Vibration Measurement A/S",
+       [3]byte{0, 128, 219}:   "GRAPHON CORPORATION",
+       [3]byte{0, 128, 220}:   "PICKER INTERNATIONAL",
+       [3]byte{0, 128, 221}:   "GMX INC/GIMIX",
+       [3]byte{0, 128, 222}:   "GIPSI S.A.",
+       [3]byte{0, 128, 223}:   "ADC CODENOLL TECHNOLOGY CORP.",
+       [3]byte{0, 128, 224}:   "XTP SYSTEMS, INC.",
+       [3]byte{0, 128, 225}:   "STMicroelectronics SRL",
+       [3]byte{0, 128, 226}:   "T.D.I. CO., LTD.",
+       [3]byte{0, 128, 227}:   "CORAL NETWORK CORPORATION",
+       [3]byte{0, 128, 228}:   "NORTHWEST DIGITAL SYSTEMS, INC",
+       [3]byte{0, 128, 229}:   "NetApp",
+       [3]byte{0, 128, 230}:   "PEER NETWORKS, INC.",
+       [3]byte{0, 128, 231}:   "Leonardo Tactical Systems.",
+       [3]byte{0, 128, 232}:   "CUMULUS CORPORATIION",
+       [3]byte{0, 128, 233}:   "Madge Ltd.",
+       [3]byte{0, 128, 234}:   "ADVA Optical Networking Ltd.",
+       [3]byte{0, 128, 235}:   "COMPCONTROL B.V.",
+       [3]byte{0, 128, 236}:   "SUPERCOMPUTING SOLUTIONS, INC.",
+       [3]byte{0, 128, 237}:   "IQ TECHNOLOGIES, INC.",
+       [3]byte{0, 128, 238}:   "THOMSON CSF",
+       [3]byte{0, 128, 239}:   "RATIONAL",
+       [3]byte{0, 128, 240}:   "Panasonic Communications Co., Ltd.",
+       [3]byte{0, 128, 241}:   "OPUS SYSTEMS",
+       [3]byte{0, 128, 242}:   "RAYCOM SYSTEMS INC",
+       [3]byte{0, 128, 243}:   "SUN ELECTRONICS CORP.",
+       [3]byte{0, 128, 244}:   "TELEMECANIQUE ELECTRIQUE",
+       [3]byte{0, 128, 245}:   "Quantel Ltd",
+       [3]byte{0, 128, 246}:   "SYNERGY MICROSYSTEMS",
+       [3]byte{0, 128, 247}:   "Zenith Electronics Corporation",
+       [3]byte{0, 128, 248}:   "MIZAR, INC.",
+       [3]byte{0, 128, 249}:   "HEURIKON CORPORATION",
+       [3]byte{0, 128, 250}:   "RWT GMBH",
+       [3]byte{0, 128, 251}:   "BVM LIMITED",
+       [3]byte{0, 128, 252}:   "AVATAR CORPORATION",
+       [3]byte{0, 128, 253}:   "EXSCEED CORPRATION",
+       [3]byte{0, 128, 254}:   "AZURE TECHNOLOGIES, INC.",
+       [3]byte{0, 128, 255}:   "SOC. DE TELEINFORMATIQUE RTC",
+       [3]byte{0, 129, 196}:   "Cisco Systems, Inc",
+       [3]byte{0, 129, 249}:   "Texas Instruments",
+       [3]byte{0, 132, 237}:   "Private",
+       [3]byte{0, 134, 156}:   "Palo Alto Networks",
+       [3]byte{0, 134, 160}:   "Private",
+       [3]byte{0, 135, 1}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 135, 49}:    "Cisco Systems, Inc",
+       [3]byte{0, 136, 101}:   "Apple, Inc.",
+       [3]byte{0, 138, 150}:   "Cisco Systems, Inc",
+       [3]byte{0, 139, 67}:    "RFTECH",
+       [3]byte{0, 139, 252}:   "mixi,Inc.",
+       [3]byte{0, 140, 16}:    "Black Box Corp.",
+       [3]byte{0, 140, 84}:    "ADB Broadband Italia",
+       [3]byte{0, 140, 250}:   "INVENTEC Corporation",
+       [3]byte{0, 141, 78}:    "CJSC NII STT",
+       [3]byte{0, 141, 218}:   "Link One Co., Ltd.",
+       [3]byte{0, 142, 115}:   "Cisco Systems, Inc",
+       [3]byte{0, 142, 242}:   "NETGEAR",
+       [3]byte{0, 144, 0}:     "DIAMOND MULTIMEDIA",
+       [3]byte{0, 144, 1}:     "NISHIMU ELECTRONICS INDUSTRIES CO., LTD.",
+       [3]byte{0, 144, 2}:     "ALLGON AB",
+       [3]byte{0, 144, 3}:     "APLIO",
+       [3]byte{0, 144, 4}:     "3COM EUROPE LTD.",
+       [3]byte{0, 144, 5}:     "PROTECH SYSTEMS CO., LTD.",
+       [3]byte{0, 144, 6}:     "Hamamatsu Photonics K.K.",
+       [3]byte{0, 144, 7}:     "DOMEX TECHNOLOGY CORP.",
+       [3]byte{0, 144, 8}:     "HanA Systems Inc.",
+       [3]byte{0, 144, 9}:     "I Controls, Inc.",
+       [3]byte{0, 144, 10}:    "PROTON ELECTRONIC INDUSTRIAL CO., LTD.",
+       [3]byte{0, 144, 11}:    "LANNER ELECTRONICS, INC.",
+       [3]byte{0, 144, 12}:    "Cisco Systems, Inc",
+       [3]byte{0, 144, 13}:    "Overland Storage Inc.",
+       [3]byte{0, 144, 14}:    "HANDLINK TECHNOLOGIES, INC.",
+       [3]byte{0, 144, 15}:    "KAWASAKI HEAVY INDUSTRIES, LTD",
+       [3]byte{0, 144, 16}:    "SIMULATION LABORATORIES, INC.",
+       [3]byte{0, 144, 17}:    "WAVTrace, Inc.",
+       [3]byte{0, 144, 18}:    "GLOBESPAN SEMICONDUCTOR, INC.",
+       [3]byte{0, 144, 19}:    "SAMSAN CORP.",
+       [3]byte{0, 144, 20}:    "ROTORK INSTRUMENTS, LTD.",
+       [3]byte{0, 144, 21}:    "CENTIGRAM COMMUNICATIONS CORP.",
+       [3]byte{0, 144, 22}:    "ZAC",
+       [3]byte{0, 144, 23}:    "Zypcom, Inc",
+       [3]byte{0, 144, 24}:    "ITO ELECTRIC INDUSTRY CO, LTD.",
+       [3]byte{0, 144, 25}:    "HERMES ELECTRONICS CO., LTD.",
+       [3]byte{0, 144, 26}:    "UNISPHERE SOLUTIONS",
+       [3]byte{0, 144, 27}:    "DIGITAL CONTROLS",
+       [3]byte{0, 144, 28}:    "mps Software Gmbh",
+       [3]byte{0, 144, 29}:    "PEC (NZ) LTD.",
+       [3]byte{0, 144, 30}:    "Selesta Ingegneria S.p.A.",
+       [3]byte{0, 144, 31}:    "ADTEC PRODUCTIONS, INC.",
+       [3]byte{0, 144, 32}:    "PHILIPS ANALYTICAL X-RAY B.V.",
+       [3]byte{0, 144, 33}:    "Cisco Systems, Inc",
+       [3]byte{0, 144, 34}:    "IVEX",
+       [3]byte{0, 144, 35}:    "ZILOG INC.",
+       [3]byte{0, 144, 36}:    "PIPELINKS, INC.",
+       [3]byte{0, 144, 37}:    "BAE Systems Australia (Electronic Systems) Pty Ltd",
+       [3]byte{0, 144, 38}:    "ADVANCED SWITCHING COMMUNICATIONS, INC.",
+       [3]byte{0, 144, 39}:    "Intel Corporation",
+       [3]byte{0, 144, 40}:    "NIPPON SIGNAL CO., LTD.",
+       [3]byte{0, 144, 41}:    "CRYPTO AG",
+       [3]byte{0, 144, 42}:    "COMMUNICATION DEVICES, INC.",
+       [3]byte{0, 144, 43}:    "Cisco Systems, Inc",
+       [3]byte{0, 144, 44}:    "DATA & CONTROL EQUIPMENT LTD.",
+       [3]byte{0, 144, 45}:    "DATA ELECTRONICS (AUST.) PTY, LTD.",
+       [3]byte{0, 144, 46}:    "NAMCO LIMITED",
+       [3]byte{0, 144, 47}:    "NETCORE SYSTEMS, INC.",
+       [3]byte{0, 144, 48}:    "HONEYWELL-DATING",
+       [3]byte{0, 144, 49}:    "MYSTICOM, LTD.",
+       [3]byte{0, 144, 50}:    "PELCOMBE GROUP LTD.",
+       [3]byte{0, 144, 51}:    "INNOVAPHONE AG",
+       [3]byte{0, 144, 52}:    "IMAGIC, INC.",
+       [3]byte{0, 144, 53}:    "ALPHA TELECOM, INC.",
+       [3]byte{0, 144, 54}:    "ens, inc.",
+       [3]byte{0, 144, 55}:    "ACUCOMM, INC.",
+       [3]byte{0, 144, 56}:    "FOUNTAIN TECHNOLOGIES, INC.",
+       [3]byte{0, 144, 57}:    "SHASTA NETWORKS",
+       [3]byte{0, 144, 58}:    "NIHON MEDIA TOOL INC.",
+       [3]byte{0, 144, 59}:    "TriEMS Research Lab, Inc.",
+       [3]byte{0, 144, 60}:    "ATLANTIC NETWORK SYSTEMS",
+       [3]byte{0, 144, 61}:    "BIOPAC SYSTEMS, INC.",
+       [3]byte{0, 144, 62}:    "N.V. PHILIPS INDUSTRIAL ACTIVITIES",
+       [3]byte{0, 144, 63}:    "AZTEC RADIOMEDIA",
+       [3]byte{0, 144, 64}:    "Siemens Network Convergence LLC",
+       [3]byte{0, 144, 65}:    "APPLIED DIGITAL ACCESS",
+       [3]byte{0, 144, 66}:    "ECCS, Inc.",
+       [3]byte{0, 144, 67}:    "Tattile SRL",
+       [3]byte{0, 144, 68}:    "ASSURED DIGITAL, INC.",
+       [3]byte{0, 144, 69}:    "Marconi Communications",
+       [3]byte{0, 144, 70}:    "DEXDYNE, LTD.",
+       [3]byte{0, 144, 71}:    "GIGA FAST E. LTD.",
+       [3]byte{0, 144, 72}:    "ZEAL CORPORATION",
+       [3]byte{0, 144, 73}:    "ENTRIDIA CORPORATION",
+       [3]byte{0, 144, 74}:    "CONCUR SYSTEM TECHNOLOGIES",
+       [3]byte{0, 144, 75}:    "Gemtek Technology Co., Ltd.",
+       [3]byte{0, 144, 76}:    "Epigram, Inc.",
+       [3]byte{0, 144, 77}:    "SPEC S.A.",
+       [3]byte{0, 144, 78}:    "DELEM BV",
+       [3]byte{0, 144, 79}:    "ABB POWER T&D COMPANY, INC.",
+       [3]byte{0, 144, 80}:    "Teleste Corporation",
+       [3]byte{0, 144, 81}:    "ULTIMATE TECHNOLOGY CORP.",
+       [3]byte{0, 144, 82}:    "SELCOM ELETTRONICA S.R.L.",
+       [3]byte{0, 144, 83}:    "DAEWOO ELECTRONICS CO., LTD.",
+       [3]byte{0, 144, 84}:    "INNOVATIVE SEMICONDUCTORS, INC",
+       [3]byte{0, 144, 85}:    "PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION",
+       [3]byte{0, 144, 86}:    "TELESTREAM, INC.",
+       [3]byte{0, 144, 87}:    "AANetcom, Inc.",
+       [3]byte{0, 144, 88}:    "Ultra Electronics Command & Control Systems",
+       [3]byte{0, 144, 89}:    "TELECOM DEVICE K.K.",
+       [3]byte{0, 144, 90}:    "DEARBORN GROUP, INC.",
+       [3]byte{0, 144, 91}:    "RAYMOND AND LAE ENGINEERING",
+       [3]byte{0, 144, 92}:    "EDMI",
+       [3]byte{0, 144, 93}:    "NETCOM SICHERHEITSTECHNIK GMBH",
+       [3]byte{0, 144, 94}:    "RAULAND-BORG CORPORATION",
+       [3]byte{0, 144, 95}:    "Cisco Systems, Inc",
+       [3]byte{0, 144, 96}:    "SYSTEM CREATE CORP.",
+       [3]byte{0, 144, 97}:    "PACIFIC RESEARCH & ENGINEERING CORPORATION",
+       [3]byte{0, 144, 98}:    "ICP VORTEX COMPUTERSYSTEME GmbH",
+       [3]byte{0, 144, 99}:    "COHERENT COMMUNICATIONS SYSTEMS CORPORATION",
+       [3]byte{0, 144, 100}:   "Thomson Inc.",
+       [3]byte{0, 144, 101}:   "FINISAR CORPORATION",
+       [3]byte{0, 144, 102}:   "Troika Networks, Inc.",
+       [3]byte{0, 144, 103}:   "WalkAbout Computers, Inc.",
+       [3]byte{0, 144, 104}:   "DVT CORP.",
+       [3]byte{0, 144, 105}:   "Juniper Networks",
+       [3]byte{0, 144, 106}:   "TURNSTONE SYSTEMS, INC.",
+       [3]byte{0, 144, 107}:   "APPLIED RESOURCES, INC.",
+       [3]byte{0, 144, 108}:   "Sartorius Hamburg GmbH",
+       [3]byte{0, 144, 109}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 110}:   "PRAXON, INC.",
+       [3]byte{0, 144, 111}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 112}:   "NEO NETWORKS, INC.",
+       [3]byte{0, 144, 113}:   "Applied Innovation Inc.",
+       [3]byte{0, 144, 114}:   "SIMRAD AS",
+       [3]byte{0, 144, 115}:   "GAIO TECHNOLOGY",
+       [3]byte{0, 144, 116}:   "ARGON NETWORKS, INC.",
+       [3]byte{0, 144, 117}:   "NEC DO BRASIL S.A.",
+       [3]byte{0, 144, 118}:   "FMT AIRCRAFT GATE SUPPORT SYSTEMS AB",
+       [3]byte{0, 144, 119}:   "ADVANCED FIBRE COMMUNICATIONS",
+       [3]byte{0, 144, 120}:   "MER TELEMANAGEMENT SOLUTIONS, LTD.",
+       [3]byte{0, 144, 121}:   "ClearOne, Inc.",
+       [3]byte{0, 144, 122}:   "Spectralink, Inc",
+       [3]byte{0, 144, 123}:   "E-TECH, INC.",
+       [3]byte{0, 144, 124}:   "DIGITALCAST, INC.",
+       [3]byte{0, 144, 125}:   "Lake Communications",
+       [3]byte{0, 144, 126}:   "VETRONIX CORP.",
+       [3]byte{0, 144, 127}:   "WatchGuard Technologies, Inc.",
+       [3]byte{0, 144, 128}:   "NOT LIMITED, INC.",
+       [3]byte{0, 144, 129}:   "ALOHA NETWORKS, INC.",
+       [3]byte{0, 144, 130}:   "FORCE INSTITUTE",
+       [3]byte{0, 144, 131}:   "TURBO COMMUNICATION, INC.",
+       [3]byte{0, 144, 132}:   "ATECH SYSTEM",
+       [3]byte{0, 144, 133}:   "GOLDEN ENTERPRISES, INC.",
+       [3]byte{0, 144, 134}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 135}:   "ITIS",
+       [3]byte{0, 144, 136}:   "BAXALL SECURITY LTD.",
+       [3]byte{0, 144, 137}:   "SOFTCOM MICROSYSTEMS, INC.",
+       [3]byte{0, 144, 138}:   "BAYLY COMMUNICATIONS, INC.",
+       [3]byte{0, 144, 139}:   "Tattile SRL",
+       [3]byte{0, 144, 140}:   "ETREND ELECTRONICS, INC.",
+       [3]byte{0, 144, 141}:   "VICKERS ELECTRONICS SYSTEMS",
+       [3]byte{0, 144, 142}:   "Nortel Networks Broadband Access",
+       [3]byte{0, 144, 143}:   "AUDIO CODES LTD.",
+       [3]byte{0, 144, 144}:   "I-BUS",
+       [3]byte{0, 144, 145}:   "DigitalScape, Inc.",
+       [3]byte{0, 144, 146}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 147}:   "NANAO CORPORATION",
+       [3]byte{0, 144, 148}:   "OSPREY TECHNOLOGIES, INC.",
+       [3]byte{0, 144, 149}:   "UNIVERSAL AVIONICS",
+       [3]byte{0, 144, 150}:   "ASKEY COMPUTER CORP",
+       [3]byte{0, 144, 151}:   "Sycamore Networks",
+       [3]byte{0, 144, 152}:   "SBC DESIGNS, INC.",
+       [3]byte{0, 144, 153}:   "ALLIED TELESIS, K.K.",
+       [3]byte{0, 144, 154}:   "ONE WORLD SYSTEMS, INC.",
+       [3]byte{0, 144, 155}:   "MARKEM-IMAJE",
+       [3]byte{0, 144, 156}:   "ARRIS Group, Inc.",
+       [3]byte{0, 144, 157}:   "NovaTech Process Solutions, LLC",
+       [3]byte{0, 144, 158}:   "Critical IO, LLC",
+       [3]byte{0, 144, 159}:   "DIGI-DATA CORPORATION",
+       [3]byte{0, 144, 160}:   "8X8 INC.",
+       [3]byte{0, 144, 161}:   "Flying Pig Systems/High End Systems Inc.",
+       [3]byte{0, 144, 162}:   "CyberTAN Technology Inc.",
+       [3]byte{0, 144, 163}:   "Corecess Inc.",
+       [3]byte{0, 144, 164}:   "ALTIGA NETWORKS",
+       [3]byte{0, 144, 165}:   "SPECTRA LOGIC",
+       [3]byte{0, 144, 166}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 167}:   "CLIENTEC CORPORATION",
+       [3]byte{0, 144, 168}:   "NineTiles Networks, Ltd.",
+       [3]byte{0, 144, 169}:   "WESTERN DIGITAL",
+       [3]byte{0, 144, 170}:   "INDIGO ACTIVE VISION SYSTEMS LIMITED",
+       [3]byte{0, 144, 171}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 172}:   "OPTIVISION, INC.",
+       [3]byte{0, 144, 173}:   "ASPECT ELECTRONICS, INC.",
+       [3]byte{0, 144, 174}:   "ITALTEL S.p.A/RF-UP-I",
+       [3]byte{0, 144, 175}:   "J. MORITA MFG. CORP.",
+       [3]byte{0, 144, 176}:   "VADEM",
+       [3]byte{0, 144, 177}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 178}:   "AVICI SYSTEMS INC.",
+       [3]byte{0, 144, 179}:   "AGRANAT SYSTEMS",
+       [3]byte{0, 144, 180}:   "WILLOWBROOK TECHNOLOGIES",
+       [3]byte{0, 144, 181}:   "NIKON CORPORATION",
+       [3]byte{0, 144, 182}:   "FIBEX SYSTEMS",
+       [3]byte{0, 144, 183}:   "DIGITAL LIGHTWAVE, INC.",
+       [3]byte{0, 144, 184}:   "ROHDE & SCHWARZ GMBH & CO. KG",
+       [3]byte{0, 144, 185}:   "BERAN INSTRUMENTS LTD.",
+       [3]byte{0, 144, 186}:   "VALID NETWORKS, INC.",
+       [3]byte{0, 144, 187}:   "TAINET COMMUNICATION SYSTEM Corp.",
+       [3]byte{0, 144, 188}:   "TELEMANN CO., LTD.",
+       [3]byte{0, 144, 189}:   "OMNIA COMMUNICATIONS, INC.",
+       [3]byte{0, 144, 190}:   "IBC/INTEGRATED BUSINESS COMPUTERS",
+       [3]byte{0, 144, 191}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 192}:   "K.J. LAW ENGINEERS, INC.",
+       [3]byte{0, 144, 193}:   "Peco II, Inc.",
+       [3]byte{0, 144, 194}:   "JK microsystems, Inc.",
+       [3]byte{0, 144, 195}:   "TOPIC SEMICONDUCTOR CORP.",
+       [3]byte{0, 144, 196}:   "JAVELIN SYSTEMS, INC.",
+       [3]byte{0, 144, 197}:   "INTERNET MAGIC, INC.",
+       [3]byte{0, 144, 198}:   "OPTIM SYSTEMS, INC.",
+       [3]byte{0, 144, 199}:   "ICOM INC.",
+       [3]byte{0, 144, 200}:   "WAVERIDER COMMUNICATIONS (CANADA) INC.",
+       [3]byte{0, 144, 201}:   "DPAC Technologies",
+       [3]byte{0, 144, 202}:   "ACCORD VIDEO TELECOMMUNICATIONS, LTD.",
+       [3]byte{0, 144, 203}:   "Wireless OnLine, Inc.",
+       [3]byte{0, 144, 204}:   "PLANEX COMMUNICATIONS INC.",
+       [3]byte{0, 144, 205}:   "ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A.",
+       [3]byte{0, 144, 206}:   "TETRA GmbH",
+       [3]byte{0, 144, 207}:   "NORTEL",
+       [3]byte{0, 144, 208}:   "Thomson Telecom Belgium",
+       [3]byte{0, 144, 209}:   "LEICHU ENTERPRISE CO., LTD.",
+       [3]byte{0, 144, 210}:   "ARTEL VIDEO SYSTEMS",
+       [3]byte{0, 144, 211}:   "GIESECKE & DEVRIENT GmbH",
+       [3]byte{0, 144, 212}:   "BindView Development Corp.",
+       [3]byte{0, 144, 213}:   "EUPHONIX, INC.",
+       [3]byte{0, 144, 214}:   "Crystal Group, Inc.",
+       [3]byte{0, 144, 215}:   "NetBoost Corp.",
+       [3]byte{0, 144, 216}:   "WHITECROSS SYSTEMS",
+       [3]byte{0, 144, 217}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 218}:   "DYNARC, INC.",
+       [3]byte{0, 144, 219}:   "NEXT LEVEL COMMUNICATIONS",
+       [3]byte{0, 144, 220}:   "TECO INFORMATION SYSTEMS",
+       [3]byte{0, 144, 221}:   "MIHARU COMMUNICATIONS Inc",
+       [3]byte{0, 144, 222}:   "CARDKEY SYSTEMS, INC.",
+       [3]byte{0, 144, 223}:   "MITSUBISHI CHEMICAL AMERICA, INC.",
+       [3]byte{0, 144, 224}:   "SYSTRAN CORP.",
+       [3]byte{0, 144, 225}:   "TELENA S.P.A.",
+       [3]byte{0, 144, 226}:   "DISTRIBUTED PROCESSING TECHNOLOGY",
+       [3]byte{0, 144, 227}:   "AVEX ELECTRONICS INC.",
+       [3]byte{0, 144, 228}:   "NEC AMERICA, INC.",
+       [3]byte{0, 144, 229}:   "TEKNEMA, INC.",
+       [3]byte{0, 144, 230}:   "ALi Corporation",
+       [3]byte{0, 144, 231}:   "HORSCH ELEKTRONIK AG",
+       [3]byte{0, 144, 232}:   "MOXA TECHNOLOGIES CORP., LTD.",
+       [3]byte{0, 144, 233}:   "JANZ COMPUTER AG",
+       [3]byte{0, 144, 234}:   "ALPHA TECHNOLOGIES, INC.",
+       [3]byte{0, 144, 235}:   "SENTRY TELECOM SYSTEMS",
+       [3]byte{0, 144, 236}:   "PYRESCOM",
+       [3]byte{0, 144, 237}:   "CENTRAL SYSTEM RESEARCH CO., LTD.",
+       [3]byte{0, 144, 238}:   "PERSONAL COMMUNICATIONS TECHNOLOGIES",
+       [3]byte{0, 144, 239}:   "INTEGRIX, INC.",
+       [3]byte{0, 144, 240}:   "Harmonic Video Systems Ltd.",
+       [3]byte{0, 144, 241}:   "Seagate Cloud Systems Inc",
+       [3]byte{0, 144, 242}:   "Cisco Systems, Inc",
+       [3]byte{0, 144, 243}:   "ASPECT COMMUNICATIONS",
+       [3]byte{0, 144, 244}:   "LIGHTNING INSTRUMENTATION",
+       [3]byte{0, 144, 245}:   "CLEVO CO.",
+       [3]byte{0, 144, 246}:   "ESCALATE NETWORKS, INC.",
+       [3]byte{0, 144, 247}:   "NBASE COMMUNICATIONS LTD.",
+       [3]byte{0, 144, 248}:   "MEDIATRIX TELECOM",
+       [3]byte{0, 144, 249}:   "Imagine Communications",
+       [3]byte{0, 144, 250}:   "Emulex Corporation",
+       [3]byte{0, 144, 251}:   "PORTWELL, INC.",
+       [3]byte{0, 144, 252}:   "NETWORK COMPUTING DEVICES",
+       [3]byte{0, 144, 253}:   "CopperCom, Inc.",
+       [3]byte{0, 144, 254}:   "ELECOM CO., LTD.  (LANEED DIV.)",
+       [3]byte{0, 144, 255}:   "TELLUS TECHNOLOGY INC.",
+       [3]byte{0, 145, 214}:   "Crystal Group, Inc.",
+       [3]byte{0, 145, 250}:   "Synapse Product Development",
+       [3]byte{0, 146, 250}:   "SHENZHEN WISKY TECHNOLOGY CO.,LTD",
+       [3]byte{0, 147, 99}:    "Uni-Link Technology Co., Ltd.",
+       [3]byte{0, 148, 161}:   "F5 Networks, Inc.",
+       [3]byte{0, 149, 105}:   "LSD Science and Technology Co.,Ltd.",
+       [3]byte{0, 151, 255}:   "Heimann Sensor GmbH",
+       [3]byte{0, 154, 205}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 154, 210}:   "Cisco Systems, Inc",
+       [3]byte{0, 156, 2}:     "Hewlett Packard",
+       [3]byte{0, 157, 142}:   "CARDIAC RECORDERS, INC.",
+       [3]byte{0, 158, 30}:    "Cisco Systems, Inc",
+       [3]byte{0, 158, 200}:   "Xiaomi Communications Co Ltd",
+       [3]byte{0, 160, 0}:     "CENTILLION NETWORKS, INC.",
+       [3]byte{0, 160, 1}:     "DRS Signal Solutions",
+       [3]byte{0, 160, 2}:     "LEEDS & NORTHRUP AUSTRALIA PTY LTD",
+       [3]byte{0, 160, 3}:     "Siemens Switzerland Ltd., I B T HVP",
+       [3]byte{0, 160, 4}:     "NETPOWER, INC.",
+       [3]byte{0, 160, 5}:     "DANIEL INSTRUMENTS, LTD.",
+       [3]byte{0, 160, 6}:     "IMAGE DATA PROCESSING SYSTEM GROUP",
+       [3]byte{0, 160, 7}:     "APEXX TECHNOLOGY, INC.",
+       [3]byte{0, 160, 8}:     "NETCORP",
+       [3]byte{0, 160, 9}:     "WHITETREE NETWORK",
+       [3]byte{0, 160, 10}:    "Airspan",
+       [3]byte{0, 160, 11}:    "COMPUTEX CO., LTD.",
+       [3]byte{0, 160, 12}:    "KINGMAX TECHNOLOGY, INC.",
+       [3]byte{0, 160, 13}:    "THE PANDA PROJECT",
+       [3]byte{0, 160, 14}:    "NetScout Systems, Inc.",
+       [3]byte{0, 160, 15}:    "Broadband Technologies",
+       [3]byte{0, 160, 16}:    "SYSLOGIC DATENTECHNIK AG",
+       [3]byte{0, 160, 17}:    "MUTOH INDUSTRIES LTD.",
+       [3]byte{0, 160, 18}:    "Telco Systems, Inc.",
+       [3]byte{0, 160, 19}:    "TELTREND LTD.",
+       [3]byte{0, 160, 20}:    "CSIR",
+       [3]byte{0, 160, 21}:    "WYLE",
+       [3]byte{0, 160, 22}:    "MICROPOLIS CORP.",
+       [3]byte{0, 160, 23}:    "J B M CORPORATION",
+       [3]byte{0, 160, 24}:    "CREATIVE CONTROLLERS, INC.",
+       [3]byte{0, 160, 25}:    "NEBULA CONSULTANTS, INC.",
+       [3]byte{0, 160, 26}:    "BINAR ELEKTRONIK AB",
+       [3]byte{0, 160, 27}:    "PREMISYS COMMUNICATIONS, INC.",
+       [3]byte{0, 160, 28}:    "NASCENT NETWORKS CORPORATION",
+       [3]byte{0, 160, 29}:    "Red Lion Controls, LP",
+       [3]byte{0, 160, 30}:    "EST CORPORATION",
+       [3]byte{0, 160, 31}:    "TRICORD SYSTEMS, INC.",
+       [3]byte{0, 160, 32}:    "CITICORP/TTI",
+       [3]byte{0, 160, 33}:    "General Dynamics",
+       [3]byte{0, 160, 34}:    "CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING",
+       [3]byte{0, 160, 35}:    "APPLIED CREATIVE TECHNOLOGY, INC.",
+       [3]byte{0, 160, 36}:    "3COM CORPORATION",
+       [3]byte{0, 160, 37}:    "REDCOM LABS INC.",
+       [3]byte{0, 160, 38}:    "TELDAT, S.A.",
+       [3]byte{0, 160, 39}:    "FIREPOWER SYSTEMS, INC.",
+       [3]byte{0, 160, 40}:    "CONNER PERIPHERALS",
+       [3]byte{0, 160, 41}:    "COULTER CORPORATION",
+       [3]byte{0, 160, 42}:    "TRANCELL SYSTEMS",
+       [3]byte{0, 160, 43}:    "TRANSITIONS RESEARCH CORP.",
+       [3]byte{0, 160, 44}:    "interWAVE Communications",
+       [3]byte{0, 160, 45}:    "1394 Trade Association",
+       [3]byte{0, 160, 46}:    "BRAND COMMUNICATIONS, LTD.",
+       [3]byte{0, 160, 47}:    "ADB Broadband Italia",
+       [3]byte{0, 160, 48}:    "CAPTOR NV/SA",
+       [3]byte{0, 160, 49}:    "HAZELTINE CORPORATION, MS 1-17",
+       [3]byte{0, 160, 50}:    "GES SINGAPORE PTE. LTD.",
+       [3]byte{0, 160, 51}:    "imc MeBsysteme GmbH",
+       [3]byte{0, 160, 52}:    "AXEL",
+       [3]byte{0, 160, 53}:    "CYLINK CORPORATION",
+       [3]byte{0, 160, 54}:    "APPLIED NETWORK TECHNOLOGY",
+       [3]byte{0, 160, 55}:    "Mindray DS USA, Inc.",
+       [3]byte{0, 160, 56}:    "EMAIL ELECTRONICS",
+       [3]byte{0, 160, 57}:    "ROSS TECHNOLOGY, INC.",
+       [3]byte{0, 160, 58}:    "KUBOTEK CORPORATION",
+       [3]byte{0, 160, 59}:    "TOSHIN ELECTRIC CO., LTD.",
+       [3]byte{0, 160, 60}:    "EG&G NUCLEAR INSTRUMENTS",
+       [3]byte{0, 160, 61}:    "OPTO-22",
+       [3]byte{0, 160, 62}:    "ATM FORUM",
+       [3]byte{0, 160, 63}:    "COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C",
+       [3]byte{0, 160, 64}:    "Apple, Inc.",
+       [3]byte{0, 160, 65}:    "INFICON",
+       [3]byte{0, 160, 66}:    "SPUR PRODUCTS CORP.",
+       [3]byte{0, 160, 67}:    "AMERICAN TECHNOLOGY LABS, INC.",
+       [3]byte{0, 160, 68}:    "NTT IT CO., LTD.",
+       [3]byte{0, 160, 69}:    "PHOENIX CONTACT Electronics GmbH",
+       [3]byte{0, 160, 70}:    "SCITEX CORP. LTD.",
+       [3]byte{0, 160, 71}:    "INTEGRATED FITNESS CORP.",
+       [3]byte{0, 160, 72}:    "QUESTECH, LTD.",
+       [3]byte{0, 160, 73}:    "DIGITECH INDUSTRIES, INC.",
+       [3]byte{0, 160, 74}:    "NISSHIN ELECTRIC CO., LTD.",
+       [3]byte{0, 160, 75}:    "TFL LAN INC.",
+       [3]byte{0, 160, 76}:    "INNOVATIVE SYSTEMS & TECHNOLOGIES, INC.",
+       [3]byte{0, 160, 77}:    "EDA INSTRUMENTS, INC.",
+       [3]byte{0, 160, 78}:    "VOELKER TECHNOLOGIES, INC.",
+       [3]byte{0, 160, 79}:    "AMERITEC CORP.",
+       [3]byte{0, 160, 80}:    "CYPRESS SEMICONDUCTOR",
+       [3]byte{0, 160, 81}:    "ANGIA COMMUNICATIONS. INC.",
+       [3]byte{0, 160, 82}:    "STANILITE ELECTRONICS PTY. LTD",
+       [3]byte{0, 160, 83}:    "COMPACT DEVICES, INC.",
+       [3]byte{0, 160, 84}:    "Private",
+       [3]byte{0, 160, 85}:    "Data Device Corporation",
+       [3]byte{0, 160, 86}:    "MICROPROSS",
+       [3]byte{0, 160, 87}:    "LANCOM Systems GmbH",
+       [3]byte{0, 160, 88}:    "GLORY, LTD.",
+       [3]byte{0, 160, 89}:    "HAMILTON HALLMARK",
+       [3]byte{0, 160, 90}:    "KOFAX IMAGE PRODUCTS",
+       [3]byte{0, 160, 91}:    "MARQUIP, INC.",
+       [3]byte{0, 160, 92}:    "INVENTORY CONVERSION, INC./",
+       [3]byte{0, 160, 93}:    "CS COMPUTER SYSTEME GmbH",
+       [3]byte{0, 160, 94}:    "MYRIAD LOGIC INC.",
+       [3]byte{0, 160, 95}:    "BTG Electronics Design BV",
+       [3]byte{0, 160, 96}:    "ACER PERIPHERALS, INC.",
+       [3]byte{0, 160, 97}:    "PURITAN BENNETT",
+       [3]byte{0, 160, 98}:    "AES PRODATA",
+       [3]byte{0, 160, 99}:    "JRL SYSTEMS, INC.",
+       [3]byte{0, 160, 100}:   "KVB/ANALECT",
+       [3]byte{0, 160, 101}:   "Symantec Corporation",
+       [3]byte{0, 160, 102}:   "ISA CO., LTD.",
+       [3]byte{0, 160, 103}:   "NETWORK SERVICES GROUP",
+       [3]byte{0, 160, 104}:   "BHP LIMITED",
+       [3]byte{0, 160, 105}:   "Symmetricom, Inc.",
+       [3]byte{0, 160, 106}:   "Verilink Corporation",
+       [3]byte{0, 160, 107}:   "DMS DORSCH MIKROSYSTEM GMBH",
+       [3]byte{0, 160, 108}:   "SHINDENGEN ELECTRIC MFG. CO., LTD.",
+       [3]byte{0, 160, 109}:   "MANNESMANN TALLY CORPORATION",
+       [3]byte{0, 160, 110}:   "AUSTRON, INC.",
+       [3]byte{0, 160, 111}:   "Color Sentinel Systems, LLC",
+       [3]byte{0, 160, 112}:   "COASTCOM",
+       [3]byte{0, 160, 113}:   "VIDEO LOTTERY TECHNOLOGIES,INC",
+       [3]byte{0, 160, 114}:   "OVATION SYSTEMS LTD.",
+       [3]byte{0, 160, 115}:   "COM21, INC.",
+       [3]byte{0, 160, 116}:   "PERCEPTION TECHNOLOGY",
+       [3]byte{0, 160, 117}:   "MICRON TECHNOLOGY, INC.",
+       [3]byte{0, 160, 118}:   "CARDWARE LAB, INC.",
+       [3]byte{0, 160, 119}:   "FUJITSU NEXION, INC.",
+       [3]byte{0, 160, 120}:   "Marconi Communications",
+       [3]byte{0, 160, 121}:   "ALPS ELECTRIC (USA), INC.",
+       [3]byte{0, 160, 122}:   "ADVANCED PERIPHERALS TECHNOLOGIES, INC.",
+       [3]byte{0, 160, 123}:   "DAWN COMPUTER INCORPORATION",
+       [3]byte{0, 160, 124}:   "TONYANG NYLON CO., LTD.",
+       [3]byte{0, 160, 125}:   "SEEQ TECHNOLOGY, INC.",
+       [3]byte{0, 160, 126}:   "AVID TECHNOLOGY, INC.",
+       [3]byte{0, 160, 127}:   "GSM-SYNTEL, LTD.",
+       [3]byte{0, 160, 128}:   "Tattile SRL",
+       [3]byte{0, 160, 129}:   "ALCATEL DATA NETWORKS",
+       [3]byte{0, 160, 130}:   "NKT ELEKTRONIK A/S",
+       [3]byte{0, 160, 131}:   "ASIMMPHONY TURKEY",
+       [3]byte{0, 160, 132}:   "Dataplex Pty Ltd",
+       [3]byte{0, 160, 133}:   "Private",
+       [3]byte{0, 160, 134}:   "AMBER WAVE SYSTEMS, INC.",
+       [3]byte{0, 160, 135}:   "Microsemi Corporation",
+       [3]byte{0, 160, 136}:   "ESSENTIAL COMMUNICATIONS",
+       [3]byte{0, 160, 137}:   "XPOINT TECHNOLOGIES, INC.",
+       [3]byte{0, 160, 138}:   "BROOKTROUT TECHNOLOGY, INC.",
+       [3]byte{0, 160, 139}:   "ASTON ELECTRONIC DESIGNS LTD.",
+       [3]byte{0, 160, 140}:   "MultiMedia LANs, Inc.",
+       [3]byte{0, 160, 141}:   "JACOMO CORPORATION",
+       [3]byte{0, 160, 142}:   "Check Point Software Technologies",
+       [3]byte{0, 160, 143}:   "DESKNET SYSTEMS, INC.",
+       [3]byte{0, 160, 144}:   "TimeStep Corporation",
+       [3]byte{0, 160, 145}:   "APPLICOM INTERNATIONAL",
+       [3]byte{0, 160, 146}:   "H. BOLLMANN MANUFACTURERS, LTD",
+       [3]byte{0, 160, 147}:   "B/E AEROSPACE, Inc.",
+       [3]byte{0, 160, 148}:   "COMSAT CORPORATION",
+       [3]byte{0, 160, 149}:   "ACACIA NETWORKS, INC.",
+       [3]byte{0, 160, 150}:   "MITSUMI ELECTRIC CO.,LTD.",
+       [3]byte{0, 160, 151}:   "JC INFORMATION SYSTEMS",
+       [3]byte{0, 160, 152}:   "NetApp",
+       [3]byte{0, 160, 153}:   "K-NET LTD.",
+       [3]byte{0, 160, 154}:   "NIHON KOHDEN AMERICA",
+       [3]byte{0, 160, 155}:   "QPSX COMMUNICATIONS, LTD.",
+       [3]byte{0, 160, 156}:   "Xyplex, Inc.",
+       [3]byte{0, 160, 157}:   "JOHNATHON FREEMAN TECHNOLOGIES",
+       [3]byte{0, 160, 158}:   "ICTV",
+       [3]byte{0, 160, 159}:   "COMMVISION CORP.",
+       [3]byte{0, 160, 160}:   "COMPACT DATA, LTD.",
+       [3]byte{0, 160, 161}:   "EPIC DATA INC.",
+       [3]byte{0, 160, 162}:   "DIGICOM S.P.A.",
+       [3]byte{0, 160, 163}:   "RELIABLE POWER METERS",
+       [3]byte{0, 160, 164}:   "Oracle Corporation",
+       [3]byte{0, 160, 165}:   "TEKNOR MICROSYSTEME, INC.",
+       [3]byte{0, 160, 166}:   "M.I. SYSTEMS, K.K.",
+       [3]byte{0, 160, 167}:   "VORAX CORPORATION",
+       [3]byte{0, 160, 168}:   "RENEX CORPORATION",
+       [3]byte{0, 160, 169}:   "NAVTEL COMMUNICATIONS INC.",
+       [3]byte{0, 160, 170}:   "SPACELABS MEDICAL",
+       [3]byte{0, 160, 171}:   "NETCS INFORMATIONSTECHNIK GMBH",
+       [3]byte{0, 160, 172}:   "GILAT SATELLITE NETWORKS, LTD.",
+       [3]byte{0, 160, 173}:   "MARCONI SPA",
+       [3]byte{0, 160, 174}:   "NUCOM SYSTEMS, INC.",
+       [3]byte{0, 160, 175}:   "WMS INDUSTRIES",
+       [3]byte{0, 160, 176}:   "I-O DATA DEVICE, INC.",
+       [3]byte{0, 160, 177}:   "FIRST VIRTUAL CORPORATION",
+       [3]byte{0, 160, 178}:   "SHIMA SEIKI",
+       [3]byte{0, 160, 179}:   "ZYKRONIX",
+       [3]byte{0, 160, 180}:   "TEXAS MICROSYSTEMS, INC.",
+       [3]byte{0, 160, 181}:   "3H TECHNOLOGY",
+       [3]byte{0, 160, 182}:   "SANRITZ AUTOMATION CO., LTD.",
+       [3]byte{0, 160, 183}:   "CORDANT, INC.",
+       [3]byte{0, 160, 184}:   "NetApp",
+       [3]byte{0, 160, 185}:   "EAGLE TECHNOLOGY, INC.",
+       [3]byte{0, 160, 186}:   "PATTON ELECTRONICS CO.",
+       [3]byte{0, 160, 187}:   "HILAN GMBH",
+       [3]byte{0, 160, 188}:   "VIASAT, INCORPORATED",
+       [3]byte{0, 160, 189}:   "I-TECH CORP.",
+       [3]byte{0, 160, 190}:   "INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP",
+       [3]byte{0, 160, 191}:   "WIRELESS DATA GROUP MOTOROLA",
+       [3]byte{0, 160, 192}:   "DIGITAL LINK CORP.",
+       [3]byte{0, 160, 193}:   "ORTIVUS MEDICAL AB",
+       [3]byte{0, 160, 194}:   "R.A. SYSTEMS CO., LTD.",
+       [3]byte{0, 160, 195}:   "UNICOMPUTER GMBH",
+       [3]byte{0, 160, 196}:   "CRISTIE ELECTRONICS LTD.",
+       [3]byte{0, 160, 197}:   "Zyxel Communications Corporation",
+       [3]byte{0, 160, 198}:   "Qualcomm Inc.",
+       [3]byte{0, 160, 199}:   "TADIRAN TELECOMMUNICATIONS",
+       [3]byte{0, 160, 200}:   "Adtran Inc",
+       [3]byte{0, 160, 201}:   "Intel Corporation",
+       [3]byte{0, 160, 202}:   "FUJITSU DENSO LTD.",
+       [3]byte{0, 160, 203}:   "ARK TELECOMMUNICATIONS, INC.",
+       [3]byte{0, 160, 204}:   "LITE-ON COMMUNICATIONS, INC.",
+       [3]byte{0, 160, 205}:   "DR. JOHANNES HEIDENHAIN GmbH",
+       [3]byte{0, 160, 206}:   "Ecessa",
+       [3]byte{0, 160, 207}:   "SOTAS, INC.",
+       [3]byte{0, 160, 208}:   "TEN X TECHNOLOGY, INC.",
+       [3]byte{0, 160, 209}:   "INVENTEC CORPORATION",
+       [3]byte{0, 160, 210}:   "ALLIED TELESIS INTERNATIONAL CORPORATION",
+       [3]byte{0, 160, 211}:   "INSTEM COMPUTER SYSTEMS, LTD.",
+       [3]byte{0, 160, 212}:   "RADIOLAN,  INC.",
+       [3]byte{0, 160, 213}:   "SIERRA WIRELESS INC.",
+       [3]byte{0, 160, 214}:   "SBE, Inc.",
+       [3]byte{0, 160, 215}:   "KASTEN CHASE APPLIED RESEARCH",
+       [3]byte{0, 160, 216}:   "SPECTRA - TEK",
+       [3]byte{0, 160, 217}:   "CONVEX COMPUTER CORPORATION",
+       [3]byte{0, 160, 218}:   "INTEGRATED SYSTEMS Technology, Inc.",
+       [3]byte{0, 160, 219}:   "FISHER & PAYKEL PRODUCTION",
+       [3]byte{0, 160, 220}:   "O.N. ELECTRONIC CO., LTD.",
+       [3]byte{0, 160, 221}:   "AZONIX CORPORATION",
+       [3]byte{0, 160, 222}:   "YAMAHA CORPORATION",
+       [3]byte{0, 160, 223}:   "STS TECHNOLOGIES, INC.",
+       [3]byte{0, 160, 224}:   "TENNYSON TECHNOLOGIES PTY LTD",
+       [3]byte{0, 160, 225}:   "WESTPORT RESEARCH ASSOCIATES, INC.",
+       [3]byte{0, 160, 226}:   "Keisokugiken Corporation",
+       [3]byte{0, 160, 227}:   "XKL SYSTEMS CORP.",
+       [3]byte{0, 160, 228}:   "OPTIQUEST",
+       [3]byte{0, 160, 229}:   "NHC COMMUNICATIONS",
+       [3]byte{0, 160, 230}:   "DIALOGIC CORPORATION",
+       [3]byte{0, 160, 231}:   "CENTRAL DATA CORPORATION",
+       [3]byte{0, 160, 232}:   "REUTERS HOLDINGS PLC",
+       [3]byte{0, 160, 233}:   "ELECTRONIC RETAILING SYSTEMS INTERNATIONAL",
+       [3]byte{0, 160, 234}:   "ETHERCOM CORP.",
+       [3]byte{0, 160, 235}:   "Encore Networks, Inc.",
+       [3]byte{0, 160, 236}:   "TRANSMITTON LTD.",
+       [3]byte{0, 160, 237}:   "Brooks Automation, Inc.",
+       [3]byte{0, 160, 238}:   "NASHOBA NETWORKS",
+       [3]byte{0, 160, 239}:   "LUCIDATA LTD.",
+       [3]byte{0, 160, 240}:   "TORONTO MICROELECTRONICS INC.",
+       [3]byte{0, 160, 241}:   "MTI",
+       [3]byte{0, 160, 242}:   "INFOTEK COMMUNICATIONS, INC.",
+       [3]byte{0, 160, 243}:   "STAUBLI",
+       [3]byte{0, 160, 244}:   "GE",
+       [3]byte{0, 160, 245}:   "RADGUARD LTD.",
+       [3]byte{0, 160, 246}:   "AutoGas Systems Inc.",
+       [3]byte{0, 160, 247}:   "V.I COMPUTER CORP.",
+       [3]byte{0, 160, 248}:   "Zebra Technologies Inc",
+       [3]byte{0, 160, 249}:   "BINTEC COMMUNICATIONS GMBH",
+       [3]byte{0, 160, 250}:   "Marconi Communication GmbH",
+       [3]byte{0, 160, 251}:   "TORAY ENGINEERING CO., LTD.",
+       [3]byte{0, 160, 252}:   "IMAGE SCIENCES, INC.",
+       [3]byte{0, 160, 253}:   "SCITEX DIGITAL PRINTING, INC.",
+       [3]byte{0, 160, 254}:   "BOSTON TECHNOLOGY, INC.",
+       [3]byte{0, 160, 255}:   "TELLABS OPERATIONS, INC.",
+       [3]byte{0, 161, 222}:   "ShenZhen ShiHua Technology CO.,LTD",
+       [3]byte{0, 162, 137}:   "Cisco Systems, Inc",
+       [3]byte{0, 162, 218}:   "INAT GmbH",
+       [3]byte{0, 162, 238}:   "Cisco Systems, Inc",
+       [3]byte{0, 162, 245}:   "Guangzhou Yuanyun Network Technology Co.,Ltd",
+       [3]byte{0, 162, 255}:   "abatec group AG",
+       [3]byte{0, 163, 142}:   "Cisco Systems, Inc",
+       [3]byte{0, 163, 209}:   "Cisco Systems, Inc",
+       [3]byte{0, 165, 9}:     "WigWag Inc.",
+       [3]byte{0, 166, 202}:   "Cisco Systems, Inc",
+       [3]byte{0, 167, 66}:    "Cisco Systems, Inc",
+       [3]byte{0, 167, 132}:   "ITX security",
+       [3]byte{0, 170, 0}:     "Intel Corporation",
+       [3]byte{0, 170, 1}:     "Intel Corporation",
+       [3]byte{0, 170, 2}:     "Intel Corporation",
+       [3]byte{0, 170, 60}:    "OLIVETTI TELECOM SPA (OLTECO)",
+       [3]byte{0, 170, 112}:   "LG Electronics (Mobile Communications)",
+       [3]byte{0, 172, 224}:   "ARRIS Group, Inc.",
+       [3]byte{0, 174, 205}:   "Pensando Systems",
+       [3]byte{0, 174, 250}:   "Murata Manufacturing Co., Ltd.",
+       [3]byte{0, 175, 31}:    "Cisco Systems, Inc",
+       [3]byte{0, 176, 9}:     "Grass Valley, A Belden Brand",
+       [3]byte{0, 176, 23}:    "InfoGear Technology Corp.",
+       [3]byte{0, 176, 25}:    "UTC CCS",
+       [3]byte{0, 176, 28}:    "Westport Technologies",
+       [3]byte{0, 176, 30}:    "Rantic Labs, Inc.",
+       [3]byte{0, 176, 42}:    "ORSYS GmbH",
+       [3]byte{0, 176, 45}:    "ViaGate Technologies, Inc.",
+       [3]byte{0, 176, 51}:    "OAO Izhevskiy radiozavod",
+       [3]byte{0, 176, 59}:    "HiQ Networks",
+       [3]byte{0, 176, 72}:    "Marconi Communications Inc.",
+       [3]byte{0, 176, 74}:    "Cisco Systems, Inc",
+       [3]byte{0, 176, 82}:    "Atheros Communications",
+       [3]byte{0, 176, 100}:   "Cisco Systems, Inc",
+       [3]byte{0, 176, 105}:   "Honewell Oy",
+       [3]byte{0, 176, 109}:   "Jones Futurex Inc.",
+       [3]byte{0, 176, 128}:   "Mannesmann Ipulsys B.V.",
+       [3]byte{0, 176, 134}:   "LocSoft Limited",
+       [3]byte{0, 176, 142}:   "Cisco Systems, Inc",
+       [3]byte{0, 176, 145}:   "Transmeta Corp.",
+       [3]byte{0, 176, 148}:   "Alaris, Inc.",
+       [3]byte{0, 176, 154}:   "Morrow Technologies Corp.",
+       [3]byte{0, 176, 157}:   "Point Grey Research Inc.",
+       [3]byte{0, 176, 172}:   "SIAE-Microelettronica S.p.A.",
+       [3]byte{0, 176, 174}:   "Symmetricom",
+       [3]byte{0, 176, 179}:   "XSTREAMIS PLC",
+       [3]byte{0, 176, 194}:   "Cisco Systems, Inc",
+       [3]byte{0, 176, 199}:   "Tellabs Operations, Inc.",
+       [3]byte{0, 176, 206}:   "Viveris Technologies",
+       [3]byte{0, 176, 208}:   "Dell Inc.",
+       [3]byte{0, 176, 219}:   "Nextcell, Inc.",
+       [3]byte{0, 176, 223}:   "Starboard Storage Systems",
+       [3]byte{0, 176, 225}:   "Cisco Systems, Inc",
+       [3]byte{0, 176, 231}:   "British Federal Ltd.",
+       [3]byte{0, 176, 236}:   "EACEM",
+       [3]byte{0, 176, 238}:   "Ajile Systems, Inc.",
+       [3]byte{0, 176, 240}:   "CALY NETWORKS",
+       [3]byte{0, 176, 245}:   "NetWorth Technologies, Inc.",
+       [3]byte{0, 179, 56}:    "Kontron Design Manufacturing Services (M) Sdn. Bhd",
+       [3]byte{0, 179, 66}:    "MacroSAN Technologies Co., Ltd.",
+       [3]byte{0, 179, 98}:    "Apple, Inc.",
+       [3]byte{0, 181, 109}:   "David Electronics Co., LTD.",
+       [3]byte{0, 181, 214}:   "Omnibit Inc.",
+       [3]byte{0, 182, 159}:   "Latch",
+       [3]byte{0, 183, 141}:   "Nanjing Shining Electric Automation Co., Ltd",
+       [3]byte{0, 185, 246}:   "Shenzhen Super Rich Electronics Co.,Ltd",
+       [3]byte{0, 186, 192}:   "Biometric Access Company",
+       [3]byte{0, 187, 1}:     "OCTOTHORPE CORP.",
+       [3]byte{0, 187, 58}:    "Private",
+       [3]byte{0, 187, 142}:   "HME Co., Ltd.",
+       [3]byte{0, 187, 193}:   "CANON INC.",
+       [3]byte{0, 187, 240}:   "UNGERMANN-BASS INC.",
+       [3]byte{0, 189, 39}:    "Exar Corp.",
+       [3]byte{0, 189, 58}:    "Nokia Corporation",
+       [3]byte{0, 189, 130}:   "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{0, 190, 158}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{0, 191, 21}:    "Genetec Inc.",
+       [3]byte{0, 191, 97}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 192, 0}:     "LANOPTICS, LTD.",
+       [3]byte{0, 192, 1}:     "DIATEK PATIENT MANAGMENT",
+       [3]byte{0, 192, 2}:     "SERCOMM CORPORATION",
+       [3]byte{0, 192, 3}:     "GLOBALNET COMMUNICATIONS",
+       [3]byte{0, 192, 4}:     "JAPAN BUSINESS COMPUTER CO.LTD",
+       [3]byte{0, 192, 5}:     "LIVINGSTON ENTERPRISES, INC.",
+       [3]byte{0, 192, 6}:     "NIPPON AVIONICS CO., LTD.",
+       [3]byte{0, 192, 7}:     "PINNACLE DATA SYSTEMS, INC.",
+       [3]byte{0, 192, 8}:     "SECO SRL",
+       [3]byte{0, 192, 9}:     "KT TECHNOLOGY (S) PTE LTD",
+       [3]byte{0, 192, 10}:    "MICRO CRAFT",
+       [3]byte{0, 192, 11}:    "NORCONTROL A.S.",
+       [3]byte{0, 192, 12}:    "RELIA TECHNOLGIES",
+       [3]byte{0, 192, 13}:    "ADVANCED LOGIC RESEARCH, INC.",
+       [3]byte{0, 192, 14}:    "PSITECH, INC.",
+       [3]byte{0, 192, 15}:    "QUANTUM SOFTWARE SYSTEMS LTD.",
+       [3]byte{0, 192, 16}:    "HIRAKAWA HEWTECH CORP.",
+       [3]byte{0, 192, 17}:    "INTERACTIVE COMPUTING DEVICES",
+       [3]byte{0, 192, 18}:    "NETSPAN CORPORATION",
+       [3]byte{0, 192, 19}:    "NETRIX",
+       [3]byte{0, 192, 20}:    "TELEMATICS CALABASAS INT'L,INC",
+       [3]byte{0, 192, 21}:    "NEW MEDIA CORPORATION",
+       [3]byte{0, 192, 22}:    "ELECTRONIC THEATRE CONTROLS",
+       [3]byte{0, 192, 23}:    "NetScout Systems, Inc.",
+       [3]byte{0, 192, 24}:    "LANART CORPORATION",
+       [3]byte{0, 192, 25}:    "LEAP TECHNOLOGY, INC.",
+       [3]byte{0, 192, 26}:    "COROMETRICS MEDICAL SYSTEMS",
+       [3]byte{0, 192, 27}:    "SOCKET COMMUNICATIONS, INC.",
+       [3]byte{0, 192, 28}:    "INTERLINK COMMUNICATIONS LTD.",
+       [3]byte{0, 192, 29}:    "GRAND JUNCTION NETWORKS, INC.",
+       [3]byte{0, 192, 30}:    "LA FRANCAISE DES JEUX",
+       [3]byte{0, 192, 31}:    "S.E.R.C.E.L.",
+       [3]byte{0, 192, 32}:    "ARCO ELECTRONIC, CONTROL LTD.",
+       [3]byte{0, 192, 33}:    "NETEXPRESS",
+       [3]byte{0, 192, 34}:    "LASERMASTER TECHNOLOGIES, INC.",
+       [3]byte{0, 192, 35}:    "TUTANKHAMON ELECTRONICS",
+       [3]byte{0, 192, 36}:    "EDEN SISTEMAS DE COMPUTACAO SA",
+       [3]byte{0, 192, 37}:    "DATAPRODUCTS CORPORATION",
+       [3]byte{0, 192, 38}:    "LANS TECHNOLOGY CO., LTD.",
+       [3]byte{0, 192, 39}:    "CIPHER SYSTEMS, INC.",
+       [3]byte{0, 192, 40}:    "JASCO CORPORATION",
+       [3]byte{0, 192, 41}:    "Nexans Deutschland GmbH - ANS",
+       [3]byte{0, 192, 42}:    "OHKURA ELECTRIC CO., LTD.",
+       [3]byte{0, 192, 43}:    "GERLOFF GESELLSCHAFT FUR",
+       [3]byte{0, 192, 44}:    "CENTRUM COMMUNICATIONS, INC.",
+       [3]byte{0, 192, 45}:    "FUJI PHOTO FILM CO., LTD.",
+       [3]byte{0, 192, 46}:    "NETWIZ",
+       [3]byte{0, 192, 47}:    "OKUMA CORPORATION",
+       [3]byte{0, 192, 48}:    "INTEGRATED ENGINEERING B. V.",
+       [3]byte{0, 192, 49}:    "DESIGN RESEARCH SYSTEMS, INC.",
+       [3]byte{0, 192, 50}:    "I-CUBED LIMITED",
+       [3]byte{0, 192, 51}:    "TELEBIT COMMUNICATIONS APS",
+       [3]byte{0, 192, 52}:    "TRANSACTION NETWORK",
+       [3]byte{0, 192, 53}:    "QUINTAR COMPANY",
+       [3]byte{0, 192, 54}:    "RAYTECH ELECTRONIC CORP.",
+       [3]byte{0, 192, 55}:    "DYNATEM",
+       [3]byte{0, 192, 56}:    "RASTER IMAGE PROCESSING SYSTEM",
+       [3]byte{0, 192, 57}:    "Teridian Semiconductor Corporation",
+       [3]byte{0, 192, 58}:    "MEN-MIKRO ELEKTRONIK GMBH",
+       [3]byte{0, 192, 59}:    "MULTIACCESS COMPUTING CORP.",
+       [3]byte{0, 192, 60}:    "TOWER TECH S.R.L.",
+       [3]byte{0, 192, 61}:    "WIESEMANN & THEIS GMBH",
+       [3]byte{0, 192, 62}:    "FA. GEBR. HELLER GMBH",
+       [3]byte{0, 192, 63}:    "STORES AUTOMATED SYSTEMS, INC.",
+       [3]byte{0, 192, 64}:    "ECCI",
+       [3]byte{0, 192, 65}:    "DIGITAL TRANSMISSION SYSTEMS",
+       [3]byte{0, 192, 66}:    "DATALUX CORP.",
+       [3]byte{0, 192, 67}:    "STRATACOM",
+       [3]byte{0, 192, 68}:    "EMCOM CORPORATION",
+       [3]byte{0, 192, 69}:    "ISOLATION SYSTEMS, LTD.",
+       [3]byte{0, 192, 70}:    "Blue Chip Technology Ltd",
+       [3]byte{0, 192, 71}:    "UNIMICRO SYSTEMS, INC.",
+       [3]byte{0, 192, 72}:    "BAY TECHNICAL ASSOCIATES",
+       [3]byte{0, 192, 73}:    "U.S. ROBOTICS, INC.",
+       [3]byte{0, 192, 74}:    "GROUP 2000 AG",
+       [3]byte{0, 192, 75}:    "CREATIVE MICROSYSTEMS",
+       [3]byte{0, 192, 76}:    "DEPARTMENT OF FOREIGN AFFAIRS",
+       [3]byte{0, 192, 77}:    "MITEC, INC.",
+       [3]byte{0, 192, 78}:    "COMTROL CORPORATION",
+       [3]byte{0, 192, 79}:    "Dell Inc.",
+       [3]byte{0, 192, 80}:    "TOYO DENKI SEIZO K.K.",
+       [3]byte{0, 192, 81}:    "ADVANCED INTEGRATION RESEARCH",
+       [3]byte{0, 192, 82}:    "BURR-BROWN",
+       [3]byte{0, 192, 83}:    "Aspect Software Inc.",
+       [3]byte{0, 192, 84}:    "NETWORK PERIPHERALS, LTD.",
+       [3]byte{0, 192, 85}:    "MODULAR COMPUTING TECHNOLOGIES",
+       [3]byte{0, 192, 86}:    "SOMELEC",
+       [3]byte{0, 192, 87}:    "MYCO ELECTRONICS",
+       [3]byte{0, 192, 88}:    "DATAEXPERT CORP.",
+       [3]byte{0, 192, 89}:    "DENSO CORPORATION",
+       [3]byte{0, 192, 90}:    "SEMAPHORE COMMUNICATIONS CORP.",
+       [3]byte{0, 192, 91}:    "NETWORKS NORTHWEST, INC.",
+       [3]byte{0, 192, 92}:    "ELONEX PLC",
+       [3]byte{0, 192, 93}:    "L&N TECHNOLOGIES",
+       [3]byte{0, 192, 94}:    "VARI-LITE, INC.",
+       [3]byte{0, 192, 95}:    "FINE-PAL COMPANY LIMITED",
+       [3]byte{0, 192, 96}:    "ID SCANDINAVIA AS",
+       [3]byte{0, 192, 97}:    "SOLECTEK CORPORATION",
+       [3]byte{0, 192, 98}:    "IMPULSE TECHNOLOGY",
+       [3]byte{0, 192, 99}:    "MORNING STAR TECHNOLOGIES, INC",
+       [3]byte{0, 192, 100}:   "General Datacomm LLC",
+       [3]byte{0, 192, 101}:   "SCOPE COMMUNICATIONS, INC.",
+       [3]byte{0, 192, 102}:   "DOCUPOINT, INC.",
+       [3]byte{0, 192, 103}:   "UNITED BARCODE INDUSTRIES",
+       [3]byte{0, 192, 104}:   "HME Clear-Com LTD.",
+       [3]byte{0, 192, 105}:   "Axxcelera Broadband Wireless",
+       [3]byte{0, 192, 106}:   "ZAHNER-ELEKTRIK GMBH & CO. KG",
+       [3]byte{0, 192, 107}:   "OSI PLUS CORPORATION",
+       [3]byte{0, 192, 108}:   "SVEC COMPUTER CORP.",
+       [3]byte{0, 192, 109}:   "BOCA RESEARCH, INC.",
+       [3]byte{0, 192, 110}:   "HAFT TECHNOLOGY, INC.",
+       [3]byte{0, 192, 111}:   "KOMATSU LTD.",
+       [3]byte{0, 192, 112}:   "SECTRA SECURE-TRANSMISSION AB",
+       [3]byte{0, 192, 113}:   "AREANEX COMMUNICATIONS, INC.",
+       [3]byte{0, 192, 114}:   "KNX LTD.",
+       [3]byte{0, 192, 115}:   "XEDIA CORPORATION",
+       [3]byte{0, 192, 116}:   "TOYODA AUTOMATIC LOOM",
+       [3]byte{0, 192, 117}:   "XANTE CORPORATION",
+       [3]byte{0, 192, 118}:   "I-DATA INTERNATIONAL A-S",
+       [3]byte{0, 192, 119}:   "DAEWOO TELECOM LTD.",
+       [3]byte{0, 192, 120}:   "COMPUTER SYSTEMS ENGINEERING",
+       [3]byte{0, 192, 121}:   "FONSYS CO.,LTD.",
+       [3]byte{0, 192, 122}:   "PRIVA B.V.",
+       [3]byte{0, 192, 123}:   "ASCEND COMMUNICATIONS, INC.",
+       [3]byte{0, 192, 124}:   "HIGHTECH INFORMATION",
+       [3]byte{0, 192, 125}:   "RISC DEVELOPMENTS LTD.",
+       [3]byte{0, 192, 126}:   "KUBOTA CORPORATION ELECTRONIC",
+       [3]byte{0, 192, 127}:   "NUPON COMPUTING CORP.",
+       [3]byte{0, 192, 128}:   "NETSTAR, INC.",
+       [3]byte{0, 192, 129}:   "METRODATA LTD.",
+       [3]byte{0, 192, 130}:   "MOORE PRODUCTS CO.",
+       [3]byte{0, 192, 131}:   "TRACE MOUNTAIN PRODUCTS, INC.",
+       [3]byte{0, 192, 132}:   "DATA LINK CORP. LTD.",
+       [3]byte{0, 192, 133}:   "ELECTRONICS FOR IMAGING, INC.",
+       [3]byte{0, 192, 134}:   "THE LYNK CORPORATION",
+       [3]byte{0, 192, 135}:   "UUNET TECHNOLOGIES, INC.",
+       [3]byte{0, 192, 136}:   "EKF ELEKTRONIK GMBH",
+       [3]byte{0, 192, 137}:   "TELINDUS DISTRIBUTION",
+       [3]byte{0, 192, 138}:   "Lauterbach GmbH",
+       [3]byte{0, 192, 139}:   "RISQ MODULAR SYSTEMS, INC.",
+       [3]byte{0, 192, 140}:   "PERFORMANCE TECHNOLOGIES, INC.",
+       [3]byte{0, 192, 141}:   "TRONIX PRODUCT DEVELOPMENT",
+       [3]byte{0, 192, 142}:   "NETWORK INFORMATION TECHNOLOGY",
+       [3]byte{0, 192, 143}:   "Panasonic Electric Works Co., Ltd.",
+       [3]byte{0, 192, 144}:   "PRAIM S.R.L.",
+       [3]byte{0, 192, 145}:   "JABIL CIRCUIT, INC.",
+       [3]byte{0, 192, 146}:   "MENNEN MEDICAL INC.",
+       [3]byte{0, 192, 147}:   "ALTA RESEARCH CORP.",
+       [3]byte{0, 192, 148}:   "VMX INC.",
+       [3]byte{0, 192, 149}:   "ZNYX Networks, Inc.",
+       [3]byte{0, 192, 150}:   "TAMURA CORPORATION",
+       [3]byte{0, 192, 151}:   "ARCHIPEL SA",
+       [3]byte{0, 192, 152}:   "CHUNTEX ELECTRONIC CO., LTD.",
+       [3]byte{0, 192, 153}:   "YOSHIKI INDUSTRIAL CO.,LTD.",
+       [3]byte{0, 192, 154}:   "PHOTONICS CORPORATION",
+       [3]byte{0, 192, 155}:   "RELIANCE COMM/TEC, R-TEC",
+       [3]byte{0, 192, 156}:   "HIOKI E.E. CORPORATION",
+       [3]byte{0, 192, 157}:   "DISTRIBUTED SYSTEMS INT'L, INC",
+       [3]byte{0, 192, 158}:   "CACHE COMPUTERS, INC.",
+       [3]byte{0, 192, 159}:   "QUANTA COMPUTER INC.",
+       [3]byte{0, 192, 160}:   "ADVANCE MICRO RESEARCH, INC.",
+       [3]byte{0, 192, 161}:   "TOKYO DENSHI SEKEI CO.",
+       [3]byte{0, 192, 162}:   "INTERMEDIUM A/S",
+       [3]byte{0, 192, 163}:   "DUAL ENTERPRISES CORPORATION",
+       [3]byte{0, 192, 164}:   "UNIGRAF OY",
+       [3]byte{0, 192, 165}:   "DICKENS DATA SYSTEMS",
+       [3]byte{0, 192, 166}:   "EXICOM AUSTRALIA PTY. LTD",
+       [3]byte{0, 192, 167}:   "SEEL LTD.",
+       [3]byte{0, 192, 168}:   "GVC CORPORATION",
+       [3]byte{0, 192, 169}:   "BARRON MCCANN LTD.",
+       [3]byte{0, 192, 170}:   "SILICON VALLEY COMPUTER",
+       [3]byte{0, 192, 171}:   "Telco Systems, Inc.",
+       [3]byte{0, 192, 172}:   "GAMBIT COMPUTER COMMUNICATIONS",
+       [3]byte{0, 192, 173}:   "MARBEN COMMUNICATION SYSTEMS",
+       [3]byte{0, 192, 174}:   "TOWERCOM CO. INC. DBA PC HOUSE",
+       [3]byte{0, 192, 175}:   "TEKLOGIX INC.",
+       [3]byte{0, 192, 176}:   "GCC TECHNOLOGIES,INC.",
+       [3]byte{0, 192, 177}:   "GENIUS NET CO.",
+       [3]byte{0, 192, 178}:   "NORAND CORPORATION",
+       [3]byte{0, 192, 179}:   "COMSTAT DATACOMM CORPORATION",
+       [3]byte{0, 192, 180}:   "MYSON TECHNOLOGY, INC.",
+       [3]byte{0, 192, 181}:   "CORPORATE NETWORK SYSTEMS,INC.",
+       [3]byte{0, 192, 182}:   "Overland Storage, Inc.",
+       [3]byte{0, 192, 183}:   "AMERICAN POWER CONVERSION CORP",
+       [3]byte{0, 192, 184}:   "FRASER'S HILL LTD.",
+       [3]byte{0, 192, 185}:   "FUNK SOFTWARE, INC.",
+       [3]byte{0, 192, 186}:   "NETVANTAGE",
+       [3]byte{0, 192, 187}:   "FORVAL CREATIVE, INC.",
+       [3]byte{0, 192, 188}:   "TELECOM AUSTRALIA/CSSC",
+       [3]byte{0, 192, 189}:   "INEX TECHNOLOGIES, INC.",
+       [3]byte{0, 192, 190}:   "ALCATEL - SEL",
+       [3]byte{0, 192, 191}:   "TECHNOLOGY CONCEPTS, LTD.",
+       [3]byte{0, 192, 192}:   "SHORE MICROSYSTEMS, INC.",
+       [3]byte{0, 192, 193}:   "QUAD/GRAPHICS, INC.",
+       [3]byte{0, 192, 194}:   "INFINITE NETWORKS LTD.",
+       [3]byte{0, 192, 195}:   "ACUSON COMPUTED SONOGRAPHY",
+       [3]byte{0, 192, 196}:   "COMPUTER OPERATIONAL",
+       [3]byte{0, 192, 197}:   "SID INFORMATICA",
+       [3]byte{0, 192, 198}:   "PERSONAL MEDIA CORP.",
+       [3]byte{0, 192, 199}:   "SPARKTRUM MICROSYSTEMS, INC.",
+       [3]byte{0, 192, 200}:   "MICRO BYTE PTY. LTD.",
+       [3]byte{0, 192, 201}:   "ELSAG BAILEY PROCESS",
+       [3]byte{0, 192, 202}:   "ALFA, INC.",
+       [3]byte{0, 192, 203}:   "CONTROL TECHNOLOGY CORPORATION",
+       [3]byte{0, 192, 204}:   "TELESCIENCES CO SYSTEMS, INC.",
+       [3]byte{0, 192, 205}:   "COMELTA, S.A.",
+       [3]byte{0, 192, 206}:   "CEI SYSTEMS & ENGINEERING PTE",
+       [3]byte{0, 192, 207}:   "IMATRAN VOIMA OY",
+       [3]byte{0, 192, 208}:   "RATOC SYSTEM INC.",
+       [3]byte{0, 192, 209}:   "COMTREE TECHNOLOGY CORPORATION",
+       [3]byte{0, 192, 210}:   "SYNTELLECT, INC.",
+       [3]byte{0, 192, 211}:   "OLYMPUS IMAGE SYSTEMS, INC.",
+       [3]byte{0, 192, 212}:   "AXON NETWORKS, INC.",
+       [3]byte{0, 192, 213}:   "Werbeagentur Jürgen Siebert",
+       [3]byte{0, 192, 214}:   "J1 SYSTEMS, INC.",
+       [3]byte{0, 192, 215}:   "TAIWAN TRADING CENTER DBA",
+       [3]byte{0, 192, 216}:   "UNIVERSAL DATA SYSTEMS",
+       [3]byte{0, 192, 217}:   "QUINTE NETWORK CONFIDENTIALITY",
+       [3]byte{0, 192, 218}:   "NICE SYSTEMS LTD.",
+       [3]byte{0, 192, 219}:   "IPC CORPORATION (PTE) LTD.",
+       [3]byte{0, 192, 220}:   "EOS TECHNOLOGIES, INC.",
+       [3]byte{0, 192, 221}:   "QLogic Corporation",
+       [3]byte{0, 192, 222}:   "ZCOMM, INC.",
+       [3]byte{0, 192, 223}:   "KYE Systems Corp.",
+       [3]byte{0, 192, 224}:   "DSC COMMUNICATION CORP.",
+       [3]byte{0, 192, 225}:   "SONIC SOLUTIONS",
+       [3]byte{0, 192, 226}:   "CALCOMP, INC.",
+       [3]byte{0, 192, 227}:   "OSITECH COMMUNICATIONS, INC.",
+       [3]byte{0, 192, 228}:   "SIEMENS BUILDING",
+       [3]byte{0, 192, 229}:   "GESPAC, S.A.",
+       [3]byte{0, 192, 230}:   "Verilink Corporation",
+       [3]byte{0, 192, 231}:   "FIBERDATA AB",
+       [3]byte{0, 192, 232}:   "PLEXCOM, INC.",
+       [3]byte{0, 192, 233}:   "OAK SOLUTIONS, LTD.",
+       [3]byte{0, 192, 234}:   "ARRAY TECHNOLOGY LTD.",
+       [3]byte{0, 192, 235}:   "SEH COMPUTERTECHNIK GMBH",
+       [3]byte{0, 192, 236}:   "DAUPHIN TECHNOLOGY",
+       [3]byte{0, 192, 237}:   "US ARMY ELECTRONIC",
+       [3]byte{0, 192, 238}:   "KYOCERA Display Corporation",
+       [3]byte{0, 192, 239}:   "ABIT CORPORATION",
+       [3]byte{0, 192, 240}:   "Kingston Technology Company, Inc.",
+       [3]byte{0, 192, 241}:   "SHINKO ELECTRIC CO., LTD.",
+       [3]byte{0, 192, 242}:   "TRANSITION NETWORKS",
+       [3]byte{0, 192, 243}:   "NETWORK COMMUNICATIONS CORP.",
+       [3]byte{0, 192, 244}:   "INTERLINK SYSTEM CO., LTD.",
+       [3]byte{0, 192, 245}:   "METACOMP, INC.",
+       [3]byte{0, 192, 246}:   "CELAN TECHNOLOGY INC.",
+       [3]byte{0, 192, 247}:   "ENGAGE COMMUNICATION, INC.",
+       [3]byte{0, 192, 248}:   "ABOUT COMPUTING INC.",
+       [3]byte{0, 192, 249}:   "Artesyn Embedded Technologies",
+       [3]byte{0, 192, 250}:   "CANARY COMMUNICATIONS, INC.",
+       [3]byte{0, 192, 251}:   "ADVANCED TECHNOLOGY LABS",
+       [3]byte{0, 192, 252}:   "ELASTIC REALITY, INC.",
+       [3]byte{0, 192, 253}:   "PROSUM",
+       [3]byte{0, 192, 254}:   "APTEC COMPUTER SYSTEMS, INC.",
+       [3]byte{0, 192, 255}:   "Seagate Cloud Systems Inc",
+       [3]byte{0, 193, 79}:    "DDL Co,.ltd.",
+       [3]byte{0, 193, 100}:   "Cisco Systems, Inc",
+       [3]byte{0, 193, 177}:   "Cisco Systems, Inc",
+       [3]byte{0, 194, 198}:   "Intel Corporate",
+       [3]byte{0, 197, 219}:   "Datatech Sistemas Digitales Avanzados SL",
+       [3]byte{0, 198, 16}:    "Apple, Inc.",
+       [3]byte{0, 200, 139}:   "Cisco Systems, Inc",
+       [3]byte{0, 202, 229}:   "Cisco Systems, Inc",
+       [3]byte{0, 203, 0}:     "Private",
+       [3]byte{0, 203, 189}:   "Cambridge Broadband Networks Ltd.",
+       [3]byte{0, 204, 252}:   "Cisco Systems, Inc",
+       [3]byte{0, 205, 144}:   "MAS Elektronik AG",
+       [3]byte{0, 205, 254}:   "Apple, Inc.",
+       [3]byte{0, 207, 28}:    "Communication Machinery Corporation",
+       [3]byte{0, 208, 0}:     "FERRAN SCIENTIFIC, INC.",
+       [3]byte{0, 208, 1}:     "VST TECHNOLOGIES, INC.",
+       [3]byte{0, 208, 2}:     "DITECH CORPORATION",
+       [3]byte{0, 208, 3}:     "COMDA ENTERPRISES CORP.",
+       [3]byte{0, 208, 4}:     "PENTACOM LTD.",
+       [3]byte{0, 208, 5}:     "ZHS ZEITMANAGEMENTSYSTEME",
+       [3]byte{0, 208, 6}:     "Cisco Systems, Inc",
+       [3]byte{0, 208, 7}:     "MIC ASSOCIATES, INC.",
+       [3]byte{0, 208, 8}:     "MACTELL CORPORATION",
+       [3]byte{0, 208, 9}:     "HSING TECH. ENTERPRISE CO. LTD",
+       [3]byte{0, 208, 10}:    "LANACCESS TELECOM S.A.",
+       [3]byte{0, 208, 11}:    "RHK TECHNOLOGY, INC.",
+       [3]byte{0, 208, 12}:    "SNIJDER MICRO SYSTEMS",
+       [3]byte{0, 208, 13}:    "MICROMERITICS INSTRUMENT",
+       [3]byte{0, 208, 14}:    "PLURIS, INC.",
+       [3]byte{0, 208, 15}:    "SPEECH DESIGN GMBH",
+       [3]byte{0, 208, 16}:    "CONVERGENT NETWORKS, INC.",
+       [3]byte{0, 208, 17}:    "PRISM VIDEO, INC.",
+       [3]byte{0, 208, 18}:    "GATEWORKS CORP.",
+       [3]byte{0, 208, 19}:    "PRIMEX AEROSPACE COMPANY",
+       [3]byte{0, 208, 20}:    "ROOT, INC.",
+       [3]byte{0, 208, 21}:    "UNIVEX MICROTECHNOLOGY CORP.",
+       [3]byte{0, 208, 22}:    "SCM MICROSYSTEMS, INC.",
+       [3]byte{0, 208, 23}:    "SYNTECH INFORMATION CO., LTD.",
+       [3]byte{0, 208, 24}:    "QWES. COM, INC.",
+       [3]byte{0, 208, 25}:    "DAINIPPON SCREEN CORPORATE",
+       [3]byte{0, 208, 26}:    "URMET  TLC S.P.A.",
+       [3]byte{0, 208, 27}:    "MIMAKI ENGINEERING CO., LTD.",
+       [3]byte{0, 208, 28}:    "SBS TECHNOLOGIES,",
+       [3]byte{0, 208, 29}:    "FURUNO ELECTRIC CO., LTD.",
+       [3]byte{0, 208, 30}:    "PINGTEL CORP.",
+       [3]byte{0, 208, 31}:    "Senetas Corporation Ltd",
+       [3]byte{0, 208, 32}:    "AIM SYSTEM, INC.",
+       [3]byte{0, 208, 33}:    "REGENT ELECTRONICS CORP.",
+       [3]byte{0, 208, 34}:    "INCREDIBLE TECHNOLOGIES, INC.",
+       [3]byte{0, 208, 35}:    "INFORTREND TECHNOLOGY, INC.",
+       [3]byte{0, 208, 36}:    "Cognex Corporation",
+       [3]byte{0, 208, 37}:    "XROSSTECH, INC.",
+       [3]byte{0, 208, 38}:    "HIRSCHMANN AUSTRIA GMBH",
+       [3]byte{0, 208, 39}:    "APPLIED AUTOMATION, INC.",
+       [3]byte{0, 208, 40}:    "Harmonic, Inc",
+       [3]byte{0, 208, 41}:    "WAKEFERN FOOD CORPORATION",
+       [3]byte{0, 208, 42}:    "Voxent Systems Ltd.",
+       [3]byte{0, 208, 43}:    "JETCELL, INC.",
+       [3]byte{0, 208, 44}:    "CAMPBELL SCIENTIFIC, INC.",
+       [3]byte{0, 208, 45}:    "ADEMCO",
+       [3]byte{0, 208, 46}:    "COMMUNICATION AUTOMATION CORP.",
+       [3]byte{0, 208, 47}:    "VLSI TECHNOLOGY INC.",
+       [3]byte{0, 208, 48}:    "Safetran Systems Corp",
+       [3]byte{0, 208, 49}:    "INDUSTRIAL LOGIC CORPORATION",
+       [3]byte{0, 208, 50}:    "YANO ELECTRIC CO., LTD.",
+       [3]byte{0, 208, 51}:    "DALIAN DAXIAN NETWORK",
+       [3]byte{0, 208, 52}:    "ORMEC SYSTEMS CORP.",
+       [3]byte{0, 208, 53}:    "BEHAVIOR TECH. COMPUTER CORP.",
+       [3]byte{0, 208, 54}:    "TECHNOLOGY ATLANTA CORP.",
+       [3]byte{0, 208, 55}:    "ARRIS Group, Inc.",
+       [3]byte{0, 208, 56}:    "FIVEMERE, LTD.",
+       [3]byte{0, 208, 57}:    "UTILICOM, INC.",
+       [3]byte{0, 208, 58}:    "ZONEWORX, INC.",
+       [3]byte{0, 208, 59}:    "VISION PRODUCTS PTY. LTD.",
+       [3]byte{0, 208, 60}:    "Vieo, Inc.",
+       [3]byte{0, 208, 61}:    "GALILEO TECHNOLOGY, LTD.",
+       [3]byte{0, 208, 62}:    "ROCKETCHIPS, INC.",
+       [3]byte{0, 208, 63}:    "AMERICAN COMMUNICATION",
+       [3]byte{0, 208, 64}:    "SYSMATE CO., LTD.",
+       [3]byte{0, 208, 65}:    "AMIGO TECHNOLOGY CO., LTD.",
+       [3]byte{0, 208, 66}:    "MAHLO GMBH & CO. UG",
+       [3]byte{0, 208, 67}:    "ZONAL RETAIL DATA SYSTEMS",
+       [3]byte{0, 208, 68}:    "ALIDIAN NETWORKS, INC.",
+       [3]byte{0, 208, 69}:    "KVASER AB",
+       [3]byte{0, 208, 70}:    "DOLBY LABORATORIES, INC.",
+       [3]byte{0, 208, 71}:    "XN TECHNOLOGIES",
+       [3]byte{0, 208, 72}:    "ECTON, INC.",
+       [3]byte{0, 208, 73}:    "IMPRESSTEK CO., LTD.",
+       [3]byte{0, 208, 74}:    "PRESENCE TECHNOLOGY GMBH",
+       [3]byte{0, 208, 75}:    "LA CIE GROUP S.A.",
+       [3]byte{0, 208, 76}:    "EUROTEL TELECOM LTD.",
+       [3]byte{0, 208, 77}:    "DIV OF RESEARCH & STATISTICS",
+       [3]byte{0, 208, 78}:    "LOGIBAG",
+       [3]byte{0, 208, 79}:    "BITRONICS, INC.",
+       [3]byte{0, 208, 80}:    "ISKRATEL",
+       [3]byte{0, 208, 81}:    "O2 MICRO, INC.",
+       [3]byte{0, 208, 82}:    "ASCEND COMMUNICATIONS, INC.",
+       [3]byte{0, 208, 83}:    "CONNECTED SYSTEMS",
+       [3]byte{0, 208, 84}:    "SAS INSTITUTE INC.",
+       [3]byte{0, 208, 85}:    "KATHREIN-WERKE KG",
+       [3]byte{0, 208, 86}:    "SOMAT CORPORATION",
+       [3]byte{0, 208, 87}:    "ULTRAK, INC.",
+       [3]byte{0, 208, 88}:    "Cisco Systems, Inc",
+       [3]byte{0, 208, 89}:    "AMBIT MICROSYSTEMS CORP.",
+       [3]byte{0, 208, 90}:    "SYMBIONICS, LTD.",
+       [3]byte{0, 208, 91}:    "ACROLOOP MOTION CONTROL",
+       [3]byte{0, 208, 92}:    "KATHREIN TechnoTrend GmbH",
+       [3]byte{0, 208, 93}:    "INTELLIWORXX, INC.",
+       [3]byte{0, 208, 94}:    "STRATABEAM TECHNOLOGY, INC.",
+       [3]byte{0, 208, 95}:    "VALCOM, INC.",
+       [3]byte{0, 208, 96}:    "Panasonic Europe Ltd.",
+       [3]byte{0, 208, 97}:    "TREMON ENTERPRISES CO., LTD.",
+       [3]byte{0, 208, 98}:    "DIGIGRAM",
+       [3]byte{0, 208, 99}:    "Cisco Systems, Inc",
+       [3]byte{0, 208, 100}:   "MULTITEL",
+       [3]byte{0, 208, 101}:   "TOKO ELECTRIC",
+       [3]byte{0, 208, 102}:   "WINTRISS ENGINEERING CORP.",
+       [3]byte{0, 208, 103}:   "CAMPIO COMMUNICATIONS",
+       [3]byte{0, 208, 104}:   "IWILL CORPORATION",
+       [3]byte{0, 208, 105}:   "TECHNOLOGIC SYSTEMS",
+       [3]byte{0, 208, 106}:   "LINKUP SYSTEMS CORPORATION",
+       [3]byte{0, 208, 107}:   "SR TELECOM INC.",
+       [3]byte{0, 208, 108}:   "SHAREWAVE, INC.",
+       [3]byte{0, 208, 109}:   "ACRISON, INC.",
+       [3]byte{0, 208, 110}:   "TRENDVIEW RECORDERS LTD.",
+       [3]byte{0, 208, 111}:   "KMC CONTROLS",
+       [3]byte{0, 208, 112}:   "LONG WELL ELECTRONICS CORP.",
+       [3]byte{0, 208, 113}:   "ECHELON CORP.",
+       [3]byte{0, 208, 114}:   "BROADLOGIC",
+       [3]byte{0, 208, 115}:   "ACN ADVANCED COMMUNICATIONS",
+       [3]byte{0, 208, 116}:   "TAQUA SYSTEMS, INC.",
+       [3]byte{0, 208, 117}:   "ALARIS MEDICAL SYSTEMS, INC.",
+       [3]byte{0, 208, 118}:   "Bank of America",
+       [3]byte{0, 208, 119}:   "LUCENT TECHNOLOGIES",
+       [3]byte{0, 208, 120}:   "Eltex of Sweden AB",
+       [3]byte{0, 208, 121}:   "Cisco Systems, Inc",
+       [3]byte{0, 208, 122}:   "AMAQUEST COMPUTER CORP.",
+       [3]byte{0, 208, 123}:   "COMCAM INTERNATIONAL INC",
+       [3]byte{0, 208, 124}:   "KOYO ELECTRONICS INC. CO.,LTD.",
+       [3]byte{0, 208, 125}:   "COSINE COMMUNICATIONS",
+       [3]byte{0, 208, 126}:   "KEYCORP LTD.",
+       [3]byte{0, 208, 127}:   "STRATEGY & TECHNOLOGY, LIMITED",
+       [3]byte{0, 208, 128}:   "EXABYTE CORPORATION",
+       [3]byte{0, 208, 129}:   "RTD Embedded Technologies, Inc.",
+       [3]byte{0, 208, 130}:   "IOWAVE INC.",
+       [3]byte{0, 208, 131}:   "INVERTEX, INC.",
+       [3]byte{0, 208, 132}:   "NEXCOMM SYSTEMS, INC.",
+       [3]byte{0, 208, 133}:   "OTIS ELEVATOR COMPANY",
+       [3]byte{0, 208, 134}:   "FOVEON, INC.",
+       [3]byte{0, 208, 135}:   "MICROFIRST INC.",
+       [3]byte{0, 208, 136}:   "ARRIS Group, Inc.",
+       [3]byte{0, 208, 137}:   "DYNACOLOR, INC.",
+       [3]byte{0, 208, 138}:   "PHOTRON USA",
+       [3]byte{0, 208, 139}:   "ADVA Optical Networking Ltd.",
+       [3]byte{0, 208, 140}:   "GENOA TECHNOLOGY, INC.",
+       [3]byte{0, 208, 141}:   "PHOENIX GROUP, INC.",
+       [3]byte{0, 208, 142}:   "Grass Valley, A Belden Brand",
+       [3]byte{0, 208, 143}:   "ARDENT TECHNOLOGIES, INC.",
+       [3]byte{0, 208, 144}:   "Cisco Systems, Inc",
+       [3]byte{0, 208, 145}:   "SMARTSAN SYSTEMS, INC.",
+       [3]byte{0, 208, 146}:   "GLENAYRE WESTERN MULTIPLEX",
+       [3]byte{0, 208, 147}:   "TQ - COMPONENTS GMBH",
+       [3]byte{0, 208, 148}:   "Seeion Control LLC",
+       [3]byte{0, 208, 149}:   "Alcatel-Lucent Enterprise",
+       [3]byte{0, 208, 150}:   "3COM EUROPE LTD.",
+       [3]byte{0, 208, 151}:   "Cisco Systems, Inc",
+       [3]byte{0, 208, 152}:   "Photon Dynamics Canada Inc.",
+       [3]byte{0, 208, 153}:   "Elcard Wireless Systems Oy",
+       [3]byte{0, 208, 154}:   "FILANET CORPORATION",
+       [3]byte{0, 208, 155}:   "SPECTEL LTD.",
+       [3]byte{0, 208, 156}:   "KAPADIA COMMUNICATIONS",
+       [3]byte{0, 208, 157}:   "VERIS INDUSTRIES",
+       [3]byte{0, 208, 158}:   "2Wire Inc",
+       [3]byte{0, 208, 159}:   "NOVTEK TEST SYSTEMS",
+       [3]byte{0, 208, 160}:   "MIPS DENMARK",
+       [3]byte{0, 208, 161}:   "OSKAR VIERLING GMBH + CO. KG",
+       [3]byte{0, 208, 162}:   "INTEGRATED DEVICE",
+       [3]byte{0, 208, 163}:   "VOCAL DATA, INC.",
+       [3]byte{0, 208, 164}:   "ALANTRO COMMUNICATIONS",
+       [3]byte{0, 208, 165}:   "AMERICAN ARIUM",
+       [3]byte{0, 208, 166}:   "LANBIRD TECHNOLOGY CO., LTD.",
+       [3]byte{0, 208, 167}:   "TOKYO SOKKI KENKYUJO CO., LTD.",
+       [3]byte{0, 208, 168}:   "NETWORK ENGINES, INC.",
+       [3]byte{0, 208, 169}:   "SHINANO KENSHI CO., LTD.",
+       [3]byte{0, 208, 170}:   "CHASE COMMUNICATIONS",
+       [3]byte{0, 208, 171}:   "DELTAKABEL TELECOM CV",
+       [3]byte{0, 208, 172}:   "Commscope, Inc",
+       [3]byte{0, 208, 173}:   "TL INDUSTRIES",
+       [3]byte{0, 208, 174}:   "ORESIS COMMUNICATIONS, INC.",
+       [3]byte{0, 208, 175}:   "CUTLER-HAMMER, INC.",
+       [3]byte{0, 208, 176}:   "BITSWITCH LTD.",
+       [3]byte{0, 208, 177}:   "OMEGA ELECTRONICS SA",
+       [3]byte{0, 208, 178}:   "Xiotech Corporation",
+       [3]byte{0, 208, 179}:   "DRS Technologies Canada Ltd",
+       [3]byte{0, 208, 180}:   "KATSUJIMA CO., LTD.",
+       [3]byte{0, 208, 181}:   "IPricot formerly DotCom",
+       [3]byte{0, 208, 182}:   "CRESCENT NETWORKS, INC.",
+       [3]byte{0, 208, 183}:   "Intel Corporation",
+       [3]byte{0, 208, 184}:   "Iomega Corporation",
+       [3]byte{0, 208, 185}:   "MICROTEK INTERNATIONAL, INC.",
+       [3]byte{0, 208, 186}:   "Cisco Systems, Inc",
+       [3]byte{0, 208, 187}:   "Cisco Systems, Inc",
+       [3]byte{0, 208, 188}:   "Cisco Systems, Inc",
+       [3]byte{0, 208, 189}:   "Lattice Semiconductor Corp. (LPA)",
+       [3]byte{0, 208, 190}:   "EMUTEC INC.",
+       [3]byte{0, 208, 191}:   "PIVOTAL TECHNOLOGIES",
+       [3]byte{0, 208, 192}:   "Cisco Systems, Inc",
+       [3]byte{0, 208, 193}:   "HARMONIC DATA SYSTEMS, LTD.",
+       [3]byte{0, 208, 194}:   "BALTHAZAR TECHNOLOGY AB",
+       [3]byte{0, 208, 195}:   "VIVID TECHNOLOGY PTE, LTD.",
+       [3]byte{0, 208, 196}:   "TERATECH CORPORATION",
+       [3]byte{0, 208, 197}:   "COMPUTATIONAL SYSTEMS, INC.",
+       [3]byte{0, 208, 198}:   "THOMAS & BETTS CORP.",
+       [3]byte{0, 208, 199}:   "PATHWAY, INC.",
+       [3]byte{0, 208, 200}:   "Prevas A/S",
+       [3]byte{0, 208, 201}:   "ADVANTECH CO., LTD.",
+       [3]byte{0, 208, 202}:   "Intrinsyc Software International Inc.",
+       [3]byte{0, 208, 203}:   "DASAN CO., LTD.",
+       [3]byte{0, 208, 204}:   "TECHNOLOGIES LYRE INC.",
+       [3]byte{0, 208, 205}:   "ATAN TECHNOLOGY INC.",
+       [3]byte{0, 208, 206}:   "ASYST ELECTRONIC",
+       [3]byte{0, 208, 207}:   "MORETON BAY",
+       [3]byte{0, 208, 208}:   "ZHONGXING TELECOM LTD.",
+       [3]byte{0, 208, 209}:   "Sycamore Networks",
+       [3]byte{0, 208, 210}:   "EPILOG CORPORATION",
+       [3]byte{0, 208, 211}:   "Cisco Systems, Inc",
+       [3]byte{0, 208, 212}:   "V-BITS, INC.",
+       [3]byte{0, 208, 213}:   "GRUNDIG AG",
+       [3]byte{0, 208, 214}:   "AETHRA TELECOMUNICAZIONI",
+       [3]byte{0, 208, 215}:   "B2C2, INC.",
+       [3]byte{0, 208, 216}:   "3Com Corporation",
+       [3]byte{0, 208, 217}:   "DEDICATED MICROCOMPUTERS",
+       [3]byte{0, 208, 218}:   "TAICOM DATA SYSTEMS CO., LTD.",
+       [3]byte{0, 208, 219}:   "MCQUAY INTERNATIONAL",
+       [3]byte{0, 208, 220}:   "MODULAR MINING SYSTEMS, INC.",
+       [3]byte{0, 208, 221}:   "SUNRISE TELECOM, INC.",
+       [3]byte{0, 208, 222}:   "PHILIPS MULTIMEDIA NETWORK",
+       [3]byte{0, 208, 223}:   "KUZUMI ELECTRONICS, INC.",
+       [3]byte{0, 208, 224}:   "DOOIN ELECTRONICS CO.",
+       [3]byte{0, 208, 225}:   "AVIONITEK ISRAEL INC.",
+       [3]byte{0, 208, 226}:   "MRT MICRO, INC.",
+       [3]byte{0, 208, 227}:   "ELE-CHEM ENGINEERING CO., LTD.",
+       [3]byte{0, 208, 228}:   "Cisco Systems, Inc",
+       [3]byte{0, 208, 229}:   "SOLIDUM SYSTEMS CORP.",
+       [3]byte{0, 208, 230}:   "IBOND INC.",
+       [3]byte{0, 208, 231}:   "VCON TELECOMMUNICATION LTD.",
+       [3]byte{0, 208, 232}:   "MAC SYSTEM CO., LTD.",
+       [3]byte{0, 208, 233}:   "Advantage Century Telecommunication Corp.",
+       [3]byte{0, 208, 234}:   "NEXTONE COMMUNICATIONS, INC.",
+       [3]byte{0, 208, 235}:   "LIGHTERA NETWORKS, INC.",
+       [3]byte{0, 208, 236}:   "NAKAYO Inc",
+       [3]byte{0, 208, 237}:   "XIOX",
+       [3]byte{0, 208, 238}:   "DICTAPHONE CORPORATION",
+       [3]byte{0, 208, 239}:   "IGT",
+       [3]byte{0, 208, 240}:   "CONVISION TECHNOLOGY GMBH",
+       [3]byte{0, 208, 241}:   "SEGA ENTERPRISES, LTD.",
+       [3]byte{0, 208, 242}:   "MONTEREY NETWORKS",
+       [3]byte{0, 208, 243}:   "SOLARI DI UDINE SPA",
+       [3]byte{0, 208, 244}:   "CARINTHIAN TECH INSTITUTE",
+       [3]byte{0, 208, 245}:   "ORANGE MICRO, INC.",
+       [3]byte{0, 208, 246}:   "Nokia",
+       [3]byte{0, 208, 247}:   "NEXT NETS CORPORATION",
+       [3]byte{0, 208, 248}:   "FUJIAN STAR TERMINAL",
+       [3]byte{0, 208, 249}:   "ACUTE COMMUNICATIONS CORP.",
+       [3]byte{0, 208, 250}:   "Thales e-Security Ltd.",
+       [3]byte{0, 208, 251}:   "TEK MICROSYSTEMS, INCORPORATED",
+       [3]byte{0, 208, 252}:   "GRANITE MICROSYSTEMS",
+       [3]byte{0, 208, 253}:   "OPTIMA TELE.COM, INC.",
+       [3]byte{0, 208, 254}:   "ASTRAL POINT",
+       [3]byte{0, 208, 255}:   "Cisco Systems, Inc",
+       [3]byte{0, 209, 28}:    "ACETEL",
+       [3]byte{0, 211, 24}:    "SPG Controls",
+       [3]byte{0, 211, 141}:   "Hotel Technology Next Generation",
+       [3]byte{0, 214, 50}:    "GE Energy",
+       [3]byte{0, 215, 143}:   "Cisco Systems, Inc",
+       [3]byte{0, 217, 209}:   "Sony Interactive Entertainment Inc.",
+       [3]byte{0, 218, 85}:    "Cisco Systems, Inc",
+       [3]byte{0, 219, 30}:    "Albedo Telecom SL",
+       [3]byte{0, 219, 69}:    "THAMWAY CO.,LTD.",
+       [3]byte{0, 219, 112}:   "Apple, Inc.",
+       [3]byte{0, 219, 223}:   "Intel Corporate",
+       [3]byte{0, 221, 0}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 1}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 2}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 3}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 4}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 5}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 6}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 7}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 8}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 9}:     "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 10}:    "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 11}:    "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 12}:    "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 13}:    "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 14}:    "UNGERMANN-BASS INC.",
+       [3]byte{0, 221, 15}:    "UNGERMANN-BASS INC.",
+       [3]byte{0, 222, 251}:   "Cisco Systems, Inc",
+       [3]byte{0, 224, 0}:     "FUJITSU LIMITED",
+       [3]byte{0, 224, 1}:     "STRAND LIGHTING LIMITED",
+       [3]byte{0, 224, 2}:     "CROSSROADS SYSTEMS, INC.",
+       [3]byte{0, 224, 3}:     "NOKIA WIRELESS BUSINESS COMMUN",
+       [3]byte{0, 224, 4}:     "PMC-SIERRA, INC.",
+       [3]byte{0, 224, 5}:     "TECHNICAL CORP.",
+       [3]byte{0, 224, 6}:     "SILICON INTEGRATED SYS. CORP.",
+       [3]byte{0, 224, 7}:     "Avaya ECS Ltd",
+       [3]byte{0, 224, 8}:     "AMAZING CONTROLS! INC.",
+       [3]byte{0, 224, 9}:     "MARATHON TECHNOLOGIES CORP.",
+       [3]byte{0, 224, 10}:    "DIBA, INC.",
+       [3]byte{0, 224, 11}:    "ROOFTOP COMMUNICATIONS CORP.",
+       [3]byte{0, 224, 12}:    "MOTOROLA",
+       [3]byte{0, 224, 13}:    "RADIANT SYSTEMS",
+       [3]byte{0, 224, 14}:    "AVALON IMAGING SYSTEMS, INC.",
+       [3]byte{0, 224, 15}:    "Shanghai Baud Data Communication Co.,Ltd.",
+       [3]byte{0, 224, 16}:    "HESS SB-AUTOMATENBAU GmbH",
+       [3]byte{0, 224, 17}:    "UNIDEN CORPORATION",
+       [3]byte{0, 224, 18}:    "PLUTO TECHNOLOGIES INTERNATIONAL INC.",
+       [3]byte{0, 224, 19}:    "EASTERN ELECTRONIC CO., LTD.",
+       [3]byte{0, 224, 20}:    "Cisco Systems, Inc",
+       [3]byte{0, 224, 21}:    "HEIWA CORPORATION",
+       [3]byte{0, 224, 22}:    "RAPID CITY COMMUNICATIONS",
+       [3]byte{0, 224, 23}:    "EXXACT GmbH",
+       [3]byte{0, 224, 24}:    "ASUSTek COMPUTER INC.",
+       [3]byte{0, 224, 25}:    "ING. GIORDANO ELETTRONICA",
+       [3]byte{0, 224, 26}:    "COMTEC SYSTEMS. CO., LTD.",
+       [3]byte{0, 224, 27}:    "SPHERE COMMUNICATIONS, INC.",
+       [3]byte{0, 224, 28}:    "Cradlepoint, Inc",
+       [3]byte{0, 224, 29}:    "WebTV NETWORKS, INC.",
+       [3]byte{0, 224, 30}:    "Cisco Systems, Inc",
+       [3]byte{0, 224, 31}:    "AVIDIA Systems, Inc.",
+       [3]byte{0, 224, 32}:    "TECNOMEN OY",
+       [3]byte{0, 224, 33}:    "FREEGATE CORP.",
+       [3]byte{0, 224, 34}:    "Analog Devices, Inc.",
+       [3]byte{0, 224, 35}:    "TELRAD",
+       [3]byte{0, 224, 36}:    "GADZOOX NETWORKS",
+       [3]byte{0, 224, 37}:    "dit Co., Ltd.",
+       [3]byte{0, 224, 38}:    "Redlake MASD LLC",
+       [3]byte{0, 224, 39}:    "DUX, INC.",
+       [3]byte{0, 224, 40}:    "APTIX CORPORATION",
+       [3]byte{0, 224, 41}:    "STANDARD MICROSYSTEMS CORP.",
+       [3]byte{0, 224, 42}:    "TANDBERG TELEVISION AS",
+       [3]byte{0, 224, 43}:    "Extreme Networks, Inc.",
+       [3]byte{0, 224, 44}:    "AST COMPUTER",
+       [3]byte{0, 224, 45}:    "InnoMediaLogic, Inc.",
+       [3]byte{0, 224, 46}:    "SPC ELECTRONICS CORPORATION",
+       [3]byte{0, 224, 47}:    "MCNS HOLDINGS, L.P.",
+       [3]byte{0, 224, 48}:    "MELITA INTERNATIONAL CORP.",
+       [3]byte{0, 224, 49}:    "HAGIWARA ELECTRIC CO., LTD.",
+       [3]byte{0, 224, 50}:    "MISYS FINANCIAL SYSTEMS, LTD.",
+       [3]byte{0, 224, 51}:    "E.E.P.D. GmbH",
+       [3]byte{0, 224, 52}:    "Cisco Systems, Inc",
+       [3]byte{0, 224, 53}:    "Artesyn Embedded Technologies",
+       [3]byte{0, 224, 54}:    "PIONEER CORPORATION",
+       [3]byte{0, 224, 55}:    "CENTURY CORPORATION",
+       [3]byte{0, 224, 56}:    "PROXIMA CORPORATION",
+       [3]byte{0, 224, 57}:    "PARADYNE CORP.",
+       [3]byte{0, 224, 58}:    "Cabletron Systems, Inc.",
+       [3]byte{0, 224, 59}:    "PROMINET CORPORATION",
+       [3]byte{0, 224, 60}:    "AdvanSys",
+       [3]byte{0, 224, 61}:    "FOCON ELECTRONIC SYSTEMS A/S",
+       [3]byte{0, 224, 62}:    "ALFATECH, INC.",
+       [3]byte{0, 224, 63}:    "JATON CORPORATION",
+       [3]byte{0, 224, 64}:    "DeskStation Technology, Inc.",
+       [3]byte{0, 224, 65}:    "CSPI",
+       [3]byte{0, 224, 66}:    "Pacom Systems Ltd.",
+       [3]byte{0, 224, 67}:    "VitalCom",
+       [3]byte{0, 224, 68}:    "LSICS CORPORATION",
+       [3]byte{0, 224, 69}:    "TOUCHWAVE, INC.",
+       [3]byte{0, 224, 70}:    "BENTLY NEVADA CORP.",
+       [3]byte{0, 224, 71}:    "InFocus Corporation",
+       [3]byte{0, 224, 72}:    "SDL COMMUNICATIONS, INC.",
+       [3]byte{0, 224, 73}:    "MICROWI ELECTRONIC GmbH",
+       [3]byte{0, 224, 74}:    "ZX Technologies, Inc",
+       [3]byte{0, 224, 75}:    "JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH",
+       [3]byte{0, 224, 76}:    "REALTEK SEMICONDUCTOR CORP.",
+       [3]byte{0, 224, 77}:    "INTERNET INITIATIVE JAPAN, INC",
+       [3]byte{0, 224, 78}:    "SANYO DENKI CO., LTD.",
+       [3]byte{0, 224, 79}:    "Cisco Systems, Inc",
+       [3]byte{0, 224, 80}:    "EXECUTONE INFORMATION SYSTEMS, INC.",
+       [3]byte{0, 224, 81}:    "TALX CORPORATION",
+       [3]byte{0, 224, 82}:    "Brocade Communications Systems, Inc.",
+       [3]byte{0, 224, 83}:    "CELLPORT LABS, INC.",
+       [3]byte{0, 224, 84}:    "KODAI HITEC CO., LTD.",
+       [3]byte{0, 224, 85}:    "INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A.",
+       [3]byte{0, 224, 86}:    "HOLONTECH CORPORATION",
+       [3]byte{0, 224, 87}:    "HAN MICROTELECOM. CO., LTD.",
+       [3]byte{0, 224, 88}:    "PHASE ONE DENMARK A/S",
+       [3]byte{0, 224, 89}:    "CONTROLLED ENVIRONMENTS, LTD.",
+       [3]byte{0, 224, 90}:    "GALEA NETWORK SECURITY",
+       [3]byte{0, 224, 91}:    "WEST END SYSTEMS CORP.",
+       [3]byte{0, 224, 92}:    "Panasonic Healthcare Co., Ltd.",
+       [3]byte{0, 224, 93}:    "UNITEC CO., LTD.",
+       [3]byte{0, 224, 94}:    "JAPAN AVIATION ELECTRONICS INDUSTRY, LTD.",
+       [3]byte{0, 224, 95}:    "e-Net, Inc.",
+       [3]byte{0, 224, 96}:    "SHERWOOD",
+       [3]byte{0, 224, 97}:    "EdgePoint Networks, Inc.",
+       [3]byte{0, 224, 98}:    "HOST ENGINEERING",
+       [3]byte{0, 224, 99}:    "Cabletron Systems, Inc.",
+       [3]byte{0, 224, 100}:   "SAMSUNG ELECTRONICS",
+       [3]byte{0, 224, 101}:   "OPTICAL ACCESS INTERNATIONAL",
+       [3]byte{0, 224, 102}:   "ProMax Systems, Inc.",
+       [3]byte{0, 224, 103}:   "eac AUTOMATION-CONSULTING GmbH",
+       [3]byte{0, 224, 104}:   "MERRIMAC SYSTEMS INC.",
+       [3]byte{0, 224, 105}:   "JAYCOR",
+       [3]byte{0, 224, 106}:   "KAPSCH AG",
+       [3]byte{0, 224, 107}:   "W&G SPECIAL PRODUCTS",
+       [3]byte{0, 224, 108}:   "Ultra Electronics Command & Control Systems",
+       [3]byte{0, 224, 109}:   "COMPUWARE CORPORATION",
+       [3]byte{0, 224, 110}:   "FAR SYSTEMS S.p.A.",
+       [3]byte{0, 224, 111}:   "ARRIS Group, Inc.",
+       [3]byte{0, 224, 112}:   "DH TECHNOLOGY",
+       [3]byte{0, 224, 113}:   "EPIS MICROCOMPUTER",
+       [3]byte{0, 224, 114}:   "LYNK",
+       [3]byte{0, 224, 115}:   "NATIONAL AMUSEMENT NETWORK, INC.",
+       [3]byte{0, 224, 116}:   "TIERNAN COMMUNICATIONS, INC.",
+       [3]byte{0, 224, 117}:   "Verilink Corporation",
+       [3]byte{0, 224, 118}:   "DEVELOPMENT CONCEPTS, INC.",
+       [3]byte{0, 224, 119}:   "WEBGEAR, INC.",
+       [3]byte{0, 224, 120}:   "BERKELEY NETWORKS",
+       [3]byte{0, 224, 121}:   "A.T.N.R.",
+       [3]byte{0, 224, 122}:   "MIKRODIDAKT AB",
+       [3]byte{0, 224, 123}:   "BAY NETWORKS",
+       [3]byte{0, 224, 124}:   "METTLER-TOLEDO, INC.",
+       [3]byte{0, 224, 125}:   "NETRONIX, INC.",
+       [3]byte{0, 224, 126}:   "WALT DISNEY IMAGINEERING",
+       [3]byte{0, 224, 127}:   "LOGISTISTEM s.r.l.",
+       [3]byte{0, 224, 128}:   "CONTROL RESOURCES CORPORATION",
+       [3]byte{0, 224, 129}:   "TYAN COMPUTER CORP.",
+       [3]byte{0, 224, 130}:   "ANERMA",
+       [3]byte{0, 224, 131}:   "JATO TECHNOLOGIES, INC.",
+       [3]byte{0, 224, 132}:   "COMPULITE R&D",
+       [3]byte{0, 224, 133}:   "GLOBAL MAINTECH, INC.",
+       [3]byte{0, 224, 134}:   "Emerson Network Power, Avocent Division",
+       [3]byte{0, 224, 135}:   "LeCroy - Networking Productions Division",
+       [3]byte{0, 224, 136}:   "LTX-Credence CORPORATION",
+       [3]byte{0, 224, 137}:   "ION Networks, Inc.",
+       [3]byte{0, 224, 138}:   "GEC AVERY, LTD.",
+       [3]byte{0, 224, 139}:   "QLogic Corporation",
+       [3]byte{0, 224, 140}:   "NEOPARADIGM LABS, INC.",
+       [3]byte{0, 224, 141}:   "PRESSURE SYSTEMS, INC.",
+       [3]byte{0, 224, 142}:   "UTSTARCOM",
+       [3]byte{0, 224, 143}:   "Cisco Systems, Inc",
+       [3]byte{0, 224, 144}:   "BECKMAN LAB. AUTOMATION DIV.",
+       [3]byte{0, 224, 145}:   "LG Electronics",
+       [3]byte{0, 224, 146}:   "ADMTEK INCORPORATED",
+       [3]byte{0, 224, 147}:   "ACKFIN NETWORKS",
+       [3]byte{0, 224, 148}:   "OSAI SRL",
+       [3]byte{0, 224, 149}:   "ADVANCED-VISION TECHNOLGIES CORP.",
+       [3]byte{0, 224, 150}:   "SHIMADZU CORPORATION",
+       [3]byte{0, 224, 151}:   "CARRIER ACCESS CORPORATION",
+       [3]byte{0, 224, 152}:   "AboCom",
+       [3]byte{0, 224, 153}:   "SAMSON AG",
+       [3]byte{0, 224, 154}:   "Positron Inc.",
+       [3]byte{0, 224, 155}:   "ENGAGE NETWORKS, INC.",
+       [3]byte{0, 224, 156}:   "MII",
+       [3]byte{0, 224, 157}:   "SARNOFF CORPORATION",
+       [3]byte{0, 224, 158}:   "Quantum Corporation",
+       [3]byte{0, 224, 159}:   "PIXEL VISION",
+       [3]byte{0, 224, 160}:   "WILTRON CO.",
+       [3]byte{0, 224, 161}:   "HIMA PAUL HILDEBRANDT GmbH Co. KG",
+       [3]byte{0, 224, 162}:   "MICROSLATE INC.",
+       [3]byte{0, 224, 163}:   "Cisco Systems, Inc",
+       [3]byte{0, 224, 164}:   "ESAOTE S.p.A.",
+       [3]byte{0, 224, 165}:   "ComCore Semiconductor, Inc.",
+       [3]byte{0, 224, 166}:   "TELOGY NETWORKS, INC.",
+       [3]byte{0, 224, 167}:   "IPC INFORMATION SYSTEMS, INC.",
+       [3]byte{0, 224, 168}:   "SAT GmbH & Co.",
+       [3]byte{0, 224, 169}:   "FUNAI ELECTRIC CO., LTD.",
+       [3]byte{0, 224, 170}:   "ELECTROSONIC LTD.",
+       [3]byte{0, 224, 171}:   "DIMAT S.A.",
+       [3]byte{0, 224, 172}:   "MIDSCO, INC.",
+       [3]byte{0, 224, 173}:   "EES TECHNOLOGY, LTD.",
+       [3]byte{0, 224, 174}:   "XAQTI CORPORATION",
+       [3]byte{0, 224, 175}:   "GENERAL DYNAMICS INFORMATION SYSTEMS",
+       [3]byte{0, 224, 176}:   "Cisco Systems, Inc",
+       [3]byte{0, 224, 177}:   "Alcatel-Lucent Enterprise",
+       [3]byte{0, 224, 178}:   "TELMAX COMMUNICATIONS CORP.",
+       [3]byte{0, 224, 179}:   "EtherWAN Systems, Inc.",
+       [3]byte{0, 224, 180}:   "TECHNO SCOPE CO., LTD.",
+       [3]byte{0, 224, 181}:   "ARDENT COMMUNICATIONS CORP.",
+       [3]byte{0, 224, 182}:   "Entrada Networks",
+       [3]byte{0, 224, 183}:   "PI GROUP, LTD.",
+       [3]byte{0, 224, 184}:   "GATEWAY 2000",
+       [3]byte{0, 224, 185}:   "BYAS SYSTEMS",
+       [3]byte{0, 224, 186}:   "BERGHOF AUTOMATIONSTECHNIK GmbH",
+       [3]byte{0, 224, 187}:   "NBX CORPORATION",
+       [3]byte{0, 224, 188}:   "SYMON COMMUNICATIONS, INC.",
+       [3]byte{0, 224, 189}:   "INTERFACE SYSTEMS, INC.",
+       [3]byte{0, 224, 190}:   "GENROCO INTERNATIONAL, INC.",
+       [3]byte{0, 224, 191}:   "TORRENT NETWORKING TECHNOLOGIES CORP.",
+       [3]byte{0, 224, 192}:   "SEIWA ELECTRIC MFG. CO., LTD.",
+       [3]byte{0, 224, 193}:   "MEMOREX TELEX JAPAN, LTD.",
+       [3]byte{0, 224, 194}:   "NECSY S.p.A.",
+       [3]byte{0, 224, 195}:   "SAKAI SYSTEM DEVELOPMENT CORP.",
+       [3]byte{0, 224, 196}:   "HORNER ELECTRIC, INC.",
+       [3]byte{0, 224, 197}:   "BCOM ELECTRONICS INC.",
+       [3]byte{0, 224, 198}:   "LINK2IT, L.L.C.",
+       [3]byte{0, 224, 199}:   "EUROTECH SRL",
+       [3]byte{0, 224, 200}:   "VIRTUAL ACCESS, LTD.",
+       [3]byte{0, 224, 201}:   "AutomatedLogic Corporation",
+       [3]byte{0, 224, 202}:   "BEST DATA PRODUCTS",
+       [3]byte{0, 224, 203}:   "RESON, INC.",
+       [3]byte{0, 224, 204}:   "HERO SYSTEMS, LTD.",
+       [3]byte{0, 224, 205}:   "SAAB SENSIS CORPORATION",
+       [3]byte{0, 224, 206}:   "ARN",
+       [3]byte{0, 224, 207}:   "INTEGRATED DEVICE",
+       [3]byte{0, 224, 208}:   "NETSPEED, INC.",
+       [3]byte{0, 224, 209}:   "TELSIS LIMITED",
+       [3]byte{0, 224, 210}:   "VERSANET COMMUNICATIONS, INC.",
+       [3]byte{0, 224, 211}:   "DATENTECHNIK GmbH",
+       [3]byte{0, 224, 212}:   "EXCELLENT COMPUTER",
+       [3]byte{0, 224, 213}:   "Emulex Corporation",
+       [3]byte{0, 224, 214}:   "COMPUTER & COMMUNICATION RESEARCH LAB.",
+       [3]byte{0, 224, 215}:   "SUNSHINE ELECTRONICS, INC.",
+       [3]byte{0, 224, 216}:   "LANBit Computer, Inc.",
+       [3]byte{0, 224, 217}:   "TAZMO CO., LTD.",
+       [3]byte{0, 224, 218}:   "Alcatel-Lucent Enterprise",
+       [3]byte{0, 224, 219}:   "ViaVideo Communications, Inc.",
+       [3]byte{0, 224, 220}:   "NEXWARE CORP.",
+       [3]byte{0, 224, 221}:   "Zenith Electronics Corporation",
+       [3]byte{0, 224, 222}:   "DATAX NV",
+       [3]byte{0, 224, 223}:   "KEYMILE GmbH",
+       [3]byte{0, 224, 224}:   "SI ELECTRONICS, LTD.",
+       [3]byte{0, 224, 225}:   "G2 NETWORKS, INC.",
+       [3]byte{0, 224, 226}:   "INNOVA CORP.",
+       [3]byte{0, 224, 227}:   "SK-ELEKTRONIK GMBH",
+       [3]byte{0, 224, 228}:   "FANUC ROBOTICS NORTH AMERICA, Inc.",
+       [3]byte{0, 224, 229}:   "CINCO NETWORKS, INC.",
+       [3]byte{0, 224, 230}:   "INCAA Computers",
+       [3]byte{0, 224, 231}:   "RAYTHEON E-SYSTEMS, INC.",
+       [3]byte{0, 224, 232}:   "GRETACODER Data Systems AG",
+       [3]byte{0, 224, 233}:   "DATA LABS, INC.",
+       [3]byte{0, 224, 234}:   "INNOVAT COMMUNICATIONS, INC.",
+       [3]byte{0, 224, 235}:   "DIGICOM SYSTEMS, INCORPORATED",
+       [3]byte{0, 224, 236}:   "CELESTICA INC.",
+       [3]byte{0, 224, 237}:   "SILICOM, LTD.",
+       [3]byte{0, 224, 238}:   "MAREL HF",
+       [3]byte{0, 224, 239}:   "DIONEX",
+       [3]byte{0, 224, 240}:   "ABLER TECHNOLOGY, INC.",
+       [3]byte{0, 224, 241}:   "THAT CORPORATION",
+       [3]byte{0, 224, 242}:   "ARLOTTO COMNET, INC.",
+       [3]byte{0, 224, 243}:   "WebSprint Communications, Inc.",
+       [3]byte{0, 224, 244}:   "INSIDE Technology A/S",
+       [3]byte{0, 224, 245}:   "TELES AG",
+       [3]byte{0, 224, 246}:   "DECISION EUROPE",
+       [3]byte{0, 224, 247}:   "Cisco Systems, Inc",
+       [3]byte{0, 224, 248}:   "DICNA CONTROL AB",
+       [3]byte{0, 224, 249}:   "Cisco Systems, Inc",
+       [3]byte{0, 224, 250}:   "TRL TECHNOLOGY, LTD.",
+       [3]byte{0, 224, 251}:   "LEIGHTRONIX, INC.",
+       [3]byte{0, 224, 252}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 224, 253}:   "A-TREND TECHNOLOGY CO., LTD.",
+       [3]byte{0, 224, 254}:   "Cisco Systems, Inc",
+       [3]byte{0, 224, 255}:   "SECURITY DYNAMICS TECHNOLOGIES, Inc.",
+       [3]byte{0, 225, 109}:   "Cisco Systems, Inc",
+       [3]byte{0, 225, 117}:   "AK-Systems Ltd",
+       [3]byte{0, 225, 140}:   "Intel Corporate",
+       [3]byte{0, 227, 178}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 228, 0}:     "Sichuan Changhong Electric Ltd.",
+       [3]byte{0, 230, 102}:   "ARIMA Communications Corp.",
+       [3]byte{0, 230, 211}:   "NIXDORF COMPUTER CORP.",
+       [3]byte{0, 230, 232}:   "Netzin Technology Corporation,.Ltd.",
+       [3]byte{0, 232, 171}:   "Meggitt Training Systems, Inc.",
+       [3]byte{0, 235, 45}:    "Sony Mobile Communications AB",
+       [3]byte{0, 235, 213}:   "Cisco Systems, Inc",
+       [3]byte{0, 236, 10}:    "Xiaomi Communications Co Ltd",
+       [3]byte{0, 238, 189}:   "HTC Corporation",
+       [3]byte{0, 240, 81}:    "KWB Gmbh",
+       [3]byte{0, 242, 44}:    "Shanghai B-star Technology Co.,Ltd.",
+       [3]byte{0, 242, 139}:   "Cisco Systems, Inc",
+       [3]byte{0, 243, 219}:   "WOO Sports",
+       [3]byte{0, 244, 3}:     "Orbis Systems Oy",
+       [3]byte{0, 244, 111}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{0, 244, 185}:   "Apple, Inc.",
+       [3]byte{0, 246, 99}:    "Cisco Systems, Inc",
+       [3]byte{0, 247, 111}:   "Apple, Inc.",
+       [3]byte{0, 248, 28}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{0, 248, 44}:    "Cisco Systems, Inc",
+       [3]byte{0, 248, 96}:    "PT. Panggung Electric Citrabuana",
+       [3]byte{0, 248, 113}:   "DGS Denmark A/S",
+       [3]byte{0, 250, 59}:    "CLOOS ELECTRONIC GMBH",
+       [3]byte{0, 252, 88}:    "WebSilicon Ltd.",
+       [3]byte{0, 252, 112}:   "Intrepid Control Systems, Inc.",
+       [3]byte{0, 252, 139}:   "Amazon Technologies Inc.",
+       [3]byte{0, 252, 141}:   "Hitron Technologies. Inc",
+       [3]byte{0, 253, 69}:    "Hewlett Packard Enterprise",
+       [3]byte{0, 253, 76}:    "NEVATEC",
+       [3]byte{0, 254, 200}:   "Cisco Systems, Inc",
+       [3]byte{2, 7, 1}:       "RACAL-DATACOM",
+       [3]byte{2, 28, 124}:    "PERQ SYSTEMS CORPORATION",
+       [3]byte{2, 96, 134}:    "LOGIC REPLACEMENT TECH. LTD.",
+       [3]byte{2, 96, 140}:    "3COM CORPORATION",
+       [3]byte{2, 112, 1}:     "RACAL-DATACOM",
+       [3]byte{2, 112, 176}:   "M/A-COM INC. COMPANIES",
+       [3]byte{2, 112, 179}:   "DATA RECALL LTD.",
+       [3]byte{2, 157, 142}:   "CARDIAC RECORDERS, INC.",
+       [3]byte{2, 170, 60}:    "OLIVETTI TELECOMM SPA (OLTECO)",
+       [3]byte{2, 187, 1}:     "OCTOTHORPE CORP.",
+       [3]byte{2, 192, 140}:   "3COM CORPORATION",
+       [3]byte{2, 207, 28}:    "Communication Machinery Corporation",
+       [3]byte{2, 230, 211}:   "NIXDORF COMPUTER CORP.",
+       [3]byte{4, 2, 31}:      "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 3, 214}:     "Nintendo Co.,Ltd",
+       [3]byte{4, 4, 234}:     "Valens Semiconductor Ltd.",
+       [3]byte{4, 10, 131}:    "Alcatel-Lucent",
+       [3]byte{4, 10, 224}:    "XMIT AG COMPUTER NETWORKS",
+       [3]byte{4, 12, 206}:    "Apple, Inc.",
+       [3]byte{4, 14, 194}:    "ViewSonic Mobile China Limited",
+       [3]byte{4, 21, 82}:     "Apple, Inc.",
+       [3]byte{4, 24, 15}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{4, 24, 182}:    "Private",
+       [3]byte{4, 24, 214}:    "Ubiquiti Networks Inc.",
+       [3]byte{4, 25, 127}:    "Grasphere Japan",
+       [3]byte{4, 26, 4}:      "WaveIP",
+       [3]byte{4, 27, 109}:    "LG Electronics (Mobile Communications)",
+       [3]byte{4, 27, 148}:    "Host Mobility AB",
+       [3]byte{4, 27, 186}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{4, 29, 16}:     "Dream Ware Inc.",
+       [3]byte{4, 30, 100}:    "Apple, Inc.",
+       [3]byte{4, 30, 122}:    "DSPWorks",
+       [3]byte{4, 32, 154}:    "Panasonic Corporation AVC Networks Company",
+       [3]byte{4, 33, 76}:     "Insight Energy Ventures LLC",
+       [3]byte{4, 34, 52}:     "Wireless Standard Extensions",
+       [3]byte{4, 37, 197}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 38, 5}:      "GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH",
+       [3]byte{4, 38, 101}:    "Apple, Inc.",
+       [3]byte{4, 39, 88}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 42, 226}:    "Cisco Systems, Inc",
+       [3]byte{4, 43, 187}:    "PicoCELA, Inc.",
+       [3]byte{4, 45, 180}:    "First Property (Beijing) Co., Ltd Modern MOMA Branch",
+       [3]byte{4, 47, 86}:     "ATOCS (Shenzhen) LTD",
+       [3]byte{4, 49, 16}:     "Inspur Group Co., Ltd.",
+       [3]byte{4, 50, 244}:    "Partron",
+       [3]byte{4, 51, 137}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 54, 4}:      "Gyeyoung I&T",
+       [3]byte{4, 58, 13}:     "SM Optics S.r.l.",
+       [3]byte{4, 61, 152}:    "ChongQing QingJia Electronics CO.,LTD",
+       [3]byte{4, 65, 105}:    "GoPro",
+       [3]byte{4, 68, 161}:    "TELECON GALICIA,S.A.",
+       [3]byte{4, 70, 101}:    "Murata Manufacturing Co., Ltd.",
+       [3]byte{4, 72, 154}:    "Apple, Inc.",
+       [3]byte{4, 74, 80}:     "Ramaxel Technology (Shenzhen) limited company",
+       [3]byte{4, 75, 237}:    "Apple, Inc.",
+       [3]byte{4, 75, 255}:    "GuangZhou Hedy Digital Technology Co., Ltd",
+       [3]byte{4, 76, 239}:    "Fujian Sanao Technology Co.,Ltd",
+       [3]byte{4, 78, 6}:      "Ericsson AB",
+       [3]byte{4, 78, 90}:     "ARRIS Group, Inc.",
+       [3]byte{4, 79, 76}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 79, 139}:    "Adapteva, Inc.",
+       [3]byte{4, 79, 170}:    "Ruckus Wireless",
+       [3]byte{4, 80, 218}:    "Qiku Internet Network Scientific (Shenzhen) Co., Ltd",
+       [3]byte{4, 82, 199}:    "Bose Corporation",
+       [3]byte{4, 82, 243}:    "Apple, Inc.",
+       [3]byte{4, 83, 213}:    "Sysorex Global Holdings",
+       [3]byte{4, 84, 83}:     "Apple, Inc.",
+       [3]byte{4, 85, 202}:    "BriView (Xiamen) Corp.",
+       [3]byte{4, 86, 4}:      "Gionee Communication Equipment Co.,Ltd.",
+       [3]byte{4, 87, 47}:     "Sertel Electronics UK Ltd",
+       [3]byte{4, 88, 111}:    "Sichuan Whayer information industry Co.,LTD",
+       [3]byte{4, 90, 149}:    "Nokia Corporation",
+       [3]byte{4, 92, 6}:      "Zmodo Technology Corporation",
+       [3]byte{4, 92, 142}:    "gosund GROUP CO.,LTD",
+       [3]byte{4, 93, 75}:     "Sony Corporation",
+       [3]byte{4, 93, 86}:     "camtron industrial inc.",
+       [3]byte{4, 95, 167}:    "Shenzhen Yichen Technology Development Co.,LTD",
+       [3]byte{4, 97, 105}:    "MEDIA GLOBAL LINKS CO., LTD.",
+       [3]byte{4, 98, 115}:    "Cisco Systems, Inc",
+       [3]byte{4, 98, 215}:    "ALSTOM HYDRO FRANCE",
+       [3]byte{4, 99, 224}:    "Nome Oy",
+       [3]byte{4, 101, 101}:   "Testop",
+       [3]byte{4, 103, 133}:   "scemtec Hard- und Software fuer Mess- und Steuerungstechnik GmbH",
+       [3]byte{4, 105, 248}:   "Apple, Inc.",
+       [3]byte{4, 108, 157}:   "Cisco Systems, Inc",
+       [3]byte{4, 109, 66}:    "Bryston Ltd.",
+       [3]byte{4, 110, 2}:     "OpenRTLS Group",
+       [3]byte{4, 110, 73}:    "TaiYear Electronic Technology (Suzhou) Co., Ltd",
+       [3]byte{4, 112, 188}:   "Globalstar Inc.",
+       [3]byte{4, 113, 75}:    "IEEE Registration Authority",
+       [3]byte{4, 116, 161}:   "Aligera Equipamentos Digitais Ltda",
+       [3]byte{4, 117, 3}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 117, 245}:   "CSST",
+       [3]byte{4, 118, 110}:   "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{4, 120, 99}:    "Shanghai MXCHIP Information Technology Co., Ltd.",
+       [3]byte{4, 125, 80}:    "Shenzhen Kang Ying Technology Co.Ltd.",
+       [3]byte{4, 125, 123}:   "QUANTA COMPUTER INC.",
+       [3]byte{4, 126, 74}:    "moobox CO., Ltd.",
+       [3]byte{4, 129, 174}:   "Clack Corporation",
+       [3]byte{4, 132, 138}:   "7INOVA TECHNOLOGY LIMITED",
+       [3]byte{4, 136, 140}:   "Eifelwerk Butler Systeme GmbH",
+       [3]byte{4, 136, 226}:   "Beats Electronics LLC",
+       [3]byte{4, 138, 21}:    "Avaya Inc",
+       [3]byte{4, 139, 66}:    "Skspruce Technologies",
+       [3]byte{4, 140, 3}:     "ThinPAD Technology (Shenzhen)CO.,LTD",
+       [3]byte{4, 141, 56}:    "Netcore Technology Inc.",
+       [3]byte{4, 146, 238}:   "iway AG",
+       [3]byte{4, 148, 107}:   "TECNO MOBILE LIMITED",
+       [3]byte{4, 148, 161}:   "CATCH THE WIND INC",
+       [3]byte{4, 149, 115}:   "zte corporation",
+       [3]byte{4, 149, 230}:   "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{4, 150, 69}:    "WUXI SKY CHIP INTERCONNECTION TECHNOLOGY CO.,LTD.",
+       [3]byte{4, 151, 144}:   "Lartech telecom LLC",
+       [3]byte{4, 152, 243}:   "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{4, 153, 230}:   "Shenzhen Yoostar Technology Co., Ltd",
+       [3]byte{4, 155, 156}:   "Eadingcore  Intelligent Technology Co., Ltd.",
+       [3]byte{4, 156, 98}:    "BMT Medical Technology s.r.o.",
+       [3]byte{4, 159, 6}:     "Smobile Co., Ltd.",
+       [3]byte{4, 159, 129}:   "NetScout Systems, Inc.",
+       [3]byte{4, 159, 202}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 161, 81}:    "NETGEAR",
+       [3]byte{4, 163, 22}:    "Texas Instruments",
+       [3]byte{4, 163, 243}:   "Emicon",
+       [3]byte{4, 168, 42}:    "Nokia Corporation",
+       [3]byte{4, 176, 231}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 177, 103}:   "Xiaomi Communications Co Ltd",
+       [3]byte{4, 179, 182}:   "Seamap (UK) Ltd",
+       [3]byte{4, 180, 102}:   "BSP Co., Ltd.",
+       [3]byte{4, 182, 72}:    "ZENNER",
+       [3]byte{4, 186, 54}:    "Li Seng Technology Ltd",
+       [3]byte{4, 187, 249}:   "Pavilion Data Systems Inc",
+       [3]byte{4, 189, 112}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 189, 136}:   "Aruba Networks",
+       [3]byte{4, 191, 109}:   "Zyxel Communications Corporation",
+       [3]byte{4, 191, 168}:   "ISB Corporation",
+       [3]byte{4, 192, 91}:    "Tigo Energy",
+       [3]byte{4, 192, 111}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 192, 156}:   "Tellabs Inc.",
+       [3]byte{4, 193, 3}:     "Clover Network, Inc.",
+       [3]byte{4, 193, 185}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{4, 194, 62}:    "HTC Corporation",
+       [3]byte{4, 197, 164}:   "Cisco Systems, Inc",
+       [3]byte{4, 200, 128}:   "Samtec Inc",
+       [3]byte{4, 201, 145}:   "Phistek INC.",
+       [3]byte{4, 201, 217}:   "Echostar Technologies Corp",
+       [3]byte{4, 203, 29}:    "Traka plc",
+       [3]byte{4, 206, 20}:    "Wilocity LTD.",
+       [3]byte{4, 207, 37}:    "MANYCOLORS, INC.",
+       [3]byte{4, 211, 207}:   "Apple, Inc.",
+       [3]byte{4, 212, 55}:    "ZNV",
+       [3]byte{4, 214, 170}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{4, 215, 131}:   "Y&H E&C Co.,LTD.",
+       [3]byte{4, 218, 210}:   "Cisco Systems, Inc",
+       [3]byte{4, 219, 86}:    "Apple, Inc.",
+       [3]byte{4, 219, 138}:   "Suntech International Ltd.",
+       [3]byte{4, 221, 76}:    "Velocytech",
+       [3]byte{4, 222, 219}:   "Rockport Networks Inc",
+       [3]byte{4, 222, 242}:   "Shenzhen ECOM Technology Co. Ltd",
+       [3]byte{4, 223, 105}:   "Car Connectivity Consortium",
+       [3]byte{4, 224, 176}:   "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{4, 224, 196}:   "TRIUMPH-ADLER AG",
+       [3]byte{4, 225, 200}:   "IMS Soluções em Energia Ltda.",
+       [3]byte{4, 226, 248}:   "AEP Ticketing solutions srl",
+       [3]byte{4, 228, 81}:    "Texas Instruments",
+       [3]byte{4, 229, 54}:    "Apple, Inc.",
+       [3]byte{4, 229, 72}:    "Cohda Wireless Pty Ltd",
+       [3]byte{4, 230, 98}:    "Acroname Inc.",
+       [3]byte{4, 230, 118}:   "AMPAK Technology, Inc.",
+       [3]byte{4, 233, 229}:   "PJRC.COM, LLC",
+       [3]byte{4, 238, 145}:   "x-fabric GmbH",
+       [3]byte{4, 240, 33}:    "Compex Systems Pte Ltd",
+       [3]byte{4, 241, 40}:    "HMD Global Oy",
+       [3]byte{4, 241, 62}:    "Apple, Inc.",
+       [3]byte{4, 241, 125}:   "Tarana Wireless",
+       [3]byte{4, 244, 188}:   "Xena Networks",
+       [3]byte{4, 247, 228}:   "Apple, Inc.",
+       [3]byte{4, 248, 194}:   "Flaircomm Microelectronics, Inc.",
+       [3]byte{4, 249, 56}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 250, 63}:    "Opticore Inc.",
+       [3]byte{4, 254, 49}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{4, 254, 127}:   "Cisco Systems, Inc",
+       [3]byte{4, 254, 141}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{4, 254, 161}:   "Fihonest communication co.,Ltd",
+       [3]byte{4, 255, 81}:    "NOVAMEDIA INNOVISION SP. Z O.O.",
+       [3]byte{8, 0, 1}:       "COMPUTERVISION CORPORATION",
+       [3]byte{8, 0, 2}:       "BRIDGE COMMUNICATIONS INC.",
+       [3]byte{8, 0, 3}:       "ADVANCED COMPUTER COMM.",
+       [3]byte{8, 0, 4}:       "CROMEMCO INCORPORATED",
+       [3]byte{8, 0, 5}:       "SYMBOLICS INC.",
+       [3]byte{8, 0, 6}:       "SIEMENS AG",
+       [3]byte{8, 0, 7}:       "Apple, Inc.",
+       [3]byte{8, 0, 8}:       "BOLT BERANEK AND NEWMAN INC.",
+       [3]byte{8, 0, 9}:       "Hewlett Packard",
+       [3]byte{8, 0, 10}:      "NESTAR SYSTEMS INCORPORATED",
+       [3]byte{8, 0, 11}:      "UNISYS CORPORATION",
+       [3]byte{8, 0, 12}:      "MIKLYN DEVELOPMENT CO.",
+       [3]byte{8, 0, 13}:      "International Computers, Ltd",
+       [3]byte{8, 0, 14}:      "NCR CORPORATION",
+       [3]byte{8, 0, 15}:      "MITEL CORPORATION",
+       [3]byte{8, 0, 17}:      "TEKTRONIX INC.",
+       [3]byte{8, 0, 18}:      "BELL ATLANTIC INTEGRATED SYST.",
+       [3]byte{8, 0, 19}:      "Exxon",
+       [3]byte{8, 0, 20}:      "EXCELAN",
+       [3]byte{8, 0, 21}:      "STC BUSINESS SYSTEMS",
+       [3]byte{8, 0, 22}:      "BARRISTER INFO SYS CORP",
+       [3]byte{8, 0, 23}:      "NATIONAL SEMICONDUCTOR",
+       [3]byte{8, 0, 24}:      "PIRELLI FOCOM NETWORKS",
+       [3]byte{8, 0, 25}:      "GENERAL ELECTRIC CORPORATION",
+       [3]byte{8, 0, 26}:      "TIARA/ 10NET",
+       [3]byte{8, 0, 27}:      "Dell EMC",
+       [3]byte{8, 0, 28}:      "KDD-KOKUSAI DEBNSIN DENWA CO.",
+       [3]byte{8, 0, 29}:      "ABLE COMMUNICATIONS INC.",
+       [3]byte{8, 0, 30}:      "APOLLO COMPUTER INC.",
+       [3]byte{8, 0, 31}:      "SHARP CORPORATION",
+       [3]byte{8, 0, 32}:      "Oracle Corporation",
+       [3]byte{8, 0, 33}:      "3M COMPANY",
+       [3]byte{8, 0, 34}:      "NBI INC.",
+       [3]byte{8, 0, 35}:      "Panasonic Communications Co., Ltd.",
+       [3]byte{8, 0, 36}:      "10NET COMMUNICATIONS/DCA",
+       [3]byte{8, 0, 37}:      "CONTROL DATA",
+       [3]byte{8, 0, 38}:      "NORSK DATA A.S.",
+       [3]byte{8, 0, 39}:      "PCS Systemtechnik GmbH",
+       [3]byte{8, 0, 40}:      "Texas Instruments",
+       [3]byte{8, 0, 41}:      "Megatek Corporation",
+       [3]byte{8, 0, 42}:      "MOSAIC TECHNOLOGIES INC.",
+       [3]byte{8, 0, 43}:      "DIGITAL EQUIPMENT CORPORATION",
+       [3]byte{8, 0, 44}:      "BRITTON LEE INC.",
+       [3]byte{8, 0, 45}:      "LAN-TEC INC.",
+       [3]byte{8, 0, 46}:      "METAPHOR COMPUTER SYSTEMS",
+       [3]byte{8, 0, 47}:      "PRIME COMPUTER INC.",
+       [3]byte{8, 0, 48}:      "CERN",
+       [3]byte{8, 0, 48}:      "NETWORK RESEARCH CORPORATION",
+       [3]byte{8, 0, 48}:      "ROYAL MELBOURNE INST OF TECH",
+       [3]byte{8, 0, 49}:      "LITTLE MACHINES INC.",
+       [3]byte{8, 0, 50}:      "TIGAN INCORPORATED",
+       [3]byte{8, 0, 51}:      "BAUSCH & LOMB",
+       [3]byte{8, 0, 52}:      "FILENET CORPORATION",
+       [3]byte{8, 0, 53}:      "MICROFIVE CORPORATION",
+       [3]byte{8, 0, 54}:      "INTERGRAPH CORPORATION",
+       [3]byte{8, 0, 55}:      "FUJI-XEROX CO. LTD.",
+       [3]byte{8, 0, 56}:      "BULL S.A.S.",
+       [3]byte{8, 0, 57}:      "SPIDER SYSTEMS LIMITED",
+       [3]byte{8, 0, 58}:      "ORCATECH INC.",
+       [3]byte{8, 0, 59}:      "TORUS SYSTEMS LIMITED",
+       [3]byte{8, 0, 60}:      "SCHLUMBERGER WELL SERVICES",
+       [3]byte{8, 0, 61}:      "CADNETIX CORPORATIONS",
+       [3]byte{8, 0, 62}:      "CODEX CORPORATION",
+       [3]byte{8, 0, 63}:      "FRED KOSCHARA ENTERPRISES",
+       [3]byte{8, 0, 64}:      "FERRANTI COMPUTER SYS. LIMITED",
+       [3]byte{8, 0, 65}:      "RACAL-MILGO INFORMATION SYS..",
+       [3]byte{8, 0, 66}:      "JAPAN MACNICS CORP.",
+       [3]byte{8, 0, 67}:      "PIXEL COMPUTER INC.",
+       [3]byte{8, 0, 68}:      "DAVID SYSTEMS INC.",
+       [3]byte{8, 0, 69}:      "CONCURRENT COMPUTER CORP.",
+       [3]byte{8, 0, 70}:      "Sony Corporation",
+       [3]byte{8, 0, 71}:      "SEQUENT COMPUTER SYSTEMS INC.",
+       [3]byte{8, 0, 72}:      "EUROTHERM GAUGING SYSTEMS",
+       [3]byte{8, 0, 73}:      "UNIVATION",
+       [3]byte{8, 0, 74}:      "BANYAN SYSTEMS INC.",
+       [3]byte{8, 0, 75}:      "Planning Research Corp.",
+       [3]byte{8, 0, 76}:      "HYDRA COMPUTER SYSTEMS INC.",
+       [3]byte{8, 0, 77}:      "CORVUS SYSTEMS INC.",
+       [3]byte{8, 0, 78}:      "3COM EUROPE LTD.",
+       [3]byte{8, 0, 79}:      "CYGNET SYSTEMS",
+       [3]byte{8, 0, 80}:      "DAISY SYSTEMS CORP.",
+       [3]byte{8, 0, 81}:      "ExperData",
+       [3]byte{8, 0, 82}:      "INSYSTEC",
+       [3]byte{8, 0, 83}:      "MIDDLE EAST TECH. UNIVERSITY",
+       [3]byte{8, 0, 85}:      "STANFORD TELECOMM. INC.",
+       [3]byte{8, 0, 86}:      "STANFORD LINEAR ACCEL. CENTER",
+       [3]byte{8, 0, 87}:      "Evans & Sutherland",
+       [3]byte{8, 0, 88}:      "SYSTEMS CONCEPTS",
+       [3]byte{8, 0, 89}:      "A/S MYCRON",
+       [3]byte{8, 0, 90}:      "IBM Corp",
+       [3]byte{8, 0, 91}:      "VTA TECHNOLOGIES INC.",
+       [3]byte{8, 0, 92}:      "FOUR PHASE SYSTEMS",
+       [3]byte{8, 0, 93}:      "GOULD INC.",
+       [3]byte{8, 0, 94}:      "COUNTERPOINT COMPUTER INC.",
+       [3]byte{8, 0, 95}:      "SABER TECHNOLOGY CORP.",
+       [3]byte{8, 0, 96}:      "INDUSTRIAL NETWORKING INC.",
+       [3]byte{8, 0, 97}:      "JAROGATE LTD.",
+       [3]byte{8, 0, 98}:      "General Dynamics",
+       [3]byte{8, 0, 99}:      "PLESSEY",
+       [3]byte{8, 0, 100}:     "Sitasys AG",
+       [3]byte{8, 0, 101}:     "GENRAD INC.",
+       [3]byte{8, 0, 102}:     "AGFA CORPORATION",
+       [3]byte{8, 0, 103}:     "ComDesign",
+       [3]byte{8, 0, 104}:     "RIDGE COMPUTERS",
+       [3]byte{8, 0, 105}:     "SILICON GRAPHICS INC.",
+       [3]byte{8, 0, 106}:     "AT&T",
+       [3]byte{8, 0, 107}:     "ACCEL TECHNOLOGIES INC.",
+       [3]byte{8, 0, 108}:     "SUNTEK TECHNOLOGY INT'L",
+       [3]byte{8, 0, 109}:     "WHITECHAPEL COMPUTER WORKS",
+       [3]byte{8, 0, 110}:     "MASSCOMP",
+       [3]byte{8, 0, 111}:     "PHILIPS APELDOORN B.V.",
+       [3]byte{8, 0, 112}:     "Mitsubishi Precision Co.,LTd.",
+       [3]byte{8, 0, 113}:     "MATRA (DSIE)",
+       [3]byte{8, 0, 114}:     "XEROX CORP UNIV GRANT PROGRAM",
+       [3]byte{8, 0, 115}:     "TECMAR INC.",
+       [3]byte{8, 0, 116}:     "CASIO COMPUTER CO. LTD.",
+       [3]byte{8, 0, 117}:     "DANSK DATA ELECTRONIK",
+       [3]byte{8, 0, 118}:     "PC LAN TECHNOLOGIES",
+       [3]byte{8, 0, 119}:     "TSL COMMUNICATIONS LTD.",
+       [3]byte{8, 0, 120}:     "ACCELL CORPORATION",
+       [3]byte{8, 0, 121}:     "THE DROID WORKS",
+       [3]byte{8, 0, 122}:     "INDATA",
+       [3]byte{8, 0, 123}:     "SANYO ELECTRIC CO. LTD.",
+       [3]byte{8, 0, 124}:     "VITALINK COMMUNICATIONS CORP.",
+       [3]byte{8, 0, 126}:     "AMALGAMATED WIRELESS(AUS) LTD",
+       [3]byte{8, 0, 127}:     "CARNEGIE-MELLON UNIVERSITY",
+       [3]byte{8, 0, 128}:     "AES DATA INC.",
+       [3]byte{8, 0, 129}:     "ASTECH INC.",
+       [3]byte{8, 0, 130}:     "VERITAS SOFTWARE",
+       [3]byte{8, 0, 131}:     "Seiko Instruments Inc.",
+       [3]byte{8, 0, 132}:     "TOMEN ELECTRONICS CORP.",
+       [3]byte{8, 0, 133}:     "ELXSI",
+       [3]byte{8, 0, 134}:     "KONICA MINOLTA HOLDINGS, INC.",
+       [3]byte{8, 0, 135}:     "Xyplex, Inc.",
+       [3]byte{8, 0, 136}:     "Brocade Communications Systems, Inc.",
+       [3]byte{8, 0, 137}:     "Kinetics",
+       [3]byte{8, 0, 138}:     "PerfTech, Inc.",
+       [3]byte{8, 0, 139}:     "PYRAMID TECHNOLOGY CORP.",
+       [3]byte{8, 0, 140}:     "NETWORK RESEARCH CORPORATION",
+       [3]byte{8, 0, 141}:     "XYVISION INC.",
+       [3]byte{8, 0, 142}:     "Tandem Computers",
+       [3]byte{8, 0, 143}:     "CHIPCOM CORPORATION",
+       [3]byte{8, 0, 144}:     "SONOMA SYSTEMS",
+       [3]byte{8, 1, 15}:      "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{8, 2, 142}:     "NETGEAR",
+       [3]byte{8, 3, 113}:     "KRG CORPORATE",
+       [3]byte{8, 5, 129}:     "Roku, Inc.",
+       [3]byte{8, 5, 205}:     "DongGuang EnMai Electronic Product Co.Ltd.",
+       [3]byte{8, 8, 194}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 8, 234}:     "AMSC",
+       [3]byte{8, 9, 182}:     "Masimo Corp",
+       [3]byte{8, 10, 78}:     "Planet Bingo® — 3rd Rock Gaming®",
+       [3]byte{8, 12, 11}:     "SysMik GmbH Dresden",
+       [3]byte{8, 12, 201}:    "Mission Technology Group, dba Magma",
+       [3]byte{8, 13, 132}:    "GECO, Inc.",
+       [3]byte{8, 14, 168}:    "Velex s.r.l.",
+       [3]byte{8, 15, 250}:    "KSP INC.",
+       [3]byte{8, 17, 94}:     "Bitel Co., Ltd.",
+       [3]byte{8, 17, 150}:    "Intel Corporate",
+       [3]byte{8, 20, 67}:     "UNIBRAIN S.A.",
+       [3]byte{8, 21, 47}:     "Samsung Electronics Co., Ltd. ARTIK",
+       [3]byte{8, 22, 81}:     "SHENZHEN SEA STAR TECHNOLOGY CO.,LTD",
+       [3]byte{8, 23, 53}:     "Cisco Systems, Inc",
+       [3]byte{8, 23, 244}:    "IBM Corp",
+       [3]byte{8, 24, 26}:     "zte corporation",
+       [3]byte{8, 24, 76}:     "A. S. Thomas, Inc.",
+       [3]byte{8, 25, 166}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{8, 29, 251}:    "Shanghai Mexon Communication Technology Co.,Ltd",
+       [3]byte{8, 31, 63}:     "WondaLink Inc.",
+       [3]byte{8, 31, 113}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{8, 31, 235}:    "BinCube",
+       [3]byte{8, 31, 243}:    "Cisco Systems, Inc",
+       [3]byte{8, 33, 239}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 35, 178}:    "vivo Mobile Communication Co., Ltd.",
+       [3]byte{8, 37, 34}:     "ADVANSEE",
+       [3]byte{8, 39, 25}:     "APS systems/electronic AG",
+       [3]byte{8, 39, 206}:    "NAGANO KEIKI CO., LTD.",
+       [3]byte{8, 42, 208}:    "SRD Innovations Inc.",
+       [3]byte{8, 44, 176}:    "Network Instruments",
+       [3]byte{8, 46, 95}:     "Hewlett Packard",
+       [3]byte{8, 48, 107}:    "Palo Alto Networks",
+       [3]byte{8, 53, 113}:    "CASwell INC.",
+       [3]byte{8, 53, 178}:    "CoreEdge Networks Co., Ltd",
+       [3]byte{8, 55, 61}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 55, 156}:    "Topaz Co. LTD.",
+       [3]byte{8, 56, 165}:    "Funkwerk plettac electronic GmbH",
+       [3]byte{8, 58, 92}:     "Junilab, Inc.",
+       [3]byte{8, 58, 184}:    "Shinoda Plasma Co., Ltd.",
+       [3]byte{8, 61, 136}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 62, 12}:     "ARRIS Group, Inc.",
+       [3]byte{8, 62, 93}:     "Sagemcom Broadband SAS",
+       [3]byte{8, 62, 142}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{8, 63, 62}:     "WSH GmbH",
+       [3]byte{8, 63, 118}:    "Intellian Technologies, Inc.",
+       [3]byte{8, 63, 188}:    "zte corporation",
+       [3]byte{8, 64, 39}:     "Gridstore Inc.",
+       [3]byte{8, 64, 243}:    "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{8, 70, 86}:     "VEO-LABS",
+       [3]byte{8, 72, 44}:     "Raycore Taiwan Co., LTD.",
+       [3]byte{8, 74, 207}:    "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{8, 78, 28}:     "H2A Systems, LLC",
+       [3]byte{8, 78, 191}:    "Broad Net Mux Corporation",
+       [3]byte{8, 81, 20}:     "QINGDAO TOPSCOMM COMMUNICATION CO., LTD",
+       [3]byte{8, 81, 46}:     "Orion Diagnostica Oy",
+       [3]byte{8, 82, 64}:     "EbV Elektronikbau- und Vertriebs GmbH",
+       [3]byte{8, 87, 0}:      "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{8, 90, 224}:    "Recovision Technology Co., Ltd.",
+       [3]byte{8, 91, 14}:     "Fortinet, Inc.",
+       [3]byte{8, 91, 218}:    "CliniCare LTD",
+       [3]byte{8, 93, 221}:    "MERCURY CORPORATION",
+       [3]byte{8, 96, 110}:    "ASUSTek COMPUTER INC.",
+       [3]byte{8, 98, 102}:    "ASUSTek COMPUTER INC.",
+       [3]byte{8, 99, 97}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{8, 102, 31}:    "Palo Alto Networks",
+       [3]byte{8, 102, 152}:   "Apple, Inc.",
+       [3]byte{8, 103, 78}:    "Hisense broadband multimedia technology Co.,Ltd",
+       [3]byte{8, 104, 208}:   "Japan System Design",
+       [3]byte{8, 104, 234}:   "EITO ELECTRONICS CO., LTD.",
+       [3]byte{8, 106, 10}:    "ASKEY COMPUTER CORP",
+       [3]byte{8, 109, 65}:    "Apple, Inc.",
+       [3]byte{8, 109, 242}:   "Shenzhen MIMOWAVE Technology Co.,Ltd",
+       [3]byte{8, 112, 69}:    "Apple, Inc.",
+       [3]byte{8, 116, 2}:     "Apple, Inc.",
+       [3]byte{8, 116, 246}:   "Winterhalter Gastronom GmbH",
+       [3]byte{8, 117, 114}:   "Obelux Oy",
+       [3]byte{8, 118, 24}:    "ViE Technologies Sdn. Bhd.",
+       [3]byte{8, 118, 149}:   "Auto Industrial Co., Ltd.",
+       [3]byte{8, 118, 255}:   "Thomson Telecom Belgium",
+       [3]byte{8, 120, 8}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 121, 153}:   "AIM GmbH",
+       [3]byte{8, 122, 76}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{8, 123, 170}:   "SVYAZKOMPLEKTSERVICE, LLC",
+       [3]byte{8, 124, 190}:   "Quintic Corp.",
+       [3]byte{8, 125, 33}:    "Altasec technology corporation",
+       [3]byte{8, 128, 57}:    "Cisco SPVTG",
+       [3]byte{8, 129, 188}:   "HongKong Ipro Technology Co., Limited",
+       [3]byte{8, 129, 244}:   "Juniper Networks",
+       [3]byte{8, 132, 102}:   "Novartis Pharma AG",
+       [3]byte{8, 134, 32}:    "TECNO MOBILE LIMITED",
+       [3]byte{8, 134, 59}:    "Belkin International Inc.",
+       [3]byte{8, 140, 44}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 141, 200}:   "Ryowa Electronics Co.,Ltd",
+       [3]byte{8, 142, 79}:    "SF Software Solutions",
+       [3]byte{8, 143, 44}:    "Hills Sound Vision & Lighting",
+       [3]byte{8, 148, 239}:   "Wistron Infocomm (Zhongshan) Corporation",
+       [3]byte{8, 149, 42}:    "Technicolor CH USA Inc.",
+       [3]byte{8, 150, 173}:   "Cisco Systems, Inc",
+       [3]byte{8, 150, 215}:   "AVM GmbH",
+       [3]byte{8, 151, 88}:    "Shenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary",
+       [3]byte{8, 155, 75}:    "iKuai Networks",
+       [3]byte{8, 158, 1}:     "QUANTA COMPUTER INC.",
+       [3]byte{8, 158, 8}:     "Google, Inc.",
+       [3]byte{8, 159, 151}:   "LEROY AUTOMATION",
+       [3]byte{8, 161, 43}:    "ShenZhen EZL Technology Co., Ltd",
+       [3]byte{8, 165, 200}:   "Sunnovo International Limited",
+       [3]byte{8, 168, 161}:   "Cyclotronics Power Concepts, Inc",
+       [3]byte{8, 169, 90}:    "AzureWave Technology Inc.",
+       [3]byte{8, 172, 165}:   "Benu Video, Inc.",
+       [3]byte{8, 175, 120}:   "Totus Solutions, Inc.",
+       [3]byte{8, 178, 88}:    "Juniper Networks",
+       [3]byte{8, 178, 163}:   "Cynny Italia S.r.L.",
+       [3]byte{8, 180, 207}:   "Abicom International",
+       [3]byte{8, 183, 56}:    "Lite-On Technogy Corp.",
+       [3]byte{8, 183, 236}:   "Wireless Seismic",
+       [3]byte{8, 186, 34}:    "Swaive Corporation",
+       [3]byte{8, 187, 204}:   "AK-NORD EDV VERTRIEBSGES. mbH",
+       [3]byte{8, 188, 32}:    "Hangzhou Royal Cloud Technology Co., Ltd",
+       [3]byte{8, 189, 67}:    "NETGEAR",
+       [3]byte{8, 190, 9}:     "Astrol Electronic AG",
+       [3]byte{8, 190, 119}:   "Green Electronics",
+       [3]byte{8, 190, 172}:   "Edimax Technology Co. Ltd.",
+       [3]byte{8, 192, 33}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{8, 198, 179}:   "QTECH LLC",
+       [3]byte{8, 202, 69}:    "Toyou Feiji Electronics Co., Ltd.",
+       [3]byte{8, 204, 104}:   "Cisco Systems, Inc",
+       [3]byte{8, 204, 167}:   "Cisco Systems, Inc",
+       [3]byte{8, 205, 155}:   "samtec automotive electronics & software GmbH",
+       [3]byte{8, 208, 159}:   "Cisco Systems, Inc",
+       [3]byte{8, 208, 183}:   "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{8, 210, 154}:   "Proformatique",
+       [3]byte{8, 211, 75}:    "Techman Electronics (Changshu) Co., Ltd.",
+       [3]byte{8, 212, 12}:    "Intel Corporate",
+       [3]byte{8, 212, 43}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 213, 192}:   "Seers Technology Co., Ltd",
+       [3]byte{8, 216, 51}:    "Shenzhen RF Technology Co., Ltd",
+       [3]byte{8, 223, 31}:    "Bose Corporation",
+       [3]byte{8, 229, 218}:   "NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD.",
+       [3]byte{8, 230, 114}:   "JEBSEE ELECTRONICS CO.,LTD.",
+       [3]byte{8, 232, 79}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{8, 234, 64}:    "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
+       [3]byte{8, 234, 68}:    "Aerohive Networks Inc.",
+       [3]byte{8, 235, 41}:    "Jiangsu Huitong Group Co.,Ltd.",
+       [3]byte{8, 235, 116}:   "HUMAX Co., Ltd.",
+       [3]byte{8, 235, 237}:   "World Elite Technology Co.,LTD",
+       [3]byte{8, 236, 169}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 237, 2}:     "IEEE Registration Authority",
+       [3]byte{8, 237, 185}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{8, 238, 139}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 239, 59}:    "MCS Logic Inc.",
+       [3]byte{8, 239, 171}:   "SAYME WIRELESS SENSOR NETWORK",
+       [3]byte{8, 241, 183}:   "Towerstream Corpration",
+       [3]byte{8, 242, 244}:   "Net One Partners Co.,Ltd.",
+       [3]byte{8, 244, 171}:   "Apple, Inc.",
+       [3]byte{8, 246, 248}:   "GET Engineering",
+       [3]byte{8, 247, 40}:    "GLOBO Multimedia Sp. z o.o. Sp.k.",
+       [3]byte{8, 250, 224}:   "Fohhn Audio AG",
+       [3]byte{8, 252, 82}:    "OpenXS BV",
+       [3]byte{8, 252, 136}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{8, 253, 14}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{12, 2, 39}:     "Technicolor CH USA Inc.",
+       [3]byte{12, 4, 0}:      "Jantar d.o.o.",
+       [3]byte{12, 5, 53}:     "Juniper Systems",
+       [3]byte{12, 17, 5}:     "Ringslink (Xiamen) Network Communication Technologies Co., Ltd",
+       [3]byte{12, 17, 103}:   "Cisco Systems, Inc",
+       [3]byte{12, 18, 98}:    "zte corporation",
+       [3]byte{12, 19, 11}:    "Uniqoteq Ltd.",
+       [3]byte{12, 20, 32}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{12, 21, 57}:    "Apple, Inc.",
+       [3]byte{12, 21, 197}:   "SDTEC Co., Ltd.",
+       [3]byte{12, 23, 241}:   "TELECSYS",
+       [3]byte{12, 25, 31}:    "Inform Electronik",
+       [3]byte{12, 26, 16}:    "Acoustic Stream",
+       [3]byte{12, 28, 32}:    "Kakao Corp",
+       [3]byte{12, 29, 175}:   "Xiaomi Communications Co Ltd",
+       [3]byte{12, 29, 194}:   "SeAH Networks",
+       [3]byte{12, 32, 38}:    "noax Technologies AG",
+       [3]byte{12, 37, 118}:   "LONGCHEER TELECOMMUNICATION LIMITED",
+       [3]byte{12, 39, 36}:    "Cisco Systems, Inc",
+       [3]byte{12, 39, 85}:    "Valuable Techologies Limited",
+       [3]byte{12, 42, 105}:   "electric imp, incorporated",
+       [3]byte{12, 42, 231}:   "Beijing General Research Institute of Mining and Metallurgy",
+       [3]byte{12, 45, 137}:   "QiiQ Communications Inc.",
+       [3]byte{12, 48, 33}:    "Apple, Inc.",
+       [3]byte{12, 55, 71}:    "zte corporation",
+       [3]byte{12, 55, 220}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{12, 56, 62}:    "Fanvil Technology Co., Ltd.",
+       [3]byte{12, 57, 86}:    "Observator instruments",
+       [3]byte{12, 60, 101}:   "Dome Imaging Inc",
+       [3]byte{12, 60, 205}:   "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{12, 62, 159}:   "Apple, Inc.",
+       [3]byte{12, 65, 62}:    "Microsoft Corporation",
+       [3]byte{12, 69, 186}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{12, 70, 157}:   "MS Sedco",
+       [3]byte{12, 71, 61}:    "Hitron Technologies. Inc",
+       [3]byte{12, 71, 201}:   "Amazon Technologies Inc.",
+       [3]byte{12, 72, 133}:   "LG Electronics (Mobile Communications)",
+       [3]byte{12, 73, 51}:    "Sichuan Jiuzhou Electronic Technology Co., Ltd.",
+       [3]byte{12, 75, 84}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{12, 76, 57}:    "MitraStar Technology Corp.",
+       [3]byte{12, 77, 233}:   "Apple, Inc.",
+       [3]byte{12, 79, 90}:    "ASA-RT s.r.l.",
+       [3]byte{12, 81, 1}:     "Apple, Inc.",
+       [3]byte{12, 81, 247}:   "CHAUVIN ARNOUX",
+       [3]byte{12, 82, 3}:     "AGM GROUP LIMITED",
+       [3]byte{12, 84, 165}:   "PEGATRON CORPORATION",
+       [3]byte{12, 84, 185}:   "Nokia",
+       [3]byte{12, 85, 33}:    "Axiros GmbH",
+       [3]byte{12, 86, 92}:    "HyBroad Vision (Hong Kong) Technology Co Ltd",
+       [3]byte{12, 87, 235}:   "Mueller Systems",
+       [3]byte{12, 88, 66}:    "DME Micro",
+       [3]byte{12, 90, 25}:    "Axtion Sdn Bhd",
+       [3]byte{12, 90, 158}:   "Wi-SUN Alliance",
+       [3]byte{12, 92, 216}:   "DOLI Elektronik GmbH",
+       [3]byte{12, 95, 53}:    "Niagara Video Corporation",
+       [3]byte{12, 96, 118}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{12, 97, 17}:    "Anda Technologies SAC",
+       [3]byte{12, 97, 39}:    "Actiontec Electronics, Inc",
+       [3]byte{12, 97, 207}:   "Texas Instruments",
+       [3]byte{12, 99, 252}:   "Nanjing Signway Technology Co., Ltd",
+       [3]byte{12, 104, 3}:    "Cisco Systems, Inc",
+       [3]byte{12, 106, 230}:  "Stanley Security Solutions",
+       [3]byte{12, 110, 79}:   "PrimeVOLT Co., Ltd.",
+       [3]byte{12, 111, 156}:  "Shaw Communications Inc.",
+       [3]byte{12, 113, 93}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{12, 114, 44}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{12, 114, 217}:  "zte corporation",
+       [3]byte{12, 115, 190}:  "Dongguan Haimai Electronie Technology Co.,Ltd",
+       [3]byte{12, 116, 194}:  "Apple, Inc.",
+       [3]byte{12, 117, 35}:   "BEIJING GEHUA CATV NETWORK CO.,LTD",
+       [3]byte{12, 117, 108}:  "Anaren Microwave, Inc.",
+       [3]byte{12, 117, 189}:  "Cisco Systems, Inc",
+       [3]byte{12, 119, 26}:   "Apple, Inc.",
+       [3]byte{12, 125, 124}:  "Kexiang Information Technology Co, Ltd.",
+       [3]byte{12, 129, 18}:   "Private",
+       [3]byte{12, 130, 48}:   "SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD",
+       [3]byte{12, 130, 104}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{12, 130, 106}:  "Wuhan Huagong Genuine Optics Technology Co., Ltd",
+       [3]byte{12, 132, 17}:   "A.O. Smith Water Products",
+       [3]byte{12, 132, 132}:  "Zenovia Electronics Inc.",
+       [3]byte{12, 132, 220}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{12, 133, 37}:   "Cisco Systems, Inc",
+       [3]byte{12, 134, 16}:   "Juniper Networks",
+       [3]byte{12, 137, 16}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{12, 138, 135}:  "AgLogica Holdings, Inc",
+       [3]byte{12, 139, 253}:  "Intel Corporate",
+       [3]byte{12, 140, 143}:  "Kamo Technology Limited",
+       [3]byte{12, 140, 220}:  "Suunto Oy",
+       [3]byte{12, 141, 152}:  "TOP EIGHT IND CORP",
+       [3]byte{12, 141, 219}:  "Cisco Meraki",
+       [3]byte{12, 143, 255}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{12, 145, 96}:   "Hui Zhou Gaoshengda Technology Co.,LTD",
+       [3]byte{12, 146, 78}:   "Rice Lake Weighing Systems",
+       [3]byte{12, 147, 1}:    "PT. Prasimax Inovasi Teknologi",
+       [3]byte{12, 147, 251}:  "BNS Solutions",
+       [3]byte{12, 150, 191}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{12, 152, 56}:   "Xiaomi Communications Co Ltd",
+       [3]byte{12, 155, 19}:   "Shanghai Magic Mobile Telecommunication Co.Ltd.",
+       [3]byte{12, 157, 86}:   "Consort Controls Ltd",
+       [3]byte{12, 158, 145}:  "Sankosha Corporation",
+       [3]byte{12, 161, 56}:   "Blinq Wireless Inc.",
+       [3]byte{12, 162, 244}:  "Chameleon Technology (UK) Limited",
+       [3]byte{12, 164, 2}:    "Alcatel-Lucent IPD",
+       [3]byte{12, 164, 42}:   "OB Telecom Electronic Technology Co., Ltd",
+       [3]byte{12, 166, 148}:  "Sunitec Enterprise Co.,Ltd",
+       [3]byte{12, 172, 5}:    "Unitend Technologies Inc.",
+       [3]byte{12, 175, 90}:   "GENUS POWER INFRASTRUCTURES LIMITED",
+       [3]byte{12, 178, 183}:  "Texas Instruments",
+       [3]byte{12, 179, 25}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{12, 180, 89}:   "Marketech International Corp.",
+       [3]byte{12, 180, 239}:  "Digience Co.,Ltd.",
+       [3]byte{12, 181, 222}:  "Alcatel Lucent",
+       [3]byte{12, 185, 18}:   "JM-DATA GmbH",
+       [3]byte{12, 185, 55}:   "Ubee Interactive Co., Limited",
+       [3]byte{12, 188, 159}:  "Apple, Inc.",
+       [3]byte{12, 189, 81}:   "TCT mobile ltd",
+       [3]byte{12, 191, 21}:   "Genetec Inc.",
+       [3]byte{12, 191, 63}:   "Shenzhen Lencotion Technology Co.,Ltd",
+       [3]byte{12, 192, 192}:  "MAGNETI MARELLI SISTEMAS ELECTRONICOS MEXICO",
+       [3]byte{12, 195, 167}:  "Meritec",
+       [3]byte{12, 196, 122}:  "Super Micro Computer, Inc.",
+       [3]byte{12, 196, 126}:  "EUCAST Co., Ltd.",
+       [3]byte{12, 198, 85}:   "Wuxi YSTen Technology Co.,Ltd.",
+       [3]byte{12, 198, 106}:  "Nokia Corporation",
+       [3]byte{12, 198, 172}:  "DAGS",
+       [3]byte{12, 199, 49}:   "Currant, Inc.",
+       [3]byte{12, 200, 31}:   "Summer Infant, Inc.",
+       [3]byte{12, 201, 198}:  "Samwin Hong Kong Limited",
+       [3]byte{12, 203, 141}:  "ASCO Numatics GmbH",
+       [3]byte{12, 204, 38}:   "Airenetworks",
+       [3]byte{12, 205, 211}:  "EASTRIVER TECHNOLOGY CO., LTD.",
+       [3]byte{12, 205, 251}:  "EDIC Systems Inc.",
+       [3]byte{12, 206, 246}:  "Guizhou Fortuneship Technology Co., Ltd",
+       [3]byte{12, 207, 209}:  "SPRINGWAVE Co., Ltd",
+       [3]byte{12, 210, 146}:  "Intel Corporate",
+       [3]byte{12, 210, 181}:  "Binatone Telecommunication Pvt. Ltd",
+       [3]byte{12, 213, 2}:    "Westell Technologies Inc.",
+       [3]byte{12, 214, 150}:  "Amimon Ltd",
+       [3]byte{12, 214, 189}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{12, 215, 70}:   "Apple, Inc.",
+       [3]byte{12, 215, 194}:  "Axium Technologies, Inc.",
+       [3]byte{12, 216, 108}:  "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{12, 217, 150}:  "Cisco Systems, Inc",
+       [3]byte{12, 217, 193}:  "Visteon Corporation",
+       [3]byte{12, 218, 65}:   "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{12, 220, 204}:  "Inala Technologies",
+       [3]byte{12, 221, 239}:  "Nokia Corporation",
+       [3]byte{12, 223, 164}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{12, 224, 228}:  "PLANTRONICS, INC.",
+       [3]byte{12, 229, 211}:  "DH electronics GmbH",
+       [3]byte{12, 231, 9}:    "Fox Crypto B.V.",
+       [3]byte{12, 231, 37}:   "Microsoft Corporation",
+       [3]byte{12, 232, 47}:   "Bonfiglioli Vectron GmbH",
+       [3]byte{12, 233, 54}:   "ELIMOS srl",
+       [3]byte{12, 234, 201}:  "ARRIS Group, Inc.",
+       [3]byte{12, 238, 230}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{12, 239, 124}:  "AnaCom Inc",
+       [3]byte{12, 239, 175}:  "IEEE Registration Authority",
+       [3]byte{12, 240, 25}:   "Malgn Technology Co., Ltd.",
+       [3]byte{12, 240, 180}:  "Globalsat International Technology Ltd",
+       [3]byte{12, 243, 97}:   "Java Information",
+       [3]byte{12, 243, 238}:  "EM Microelectronic",
+       [3]byte{12, 244, 5}:    "Beijing Signalway Technologies Co.,Ltd",
+       [3]byte{12, 244, 213}:  "Ruckus Wireless",
+       [3]byte{12, 245, 164}:  "Cisco Systems, Inc",
+       [3]byte{12, 248, 147}:  "ARRIS Group, Inc.",
+       [3]byte{12, 249, 192}:  "BSkyB Ltd",
+       [3]byte{12, 252, 131}:  "Airoha Technology Corp.,",
+       [3]byte{12, 253, 55}:   "SUSE Linux GmbH",
+       [3]byte{12, 254, 69}:   "Sony Interactive Entertainment Inc.",
+       [3]byte{16, 0, 0}:      "Private",
+       [3]byte{16, 0, 90}:     "IBM Corp",
+       [3]byte{16, 0, 232}:    "NATIONAL SEMICONDUCTOR",
+       [3]byte{16, 0, 253}:    "LaonPeople",
+       [3]byte{16, 1, 202}:    "Ashley Butterworth",
+       [3]byte{16, 2, 181}:    "Intel Corporate",
+       [3]byte{16, 5, 1}:      "PEGATRON CORPORATION",
+       [3]byte{16, 5, 177}:    "ARRIS Group, Inc.",
+       [3]byte{16, 5, 202}:    "Cisco Systems, Inc",
+       [3]byte{16, 7, 35}:     "IEEE Registration Authority",
+       [3]byte{16, 7, 182}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{16, 8, 177}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{16, 9, 12}:     "Janome Sewing Machine Co., Ltd.",
+       [3]byte{16, 11, 169}:   "Intel Corporate",
+       [3]byte{16, 12, 36}:    "pomdevices, LLC",
+       [3]byte{16, 13, 47}:    "Online Security Pty. Ltd.",
+       [3]byte{16, 13, 50}:    "Embedian, Inc.",
+       [3]byte{16, 13, 127}:   "NETGEAR",
+       [3]byte{16, 14, 43}:    "NEC CASIO Mobile Communications",
+       [3]byte{16, 14, 126}:   "Juniper Networks",
+       [3]byte{16, 15, 24}:    "Fu Gang Electronic(KunShan)CO.,LTD",
+       [3]byte{16, 16, 182}:   "McCain Inc",
+       [3]byte{16, 18, 18}:    "Vivo International Corporation Pty Ltd",
+       [3]byte{16, 18, 24}:    "Korins Inc.",
+       [3]byte{16, 18, 72}:    "ITG, Inc.",
+       [3]byte{16, 18, 80}:    "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{16, 19, 49}:    "Technicolor",
+       [3]byte{16, 19, 238}:   "Justec International Technology INC.",
+       [3]byte{16, 24, 158}:   "Elmo Motion Control",
+       [3]byte{16, 27, 84}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{16, 28, 12}:    "Apple, Inc.",
+       [3]byte{16, 29, 81}:    "ON-Q LLC dba ON-Q Mesh Networks",
+       [3]byte{16, 29, 192}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{16, 31, 116}:   "Hewlett Packard",
+       [3]byte{16, 34, 121}:   "ZeroDesktop, Inc.",
+       [3]byte{16, 39, 190}:   "TVIP",
+       [3]byte{16, 40, 49}:    "Morion Inc.",
+       [3]byte{16, 42, 179}:   "Xiaomi Communications Co Ltd",
+       [3]byte{16, 44, 131}:   "XIMEA",
+       [3]byte{16, 45, 150}:   "Looxcie Inc.",
+       [3]byte{16, 46, 175}:   "Texas Instruments",
+       [3]byte{16, 47, 107}:   "Microsoft Corporation",
+       [3]byte{16, 48, 52}:    "Cara Systems",
+       [3]byte{16, 48, 71}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{16, 51, 120}:   "FLECTRON Co., LTD",
+       [3]byte{16, 55, 17}:    "Simlink AS",
+       [3]byte{16, 59, 89}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{16, 61, 234}:   "HFC Technology (Beijing) Ltd. Co.",
+       [3]byte{16, 64, 243}:   "Apple, Inc.",
+       [3]byte{16, 65, 127}:   "Apple, Inc.",
+       [3]byte{16, 67, 105}:   "Soundmax Electronic Limited",
+       [3]byte{16, 68, 0}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{16, 68, 90}:    "Shaanxi Hitech Electronic Co., LTD",
+       [3]byte{16, 69, 190}:   "Norphonic AS",
+       [3]byte{16, 69, 248}:   "LNT-Automation GmbH",
+       [3]byte{16, 70, 180}:   "FormericaOE",
+       [3]byte{16, 71, 128}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{16, 72, 177}:   "Beijing Duokan Technology Limited",
+       [3]byte{16, 73, 99}:    "HARTING K.K.",
+       [3]byte{16, 74, 125}:   "Intel Corporate",
+       [3]byte{16, 75, 70}:    "Mitsubishi Electric Corporation",
+       [3]byte{16, 77, 119}:   "Innovative Computer Engineering",
+       [3]byte{16, 78, 7}:     "Shanghai Genvision Industries Co.,Ltd",
+       [3]byte{16, 78, 137}:   "Garmin International",
+       [3]byte{16, 79, 168}:   "Sony Corporation",
+       [3]byte{16, 81, 114}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{16, 86, 17}:    "ARRIS Group, Inc.",
+       [3]byte{16, 86, 202}:   "Peplink International Ltd.",
+       [3]byte{16, 88, 135}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{16, 90, 247}:   "ADB Italia",
+       [3]byte{16, 92, 59}:    "Perma-Pipe, Inc.",
+       [3]byte{16, 92, 191}:   "DuroByte Inc",
+       [3]byte{16, 95, 6}:     "Actiontec Electronics, Inc",
+       [3]byte{16, 95, 73}:    "Cisco SPVTG",
+       [3]byte{16, 96, 75}:    "Hewlett Packard",
+       [3]byte{16, 98, 201}:   "Adatis GmbH & Co. KG",
+       [3]byte{16, 98, 208}:   "Technicolor CH USA Inc.",
+       [3]byte{16, 98, 235}:   "D-Link International",
+       [3]byte{16, 100, 226}:  "ADFweb.com s.r.l.",
+       [3]byte{16, 101, 163}:  "Core Brands LLC",
+       [3]byte{16, 101, 207}:  "IQSIM",
+       [3]byte{16, 102, 130}:  "NEC Platforms, Ltd.",
+       [3]byte{16, 104, 63}:   "LG Electronics (Mobile Communications)",
+       [3]byte{16, 111, 63}:   "BUFFALO.INC",
+       [3]byte{16, 111, 239}:  "Ad-Sol Nissin Corp",
+       [3]byte{16, 113, 249}:  "Cloud Telecomputers, LLC",
+       [3]byte{16, 114, 35}:   "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO",
+       [3]byte{16, 118, 138}:  "EoCell",
+       [3]byte{16, 119, 176}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{16, 119, 177}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{16, 120, 91}:   "Actiontec Electronics, Inc",
+       [3]byte{16, 120, 115}:  "Shenzhen Jinkeyi Communication Co., Ltd.",
+       [3]byte{16, 120, 206}:  "Hanvit SI, Inc.",
+       [3]byte{16, 120, 210}:  "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{16, 122, 134}:  "U&U ENGINEERING INC.",
+       [3]byte{16, 123, 68}:   "ASUSTek COMPUTER INC.",
+       [3]byte{16, 123, 239}:  "Zyxel Communications Corporation",
+       [3]byte{16, 125, 26}:   "Dell Inc.",
+       [3]byte{16, 131, 210}:  "Microseven Systems, LLC",
+       [3]byte{16, 134, 140}:  "ARRIS Group, Inc.",
+       [3]byte{16, 136, 15}:   "Daruma Telecomunicações e Informática S.A.",
+       [3]byte{16, 136, 206}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{16, 138, 27}:   "RAONIX Inc.",
+       [3]byte{16, 140, 207}:  "Cisco Systems, Inc",
+       [3]byte{16, 146, 102}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{16, 147, 233}:  "Apple, Inc.",
+       [3]byte{16, 149, 75}:   "Megabyte Ltd.",
+       [3]byte{16, 152, 54}:   "Dell Inc.",
+       [3]byte{16, 154, 185}:  "Tosibox Oy",
+       [3]byte{16, 154, 221}:  "Apple, Inc.",
+       [3]byte{16, 159, 169}:  "Actiontec Electronics, Inc",
+       [3]byte{16, 161, 59}:   "FUJIKURA RUBBER LTD.",
+       [3]byte{16, 164, 190}:  "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
+       [3]byte{16, 165, 208}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{16, 166, 89}:   "Mobile Create Co.,Ltd.",
+       [3]byte{16, 167, 67}:   "SK Mtek Limited",
+       [3]byte{16, 169, 50}:   "Beijing Cyber Cloud Technology Co. ,Ltd.",
+       [3]byte{16, 174, 96}:   "Private",
+       [3]byte{16, 175, 120}:  "Shenzhen ATUE Technology Co., Ltd",
+       [3]byte{16, 177, 248}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{16, 178, 107}:  "base Co.,Ltd.",
+       [3]byte{16, 183, 19}:   "Private",
+       [3]byte{16, 183, 246}:  "Plastoform Industries Ltd.",
+       [3]byte{16, 185, 254}:  "Lika srl",
+       [3]byte{16, 186, 165}:  "GANA I&C CO., LTD",
+       [3]byte{16, 189, 24}:   "Cisco Systems, Inc",
+       [3]byte{16, 189, 85}:   "Q-Lab Corporation",
+       [3]byte{16, 190, 245}:  "D-Link International",
+       [3]byte{16, 191, 72}:   "ASUSTek COMPUTER INC.",
+       [3]byte{16, 192, 124}:  "Blu-ray Disc Association",
+       [3]byte{16, 194, 186}:  "UTT Co., Ltd.",
+       [3]byte{16, 195, 123}:  "ASUSTek COMPUTER INC.",
+       [3]byte{16, 197, 134}:  "BIO SOUND LAB CO., LTD.",
+       [3]byte{16, 198, 12}:   "Domino UK Ltd",
+       [3]byte{16, 198, 31}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{16, 198, 126}:  "SHENZHEN JUCHIN TECHNOLOGY CO., LTD",
+       [3]byte{16, 198, 252}:  "Garmin International",
+       [3]byte{16, 199, 63}:   "Midas Klark Teknik Ltd",
+       [3]byte{16, 202, 129}:  "PRECIA",
+       [3]byte{16, 204, 27}:   "Liverock technologies,INC",
+       [3]byte{16, 204, 219}:  "AXIMUM PRODUITS ELECTRONIQUES",
+       [3]byte{16, 205, 174}:  "Avaya Inc",
+       [3]byte{16, 205, 182}:  "Essential Products, Inc.",
+       [3]byte{16, 206, 169}:  "Texas Instruments",
+       [3]byte{16, 208, 122}:  "AMPAK Technology, Inc.",
+       [3]byte{16, 208, 171}:  "zte corporation",
+       [3]byte{16, 209, 220}:  "INSTAR Deutschland GmbH",
+       [3]byte{16, 211, 138}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{16, 213, 66}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{16, 218, 67}:   "NETGEAR",
+       [3]byte{16, 221, 177}:  "Apple, Inc.",
+       [3]byte{16, 221, 244}:  "Maxway Electronics CO.,LTD",
+       [3]byte{16, 222, 228}:  "automationNEXT GmbH",
+       [3]byte{16, 223, 139}:  "Shenzhen CareDear Communication Technology Co.,Ltd",
+       [3]byte{16, 226, 213}:  "Qi Hardware Inc.",
+       [3]byte{16, 227, 199}:  "Seohwa Telecom",
+       [3]byte{16, 228, 175}:  "APR, LLC",
+       [3]byte{16, 230, 143}:  "KWANGSUNG ELECTRONICS KOREA CO.,LTD.",
+       [3]byte{16, 230, 174}:  "Source Technologies, LLC",
+       [3]byte{16, 232, 120}:  "Nokia",
+       [3]byte{16, 232, 238}:  "PhaseSpace",
+       [3]byte{16, 234, 89}:   "Cisco SPVTG",
+       [3]byte{16, 238, 217}:  "Canoga Perkins Corporation",
+       [3]byte{16, 240, 5}:    "Intel Corporate",
+       [3]byte{16, 241, 99}:   "TNK CO.,LTD",
+       [3]byte{16, 241, 242}:  "LG Electronics (Mobile Communications)",
+       [3]byte{16, 243, 17}:   "Cisco Systems, Inc",
+       [3]byte{16, 243, 219}:  "Gridco Systems, Inc.",
+       [3]byte{16, 244, 154}:  "T3 Innovation",
+       [3]byte{16, 246, 129}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{16, 249, 111}:  "LG Electronics (Mobile Communications)",
+       [3]byte{16, 249, 238}:  "Nokia Corporation",
+       [3]byte{16, 250, 206}:  "Reacheng Communication Technology Co.,Ltd",
+       [3]byte{16, 251, 240}:  "KangSheng LTD.",
+       [3]byte{16, 252, 84}:   "Shany Electronic Co., Ltd.",
+       [3]byte{16, 252, 182}:  "mirusystems CO.,LTD",
+       [3]byte{16, 254, 237}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{17, 0, 170}:    "Private",
+       [3]byte{17, 17, 17}:    "Private",
+       [3]byte{20, 2, 236}:    "Hewlett Packard Enterprise",
+       [3]byte{20, 4, 103}:    "SNK Technologies Co.,Ltd.",
+       [3]byte{20, 7, 8}:      "Private",
+       [3]byte{20, 7, 224}:    "Abrantix AG",
+       [3]byte{20, 12, 91}:    "PLNetworks",
+       [3]byte{20, 12, 118}:   "FREEBOX SAS",
+       [3]byte{20, 13, 79}:    "Flextronics International",
+       [3]byte{20, 16, 159}:   "Apple, Inc.",
+       [3]byte{20, 19, 48}:    "Anakreon UK LLP",
+       [3]byte{20, 19, 87}:    "ATP Electronics, Inc.",
+       [3]byte{20, 20, 75}:    "Ruijie Networks Co.,LTD",
+       [3]byte{20, 20, 230}:   "Ningbo Sanhe Digital Co.,Ltd",
+       [3]byte{20, 21, 124}:   "TOKYO COSMOS ELECTRIC CO.,LTD.",
+       [3]byte{20, 24, 119}:   "Dell Inc.",
+       [3]byte{20, 26, 81}:    "Treetech Sistemas Digitais",
+       [3]byte{20, 26, 163}:   "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{20, 27, 189}:   "Volex Inc.",
+       [3]byte{20, 27, 240}:   "Intellimedia Systems Ltd",
+       [3]byte{20, 31, 120}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{20, 31, 186}:   "IEEE Registration Authority",
+       [3]byte{20, 34, 219}:   "eero inc.",
+       [3]byte{20, 35, 215}:   "EUTRONIX CO., LTD.",
+       [3]byte{20, 40, 130}:   "MIDICOM ELECTRONICS CO.LTD",
+       [3]byte{20, 41, 113}:   "NEMOA ELECTRONICS (HK) CO. LTD",
+       [3]byte{20, 43, 210}:   "Armtel Ltd.",
+       [3]byte{20, 43, 214}:   "Guangdong Appscomm Co.,Ltd",
+       [3]byte{20, 45, 39}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{20, 45, 139}:   "Incipio Technologies, Inc",
+       [3]byte{20, 45, 245}:   "Amphitech",
+       [3]byte{20, 47, 253}:   "LT SECURITY INC",
+       [3]byte{20, 48, 4}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{20, 48, 122}:   "Avermetrics",
+       [3]byte{20, 48, 198}:   "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{20, 50, 209}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{20, 51, 101}:   "TEM Mobile Limited",
+       [3]byte{20, 53, 139}:   "Mediabridge Products, LLC.",
+       [3]byte{20, 53, 179}:   "Future Designs, Inc.",
+       [3]byte{20, 54, 5}:     "Nokia Corporation",
+       [3]byte{20, 54, 198}:   "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{20, 55, 59}:    "PROCOM Systems",
+       [3]byte{20, 58, 234}:   "Dynapower Company LLC",
+       [3]byte{20, 61, 242}:   "Beijing Shidai Hongyuan Network Communication Co.,Ltd",
+       [3]byte{20, 62, 96}:    "Nokia",
+       [3]byte{20, 62, 191}:   "zte corporation",
+       [3]byte{20, 63, 39}:    "Noccela Oy",
+       [3]byte{20, 65, 70}:    "Honeywell (China) Co., LTD",
+       [3]byte{20, 65, 226}:   "Monaco Enterprises, Inc.",
+       [3]byte{20, 67, 25}:    "Creative&Link Technology Limited",
+       [3]byte{20, 68, 74}:    "Apollo Seiko Ltd.",
+       [3]byte{20, 70, 228}:   "AVISTEL",
+       [3]byte{20, 72, 139}:   "Shenzhen Doov Technology Co.,Ltd",
+       [3]byte{20, 73, 120}:   "Digital Control Incorporated",
+       [3]byte{20, 73, 224}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{20, 76, 26}:    "Max Communication GmbH",
+       [3]byte{20, 77, 103}:   "Zioncom Electronics (Shenzhen) Ltd.",
+       [3]byte{20, 79, 215}:   "IEEE Registration Authority",
+       [3]byte{20, 84, 18}:    "Entis Co., Ltd.",
+       [3]byte{20, 86, 69}:    "Savitech Corp.",
+       [3]byte{20, 86, 142}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{20, 88, 208}:   "Hewlett Packard",
+       [3]byte{20, 90, 5}:     "Apple, Inc.",
+       [3]byte{20, 90, 131}:   "Logi-D inc",
+       [3]byte{20, 91, 209}:   "ARRIS Group, Inc.",
+       [3]byte{20, 91, 225}:   "nyantec GmbH",
+       [3]byte{20, 94, 69}:    "Kaleao Limited",
+       [3]byte{20, 95, 148}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{20, 96, 128}:   "zte corporation",
+       [3]byte{20, 97, 2}:     "Alpine Electronics, Inc.",
+       [3]byte{20, 97, 47}:    "Avaya Inc",
+       [3]byte{20, 99, 8}:     "JABIL CIRCUIT (SHANGHAI) LTD.",
+       [3]byte{20, 106, 11}:   "Cypress Electronics Limited",
+       [3]byte{20, 107, 114}:  "Shenzhen Fortune Ship Technology Co., Ltd.",
+       [3]byte{20, 110, 10}:   "Private",
+       [3]byte{20, 115, 115}:  "TUBITAK UEKAE",
+       [3]byte{20, 116, 17}:   "RIM",
+       [3]byte{20, 117, 144}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{20, 120, 11}:   "PerkinElmer Technologies GmbH & Co. KG",
+       [3]byte{20, 121, 243}:  "China Mobile Group Device Co.,Ltd.",
+       [3]byte{20, 125, 179}:  "JOA TELECOM.CO.,LTD",
+       [3]byte{20, 125, 197}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{20, 130, 91}:   "Hefei Radio Communication Technology Co., Ltd",
+       [3]byte{20, 134, 146}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{20, 137, 62}:   "VIXTEL TECHNOLOGIES LIMTED",
+       [3]byte{20, 137, 81}:   "LCFC(HeFei) Electronics Technology co., ltd",
+       [3]byte{20, 137, 253}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{20, 138, 112}:  "ADS GmbH",
+       [3]byte{20, 143, 33}:   "Garmin International",
+       [3]byte{20, 143, 198}:  "Apple, Inc.",
+       [3]byte{20, 144, 144}:  "KongTop industrial(shen zhen)CO.,LTD",
+       [3]byte{20, 145, 130}:  "Belkin International Inc.",
+       [3]byte{20, 147, 70}:   "PNI sensor corporation",
+       [3]byte{20, 148, 72}:   "BLU CASTLE S.A.",
+       [3]byte{20, 152, 125}:  "Technicolor CH USA Inc.",
+       [3]byte{20, 153, 226}:  "Apple, Inc.",
+       [3]byte{20, 154, 16}:   "Microsoft Corporation",
+       [3]byte{20, 157, 9}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{20, 158, 207}:  "Dell Inc.",
+       [3]byte{20, 159, 60}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{20, 159, 182}:  "GUANGDONG GENIUS TECHNOLOGY CO.,LTD.",
+       [3]byte{20, 159, 232}:  "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{20, 160, 248}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{20, 163, 100}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{20, 165, 26}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{20, 166, 44}:   "S.M. Dezac S.A.",
+       [3]byte{20, 167, 139}:  "Zhejiang Dahua Technology Co., Ltd.",
+       [3]byte{20, 168, 107}:  "ShenZhen Telacom Science&Technology Co., Ltd",
+       [3]byte{20, 169, 227}:  "MST CORPORATION",
+       [3]byte{20, 171, 197}:  "Intel Corporate",
+       [3]byte{20, 171, 240}:  "ARRIS Group, Inc.",
+       [3]byte{20, 174, 219}:  "VTech Telecommunications Ltd.",
+       [3]byte{20, 177, 38}:   "Industrial Software Co",
+       [3]byte{20, 177, 200}:  "InfiniWing, Inc.",
+       [3]byte{20, 179, 31}:   "Dell Inc.",
+       [3]byte{20, 179, 112}:  "Gigaset Digital Technology (Shenzhen) Co., Ltd.",
+       [3]byte{20, 180, 132}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{20, 183, 61}:   "ARCHEAN Technologies",
+       [3]byte{20, 183, 248}:  "Technicolor CH USA Inc.",
+       [3]byte{20, 184, 55}:   "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{20, 185, 104}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{20, 187, 110}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{20, 189, 97}:   "Apple, Inc.",
+       [3]byte{20, 192, 137}:  "DUNE HD LTD",
+       [3]byte{20, 193, 38}:   "Nokia Corporation",
+       [3]byte{20, 193, 255}:  "ShenZhen QianHai Comlan communication Co.,LTD",
+       [3]byte{20, 194, 29}:   "Sabtech Industries",
+       [3]byte{20, 195, 194}:  "K.A. Schmersal GmbH & Co. KG",
+       [3]byte{20, 201, 19}:   "LG Electronics",
+       [3]byte{20, 204, 32}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{20, 207, 141}:  "OHSUNG",
+       [3]byte{20, 207, 146}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{20, 207, 226}:  "ARRIS Group, Inc.",
+       [3]byte{20, 209, 31}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{20, 212, 254}:  "ARRIS Group, Inc.",
+       [3]byte{20, 214, 77}:   "D-Link International",
+       [3]byte{20, 215, 110}:  "CONCH ELECTRONIC Co.,Ltd",
+       [3]byte{20, 218, 233}:  "ASUSTek COMPUTER INC.",
+       [3]byte{20, 219, 133}:  "S NET MEDIA",
+       [3]byte{20, 221, 169}:  "ASUSTek COMPUTER INC.",
+       [3]byte{20, 221, 229}:  "MPMKVVCL",
+       [3]byte{20, 228, 236}:  "mLogic LLC",
+       [3]byte{20, 230, 228}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{20, 231, 200}:  "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{20, 235, 51}:   "BSMediasoft Co., Ltd.",
+       [3]byte{20, 237, 165}:  "Wächter GmbH Sicherheitssysteme",
+       [3]byte{20, 237, 187}:  "2Wire Inc",
+       [3]byte{20, 237, 228}:  "Kaiam Corporation",
+       [3]byte{20, 238, 157}:  "AirNav Systems LLC",
+       [3]byte{20, 240, 197}:  "Xtremio Ltd.",
+       [3]byte{20, 242, 142}:  "ShenYang ZhongKe-Allwin Technology Co.LTD",
+       [3]byte{20, 244, 42}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{20, 246, 90}:   "Xiaomi Communications Co Ltd",
+       [3]byte{20, 248, 147}:  "Wuhan FiberHome Digital Technology Co.,Ltd.",
+       [3]byte{20, 254, 175}:  "SAGITTAR LIMITED",
+       [3]byte{20, 254, 181}:  "Dell Inc.",
+       [3]byte{24, 0, 45}:     "Sony Mobile Communications AB",
+       [3]byte{24, 0, 219}:    "Fitbit Inc.",
+       [3]byte{24, 1, 125}:    "Harbin Arteor technology co., LTD",
+       [3]byte{24, 1, 227}:    "Bittium Wireless Ltd",
+       [3]byte{24, 3, 115}:    "Dell Inc.",
+       [3]byte{24, 3, 250}:    "IBT Interfaces",
+       [3]byte{24, 6, 117}:    "Dilax Intelcom GmbH",
+       [3]byte{24, 6, 255}:    "Acer Computer(Shanghai) Limited.",
+       [3]byte{24, 11, 82}:    "Nanotron Technologies GmbH",
+       [3]byte{24, 12, 20}:    "iSonea Limited",
+       [3]byte{24, 12, 119}:   "Westinghouse Electric Company, LLC",
+       [3]byte{24, 12, 172}:   "CANON INC.",
+       [3]byte{24, 16, 78}:    "CEDINT-UPM",
+       [3]byte{24, 18, 18}:    "Cepton Technologies",
+       [3]byte{24, 20, 32}:    "TEB SAS",
+       [3]byte{24, 20, 86}:    "Nokia Corporation",
+       [3]byte{24, 22, 201}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 23, 20}:    "DAEWOOIS",
+       [3]byte{24, 23, 37}:    "Cameo Communications, Inc.",
+       [3]byte{24, 25, 63}:    "Tamtron Oy",
+       [3]byte{24, 27, 235}:   "Actiontec Electronics, Inc",
+       [3]byte{24, 30, 120}:   "Sagemcom Broadband SAS",
+       [3]byte{24, 30, 176}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 32, 18}:    "Aztech Associates Inc.",
+       [3]byte{24, 32, 50}:    "Apple, Inc.",
+       [3]byte{24, 32, 76}:    "Kummler+Matter AG",
+       [3]byte{24, 32, 166}:   "Sage Co., Ltd.",
+       [3]byte{24, 33, 149}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 34, 126}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 38, 102}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 40, 97}:    "AirTies Wireless Networks",
+       [3]byte{24, 42, 123}:   "Nintendo Co., Ltd.",
+       [3]byte{24, 43, 5}:     "8D Technologies",
+       [3]byte{24, 44, 145}:   "Concept Development, Inc.",
+       [3]byte{24, 44, 180}:   "Nectarsoft Co., Ltd.",
+       [3]byte{24, 45, 152}:   "Jinwoo Industrial system",
+       [3]byte{24, 48, 9}:     "Woojin Industrial Systems Co., Ltd.",
+       [3]byte{24, 50, 162}:   "LAON TECHNOLOGY CO., LTD.",
+       [3]byte{24, 51, 157}:   "Cisco Systems, Inc",
+       [3]byte{24, 52, 81}:    "Apple, Inc.",
+       [3]byte{24, 53, 209}:   "ARRIS Group, Inc.",
+       [3]byte{24, 54, 252}:   "Elecsys International Corporation",
+       [3]byte{24, 56, 37}:    "Wuhan Lingjiu High-tech Co.,Ltd.",
+       [3]byte{24, 56, 100}:   "CAP-TECH INTERNATIONAL CO., LTD.",
+       [3]byte{24, 57, 25}:    "Unicoi Systems",
+       [3]byte{24, 57, 110}:   "SUNSEA TELECOMMUNICATIONS CO.,LTD.",
+       [3]byte{24, 58, 45}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 59, 210}:   "BYD Precision Manufacture Company Ltd.",
+       [3]byte{24, 61, 162}:   "Intel Corporate",
+       [3]byte{24, 63, 71}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 64, 164}:   "Shenzhen Trylong Smart Science and Technology Co., Ltd.",
+       [3]byte{24, 66, 29}:    "Private",
+       [3]byte{24, 66, 47}:    "Alcatel Lucent",
+       [3]byte{24, 68, 98}:    "Riava Networks, Inc.",
+       [3]byte{24, 68, 230}:   "zte corporation",
+       [3]byte{24, 70, 23}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 72, 216}:   "Fastback Networks",
+       [3]byte{24, 74, 111}:   "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{24, 78, 148}:   "MESSOA TECHNOLOGIES INC.",
+       [3]byte{24, 79, 50}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{24, 82, 7}:     "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{24, 82, 83}:    "Pixord Corporation",
+       [3]byte{24, 82, 130}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{24, 83, 224}:   "Hanyang Digitech Co.Ltd",
+       [3]byte{24, 85, 15}:    "Cisco SPVTG",
+       [3]byte{24, 89, 51}:    "Cisco SPVTG",
+       [3]byte{24, 89, 54}:    "Xiaomi Communications Co Ltd",
+       [3]byte{24, 90, 232}:   "Zenotech.Co.,Ltd",
+       [3]byte{24, 93, 154}:   "BobjGear LLC",
+       [3]byte{24, 94, 15}:    "Intel Corporate",
+       [3]byte{24, 96, 36}:    "Hewlett Packard",
+       [3]byte{24, 97, 199}:   "lemonbeat GmbH",
+       [3]byte{24, 98, 44}:    "Sagemcom Broadband SAS",
+       [3]byte{24, 100, 114}:  "Aruba Networks",
+       [3]byte{24, 101, 113}:  "Top Victory Electronics (Taiwan) Co., Ltd.",
+       [3]byte{24, 101, 144}:  "Apple, Inc.",
+       [3]byte{24, 102, 218}:  "Dell Inc.",
+       [3]byte{24, 102, 227}:  "Veros Systems, Inc.",
+       [3]byte{24, 103, 63}:   "Hanover Displays Limited",
+       [3]byte{24, 103, 81}:   "KOMEG Industrielle Messtechnik GmbH",
+       [3]byte{24, 103, 176}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 104, 106}:  "zte corporation",
+       [3]byte{24, 104, 130}:  "Beward R&D Co., Ltd.",
+       [3]byte{24, 104, 203}:  "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{24, 109, 153}:  "Adanis Inc.",
+       [3]byte{24, 113, 23}:   "eta plus electronic gmbh",
+       [3]byte{24, 116, 46}:   "Amazon Technologies Inc.",
+       [3]byte{24, 117, 50}:   "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{24, 121, 162}:  "GMJ ELECTRIC LIMITED",
+       [3]byte{24, 122, 147}:  "AMICCOM Electronics Corporation",
+       [3]byte{24, 124, 129}:  "Valeo Vision Systems",
+       [3]byte{24, 126, 213}:  "shenzhen kaism technology Co. Ltd",
+       [3]byte{24, 128, 144}:  "Cisco Systems, Inc",
+       [3]byte{24, 128, 206}:  "Barberry Solutions Ltd",
+       [3]byte{24, 128, 245}:  "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{24, 130, 25}:   "Alibaba Cloud Computing Ltd.",
+       [3]byte{24, 131, 49}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 131, 191}:  "Arcadyan Technology Corporation",
+       [3]byte{24, 132, 16}:   "CoreTrust Inc.",
+       [3]byte{24, 134, 58}:   "DIGITAL ART SYSTEM",
+       [3]byte{24, 134, 172}:  "Nokia Danmark A/S",
+       [3]byte{24, 135, 150}:  "HTC Corporation",
+       [3]byte{24, 136, 87}:   "Beijing Jinhong Xi-Dian Information Technology Corp.",
+       [3]byte{24, 137, 91}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 137, 223}:  "CerebrEX Inc.",
+       [3]byte{24, 139, 21}:   "ShenZhen ZhongRuiJing Technology co.,LTD",
+       [3]byte{24, 139, 69}:   "Cisco Systems, Inc",
+       [3]byte{24, 139, 157}:  "Cisco Systems, Inc",
+       [3]byte{24, 142, 213}:  "TP Vision Belgium N.V. - innovation site Brugge",
+       [3]byte{24, 142, 249}:  "G2C Co. Ltd.",
+       [3]byte{24, 144, 216}:  "Sagemcom Broadband SAS",
+       [3]byte{24, 146, 44}:   "Virtual Instruments",
+       [3]byte{24, 147, 215}:  "Texas Instruments",
+       [3]byte{24, 151, 255}:  "TechFaith Wireless Technology Limited",
+       [3]byte{24, 153, 245}:  "Sichuan Changhong Electric Ltd.",
+       [3]byte{24, 154, 103}:  "CSE-Servelec Limited",
+       [3]byte{24, 155, 165}:  "IEEE Registration Authority",
+       [3]byte{24, 156, 93}:   "Cisco Systems, Inc",
+       [3]byte{24, 158, 252}:  "Apple, Inc.",
+       [3]byte{24, 163, 232}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{24, 166, 247}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{24, 169, 5}:    "Hewlett Packard",
+       [3]byte{24, 169, 88}:   "PROVISION THAI CO., LTD.",
+       [3]byte{24, 169, 155}:  "Dell Inc.",
+       [3]byte{24, 170, 69}:   "Fon Technology",
+       [3]byte{24, 171, 245}:  "Ultra Electronics Electrics",
+       [3]byte{24, 173, 77}:   "Polostar Technology Corporation",
+       [3]byte{24, 174, 187}:  "Siemens Convergence Creators GmbH&Co.KG",
+       [3]byte{24, 175, 97}:   "Apple, Inc.",
+       [3]byte{24, 175, 143}:  "Apple, Inc.",
+       [3]byte{24, 175, 159}:  "DIGITRONIC Automationsanlagen GmbH",
+       [3]byte{24, 177, 105}:  "Sonicwall",
+       [3]byte{24, 178, 9}:    "Torrey Pines Logic, Inc",
+       [3]byte{24, 179, 186}:  "Netlogic AB",
+       [3]byte{24, 180, 48}:   "Nest Labs Inc.",
+       [3]byte{24, 181, 145}:  "I-Storm",
+       [3]byte{24, 183, 158}:  "Invoxia",
+       [3]byte{24, 184, 31}:   "ARRIS Group, Inc.",
+       [3]byte{24, 188, 90}:   "Zhejiang Tmall Technology Co., Ltd.",
+       [3]byte{24, 189, 173}:  "L-TECH CORPORATION",
+       [3]byte{24, 192, 134}:  "Broadcom",
+       [3]byte{24, 193, 157}:  "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{24, 196, 81}:   "Tucson Embedded Systems",
+       [3]byte{24, 197, 1}:    "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{24, 197, 138}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{24, 200, 231}:  "Shenzhen Hualistone Technology Co.,Ltd",
+       [3]byte{24, 204, 35}:   "Philio Technology Corporation",
+       [3]byte{24, 204, 136}:  "Hitachi Johnson Controls Air",
+       [3]byte{24, 207, 94}:   "Liteon Technology Corporation",
+       [3]byte{24, 208, 113}:  "DASAN CO., LTD.",
+       [3]byte{24, 210, 37}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{24, 210, 118}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{24, 213, 182}:  "SMG Holdings LLC",
+       [3]byte{24, 214, 106}:  "Inmarsat",
+       [3]byte{24, 214, 199}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{24, 214, 207}:  "Kurth Electronic GmbH",
+       [3]byte{24, 217, 73}:   "Qvis Labs, LLC",
+       [3]byte{24, 219, 242}:  "Dell Inc.",
+       [3]byte{24, 220, 86}:   "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+       [3]byte{24, 222, 215}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{24, 226, 136}:  "STT Condigi",
+       [3]byte{24, 226, 159}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{24, 226, 194}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{24, 227, 188}:  "TCT mobile ltd",
+       [3]byte{24, 231, 40}:   "Cisco Systems, Inc",
+       [3]byte{24, 231, 244}:  "Apple, Inc.",
+       [3]byte{24, 232, 15}:   "Viking Electronics Inc.",
+       [3]byte{24, 232, 221}:  "MODULETEK",
+       [3]byte{24, 238, 105}:  "Apple, Inc.",
+       [3]byte{24, 239, 99}:   "Cisco Systems, Inc",
+       [3]byte{24, 240, 228}:  "Xiaomi Communications Co Ltd",
+       [3]byte{24, 241, 69}:   "NetComm Wireless Limited",
+       [3]byte{24, 242, 146}:  "Shannon Systems",
+       [3]byte{24, 244, 106}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{24, 246, 67}:   "Apple, Inc.",
+       [3]byte{24, 246, 80}:   "Multimedia Pacific Limited",
+       [3]byte{24, 247, 107}:  "Zhejiang Winsight Technology CO.,LTD",
+       [3]byte{24, 248, 122}:  "i3 International Inc.",
+       [3]byte{24, 250, 111}:  "ISC applied systems corp",
+       [3]byte{24, 251, 123}:  "Dell Inc.",
+       [3]byte{24, 252, 159}:  "Changhe Electronics Co., Ltd.",
+       [3]byte{24, 254, 52}:   "Espressif Inc.",
+       [3]byte{24, 255, 15}:   "Intel Corporate",
+       [3]byte{24, 255, 46}:   "Shenzhen Rui Ying Da Technology Co., Ltd",
+       [3]byte{28, 6, 86}:     "IDY Corporation",
+       [3]byte{28, 8, 193}:    "Lg Innotek",
+       [3]byte{28, 11, 82}:    "EPICOM S.A",
+       [3]byte{28, 15, 175}:   "Lucid Vision Labs",
+       [3]byte{28, 15, 207}:   "Sypro Optics GmbH",
+       [3]byte{28, 17, 225}:   "Wartsila Finland Oy",
+       [3]byte{28, 18, 157}:   "IEEE PES PSRC/SUB",
+       [3]byte{28, 20, 72}:    "ARRIS Group, Inc.",
+       [3]byte{28, 20, 179}:   "Airwire Technologies",
+       [3]byte{28, 21, 31}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{28, 23, 211}:   "Cisco Systems, Inc",
+       [3]byte{28, 24, 74}:    "ShenZhen RicherLink Technologies Co.,LTD",
+       [3]byte{28, 25, 222}:   "eyevis GmbH",
+       [3]byte{28, 26, 192}:   "Apple, Inc.",
+       [3]byte{28, 27, 13}:    "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{28, 27, 104}:   "ARRIS Group, Inc.",
+       [3]byte{28, 28, 253}:   "Dalian Hi-Think Computer Technology, Corp",
+       [3]byte{28, 29, 103}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{28, 29, 134}:   "Cisco Systems, Inc",
+       [3]byte{28, 30, 227}:   "Hui Zhou Gaoshengda Technology Co.,LTD",
+       [3]byte{28, 31, 212}:   "LifeBEAM Technologies LTD",
+       [3]byte{28, 33, 209}:   "IEEE Registration Authority",
+       [3]byte{28, 35, 44}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{28, 35, 79}:    "EDMI  Europe Ltd",
+       [3]byte{28, 37, 225}:   "China Mobile IOT Company Limited",
+       [3]byte{28, 39, 221}:   "Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.",
+       [3]byte{28, 51, 14}:    "PernixData",
+       [3]byte{28, 51, 77}:    "ITS Telecom",
+       [3]byte{28, 52, 119}:   "Innovation Wireless",
+       [3]byte{28, 53, 241}:   "NEW Lift Neue Elektronische Wege Steuerungsbau GmbH",
+       [3]byte{28, 54, 187}:   "Apple, Inc.",
+       [3]byte{28, 55, 191}:   "Cloudium Systems Ltd.",
+       [3]byte{28, 57, 71}:    "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{28, 57, 138}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{28, 58, 79}:    "AccuSpec Electronics, LLC",
+       [3]byte{28, 58, 222}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{28, 61, 231}:   "Sigma Koki Co.,Ltd.",
+       [3]byte{28, 62, 132}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{28, 64, 36}:    "Dell Inc.",
+       [3]byte{28, 64, 232}:   "SHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD",
+       [3]byte{28, 65, 88}:    "Gemalto M2M GmbH",
+       [3]byte{28, 67, 236}:   "JAPAN CIRCUIT CO.,LTD",
+       [3]byte{28, 68, 25}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{28, 69, 147}:   "Texas Instruments",
+       [3]byte{28, 72, 64}:    "IMS Messsysteme GmbH",
+       [3]byte{28, 72, 206}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{28, 72, 249}:   "GN Netcom A/S",
+       [3]byte{28, 73, 123}:   "Gemtek Technology Co., Ltd.",
+       [3]byte{28, 74, 247}:   "AMON INC",
+       [3]byte{28, 75, 185}:   "SMG ENTERPRISE, LLC",
+       [3]byte{28, 75, 214}:   "AzureWave Technology Inc.",
+       [3]byte{28, 77, 112}:   "Intel Corporate",
+       [3]byte{28, 81, 181}:   "Techaya LTD",
+       [3]byte{28, 82, 22}:    "DONGGUAN HELE ELECTRONICS CO., LTD",
+       [3]byte{28, 82, 214}:   "FLAT DISPLAY TECHNOLOGY CORPORATION",
+       [3]byte{28, 85, 58}:    "QianGua Corp.",
+       [3]byte{28, 86, 254}:   "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{28, 87, 216}:   "Kraftway Corporation PLC",
+       [3]byte{28, 90, 11}:    "Tegile Systems",
+       [3]byte{28, 90, 62}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{28, 90, 107}:   "Philips Electronics Nederland BV",
+       [3]byte{28, 92, 85}:    "PRIMA Cinema, Inc",
+       [3]byte{28, 92, 96}:    "Shenzhen Belzon Technology Co.,LTD.",
+       [3]byte{28, 92, 242}:   "Apple, Inc.",
+       [3]byte{28, 95, 43}:    "D-Link International",
+       [3]byte{28, 95, 255}:   "Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch",
+       [3]byte{28, 96, 222}:   "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{28, 98, 184}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{28, 99, 183}:   "OpenProducts 237 AB",
+       [3]byte{28, 101, 157}:  "Liteon Technology Corporation",
+       [3]byte{28, 102, 109}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{28, 102, 170}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{28, 103, 88}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{28, 105, 165}:  "BlackBerry RTS",
+       [3]byte{28, 106, 122}:  "Cisco Systems, Inc",
+       [3]byte{28, 107, 202}:  "Mitsunami Co., Ltd.",
+       [3]byte{28, 110, 76}:   "Logistic Service & Engineering Co.,Ltd",
+       [3]byte{28, 110, 118}:  "Quarion Technology Inc",
+       [3]byte{28, 111, 101}:  "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{28, 112, 34}:   "Murata Manufacturing Co., Ltd.",
+       [3]byte{28, 115, 40}:   "Connected Home",
+       [3]byte{28, 115, 112}:  "Neotech",
+       [3]byte{28, 116, 13}:   "Zyxel Communications Corporation",
+       [3]byte{28, 117, 8}:    "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{28, 118, 202}:  "Terasic Technologies Inc.",
+       [3]byte{28, 119, 246}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{28, 120, 57}:   "Shenzhen Tencent Computer System Co., Ltd.",
+       [3]byte{28, 123, 33}:   "Sony Mobile Communications AB",
+       [3]byte{28, 123, 35}:   "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{28, 124, 17}:   "EID",
+       [3]byte{28, 124, 69}:   "Vitek Industrial Video Products, Inc.",
+       [3]byte{28, 124, 199}:  "Coriant GmbH",
+       [3]byte{28, 125, 34}:   "Fuji Xerox Co., Ltd.",
+       [3]byte{28, 126, 81}:   "3bumen.com",
+       [3]byte{28, 126, 229}:  "D-Link International",
+       [3]byte{28, 131, 65}:   "Hefei Bitland Information Technology Co.Ltd",
+       [3]byte{28, 131, 176}:  "Linked IP GmbH",
+       [3]byte{28, 132, 100}:  "FORMOSA WIRELESS COMMUNICATION CORP.",
+       [3]byte{28, 134, 173}:  "MCT CO., LTD.",
+       [3]byte{28, 135, 44}:   "ASUSTek COMPUTER INC.",
+       [3]byte{28, 142, 92}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{28, 142, 142}:  "DB Communication & Systems Co., ltd.",
+       [3]byte{28, 143, 138}:  "Phase Motion Control SpA",
+       [3]byte{28, 145, 72}:   "Apple, Inc.",
+       [3]byte{28, 145, 121}:  "Integrated System Technologies Ltd",
+       [3]byte{28, 148, 146}:  "RUAG Schweiz AG",
+       [3]byte{28, 149, 93}:   "I-LAX ELECTRONICS INC.",
+       [3]byte{28, 149, 159}:  "Veethree Electronics And Marine LLC",
+       [3]byte{28, 150, 90}:   "Weifang GoerTek Technology Co.,Ltd.",
+       [3]byte{28, 151, 61}:   "PRICOM Design",
+       [3]byte{28, 152, 236}:  "Hewlett Packard Enterprise",
+       [3]byte{28, 153, 76}:   "Murata Manufacturing Co., Ltd.",
+       [3]byte{28, 156, 38}:   "Zoovel Technologies",
+       [3]byte{28, 157, 62}:   "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{28, 158, 70}:   "Apple, Inc.",
+       [3]byte{28, 158, 203}:  "Beijing Nari Smartchip Microelectronics Company Limited",
+       [3]byte{28, 160, 211}:  "IEEE Registration Authority",
+       [3]byte{28, 162, 177}:  "ruwido austria gmbh",
+       [3]byte{28, 165, 50}:   "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{28, 167, 112}:  "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+       [3]byte{28, 170, 7}:    "Cisco Systems, Inc",
+       [3]byte{28, 171, 1}:    "Innovolt",
+       [3]byte{28, 171, 52}:   "New H3C Technologies Co., Ltd",
+       [3]byte{28, 171, 167}:  "Apple, Inc.",
+       [3]byte{28, 171, 192}:  "Hitron Technologies. Inc",
+       [3]byte{28, 173, 209}:  "Bosung Electronics Co., Ltd.",
+       [3]byte{28, 175, 5}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{28, 175, 247}:  "D-Link International",
+       [3]byte{28, 176, 148}:  "HTC Corporation",
+       [3]byte{28, 177, 127}:  "NEC Platforms, Ltd.",
+       [3]byte{28, 178, 67}:   "TDC A/S",
+       [3]byte{28, 183, 44}:   "ASUSTek COMPUTER INC.",
+       [3]byte{28, 184, 87}:   "Becon Technologies Co,.Ltd.",
+       [3]byte{28, 185, 196}:  "Ruckus Wireless",
+       [3]byte{28, 186, 140}:  "Texas Instruments",
+       [3]byte{28, 187, 168}:  "OJSC Ufimskiy Zavod Promsvyaz",
+       [3]byte{28, 189, 14}:   "Amplified Engineering Pty Ltd",
+       [3]byte{28, 189, 185}:  "D-Link International",
+       [3]byte{28, 192, 53}:   "PLANEX COMMUNICATIONS INC.",
+       [3]byte{28, 192, 225}:  "IEEE Registration Authority",
+       [3]byte{28, 193, 26}:   "Wavetronix",
+       [3]byte{28, 193, 222}:  "Hewlett Packard",
+       [3]byte{28, 195, 22}:   "MileSight Technology Co., Ltd.",
+       [3]byte{28, 197, 134}:  "Absolute Acoustics",
+       [3]byte{28, 198, 60}:   "Arcadyan Technology Corporation",
+       [3]byte{28, 199, 45}:   "Shenzhen Huapu Digital CO.,Ltd",
+       [3]byte{28, 202, 227}:  "IEEE Registration Authority",
+       [3]byte{28, 203, 153}:  "TCT mobile ltd",
+       [3]byte{28, 205, 229}:  "Shanghai Wind Technologies Co.,Ltd",
+       [3]byte{28, 212, 12}:   "Kriwan Industrie-Elektronik GmbH",
+       [3]byte{28, 214, 189}:  "LEEDARSON LIGHTING CO., LTD.",
+       [3]byte{28, 218, 39}:   "vivo Mobile Communication Co., Ltd.",
+       [3]byte{28, 221, 234}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{28, 222, 167}:  "Cisco Systems, Inc",
+       [3]byte{28, 223, 15}:   "Cisco Systems, Inc",
+       [3]byte{28, 223, 82}:   "Texas Instruments",
+       [3]byte{28, 225, 101}:  "Marshal Corporation",
+       [3]byte{28, 225, 146}:  "Qisda Corporation",
+       [3]byte{28, 226, 204}:  "Texas Instruments",
+       [3]byte{28, 230, 43}:   "Apple, Inc.",
+       [3]byte{28, 230, 199}:  "Cisco Systems, Inc",
+       [3]byte{28, 232, 93}:   "Cisco Systems, Inc",
+       [3]byte{28, 234, 27}:   "Nokia",
+       [3]byte{28, 238, 201}:  "Elo touch solutions",
+       [3]byte{28, 238, 232}:  "Ilshin Elecom",
+       [3]byte{28, 239, 206}:  "bebro electronic GmbH",
+       [3]byte{28, 240, 62}:   "Wearhaus Inc.",
+       [3]byte{28, 240, 97}:   "SCAPS GmbH",
+       [3]byte{28, 244, 202}:  "Private",
+       [3]byte{28, 245, 231}:  "Turtle Industry Co., Ltd.",
+       [3]byte{28, 250, 104}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{28, 252, 187}:  "Realfiction ApS",
+       [3]byte{28, 254, 167}:  "IDentytech Solutins Ltd.",
+       [3]byte{32, 1, 79}:     "Linea Research Ltd",
+       [3]byte{32, 2, 175}:    "Murata Manufacturing Co., Ltd.",
+       [3]byte{32, 4, 15}:     "Dell Inc.",
+       [3]byte{32, 5, 5}:      "RADMAX COMMUNICATION PRIVATE LIMITED",
+       [3]byte{32, 5, 232}:    "OOO InProMedia",
+       [3]byte{32, 8, 237}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{32, 10, 94}:    "Xiangshan Giant Eagle Technology Developing Co., Ltd.",
+       [3]byte{32, 11, 199}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{32, 12, 200}:   "NETGEAR",
+       [3]byte{32, 14, 149}:   "IEC – TC9 WG43",
+       [3]byte{32, 16, 122}:   "Gemtek Technology Co., Ltd.",
+       [3]byte{32, 18, 87}:    "Most Lucky Trading Ltd",
+       [3]byte{32, 18, 213}:   "Scientech Materials Corporation",
+       [3]byte{32, 19, 224}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{32, 22, 216}:   "Liteon Technology Corporation",
+       [3]byte{32, 24, 14}:    "Shenzhen Sunchip Technology Co., Ltd",
+       [3]byte{32, 26, 6}:     "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{32, 29, 3}:     "Elatec GmbH",
+       [3]byte{32, 33, 165}:   "LG Electronics (Mobile Communications)",
+       [3]byte{32, 37, 100}:   "PEGATRON CORPORATION",
+       [3]byte{32, 37, 152}:   "Teleview",
+       [3]byte{32, 40, 188}:   "Visionscape Co,. Ltd.",
+       [3]byte{32, 43, 193}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{32, 44, 183}:   "Kong Yue Electronics & Information Industry (Xinhui) Ltd.",
+       [3]byte{32, 45, 7}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{32, 45, 248}:   "Digital Media Cartridge Ltd.",
+       [3]byte{32, 49, 235}:   "HDSN",
+       [3]byte{32, 55, 6}:     "Cisco Systems, Inc",
+       [3]byte{32, 55, 188}:   "Kuipers Electronic Engineering BV",
+       [3]byte{32, 58, 7}:     "Cisco Systems, Inc",
+       [3]byte{32, 58, 239}:   "Sivantos GmbH",
+       [3]byte{32, 60, 174}:   "Apple, Inc.",
+       [3]byte{32, 61, 102}:   "ARRIS Group, Inc.",
+       [3]byte{32, 61, 178}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{32, 64, 5}:     "feno GmbH",
+       [3]byte{32, 65, 90}:    "Smarteh d.o.o.",
+       [3]byte{32, 68, 58}:    "Schneider Electric Asia Pacific Ltd",
+       [3]byte{32, 70, 161}:   "VECOW Co., Ltd",
+       [3]byte{32, 70, 249}:   "Advanced Network Devices (dba:AND)",
+       [3]byte{32, 71, 71}:    "Dell Inc.",
+       [3]byte{32, 71, 237}:   "BSkyB Ltd",
+       [3]byte{32, 74, 170}:   "Hanscan Spain S.A.",
+       [3]byte{32, 76, 3}:     "Aruba Networks",
+       [3]byte{32, 76, 109}:   "Hugo Brennenstuhl Gmbh & Co. KG.",
+       [3]byte{32, 76, 158}:   "Cisco Systems, Inc",
+       [3]byte{32, 78, 107}:   "Axxana(israel) ltd",
+       [3]byte{32, 78, 113}:   "Juniper Networks",
+       [3]byte{32, 78, 127}:   "NETGEAR",
+       [3]byte{32, 83, 202}:   "Risk Technology Ltd",
+       [3]byte{32, 84, 118}:   "Sony Mobile Communications AB",
+       [3]byte{32, 84, 250}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{32, 85, 49}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{32, 85, 50}:    "Gotech International Technology Limited",
+       [3]byte{32, 87, 33}:    "Salix Technology CO., Ltd.",
+       [3]byte{32, 87, 175}:   "Shenzhen FH-NET OPTOELECTRONICS CO.,LTD",
+       [3]byte{32, 89, 160}:   "Paragon Technologies Inc.",
+       [3]byte{32, 90, 0}:     "Coval",
+       [3]byte{32, 91, 42}:    "Private",
+       [3]byte{32, 91, 94}:    "Shenzhen Wonhe Technology Co., Ltd",
+       [3]byte{32, 92, 250}:   "Yangzhou ChangLian Network Technology Co,ltd.",
+       [3]byte{32, 93, 71}:    "vivo Mobile Communication Co., Ltd.",
+       [3]byte{32, 94, 247}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{32, 98, 116}:   "Microsoft Corporation",
+       [3]byte{32, 99, 95}:    "Abeeway",
+       [3]byte{32, 100, 50}:   "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{32, 103, 177}:  "Pluto inc.",
+       [3]byte{32, 104, 157}:  "Liteon Technology Corporation",
+       [3]byte{32, 106, 138}:  "Wistron Infocomm (Zhongshan) Corporation",
+       [3]byte{32, 106, 255}:  "Atlas Elektronik UK Limited",
+       [3]byte{32, 107, 231}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{32, 108, 138}:  "Aerohive Networks Inc.",
+       [3]byte{32, 110, 156}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{32, 111, 236}:  "Braemac CA LLC",
+       [3]byte{32, 113, 158}:  "SF Technology Co.,Ltd",
+       [3]byte{32, 115, 85}:   "ARRIS Group, Inc.",
+       [3]byte{32, 116, 207}:  "Shenzhen Voxtech Co.,Ltd",
+       [3]byte{32, 118, 0}:    "Actiontec Electronics, Inc",
+       [3]byte{32, 118, 143}:  "Apple, Inc.",
+       [3]byte{32, 118, 147}:  "Lenovo (Beijing) Limited.",
+       [3]byte{32, 120, 11}:   "Delta Faucet Company",
+       [3]byte{32, 120, 82}:   "Nokia",
+       [3]byte{32, 120, 240}:  "Apple, Inc.",
+       [3]byte{32, 124, 143}:  "Quanta Microsystems,Inc.",
+       [3]byte{32, 125, 116}:  "Apple, Inc.",
+       [3]byte{32, 130, 192}:  "Xiaomi Communications Co Ltd",
+       [3]byte{32, 133, 140}:  "Assa",
+       [3]byte{32, 135, 86}:   "SIEMENS AG",
+       [3]byte{32, 135, 172}:  "AES motomation",
+       [3]byte{32, 137, 111}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{32, 137, 132}:  "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{32, 137, 134}:  "zte corporation",
+       [3]byte{32, 139, 55}:   "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+       [3]byte{32, 144, 111}:  "Shenzhen Tencent Computer System Co., Ltd.",
+       [3]byte{32, 145, 72}:   "Texas Instruments",
+       [3]byte{32, 145, 138}:  "PROFALUX",
+       [3]byte{32, 145, 217}:  "I'M SPA",
+       [3]byte{32, 147, 77}:   "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+       [3]byte{32, 154, 233}:  "Volacomm Co., Ltd",
+       [3]byte{32, 155, 165}:  "JIAXING GLEAD Electronics Co.,Ltd",
+       [3]byte{32, 155, 205}:  "Apple, Inc.",
+       [3]byte{32, 162, 228}:  "Apple, Inc.",
+       [3]byte{32, 162, 231}:  "Lee-Dickens Ltd",
+       [3]byte{32, 166, 128}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{32, 166, 205}:  "Hewlett Packard Enterprise",
+       [3]byte{32, 167, 131}:  "miControl GmbH",
+       [3]byte{32, 167, 135}:  "Bointec Taiwan Corporation Limited",
+       [3]byte{32, 168, 185}:  "Siemens",
+       [3]byte{32, 169, 14}:   "TCT mobile ltd",
+       [3]byte{32, 169, 155}:  "Microsoft Corporation",
+       [3]byte{32, 170, 37}:   "IP-NET LLC",
+       [3]byte{32, 170, 75}:   "Cisco-Linksys, LLC",
+       [3]byte{32, 171, 55}:   "Apple, Inc.",
+       [3]byte{32, 176, 247}:  "Enclustra GmbH",
+       [3]byte{32, 179, 153}:  "Enterasys",
+       [3]byte{32, 181, 198}:  "Mimosa Networks",
+       [3]byte{32, 183, 192}:  "OMICRON electronics GmbH",
+       [3]byte{32, 187, 118}:  "COL GIOVANNI PAOLO SpA",
+       [3]byte{32, 187, 192}:  "Cisco Systems, Inc",
+       [3]byte{32, 187, 198}:  "Jabil Circuit Hungary Ltd.",
+       [3]byte{32, 191, 219}:  "DVL",
+       [3]byte{32, 192, 71}:   "Verizon",
+       [3]byte{32, 192, 109}:  "SHENZHEN SPACETEK TECHNOLOGY CO.,LTD",
+       [3]byte{32, 193, 175}:  "i Wit Digital Co., Limited",
+       [3]byte{32, 195, 143}:  "Texas Instruments",
+       [3]byte{32, 195, 164}:  "RetailNext",
+       [3]byte{32, 198, 13}:   "Shanghai annijie Information technology Co.,LTD",
+       [3]byte{32, 198, 235}:  "Panasonic Corporation AVC Networks Company",
+       [3]byte{32, 200, 179}:  "SHENZHEN BUL-TECH CO.,LTD.",
+       [3]byte{32, 201, 208}:  "Apple, Inc.",
+       [3]byte{32, 205, 57}:   "Texas Instruments",
+       [3]byte{32, 206, 196}:  "Peraso Technologies",
+       [3]byte{32, 207, 48}:   "ASUSTek COMPUTER INC.",
+       [3]byte{32, 209, 96}:   "Private",
+       [3]byte{32, 210, 31}:   "Wincal Technology Corp.",
+       [3]byte{32, 210, 95}:   "SmartCap Technologies",
+       [3]byte{32, 211, 144}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{32, 213, 171}:  "Korea Infocom Co.,Ltd.",
+       [3]byte{32, 213, 191}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{32, 214, 7}:    "Nokia Corporation",
+       [3]byte{32, 215, 90}:   "Posh Mobile Limited",
+       [3]byte{32, 217, 6}:    "Iota, Inc.",
+       [3]byte{32, 219, 171}:  "Samsung Electronics Co., Ltd.",
+       [3]byte{32, 220, 147}:  "Cheetah Hi-Tech, Inc.",
+       [3]byte{32, 220, 230}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{32, 223, 63}:   "Nanjing SAC Power Grid Automation Co., Ltd.",
+       [3]byte{32, 223, 185}:  "Google, Inc.",
+       [3]byte{32, 224, 156}:  "Nokia",
+       [3]byte{32, 228, 7}:    "Spark srl",
+       [3]byte{32, 229, 42}:   "NETGEAR",
+       [3]byte{32, 229, 100}:  "ARRIS Group, Inc.",
+       [3]byte{32, 231, 145}:  "Siemens Healthcare Diagnostics, Inc",
+       [3]byte{32, 234, 199}:  "SHENZHEN RIOPINE ELECTRONICS CO., LTD",
+       [3]byte{32, 237, 116}:  "Ability enterprise co.,Ltd.",
+       [3]byte{32, 238, 40}:   "Apple, Inc.",
+       [3]byte{32, 238, 198}:  "Elefirst Science & Tech Co ., ltd",
+       [3]byte{32, 240, 2}:    "MTData Developments Pty. Ltd.",
+       [3]byte{32, 241, 124}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{32, 241, 158}:  "ARRIS Group, Inc.",
+       [3]byte{32, 243, 163}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{32, 244, 27}:   "Shenzhen Bilian electronic CO.,LTD",
+       [3]byte{32, 244, 82}:   "Shanghai IUV Software Development Co. Ltd",
+       [3]byte{32, 245, 16}:   "Codex Digital Limited",
+       [3]byte{32, 245, 67}:   "Hui Zhou Gaoshengda Technology Co.,LTD",
+       [3]byte{32, 248, 94}:   "Delta Electronics",
+       [3]byte{32, 250, 187}:  "Cambridge Executive Limited",
+       [3]byte{32, 253, 241}:  "3COM EUROPE LTD",
+       [3]byte{32, 254, 205}:  "System In Frontier Inc.",
+       [3]byte{32, 254, 219}:  "M2M Solution S.A.S.",
+       [3]byte{36, 0, 186}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 1, 199}:    "Cisco Systems, Inc",
+       [3]byte{36, 5, 15}:     "MTN Electronic Co. Ltd",
+       [3]byte{36, 5, 245}:    "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{36, 9, 23}:     "Devlin Electronics Limited",
+       [3]byte{36, 9, 149}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 10, 17}:    "TCT mobile ltd",
+       [3]byte{36, 10, 100}:   "AzureWave Technology Inc.",
+       [3]byte{36, 10, 196}:   "Espressif Inc.",
+       [3]byte{36, 11, 10}:    "Palo Alto Networks",
+       [3]byte{36, 11, 42}:    "Viettel Group",
+       [3]byte{36, 11, 177}:   "KOSTAL Industrie Elektrik GmbH",
+       [3]byte{36, 13, 101}:   "Shenzhen Vsun Communication Technology Co., Ltd.",
+       [3]byte{36, 13, 108}:   "SMND",
+       [3]byte{36, 13, 194}:   "TCT mobile ltd",
+       [3]byte{36, 16, 100}:   "Shenzhen Ecsino Tecnical Co. Ltd",
+       [3]byte{36, 17, 37}:    "Hutek Co., Ltd.",
+       [3]byte{36, 17, 72}:    "Entropix, LLC",
+       [3]byte{36, 17, 208}:   "Chongqing Ehs Science and Technology Development Co.,Ltd.",
+       [3]byte{36, 26, 140}:   "Squarehead Technology AS",
+       [3]byte{36, 27, 19}:    "Shanghai Nutshell Electronic Co., Ltd.",
+       [3]byte{36, 27, 68}:    "Hangzhou Tuners Electronics Co., Ltd",
+       [3]byte{36, 28, 4}:     "SHENZHEN JEHE TECHNOLOGY DEVELOPMENT CO., LTD.",
+       [3]byte{36, 30, 235}:   "Apple, Inc.",
+       [3]byte{36, 31, 44}:    "Calsys, Inc.",
+       [3]byte{36, 31, 160}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 32, 199}:   "Sagemcom Broadband SAS",
+       [3]byte{36, 33, 171}:   "Sony Mobile Communications AB",
+       [3]byte{36, 36, 14}:    "Apple, Inc.",
+       [3]byte{36, 38, 66}:    "SHARP Corporation.",
+       [3]byte{36, 47, 250}:   "Toshiba Global Commerce Solutions",
+       [3]byte{36, 49, 132}:   "SHARP Corporation",
+       [3]byte{36, 51, 108}:   "Private",
+       [3]byte{36, 53, 204}:   "Zhongshan Scinan Internet of Things Co.,Ltd.",
+       [3]byte{36, 55, 76}:    "Cisco SPVTG",
+       [3]byte{36, 55, 239}:   "EMC Electronic Media Communication SA",
+       [3]byte{36, 60, 32}:    "Dynamode Group",
+       [3]byte{36, 66, 188}:   "Alinco,incorporated",
+       [3]byte{36, 68, 39}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 69, 151}:   "GEMUE Gebr. Mueller Apparatebau",
+       [3]byte{36, 71, 14}:    "PentronicAB",
+       [3]byte{36, 73, 123}:   "Innovative Converged Devices Inc",
+       [3]byte{36, 75, 3}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{36, 75, 129}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{36, 76, 7}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 78, 123}:   "IEEE Registration Authority",
+       [3]byte{36, 79, 29}:    "iRule LLC",
+       [3]byte{36, 88, 128}:   "VIZEO",
+       [3]byte{36, 89, 11}:    "White Sky Inc. Limited",
+       [3]byte{36, 91, 167}:   "Apple, Inc.",
+       [3]byte{36, 91, 240}:   "Liteon, Inc.",
+       [3]byte{36, 92, 191}:   "NCSE",
+       [3]byte{36, 92, 203}:   "AXIe Consortium, Inc.",
+       [3]byte{36, 94, 190}:   "QNAP Systems, Inc.",
+       [3]byte{36, 95, 223}:   "KYOCERA CORPORATION",
+       [3]byte{36, 96, 129}:   "razberi technologies",
+       [3]byte{36, 97, 90}:    "China Mobile Group Device Co.,Ltd.",
+       [3]byte{36, 98, 120}:   "sysmocom - systems for mobile communications GmbH",
+       [3]byte{36, 100, 239}:  "CYG SUNRI CO.,LTD.",
+       [3]byte{36, 101, 17}:   "AVM GmbH",
+       [3]byte{36, 104, 128}:  "Braveridge.co.,ltd.",
+       [3]byte{36, 105, 62}:   "innodisk Corporation",
+       [3]byte{36, 105, 74}:   "Jasmine Systems Inc.",
+       [3]byte{36, 105, 104}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{36, 105, 165}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 106, 171}:  "IT-IS International",
+       [3]byte{36, 108, 138}:  "YUKAI Engineering",
+       [3]byte{36, 110, 150}:  "Dell Inc.",
+       [3]byte{36, 113, 137}:  "Texas Instruments",
+       [3]byte{36, 114, 96}:   "IOTTECH Corp",
+       [3]byte{36, 118, 86}:   "Shanghai Net Miles Fiber Optics Technology Co., LTD.",
+       [3]byte{36, 118, 125}:  "Cisco SPVTG",
+       [3]byte{36, 119, 3}:    "Intel Corporate",
+       [3]byte{36, 121, 42}:   "Ruckus Wireless",
+       [3]byte{36, 124, 76}:   "Herman Miller",
+       [3]byte{36, 127, 32}:   "Sagemcom Broadband SAS",
+       [3]byte{36, 127, 60}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 128, 0}:    "Westcontrol AS",
+       [3]byte{36, 129, 170}:  "KSH International Co., Ltd.",
+       [3]byte{36, 130, 138}:  "Prowave Technologies Ltd.",
+       [3]byte{36, 134, 244}:  "Ctek, Inc.",
+       [3]byte{36, 135, 7}:    "SEnergy Corporation",
+       [3]byte{36, 136, 148}:  "shenzhen lensun Communication Technology LTD",
+       [3]byte{36, 138, 7}:    "Mellanox Technologies, Inc.",
+       [3]byte{36, 139, 224}:  "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{36, 146, 14}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{36, 147, 202}:  "Voxtronic Technology Computer-Systeme GmbH",
+       [3]byte{36, 148, 66}:   "OPEN ROAD SOLUTIONS , INC.",
+       [3]byte{36, 149, 4}:    "SFR",
+       [3]byte{36, 151, 237}:  "Techvision Intelligent Technology Limited",
+       [3]byte{36, 158, 171}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 160, 116}:  "Apple, Inc.",
+       [3]byte{36, 162, 225}:  "Apple, Inc.",
+       [3]byte{36, 164, 44}:   "KOUKAAM a.s.",
+       [3]byte{36, 164, 60}:   "Ubiquiti Networks Inc.",
+       [3]byte{36, 164, 149}:  "Thales Canada Inc.",
+       [3]byte{36, 165, 52}:   "SynTrust Tech International Ltd.",
+       [3]byte{36, 167, 220}:  "BSkyB Ltd",
+       [3]byte{36, 168, 125}:  "Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.",
+       [3]byte{36, 169, 55}:   "PURE Storage",
+       [3]byte{36, 171, 129}:  "Apple, Inc.",
+       [3]byte{36, 175, 74}:   "Alcatel-Lucent IPD",
+       [3]byte{36, 175, 84}:   "NEXGEN Mediatech Inc.",
+       [3]byte{36, 176, 169}:  "Shanghai Mobiletek Communication Ltd.",
+       [3]byte{36, 178, 9}:    "Avaya Inc",
+       [3]byte{36, 178, 222}:  "Espressif Inc.",
+       [3]byte{36, 182, 87}:   "Cisco Systems, Inc",
+       [3]byte{36, 182, 184}:  "FRIEM SPA",
+       [3]byte{36, 182, 253}:  "Dell Inc.",
+       [3]byte{36, 184, 140}:  "Crenus Co.,Ltd.",
+       [3]byte{36, 184, 210}:  "Opzoon Technology Co.,Ltd.",
+       [3]byte{36, 186, 19}:   "RISO KAGAKU CORPORATION",
+       [3]byte{36, 186, 48}:   "Technical Consumer Products, Inc.",
+       [3]byte{36, 187, 193}:  "Absolute Analysis",
+       [3]byte{36, 188, 130}:  "Dali Wireless, Inc.",
+       [3]byte{36, 188, 248}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 190, 5}:    "Hewlett Packard",
+       [3]byte{36, 191, 116}:  "Private",
+       [3]byte{36, 192, 179}:  "RSF",
+       [3]byte{36, 193, 189}:  "CRRC DALIAN R&D CO.,LTD.",
+       [3]byte{36, 195, 249}:  "Securitas Direct AB",
+       [3]byte{36, 196, 47}:   "Philips Lifeline",
+       [3]byte{36, 196, 74}:   "zte corporation",
+       [3]byte{36, 198, 150}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{36, 200, 72}:   "mywerk system GmbH",
+       [3]byte{36, 200, 110}:  "Chaney Instrument Co.",
+       [3]byte{36, 201, 161}:  "Ruckus Wireless",
+       [3]byte{36, 201, 222}:  "Genoray",
+       [3]byte{36, 203, 231}:  "MYK, Inc.",
+       [3]byte{36, 207, 33}:   "Shenzhen State Micro Technology Co., Ltd",
+       [3]byte{36, 209, 63}:   "MEXUS CO.,LTD",
+       [3]byte{36, 210, 204}:  "SmartDrive Systems Inc.",
+       [3]byte{36, 213, 28}:   "Zhongtian broadband technology co., LTD",
+       [3]byte{36, 217, 33}:   "Avaya Inc",
+       [3]byte{36, 218, 17}:   "NO NDA Inc",
+       [3]byte{36, 218, 155}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{36, 218, 182}:  "Sistemas de Gestión Energética S.A. de C.V",
+       [3]byte{36, 219, 172}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 219, 173}:  "ShopperTrak RCT Corporation",
+       [3]byte{36, 219, 237}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{36, 222, 198}:  "Aruba Networks",
+       [3]byte{36, 223, 106}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{36, 225, 36}:   "Xiamen Ursaconn Technology Co. , Ltd.",
+       [3]byte{36, 226, 113}:  "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{36, 227, 20}:   "Apple, Inc.",
+       [3]byte{36, 228, 63}:   "Wenzhou Kunmei Communication Technology Co.,Ltd.",
+       [3]byte{36, 229, 170}:  "Philips Oral Healthcare, Inc.",
+       [3]byte{36, 230, 186}:  "JSC Zavod im. Kozitsky",
+       [3]byte{36, 233, 179}:  "Cisco Systems, Inc",
+       [3]byte{36, 234, 64}:   "Helmholz GmbH & Co. KG",
+       [3]byte{36, 235, 101}:  "SAET I.S. S.r.l.",
+       [3]byte{36, 236, 153}:  "ASKEY COMPUTER CORP",
+       [3]byte{36, 236, 214}:  "CSG Science & Technology Co.,Ltd.Hefei",
+       [3]byte{36, 238, 58}:   "Chengdu Yingji Electronic Hi-tech Co Ltd",
+       [3]byte{36, 240, 148}:  "Apple, Inc.",
+       [3]byte{36, 240, 255}:  "GHT Co., Ltd.",
+       [3]byte{36, 242, 127}:  "Hewlett Packard Enterprise",
+       [3]byte{36, 242, 221}:  "Radiant Zemax LLC",
+       [3]byte{36, 245, 126}:  "HWH CO., LTD.",
+       [3]byte{36, 245, 162}:  "Belkin International Inc.",
+       [3]byte{36, 245, 170}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{36, 246, 119}:  "Apple, Inc.",
+       [3]byte{36, 253, 82}:   "Liteon Technology Corporation",
+       [3]byte{36, 253, 91}:   "SmartThings, Inc.",
+       [3]byte{40, 4, 224}:    "FERMAX ELECTRONICA S.A.U.",
+       [3]byte{40, 6, 30}:     "NINGBO GLOBAL USEFUL ELECTRIC CO.,LTD",
+       [3]byte{40, 6, 141}:    "ITL, LLC",
+       [3]byte{40, 7, 13}:     "GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.",
+       [3]byte{40, 11, 92}:    "Apple, Inc.",
+       [3]byte{40, 12, 40}:    "Unigen DataStorage Corporation",
+       [3]byte{40, 12, 184}:   "Mikrosay Yazilim ve Elektronik A.S.",
+       [3]byte{40, 13, 252}:   "Sony Interactive Entertainment Inc.",
+       [3]byte{40, 14, 139}:   "Beijing Spirit Technology Development Co., Ltd.",
+       [3]byte{40, 16, 27}:    "MagnaCom",
+       [3]byte{40, 16, 123}:   "D-Link International",
+       [3]byte{40, 20, 113}:   "Lantis co., LTD.",
+       [3]byte{40, 22, 46}:    "2Wire Inc",
+       [3]byte{40, 22, 173}:   "Intel Corporate",
+       [3]byte{40, 23, 206}:   "Omnisense Ltd",
+       [3]byte{40, 24, 120}:   "Microsoft Corporation",
+       [3]byte{40, 24, 253}:   "Aditya Infotech Ltd.",
+       [3]byte{40, 34, 70}:    "Beijing Sinoix Communication Co., LTD",
+       [3]byte{40, 35, 115}:   "Digita",
+       [3]byte{40, 36, 255}:   "Wistron Neweb Corporation",
+       [3]byte{40, 37, 54}:    "SHENZHEN HOLATEK CO.,LTD",
+       [3]byte{40, 38, 166}:   "PBR electronics GmbH",
+       [3]byte{40, 39, 191}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{40, 40, 93}:    "Zyxel Communications Corporation",
+       [3]byte{40, 41, 134}:   "APC by Schneider Electric",
+       [3]byte{40, 41, 204}:   "Corsa Technology Incorporated",
+       [3]byte{40, 41, 217}:   "GlobalBeiMing technology (Beijing)Co. Ltd",
+       [3]byte{40, 44, 178}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{40, 47, 194}:   "Automotive Data Solutions",
+       [3]byte{40, 48, 172}:   "Frontiir Co. Ltd.",
+       [3]byte{40, 49, 82}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{40, 50, 197}:   "HUMAX Co., Ltd.",
+       [3]byte{40, 52, 16}:    "Enigma Diagnostics Limited",
+       [3]byte{40, 52, 162}:   "Cisco Systems, Inc",
+       [3]byte{40, 53, 69}:    "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+       [3]byte{40, 54, 56}:    "IEEE Registration Authority",
+       [3]byte{40, 55, 19}:    "Shenzhen 3Nod Digital Technology Co., Ltd.",
+       [3]byte{40, 55, 55}:    "Apple, Inc.",
+       [3]byte{40, 56, 207}:   "Gen2wave",
+       [3]byte{40, 57, 94}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{40, 57, 231}:   "Preceno Technology Pte.Ltd.",
+       [3]byte{40, 59, 150}:   "Cool Control LTD",
+       [3]byte{40, 60, 228}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{40, 63, 105}:   "Sony Mobile Communications AB",
+       [3]byte{40, 64, 26}:    "C8 MediSensors, Inc.",
+       [3]byte{40, 65, 33}:    "OptiSense Network, LLC",
+       [3]byte{40, 68, 48}:    "GenesisTechnical Systems (UK) Ltd",
+       [3]byte{40, 71, 170}:   "Nokia Corporation",
+       [3]byte{40, 72, 70}:    "GridCentric Inc.",
+       [3]byte{40, 76, 83}:    "Intune Networks",
+       [3]byte{40, 77, 146}:   "Luminator",
+       [3]byte{40, 78, 215}:   "OutSmart Power Systems, Inc.",
+       [3]byte{40, 79, 206}:   "Liaoning Wontel Science and Technology Development Co.,Ltd.",
+       [3]byte{40, 81, 50}:    "Shenzhen Prayfly Technology Co.,Ltd",
+       [3]byte{40, 82, 97}:    "Cisco Systems, Inc",
+       [3]byte{40, 82, 224}:   "Layon international Electronic & Telecom Co.,Ltd",
+       [3]byte{40, 86, 90}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{40, 86, 193}:   "Harman International",
+       [3]byte{40, 87, 103}:   "Echostar Technologies Corp",
+       [3]byte{40, 87, 190}:   "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{40, 90, 235}:   "Apple, Inc.",
+       [3]byte{40, 95, 47}:    "RNware Co.,Ltd.",
+       [3]byte{40, 95, 219}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{40, 96, 70}:    "Lantech Communications Global, Inc.",
+       [3]byte{40, 96, 148}:   "CAPELEC",
+       [3]byte{40, 99, 54}:    "Siemens AG - Industrial Automation - EWA",
+       [3]byte{40, 101, 107}:  "Keystone Microtech Corporation",
+       [3]byte{40, 106, 184}:  "Apple, Inc.",
+       [3]byte{40, 106, 186}:  "Apple, Inc.",
+       [3]byte{40, 108, 7}:    "XIAOMI Electronics,CO.,LTD",
+       [3]byte{40, 109, 151}:  "SAMJIN Co., Ltd.",
+       [3]byte{40, 110, 212}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{40, 111, 127}:  "Cisco Systems, Inc",
+       [3]byte{40, 113, 132}:  "Spire Payments",
+       [3]byte{40, 114, 197}:  "Smartmatic Corp",
+       [3]byte{40, 114, 240}:  "ATHENA",
+       [3]byte{40, 118, 16}:   "IgniteNet",
+       [3]byte{40, 118, 205}:  "Funshion Online Technologies Co.,Ltd",
+       [3]byte{40, 121, 148}:  "Realplay Digital Technology(Shenzhen) Co.,Ltd",
+       [3]byte{40, 122, 238}:  "ARRIS Group, Inc.",
+       [3]byte{40, 123, 9}:    "zte corporation",
+       [3]byte{40, 124, 219}:  "Hefei  Toycloud Technology Co.,ltd",
+       [3]byte{40, 128, 35}:   "Hewlett Packard",
+       [3]byte{40, 128, 162}:  "Novatel Wireless Solutions, Inc.",
+       [3]byte{40, 131, 53}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{40, 132, 14}:   "silicon valley immigration service",
+       [3]byte{40, 132, 250}:  "SHARP Corporation",
+       [3]byte{40, 133, 45}:   "Touch Networks",
+       [3]byte{40, 137, 21}:   "CashGuard Sverige AB",
+       [3]byte{40, 138, 28}:   "Juniper Networks",
+       [3]byte{40, 140, 184}:  "zte corporation",
+       [3]byte{40, 145, 208}:  "Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH",
+       [3]byte{40, 146, 74}:   "Hewlett Packard",
+       [3]byte{40, 147, 254}:  "Cisco Systems, Inc",
+       [3]byte{40, 148, 15}:   "Cisco Systems, Inc",
+       [3]byte{40, 148, 175}:  "Samhwa Telecom",
+       [3]byte{40, 152, 123}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{40, 153, 58}:   "Arista Networks",
+       [3]byte{40, 154, 75}:   "SteelSeries ApS",
+       [3]byte{40, 154, 250}:  "TCT mobile ltd",
+       [3]byte{40, 158, 223}:  "Danfoss Turbocor Compressors, Inc",
+       [3]byte{40, 160, 43}:   "Apple, Inc.",
+       [3]byte{40, 161, 131}:  "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{40, 161, 134}:  "enblink",
+       [3]byte{40, 161, 146}:  "GERP Solution",
+       [3]byte{40, 161, 235}:  "ETEK TECHNOLOGY (SHENZHEN) CO.,LTD",
+       [3]byte{40, 162, 65}:   "exlar corp",
+       [3]byte{40, 162, 75}:   "Juniper Networks",
+       [3]byte{40, 165, 116}:  "Miller Electric Mfg. Co.",
+       [3]byte{40, 165, 238}:  "Shenzhen SDGI CATV Co., Ltd",
+       [3]byte{40, 166, 172}:  "seca gmbh & co. kg",
+       [3]byte{40, 166, 219}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{40, 172, 103}:  "Mach Power, Rappresentanze Internazionali s.r.l.",
+       [3]byte{40, 173, 62}:   "Shenzhen TONG BO WEI Technology CO.,LTD",
+       [3]byte{40, 175, 10}:   "Sirius XM Radio Inc",
+       [3]byte{40, 176, 204}:  "Xenya d.o.o.",
+       [3]byte{40, 178, 189}:  "Intel Corporate",
+       [3]byte{40, 179, 171}:  "Genmark Automation",
+       [3]byte{40, 180, 72}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{40, 185, 217}:  "Radisys Corporation",
+       [3]byte{40, 186, 24}:   "NextNav, LLC",
+       [3]byte{40, 186, 181}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{40, 187, 89}:   "RNET Technologies, Inc.",
+       [3]byte{40, 188, 24}:   "SourcingOverseas Co. Ltd",
+       [3]byte{40, 188, 86}:   "EMAC, Inc.",
+       [3]byte{40, 190, 3}:    "TCT mobile ltd",
+       [3]byte{40, 190, 155}:  "Technicolor CH USA Inc.",
+       [3]byte{40, 191, 137}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{40, 192, 218}:  "Juniper Networks",
+       [3]byte{40, 193, 60}:   "Hon Hai Precision Ind. Co., Ltd.",
+       [3]byte{40, 194, 221}:  "AzureWave Technology Inc.",
+       [3]byte{40, 198, 63}:   "Intel Corporate",
+       [3]byte{40, 198, 113}:  "Yota Devices OY",
+       [3]byte{40, 198, 142}:  "NETGEAR",
+       [3]byte{40, 199, 24}:   "Altierre",
+       [3]byte{40, 199, 206}:  "Cisco Systems, Inc",
+       [3]byte{40, 200, 37}:   "DellKing Industrial Co., Ltd",
+       [3]byte{40, 200, 122}:  "ARRIS Group, Inc.",
+       [3]byte{40, 201, 20}:   "Taimag Corporation",
+       [3]byte{40, 202, 9}:    "ThyssenKrupp Elevators (Shanghai) Co.,Ltd",
+       [3]byte{40, 203, 235}:  "One",
+       [3]byte{40, 204, 1}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{40, 204, 255}:  "Corporacion Empresarial Altra SL",
+       [3]byte{40, 205, 28}:   "Espotel Oy",
+       [3]byte{40, 205, 76}:   "Individual Computers GmbH",
+       [3]byte{40, 205, 156}:  "Shenzhen Dynamax Software Development Co.,Ltd.",
+       [3]byte{40, 207, 8}:    "ESSYS",
+       [3]byte{40, 207, 218}:  "Apple, Inc.",
+       [3]byte{40, 207, 233}:  "Apple, Inc.",
+       [3]byte{40, 209, 175}:  "Nokia Corporation",
+       [3]byte{40, 210, 68}:   "LCFC(HeFei) Electronics Technology Co., Ltd.",
+       [3]byte{40, 212, 54}:   "Jiangsu dewosi electric co., LTD",
+       [3]byte{40, 213, 118}:  "Premier Wireless, Inc.",
+       [3]byte{40, 217, 62}:   "Telecor Inc.",
+       [3]byte{40, 217, 138}:  "Hangzhou Konke Technology Co.,Ltd.",
+       [3]byte{40, 217, 151}:  "Yuduan Mobile Co., Ltd.",
+       [3]byte{40, 219, 129}:  "Shanghai Guao Electronic Technology Co., Ltd",
+       [3]byte{40, 222, 246}:  "bioMerieux Inc.",
+       [3]byte{40, 224, 44}:   "Apple, Inc.",
+       [3]byte{40, 225, 76}:   "Apple, Inc.",
+       [3]byte{40, 226, 151}:  "Shanghai InfoTM Microelectronics Co.,Ltd.",
+       [3]byte{40, 227, 31}:   "Xiaomi Communications Co Ltd",
+       [3]byte{40, 227, 71}:   "Liteon Technology Corporation",
+       [3]byte{40, 228, 118}:  "Pi-Coral",
+       [3]byte{40, 230, 8}:    "Tokheim",
+       [3]byte{40, 230, 233}:  "SIS Sat Internet Services GmbH",
+       [3]byte{40, 231, 148}:  "Microtime Computer Inc.",
+       [3]byte{40, 231, 207}:  "Apple, Inc.",
+       [3]byte{40, 237, 88}:   "JAG Jakob AG",
+       [3]byte{40, 237, 106}:  "Apple, Inc.",
+       [3]byte{40, 238, 44}:   "Frontline Test Equipment",
+       [3]byte{40, 238, 82}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{40, 238, 211}:  "Shenzhen Super D Technology Co., Ltd",
+       [3]byte{40, 239, 1}:    "Private",
+       [3]byte{40, 240, 118}:  "Apple, Inc.",
+       [3]byte{40, 241, 14}:   "Dell Inc.",
+       [3]byte{40, 243, 88}:   "2C - Trifonov & Co",
+       [3]byte{40, 243, 102}:  "Shenzhen Bilian electronic CO.,LTD",
+       [3]byte{40, 245, 50}:   "ADD-Engineering BV",
+       [3]byte{40, 245, 55}:   "IEEE Registration Authority",
+       [3]byte{40, 246, 6}:    "Syes srl",
+       [3]byte{40, 250, 160}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{40, 251, 211}:  "Ragentek Technology Group",
+       [3]byte{40, 252, 81}:   "The Electric Controller and Manufacturing Co., LLC",
+       [3]byte{40, 252, 246}:  "Shenzhen Xin KingBrand enterprises Co.,Ltd",
+       [3]byte{40, 253, 128}:  "IEEE Registration Authority",
+       [3]byte{40, 254, 205}:  "Lemobile Information Technology (Beijing) Co., Ltd.",
+       [3]byte{40, 255, 62}:   "zte corporation",
+       [3]byte{44, 0, 44}:     "UNOWHY",
+       [3]byte{44, 0, 51}:     "EControls, LLC",
+       [3]byte{44, 0, 247}:    "XOS",
+       [3]byte{44, 1, 11}:     "NASCENT Technology, LLC - RemKon",
+       [3]byte{44, 2, 159}:    "3ALogics",
+       [3]byte{44, 6, 35}:     "Win Leader Inc.",
+       [3]byte{44, 7, 60}:     "DEVLINE LIMITED",
+       [3]byte{44, 8, 28}:     "OVH",
+       [3]byte{44, 8, 140}:    "HUMAX Co., Ltd.",
+       [3]byte{44, 9, 77}:     "Raptor Engineering, LLC",
+       [3]byte{44, 9, 203}:    "COBS AB",
+       [3]byte{44, 11, 233}:   "Cisco Systems, Inc",
+       [3]byte{44, 14, 61}:    "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{44, 16, 193}:   "Nintendo Co., Ltd.",
+       [3]byte{44, 24, 174}:   "Trend Electronics Co., Ltd.",
+       [3]byte{44, 25, 132}:   "IDN Telecom, Inc.",
+       [3]byte{44, 26, 49}:    "Electronics Company Limited",
+       [3]byte{44, 27, 200}:   "Hunan Topview Network System CO.,LTD",
+       [3]byte{44, 29, 184}:   "ARRIS Group, Inc.",
+       [3]byte{44, 30, 234}:   "AERODEV",
+       [3]byte{44, 31, 35}:    "Apple, Inc.",
+       [3]byte{44, 32, 11}:    "Apple, Inc.",
+       [3]byte{44, 33, 49}:    "Juniper Networks",
+       [3]byte{44, 33, 114}:   "Juniper Networks",
+       [3]byte{44, 33, 215}:   "IMAX Corporation",
+       [3]byte{44, 34, 139}:   "CTR SRL",
+       [3]byte{44, 35, 58}:    "Hewlett Packard",
+       [3]byte{44, 36, 95}:    "Babolat VS",
+       [3]byte{44, 38, 23}:    "Oculus VR, LLC",
+       [3]byte{44, 38, 95}:    "IEEE Registration Authority",
+       [3]byte{44, 38, 197}:   "zte corporation",
+       [3]byte{44, 39, 158}:   "IEEE Registration Authority",
+       [3]byte{44, 39, 215}:   "Hewlett Packard",
+       [3]byte{44, 40, 45}:    "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+       [3]byte{44, 41, 151}:   "Microsoft Corporation",
+       [3]byte{44, 45, 72}:    "bct electronic GesmbH",
+       [3]byte{44, 48, 51}:    "NETGEAR",
+       [3]byte{44, 48, 104}:   "Pantech Co.,Ltd",
+       [3]byte{44, 49, 36}:    "Cisco Systems, Inc",
+       [3]byte{44, 51, 17}:    "Cisco Systems, Inc",
+       [3]byte{44, 51, 97}:    "Apple, Inc.",
+       [3]byte{44, 51, 122}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{44, 52, 39}:    "ERCO & GENER",
+       [3]byte{44, 53, 87}:    "ELLIY Power CO..Ltd",
+       [3]byte{44, 54, 160}:   "Capisco Limited",
+       [3]byte{44, 54, 248}:   "Cisco Systems, Inc",
+       [3]byte{44, 55, 49}:    "SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.",
+       [3]byte{44, 55, 150}:   "CYBO CO.,LTD.",
+       [3]byte{44, 55, 197}:   "Qingdao Haier Intelligent Home Appliance Technology Co.,Ltd",
+       [3]byte{44, 57, 150}:   "Sagemcom Broadband SAS",
+       [3]byte{44, 57, 193}:   "Ciena Corporation",
+       [3]byte{44, 58, 40}:    "Fagor Electrónica",
+       [3]byte{44, 58, 232}:   "Espressif Inc.",
+       [3]byte{44, 59, 253}:   "Netstor Technology Co., Ltd.",
+       [3]byte{44, 62, 207}:   "Cisco Systems, Inc",
+       [3]byte{44, 63, 56}:    "Cisco Systems, Inc",
+       [3]byte{44, 63, 62}:    "Alge-Timing GmbH",
+       [3]byte{44, 64, 43}:    "Smart iBlue Technology Limited",
+       [3]byte{44, 64, 83}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{44, 65, 56}:    "Hewlett Packard",
+       [3]byte{44, 65, 161}:   "Bose Corporation",
+       [3]byte{44, 66, 5}:     "Lytx",
+       [3]byte{44, 67, 26}:    "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{44, 68, 1}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{44, 68, 27}:    "Spectrum Medical Limited",
+       [3]byte{44, 68, 253}:   "Hewlett Packard",
+       [3]byte{44, 77, 84}:    "ASUSTek COMPUTER INC.",
+       [3]byte{44, 77, 121}:   "Weifang GoerTek Technology Co.,Ltd.",
+       [3]byte{44, 80, 137}:   "Shenzhen Kaixuan Visual Technology Co.,Limited",
+       [3]byte{44, 83, 74}:    "Shenzhen Winyao Electronic Limited",
+       [3]byte{44, 84, 45}:    "Cisco Systems, Inc",
+       [3]byte{44, 84, 145}:   "Microsoft Corporation",
+       [3]byte{44, 84, 207}:   "LG Electronics (Mobile Communications)",
+       [3]byte{44, 85, 60}:    "Gainspeed, Inc.",
+       [3]byte{44, 85, 211}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{44, 86, 220}:   "ASUSTek COMPUTER INC.",
+       [3]byte{44, 87, 49}:    "Wingtech Group (HongKong)Limited",
+       [3]byte{44, 89, 138}:   "LG Electronics (Mobile Communications)",
+       [3]byte{44, 89, 229}:   "Hewlett Packard",
+       [3]byte{44, 90, 5}:     "Nokia Corporation",
+       [3]byte{44, 90, 15}:    "Cisco Systems, Inc",
+       [3]byte{44, 90, 141}:   "SYSTRONIK Elektronik u. Systemtechnik GmbH",
+       [3]byte{44, 90, 163}:   "PROMATE ELECTRONIC CO.LTD",
+       [3]byte{44, 91, 184}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{44, 91, 225}:   "Centripetal Networks, Inc",
+       [3]byte{44, 93, 147}:   "Ruckus Wireless",
+       [3]byte{44, 95, 243}:   "Pertronic Industries",
+       [3]byte{44, 96, 12}:    "QUANTA COMPUTER INC.",
+       [3]byte{44, 98, 90}:    "Finest Security Systems Co., Ltd",
+       [3]byte{44, 98, 137}:   "Regenersis (Glenrothes) Ltd",
+       [3]byte{44, 99, 115}:   "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{44, 103, 152}:  "InTalTech Ltd.",
+       [3]byte{44, 103, 251}:  "ShenZhen Zhengjili Electronics Co., LTD",
+       [3]byte{44, 105, 186}:  "RF Controls, LLC",
+       [3]byte{44, 106, 111}:  "IEEE Registration Authority",
+       [3]byte{44, 107, 125}:  "Texas Instruments",
+       [3]byte{44, 107, 245}:  "Juniper Networks",
+       [3]byte{44, 110, 133}:  "Intel Corporate",
+       [3]byte{44, 111, 201}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{44, 113, 85}:   "HiveMotion",
+       [3]byte{44, 114, 195}:  "Soundmatters",
+       [3]byte{44, 115, 96}:   "Earda Technologies co Ltd",
+       [3]byte{44, 117, 15}:   "Shanghai Dongzhou-Lawton Communication Technology Co. Ltd.",
+       [3]byte{44, 118, 138}:  "Hewlett Packard",
+       [3]byte{44, 123, 90}:   "Milper Ltd",
+       [3]byte{44, 123, 132}:  "OOO Petr Telegin",
+       [3]byte{44, 126, 129}:  "ARRIS Group, Inc.",
+       [3]byte{44, 126, 207}:  "Onzo Ltd",
+       [3]byte{44, 128, 101}:  "HARTING Inc. of North America",
+       [3]byte{44, 129, 88}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{44, 134, 210}:  "Cisco Systems, Inc",
+       [3]byte{44, 138, 114}:  "HTC Corporation",
+       [3]byte{44, 139, 242}:  "Hitachi Metals America Ltd",
+       [3]byte{44, 145, 39}:   "Eintechno Corporation",
+       [3]byte{44, 146, 44}:   "Kishu Giken Kogyou Company Ltd,.",
+       [3]byte{44, 148, 100}:  "Cincoze Co., Ltd.",
+       [3]byte{44, 149, 127}:  "zte corporation",
+       [3]byte{44, 150, 98}:   "Invenit BV",
+       [3]byte{44, 151, 23}:   "I.C.Y. B.V.",
+       [3]byte{44, 153, 36}:   "ARRIS Group, Inc.",
+       [3]byte{44, 154, 164}:  "Eolo SpA",
+       [3]byte{44, 157, 30}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{44, 158, 95}:   "ARRIS Group, Inc.",
+       [3]byte{44, 158, 236}:  "Jabil Circuit Penang",
+       [3]byte{44, 158, 252}:  "CANON INC.",
+       [3]byte{44, 161, 87}:   "acromate, Inc.",
+       [3]byte{44, 161, 125}:  "ARRIS Group, Inc.",
+       [3]byte{44, 162, 180}:  "Fortify Technologies, LLC",
+       [3]byte{44, 163, 14}:   "POWER DRAGON DEVELOPMENT LIMITED",
+       [3]byte{44, 165, 57}:   "Parallel Wireless, Inc",
+       [3]byte{44, 167, 128}:  "True Technologies Inc.",
+       [3]byte{44, 168, 53}:   "RIM",
+       [3]byte{44, 171, 0}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{44, 171, 37}:   "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{44, 171, 164}:  "Cisco SPVTG",
+       [3]byte{44, 171, 235}:  "Cisco Systems, Inc",
+       [3]byte{44, 172, 68}:   "CONEXTOP",
+       [3]byte{44, 173, 19}:   "SHENZHEN ZHILU TECHNOLOGY CO.,LTD",
+       [3]byte{44, 174, 43}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{44, 176, 93}:   "NETGEAR",
+       [3]byte{44, 176, 223}:  "Soliton Technologies Pvt Ltd",
+       [3]byte{44, 177, 21}:   "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{44, 178, 26}:   "Phicomm (Shanghai) Co., Ltd.",
+       [3]byte{44, 180, 58}:   "Apple, Inc.",
+       [3]byte{44, 182, 147}:  "Radware",
+       [3]byte{44, 182, 157}:  "RED Digital Cinema",
+       [3]byte{44, 186, 186}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{44, 190, 8}:    "Apple, Inc.",
+       [3]byte{44, 190, 151}:  "Ingenieurbuero Bickele und Buehler GmbH",
+       [3]byte{44, 194, 96}:   "Oracle Corporation",
+       [3]byte{44, 197, 72}:   "IAdea Corporation",
+       [3]byte{44, 197, 211}:  "Ruckus Wireless",
+       [3]byte{44, 204, 21}:   "Nokia Corporation",
+       [3]byte{44, 205, 39}:   "Precor Inc",
+       [3]byte{44, 205, 67}:   "Summit Technology Group",
+       [3]byte{44, 205, 105}:  "Aqavi.com",
+       [3]byte{44, 207, 88}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{44, 208, 45}:   "Cisco Systems, Inc",
+       [3]byte{44, 208, 90}:   "Liteon Technology Corporation",
+       [3]byte{44, 209, 65}:   "IEEE Registration Authority",
+       [3]byte{44, 209, 218}:  "Sanjole, Inc.",
+       [3]byte{44, 210, 231}:  "Nokia Corporation",
+       [3]byte{44, 212, 68}:   "FUJITSU LIMITED",
+       [3]byte{44, 220, 173}:  "Wistron Neweb Corporation",
+       [3]byte{44, 221, 12}:   "Discovergy GmbH",
+       [3]byte{44, 221, 149}:  "Taicang T&W Electronics",
+       [3]byte{44, 221, 163}:  "Point Grey Research Inc.",
+       [3]byte{44, 226, 168}:  "DeviceDesign",
+       [3]byte{44, 228, 18}:   "Sagemcom Broadband SAS",
+       [3]byte{44, 230, 204}:  "Ruckus Wireless",
+       [3]byte{44, 232, 113}:  "Alert Metalguard ApS",
+       [3]byte{44, 237, 235}:  "Alpheus Digital Company Limited",
+       [3]byte{44, 238, 38}:   "Petroleum Geo-Services",
+       [3]byte{44, 240, 162}:  "Apple, Inc.",
+       [3]byte{44, 240, 238}:  "Apple, Inc.",
+       [3]byte{44, 242, 3}:    "EMKO ELEKTRONIK SAN VE TIC AS",
+       [3]byte{44, 244, 197}:  "Avaya Inc",
+       [3]byte{44, 247, 241}:  "Seeed Technology Inc.",
+       [3]byte{44, 250, 162}:  "Alcatel-Lucent Enterprise",
+       [3]byte{44, 252, 228}:  "CTEK Sweden AB",
+       [3]byte{44, 253, 55}:   "Blue Calypso, Inc.",
+       [3]byte{44, 253, 161}:  "ASUSTek COMPUTER INC.",
+       [3]byte{44, 253, 171}:  "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+       [3]byte{44, 255, 101}:  "Oki Electric Industry Co., Ltd.",
+       [3]byte{48, 5, 63}:     "JTI Co.,Ltd.",
+       [3]byte{48, 5, 92}:     "Brother industries, LTD.",
+       [3]byte{48, 7, 77}:     "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{48, 11, 156}:   "Delta Mobile Systems, Inc.",
+       [3]byte{48, 12, 35}:    "zte corporation",
+       [3]byte{48, 13, 42}:    "Zhejiang Wellcom Technology Co.,Ltd.",
+       [3]byte{48, 13, 67}:    "Microsoft Mobile Oy",
+       [3]byte{48, 14, 213}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{48, 14, 227}:   "Aquantia Corporation",
+       [3]byte{48, 16, 179}:   "Liteon Technology Corporation",
+       [3]byte{48, 16, 228}:   "Apple, Inc.",
+       [3]byte{48, 20, 45}:    "Piciorgros GmbH",
+       [3]byte{48, 20, 74}:    "Wistron Neweb Corporation",
+       [3]byte{48, 21, 24}:    "Ubiquitous Communication Co. ltd.",
+       [3]byte{48, 22, 141}:   "ProLon",
+       [3]byte{48, 23, 200}:   "Sony Mobile Communications AB",
+       [3]byte{48, 24, 207}:   "DEOS control systems GmbH",
+       [3]byte{48, 25, 102}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{48, 26, 40}:    "Mako Networks Ltd",
+       [3]byte{48, 33, 91}:    "Shenzhen Ostar Display Electronic Co.,Ltd",
+       [3]byte{48, 41, 190}:   "Shanghai MRDcom Co.,Ltd",
+       [3]byte{48, 45, 232}:   "JDA, LLC (JDA Systems)",
+       [3]byte{48, 50, 148}:   "W-IE-NE-R Plein & Baus GmbH",
+       [3]byte{48, 50, 212}:   "Hanilstm Co., Ltd.",
+       [3]byte{48, 51, 53}:    "Boosty",
+       [3]byte{48, 52, 210}:   "Availink, Inc.",
+       [3]byte{48, 53, 173}:   "Apple, Inc.",
+       [3]byte{48, 55, 166}:   "Cisco Systems, Inc",
+       [3]byte{48, 56, 85}:    "Nokia Corporation",
+       [3]byte{48, 57, 38}:    "Sony Mobile Communications AB",
+       [3]byte{48, 57, 85}:    "Shenzhen Jinhengjia Electronic Co., Ltd.",
+       [3]byte{48, 57, 242}:   "ADB Broadband Italia",
+       [3]byte{48, 58, 100}:   "Intel Corporate",
+       [3]byte{48, 61, 8}:     "GLINTT TES S.A.",
+       [3]byte{48, 62, 173}:   "Sonavox Canada Inc",
+       [3]byte{48, 65, 116}:   "ALTEC LANSING LLC",
+       [3]byte{48, 66, 37}:    "BURG-WÄCHTER KG",
+       [3]byte{48, 68, 73}:    "PLATH GmbH",
+       [3]byte{48, 68, 135}:   "Hefei Radio Communication Technology Co., Ltd",
+       [3]byte{48, 68, 161}:   "Shanghai Nanchao Information Technology",
+       [3]byte{48, 70, 154}:   "NETGEAR",
+       [3]byte{48, 73, 59}:    "Nanjing Z-Com Wireless Co.,Ltd",
+       [3]byte{48, 76, 126}:   "Panasonic Electric Works Automation Controls Techno Co.,Ltd.",
+       [3]byte{48, 78, 195}:   "Tianjin Techua Technology Co., Ltd.",
+       [3]byte{48, 81, 248}:   "BYK-Gardner GmbH",
+       [3]byte{48, 82, 90}:    "NST Co., LTD",
+       [3]byte{48, 82, 203}:   "Liteon Technology Corporation",
+       [3]byte{48, 85, 237}:   "Trex Network LLC",
+       [3]byte{48, 87, 172}:   "IRLAB LTD.",
+       [3]byte{48, 88, 144}:   "Frontier Silicon Ltd",
+       [3]byte{48, 89, 91}:    "streamnow AG",
+       [3]byte{48, 89, 183}:   "Microsoft",
+       [3]byte{48, 90, 58}:    "ASUSTek COMPUTER INC.",
+       [3]byte{48, 93, 56}:    "Beissbarth",
+       [3]byte{48, 96, 35}:    "ARRIS Group, Inc.",
+       [3]byte{48, 97, 18}:    "PAV GmbH",
+       [3]byte{48, 97, 24}:    "Paradom Inc.",
+       [3]byte{48, 99, 107}:   "Apple, Inc.",
+       [3]byte{48, 101, 236}:  "Wistron (ChongQing)",
+       [3]byte{48, 104, 140}:  "Reach Technology Inc.",
+       [3]byte{48, 105, 75}:   "RIM",
+       [3]byte{48, 108, 190}:  "Skymotion Technology (HK) Limited",
+       [3]byte{48, 110, 92}:   "Validus Technologies",
+       [3]byte{48, 113, 178}:  "Hangzhou Prevail Optoelectronic Equipment Co.,LTD.",
+       [3]byte{48, 115, 80}:   "Inpeco SA",
+       [3]byte{48, 116, 150}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{48, 117, 18}:   "Sony Mobile Communications AB",
+       [3]byte{48, 118, 111}:  "LG Electronics (Mobile Communications)",
+       [3]byte{48, 119, 203}:  "Maike Industry(Shenzhen)CO.,LTD",
+       [3]byte{48, 120, 92}:   "Partow Tamas Novin (Parman)",
+       [3]byte{48, 120, 107}:  "TIANJIN Golden Pentagon Electronics Co., Ltd.",
+       [3]byte{48, 120, 194}:  "Innowireless, Co. Ltd.",
+       [3]byte{48, 124, 48}:   "RIM",
+       [3]byte{48, 124, 94}:   "Juniper Networks",
+       [3]byte{48, 124, 178}:  "ANOV FRANCE",
+       [3]byte{48, 126, 203}:  "SFR",
+       [3]byte{48, 132, 84}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{48, 133, 169}:  "ASUSTek COMPUTER INC.",
+       [3]byte{48, 135, 48}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{48, 135, 217}:  "Ruckus Wireless",
+       [3]byte{48, 137, 118}:  "DALIAN LAMBA TECHNOLOGY CO.,LTD",
+       [3]byte{48, 137, 153}:  "Guangdong East Power Co.,",
+       [3]byte{48, 137, 211}:  "HONGKONG UCLOUDLINK NETWORK TECHNOLOGY LIMITED",
+       [3]byte{48, 140, 251}:  "Dropcam",
+       [3]byte{48, 141, 153}:  "Hewlett Packard",
+       [3]byte{48, 144, 171}:  "Apple, Inc.",
+       [3]byte{48, 145, 143}:  "Technicolor",
+       [3]byte{48, 146, 246}:  "SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD",
+       [3]byte{48, 149, 227}:  "SHANGHAI SIMCOM LIMITED",
+       [3]byte{48, 150, 251}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{48, 153, 53}:   "zte corporation",
+       [3]byte{48, 155, 173}:  "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+       [3]byte{48, 156, 35}:   "Micro-Star INTL CO., LTD.",
+       [3]byte{48, 159, 251}:  "Ardomus Networks Corporation",
+       [3]byte{48, 162, 32}:   "ARG Telecom",
+       [3]byte{48, 162, 67}:   "Shenzhen Prifox Innovation Technology Co., Ltd.",
+       [3]byte{48, 168, 219}:  "Sony Mobile Communications AB",
+       [3]byte{48, 169, 222}:  "LG Innotek",
+       [3]byte{48, 170, 189}:  "Shanghai Reallytek Information Technology Co.,Ltd",
+       [3]byte{48, 174, 123}:  "Deqing Dusun Electron CO., LTD",
+       [3]byte{48, 174, 164}:  "Espressif Inc.",
+       [3]byte{48, 174, 246}:  "Radio Mobile Access",
+       [3]byte{48, 177, 100}:  "Power Electronics International Inc.",
+       [3]byte{48, 178, 22}:   "Hytec Geraetebau GmbH",
+       [3]byte{48, 179, 162}:  "Shenzhen Heguang Measurement & Control Technology Co.,Ltd",
+       [3]byte{48, 180, 158}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{48, 180, 184}:  "LG Electronics",
+       [3]byte{48, 181, 194}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{48, 181, 241}:  "Aitexin Technology Co., Ltd",
+       [3]byte{48, 182, 45}:   "Mojo Networks, Inc.",
+       [3]byte{48, 182, 79}:   "Juniper Networks",
+       [3]byte{48, 192, 27}:   "Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd",
+       [3]byte{48, 195, 217}:  "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{48, 197, 7}:    "ECI Telecom Ltd.",
+       [3]byte{48, 199, 80}:   "MIC Technology Group",
+       [3]byte{48, 199, 174}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{48, 200, 42}:   "WI-BIZ srl",
+       [3]byte{48, 203, 248}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{48, 205, 167}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{48, 209, 126}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{48, 211, 45}:   "devolo AG",
+       [3]byte{48, 211, 87}:   "Logosol, Inc.",
+       [3]byte{48, 211, 134}:  "zte corporation",
+       [3]byte{48, 212, 106}:  "Autosales Incorporated",
+       [3]byte{48, 213, 135}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{48, 214, 201}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{48, 222, 134}:  "Cedac Software S.r.l.",
+       [3]byte{48, 224, 144}:  "Linctronix Ltd,",
+       [3]byte{48, 225, 113}:  "Hewlett Packard",
+       [3]byte{48, 227, 122}:  "Intel Corporate",
+       [3]byte{48, 228, 142}:  "Vodafone UK",
+       [3]byte{48, 228, 219}:  "Cisco Systems, Inc",
+       [3]byte{48, 235, 31}:   "Skylab M&C Technology Co.,Ltd",
+       [3]byte{48, 235, 37}:   "INTEK DIGITAL",
+       [3]byte{48, 239, 209}:  "Alstom Strongwish (Shenzhen) Co., Ltd.",
+       [3]byte{48, 243, 29}:   "zte corporation",
+       [3]byte{48, 243, 53}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{48, 243, 58}:   "+plugg srl",
+       [3]byte{48, 244, 47}:   "ESP",
+       [3]byte{48, 246, 185}:  "Ecocentric Energy",
+       [3]byte{48, 247, 13}:   "Cisco Systems, Inc",
+       [3]byte{48, 247, 114}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{48, 247, 127}:  "S Mobile Devices Limited",
+       [3]byte{48, 247, 197}:  "Apple, Inc.",
+       [3]byte{48, 247, 215}:  "Thread Technology Co., Ltd",
+       [3]byte{48, 249, 237}:  "Sony Corporation",
+       [3]byte{48, 250, 183}:  "Tunai Creative",
+       [3]byte{48, 251, 148}:  "Shanghai Fangzhiwei Information Technology CO.,Ltd.",
+       [3]byte{48, 252, 104}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{48, 253, 17}:   "MACROTECH (USA) INC.",
+       [3]byte{48, 254, 49}:   "Nokia",
+       [3]byte{48, 255, 246}:  "HangZhou KuoHeng Technology Co.,ltd",
+       [3]byte{52, 0, 138}:    "IEEE Registration Authority",
+       [3]byte{52, 0, 163}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{52, 2, 134}:    "Intel Corporate",
+       [3]byte{52, 2, 155}:    "CloudBerry Technologies Private Limited",
+       [3]byte{52, 4, 158}:    "IEEE Registration Authority",
+       [3]byte{52, 7, 79}:     "AccelStor, Inc.",
+       [3]byte{52, 7, 251}:    "Ericsson AB",
+       [3]byte{52, 8, 4}:      "D-Link Corporation",
+       [3]byte{52, 8, 188}:    "Apple, Inc.",
+       [3]byte{52, 10, 34}:    "TOP-ACCESS ELECTRONICS CO LTD",
+       [3]byte{52, 10, 255}:   "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{52, 11, 64}:    "MIOS ELETTRONICA SRL",
+       [3]byte{52, 12, 237}:   "Moduel AB",
+       [3]byte{52, 18, 144}:   "Treeview Co.,Ltd.",
+       [3]byte{52, 18, 152}:   "Apple, Inc.",
+       [3]byte{52, 19, 168}:   "Mediplan Limited",
+       [3]byte{52, 19, 232}:   "Intel Corporate",
+       [3]byte{52, 20, 95}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{52, 21, 19}:    "Texas Instruments",
+       [3]byte{52, 21, 158}:   "Apple, Inc.",
+       [3]byte{52, 23, 235}:   "Dell Inc.",
+       [3]byte{52, 26, 53}:    "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{52, 26, 76}:    "SHENZHEN WEIBU ELECTRONICS CO.,LTD.",
+       [3]byte{52, 27, 34}:    "Grandbeing Technology Co., Ltd",
+       [3]byte{52, 30, 107}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{52, 31, 228}:   "ARRIS Group, Inc.",
+       [3]byte{52, 33, 9}:     "Jensen Scandinavia AS",
+       [3]byte{52, 35, 135}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{52, 35, 186}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{52, 37, 93}:    "Shenzhen Loadcom Technology Co.,Ltd",
+       [3]byte{52, 38, 6}:     "CarePredict, Inc.",
+       [3]byte{52, 40, 240}:   "ATN International Limited",
+       [3]byte{52, 41, 143}:   "IEEE Registration Authority",
+       [3]byte{52, 41, 234}:   "MCD ELECTRONICS SP. Z O.O.",
+       [3]byte{52, 42, 241}:   "Texas Instruments",
+       [3]byte{52, 45, 13}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{52, 47, 110}:   "Anywire corporation",
+       [3]byte{52, 49, 17}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{52, 49, 196}:   "AVM GmbH",
+       [3]byte{52, 50, 230}:   "Panasonic Industrial Devices Europe GmbH",
+       [3]byte{52, 54, 59}:    "Apple, Inc.",
+       [3]byte{52, 55, 89}:    "zte corporation",
+       [3]byte{52, 56, 175}:   "Inlab Software GmbH",
+       [3]byte{52, 56, 183}:   "HUMAX Co., Ltd.",
+       [3]byte{52, 61, 152}:   "JinQianMao Technology Co.,Ltd.",
+       [3]byte{52, 61, 196}:   "BUFFALO.INC",
+       [3]byte{52, 64, 181}:   "IBM",
+       [3]byte{52, 65, 93}:    "Intel Corporate",
+       [3]byte{52, 70, 111}:   "HiTEM Engineering",
+       [3]byte{52, 75, 61}:    "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{52, 75, 80}:    "zte corporation",
+       [3]byte{52, 76, 164}:   "amazipoint technology Ltd.",
+       [3]byte{52, 76, 200}:   "Echodyne Corp",
+       [3]byte{52, 77, 234}:   "zte corporation",
+       [3]byte{52, 77, 247}:   "LG Electronics (Mobile Communications)",
+       [3]byte{52, 79, 63}:    "IO-Power Technology Co., Ltd.",
+       [3]byte{52, 79, 92}:    "R&amp;M AG",
+       [3]byte{52, 79, 105}:   "EKINOPS SAS",
+       [3]byte{52, 81, 170}:   "JID GLOBAL",
+       [3]byte{52, 81, 201}:   "Apple, Inc.",
+       [3]byte{52, 84, 60}:    "TAKAOKA TOKO CO.,LTD.",
+       [3]byte{52, 86, 254}:   "Cisco Meraki",
+       [3]byte{52, 87, 96}:    "MitraStar Technology Corp.",
+       [3]byte{52, 91, 17}:    "EVI HEAT AB",
+       [3]byte{52, 91, 187}:   "GD Midea Air-Conditioning Equipment Co.,Ltd.",
+       [3]byte{52, 92, 64}:    "Cargt Holdings LLC",
+       [3]byte{52, 93, 16}:    "Wytek",
+       [3]byte{52, 97, 120}:   "The Boeing Company",
+       [3]byte{52, 98, 136}:   "Cisco Systems, Inc",
+       [3]byte{52, 100, 169}:  "Hewlett Packard",
+       [3]byte{52, 104, 74}:   "Teraworks Co., Ltd.",
+       [3]byte{52, 104, 149}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{52, 105, 135}:  "zte corporation",
+       [3]byte{52, 106, 194}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{52, 107, 211}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{52, 108, 15}:   "Pramod Telecom Pvt. Ltd",
+       [3]byte{52, 110, 138}:  "Ecosense",
+       [3]byte{52, 110, 157}:  "Ericsson AB",
+       [3]byte{52, 111, 144}:  "Cisco Systems, Inc",
+       [3]byte{52, 111, 146}:  "White Rodgers Division",
+       [3]byte{52, 111, 237}:  "Enovation Controls",
+       [3]byte{52, 117, 199}:  "Avaya Inc",
+       [3]byte{52, 118, 197}:  "I-O DATA DEVICE, INC.",
+       [3]byte{52, 120, 119}:  "O-Net Communications (Shenzhen) Limited",
+       [3]byte{52, 120, 215}:  "Gionee Communication Equipment Co.,Ltd.",
+       [3]byte{52, 122, 96}:   "ARRIS Group, Inc.",
+       [3]byte{52, 126, 57}:   "Nokia Danmark A/S",
+       [3]byte{52, 128, 179}:  "Xiaomi Communications Co Ltd",
+       [3]byte{52, 129, 55}:   "UNICARD SA",
+       [3]byte{52, 129, 196}:  "AVM GmbH",
+       [3]byte{52, 129, 244}:  "SST Taiwan Ltd.",
+       [3]byte{52, 130, 222}:  "Kiio Inc",
+       [3]byte{52, 131, 2}:    "iFORCOM Co., Ltd",
+       [3]byte{52, 132, 70}:   "Ericsson AB",
+       [3]byte{52, 133, 132}:  "Aerohive Networks Inc.",
+       [3]byte{52, 134, 42}:   "Heinz Lackmann GmbH & Co KG",
+       [3]byte{52, 135, 61}:   "Quectel Wireless Solution Co.,Ltd.",
+       [3]byte{52, 136, 93}:   "Logitech Far East",
+       [3]byte{52, 138, 123}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{52, 138, 174}:  "Sagemcom Broadband SAS",
+       [3]byte{52, 143, 39}:   "Ruckus Wireless",
+       [3]byte{52, 149, 219}:  "Logitec Corporation",
+       [3]byte{52, 150, 114}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{52, 151, 246}:  "ASUSTek COMPUTER INC.",
+       [3]byte{52, 151, 251}:  "ADVANCED RF TECHNOLOGIES INC",
+       [3]byte{52, 153, 111}:  "VPI Engineering",
+       [3]byte{52, 153, 113}:  "Quanta Storage Inc.",
+       [3]byte{52, 153, 215}:  "Universal Flow Monitors, Inc.",
+       [3]byte{52, 154, 13}:   "ZBD Displays Ltd",
+       [3]byte{52, 155, 91}:   "Maquet GmbH",
+       [3]byte{52, 157, 144}:  "Heinzmann GmbH & CO. KG",
+       [3]byte{52, 158, 52}:   "Evervictory Electronic Co.Ltd",
+       [3]byte{52, 161, 131}:  "AWare, Inc",
+       [3]byte{52, 162, 162}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{52, 163, 149}:  "Apple, Inc.",
+       [3]byte{52, 163, 191}:  "Terewave. Inc.",
+       [3]byte{52, 165, 93}:   "TECHNOSOFT INTERNATIONAL SRL",
+       [3]byte{52, 165, 225}:  "Sensorist ApS",
+       [3]byte{52, 166, 140}:  "Shine Profit Development Limited",
+       [3]byte{52, 167, 9}:    "Trevil srl",
+       [3]byte{52, 167, 186}:  "Fischer International Systems Corporation",
+       [3]byte{52, 168, 67}:   "KYOCERA Display Corporation",
+       [3]byte{52, 168, 78}:   "Cisco Systems, Inc",
+       [3]byte{52, 170, 139}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{52, 170, 153}:  "Nokia",
+       [3]byte{52, 170, 238}:  "Mikrovisatos Servisas UAB",
+       [3]byte{52, 171, 55}:   "Apple, Inc.",
+       [3]byte{52, 173, 228}:  "Shanghai Chint Power Systems Co., Ltd.",
+       [3]byte{52, 175, 44}:   "Nintendo Co., Ltd.",
+       [3]byte{52, 177, 247}:  "Texas Instruments",
+       [3]byte{52, 179, 84}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{52, 181, 113}:  "PLDS",
+       [3]byte{52, 183, 253}:  "Guangzhou Younghead Electronic Technology Co.,Ltd",
+       [3]byte{52, 186, 56}:   "PAL MOHAN ELECTRONICS PVT LTD",
+       [3]byte{52, 186, 81}:   "Se-Kure Controls, Inc.",
+       [3]byte{52, 186, 117}:  "Tembo Systems, Inc.",
+       [3]byte{52, 186, 154}:  "Asiatelco Technologies Co.",
+       [3]byte{52, 187, 31}:   "BlackBerry RTS",
+       [3]byte{52, 187, 38}:   "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{52, 188, 166}:  "Beijing Ding Qing Technology, Ltd.",
+       [3]byte{52, 189, 200}:  "Cisco Systems, Inc",
+       [3]byte{52, 189, 249}:  "Shanghai WDK Industrial Co.,Ltd.",
+       [3]byte{52, 189, 250}:  "Cisco SPVTG",
+       [3]byte{52, 190, 0}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{52, 191, 144}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{52, 192, 89}:   "Apple, Inc.",
+       [3]byte{52, 192, 249}:  "Rockwell Automation",
+       [3]byte{52, 195, 172}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{52, 195, 210}:  "FN-LINK TECHNOLOGY LIMITED",
+       [3]byte{52, 197, 208}:  "Hagleitner Hygiene International GmbH",
+       [3]byte{52, 198, 154}:  "Enecsys Ltd",
+       [3]byte{52, 199, 49}:   "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{52, 200, 3}:    "Nokia Corporation",
+       [3]byte{52, 201, 157}:  "EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.",
+       [3]byte{52, 201, 240}:  "LM Technologies Ltd",
+       [3]byte{52, 204, 40}:   "Nexpring Co. LTD.,",
+       [3]byte{52, 205, 109}:  "CommSky Technologies",
+       [3]byte{52, 205, 190}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{52, 206, 0}:    "XIAOMI Electronics,CO.,LTD",
+       [3]byte{52, 206, 148}:  "Parsec (Pty) Ltd",
+       [3]byte{52, 208, 155}:  "MobilMAX Technology Inc.",
+       [3]byte{52, 208, 184}:  "IEEE Registration Authority",
+       [3]byte{52, 210, 112}:  "Amazon Technologies Inc.",
+       [3]byte{52, 210, 196}:  "RENA GmbH Print Systeme",
+       [3]byte{52, 215, 180}:  "Tributary Systems, Inc.",
+       [3]byte{52, 217, 84}:   "WiBotic Inc.",
+       [3]byte{52, 219, 253}:  "Cisco Systems, Inc",
+       [3]byte{52, 222, 26}:   "Intel Corporate",
+       [3]byte{52, 222, 52}:   "zte corporation",
+       [3]byte{52, 223, 42}:   "Fujikon Industrial Co.,Limited",
+       [3]byte{52, 224, 207}:  "zte corporation",
+       [3]byte{52, 224, 215}:  "DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD",
+       [3]byte{52, 226, 253}:  "Apple, Inc.",
+       [3]byte{52, 227, 128}:  "Genexis B.V.",
+       [3]byte{52, 228, 42}:   "Automatic Bar Controls Inc.",
+       [3]byte{52, 230, 173}:  "Intel Corporate",
+       [3]byte{52, 230, 215}:  "Dell Inc.",
+       [3]byte{52, 231, 11}:   "HAN Networks Co., Ltd",
+       [3]byte{52, 231, 28}:   "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{52, 233, 17}:   "vivo Mobile Communication Co., Ltd.",
+       [3]byte{52, 234, 52}:   "HangZhou Gubei Electronics Technology Co.,Ltd",
+       [3]byte{52, 237, 11}:   "Shanghai XZ-COM.CO.,Ltd.",
+       [3]byte{52, 239, 68}:   "2Wire Inc",
+       [3]byte{52, 239, 139}:  "NTT Communications Corporation",
+       [3]byte{52, 240, 202}:  "Shenzhen Linghangyuan Digital Technology Co.,Ltd.",
+       [3]byte{52, 243, 154}:  "Intel Corporate",
+       [3]byte{52, 243, 155}:  "WizLAN Ltd.",
+       [3]byte{52, 246, 45}:   "SHARP Corporation",
+       [3]byte{52, 246, 75}:   "Intel Corporate",
+       [3]byte{52, 246, 210}:  "Panasonic Taiwan Co.,Ltd.",
+       [3]byte{52, 249, 104}:  "ATEK Products, LLC",
+       [3]byte{52, 250, 64}:   "Guangzhou Robustel Technologies Co., Limited",
+       [3]byte{52, 250, 159}:  "Ruckus Wireless",
+       [3]byte{52, 252, 111}:  "ALCEA",
+       [3]byte{52, 252, 185}:  "Hewlett Packard Enterprise",
+       [3]byte{52, 252, 239}:  "LG Electronics (Mobile Communications)",
+       [3]byte{56, 1, 149}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 1, 151}:    "TSST Global,Inc",
+       [3]byte{56, 1, 159}:    "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{56, 5, 70}:     "Foctek Photonics, Inc.",
+       [3]byte{56, 5, 172}:    "Piller Group GmbH",
+       [3]byte{56, 6, 180}:    "A.D.C. GmbH",
+       [3]byte{56, 7, 212}:    "Zeppelin Systems GmbH",
+       [3]byte{56, 8, 253}:    "Silca Spa",
+       [3]byte{56, 9, 164}:    "Firefly Integrations",
+       [3]byte{56, 10, 10}:    "Sky-City Communication and Electronics Limited Company",
+       [3]byte{56, 10, 148}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 10, 171}:   "Formlabs",
+       [3]byte{56, 11, 64}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 13, 212}:   "Primax Electronics Ltd.",
+       [3]byte{56, 14, 77}:    "Cisco Systems, Inc",
+       [3]byte{56, 14, 123}:   "V.P.S. Thai Co., Ltd",
+       [3]byte{56, 15, 74}:    "Apple, Inc.",
+       [3]byte{56, 15, 228}:   "Dedicated Network Partners Oy",
+       [3]byte{56, 16, 213}:   "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+       [3]byte{56, 22, 209}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 23, 102}:   "PROMZAKAZ LTD.",
+       [3]byte{56, 23, 195}:   "Hewlett Packard Enterprise",
+       [3]byte{56, 23, 225}:   "Technicolor CH USA Inc.",
+       [3]byte{56, 25, 47}:    "Nokia Corporation",
+       [3]byte{56, 28, 26}:    "Cisco Systems, Inc",
+       [3]byte{56, 28, 35}:    "Hilan Technology CO.,LTD",
+       [3]byte{56, 28, 74}:    "SIMCom Wireless Solutions Co.,Ltd.",
+       [3]byte{56, 29, 217}:   "FN-LINK TECHNOLOGY LIMITED",
+       [3]byte{56, 32, 86}:    "Cisco Systems, Inc",
+       [3]byte{56, 32, 168}:   "ColorTokens, Inc.",
+       [3]byte{56, 33, 135}:   "Midea Group Co., Ltd.",
+       [3]byte{56, 34, 157}:   "ADB Broadband Italia",
+       [3]byte{56, 34, 214}:   "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{56, 37, 107}:   "Microsoft Mobile Oy",
+       [3]byte{56, 38, 43}:    "UTran Technology",
+       [3]byte{56, 38, 205}:   "ANDTEK",
+       [3]byte{56, 40, 234}:   "Fujian Netcom Technology Co., LTD",
+       [3]byte{56, 41, 90}:    "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{56, 41, 221}:   "ONvocal Inc",
+       [3]byte{56, 43, 120}:   "ECO PLUGS ENTERPRISE CO., LTD",
+       [3]byte{56, 44, 74}:    "ASUSTek COMPUTER INC.",
+       [3]byte{56, 45, 209}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 45, 232}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 49, 172}:   "WEG",
+       [3]byte{56, 55, 139}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{56, 58, 33}:    "IEEE Registration Authority",
+       [3]byte{56, 59, 200}:   "2Wire Inc",
+       [3]byte{56, 63, 16}:    "DBL Technology Ltd.",
+       [3]byte{56, 66, 51}:    "Wildeboer Bauteile GmbH",
+       [3]byte{56, 66, 166}:   "Ingenieurbuero Stahlkopf",
+       [3]byte{56, 67, 105}:   "Patrol Products Consortium LLC",
+       [3]byte{56, 67, 125}:   "Compal Broadband Networks, Inc.",
+       [3]byte{56, 69, 76}:    "Light Labs, Inc.",
+       [3]byte{56, 69, 140}:   "MyCloud Technology corporation",
+       [3]byte{56, 70, 8}:     "zte corporation",
+       [3]byte{56, 72, 76}:    "Apple, Inc.",
+       [3]byte{56, 75, 118}:   "AIRTAME ApS",
+       [3]byte{56, 76, 79}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{56, 76, 144}:   "ARRIS Group, Inc.",
+       [3]byte{56, 79, 73}:    "Juniper Networks",
+       [3]byte{56, 79, 240}:   "AzureWave Technology Inc.",
+       [3]byte{56, 82, 26}:    "Nokia",
+       [3]byte{56, 86, 16}:    "CANDY HOUSE, Inc.",
+       [3]byte{56, 88, 12}:    "Panaccess Systems GmbH",
+       [3]byte{56, 89, 248}:   "MindMade Sp. z o.o.",
+       [3]byte{56, 89, 249}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{56, 90, 168}:   "Beijing Zhongdun Security Technology Development Co.",
+       [3]byte{56, 95, 102}:   "Cisco SPVTG",
+       [3]byte{56, 95, 195}:   "Yu Jeong System, Co.Ltd",
+       [3]byte{56, 96, 119}:   "PEGATRON CORPORATION",
+       [3]byte{56, 99, 187}:   "Hewlett Packard",
+       [3]byte{56, 99, 246}:   "3NOD MULTIMEDIA(SHENZHEN)CO.,LTD",
+       [3]byte{56, 102, 69}:   "OOSIC Technology CO.,Ltd",
+       [3]byte{56, 102, 240}:  "Apple, Inc.",
+       [3]byte{56, 103, 147}:  "Asia Optical Co., Inc.",
+       [3]byte{56, 107, 28}:   "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{56, 107, 187}:  "ARRIS Group, Inc.",
+       [3]byte{56, 108, 155}:  "Ivy Biomedical",
+       [3]byte{56, 110, 33}:   "Wasion Group Ltd.",
+       [3]byte{56, 110, 162}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{56, 112, 12}:   "ARRIS Group, Inc.",
+       [3]byte{56, 113, 222}:  "Apple, Inc.",
+       [3]byte{56, 114, 192}:  "Comtrend Corporation",
+       [3]byte{56, 115, 234}:  "IEEE Registration Authority",
+       [3]byte{56, 118, 202}:  "Shenzhen Smart Intelligent Technology Co.Ltd",
+       [3]byte{56, 118, 209}:  "Euronda SpA",
+       [3]byte{56, 123, 71}:   "AKELA, Inc.",
+       [3]byte{56, 131, 69}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{56, 134, 2}:    "Flexoptix GmbH",
+       [3]byte{56, 137, 220}:  "Opticon Sensors Europe B.V.",
+       [3]byte{56, 138, 183}:  "ITC Networks",
+       [3]byte{56, 140, 80}:   "LG Electronics",
+       [3]byte{56, 142, 231}:  "Fanhattan LLC",
+       [3]byte{56, 144, 165}:  "Cisco Systems, Inc",
+       [3]byte{56, 145, 213}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{56, 145, 251}:  "Xenox Holding BV",
+       [3]byte{56, 148, 150}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 148, 224}:  "Syrotech Networks. Ltd.",
+       [3]byte{56, 149, 146}:  "Beijing Tendyron Corporation",
+       [3]byte{56, 151, 214}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{56, 152, 216}:  "MERITECH CO.,LTD",
+       [3]byte{56, 154, 246}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 157, 146}:  "Seiko Epson Corporation",
+       [3]byte{56, 159, 90}:   "C-Kur TV Inc.",
+       [3]byte{56, 159, 131}:  "OTN Systems N.V.",
+       [3]byte{56, 162, 140}:  "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+       [3]byte{56, 164, 237}:  "Xiaomi Communications Co Ltd",
+       [3]byte{56, 165, 60}:   "COMECER Netherlands",
+       [3]byte{56, 165, 182}:  "SHENZHEN MEGMEET ELECTRICAL CO.,LTD",
+       [3]byte{56, 166, 206}:  "BSkyB Ltd",
+       [3]byte{56, 168, 81}:   "Moog, Ing",
+       [3]byte{56, 168, 107}:  "Orga BV",
+       [3]byte{56, 169, 95}:   "Actifio Inc",
+       [3]byte{56, 170, 60}:   "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{56, 172, 61}:   "Nephos Inc",
+       [3]byte{56, 173, 142}:  "New H3C Technologies Co., Ltd",
+       [3]byte{56, 173, 190}:  "New H3C Technologies Co., Ltd",
+       [3]byte{56, 175, 215}:  "FUJITSU LIMITED",
+       [3]byte{56, 177, 45}:   "Sonotronic Nagel GmbH",
+       [3]byte{56, 177, 219}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{56, 181, 77}:   "Apple, Inc.",
+       [3]byte{56, 181, 189}:  "E.G.O. Elektro-Ger",
+       [3]byte{56, 183, 37}:   "Wistron Infocomm (Zhongshan) Corporation",
+       [3]byte{56, 183, 77}:   "Fijowave Limited",
+       [3]byte{56, 184, 235}:  "IEEE Registration Authority",
+       [3]byte{56, 187, 35}:   "OzVision America LLC",
+       [3]byte{56, 187, 60}:   "Avaya Inc",
+       [3]byte{56, 188, 1}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{56, 188, 26}:   "MEIZU Technology Co., Ltd.",
+       [3]byte{56, 191, 47}:   "Espec Corp.",
+       [3]byte{56, 191, 51}:   "NEC CASIO Mobile Communications",
+       [3]byte{56, 192, 150}:  "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{56, 199, 10}:   "WiFiSong",
+       [3]byte{56, 199, 186}:  "CS Services Co.,Ltd.",
+       [3]byte{56, 200, 92}:   "Cisco SPVTG",
+       [3]byte{56, 201, 134}:  "Apple, Inc.",
+       [3]byte{56, 201, 169}:  "SMART High Reliability Solutions, Inc.",
+       [3]byte{56, 202, 151}:  "Contour Design LLC",
+       [3]byte{56, 202, 218}:  "Apple, Inc.",
+       [3]byte{56, 205, 7}:    "Beijing FaceCam Technology Co., Ltd.",
+       [3]byte{56, 209, 53}:   "EasyIO Corporation Sdn. Bhd.",
+       [3]byte{56, 210, 105}:  "Texas Instruments",
+       [3]byte{56, 212, 11}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 213, 71}:   "ASUSTek COMPUTER INC.",
+       [3]byte{56, 214, 32}:   "Limidea Concept Pte. Ltd.",
+       [3]byte{56, 215, 202}:  "7HUGS LABS",
+       [3]byte{56, 216, 47}:   "zte corporation",
+       [3]byte{56, 219, 187}:  "Sunbow Telecom Co., Ltd.",
+       [3]byte{56, 222, 96}:   "Mohlenhoff GmbH",
+       [3]byte{56, 224, 142}:  "Mitsubishi Electric Corporation",
+       [3]byte{56, 226, 221}:  "zte corporation",
+       [3]byte{56, 227, 197}:  "Taicang T&W Electronics",
+       [3]byte{56, 229, 149}:  "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{56, 231, 216}:  "HTC Corporation",
+       [3]byte{56, 232, 223}:  "b gmbh medien + datenbanken",
+       [3]byte{56, 233, 140}:  "Reco S.p.A.",
+       [3]byte{56, 234, 167}:  "Hewlett Packard",
+       [3]byte{56, 236, 17}:   "Novatek Microelectronics Corp.",
+       [3]byte{56, 236, 228}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{56, 237, 24}:   "Cisco Systems, Inc",
+       [3]byte{56, 238, 157}:  "Anedo Ltd.",
+       [3]byte{56, 240, 152}:  "Vapor Stone Rail Systems",
+       [3]byte{56, 240, 200}:  "Livestream",
+       [3]byte{56, 241, 53}:   "SensorTec-Canada",
+       [3]byte{56, 242, 62}:   "Microsoft Mobile Oy",
+       [3]byte{56, 243, 63}:   "TATSUNO CORPORATION",
+       [3]byte{56, 245, 87}:   "JOLATA, INC.",
+       [3]byte{56, 245, 151}:  "home2net GmbH",
+       [3]byte{56, 247, 8}:    "National Resource Management, Inc.",
+       [3]byte{56, 247, 61}:   "Amazon Technologies Inc.",
+       [3]byte{56, 247, 178}:  "SEOJUN ELECTRIC",
+       [3]byte{56, 248, 137}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{56, 248, 183}:  "V2COM PARTICIPACOES S.A.",
+       [3]byte{56, 248, 202}:  "OWIN Inc.",
+       [3]byte{56, 250, 202}:  "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+       [3]byte{56, 253, 254}:  "IEEE Registration Authority",
+       [3]byte{56, 254, 197}:  "Ellips B.V.",
+       [3]byte{56, 255, 54}:   "Ruckus Wireless",
+       [3]byte{60, 2, 177}:    "Creation Technologies LP",
+       [3]byte{60, 4, 191}:    "PRAVIS SYSTEMS Co.Ltd.,",
+       [3]byte{60, 5, 24}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{60, 5, 171}:    "Product Creation Studio",
+       [3]byte{60, 7, 84}:     "Apple, Inc.",
+       [3]byte{60, 7, 113}:    "Sony Corporation",
+       [3]byte{60, 8, 30}:     "Beijing Yupont Electric Power Technology Co.,Ltd",
+       [3]byte{60, 8, 246}:    "Cisco Systems, Inc",
+       [3]byte{60, 9, 109}:    "Powerhouse Dynamics",
+       [3]byte{60, 12, 72}:    "Servergy, Inc.",
+       [3]byte{60, 12, 219}:   "UNIONMAN TECHNOLOGY CO.,LTD",
+       [3]byte{60, 14, 35}:    "Cisco Systems, Inc",
+       [3]byte{60, 15, 193}:   "KBC Networks",
+       [3]byte{60, 16, 64}:    "daesung network",
+       [3]byte{60, 16, 111}:   "ALBAHITH TECHNOLOGIES",
+       [3]byte{60, 16, 230}:   "PHAZR Inc.",
+       [3]byte{60, 17, 178}:   "Fraunhofer FIT",
+       [3]byte{60, 21, 194}:   "Apple, Inc.",
+       [3]byte{60, 21, 234}:   "TESCOM CO., LTD.",
+       [3]byte{60, 24, 159}:   "Nokia Corporation",
+       [3]byte{60, 24, 160}:   "Luxshare Precision Industry Company Limited",
+       [3]byte{60, 25, 21}:    "GFI Chrono Time",
+       [3]byte{60, 25, 125}:   "Ericsson AB",
+       [3]byte{60, 26, 15}:    "ClearSky Data",
+       [3]byte{60, 26, 87}:    "Cardiopulmonary Corp",
+       [3]byte{60, 26, 121}:   "Huayuan Technology CO.,LTD",
+       [3]byte{60, 28, 190}:   "JADAK LLC",
+       [3]byte{60, 30, 4}:     "D-Link International",
+       [3]byte{60, 30, 19}:    "HANGZHOU SUNRISE TECHNOLOGY CO., LTD",
+       [3]byte{60, 37, 215}:   "Nokia Corporation",
+       [3]byte{60, 38, 213}:   "Sotera Wireless",
+       [3]byte{60, 39, 99}:    "SLE quality engineering GmbH & Co. KG",
+       [3]byte{60, 42, 244}:   "Brother Industries, LTD.",
+       [3]byte{60, 44, 148}:   "杭州德澜科技有限公司(HangZhou Delan Technology Co.,Ltd)",
+       [3]byte{60, 44, 153}:   "Edgecore Networks Corporation",
+       [3]byte{60, 45, 183}:   "Texas Instruments",
+       [3]byte{60, 46, 249}:   "Apple, Inc.",
+       [3]byte{60, 46, 255}:   "Apple, Inc.",
+       [3]byte{60, 47, 58}:    "SFORZATO Corp.",
+       [3]byte{60, 48, 12}:    "Dewar Electronics Pty Ltd",
+       [3]byte{60, 49, 120}:   "Qolsys Inc.",
+       [3]byte{60, 51, 0}:     "Shenzhen Bilian electronic CO.,LTD",
+       [3]byte{60, 53, 86}:    "Cognitec Systems GmbH",
+       [3]byte{60, 54, 61}:    "Nokia Corporation",
+       [3]byte{60, 54, 228}:   "ARRIS Group, Inc.",
+       [3]byte{60, 56, 136}:   "ConnectQuest, llc",
+       [3]byte{60, 57, 195}:   "JW Electronics Co., Ltd.",
+       [3]byte{60, 57, 231}:   "IEEE Registration Authority",
+       [3]byte{60, 58, 115}:   "Avaya Inc",
+       [3]byte{60, 63, 81}:    "2CRSI",
+       [3]byte{60, 64, 79}:    "GUANGDONG PISEN ELECTRONICS CO.,LTD",
+       [3]byte{60, 67, 142}:   "ARRIS Group, Inc.",
+       [3]byte{60, 70, 216}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{60, 71, 17}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{60, 73, 55}:    "ASSMANN Electronic GmbH",
+       [3]byte{60, 74, 146}:   "Hewlett Packard",
+       [3]byte{60, 76, 105}:   "Infinity System S.L.",
+       [3]byte{60, 76, 208}:   "CERAGON NETWORKS",
+       [3]byte{60, 78, 71}:    "Etronic A/S",
+       [3]byte{60, 82, 130}:   "Hewlett Packard",
+       [3]byte{60, 87, 189}:   "Kessler Crane Inc.",
+       [3]byte{60, 87, 213}:   "FiveCo",
+       [3]byte{60, 89, 30}:    "TCL King Electrical Appliances (Huizhou) Co., Ltd",
+       [3]byte{60, 90, 55}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{60, 90, 180}:   "Google, Inc.",
+       [3]byte{60, 92, 195}:   "Shenzhen First Blue Chip Technology Ltd",
+       [3]byte{60, 94, 195}:   "Cisco Systems, Inc",
+       [3]byte{60, 95, 1}:     "Synerchip Co., Ltd.",
+       [3]byte{60, 97, 4}:     "Juniper Networks",
+       [3]byte{60, 98, 0}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{60, 98, 120}:   "SHENZHEN JETNET TECHNOLOGY CO.,LTD.",
+       [3]byte{60, 103, 22}:   "Lily Robotics",
+       [3]byte{60, 103, 44}:   "Sciovid Inc.",
+       [3]byte{60, 103, 140}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{60, 104, 22}:   "VXi Corporation",
+       [3]byte{60, 106, 125}:  "Niigata Power Systems Co., Ltd.",
+       [3]byte{60, 106, 157}:  "Dexatek Technology LTD.",
+       [3]byte{60, 110, 99}:   "Mitron OY",
+       [3]byte{60, 111, 69}:   "Fiberpro Inc.",
+       [3]byte{60, 111, 234}:  "Panasonic India Pvt. Ltd.",
+       [3]byte{60, 111, 247}:  "EnTek Systems, Inc.",
+       [3]byte{60, 112, 89}:   "MakerBot Industries",
+       [3]byte{60, 116, 55}:   "RIM",
+       [3]byte{60, 117, 74}:   "ARRIS Group, Inc.",
+       [3]byte{60, 119, 230}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{60, 120, 67}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{60, 120, 115}:  "Airsonics",
+       [3]byte{60, 122, 138}:  "ARRIS Group, Inc.",
+       [3]byte{60, 125, 177}:  "Texas Instruments",
+       [3]byte{60, 127, 111}:  "Telechips, Inc.",
+       [3]byte{60, 128, 170}:  "Ransnet Singapore Pte Ltd",
+       [3]byte{60, 129, 216}:  "Sagemcom Broadband SAS",
+       [3]byte{60, 131, 30}:   "CKD Corporation",
+       [3]byte{60, 131, 117}:  "Microsoft Corporation",
+       [3]byte{60, 131, 181}:  "Advance Vision Electronics Co. Ltd.",
+       [3]byte{60, 134, 168}:  "Sangshin elecom .co,, LTD",
+       [3]byte{60, 137, 112}:  "Neosfar",
+       [3]byte{60, 137, 166}:  "KAPELSE",
+       [3]byte{60, 138, 176}:  "Juniper Networks",
+       [3]byte{60, 138, 229}:  "Tensun Information Technology(Hangzhou) Co.,LTD",
+       [3]byte{60, 139, 205}:  "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{60, 139, 254}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{60, 140, 64}:   "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{60, 140, 248}:  "TRENDnet, Inc.",
+       [3]byte{60, 144, 102}:  "SmartRG, Inc.",
+       [3]byte{60, 145, 43}:   "Vexata Inc",
+       [3]byte{60, 145, 87}:   "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+       [3]byte{60, 145, 116}:  "ALONG COMMUNICATION TECHNOLOGY",
+       [3]byte{60, 146, 220}:  "Octopod Technology Co. Ltd.",
+       [3]byte{60, 148, 213}:  "Juniper Networks",
+       [3]byte{60, 149, 9}:    "Liteon Technology Corporation",
+       [3]byte{60, 151, 14}:   "Wistron InfoComm(Kunshan)Co.,Ltd.",
+       [3]byte{60, 151, 126}:  "IPS Technology Limited",
+       [3]byte{60, 152, 191}:  "Quest Controls, Inc.",
+       [3]byte{60, 153, 247}:  "Lansentechnology AB",
+       [3]byte{60, 154, 119}:  "Technicolor CH USA Inc.",
+       [3]byte{60, 159, 129}:  "Shenzhen CATIC Bit Communications Technology Co.,Ltd",
+       [3]byte{60, 160, 103}:  "Liteon Technology Corporation",
+       [3]byte{60, 161, 13}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{60, 163, 8}:    "Texas Instruments",
+       [3]byte{60, 163, 21}:   "Bless Information & Communications Co., Ltd",
+       [3]byte{60, 163, 26}:   "Oilfind International LLC",
+       [3]byte{60, 163, 72}:   "vivo Mobile Communication Co., Ltd.",
+       [3]byte{60, 165, 129}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{60, 166, 22}:   "vivo Mobile Communication Co., Ltd.",
+       [3]byte{60, 167, 43}:   "MRV Communications (Networks) LTD",
+       [3]byte{60, 168, 42}:   "Hewlett Packard",
+       [3]byte{60, 169, 244}:  "Intel Corporate",
+       [3]byte{60, 170, 63}:   "iKey, Ltd.",
+       [3]byte{60, 171, 142}:  "Apple, Inc.",
+       [3]byte{60, 174, 105}:  "ESA Elektroschaltanlagen Grimma GmbH",
+       [3]byte{60, 177, 91}:   "Avaya Inc",
+       [3]byte{60, 177, 127}:  "Wattwatchers Pty Ld",
+       [3]byte{60, 182, 183}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{60, 183, 43}:   "PLUMgrid Inc",
+       [3]byte{60, 183, 146}:  "Hitachi Maxell, Ltd., Optronics Division",
+       [3]byte{60, 184, 122}:  "Private",
+       [3]byte{60, 185, 166}:  "Belden Deutschland GmbH",
+       [3]byte{60, 187, 115}:  "Shenzhen Xinguodu Technology Co., Ltd.",
+       [3]byte{60, 187, 253}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{60, 189, 62}:   "Beijing Xiaomi Electronics Co., Ltd.",
+       [3]byte{60, 189, 216}:  "LG ELECTRONICS INC",
+       [3]byte{60, 190, 225}:  "NIKON CORPORATION",
+       [3]byte{60, 192, 121}:  "Shenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd",
+       [3]byte{60, 192, 198}:  "d&b audiotechnik GmbH",
+       [3]byte{60, 193, 44}:   "AES Corporation",
+       [3]byte{60, 193, 246}:  "Melange Systems Pvt. Ltd.",
+       [3]byte{60, 194, 67}:   "Nokia Corporation",
+       [3]byte{60, 194, 225}:  "XINHUA CONTROL ENGINEERING CO.,LTD",
+       [3]byte{60, 201, 158}:  "Huiyang Technology Co., Ltd",
+       [3]byte{60, 202, 135}:  "Iders Incorporated",
+       [3]byte{60, 203, 124}:  "TCT mobile ltd",
+       [3]byte{60, 205, 90}:   "Technische Alternative GmbH",
+       [3]byte{60, 205, 147}:  "LG ELECTRONICS INC",
+       [3]byte{60, 206, 21}:   "Mercedes-Benz USA, LLC",
+       [3]byte{60, 206, 115}:  "Cisco Systems, Inc",
+       [3]byte{60, 207, 91}:   "ICOMM HK LIMITED",
+       [3]byte{60, 208, 248}:  "Apple, Inc.",
+       [3]byte{60, 209, 110}:  "Telepower Communication Co., Ltd",
+       [3]byte{60, 212, 214}:  "WirelessWERX, Inc",
+       [3]byte{60, 215, 218}:  "SK Mtek microelectronics(shenzhen)limited",
+       [3]byte{60, 217, 43}:   "Hewlett Packard",
+       [3]byte{60, 217, 206}:  "Eclipse WiFi",
+       [3]byte{60, 218, 42}:   "zte corporation",
+       [3]byte{60, 221, 137}:  "SOMO HOLDINGS & TECH. CO.,LTD.",
+       [3]byte{60, 223, 30}:   "Cisco Systems, Inc",
+       [3]byte{60, 223, 169}:  "ARRIS Group, Inc.",
+       [3]byte{60, 223, 189}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{60, 224, 114}:  "Apple, Inc.",
+       [3]byte{60, 229, 166}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{60, 229, 180}:  "KIDASEN INDUSTRIA E COMERCIO DE ANTENAS LTDA",
+       [3]byte{60, 230, 36}:   "LG Display",
+       [3]byte{60, 234, 79}:   "2Wire Inc",
+       [3]byte{60, 234, 251}:  "NSE AG",
+       [3]byte{60, 239, 140}:  "Zhejiang Dahua Technology Co., Ltd.",
+       [3]byte{60, 243, 146}:  "Virtualtek. Co. Ltd",
+       [3]byte{60, 245, 44}:   "DSPECIALISTS GmbH",
+       [3]byte{60, 245, 145}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{60, 247, 42}:   "Nokia Corporation",
+       [3]byte{60, 247, 72}:   "Shenzhen Linsn Technology Development Co.,Ltd",
+       [3]byte{60, 247, 164}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{60, 248, 8}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{60, 248, 98}:   "Intel Corporate",
+       [3]byte{60, 250, 67}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{60, 251, 150}:  "Emcraft Systems LLC",
+       [3]byte{60, 253, 254}:  "Intel Corporate",
+       [3]byte{64, 0, 224}:    "Derek(Shaoguan)Limited",
+       [3]byte{64, 1, 7}:      "Arista Corp",
+       [3]byte{64, 1, 122}:    "Cisco Systems, Inc",
+       [3]byte{64, 1, 198}:    "3COM EUROPE LTD",
+       [3]byte{64, 4, 12}:     "A&T",
+       [3]byte{64, 7, 192}:    "Railtec Systems GmbH",
+       [3]byte{64, 13, 16}:    "ARRIS Group, Inc.",
+       [3]byte{64, 14, 103}:   "Tremol Ltd.",
+       [3]byte{64, 14, 133}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{64, 17, 220}:   "Sonance",
+       [3]byte{64, 18, 228}:   "Compass-EOS",
+       [3]byte{64, 19, 217}:   "Global ES",
+       [3]byte{64, 21, 151}:   "Protect America, Inc.",
+       [3]byte{64, 22, 59}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{64, 22, 126}:   "ASUSTek COMPUTER INC.",
+       [3]byte{64, 22, 159}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{64, 22, 250}:   "EKM Metering",
+       [3]byte{64, 24, 177}:   "Aerohive Networks Inc.",
+       [3]byte{64, 24, 215}:   "Smartronix, Inc.",
+       [3]byte{64, 27, 95}:    "Weifang GoerTek Technology Co.,Ltd.",
+       [3]byte{64, 29, 89}:    "Biometric Associates, LP",
+       [3]byte{64, 34, 237}:   "Digital Projection Ltd",
+       [3]byte{64, 37, 194}:   "Intel Corporate",
+       [3]byte{64, 39, 11}:    "Mobileeco Co., Ltd",
+       [3]byte{64, 40, 20}:    "RFI Engineering",
+       [3]byte{64, 43, 161}:   "Sony Mobile Communications AB",
+       [3]byte{64, 44, 244}:   "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{64, 46, 40}:    "MiXTelematics",
+       [3]byte{64, 48, 4}:     "Apple, Inc.",
+       [3]byte{64, 48, 103}:   "Conlog (Pty) Ltd",
+       [3]byte{64, 51, 26}:    "Apple, Inc.",
+       [3]byte{64, 51, 108}:   "Godrej & Boyce Mfg. co. ltd",
+       [3]byte{64, 55, 173}:   "Macro Image Technology, Inc.",
+       [3]byte{64, 60, 252}:   "Apple, Inc.",
+       [3]byte{64, 61, 236}:   "HUMAX Co., Ltd.",
+       [3]byte{64, 63, 140}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{64, 64, 34}:    "ZIV",
+       [3]byte{64, 64, 107}:   "Icomera",
+       [3]byte{64, 64, 167}:   "Sony Mobile Communications AB",
+       [3]byte{64, 66, 41}:    "Layer3TV, Inc",
+       [3]byte{64, 69, 218}:   "Spreadtrum Communications (Shanghai) Co., Ltd.",
+       [3]byte{64, 71, 106}:   "AG Acquisition Corp. d.b.a. ASTRO Gaming",
+       [3]byte{64, 72, 253}:   "IEEE Registration Authority",
+       [3]byte{64, 73, 15}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{64, 73, 138}:   "Synapticon GmbH",
+       [3]byte{64, 74, 3}:     "Zyxel Communications Corporation",
+       [3]byte{64, 74, 24}:    "Addrek Smart Solutions",
+       [3]byte{64, 74, 212}:   "Widex A/S",
+       [3]byte{64, 77, 127}:   "Apple, Inc.",
+       [3]byte{64, 77, 142}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{64, 78, 54}:    "HTC Corporation",
+       [3]byte{64, 78, 235}:   "Higher Way Electronic Co., Ltd.",
+       [3]byte{64, 80, 224}:   "Milton Security Group LLC",
+       [3]byte{64, 81, 108}:   "Grandex International Corporation",
+       [3]byte{64, 82, 13}:    "Pico Technology",
+       [3]byte{64, 84, 228}:   "Wearsafe Labs Inc",
+       [3]byte{64, 85, 57}:    "Cisco Systems, Inc",
+       [3]byte{64, 86, 12}:    "In Home Displays Ltd",
+       [3]byte{64, 86, 45}:    "Smartron India Pvt ltd",
+       [3]byte{64, 90, 155}:   "ANOVO",
+       [3]byte{64, 92, 253}:   "Dell Inc.",
+       [3]byte{64, 93, 130}:   "NETGEAR",
+       [3]byte{64, 94, 225}:   "Shenzhen H&T Intelligent Control Co.,Ltd.",
+       [3]byte{64, 95, 190}:   "RIM",
+       [3]byte{64, 95, 194}:   "Texas Instruments",
+       [3]byte{64, 96, 90}:    "Hawkeye Tech Co. Ltd",
+       [3]byte{64, 97, 134}:   "MICRO-STAR INT'L CO.,LTD",
+       [3]byte{64, 97, 142}:   "Stella-Green Co",
+       [3]byte{64, 98, 182}:   "Tele system communication",
+       [3]byte{64, 101, 163}:  "Sagemcom Broadband SAS",
+       [3]byte{64, 102, 122}:  "mediola - connected living AG",
+       [3]byte{64, 104, 38}:   "Thales UK Limited",
+       [3]byte{64, 106, 142}:  "Hangzhou Puwell OE Tech Ltd.",
+       [3]byte{64, 106, 171}:  "RIM",
+       [3]byte{64, 108, 143}:  "Apple, Inc.",
+       [3]byte{64, 111, 42}:   "BlackBerry RTS",
+       [3]byte{64, 112, 9}:    "ARRIS Group, Inc.",
+       [3]byte{64, 112, 74}:   "Power Idea Technology Limited",
+       [3]byte{64, 112, 116}:  "Life Technology (China) Co., Ltd",
+       [3]byte{64, 113, 131}:  "Juniper Networks",
+       [3]byte{64, 116, 150}:  "aFUN TECHNOLOGY INC.",
+       [3]byte{64, 120, 106}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{64, 120, 117}:  "IMBEL - Industria de Material Belico do Brasil",
+       [3]byte{64, 122, 128}:  "Nokia Corporation",
+       [3]byte{64, 123, 27}:   "Mettle Networks Inc.",
+       [3]byte{64, 124, 125}:  "Nokia",
+       [3]byte{64, 125, 15}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{64, 127, 224}:  "Glory Star Technics (ShenZhen) Limited",
+       [3]byte{64, 130, 86}:   "Continental Automotive GmbH",
+       [3]byte{64, 131, 222}:  "Zebra Technologies Inc",
+       [3]byte{64, 132, 147}:  "Clavister AB",
+       [3]byte{64, 134, 46}:   "JDM MOBILE INTERNET SOLUTION CO., LTD.",
+       [3]byte{64, 136, 5}:    "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{64, 136, 224}:  "Beijing Ereneben Information Technology Limited Shenzhen Branch",
+       [3]byte{64, 138, 154}:  "TITENG CO., Ltd.",
+       [3]byte{64, 139, 7}:    "Actiontec Electronics, Inc",
+       [3]byte{64, 139, 246}:  "Shenzhen TCL New Technology Co., Ltd",
+       [3]byte{64, 141, 92}:   "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{64, 149, 88}:   "Aisino Corporation",
+       [3]byte{64, 149, 189}:  "NTmore.Co.,Ltd",
+       [3]byte{64, 151, 209}:  "BK Electronics cc",
+       [3]byte{64, 152, 76}:   "Casacom Solutions AG",
+       [3]byte{64, 152, 78}:   "Texas Instruments",
+       [3]byte{64, 152, 123}:  "Aisino Corporation",
+       [3]byte{64, 153, 34}:   "AzureWave Technology Inc.",
+       [3]byte{64, 155, 13}:   "Shenzhen Yourf Kwan Industrial Co., Ltd",
+       [3]byte{64, 155, 205}:  "D-Link International",
+       [3]byte{64, 156, 40}:   "Apple, Inc.",
+       [3]byte{64, 159, 56}:   "AzureWave Technology Inc.",
+       [3]byte{64, 159, 135}:  "Jide Technology (Hong Kong) Limited",
+       [3]byte{64, 159, 199}:  "BAEKCHUN I&C Co., Ltd.",
+       [3]byte{64, 163, 204}:  "Intel Corporate",
+       [3]byte{64, 165, 239}:  "Shenzhen Four Seas Global Link Network Technology Co., Ltd.",
+       [3]byte{64, 166, 119}:  "Juniper Networks",
+       [3]byte{64, 166, 164}:  "PassivSystems Ltd",
+       [3]byte{64, 166, 217}:  "Apple, Inc.",
+       [3]byte{64, 166, 232}:  "Cisco Systems, Inc",
+       [3]byte{64, 168, 240}:  "Hewlett Packard",
+       [3]byte{64, 169, 63}:   "Private",
+       [3]byte{64, 172, 141}:  "Data Management, Inc.",
+       [3]byte{64, 176, 52}:   "Hewlett Packard",
+       [3]byte{64, 176, 250}:  "LG Electronics (Mobile Communications)",
+       [3]byte{64, 178, 200}:  "Nortel Networks",
+       [3]byte{64, 179, 149}:  "Apple, Inc.",
+       [3]byte{64, 179, 205}:  "Chiyoda Electronics Co.,Ltd.",
+       [3]byte{64, 179, 252}:  "Logital Co. Limited",
+       [3]byte{64, 180, 205}:  "Amazon Technologies Inc.",
+       [3]byte{64, 180, 240}:  "Juniper Networks",
+       [3]byte{64, 182, 136}:  "LEGIC Identsystems AG",
+       [3]byte{64, 182, 177}:  "SUNGSAM CO,.Ltd",
+       [3]byte{64, 183, 243}:  "ARRIS Group, Inc.",
+       [3]byte{64, 184, 55}:   "Sony Mobile Communications AB",
+       [3]byte{64, 184, 154}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{64, 185, 60}:   "Hewlett Packard Enterprise",
+       [3]byte{64, 186, 97}:   "ARIMA Communications Corp.",
+       [3]byte{64, 188, 115}:  "Cronoplast  S.L.",
+       [3]byte{64, 188, 139}:  "itelio GmbH",
+       [3]byte{64, 189, 158}:  "Physio-Control, Inc",
+       [3]byte{64, 191, 23}:   "Digistar Telecom. SA",
+       [3]byte{64, 194, 69}:   "Shenzhen Hexicom Technology Co., Ltd.",
+       [3]byte{64, 196, 214}:  "ChongQing Camyu Technology Development Co.,Ltd.",
+       [3]byte{64, 198, 42}:   "Shanghai Jing Ren Electronic Technology Co., Ltd.",
+       [3]byte{64, 199, 41}:   "Sagemcom Broadband SAS",
+       [3]byte{64, 199, 201}:  "Naviit Inc.",
+       [3]byte{64, 200, 203}:  "AM Telecom co., Ltd.",
+       [3]byte{64, 203, 168}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{64, 205, 58}:   "Z3 Technology",
+       [3]byte{64, 206, 36}:   "Cisco Systems, Inc",
+       [3]byte{64, 210, 138}:  "Nintendo Co., Ltd.",
+       [3]byte{64, 211, 45}:   "Apple, Inc.",
+       [3]byte{64, 211, 87}:   "Ison Technology Co., Ltd.",
+       [3]byte{64, 211, 174}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{64, 212, 14}:   "Biodata Ltd",
+       [3]byte{64, 213, 89}:   "MICRO S.E.R.I.",
+       [3]byte{64, 214, 60}:   "Equitech Industrial(DongGuan)Co.,Ltd",
+       [3]byte{64, 216, 85}:   "IEEE Registration Authority",
+       [3]byte{64, 226, 48}:   "AzureWave Technology Inc.",
+       [3]byte{64, 227, 214}:  "Aruba Networks",
+       [3]byte{64, 231, 48}:   "DEY Storage Systems, Inc.",
+       [3]byte{64, 231, 147}:  "Shenzhen Siviton Technology Co.,Ltd",
+       [3]byte{64, 234, 206}:  "FOUNDER BROADBAND NETWORK SERVICE CO.,LTD",
+       [3]byte{64, 236, 248}:  "Siemens AG",
+       [3]byte{64, 237, 152}:  "IEEE Registration Authority",
+       [3]byte{64, 239, 76}:   "Fihonest communication co.,Ltd",
+       [3]byte{64, 240, 47}:   "Liteon Technology Corporation",
+       [3]byte{64, 241, 76}:   "ISE Europe SPRL",
+       [3]byte{64, 242, 1}:    "Sagemcom Broadband SAS",
+       [3]byte{64, 242, 233}:  "IBM",
+       [3]byte{64, 243, 8}:    "Murata Manufacturing Co., Ltd.",
+       [3]byte{64, 243, 133}:  "IEEE Registration Authority",
+       [3]byte{64, 244, 7}:    "Nintendo Co., Ltd.",
+       [3]byte{64, 244, 19}:   "Rubezh",
+       [3]byte{64, 244, 32}:   "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{64, 244, 236}:  "Cisco Systems, Inc",
+       [3]byte{64, 245, 46}:   "Leica Microsystems (Schweiz) AG",
+       [3]byte{64, 250, 127}:  "Preh Car Connect GmbH",
+       [3]byte{64, 252, 137}:  "ARRIS Group, Inc.",
+       [3]byte{64, 254, 13}:   "MAXIO",
+       [3]byte{68, 0, 16}:     "Apple, Inc.",
+       [3]byte{68, 3, 44}:     "Intel Corporate",
+       [3]byte{68, 3, 167}:    "Cisco Systems, Inc",
+       [3]byte{68, 4, 68}:     "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{68, 9, 184}:    "Salcomp (Shenzhen) CO., LTD.",
+       [3]byte{68, 12, 253}:   "NetMan Co., Ltd.",
+       [3]byte{68, 17, 2}:     "EDMI  Europe Ltd",
+       [3]byte{68, 17, 194}:   "Telegartner Karl Gartner GmbH",
+       [3]byte{68, 19, 25}:    "WKK TECHNOLOGY LTD.",
+       [3]byte{68, 20, 65}:    "AudioControl Inc.",
+       [3]byte{68, 24, 79}:    "Fitview",
+       [3]byte{68, 25, 182}:   "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{68, 28, 168}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{68, 30, 145}:   "ARVIDA Intelligent Electronics Technology  Co.,Ltd.",
+       [3]byte{68, 30, 161}:   "Hewlett Packard",
+       [3]byte{68, 35, 170}:   "Farmage Co., Ltd.",
+       [3]byte{68, 37, 187}:   "Bamboo Entertainment Corporation",
+       [3]byte{68, 41, 56}:    "NietZsche enterprise Co.Ltd.",
+       [3]byte{68, 42, 96}:    "Apple, Inc.",
+       [3]byte{68, 42, 255}:   "E3 Technology, Inc.",
+       [3]byte{68, 43, 3}:     "Cisco Systems, Inc",
+       [3]byte{68, 44, 5}:     "AMPAK Technology, Inc.",
+       [3]byte{68, 49, 146}:   "Hewlett Packard",
+       [3]byte{68, 50, 42}:    "Avaya Inc",
+       [3]byte{68, 50, 200}:   "Technicolor CH USA Inc.",
+       [3]byte{68, 51, 76}:    "Shenzhen Bilian electronic CO.,LTD",
+       [3]byte{68, 52, 143}:   "MXT INDUSTRIAL LTDA",
+       [3]byte{68, 53, 111}:   "Neterix",
+       [3]byte{68, 55, 8}:     "MRV Comunications",
+       [3]byte{68, 55, 25}:    "2 Save Energy Ltd",
+       [3]byte{68, 55, 111}:   "Young Electric Sign Co",
+       [3]byte{68, 55, 230}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{68, 56, 57}:    "Cumulus Networks, inc",
+       [3]byte{68, 57, 196}:   "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{68, 60, 156}:   "Pintsch Tiefenbach GmbH",
+       [3]byte{68, 61, 33}:    "Nuvolt",
+       [3]byte{68, 62, 178}:   "DEOTRON Co., LTD.",
+       [3]byte{68, 68, 80}:    "OttoQ",
+       [3]byte{68, 72, 145}:   "HDMI Licensing, LLC",
+       [3]byte{68, 72, 193}:   "Hewlett Packard Enterprise",
+       [3]byte{68, 74, 101}:   "Silverflare Ltd.",
+       [3]byte{68, 74, 176}:   "Zhejiang Moorgen Intelligence Technology Co., Ltd",
+       [3]byte{68, 76, 12}:    "Apple, Inc.",
+       [3]byte{68, 76, 168}:   "Arista Networks",
+       [3]byte{68, 78, 26}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{68, 78, 109}:   "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+       [3]byte{68, 79, 94}:    "Pan Studios Co.,Ltd.",
+       [3]byte{68, 81, 219}:   "Raytheon BBN Technologies",
+       [3]byte{68, 84, 192}:   "Thompson Aerospace",
+       [3]byte{68, 85, 177}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{68, 86, 141}:   "PNC Technologies  Co., Ltd.",
+       [3]byte{68, 86, 183}:   "Spawn Labs, Inc",
+       [3]byte{68, 88, 41}:    "Cisco SPVTG",
+       [3]byte{68, 89, 159}:   "Criticare Systems, Inc",
+       [3]byte{68, 94, 205}:   "Razer Inc",
+       [3]byte{68, 94, 243}:   "Tonalite Holding B.V.",
+       [3]byte{68, 95, 122}:   "Shihlin Electric & Engineering Corp.",
+       [3]byte{68, 95, 140}:   "Intercel Group Limited",
+       [3]byte{68, 97, 50}:    "ecobee inc",
+       [3]byte{68, 97, 156}:   "FONsystem co. ltd.",
+       [3]byte{68, 98, 70}:    "Comat AG",
+       [3]byte{68, 101, 13}:   "Amazon Technologies Inc.",
+       [3]byte{68, 101, 106}:  "Mega Video Electronic(HK) Industry Co., Ltd",
+       [3]byte{68, 102, 110}:  "IP-LINE",
+       [3]byte{68, 103, 85}:   "Orbit Irrigation",
+       [3]byte{68, 104, 171}:  "JUIN COMPANY, LIMITED",
+       [3]byte{68, 106, 46}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{68, 106, 183}:  "ARRIS Group, Inc.",
+       [3]byte{68, 108, 36}:   "Reallin Electronic Co.,Ltd",
+       [3]byte{68, 109, 87}:   "Liteon Technology Corporation",
+       [3]byte{68, 109, 108}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{68, 110, 229}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{68, 112, 11}:   "IFFU",
+       [3]byte{68, 112, 152}:  "MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED",
+       [3]byte{68, 115, 214}:  "Logitech",
+       [3]byte{68, 116, 108}:  "Sony Mobile Communications AB",
+       [3]byte{68, 120, 62}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{68, 123, 187}:  "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{68, 123, 196}:  "DualShine Technology(SZ)Co.,Ltd",
+       [3]byte{68, 124, 127}:  "Innolight Technology Corporation",
+       [3]byte{68, 125, 165}:  "VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD",
+       [3]byte{68, 126, 118}:  "Trek Technology (S) Pte Ltd",
+       [3]byte{68, 126, 149}:  "Alpha and Omega, Inc",
+       [3]byte{68, 127, 119}:  "Connected Home",
+       [3]byte{68, 128, 235}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{68, 130, 229}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{68, 131, 18}:   "Star-Net",
+       [3]byte{68, 133, 0}:    "Intel Corporate",
+       [3]byte{68, 134, 193}:  "Siemens Low Voltage & Products",
+       [3]byte{68, 135, 35}:   "HOYA SERVICE CORPORATION",
+       [3]byte{68, 135, 252}:  "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{68, 136, 203}:  "Camco Technologies NV",
+       [3]byte{68, 138, 91}:   "Micro-Star INT'L CO., LTD.",
+       [3]byte{68, 140, 82}:   "KTIS CO., Ltd",
+       [3]byte{68, 142, 18}:   "DT Research, Inc.",
+       [3]byte{68, 142, 129}:  "VIG",
+       [3]byte{68, 143, 23}:   "Samsung Electronics Co., Ltd. ARTIK",
+       [3]byte{68, 145, 96}:   "Murata Manufacturing Co., Ltd.",
+       [3]byte{68, 145, 219}:  "Shanghai Huaqin Telecom Technology Co.,Ltd",
+       [3]byte{68, 148, 252}:  "NETGEAR",
+       [3]byte{68, 149, 250}:  "Qingdao Santong Digital Technology Co.Ltd",
+       [3]byte{68, 150, 43}:   "Aidon Oy",
+       [3]byte{68, 151, 90}:   "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{68, 155, 120}:  "The Now Factory",
+       [3]byte{68, 156, 181}:  "Alcomp, Inc",
+       [3]byte{68, 159, 127}:  "DataCore Software Corporation",
+       [3]byte{68, 164, 45}:   "TCT mobile ltd",
+       [3]byte{68, 166, 137}:  "PROMAX ELECTRONICA SA",
+       [3]byte{68, 166, 229}:  "THINKING TECHNOLOGY CO.,LTD",
+       [3]byte{68, 167, 207}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{68, 168, 66}:   "Dell Inc.",
+       [3]byte{68, 168, 194}:  "SEWOO TECH CO., LTD",
+       [3]byte{68, 170, 39}:   "udworks Co., Ltd.",
+       [3]byte{68, 170, 80}:   "Juniper Networks",
+       [3]byte{68, 170, 232}:  "Nanotec Electronic GmbH & Co. KG",
+       [3]byte{68, 170, 245}:  "ARRIS Group, Inc.",
+       [3]byte{68, 173, 25}:   "XINGFEI (H.K)LIMITED",
+       [3]byte{68, 173, 217}:  "Cisco Systems, Inc",
+       [3]byte{68, 179, 45}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{68, 179, 130}:  "Kuang-chi Institute of Advanced Technology",
+       [3]byte{68, 180, 18}:   "SIUS AG",
+       [3]byte{68, 186, 70}:   "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{68, 191, 227}:  "Shenzhen Longtech Electronics Co.,Ltd",
+       [3]byte{68, 193, 92}:   "Texas Instruments",
+       [3]byte{68, 194, 51}:   "Guangzhou Comet Technology Development Co.Ltd",
+       [3]byte{68, 195, 6}:    "SIFROM Inc.",
+       [3]byte{68, 195, 70}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{68, 195, 155}:  "OOO RUBEZH NPO",
+       [3]byte{68, 196, 169}:  "Opticom Communication, LLC",
+       [3]byte{68, 197, 111}:  "NGN Easy Satfinder (Tianjin) Electronic Co., Ltd",
+       [3]byte{68, 198, 155}:  "Wuhan Feng Tian Information Network CO.,LTD",
+       [3]byte{68, 200, 116}:  "China Mobile Group Device Co.,Ltd.",
+       [3]byte{68, 201, 162}:  "Greenwald Industries",
+       [3]byte{68, 205, 14}:   "FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.",
+       [3]byte{68, 206, 125}:  "SFR",
+       [3]byte{68, 209, 94}:   "Shanghai Kingto Information Technology Ltd",
+       [3]byte{68, 209, 250}:  "Shenzhen Yunlink Technology Co., Ltd",
+       [3]byte{68, 210, 68}:   "Seiko Epson Corporation",
+       [3]byte{68, 210, 202}:  "Anvia TV Oy",
+       [3]byte{68, 211, 202}:  "Cisco Systems, Inc",
+       [3]byte{68, 212, 55}:   "Inteno Broadband Technology AB",
+       [3]byte{68, 212, 224}:  "Sony Mobile Communications AB",
+       [3]byte{68, 213, 165}:  "AddOn Computer",
+       [3]byte{68, 214, 61}:   "Talari Networks",
+       [3]byte{68, 214, 225}:  "Snuza International Pty. Ltd.",
+       [3]byte{68, 216, 50}:   "AzureWave Technology Inc.",
+       [3]byte{68, 216, 132}:  "Apple, Inc.",
+       [3]byte{68, 217, 231}:  "Ubiquiti Networks Inc.",
+       [3]byte{68, 220, 145}:  "PLANEX COMMUNICATIONS INC.",
+       [3]byte{68, 220, 203}:  "SEMINDIA SYSTEMS PVT LTD",
+       [3]byte{68, 224, 142}:  "Cisco SPVTG",
+       [3]byte{68, 225, 55}:   "ARRIS Group, Inc.",
+       [3]byte{68, 228, 154}:  "OMNITRONICS PTY LTD",
+       [3]byte{68, 228, 217}:  "Cisco Systems, Inc",
+       [3]byte{68, 232, 165}:  "Myreka Technologies Sdn. Bhd.",
+       [3]byte{68, 233, 221}:  "Sagemcom Broadband SAS",
+       [3]byte{68, 234, 75}:   "Actlas Inc.",
+       [3]byte{68, 234, 216}:  "Texas Instruments",
+       [3]byte{68, 237, 87}:   "Longicorn, inc.",
+       [3]byte{68, 238, 2}:    "MTI Ltd.",
+       [3]byte{68, 238, 48}:   "Budelmann Elektronik GmbH",
+       [3]byte{68, 240, 52}:   "Kaonmedia CO., LTD.",
+       [3]byte{68, 244, 54}:   "zte corporation",
+       [3]byte{68, 244, 89}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{68, 244, 119}:  "Juniper Networks",
+       [3]byte{68, 248, 73}:   "Union Pacific Railroad",
+       [3]byte{68, 251, 66}:   "Apple, Inc.",
+       [3]byte{68, 253, 163}:  "Everysight LTD.",
+       [3]byte{72, 0, 49}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 0, 51}:     "Technicolor CH USA Inc.",
+       [3]byte{72, 2, 42}:     "B-Link Electronic Limited",
+       [3]byte{72, 3, 98}:     "DESAY ELECTRONICS(HUIZHOU)CO.,LTD",
+       [3]byte{72, 6, 106}:    "Tempered Networks, Inc.",
+       [3]byte{72, 12, 73}:    "NAKAYO Inc",
+       [3]byte{72, 14, 236}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{72, 15, 207}:   "Hewlett Packard",
+       [3]byte{72, 16, 99}:    "NTT Innovation Institute, Inc.",
+       [3]byte{72, 18, 73}:    "Luxcom Technologies Inc.",
+       [3]byte{72, 19, 126}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{72, 19, 243}:   "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+       [3]byte{72, 23, 76}:    "MicroPower technologies",
+       [3]byte{72, 24, 66}:    "Shanghai Winaas Co. Equipment Co. Ltd.",
+       [3]byte{72, 26, 132}:   "Pointer Telocation Ltd",
+       [3]byte{72, 27, 210}:   "Intron Scientific co., ltd.",
+       [3]byte{72, 29, 112}:   "Cisco SPVTG",
+       [3]byte{72, 38, 232}:   "Tek-Air Systems, Inc.",
+       [3]byte{72, 39, 234}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{72, 40, 47}:    "zte corporation",
+       [3]byte{72, 44, 234}:   "Motorola Inc Business Light Radios",
+       [3]byte{72, 51, 221}:   "ZENNIO AVANCE Y TECNOLOGIA, S.L.",
+       [3]byte{72, 52, 61}:    "IEP GmbH",
+       [3]byte{72, 54, 95}:    "Wintecronics Ltd.",
+       [3]byte{72, 57, 116}:   "Proware Technologies Co., Ltd.",
+       [3]byte{72, 59, 56}:    "Apple, Inc.",
+       [3]byte{72, 60, 12}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 61, 50}:    "Syscor Controls &amp; Automation",
+       [3]byte{72, 67, 90}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 67, 124}:   "Apple, Inc.",
+       [3]byte{72, 68, 135}:   "Cisco SPVTG",
+       [3]byte{72, 68, 247}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{72, 69, 32}:    "Intel Corporate",
+       [3]byte{72, 70, 241}:   "Uros Oy",
+       [3]byte{72, 70, 251}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 73, 199}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{72, 75, 170}:   "Apple, Inc.",
+       [3]byte{72, 77, 126}:   "Dell Inc.",
+       [3]byte{72, 80, 115}:   "Microsoft Corporation",
+       [3]byte{72, 81, 183}:   "Intel Corporate",
+       [3]byte{72, 82, 97}:    "SOREEL",
+       [3]byte{72, 84, 21}:    "NET RULES TECNOLOGIA EIRELI",
+       [3]byte{72, 85, 92}:    "Wu Qi Technologies,Inc.",
+       [3]byte{72, 85, 95}:    "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{72, 87, 221}:   "Facebook Inc",
+       [3]byte{72, 89, 41}:    "LG Electronics (Mobile Communications)",
+       [3]byte{72, 89, 164}:   "zte corporation",
+       [3]byte{72, 90, 63}:    "WISOL",
+       [3]byte{72, 90, 182}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{72, 91, 57}:    "ASUSTek COMPUTER INC.",
+       [3]byte{72, 93, 54}:    "Verizon",
+       [3]byte{72, 93, 96}:    "AzureWave Technology Inc.",
+       [3]byte{72, 96, 188}:   "Apple, Inc.",
+       [3]byte{72, 97, 163}:   "Concern Axion JSC",
+       [3]byte{72, 98, 118}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 101, 238}:  "IEEE Registration Authority",
+       [3]byte{72, 107, 44}:   "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+       [3]byte{72, 107, 145}:  "Fleetwood Group Inc.",
+       [3]byte{72, 109, 187}:  "Vestel Elektronik San ve Tic. A.Ş.",
+       [3]byte{72, 110, 115}:  "Pica8, Inc.",
+       [3]byte{72, 110, 251}:  "Davit System Technology Co., Ltd.",
+       [3]byte{72, 111, 210}:  "StorSimple Inc",
+       [3]byte{72, 113, 25}:   "SGB GROUP LTD.",
+       [3]byte{72, 116, 110}:  "Apple, Inc.",
+       [3]byte{72, 118, 4}:    "Private",
+       [3]byte{72, 122, 85}:   "ALE International",
+       [3]byte{72, 122, 218}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{72, 123, 107}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 125, 46}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{72, 130, 68}:   "Life Fitness / Div. of Brunswick",
+       [3]byte{72, 130, 242}:  "Appel Elektronik GmbH",
+       [3]byte{72, 131, 199}:  "Sagemcom Broadband SAS",
+       [3]byte{72, 134, 232}:  "Microsoft Corporation",
+       [3]byte{72, 136, 3}:    "ManTechnology Inc.",
+       [3]byte{72, 136, 202}:  "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+       [3]byte{72, 138, 210}:  "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{72, 141, 54}:   "Arcadyan Corporation",
+       [3]byte{72, 142, 66}:   "DIGALOG GmbH",
+       [3]byte{72, 142, 239}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 145, 83}:   "Weinmann Geräte für Medizin GmbH + Co. KG",
+       [3]byte{72, 145, 246}:  "Shenzhen Reach software technology CO.,LTD",
+       [3]byte{72, 154, 66}:   "Technomate Ltd",
+       [3]byte{72, 155, 226}:  "SCI Innovations Ltd",
+       [3]byte{72, 157, 24}:   "Flashbay Limited",
+       [3]byte{72, 157, 36}:   "BlackBerry RTS",
+       [3]byte{72, 161, 149}:  "Apple, Inc.",
+       [3]byte{72, 162, 45}:   "Shenzhen Huaxuchang Telecom Technology Co.,Ltd",
+       [3]byte{72, 162, 183}:  "Kodofon JSC",
+       [3]byte{72, 163, 128}:  "Gionee Communication Equipment Co.,Ltd.",
+       [3]byte{72, 166, 210}:  "GJsun Optical Science and Tech Co.,Ltd.",
+       [3]byte{72, 167, 78}:   "zte corporation",
+       [3]byte{72, 169, 210}:  "Wistron Neweb Corporation",
+       [3]byte{72, 170, 93}:   "Store Electronic Systems",
+       [3]byte{72, 173, 8}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 178, 83}:   "Marketaxess Corporation",
+       [3]byte{72, 181, 167}:  "Glory Horse Industries Ltd.",
+       [3]byte{72, 182, 32}:   "ROLI Ltd.",
+       [3]byte{72, 184, 222}:  "HOMEWINS TECHNOLOGY CO.,LTD.",
+       [3]byte{72, 185, 119}:  "PulseOn Oy",
+       [3]byte{72, 185, 194}:  "Teletics Inc.",
+       [3]byte{72, 186, 78}:   "Hewlett Packard",
+       [3]byte{72, 188, 166}:  "\u200bASUNG TECHNO CO.,Ltd",
+       [3]byte{72, 190, 45}:   "Symanitron",
+       [3]byte{72, 191, 107}:  "Apple, Inc.",
+       [3]byte{72, 191, 116}:  "Baicells Technologies Co.,LTD",
+       [3]byte{72, 192, 73}:   "Broad Telecom SA",
+       [3]byte{72, 192, 147}:  "Xirrus, Inc.",
+       [3]byte{72, 193, 172}:  "PLANTRONICS, INC.",
+       [3]byte{72, 197, 141}:  "Lear Corporation GmbH",
+       [3]byte{72, 198, 99}:   "GTO Access Systems LLC",
+       [3]byte{72, 200, 98}:   "Simo Wireless,Inc.",
+       [3]byte{72, 200, 182}:  "SysTec GmbH",
+       [3]byte{72, 203, 110}:  "Cello Electronics (UK) Ltd",
+       [3]byte{72, 208, 207}:  "Universal Electronics, Inc.",
+       [3]byte{72, 209, 142}:  "Metis Communication Co.,Ltd",
+       [3]byte{72, 210, 36}:   "Liteon Technology Corporation",
+       [3]byte{72, 211, 67}:   "ARRIS Group, Inc.",
+       [3]byte{72, 211, 93}:   "Private",
+       [3]byte{72, 213, 57}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 213, 76}:   "Jeda Networks",
+       [3]byte{72, 214, 213}:  "Google, Inc.",
+       [3]byte{72, 215, 5}:    "Apple, Inc.",
+       [3]byte{72, 215, 255}:  "BLANKOM Antennentechnik GmbH",
+       [3]byte{72, 216, 85}:   "Telvent",
+       [3]byte{72, 216, 254}:  "ClarIDy Solutions, Inc.",
+       [3]byte{72, 218, 150}:  "Eddy Smart Home Solutions Inc.",
+       [3]byte{72, 219, 80}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 220, 251}:  "Nokia Corporation",
+       [3]byte{72, 223, 28}:   "Wuhan NEC Fibre Optic Communications industry Co. Ltd",
+       [3]byte{72, 223, 55}:   "Hewlett Packard Enterprise",
+       [3]byte{72, 225, 175}:  "Vity",
+       [3]byte{72, 226, 68}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{72, 233, 241}:  "Apple, Inc.",
+       [3]byte{72, 234, 99}:   "Zhejiang Uniview Technologies Co., Ltd.",
+       [3]byte{72, 235, 48}:   "ETERNA TECHNOLOGY, INC.",
+       [3]byte{72, 236, 91}:   "Nokia",
+       [3]byte{72, 237, 128}:  "daesung eltec",
+       [3]byte{72, 238, 7}:    "Silver Palm Technologies LLC",
+       [3]byte{72, 238, 12}:   "D-Link International",
+       [3]byte{72, 238, 134}:  "UTStarcom (China) Co.,Ltd",
+       [3]byte{72, 240, 123}:  "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{72, 242, 48}:   "Ubizcore Co.,LTD",
+       [3]byte{72, 243, 23}:   "Private",
+       [3]byte{72, 244, 125}:  "TechVision Holding  Internation Limited",
+       [3]byte{72, 247, 192}:  "Technicolor CH USA Inc.",
+       [3]byte{72, 247, 241}:  "Nokia",
+       [3]byte{72, 248, 179}:  "Cisco-Linksys, LLC",
+       [3]byte{72, 248, 225}:  "Nokia",
+       [3]byte{72, 249, 37}:   "Maestronic",
+       [3]byte{72, 249, 124}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{72, 252, 182}:  "LAVA INTERNATIONAL(H.K) LIMITED",
+       [3]byte{72, 252, 184}:  "Woodstream Corporation",
+       [3]byte{72, 253, 142}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{72, 254, 234}:  "HOMA B.V.",
+       [3]byte{76, 0, 130}:    "Cisco Systems, Inc",
+       [3]byte{76, 2, 46}:     "CMR KOREA CO., LTD",
+       [3]byte{76, 2, 137}:    "LEX COMPUTECH CO., LTD",
+       [3]byte{76, 6, 138}:    "Basler Electric Company",
+       [3]byte{76, 7, 201}:    "COMPUTER OFFICE Co.,Ltd.",
+       [3]byte{76, 9, 180}:    "zte corporation",
+       [3]byte{76, 9, 212}:    "Arcadyan Technology Corporation",
+       [3]byte{76, 11, 58}:    "TCT mobile ltd",
+       [3]byte{76, 11, 190}:   "Microsoft",
+       [3]byte{76, 13, 238}:   "JABIL CIRCUIT (SHANGHAI) LTD.",
+       [3]byte{76, 15, 110}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{76, 15, 199}:   "Earda Electronics Co.,Ltd",
+       [3]byte{76, 17, 191}:   "Zhejiang Dahua Technology Co., Ltd.",
+       [3]byte{76, 19, 101}:   "Emplus Technologies",
+       [3]byte{76, 20, 128}:   "NOREGON SYSTEMS, INC",
+       [3]byte{76, 20, 163}:   "TCL Technoly Electronics (Huizhou) Co., Ltd.",
+       [3]byte{76, 22, 148}:   "shenzhen sibituo Technology Co., Ltd",
+       [3]byte{76, 22, 241}:   "zte corporation",
+       [3]byte{76, 22, 252}:   "Juniper Networks",
+       [3]byte{76, 23, 235}:   "Sagemcom Broadband SAS",
+       [3]byte{76, 24, 154}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{76, 26, 58}:    "PRIMA Research And Production Enterprise Ltd.",
+       [3]byte{76, 26, 61}:    "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{76, 26, 149}:   "Novakon Co., Ltd.",
+       [3]byte{76, 31, 204}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{76, 33, 208}:   "Sony Mobile Communications AB",
+       [3]byte{76, 34, 88}:    "cozybit, Inc.",
+       [3]byte{76, 37, 120}:   "Nokia Corporation",
+       [3]byte{76, 38, 231}:   "Welgate Co., Ltd.",
+       [3]byte{76, 44, 128}:   "Beijing Skyway Technologies Co.,Ltd",
+       [3]byte{76, 44, 131}:   "Zhejiang KaNong Network Technology Co.,Ltd.",
+       [3]byte{76, 47, 157}:   "ICM Controls",
+       [3]byte{76, 48, 137}:   "Thales Transportation Systems GmbH",
+       [3]byte{76, 50, 45}:    "TELEDATA NETWORKS",
+       [3]byte{76, 50, 117}:   "Apple, Inc.",
+       [3]byte{76, 50, 217}:   "M Rutty Holdings Pty. Ltd.",
+       [3]byte{76, 51, 78}:    "HIGHTECH",
+       [3]byte{76, 52, 136}:   "Intel Corporate",
+       [3]byte{76, 56, 213}:   "MITAC COMPUTING TECHNOLOGY CORPORATION",
+       [3]byte{76, 56, 216}:   "ARRIS Group, Inc.",
+       [3]byte{76, 57, 9}:     "HPL Electric & Power Private Limited",
+       [3]byte{76, 57, 16}:    "Newtek Electronics co., Ltd.",
+       [3]byte{76, 59, 116}:   "VOGTEC(H.K.) Co., Ltd",
+       [3]byte{76, 60, 22}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{76, 72, 218}:   "Beijing Autelan Technology Co.,Ltd",
+       [3]byte{76, 73, 227}:   "Xiaomi Communications Co Ltd",
+       [3]byte{76, 75, 104}:   "Mobile Device, Inc.",
+       [3]byte{76, 78, 3}:     "TCT mobile ltd",
+       [3]byte{76, 78, 53}:    "Cisco Systems, Inc",
+       [3]byte{76, 82, 98}:    "Fujitsu Technology Solutions GmbH",
+       [3]byte{76, 84, 39}:    "Linepro Sp. z o.o.",
+       [3]byte{76, 84, 153}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{76, 85, 133}:   "Hamilton Systems",
+       [3]byte{76, 85, 184}:   "Turkcell Teknoloji",
+       [3]byte{76, 85, 204}:   "Zentri Pty Ltd",
+       [3]byte{76, 87, 202}:   "Apple, Inc.",
+       [3]byte{76, 93, 205}:   "Oy Finnish Electric Vehicle Technologies Ltd",
+       [3]byte{76, 94, 12}:    "Routerboard.com",
+       [3]byte{76, 95, 210}:   "Alcatel-Lucent",
+       [3]byte{76, 96, 213}:   "airPointe of New Hampshire",
+       [3]byte{76, 96, 222}:   "NETGEAR",
+       [3]byte{76, 98, 85}:    "SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.",
+       [3]byte{76, 99, 235}:   "Application Solutions (Electronics and Vision) Ltd",
+       [3]byte{76, 100, 217}:  "Guangdong Leawin Group Co., Ltd",
+       [3]byte{76, 101, 168}:  "IEEE Registration Authority",
+       [3]byte{76, 102, 65}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{76, 110, 110}:  "Comnect Technology CO.,LTD",
+       [3]byte{76, 114, 185}:  "PEGATRON CORPORATION",
+       [3]byte{76, 115, 103}:  "Genius Bytes Software Solutions GmbH",
+       [3]byte{76, 115, 165}:  "KOVE",
+       [3]byte{76, 116, 3}:    "BQ",
+       [3]byte{76, 116, 135}:  "Leader Phone Communication Technology Co., Ltd.",
+       [3]byte{76, 116, 191}:  "Apple, Inc.",
+       [3]byte{76, 118, 37}:   "Dell Inc.",
+       [3]byte{76, 119, 79}:   "Embedded Wireless Labs",
+       [3]byte{76, 120, 114}:  "Cav. Uff. Giacomo Cimberio S.p.A.",
+       [3]byte{76, 120, 151}:  "Arrowhead Alarm Products Ltd",
+       [3]byte{76, 121, 186}:  "Intel Corporate",
+       [3]byte{76, 124, 95}:   "Apple, Inc.",
+       [3]byte{76, 127, 98}:   "Nokia Corporation",
+       [3]byte{76, 128, 79}:   "Armstrong Monitoring Corp",
+       [3]byte{76, 128, 147}:  "Intel Corporate",
+       [3]byte{76, 129, 32}:   "Taicang T&W Electronics",
+       [3]byte{76, 130, 207}:  "Echostar Technologies Corp",
+       [3]byte{76, 131, 222}:  "Cisco SPVTG",
+       [3]byte{76, 139, 48}:   "Actiontec Electronics, Inc",
+       [3]byte{76, 139, 85}:   "Grupo Digicon",
+       [3]byte{76, 139, 239}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{76, 141, 121}:  "Apple, Inc.",
+       [3]byte{76, 142, 204}:  "SILKAN SA",
+       [3]byte{76, 143, 165}:  "Jastec",
+       [3]byte{76, 145, 12}:   "Lanix Internacional, S.A. de C.V.",
+       [3]byte{76, 150, 20}:   "Juniper Networks",
+       [3]byte{76, 152, 239}:  "Zeo",
+       [3]byte{76, 158, 128}:  "KYOKKO ELECTRIC Co., Ltd.",
+       [3]byte{76, 158, 228}:  "Hanyang Navicom Co.,Ltd.",
+       [3]byte{76, 158, 255}:  "Zyxel Communications Corporation",
+       [3]byte{76, 160, 3}:    "T-21 Technologies LLC",
+       [3]byte{76, 161, 97}:   "Rain Bird Corporation",
+       [3]byte{76, 165, 21}:   "Baikal Electronics JSC",
+       [3]byte{76, 165, 109}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{76, 167, 75}:   "Alcatel Lucent",
+       [3]byte{76, 169, 40}:   "Insensi",
+       [3]byte{76, 170, 22}:   "AzureWave Technologies (Shanghai) Inc.",
+       [3]byte{76, 171, 51}:   "KST technology",
+       [3]byte{76, 172, 10}:   "zte corporation",
+       [3]byte{76, 174, 28}:   "SaiNXT Technologies LLP",
+       [3]byte{76, 174, 49}:   "ShengHai Electronics (Shenzhen) Ltd",
+       [3]byte{76, 176, 8}:    "Shenzhen Gwelltimes Technology Co.,Ltd",
+       [3]byte{76, 176, 232}:  "Beijing RongZhi xinghua technology co., LTD",
+       [3]byte{76, 177, 108}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{76, 177, 153}:  "Apple, Inc.",
+       [3]byte{76, 178, 28}:   "Maxphotonics Co.,Ltd",
+       [3]byte{76, 180, 74}:   "NANOWAVE Technologies Inc.",
+       [3]byte{76, 180, 234}:  "HRD (S) PTE., LTD.",
+       [3]byte{76, 183, 109}:  "Novi Security",
+       [3]byte{76, 184, 28}:   "SAM Electronics GmbH",
+       [3]byte{76, 184, 44}:   "Cambridge Mobile Telematics, Inc.",
+       [3]byte{76, 184, 181}:  "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{76, 185, 200}:  "CONET CO., LTD.",
+       [3]byte{76, 186, 163}:  "Bison Electronics Inc.",
+       [3]byte{76, 187, 88}:   "Chicony Electronics Co., Ltd.",
+       [3]byte{76, 188, 66}:   "Shenzhen Hangsheng Electronics Co.,Ltd.",
+       [3]byte{76, 188, 165}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{76, 189, 143}:  "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{76, 196, 82}:   "Shang Hai Tyd. Electon Technology Ltd.",
+       [3]byte{76, 198, 2}:    "Radios, Inc.",
+       [3]byte{76, 198, 129}:  "Shenzhen Aisat Electronic Co., Ltd.",
+       [3]byte{76, 201, 79}:   "Nokia",
+       [3]byte{76, 202, 83}:   "Skyera, Inc.",
+       [3]byte{76, 203, 245}:  "zte corporation",
+       [3]byte{76, 204, 52}:   "Motorola Solutions Inc.",
+       [3]byte{76, 204, 106}:  "Micro-Star INTL CO., LTD.",
+       [3]byte{76, 208, 138}:  "HUMAX Co., Ltd.",
+       [3]byte{76, 214, 55}:   "Qsono Electronics Co., Ltd",
+       [3]byte{76, 215, 182}:  "Helmer Scientific",
+       [3]byte{76, 217, 196}:  "Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd",
+       [3]byte{76, 223, 61}:   "TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD",
+       [3]byte{76, 225, 115}:  "IEEE Registration Authority",
+       [3]byte{76, 225, 187}:  "Zhuhai HiFocus Technology Co., Ltd.",
+       [3]byte{76, 226, 241}:  "sclak srl",
+       [3]byte{76, 230, 118}:  "BUFFALO.INC",
+       [3]byte{76, 233, 51}:   "RailComm, LLC",
+       [3]byte{76, 235, 66}:   "Intel Corporate",
+       [3]byte{76, 236, 239}:  "Soraa, Inc.",
+       [3]byte{76, 237, 222}:  "ASKEY COMPUTER CORP",
+       [3]byte{76, 238, 176}:  "SHC Netzwerktechnik GmbH",
+       [3]byte{76, 240, 46}:   "Vifa Denmark A/S",
+       [3]byte{76, 242, 191}:  "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{76, 244, 91}:   "Blue Clover Devices",
+       [3]byte{76, 245, 160}:  "Scalable Network Technologies Inc",
+       [3]byte{76, 247, 55}:   "SamJi Electronics Co., Ltd",
+       [3]byte{76, 249, 93}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{76, 250, 202}:  "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{76, 251, 69}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{76, 255, 18}:   "Fuze Entertainment Co., ltd",
+       [3]byte{80, 0, 140}:    "Hong Kong Telecommunications (HKT) Limited",
+       [3]byte{80, 1, 107}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{80, 1, 187}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 1, 217}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{80, 4, 184}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{80, 5, 61}:     "CyWee Group Ltd",
+       [3]byte{80, 6, 4}:      "Cisco Systems, Inc",
+       [3]byte{80, 6, 171}:    "Cisco Systems, Inc",
+       [3]byte{80, 9, 89}:     "Technicolor CH USA Inc.",
+       [3]byte{80, 11, 50}:    "Foxda Technology Industrial(ShenZhen)Co.,LTD",
+       [3]byte{80, 11, 145}:   "IEEE Registration Authority",
+       [3]byte{80, 14, 109}:   "TrafficCast International",
+       [3]byte{80, 15, 128}:   "Cisco Systems, Inc",
+       [3]byte{80, 15, 245}:   "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{80, 17, 235}:   "SilverNet Ltd",
+       [3]byte{80, 20, 181}:   "Richfit Information Technology Co., Ltd",
+       [3]byte{80, 23, 255}:   "Cisco Systems, Inc",
+       [3]byte{80, 24, 76}:    "Platina Systems Inc.",
+       [3]byte{80, 26, 165}:   "GN Netcom A/S",
+       [3]byte{80, 26, 197}:   "Microsoft",
+       [3]byte{80, 28, 191}:   "Cisco Systems, Inc",
+       [3]byte{80, 30, 45}:    "StreamUnlimited Engineering GmbH",
+       [3]byte{80, 32, 107}:   "Emerson Climate Technologies Transportation Solutions",
+       [3]byte{80, 34, 103}:   "PixeLINK",
+       [3]byte{80, 37, 43}:    "Nethra Imaging Incorporated",
+       [3]byte{80, 38, 144}:   "FUJITSU LIMITED",
+       [3]byte{80, 39, 199}:   "TECHNART Co.,Ltd",
+       [3]byte{80, 41, 77}:    "NANJING IOT SENSOR TECHNOLOGY CO,LTD",
+       [3]byte{80, 42, 126}:   "Smart electronic GmbH",
+       [3]byte{80, 42, 139}:   "Telekom Research and Development Sdn Bhd",
+       [3]byte{80, 43, 115}:   "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{80, 45, 29}:    "Nokia Corporation",
+       [3]byte{80, 45, 162}:   "Intel Corporate",
+       [3]byte{80, 45, 244}:   "Phytec Messtechnik GmbH",
+       [3]byte{80, 46, 92}:    "HTC Corporation",
+       [3]byte{80, 46, 206}:   "Asahi Electronics Co.,Ltd",
+       [3]byte{80, 49, 173}:   "ABB Global Industries and Services Private Limited",
+       [3]byte{80, 50, 55}:    "Apple, Inc.",
+       [3]byte{80, 50, 117}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 51, 139}:   "Texas Instruments",
+       [3]byte{80, 51, 240}:   "YICHEN (SHENZHEN) TECHNOLOGY CO.LTD",
+       [3]byte{80, 57, 85}:    "Cisco SPVTG",
+       [3]byte{80, 58, 125}:   "AlphaTech PLC Int’l Co., Ltd.",
+       [3]byte{80, 58, 160}:   "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{80, 60, 196}:   "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{80, 60, 234}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{80, 61, 161}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 61, 229}:   "Cisco Systems, Inc",
+       [3]byte{80, 62, 170}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{80, 63, 86}:    "Syncmold Enterprise Corp",
+       [3]byte{80, 63, 152}:   "CMITECH",
+       [3]byte{80, 64, 97}:    "Nokia",
+       [3]byte{80, 69, 247}:   "Liuhe Intelligence Technology Ltd.",
+       [3]byte{80, 70, 93}:    "ASUSTek COMPUTER INC.",
+       [3]byte{80, 72, 235}:   "BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.",
+       [3]byte{80, 74, 94}:    "Masimo Corporation",
+       [3]byte{80, 74, 110}:   "NETGEAR",
+       [3]byte{80, 75, 91}:    "CONTROLtronic GmbH",
+       [3]byte{80, 78, 220}:   "Ping Communication",
+       [3]byte{80, 79, 148}:   "Loxone Electronics GmbH",
+       [3]byte{80, 80, 42}:    "Egardia",
+       [3]byte{80, 80, 101}:   "TAKT Corporation",
+       [3]byte{80, 82, 210}:   "Hangzhou Telin Technologies Co., Limited",
+       [3]byte{80, 85, 39}:    "LG Electronics (Mobile Communications)",
+       [3]byte{80, 86, 99}:    "Texas Instruments",
+       [3]byte{80, 86, 168}:   "Jolla Ltd",
+       [3]byte{80, 86, 191}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 87, 168}:   "Cisco Systems, Inc",
+       [3]byte{80, 88, 0}:     "WyTec International, Inc.",
+       [3]byte{80, 88, 79}:    "waytotec,Inc.",
+       [3]byte{80, 90, 198}:   "GUANGDONG SUPER TELECOM CO.,LTD.",
+       [3]byte{80, 96, 40}:    "Xirrus Inc.",
+       [3]byte{80, 97, 132}:   "Avaya Inc",
+       [3]byte{80, 97, 214}:   "Indu-Sol GmbH",
+       [3]byte{80, 99, 19}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{80, 100, 43}:   "XIAOMI Electronics,CO.,LTD",
+       [3]byte{80, 100, 65}:   "Greenlee",
+       [3]byte{80, 101, 131}:  "Texas Instruments",
+       [3]byte{80, 101, 243}:  "Hewlett Packard",
+       [3]byte{80, 103, 135}:  "Planet Networks",
+       [3]byte{80, 103, 174}:  "Cisco Systems, Inc",
+       [3]byte{80, 103, 240}:  "Zyxel Communications Corporation",
+       [3]byte{80, 104, 10}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{80, 106, 3}:    "NETGEAR",
+       [3]byte{80, 107, 141}:  "Nutanix",
+       [3]byte{80, 110, 146}:  "Innocent Technology Co., Ltd.",
+       [3]byte{80, 111, 152}:  "Sehaj Synergy Technologies Private Limited",
+       [3]byte{80, 111, 154}:  "Wi-Fi Alliance",
+       [3]byte{80, 112, 229}:  "He Shan World Fair Electronics Technology Limited",
+       [3]byte{80, 114, 36}:   "Texas Instruments",
+       [3]byte{80, 114, 77}:   "BEG Brueck Electronic GmbH",
+       [3]byte{80, 118, 145}:  "Tekpea, Inc.",
+       [3]byte{80, 118, 166}:  "Ecil Informatica Ind. Com. Ltda",
+       [3]byte{80, 119, 5}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 121, 91}:   "Interexport Telecomunicaciones S.A.",
+       [3]byte{80, 122, 85}:   "Apple, Inc.",
+       [3]byte{80, 123, 157}:  "LCFC(HeFei) Electronics Technology co., ltd",
+       [3]byte{80, 125, 2}:    "BIODIT",
+       [3]byte{80, 126, 93}:   "Arcadyan Technology Corporation",
+       [3]byte{80, 130, 213}:  "Apple, Inc.",
+       [3]byte{80, 133, 105}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 135, 137}:  "Cisco Systems, Inc",
+       [3]byte{80, 135, 184}:  "Nuvyyo Inc",
+       [3]byte{80, 137, 101}:  "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{80, 138, 15}:   "SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.",
+       [3]byte{80, 138, 66}:   "Uptmate Technology Co., LTD",
+       [3]byte{80, 138, 203}:  "SHENZHEN MAXMADE TECHNOLOGY CO., LTD.",
+       [3]byte{80, 140, 119}:  "DIRMEIER Schanktechnik GmbH &Co KG",
+       [3]byte{80, 140, 177}:  "Texas Instruments",
+       [3]byte{80, 141, 111}:  "CHAHOO Limited",
+       [3]byte{80, 143, 76}:   "Xiaomi Communications Co Ltd",
+       [3]byte{80, 146, 185}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 147, 79}:   "Gradual Tecnologia Ltda.",
+       [3]byte{80, 151, 114}:  "Westinghouse Digital",
+       [3]byte{80, 152, 113}:  "Inventum Technologies Private Limited",
+       [3]byte{80, 152, 243}:  "Rheem Australia Pty Ltd",
+       [3]byte{80, 154, 76}:   "Dell Inc.",
+       [3]byte{80, 158, 167}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 159, 39}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{80, 159, 59}:   "OI ELECTRIC CO.,LTD",
+       [3]byte{80, 160, 84}:   "Actineon",
+       [3]byte{80, 160, 191}:  "Alba Fiber Systems Inc.",
+       [3]byte{80, 164, 200}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 164, 208}:  "IEEE Registration Authority",
+       [3]byte{80, 166, 227}:  "David Clark Company",
+       [3]byte{80, 167, 21}:   "Aboundi, Inc.",
+       [3]byte{80, 167, 43}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{80, 167, 51}:   "Ruckus Wireless",
+       [3]byte{80, 168, 58}:   "S Mobile Devices Limited",
+       [3]byte{80, 169, 222}:  "Smartcom - Bulgaria AD",
+       [3]byte{80, 171, 62}:   "Qibixx AG",
+       [3]byte{80, 171, 191}:  "Hoseo Telecom",
+       [3]byte{80, 173, 213}:  "Dynalec Corporation",
+       [3]byte{80, 175, 115}:  "Shenzhen Bitland Information Technology Co., Ltd.",
+       [3]byte{80, 179, 99}:   "Digitron da Amazonia S/A",
+       [3]byte{80, 182, 149}:  "Micropoint Biotechnologies,Inc.",
+       [3]byte{80, 183, 195}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 184, 136}:  "wi2be Tecnologia S/A",
+       [3]byte{80, 184, 162}:  "ImTech Technologies LLC,",
+       [3]byte{80, 189, 95}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{80, 192, 6}:    "Carmanah Signs",
+       [3]byte{80, 194, 113}:  "SECURETECH INC",
+       [3]byte{80, 197, 141}:  "Juniper Networks",
+       [3]byte{80, 199, 191}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{80, 200, 229}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 201, 113}:  "GN Netcom A/S",
+       [3]byte{80, 201, 160}:  "SKIPPER AS",
+       [3]byte{80, 204, 248}:  "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{80, 205, 34}:   "Avaya Inc",
+       [3]byte{80, 205, 50}:   "NanJing Chaoran Science & Technology Co.,Ltd.",
+       [3]byte{80, 206, 117}:  "Measy Electronics Co., Ltd.",
+       [3]byte{80, 210, 19}:   "CviLux Corporation",
+       [3]byte{80, 210, 116}:  "Steffes Corporation",
+       [3]byte{80, 211, 127}:  "Yu Fly Mikly Way Science and Technology Co., Ltd.",
+       [3]byte{80, 213, 156}:  "Thai Habel Industrial Co., Ltd.",
+       [3]byte{80, 214, 215}:  "Takahata Precision",
+       [3]byte{80, 215, 83}:   "CONELCOM GmbH",
+       [3]byte{80, 218, 0}:    "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{80, 221, 79}:   "Automation Components, Inc",
+       [3]byte{80, 223, 149}:  "Lytx",
+       [3]byte{80, 224, 199}:  "TurControlSystme AG",
+       [3]byte{80, 225, 74}:   "Private",
+       [3]byte{80, 229, 73}:   "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{80, 230, 102}:  "Shenzhen Techtion Electronics Co., Ltd.",
+       [3]byte{80, 233, 113}:  "Jibo, Inc.",
+       [3]byte{80, 234, 214}:  "Apple, Inc.",
+       [3]byte{80, 235, 26}:   "Brocade Communications Systems, Inc.",
+       [3]byte{80, 237, 120}:  "Changzhou Yongse Infotech Co.,Ltd",
+       [3]byte{80, 237, 148}:  "EGATEL SL",
+       [3]byte{80, 240, 3}:    "Open Stack, Inc.",
+       [3]byte{80, 240, 211}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 241, 74}:   "Texas Instruments",
+       [3]byte{80, 244, 60}:   "Leeo Inc",
+       [3]byte{80, 245, 32}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 245, 218}:  "Amazon Technologies Inc.",
+       [3]byte{80, 246, 26}:   "Kunshan JADE Technologies co., Ltd.",
+       [3]byte{80, 247, 34}:   "Cisco Systems, Inc",
+       [3]byte{80, 250, 132}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{80, 250, 171}:  "L-tek d.o.o.",
+       [3]byte{80, 252, 48}:   "Treehouse Labs",
+       [3]byte{80, 252, 159}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{80, 254, 242}:  "Sify Technologies Ltd",
+       [3]byte{80, 255, 32}:   "Keenetic Limited",
+       [3]byte{80, 255, 153}:  "IEEE Registration Authority",
+       [3]byte{84, 2, 55}:     "Teltronic AG",
+       [3]byte{84, 3, 132}:    "Hangkong Nano IC Technologies Co., Ltd",
+       [3]byte{84, 3, 245}:    "EBN Technology Corp.",
+       [3]byte{84, 4, 150}:    "Gigawave LTD",
+       [3]byte{84, 4, 166}:    "ASUSTek COMPUTER INC.",
+       [3]byte{84, 5, 54}:     "Vivago Oy",
+       [3]byte{84, 5, 95}:     "Alcatel Lucent",
+       [3]byte{84, 5, 147}:    "WOORI ELEC Co.,Ltd",
+       [3]byte{84, 9, 85}:     "zte corporation",
+       [3]byte{84, 9, 141}:    "deister electronic GmbH",
+       [3]byte{84, 16, 236}:   "Microchip Technology Inc.",
+       [3]byte{84, 17, 47}:    "Sulzer Pump Solutions Finland Oy",
+       [3]byte{84, 17, 95}:    "Atamo Pty Ltd",
+       [3]byte{84, 19, 121}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{84, 20, 115}:   "Wingtech Group (HongKong)Limited",
+       [3]byte{84, 20, 253}:   "Orbbec 3D Technology International",
+       [3]byte{84, 25, 200}:   "vivo Mobile Communication Co., Ltd.",
+       [3]byte{84, 27, 93}:    "Techno-Innov",
+       [3]byte{84, 29, 251}:   "Freestyle Energy Ltd",
+       [3]byte{84, 30, 86}:    "Juniper Networks",
+       [3]byte{84, 31, 213}:   "Advantage Electronics",
+       [3]byte{84, 32, 24}:    "Tely Labs",
+       [3]byte{84, 33, 96}:    "Resolution Products",
+       [3]byte{84, 34, 248}:   "zte corporation",
+       [3]byte{84, 37, 234}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{84, 38, 150}:   "Apple, Inc.",
+       [3]byte{84, 39, 30}:    "AzureWave Technology Inc.",
+       [3]byte{84, 39, 88}:    "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+       [3]byte{84, 39, 108}:   "Jiangsu Houge Technology Corp.",
+       [3]byte{84, 42, 156}:   "LSY Defense, LLC.",
+       [3]byte{84, 42, 162}:   "Alpha Networks Inc.",
+       [3]byte{84, 43, 87}:    "Night Owl SP",
+       [3]byte{84, 44, 234}:   "PROTECTRON",
+       [3]byte{84, 47, 137}:   "Euclid Laboratories, Inc.",
+       [3]byte{84, 47, 138}:   "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO",
+       [3]byte{84, 49, 49}:    "Raster Vision Ltd",
+       [3]byte{84, 51, 203}:   "Apple, Inc.",
+       [3]byte{84, 53, 48}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{84, 53, 223}:   "Symeo GmbH",
+       [3]byte{84, 54, 155}:   "1Verge Internet Technology (Beijing) Co., Ltd.",
+       [3]byte{84, 57, 104}:   "Edgewater Networks Inc",
+       [3]byte{84, 57, 223}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{84, 59, 48}:    "duagon AG",
+       [3]byte{84, 61, 55}:    "Ruckus Wireless",
+       [3]byte{84, 64, 173}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{84, 66, 73}:    "Sony Corporation",
+       [3]byte{84, 68, 8}:     "Nokia Corporation",
+       [3]byte{84, 70, 107}:   "Shenzhen CZTIC Electronic Technology Co., Ltd",
+       [3]byte{84, 72, 156}:   "CDOUBLES ELECTRONICS CO. LTD.",
+       [3]byte{84, 74, 0}:     "Cisco Systems, Inc",
+       [3]byte{84, 74, 5}:     "wenglor sensoric gmbh",
+       [3]byte{84, 74, 22}:    "Texas Instruments",
+       [3]byte{84, 75, 140}:   "Juniper Networks",
+       [3]byte{84, 78, 69}:    "Private",
+       [3]byte{84, 78, 144}:   "Apple, Inc.",
+       [3]byte{84, 81, 27}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{84, 81, 70}:    "AMG Systems Ltd.",
+       [3]byte{84, 83, 237}:   "Sony Corporation",
+       [3]byte{84, 84, 20}:    "Digital RF Corea, Inc",
+       [3]byte{84, 84, 207}:   "PROBEDIGITAL CO.,LTD",
+       [3]byte{84, 90, 166}:   "Espressif Inc.",
+       [3]byte{84, 94, 189}:   "NL Technologies",
+       [3]byte{84, 95, 169}:   "Teracom Limited",
+       [3]byte{84, 96, 9}:     "Google, Inc.",
+       [3]byte{84, 97, 114}:   "ZODIAC AEROSPACE SAS",
+       [3]byte{84, 97, 234}:   "Zaplox AB",
+       [3]byte{84, 100, 217}:  "Sagemcom Broadband SAS",
+       [3]byte{84, 101, 222}:  "ARRIS Group, Inc.",
+       [3]byte{84, 102, 108}:  "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{84, 103, 81}:   "Compal Broadband Networks, Inc.",
+       [3]byte{84, 108, 14}:   "Texas Instruments",
+       [3]byte{84, 109, 82}:   "TOPVIEW OPTRONICS CORP.",
+       [3]byte{84, 114, 79}:   "Apple, Inc.",
+       [3]byte{84, 115, 152}:  "Toyo Electronics Corporation",
+       [3]byte{84, 116, 230}:  "Webtech Wireless",
+       [3]byte{84, 117, 149}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{84, 117, 208}:  "Cisco Systems, Inc",
+       [3]byte{84, 120, 26}:   "Cisco Systems, Inc",
+       [3]byte{84, 121, 117}:  "Nokia Corporation",
+       [3]byte{84, 122, 82}:   "CTE International srl",
+       [3]byte{84, 124, 105}:  "Cisco Systems, Inc",
+       [3]byte{84, 125, 205}:  "Texas Instruments",
+       [3]byte{84, 127, 84}:   "INGENICO",
+       [3]byte{84, 127, 168}:  "TELCO systems, s.r.o.",
+       [3]byte{84, 127, 238}:  "Cisco Systems, Inc",
+       [3]byte{84, 129, 173}:  "Eagle Research Corporation",
+       [3]byte{84, 132, 123}:  "Digital Devices GmbH",
+       [3]byte{84, 136, 14}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{84, 137, 34}:   "Zelfy Inc",
+       [3]byte{84, 137, 152}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{84, 140, 160}:  "Liteon Technology Corporation",
+       [3]byte{84, 146, 190}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{84, 147, 89}:   "SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.",
+       [3]byte{84, 148, 120}:  "Silvershore Technology Partners",
+       [3]byte{84, 154, 17}:   "IEEE Registration Authority",
+       [3]byte{84, 154, 22}:   "Uzushio Electric Co.,Ltd.",
+       [3]byte{84, 154, 76}:   "GUANGDONG HOMECARE TECHNOLOGY CO.,LTD.",
+       [3]byte{84, 155, 18}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{84, 157, 133}:  "EnerAccess inc",
+       [3]byte{84, 159, 19}:   "Apple, Inc.",
+       [3]byte{84, 159, 53}:   "Dell Inc.",
+       [3]byte{84, 160, 79}:   "t-mac Technologies Ltd",
+       [3]byte{84, 160, 80}:   "ASUSTek COMPUTER INC.",
+       [3]byte{84, 162, 116}:  "Cisco Systems, Inc",
+       [3]byte{84, 163, 27}:   "Shenzhen Linkworld Technology Co,.LTD",
+       [3]byte{84, 163, 250}:  "BQT Solutions (Australia)Pty Ltd",
+       [3]byte{84, 165, 27}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{84, 165, 75}:   "NSC Communications Siberia Ltd",
+       [3]byte{84, 166, 25}:   "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{84, 169, 212}:  "Minibar Systems",
+       [3]byte{84, 171, 58}:   "QUANTA COMPUTER INC.",
+       [3]byte{84, 174, 39}:   "Apple, Inc.",
+       [3]byte{84, 177, 33}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{84, 181, 108}:  "Xi'an NovaStar Tech Co., Ltd",
+       [3]byte{84, 182, 32}:   "SUHDOL E&C Co.Ltd.",
+       [3]byte{84, 183, 83}:   "Hunan Fenghui Yinjia Science And Technology Co.,Ltd",
+       [3]byte{84, 184, 10}:   "D-Link International",
+       [3]byte{84, 189, 121}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{84, 190, 83}:   "zte corporation",
+       [3]byte{84, 190, 247}:  "PEGATRON CORPORATION",
+       [3]byte{84, 196, 21}:   "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{84, 197, 122}:  "Sunnovo International Limited",
+       [3]byte{84, 200, 15}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{84, 201, 223}:  "FN-LINK TECHNOLOGY LIMITED",
+       [3]byte{84, 205, 16}:   "Panasonic Mobile Communications Co.,Ltd.",
+       [3]byte{84, 205, 167}:  "Fujian Shenzhou Electronic Co.,Ltd",
+       [3]byte{84, 205, 238}:  "ShenZhen Apexis Electronic Co.,Ltd",
+       [3]byte{84, 208, 180}:  "Xiamen Four-Faith Communication Technology Co.,Ltd",
+       [3]byte{84, 208, 237}:  "AXIM Communications",
+       [3]byte{84, 209, 99}:   "MAX-TECH,INC",
+       [3]byte{84, 209, 176}:  "Universal Laser Systems, Inc",
+       [3]byte{84, 210, 114}:  "Nuki Home Solutions GmbH",
+       [3]byte{84, 212, 111}:  "Cisco SPVTG",
+       [3]byte{84, 215, 81}:   "Proximus",
+       [3]byte{84, 217, 228}:  "BRILLIANTTS CO., LTD",
+       [3]byte{84, 220, 29}:   "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+       [3]byte{84, 223, 0}:    "Ulterius Technologies, LLC",
+       [3]byte{84, 223, 36}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{84, 223, 99}:   "Intrakey technologies GmbH",
+       [3]byte{84, 224, 50}:   "Juniper Networks",
+       [3]byte{84, 224, 97}:   "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{84, 225, 64}:   "INGENICO",
+       [3]byte{84, 225, 173}:  "LCFC(HeFei) Electronics Technology co., ltd",
+       [3]byte{84, 226, 200}:  "Dongguan Aoyuan Electronics Technology Co., Ltd",
+       [3]byte{84, 226, 224}:  "ARRIS Group, Inc.",
+       [3]byte{84, 227, 176}:  "JVL Industri Elektronik",
+       [3]byte{84, 227, 246}:  "Alcatel-Lucent",
+       [3]byte{84, 228, 58}:   "Apple, Inc.",
+       [3]byte{84, 228, 189}:  "FN-LINK TECHNOLOGY LIMITED",
+       [3]byte{84, 230, 63}:   "ShenZhen LingKeWeiEr Technology Co., Ltd.",
+       [3]byte{84, 230, 252}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{84, 234, 168}:  "Apple, Inc.",
+       [3]byte{84, 237, 163}:  "Navdy, Inc.",
+       [3]byte{84, 238, 117}:  "Wistron InfoComm(Kunshan)Co.,Ltd.",
+       [3]byte{84, 239, 146}:  "Shenzhen Elink Technology Co., LTD",
+       [3]byte{84, 239, 254}:  "Fullpower Technologies, Inc.",
+       [3]byte{84, 242, 1}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{84, 245, 182}:  "ORIENTAL PACIFIC INTERNATIONAL LIMITED",
+       [3]byte{84, 246, 102}:  "Berthold Technologies GmbH and Co.KG",
+       [3]byte{84, 246, 197}:  "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+       [3]byte{84, 248, 118}:  "ABB AG",
+       [3]byte{84, 250, 62}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{84, 250, 150}:  "Nokia",
+       [3]byte{84, 251, 88}:   "WISEWARE, Lda",
+       [3]byte{84, 253, 191}:  "Scheidt & Bachmann GmbH",
+       [3]byte{84, 255, 130}:  "Davit Solution co.",
+       [3]byte{84, 255, 207}:  "Mopria Alliance",
+       [3]byte{88, 0, 187}:    "Juniper Networks",
+       [3]byte{88, 0, 227}:    "Liteon Technology Corporation",
+       [3]byte{88, 4, 84}:     "ICOMM HK LIMITED",
+       [3]byte{88, 4, 203}:    "Tianjin Huisun Technology Co.,Ltd.",
+       [3]byte{88, 5, 40}:     "LABRIS NETWORKS",
+       [3]byte{88, 5, 86}:     "Elettronica GF S.r.L.",
+       [3]byte{88, 8, 250}:    "Fiber Optic & telecommunication INC.",
+       [3]byte{88, 9, 67}:     "Private",
+       [3]byte{88, 9, 229}:    "Kivic Inc.",
+       [3]byte{88, 10, 32}:    "Cisco Systems, Inc",
+       [3]byte{88, 16, 140}:   "Intelbras",
+       [3]byte{88, 18, 67}:    "AcSiP Technology Corp.",
+       [3]byte{88, 22, 38}:    "Avaya Inc",
+       [3]byte{88, 23, 12}:    "Sony Mobile Communications AB",
+       [3]byte{88, 25, 248}:   "ARRIS Group, Inc.",
+       [3]byte{88, 28, 189}:   "Affinegy",
+       [3]byte{88, 29, 145}:   "Advanced Mobile Telecom co.,ltd.",
+       [3]byte{88, 31, 40}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{88, 31, 103}:   "Open-m technology limited",
+       [3]byte{88, 31, 170}:   "Apple, Inc.",
+       [3]byte{88, 31, 239}:   "Tuttnaer LTD",
+       [3]byte{88, 32, 177}:   "Hewlett Packard",
+       [3]byte{88, 33, 54}:    "KMB systems, s.r.o.",
+       [3]byte{88, 35, 140}:   "Technicolor CH USA Inc.",
+       [3]byte{88, 42, 247}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{88, 43, 219}:   "Pax AB",
+       [3]byte{88, 46, 254}:   "Lighting Science Group",
+       [3]byte{88, 47, 66}:    "Universal Electric Corporation",
+       [3]byte{88, 49, 18}:    "DRUST",
+       [3]byte{88, 50, 119}:   "Reliance Communications LLC",
+       [3]byte{88, 52, 59}:    "Glovast Technology Ltd.",
+       [3]byte{88, 53, 217}:   "Cisco Systems, Inc",
+       [3]byte{88, 56, 121}:   "RICOH COMPANY, LTD.",
+       [3]byte{88, 60, 198}:   "Omneality Ltd.",
+       [3]byte{88, 63, 84}:    "LG Electronics (Mobile Communications)",
+       [3]byte{88, 64, 78}:    "Apple, Inc.",
+       [3]byte{88, 66, 228}:   "Baxter International Inc",
+       [3]byte{88, 68, 152}:   "Xiaomi Communications Co Ltd",
+       [3]byte{88, 70, 143}:   "Koncar Electronics and Informatics",
+       [3]byte{88, 70, 225}:   "Baxter International Inc",
+       [3]byte{88, 71, 4}:     "Shenzhen Webridge Technology Co.,Ltd",
+       [3]byte{88, 72, 34}:    "Sony Mobile Communications AB",
+       [3]byte{88, 72, 192}:   "COFLEC",
+       [3]byte{88, 73, 37}:    "E3 Enterprise",
+       [3]byte{88, 73, 59}:    "Palo Alto Networks",
+       [3]byte{88, 73, 186}:   "Chitai Electronic Corp.",
+       [3]byte{88, 76, 25}:    "Chongqing Guohong Technology Development Company Limited",
+       [3]byte{88, 76, 238}:   "Digital One Technologies, Limited",
+       [3]byte{88, 80, 118}:   "Linear Equipamentos Eletronicos SA",
+       [3]byte{88, 80, 171}:   "TLS Corporation",
+       [3]byte{88, 80, 230}:   "Best Buy Corporation",
+       [3]byte{88, 82, 138}:   "Mitsubishi Electric Corporation",
+       [3]byte{88, 83, 192}:   "Beijing Guang Runtong Technology Development Company co.,Ltd",
+       [3]byte{88, 85, 202}:   "Apple, Inc.",
+       [3]byte{88, 86, 232}:   "ARRIS Group, Inc.",
+       [3]byte{88, 87, 13}:    "Danfoss Solar Inverters",
+       [3]byte{88, 96, 95}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{88, 97, 99}:    "Quantum Networks (SG) Pte. Ltd.",
+       [3]byte{88, 99, 86}:    "FN-LINK TECHNOLOGY LIMITED",
+       [3]byte{88, 99, 154}:   "TPL SYSTEMES",
+       [3]byte{88, 101, 230}:  "INFOMARK CO., LTD.",
+       [3]byte{88, 102, 186}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{88, 103, 26}:   "Barnes&Noble",
+       [3]byte{88, 103, 127}:  "Clare Controls Inc.",
+       [3]byte{88, 104, 93}:   "Tempo Australia Pty Ltd",
+       [3]byte{88, 105, 108}:  "Ruijie Networks Co.,LTD",
+       [3]byte{88, 105, 249}:  "Fusion Transactive Ltd.",
+       [3]byte{88, 106, 177}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{88, 109, 143}:  "Cisco-Linksys, LLC",
+       [3]byte{88, 110, 214}:  "Private",
+       [3]byte{88, 112, 198}:  "Shanghai Xiaoyi Technology Co., Ltd.",
+       [3]byte{88, 117, 33}:   "CJSC RTSoft",
+       [3]byte{88, 118, 117}:  "Beijing ECHO Technologies Co.,Ltd",
+       [3]byte{88, 118, 197}:  "DIGI I'S LTD",
+       [3]byte{88, 122, 77}:   "Stonesoft Corporation",
+       [3]byte{88, 122, 98}:   "Texas Instruments",
+       [3]byte{88, 123, 233}:  "AirPro Technology India Pvt. Ltd",
+       [3]byte{88, 126, 97}:   "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{88, 127, 87}:   "Apple, Inc.",
+       [3]byte{88, 127, 102}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{88, 127, 183}:  "SONAR INDUSTRIAL CO., LTD.",
+       [3]byte{88, 127, 200}:  "S2M",
+       [3]byte{88, 130, 29}:   "H. Schomäcker GmbH",
+       [3]byte{88, 130, 168}:  "Microsoft",
+       [3]byte{88, 132, 228}:  "IP500 Alliance e.V.",
+       [3]byte{88, 133, 110}:  "QSC AG",
+       [3]byte{88, 135, 76}:   "LITE-ON CLEAN ENERGY TECHNOLOGY CORP.",
+       [3]byte{88, 135, 226}:  "Shenzhen Coship Electronics Co., Ltd.",
+       [3]byte{88, 138, 90}:   "Dell Inc.",
+       [3]byte{88, 139, 243}:  "Zyxel Communications Corporation",
+       [3]byte{88, 141, 9}:    "Cisco Systems, Inc",
+       [3]byte{88, 141, 100}:  "Xi'an Clevbee Technology Co.,Ltd",
+       [3]byte{88, 144, 67}:   "Sagemcom Broadband SAS",
+       [3]byte{88, 145, 207}:  "Intel Corporate",
+       [3]byte{88, 146, 13}:   "Kinetic Avionics Limited",
+       [3]byte{88, 147, 150}:  "Ruckus Wireless",
+       [3]byte{88, 148, 107}:  "Intel Corporate",
+       [3]byte{88, 148, 207}:  "Vertex Standard LMR, Inc.",
+       [3]byte{88, 151, 30}:   "Cisco Systems, Inc",
+       [3]byte{88, 151, 189}:  "Cisco Systems, Inc",
+       [3]byte{88, 152, 53}:   "Technicolor",
+       [3]byte{88, 152, 111}:  "Revolution Display",
+       [3]byte{88, 155, 11}:   "Shineway Technologies, Inc.",
+       [3]byte{88, 156, 252}:  "FreeBSD Foundation",
+       [3]byte{88, 160, 203}:  "TrackNet, Inc",
+       [3]byte{88, 162, 181}:  "LG Electronics (Mobile Communications)",
+       [3]byte{88, 167, 111}:  "iD corporation",
+       [3]byte{88, 168, 57}:   "Intel Corporate",
+       [3]byte{88, 172, 120}:  "Cisco Systems, Inc",
+       [3]byte{88, 176, 53}:   "Apple, Inc.",
+       [3]byte{88, 176, 212}:  "ZuniData Systems Inc.",
+       [3]byte{88, 180, 45}:   "YSTen Technology Co.,Ltd",
+       [3]byte{88, 182, 51}:   "Ruckus Wireless",
+       [3]byte{88, 185, 97}:   "SOLEM Electronique",
+       [3]byte{88, 185, 225}:  "Crystalfontz America, Inc.",
+       [3]byte{88, 188, 39}:   "Cisco Systems, Inc",
+       [3]byte{88, 188, 143}:  "Cognitive Systems Corp.",
+       [3]byte{88, 189, 163}:  "Nintendo Co., Ltd.",
+       [3]byte{88, 189, 249}:  "Sigrand",
+       [3]byte{88, 191, 234}:  "Cisco Systems, Inc",
+       [3]byte{88, 193, 122}:  "Cambium Networks Limited",
+       [3]byte{88, 194, 50}:   "NEC Corporation",
+       [3]byte{88, 195, 139}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{88, 197, 131}:  "ITEL MOBILE LIMITED",
+       [3]byte{88, 197, 203}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{88, 201, 53}:   "Chiun Mai Communication Systems, Inc",
+       [3]byte{88, 207, 75}:   "Lufkin Industries",
+       [3]byte{88, 208, 113}:  "BW Broadcast",
+       [3]byte{88, 208, 143}:  "IEEE 1904.1 Working Group",
+       [3]byte{88, 214, 122}:  "TCPlink",
+       [3]byte{88, 214, 211}:  "Dairy Cheq Inc",
+       [3]byte{88, 217, 213}:  "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{88, 219, 141}:  "Fast Co., Ltd.",
+       [3]byte{88, 220, 109}:  "Exceptional Innovation, Inc.",
+       [3]byte{88, 224, 44}:   "Micro Technic A/S",
+       [3]byte{88, 225, 108}:  "Ying Hua Information Technology (Shanghai)Co., LTD",
+       [3]byte{88, 226, 143}:  "Apple, Inc.",
+       [3]byte{88, 227, 38}:   "Compass Technologies Inc.",
+       [3]byte{88, 228, 118}:  "CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD",
+       [3]byte{88, 230, 54}:   "EVRsafe Technologies",
+       [3]byte{88, 231, 71}:   "Deltanet AG",
+       [3]byte{88, 232, 8}:    "AUTONICS CORPORATION",
+       [3]byte{88, 232, 118}:  "IEEE Registration Authority",
+       [3]byte{88, 235, 20}:   "Proteus Digital Health",
+       [3]byte{88, 236, 225}:  "Newport Corporation",
+       [3]byte{88, 238, 206}:  "Icon Time Systems",
+       [3]byte{88, 239, 104}:  "Belkin International Inc.",
+       [3]byte{88, 241, 2}:    "BLU Products Inc.",
+       [3]byte{88, 243, 135}:  "HCCP",
+       [3]byte{88, 243, 156}:  "Cisco Systems, Inc",
+       [3]byte{88, 244, 150}:  "Source Chain",
+       [3]byte{88, 246, 123}:  "Xia Men UnionCore Technology LTD.",
+       [3]byte{88, 246, 191}:  "Kyoto University",
+       [3]byte{88, 249, 142}:  "SECUDOS GmbH",
+       [3]byte{88, 251, 132}:  "Intel Corporate",
+       [3]byte{88, 252, 115}:  "Arria Live Media, Inc.",
+       [3]byte{88, 252, 219}:  "IEEE Registration Authority",
+       [3]byte{88, 253, 32}:   "Bravida Sakerhet AB",
+       [3]byte{92, 2, 106}:    "Applied Vision Corporation",
+       [3]byte{92, 3, 57}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 7, 111}:    "Thought Creator",
+       [3]byte{92, 9, 121}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 10, 91}:    "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{92, 12, 14}:    "Guizhou Huaxintong Semiconductor Technology Co Ltd",
+       [3]byte{92, 12, 187}:   "CELIZION Inc.",
+       [3]byte{92, 14, 139}:   "Extreme Networks, Inc.",
+       [3]byte{92, 17, 147}:   "Seal One AG",
+       [3]byte{92, 20, 55}:    "Thyssenkrupp Aufzugswerke GmbH",
+       [3]byte{92, 21, 21}:    "ADVAN",
+       [3]byte{92, 21, 225}:   "AIDC TECHNOLOGY (S) PTE LTD",
+       [3]byte{92, 22, 199}:   "Big Switch Networks",
+       [3]byte{92, 23, 55}:    "I-View Now, LLC.",
+       [3]byte{92, 23, 211}:   "LGE",
+       [3]byte{92, 24, 181}:   "Talon Communications",
+       [3]byte{92, 26, 111}:   "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{92, 32, 208}:   "Asoni Communication Co., Ltd.",
+       [3]byte{92, 34, 196}:   "DAE EUN ELETRONICS CO., LTD",
+       [3]byte{92, 36, 67}:    "O-Sung Telecom Co., Ltd.",
+       [3]byte{92, 36, 121}:   "Baltech AG",
+       [3]byte{92, 37, 76}:    "Avire Global Pte Ltd",
+       [3]byte{92, 38, 10}:    "Dell Inc.",
+       [3]byte{92, 42, 239}:   "Open Access Pty Ltd",
+       [3]byte{92, 43, 245}:   "Vivint Wireless Inc.",
+       [3]byte{92, 46, 89}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{92, 46, 210}:   "ABC(XiSheng) Electronics Co.,Ltd",
+       [3]byte{92, 49, 62}:    "Texas Instruments",
+       [3]byte{92, 51, 39}:    "Spazio Italia srl",
+       [3]byte{92, 51, 92}:    "Swissphone Telecom AG",
+       [3]byte{92, 51, 142}:   "Alpha Networks Inc.",
+       [3]byte{92, 53, 59}:    "Compal Broadband Networks, Inc.",
+       [3]byte{92, 53, 218}:   "There Corporation Oy",
+       [3]byte{92, 54, 184}:   "TCL King Electrical Appliances (Huizhou) Co., Ltd",
+       [3]byte{92, 56, 224}:   "Shanghai Super Electronics Technology Co.,LTD",
+       [3]byte{92, 59, 53}:    "Gehirn Inc.",
+       [3]byte{92, 60, 39}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{92, 64, 88}:    "Jefferson Audio Video Systems, Inc.",
+       [3]byte{92, 65, 231}:   "Wiatec International Ltd.",
+       [3]byte{92, 67, 210}:   "HAZEMEYER",
+       [3]byte{92, 69, 39}:    "Juniper Networks",
+       [3]byte{92, 73, 121}:   "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+       [3]byte{92, 73, 125}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{92, 74, 31}:    "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{92, 74, 38}:    "Enguity Technology Corp",
+       [3]byte{92, 76, 169}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 80, 21}:    "Cisco Systems, Inc",
+       [3]byte{92, 81, 79}:    "Intel Corporate",
+       [3]byte{92, 81, 129}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{92, 81, 136}:   "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{92, 82, 30}:    "Nintendo Co.,Ltd",
+       [3]byte{92, 84, 109}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 86, 237}:   "3pleplay Electronics Private Limited",
+       [3]byte{92, 87, 26}:    "ARRIS Group, Inc.",
+       [3]byte{92, 87, 200}:   "Nokia Corporation",
+       [3]byte{92, 88, 25}:    "Jingsheng Technology Co., Ltd.",
+       [3]byte{92, 89, 72}:    "Apple, Inc.",
+       [3]byte{92, 91, 53}:    "Mist Systems, Inc.",
+       [3]byte{92, 91, 194}:   "YIK Corporation",
+       [3]byte{92, 94, 171}:   "Juniper Networks",
+       [3]byte{92, 95, 103}:   "Intel Corporate",
+       [3]byte{92, 99, 191}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{92, 103, 118}:  "IDS Imaging Development Systems GmbH",
+       [3]byte{92, 105, 132}:  "NUVICO",
+       [3]byte{92, 106, 125}:  "KENTKART EGE ELEKTRONIK SAN. VE TIC. LTD. STI.",
+       [3]byte{92, 106, 128}:  "Zyxel Communications Corporation",
+       [3]byte{92, 107, 50}:   "Texas Instruments",
+       [3]byte{92, 107, 79}:   "Hello Inc.",
+       [3]byte{92, 109, 32}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{92, 111, 79}:   "S.A. SISTEL",
+       [3]byte{92, 112, 163}:  "LG Electronics (Mobile Communications)",
+       [3]byte{92, 119, 87}:   "Haivision Network Video",
+       [3]byte{92, 119, 118}:  "TCT mobile ltd",
+       [3]byte{92, 125, 94}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 129, 167}:  "Network Devices Pty Ltd",
+       [3]byte{92, 131, 143}:  "Cisco Systems, Inc",
+       [3]byte{92, 132, 134}:  "Brightsource Industries Israel LTD",
+       [3]byte{92, 134, 19}:   "Beijing Zhoenet Technology Co., Ltd",
+       [3]byte{92, 134, 74}:   "Secret Labs LLC",
+       [3]byte{92, 134, 92}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{92, 134, 193}:  "DONGGUAN SOLUM ELECTRONICS CO.,LTD",
+       [3]byte{92, 135, 120}:  "Cybertelbridge co.,ltd",
+       [3]byte{92, 137, 154}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{92, 137, 212}:  "Beijing Banner Electric Co.,Ltd",
+       [3]byte{92, 138, 56}:   "Hewlett Packard",
+       [3]byte{92, 141, 45}:   "Shanghai Wellpay Information Technology Co., Ltd",
+       [3]byte{92, 141, 78}:   "Apple, Inc.",
+       [3]byte{92, 143, 224}:  "ARRIS Group, Inc.",
+       [3]byte{92, 147, 162}:  "Liteon Technology Corporation",
+       [3]byte{92, 149, 174}:  "Apple, Inc.",
+       [3]byte{92, 150, 86}:   "AzureWave Technology Inc.",
+       [3]byte{92, 150, 106}:  "RTNET",
+       [3]byte{92, 150, 157}:  "Apple, Inc.",
+       [3]byte{92, 151, 243}:  "Apple, Inc.",
+       [3]byte{92, 153, 96}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{92, 154, 216}:  "FUJITSU LIMITED",
+       [3]byte{92, 161, 118}:  "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{92, 161, 120}:  "TableTop Media (dba Ziosk)",
+       [3]byte{92, 163, 157}:  "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{92, 163, 235}:  "Lokel s.r.o.",
+       [3]byte{92, 164, 138}:  "Cisco Systems, Inc",
+       [3]byte{92, 168, 106}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 169, 51}:   "Luma Home",
+       [3]byte{92, 170, 253}:  "Sonos, Inc.",
+       [3]byte{92, 172, 76}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{92, 173, 118}:  "Shenzhen TCL New Technology Co., Ltd",
+       [3]byte{92, 173, 207}:  "Apple, Inc.",
+       [3]byte{92, 175, 6}:    "LG Electronics (Mobile Communications)",
+       [3]byte{92, 176, 102}:  "ARRIS Group, Inc.",
+       [3]byte{92, 179, 149}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 180, 62}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 181, 36}:   "Sony Mobile Communications AB",
+       [3]byte{92, 181, 89}:   "CNEX Labs",
+       [3]byte{92, 182, 204}:  "NovaComm Technologies Inc.",
+       [3]byte{92, 184, 203}:  "Allis Communications",
+       [3]byte{92, 185, 1}:    "Hewlett Packard",
+       [3]byte{92, 186, 55}:   "Microsoft Corporation",
+       [3]byte{92, 189, 158}:  "HONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED",
+       [3]byte{92, 194, 19}:   "Fr. Sauter AG",
+       [3]byte{92, 195, 7}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 197, 212}:  "Intel Corporate",
+       [3]byte{92, 198, 208}:  "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+       [3]byte{92, 198, 233}:  "Edifier International",
+       [3]byte{92, 199, 215}:  "AZROAD TECHNOLOGY COMPANY LIMITED",
+       [3]byte{92, 201, 211}:  "PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA",
+       [3]byte{92, 202, 26}:   "Microsoft Mobile Oy",
+       [3]byte{92, 202, 50}:   "Theben AG",
+       [3]byte{92, 204, 160}:  "Gridwiz Inc.",
+       [3]byte{92, 204, 255}:  "Techroutes Network Pvt Ltd",
+       [3]byte{92, 206, 173}:  "CDYNE Corporation",
+       [3]byte{92, 207, 127}:  "Espressif Inc.",
+       [3]byte{92, 209, 53}:   "Xtreme Power Systems",
+       [3]byte{92, 210, 228}:  "Intel Corporate",
+       [3]byte{92, 212, 27}:   "UCZOON Technology Co., LTD",
+       [3]byte{92, 212, 171}:  "Zektor",
+       [3]byte{92, 214, 31}:   "Qardio, Inc",
+       [3]byte{92, 217, 152}:  "D-Link Corporation",
+       [3]byte{92, 218, 212}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{92, 220, 150}:  "Arcadyan Technology Corporation",
+       [3]byte{92, 221, 112}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{92, 224, 197}:  "Intel Corporate",
+       [3]byte{92, 224, 202}:  "FeiTian United (Beijing) System Technology Co., Ltd.",
+       [3]byte{92, 224, 246}:  "NIC.br- Nucleo de Informacao e Coordenacao do Ponto BR",
+       [3]byte{92, 226, 35}:   "Delphin Technology AG",
+       [3]byte{92, 226, 134}:  "Nortel Networks",
+       [3]byte{92, 226, 140}:  "Zyxel Communications Corporation",
+       [3]byte{92, 226, 244}:  "AcSiP Technology Corp.",
+       [3]byte{92, 227, 14}:   "ARRIS Group, Inc.",
+       [3]byte{92, 227, 182}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{92, 231, 191}:  "New Singularity International Technical Development Co.,Ltd",
+       [3]byte{92, 232, 183}:  "Oraimo Technology Limited",
+       [3]byte{92, 232, 235}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{92, 234, 29}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{92, 235, 78}:   "R. STAHL HMI Systems GmbH",
+       [3]byte{92, 235, 104}:  "Cheerstar Technology Co., Ltd",
+       [3]byte{92, 238, 121}:  "Global Digitech Co LTD",
+       [3]byte{92, 242, 7}:    "Speco Technologies",
+       [3]byte{92, 242, 134}:  "IEEE Registration Authority",
+       [3]byte{92, 243, 112}:  "CC&C Technologies, Inc",
+       [3]byte{92, 243, 252}:  "IBM Corp",
+       [3]byte{92, 244, 171}:  "Zyxel Communications Corporation",
+       [3]byte{92, 245, 13}:   "Institute of microelectronic applications",
+       [3]byte{92, 245, 218}:  "Apple, Inc.",
+       [3]byte{92, 246, 220}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{92, 247, 195}:  "SYNTECH (HK) TECHNOLOGY LIMITED",
+       [3]byte{92, 247, 230}:  "Apple, Inc.",
+       [3]byte{92, 248, 33}:   "Texas Instruments",
+       [3]byte{92, 248, 161}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{92, 249, 56}:   "Apple, Inc.",
+       [3]byte{92, 249, 106}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{92, 249, 221}:  "Dell Inc.",
+       [3]byte{92, 249, 240}:  "Atomos Engineering P/L",
+       [3]byte{92, 252, 102}:  "Cisco Systems, Inc",
+       [3]byte{92, 255, 53}:   "Wistron Corporation",
+       [3]byte{92, 255, 255}:  "Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd",
+       [3]byte{96, 1, 148}:    "Espressif Inc.",
+       [3]byte{96, 2, 146}:    "PEGATRON CORPORATION",
+       [3]byte{96, 2, 180}:    "Wistron Neweb Corporation",
+       [3]byte{96, 3, 8}:      "Apple, Inc.",
+       [3]byte{96, 3, 71}:     "Billion Electric Co. Ltd.",
+       [3]byte{96, 4, 23}:     "POSBANK CO.,LTD",
+       [3]byte{96, 8, 16}:     "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{96, 8, 55}:     "ivvi Scientific(Nanchang)Co.Ltd",
+       [3]byte{96, 11, 3}:     "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{96, 15, 119}:   "SilverPlus, Inc",
+       [3]byte{96, 17, 153}:   "Siama Systems Inc",
+       [3]byte{96, 18, 131}:   "TSB REAL TIME LOCATION SYSTEMS S.L.",
+       [3]byte{96, 18, 139}:   "CANON INC.",
+       [3]byte{96, 20, 102}:   "zte corporation",
+       [3]byte{96, 20, 179}:   "CyberTAN Technology Inc.",
+       [3]byte{96, 21, 199}:   "IdaTech",
+       [3]byte{96, 24, 3}:     "Daikin Air-conditioning (Shanghai) Co., Ltd.",
+       [3]byte{96, 24, 46}:    "ShenZhen Protruly Electronic Ltd co.",
+       [3]byte{96, 24, 136}:   "zte corporation",
+       [3]byte{96, 25, 12}:    "RRAMAC",
+       [3]byte{96, 25, 41}:    "VOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.",
+       [3]byte{96, 25, 112}:   "HUIZHOU QIAOXING ELECTRONICS TECHNOLOGY CO., LTD.",
+       [3]byte{96, 25, 113}:   "ARRIS Group, Inc.",
+       [3]byte{96, 29, 15}:    "Midnite Solar",
+       [3]byte{96, 30, 2}:     "EltexAlatau",
+       [3]byte{96, 33, 1}:     "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{96, 33, 3}:     "I4VINE, INC",
+       [3]byte{96, 33, 192}:   "Murata Manufacturing Co., Ltd.",
+       [3]byte{96, 36, 193}:   "Jiangsu Zhongxun Electronic Technology Co., Ltd",
+       [3]byte{96, 39, 28}:    "VIDEOR E. Hartig GmbH",
+       [3]byte{96, 42, 84}:    "CardioTek B.V.",
+       [3]byte{96, 42, 208}:   "Cisco SPVTG",
+       [3]byte{96, 46, 32}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{96, 49, 59}:    "Sunnovo International Limited",
+       [3]byte{96, 49, 151}:   "Zyxel Communications Corporation",
+       [3]byte{96, 50, 240}:   "Mplus technology",
+       [3]byte{96, 51, 75}:    "Apple, Inc.",
+       [3]byte{96, 53, 83}:    "Buwon Technology",
+       [3]byte{96, 54, 150}:   "The Sapling Company",
+       [3]byte{96, 54, 221}:   "Intel Corporate",
+       [3]byte{96, 56, 14}:    "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{96, 56, 224}:   "Belkin International Inc.",
+       [3]byte{96, 57, 31}:    "ABB Ltd",
+       [3]byte{96, 61, 38}:    "Technicolor CH USA Inc.",
+       [3]byte{96, 62, 123}:   "Gafachi, Inc.",
+       [3]byte{96, 62, 202}:   "Cambridge Medical Robotics Ltd",
+       [3]byte{96, 63, 197}:   "COX CO., LTD",
+       [3]byte{96, 66, 127}:   "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+       [3]byte{96, 68, 245}:   "Easy Digital Ltd.",
+       [3]byte{96, 69, 94}:    "Liptel s.r.o.",
+       [3]byte{96, 69, 189}:   "Microsoft",
+       [3]byte{96, 69, 203}:   "ASUSTek COMPUTER INC.",
+       [3]byte{96, 70, 22}:    "XIAMEN VANN INTELLIGENT CO., LTD",
+       [3]byte{96, 71, 98}:    "Beijing Sensoro Technology Co.,Ltd.",
+       [3]byte{96, 71, 212}:   "FORICS Electronic Technology Co., Ltd.",
+       [3]byte{96, 72, 38}:    "Newbridge Technologies Int. Ltd.",
+       [3]byte{96, 73, 193}:   "Avaya Inc",
+       [3]byte{96, 74, 28}:    "SUYIN Corporation",
+       [3]byte{96, 75, 170}:   "Private",
+       [3]byte{96, 80, 193}:   "Kinetek Sports",
+       [3]byte{96, 81, 44}:    "TCT mobile ltd",
+       [3]byte{96, 82, 208}:   "FACTS Engineering",
+       [3]byte{96, 83, 23}:    "Sandstone Technologies",
+       [3]byte{96, 84, 100}:   "Eyedro Green Solutions Inc.",
+       [3]byte{96, 87, 24}:    "Intel Corporate",
+       [3]byte{96, 91, 180}:   "AzureWave Technology Inc.",
+       [3]byte{96, 96, 31}:    "SZ DJI TECHNOLOGY CO.,LTD",
+       [3]byte{96, 99, 249}:   "Ciholas, Inc.",
+       [3]byte{96, 99, 253}:   "Transcend Communication Beijing Co.,Ltd.",
+       [3]byte{96, 100, 5}:    "Texas Instruments",
+       [3]byte{96, 100, 83}:   "AOD Co.,Ltd.",
+       [3]byte{96, 100, 161}:  "RADiflow Ltd.",
+       [3]byte{96, 103, 32}:   "Intel Corporate",
+       [3]byte{96, 105, 68}:   "Apple, Inc.",
+       [3]byte{96, 105, 155}:  "isepos GmbH",
+       [3]byte{96, 107, 189}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{96, 108, 102}:  "Intel Corporate",
+       [3]byte{96, 109, 60}:   "Luxshare Precision Industry Company Limited",
+       [3]byte{96, 109, 199}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{96, 114, 11}:   "BLU Products Inc",
+       [3]byte{96, 115, 92}:   "Cisco Systems, Inc",
+       [3]byte{96, 115, 188}:  "zte corporation",
+       [3]byte{96, 116, 141}:  "Atmaca Elektronik",
+       [3]byte{96, 118, 136}:  "Velodyne",
+       [3]byte{96, 119, 226}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{96, 126, 221}:  "Microsoft Mobile Oy",
+       [3]byte{96, 129, 43}:   "Custom Control Concepts",
+       [3]byte{96, 129, 249}:  "Helium Systems, Inc",
+       [3]byte{96, 131, 52}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{96, 131, 178}:  "GkWare e.K.",
+       [3]byte{96, 132, 59}:   "Soladigm, Inc.",
+       [3]byte{96, 134, 69}:   "Avery Weigh-Tronix, LLC",
+       [3]byte{96, 137, 60}:   "Thermo Fisher Scientific P.O.A.",
+       [3]byte{96, 137, 177}:  "Key Digital Systems",
+       [3]byte{96, 137, 183}:  "KAEL MÜHENDİSLİK ELEKTRONİK TİCARET SANAYİ LİMİTED ŞİRKETİ",
+       [3]byte{96, 140, 43}:   "Hanson Technology",
+       [3]byte{96, 140, 230}:  "ARRIS Group, Inc.",
+       [3]byte{96, 141, 23}:   "Sentrus Government Systems Division, Inc",
+       [3]byte{96, 142, 8}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{96, 143, 92}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{96, 144, 132}:  "DSSD Inc",
+       [3]byte{96, 145, 243}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{96, 146, 23}:   "Apple, Inc.",
+       [3]byte{96, 150, 32}:   "Private",
+       [3]byte{96, 153, 209}:  "Vuzix / Lenovo",
+       [3]byte{96, 154, 164}:  "GVI SECURITY INC.",
+       [3]byte{96, 154, 193}:  "Apple, Inc.",
+       [3]byte{96, 155, 200}:  "Hipad Intelligent Technology Co., Ltd.",
+       [3]byte{96, 156, 159}:  "Brocade Communications Systems, Inc.",
+       [3]byte{96, 158, 100}:  "Vivonic GmbH",
+       [3]byte{96, 159, 157}:  "CloudSwitch",
+       [3]byte{96, 161, 10}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{96, 163, 125}:  "Apple, Inc.",
+       [3]byte{96, 164, 76}:   "ASUSTek COMPUTER INC.",
+       [3]byte{96, 164, 208}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{96, 168, 254}:  "Nokia",
+       [3]byte{96, 169, 176}:  "Merchandising Technologies, Inc",
+       [3]byte{96, 172, 200}:  "KunTeng Inc.",
+       [3]byte{96, 175, 109}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{96, 177, 133}:  "ATH system",
+       [3]byte{96, 179, 135}:  "Synergics Technologies GmbH",
+       [3]byte{96, 179, 196}:  "Elber Srl",
+       [3]byte{96, 180, 247}:  "Plume Design Inc",
+       [3]byte{96, 182, 6}:    "Phorus",
+       [3]byte{96, 182, 23}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{96, 185, 51}:   "Deutron Electronics Corp.",
+       [3]byte{96, 185, 130}:  "RO.VE.R. Laboratories S.p.A.",
+       [3]byte{96, 186, 24}:   "nextLAP GmbH",
+       [3]byte{96, 187, 12}:   "Beijing HuaqinWorld Technology Co,Ltd",
+       [3]byte{96, 188, 76}:   "EWM Hightec Welding GmbH",
+       [3]byte{96, 189, 145}:  "Move Innovation",
+       [3]byte{96, 190, 181}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{96, 192, 191}:  "ON Semiconductor",
+       [3]byte{96, 193, 203}:  "Fujian Great Power PLC Equipment Co.,Ltd",
+       [3]byte{96, 195, 151}:  "2Wire Inc",
+       [3]byte{96, 197, 71}:   "Apple, Inc.",
+       [3]byte{96, 197, 168}:  "Beijing LT Honway Technology Co.,Ltd",
+       [3]byte{96, 197, 173}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{96, 198, 88}:   "PHYTRONIX Co.,Ltd.",
+       [3]byte{96, 199, 152}:  "Verifone",
+       [3]byte{96, 201, 128}:  "Trymus",
+       [3]byte{96, 203, 251}:  "AirScape Inc.",
+       [3]byte{96, 205, 169}:  "Abloomy",
+       [3]byte{96, 205, 197}:  "Taiwan Carol Electronics., Ltd",
+       [3]byte{96, 208, 169}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{96, 209, 170}:  "Vishal Telecommunications Pvt Ltd",
+       [3]byte{96, 210, 98}:   "Tzukuri Pty Ltd",
+       [3]byte{96, 210, 185}:  "REALAND BIO CO., LTD.",
+       [3]byte{96, 211, 10}:   "Quatius Limited",
+       [3]byte{96, 215, 227}:  "IEEE Registration Authority",
+       [3]byte{96, 216, 25}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{96, 217, 160}:  "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{96, 217, 199}:  "Apple, Inc.",
+       [3]byte{96, 218, 35}:   "Estech Co.,Ltd",
+       [3]byte{96, 218, 131}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{96, 219, 42}:   "HNS",
+       [3]byte{96, 222, 68}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{96, 224, 14}:   "SHINSEI ELECTRONICS CO LTD",
+       [3]byte{96, 227, 39}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{96, 227, 172}:  "LG Electronics (Mobile Communications)",
+       [3]byte{96, 230, 188}:  "Sino-Telecom Technology Co.,Ltd.",
+       [3]byte{96, 231, 1}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{96, 231, 138}:  "UNISEM",
+       [3]byte{96, 233, 86}:   "Ayla Networks, Inc",
+       [3]byte{96, 235, 105}:  "QUANTA COMPUTER INC.",
+       [3]byte{96, 238, 92}:   "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{96, 239, 198}:  "Shenzhen Chima Technologies Co Limited",
+       [3]byte{96, 241, 61}:   "JABLOCOM s.r.o.",
+       [3]byte{96, 241, 137}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{96, 242, 129}:  "TRANWO TECHNOLOGY CO., LTD.",
+       [3]byte{96, 242, 239}:  "VisionVera International Co., Ltd.",
+       [3]byte{96, 243, 218}:  "Logic Way GmbH",
+       [3]byte{96, 244, 69}:   "Apple, Inc.",
+       [3]byte{96, 244, 148}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{96, 245, 156}:  "CRU-Dataport",
+       [3]byte{96, 246, 115}:  "TERUMO CORPORATION",
+       [3]byte{96, 246, 119}:  "Intel Corporate",
+       [3]byte{96, 248, 29}:   "Apple, Inc.",
+       [3]byte{96, 250, 205}:  "Apple, Inc.",
+       [3]byte{96, 251, 66}:   "Apple, Inc.",
+       [3]byte{96, 253, 86}:   "WOORISYSTEMS CO., Ltd",
+       [3]byte{96, 254, 30}:   "China Palms Telecom.Ltd",
+       [3]byte{96, 254, 32}:   "2Wire Inc",
+       [3]byte{96, 254, 197}:  "Apple, Inc.",
+       [3]byte{96, 254, 249}:  "Thomas & Betts",
+       [3]byte{96, 255, 221}:  "C.E. ELECTRONICS, INC",
+       [3]byte{100, 0, 45}:    "Powerlinq Co., LTD",
+       [3]byte{100, 0, 106}:   "Dell Inc.",
+       [3]byte{100, 0, 241}:   "Cisco Systems, Inc",
+       [3]byte{100, 5, 190}:   "NEW LIGHT LED",
+       [3]byte{100, 5, 233}:   "Shenzhen WayOS Technology Crop., Ltd.",
+       [3]byte{100, 9, 76}:    "Beijing Superbee Wireless Technology Co.,Ltd",
+       [3]byte{100, 9, 128}:   "Xiaomi Communications Co Ltd",
+       [3]byte{100, 11, 74}:   "Digital Telecom Technology Limited",
+       [3]byte{100, 13, 206}:  "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{100, 13, 230}:  "Petra Systems",
+       [3]byte{100, 14, 54}:   "TAZTAG",
+       [3]byte{100, 14, 148}:  "Pluribus Networks, Inc.",
+       [3]byte{100, 15, 40}:   "2Wire Inc",
+       [3]byte{100, 16, 132}:  "HEXIUM Technical Development Co., Ltd.",
+       [3]byte{100, 18, 37}:   "Cisco Systems, Inc",
+       [3]byte{100, 18, 105}:  "ARRIS Group, Inc.",
+       [3]byte{100, 19, 108}:  "zte corporation",
+       [3]byte{100, 22, 102}:  "Nest Labs Inc.",
+       [3]byte{100, 22, 127}:  "Polycom",
+       [3]byte{100, 22, 141}:  "Cisco Systems, Inc",
+       [3]byte{100, 22, 240}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{100, 26, 34}:   "Heliospectra AB",
+       [3]byte{100, 28, 103}:  "DIGIBRAS INDUSTRIA DO BRASILS/A",
+       [3]byte{100, 30, 129}:  "Dowslake Microsystems",
+       [3]byte{100, 32, 12}:   "Apple, Inc.",
+       [3]byte{100, 32, 159}:  "Tilgin AB",
+       [3]byte{100, 33, 132}:  "Nippon Denki Kagaku Co.,LTD",
+       [3]byte{100, 34, 22}:   "Shandong Taixin Electronic co.,Ltd",
+       [3]byte{100, 36, 0}:    "Xorcom Ltd.",
+       [3]byte{100, 39, 55}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{100, 43, 138}:  "ALL BEST Industrial Co., Ltd.",
+       [3]byte{100, 45, 183}:  "SEUNGIL ELECTRONICS",
+       [3]byte{100, 49, 80}:   "Hewlett Packard",
+       [3]byte{100, 49, 126}:  "Dexin Corporation",
+       [3]byte{100, 50, 168}:  "Intel Corporate",
+       [3]byte{100, 52, 9}:    "BITwave Pte Ltd",
+       [3]byte{100, 53, 28}:   "e-CON SYSTEMS INDIA PVT LTD",
+       [3]byte{100, 58, 177}:  "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{100, 62, 140}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{100, 63, 95}:   "Exablaze",
+       [3]byte{100, 66, 20}:   "Swisscom Energy Solutions AG",
+       [3]byte{100, 67, 70}:   "GuangDong Quick Network Computer CO.,LTD",
+       [3]byte{100, 71, 224}:  "Feitian Technologies Co., Ltd",
+       [3]byte{100, 75, 195}:  "Shanghai WOASiS Telecommunications Ltd., Co.",
+       [3]byte{100, 75, 240}:  "CalDigit, Inc",
+       [3]byte{100, 77, 112}:  "dSPACE GmbH",
+       [3]byte{100, 79, 116}:  "LENUS Co., Ltd.",
+       [3]byte{100, 79, 176}:  "Hyunjin.com",
+       [3]byte{100, 81, 6}:    "Hewlett Packard",
+       [3]byte{100, 81, 126}:  "LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.",
+       [3]byte{100, 82, 153}:  "The Chamberlain Group, Inc",
+       [3]byte{100, 83, 93}:   "Frauscher Sensortechnik",
+       [3]byte{100, 84, 34}:   "Equinox Payments",
+       [3]byte{100, 85, 99}:   "Intelight Inc.",
+       [3]byte{100, 85, 127}:  "NSFOCUS Information Technology Co., Ltd.",
+       [3]byte{100, 85, 177}:  "ARRIS Group, Inc.",
+       [3]byte{100, 86, 1}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{100, 89, 248}:  "Vodafone Omnitel B.V.",
+       [3]byte{100, 90, 4}:    "Chicony Electronics Co., Ltd.",
+       [3]byte{100, 93, 146}:  "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{100, 93, 215}:  "Shenzhen Lifesense Medical Electronics Co., Ltd.",
+       [3]byte{100, 94, 190}:  "Yahoo! JAPAN",
+       [3]byte{100, 95, 255}:  "Nicolet Neuro",
+       [3]byte{100, 97, 132}:  "VELUX",
+       [3]byte{100, 98, 35}:   "Cellient Co., Ltd.",
+       [3]byte{100, 100, 155}: "Juniper Networks",
+       [3]byte{100, 101, 192}: "Nuvon, Inc",
+       [3]byte{100, 102, 179}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{100, 103, 7}:   "Beijing Omnific Technology, Ltd.",
+       [3]byte{100, 104, 12}:  "Comtrend Corporation",
+       [3]byte{100, 105, 188}: "Hytera Communications Co .,ltd",
+       [3]byte{100, 106, 82}:  "Avaya Inc",
+       [3]byte{100, 106, 116}: "AUTH-SERVERS, LLC",
+       [3]byte{100, 108, 178}: "Samsung Electronics Co.,Ltd",
+       [3]byte{100, 110, 105}: "Liteon Technology Corporation",
+       [3]byte{100, 110, 108}: "Radio Datacom LLC",
+       [3]byte{100, 110, 234}: "Iskratel d.o.o.",
+       [3]byte{100, 112, 2}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{100, 114, 216}: "GooWi Technology Co.,Limited",
+       [3]byte{100, 115, 226}: "Arbiter Systems, Inc.",
+       [3]byte{100, 116, 246}: "Shooter Detection Systems",
+       [3]byte{100, 118, 87}:  "Innovative Security Designs",
+       [3]byte{100, 118, 186}: "Apple, Inc.",
+       [3]byte{100, 119, 125}: "Hitron Technologies. Inc",
+       [3]byte{100, 119, 145}: "Samsung Electronics Co.,Ltd",
+       [3]byte{100, 121, 167}: "Phison Electronics Corp.",
+       [3]byte{100, 123, 212}: "Texas Instruments",
+       [3]byte{100, 124, 52}:  "Ubee Interactive Co., Limited",
+       [3]byte{100, 125, 129}: "YOKOTA INDUSTRIAL CO,.LTD",
+       [3]byte{100, 127, 218}: "TEKTELIC Communications Inc.",
+       [3]byte{100, 128, 139}: "VG Controls, Inc.",
+       [3]byte{100, 128, 153}: "Intel Corporate",
+       [3]byte{100, 129, 37}:  "Alphatron Marine BV",
+       [3]byte{100, 135, 136}: "Juniper Networks",
+       [3]byte{100, 135, 215}: "ADB Broadband Italia",
+       [3]byte{100, 136, 255}: "Sichuan Changhong Electric Ltd.",
+       [3]byte{100, 137, 154}: "LG Electronics (Mobile Communications)",
+       [3]byte{100, 141, 158}: "IVT Electronic Co.,Ltd",
+       [3]byte{100, 153, 93}:  "LGE",
+       [3]byte{100, 153, 104}: "Elentec",
+       [3]byte{100, 153, 160}: "AG Elektronik AB",
+       [3]byte{100, 154, 8}:   "Shenzhen SuperElectron Technology Co.,LTD",
+       [3]byte{100, 154, 18}:  "P2 Mobile Technologies Limited",
+       [3]byte{100, 154, 190}: "Apple, Inc.",
+       [3]byte{100, 155, 36}:  "V Technology Co., Ltd.",
+       [3]byte{100, 156, 129}: "Qualcomm Inc.",
+       [3]byte{100, 156, 142}: "Texas Instruments",
+       [3]byte{100, 158, 243}: "Cisco Systems, Inc",
+       [3]byte{100, 159, 247}: "Kone OYj",
+       [3]byte{100, 160, 231}: "Cisco Systems, Inc",
+       [3]byte{100, 162, 50}:  "OOO Samlight",
+       [3]byte{100, 163, 65}:  "Wonderlan (Beijing) Technology Co., Ltd.",
+       [3]byte{100, 163, 203}: "Apple, Inc.",
+       [3]byte{100, 165, 195}: "Apple, Inc.",
+       [3]byte{100, 166, 81}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{100, 166, 143}: "Zhongshan Readboy Electronics Co.,Ltd",
+       [3]byte{100, 167, 105}: "HTC Corporation",
+       [3]byte{100, 167, 221}: "Avaya Inc",
+       [3]byte{100, 168, 55}:  "Juni Korea Co., Ltd",
+       [3]byte{100, 174, 12}:  "Cisco Systems, Inc",
+       [3]byte{100, 174, 136}: "Polytec GmbH",
+       [3]byte{100, 176, 166}: "Apple, Inc.",
+       [3]byte{100, 178, 29}:  "Chengdu Phycom Tech Co., Ltd.",
+       [3]byte{100, 179, 16}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{100, 179, 112}: "PowerComm Solutions LLC",
+       [3]byte{100, 180, 115}: "Xiaomi Communications Co Ltd",
+       [3]byte{100, 181, 198}: "Nintendo Co.,Ltd",
+       [3]byte{100, 182, 74}:  "ViVOtech, Inc.",
+       [3]byte{100, 184, 83}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{100, 185, 232}: "Apple, Inc.",
+       [3]byte{100, 186, 189}: "SDJ Technologies, Inc.",
+       [3]byte{100, 188, 12}:  "LG Electronics (Mobile Communications)",
+       [3]byte{100, 188, 17}:  "CombiQ AB",
+       [3]byte{100, 195, 84}:  "Avaya Inc",
+       [3]byte{100, 197, 170}: "South African Broadcasting Corporation",
+       [3]byte{100, 198, 103}: "Barnes&Noble",
+       [3]byte{100, 198, 175}: "AXERRA Networks Ltd",
+       [3]byte{100, 201, 68}:  "LARK Technologies, Inc",
+       [3]byte{100, 203, 163}: "Pointmobile",
+       [3]byte{100, 204, 46}:  "Xiaomi Communications Co Ltd",
+       [3]byte{100, 207, 217}: "Texas Instruments",
+       [3]byte{100, 208, 45}:  "Next Generation Integration (NGI)",
+       [3]byte{100, 209, 84}:  "Routerboard.com",
+       [3]byte{100, 209, 163}: "Sitecom Europe BV",
+       [3]byte{100, 210, 65}:  "Keith & Koep GmbH",
+       [3]byte{100, 212, 189}: "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{100, 212, 218}: "Intel Corporate",
+       [3]byte{100, 216, 20}:  "Cisco Systems, Inc",
+       [3]byte{100, 217, 18}:  "Solidica, Inc.",
+       [3]byte{100, 217, 84}:  "Taicang T&W Electronics",
+       [3]byte{100, 217, 137}: "Cisco Systems, Inc",
+       [3]byte{100, 218, 160}: "Robert Bosch Smart Home GmbH",
+       [3]byte{100, 219, 24}:  "OpenPattern",
+       [3]byte{100, 219, 67}:  "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+       [3]byte{100, 219, 129}: "Syszone Co., Ltd.",
+       [3]byte{100, 219, 160}: "Select Comfort",
+       [3]byte{100, 220, 1}:   "Static Systems Group PLC",
+       [3]byte{100, 222, 28}:  "Kingnetic Pte Ltd",
+       [3]byte{100, 223, 233}: "ATEME",
+       [3]byte{100, 225, 97}:  "DEP Corp.",
+       [3]byte{100, 229, 153}: "EFM Networks",
+       [3]byte{100, 230, 37}:  "Woxu Wireless Co., Ltd",
+       [3]byte{100, 230, 130}: "Apple, Inc.",
+       [3]byte{100, 232, 79}:  "Serialway Communication Technology Co. Ltd",
+       [3]byte{100, 232, 146}: "Morio Denki Co., Ltd.",
+       [3]byte{100, 232, 230}: "global moisture management system",
+       [3]byte{100, 233, 80}:  "Cisco Systems, Inc",
+       [3]byte{100, 234, 197}: "SiboTech Automation Co., Ltd.",
+       [3]byte{100, 235, 140}: "Seiko Epson Corporation",
+       [3]byte{100, 237, 87}:  "ARRIS Group, Inc.",
+       [3]byte{100, 237, 98}:  "WOORI SYSTEMS Co., Ltd",
+       [3]byte{100, 242, 66}:  "Gerdes Aktiengesellschaft",
+       [3]byte{100, 245, 14}:  "Kinion Technology Company Limited",
+       [3]byte{100, 246, 157}: "Cisco Systems, Inc",
+       [3]byte{100, 248, 138}: "China Mobile IOT Company Limited",
+       [3]byte{100, 249, 112}: "Kenade Electronics Technology Co.,LTD.",
+       [3]byte{100, 249, 135}: "Avvasi Inc.",
+       [3]byte{100, 251, 80}:  "RoomReady/Zdi, Inc.",
+       [3]byte{100, 251, 129}: "IEEE Registration Authority",
+       [3]byte{100, 252, 140}: "Zonar Systems",
+       [3]byte{104, 2, 53}:    "Konten Networks Inc.",
+       [3]byte{104, 5, 113}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{104, 5, 202}:   "Intel Corporate",
+       [3]byte{104, 7, 21}:    "Intel Corporate",
+       [3]byte{104, 9, 39}:    "Apple, Inc.",
+       [3]byte{104, 10, 215}:  "Yancheng Kecheng Optoelectronic Technology Co., Ltd",
+       [3]byte{104, 18, 45}:   "Special Instrument Development Co., Ltd.",
+       [3]byte{104, 18, 149}:  "Lupine Lighting Systems GmbH",
+       [3]byte{104, 20, 1}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{104, 21, 144}:  "Sagemcom Broadband SAS",
+       [3]byte{104, 21, 211}:  "Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.",
+       [3]byte{104, 22, 5}:    "Systems And Electronic Development FZCO",
+       [3]byte{104, 23, 41}:   "Intel Corporate",
+       [3]byte{104, 25, 63}:   "Digital Airways",
+       [3]byte{104, 26, 178}:  "zte corporation",
+       [3]byte{104, 28, 162}:  "Rosewill Inc.",
+       [3]byte{104, 29, 100}:  "Sunwave Communications Co., Ltd",
+       [3]byte{104, 29, 239}:  "Shenzhen CYX Technology Co., Ltd.",
+       [3]byte{104, 30, 139}:  "InfoSight Corporation",
+       [3]byte{104, 31, 64}:   "Blu Wireless Technology Ltd",
+       [3]byte{104, 31, 216}:  "Siemens Industry, Inc.",
+       [3]byte{104, 35, 75}:   "Nihon Dengyo Kousaku",
+       [3]byte{104, 38, 42}:   "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{104, 39, 55}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{104, 40, 186}:  "Dejai",
+       [3]byte{104, 40, 246}:  "Vubiq Networks, Inc.",
+       [3]byte{104, 45, 220}:  "Wuhan Changjiang Electro-Communication Equipment CO.,LTD",
+       [3]byte{104, 49, 254}:  "Teladin Co.,Ltd.",
+       [3]byte{104, 53, 99}:   "SHENZHEN LIOWN ELECTRONICS CO.,LTD.",
+       [3]byte{104, 54, 181}:  "DriveScale, Inc.",
+       [3]byte{104, 55, 233}:  "Amazon Technologies Inc.",
+       [3]byte{104, 59, 30}:   "Countwise LTD",
+       [3]byte{104, 60, 125}:  "Magic Intelligence Technology Limited",
+       [3]byte{104, 62, 2}:    "SIEMENS AG, Digital Factory, Motion Control System",
+       [3]byte{104, 62, 52}:   "MEIZU Technology Co., Ltd.",
+       [3]byte{104, 62, 236}:  "ERECA",
+       [3]byte{104, 67, 82}:   "Bhuu Limited",
+       [3]byte{104, 72, 152}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{104, 75, 136}:  "Galtronics Telemetry Inc.",
+       [3]byte{104, 76, 168}:  "Shenzhen Herotel Tech. Co., Ltd.",
+       [3]byte{104, 81, 183}:  "PowerCloud Systems, Inc.",
+       [3]byte{104, 83, 108}:  "SPnS Co.,Ltd",
+       [3]byte{104, 83, 136}:  "P&S Technology",
+       [3]byte{104, 84, 193}:  "ColorTokens, Inc.",
+       [3]byte{104, 84, 237}:  "Alcatel-Lucent",
+       [3]byte{104, 84, 245}:  "enLighted Inc",
+       [3]byte{104, 84, 253}:  "Amazon Technologies Inc.",
+       [3]byte{104, 88, 197}:  "ZF TRW Automotive",
+       [3]byte{104, 89, 127}:  "Alcatel Lucent",
+       [3]byte{104, 91, 53}:   "Apple, Inc.",
+       [3]byte{104, 91, 54}:   "POWERTECH INDUSTRIAL CO., LTD.",
+       [3]byte{104, 93, 67}:   "Intel Corporate",
+       [3]byte{104, 94, 107}:  "PowerRay Co., Ltd.",
+       [3]byte{104, 99, 89}:   "Advanced Digital Broadcast SA",
+       [3]byte{104, 100, 75}:  "Apple, Inc.",
+       [3]byte{104, 105, 46}:  "Zycoo Co.,Ltd",
+       [3]byte{104, 105, 117}: "Angler Labs Inc",
+       [3]byte{104, 105, 242}: "ComAp s.r.o.",
+       [3]byte{104, 110, 35}:  "Wi3 Inc.",
+       [3]byte{104, 110, 72}:  "Prophet Electronic Technology Corp.,Ltd",
+       [3]byte{104, 114, 81}:  "Ubiquiti Networks Inc.",
+       [3]byte{104, 114, 220}: "CETORY.TV Company Limited",
+       [3]byte{104, 118, 79}:  "Sony Mobile Communications AB",
+       [3]byte{104, 120, 72}:  "Westunitis Co., Ltd.",
+       [3]byte{104, 120, 76}:  "Nortel Networks",
+       [3]byte{104, 121, 36}:  "ELS-GmbH & Co. KG",
+       [3]byte{104, 121, 237}: "SHARP Corporation",
+       [3]byte{104, 124, 200}: "Measurement Systems S. de R.L.",
+       [3]byte{104, 124, 213}: "Y Soft Corporation, a.s.",
+       [3]byte{104, 127, 116}: "Cisco-Linksys, LLC",
+       [3]byte{104, 131, 26}:  "Pandora Mobility Corporation",
+       [3]byte{104, 132, 112}: "eSSys Co.,Ltd",
+       [3]byte{104, 133, 64}:  "IGI Mobile, Inc.",
+       [3]byte{104, 133, 106}: "OuterLink Corporation",
+       [3]byte{104, 134, 167}: "Cisco Systems, Inc",
+       [3]byte{104, 134, 231}: "Orbotix, Inc.",
+       [3]byte{104, 135, 107}: "INQ Mobile Limited",
+       [3]byte{104, 137, 193}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{104, 138, 181}: "EDP Servicos",
+       [3]byte{104, 138, 240}: "zte corporation",
+       [3]byte{104, 141, 182}: "AETEK INC.",
+       [3]byte{104, 143, 132}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{104, 145, 208}: "IEEE Registration Authority",
+       [3]byte{104, 146, 52}:  "Ruckus Wireless",
+       [3]byte{104, 147, 97}:  "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{104, 148, 35}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{104, 150, 123}: "Apple, Inc.",
+       [3]byte{104, 151, 75}:  "Shenzhen Costar Electronics Co. Ltd.",
+       [3]byte{104, 151, 232}: "Society of Motion Picture &amp; Television Engineers",
+       [3]byte{104, 153, 205}: "Cisco Systems, Inc",
+       [3]byte{104, 154, 183}: "Atelier Vision Corporation",
+       [3]byte{104, 156, 94}:  "AcSiP Technology Corp.",
+       [3]byte{104, 156, 112}: "Apple, Inc.",
+       [3]byte{104, 156, 226}: "Cisco Systems, Inc",
+       [3]byte{104, 158, 25}:  "Texas Instruments",
+       [3]byte{104, 159, 240}: "zte corporation",
+       [3]byte{104, 160, 246}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{104, 161, 183}: "Honghao Mingchuan Technology (Beijing) CO.,Ltd.",
+       [3]byte{104, 163, 120}: "FREEBOX SAS",
+       [3]byte{104, 163, 196}: "Liteon Technology Corporation",
+       [3]byte{104, 164, 14}:  "BSH Hausgeräte GmbH",
+       [3]byte{104, 166, 130}: "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{104, 168, 40}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{104, 168, 109}: "Apple, Inc.",
+       [3]byte{104, 170, 210}: "DATECS LTD.,",
+       [3]byte{104, 171, 138}: "RF IDeas",
+       [3]byte{104, 174, 32}:  "Apple, Inc.",
+       [3]byte{104, 175, 19}:  "Futura Mobility",
+       [3]byte{104, 176, 148}: "INESA ELECTRON CO.,LTD",
+       [3]byte{104, 179, 94}:  "Shenzhen Neostra Technology Co.Ltd",
+       [3]byte{104, 180, 58}:  "WaterFurnace International, Inc.",
+       [3]byte{104, 181, 153}: "Hewlett Packard",
+       [3]byte{104, 182, 252}: "Hitron Technologies. Inc",
+       [3]byte{104, 184, 217}: "Act KDE, Inc.",
+       [3]byte{104, 185, 131}: "b-plus GmbH",
+       [3]byte{104, 188, 12}:  "Cisco Systems, Inc",
+       [3]byte{104, 189, 171}: "Cisco Systems, Inc",
+       [3]byte{104, 196, 77}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{104, 198, 58}:  "Espressif Inc.",
+       [3]byte{104, 201, 11}:  "Texas Instruments",
+       [3]byte{104, 202, 0}:   "Octopus Systems Limited",
+       [3]byte{104, 204, 110}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{104, 204, 156}: "Mine Site Technologies",
+       [3]byte{104, 205, 15}:  "U Tek Company Limited",
+       [3]byte{104, 206, 78}:  "L-3 Communications Infrared Products",
+       [3]byte{104, 209, 253}: "Shenzhen Trimax Technology Co.,Ltd",
+       [3]byte{104, 210, 71}:  "Portalis LC",
+       [3]byte{104, 217, 37}:  "ProSys Development Services",
+       [3]byte{104, 217, 60}:  "Apple, Inc.",
+       [3]byte{104, 219, 84}:  "Phicomm (Shanghai) Co., Ltd.",
+       [3]byte{104, 219, 103}: "Nantong Coship Electronics Co., Ltd",
+       [3]byte{104, 219, 150}: "OPWILL Technologies CO .,LTD",
+       [3]byte{104, 219, 202}: "Apple, Inc.",
+       [3]byte{104, 220, 232}: "PacketStorm Communications",
+       [3]byte{104, 223, 221}: "Xiaomi Communications Co Ltd",
+       [3]byte{104, 225, 102}: "Private",
+       [3]byte{104, 228, 31}:  "Unglaube Identech GmbH",
+       [3]byte{104, 232, 235}: "Linktel Technologies Co.,Ltd",
+       [3]byte{104, 235, 174}: "Samsung Electronics Co.,Ltd",
+       [3]byte{104, 235, 197}: "Angstrem Telecom",
+       [3]byte{104, 236, 98}:  "YODO Technology Corp. Ltd.",
+       [3]byte{104, 236, 197}: "Intel Corporate",
+       [3]byte{104, 237, 67}:  "BlackBerry RTS",
+       [3]byte{104, 237, 164}: "Shenzhen Seavo Technology Co.,Ltd",
+       [3]byte{104, 238, 150}: "Cisco SPVTG",
+       [3]byte{104, 239, 189}: "Cisco Systems, Inc",
+       [3]byte{104, 240, 109}: "ALONG INDUSTRIAL CO., LIMITED",
+       [3]byte{104, 240, 188}: "Shenzhen LiWiFi Technology Co., Ltd",
+       [3]byte{104, 241, 37}:  "Data Controls Inc.",
+       [3]byte{104, 247, 40}:  "LCFC(HeFei) Electronics Technology co., ltd",
+       [3]byte{104, 248, 149}: "Redflow Limited",
+       [3]byte{104, 249, 86}:  "Objetivos y Servicio de Valor Añadido",
+       [3]byte{104, 251, 126}: "Apple, Inc.",
+       [3]byte{104, 251, 149}: "Generalplus Technology Inc.",
+       [3]byte{104, 252, 179}: "Next Level Security Systems, Inc.",
+       [3]byte{108, 2, 115}:   "Shenzhen Jin Yun Video Equipment Co., Ltd.",
+       [3]byte{108, 4, 96}:    "RBH Access Technologies Inc.",
+       [3]byte{108, 5, 213}:   "Ethertronics Inc",
+       [3]byte{108, 9, 10}:    "GEMATICA SRL",
+       [3]byte{108, 9, 214}:   "Digiquest Electronics LTD",
+       [3]byte{108, 11, 132}:  "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{108, 14, 13}:   "Sony Mobile Communications AB",
+       [3]byte{108, 14, 230}:  "Chengdu Xiyida Electronic Technology Co,.Ltd",
+       [3]byte{108, 15, 106}:  "JDC Tech Co., Ltd.",
+       [3]byte{108, 20, 247}:  "Erhardt+Leimer GmbH",
+       [3]byte{108, 21, 249}:  "Nautronix Limited",
+       [3]byte{108, 22, 14}:   "ShotTracker",
+       [3]byte{108, 24, 17}:   "Decatur Electronics",
+       [3]byte{108, 25, 143}:  "D-Link International",
+       [3]byte{108, 25, 192}:  "Apple, Inc.",
+       [3]byte{108, 30, 112}:  "Guangzhou YBDS IT Co.,Ltd",
+       [3]byte{108, 30, 144}:  "Hansol Technics Co., Ltd.",
+       [3]byte{108, 32, 86}:   "Cisco Systems, Inc",
+       [3]byte{108, 34, 171}:  "Ainsworth Game Technology",
+       [3]byte{108, 35, 185}:  "Sony Mobile Communications AB",
+       [3]byte{108, 36, 131}:  "Microsoft Mobile Oy",
+       [3]byte{108, 37, 185}:  "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+       [3]byte{108, 39, 121}:  "Microsoft Mobile Oy",
+       [3]byte{108, 41, 149}:  "Intel Corporate",
+       [3]byte{108, 42, 203}:  "Paxton Access Ltd",
+       [3]byte{108, 44, 6}:    "OOO NPP Systemotechnika-NN",
+       [3]byte{108, 46, 51}:   "Accelink Technologies Co.,Ltd.",
+       [3]byte{108, 46, 114}:  "B&B EXPORTING LIMITED",
+       [3]byte{108, 46, 133}:  "Sagemcom Broadband SAS",
+       [3]byte{108, 47, 44}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{108, 50, 222}:  "Indieon Technologies Pvt. Ltd.",
+       [3]byte{108, 51, 169}:  "Magicjack LP",
+       [3]byte{108, 56, 161}:  "Ubee Interactive Co., Limited",
+       [3]byte{108, 57, 29}:   "Beijing ZhongHuaHun Network Information center",
+       [3]byte{108, 58, 132}:  "Shenzhen Aero-Startech. Co.Ltd",
+       [3]byte{108, 59, 107}:  "Routerboard.com",
+       [3]byte{108, 59, 229}:  "Hewlett Packard",
+       [3]byte{108, 60, 83}:   "SoundHawk Corp",
+       [3]byte{108, 62, 109}:  "Apple, Inc.",
+       [3]byte{108, 62, 156}:  "KE Knestel Elektronik GmbH",
+       [3]byte{108, 64, 8}:    "Apple, Inc.",
+       [3]byte{108, 64, 198}:  "Nimbus Data Systems, Inc.",
+       [3]byte{108, 65, 106}:  "Cisco Systems, Inc",
+       [3]byte{108, 68, 24}:   "Zappware",
+       [3]byte{108, 69, 152}:  "Antex Electronic Corp.",
+       [3]byte{108, 73, 193}:  "o2ones Co., Ltd.",
+       [3]byte{108, 74, 57}:   "BITA",
+       [3]byte{108, 75, 127}:  "Vossloh-Schwabe Deutschland GmbH",
+       [3]byte{108, 75, 144}:  "LiteON",
+       [3]byte{108, 78, 134}:  "Third Millennium Systems Ltd.",
+       [3]byte{108, 80, 77}:   "Cisco Systems, Inc",
+       [3]byte{108, 86, 151}:  "Amazon Technologies Inc.",
+       [3]byte{108, 87, 121}:  "Aclima, Inc.",
+       [3]byte{108, 89, 64}:   "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{108, 89, 118}:  "Shanghai Tricheer Technology Co.,Ltd.",
+       [3]byte{108, 90, 52}:   "Shenzhen Haitianxiong Electronic Co., Ltd.",
+       [3]byte{108, 90, 181}:  "TCL Technoly Electronics (Huizhou) Co., Ltd.",
+       [3]byte{108, 92, 20}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{108, 92, 222}:  "SunReports, Inc.",
+       [3]byte{108, 93, 99}:   "ShenZhen Rapoo Technology Co., Ltd.",
+       [3]byte{108, 94, 122}:  "Ubiquitous Internet Telecom Co., Ltd",
+       [3]byte{108, 95, 28}:   "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{108, 96, 235}:  "ZHI YUAN ELECTRONICS CO., LIMITED",
+       [3]byte{108, 97, 38}:   "Rinicom Holdings",
+       [3]byte{108, 98, 109}:  "Micro-Star INT'L CO., LTD",
+       [3]byte{108, 100, 26}:  "Penguin Computing",
+       [3]byte{108, 110, 254}: "Core Logic Inc.",
+       [3]byte{108, 111, 24}:  "Stereotaxis, Inc.",
+       [3]byte{108, 112, 57}:  "Novar GmbH",
+       [3]byte{108, 112, 159}: "Apple, Inc.",
+       [3]byte{108, 113, 189}: "EZELINK TELECOM",
+       [3]byte{108, 113, 217}: "AzureWave Technology Inc.",
+       [3]byte{108, 114, 32}:  "D-Link International",
+       [3]byte{108, 114, 231}: "Apple, Inc.",
+       [3]byte{108, 117, 13}:  "WiFiSONG",
+       [3]byte{108, 118, 96}:  "KYOCERA CORPORATION",
+       [3]byte{108, 129, 254}: "Mitsuba Corporation",
+       [3]byte{108, 131, 54}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{108, 131, 102}: "Nanjing SAC Power Grid Automation Co., Ltd.",
+       [3]byte{108, 134, 134}: "Technonia",
+       [3]byte{108, 136, 20}:  "Intel Corporate",
+       [3]byte{108, 139, 47}:  "zte corporation",
+       [3]byte{108, 140, 219}: "Otus Technologies Ltd",
+       [3]byte{108, 141, 101}: "Wireless Glue Networks, Inc.",
+       [3]byte{108, 141, 193}: "Apple, Inc.",
+       [3]byte{108, 143, 181}: "Microsoft Mobile Oy",
+       [3]byte{108, 144, 177}: "SanLogic Inc",
+       [3]byte{108, 146, 191}: "Inspur Electronic Information Industry Co.,Ltd.",
+       [3]byte{108, 147, 84}:  "Yaojin Technology (Shenzhen) Co., LTD.",
+       [3]byte{108, 148, 248}: "Apple, Inc.",
+       [3]byte{108, 149, 34}:  "Scalys",
+       [3]byte{108, 150, 207}: "Apple, Inc.",
+       [3]byte{108, 152, 235}: "Riverbed Technology, Inc.",
+       [3]byte{108, 153, 137}: "Cisco Systems, Inc",
+       [3]byte{108, 154, 201}: "Valentine Research, Inc.",
+       [3]byte{108, 155, 2}:   "Nokia Corporation",
+       [3]byte{108, 156, 233}: "Nimble Storage",
+       [3]byte{108, 156, 237}: "Cisco Systems, Inc",
+       [3]byte{108, 161, 0}:   "Intel Corporate",
+       [3]byte{108, 166, 130}: "EDAM information & communications",
+       [3]byte{108, 167, 95}:  "zte corporation",
+       [3]byte{108, 167, 128}: "Nokia Corporation",
+       [3]byte{108, 167, 250}: "YOUNGBO ENGINEERING INC.",
+       [3]byte{108, 168, 73}:  "Avaya Inc",
+       [3]byte{108, 168, 88}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{108, 169, 6}:   "Telefield Ltd",
+       [3]byte{108, 169, 111}: "TransPacket AS",
+       [3]byte{108, 170, 179}: "Ruckus Wireless",
+       [3]byte{108, 171, 49}:  "Apple, Inc.",
+       [3]byte{108, 171, 77}:  "Digital Payment Technologies",
+       [3]byte{108, 172, 96}:  "Venetex Corp",
+       [3]byte{108, 173, 63}:  "Hubbell Building Automation, Inc.",
+       [3]byte{108, 173, 239}: "KZ Broadband Technologies, Ltd.",
+       [3]byte{108, 173, 248}: "AzureWave Technology Inc.",
+       [3]byte{108, 174, 139}: "IBM Corporation",
+       [3]byte{108, 176, 206}: "NETGEAR",
+       [3]byte{108, 178, 39}:  "Sony Video & Sound Products Inc.",
+       [3]byte{108, 178, 174}: "Cisco Systems, Inc",
+       [3]byte{108, 179, 17}:  "Shenzhen Lianrui Electronics Co.,Ltd",
+       [3]byte{108, 179, 80}:  "Anhui comhigher tech co.,ltd",
+       [3]byte{108, 180, 167}: "Landauer, Inc.",
+       [3]byte{108, 181, 107}: "HUMAX Co., Ltd.",
+       [3]byte{108, 183, 73}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{108, 183, 244}: "Samsung Electronics Co.,Ltd",
+       [3]byte{108, 185, 197}: "Delta Networks, Inc.",
+       [3]byte{108, 190, 233}: "Alcatel-Lucent IPD",
+       [3]byte{108, 191, 181}: "Noon Technology Co., Ltd",
+       [3]byte{108, 193, 71}:  "Xiamen Hanin Electronic Technology Co., Ltd",
+       [3]byte{108, 193, 210}: "ARRIS Group, Inc.",
+       [3]byte{108, 194, 23}:  "Hewlett Packard",
+       [3]byte{108, 194, 107}: "Apple, Inc.",
+       [3]byte{108, 202, 8}:   "ARRIS Group, Inc.",
+       [3]byte{108, 208, 50}:  "LG Electronics",
+       [3]byte{108, 209, 70}:  "Smartek d.o.o.",
+       [3]byte{108, 209, 176}: "WING SING ELECTRONICS HONG KONG LIMITED",
+       [3]byte{108, 214, 138}: "LG Electronics (Mobile Communications)",
+       [3]byte{108, 220, 106}: "Promethean Limited",
+       [3]byte{108, 221, 48}:  "Cisco Systems, Inc",
+       [3]byte{108, 224, 30}:  "Modcam AB",
+       [3]byte{108, 224, 176}: "SOUND4",
+       [3]byte{108, 227, 182}: "Nera Telecommunications Ltd.",
+       [3]byte{108, 228, 206}: "Villiger Security Solutions AG",
+       [3]byte{108, 232, 115}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{108, 233, 7}:   "Nokia Corporation",
+       [3]byte{108, 233, 131}: "Gastron Co., LTD.",
+       [3]byte{108, 235, 178}: "Dongguan Sen DongLv Electronics Co.,Ltd",
+       [3]byte{108, 236, 90}:  "Hon Hai Precision Ind. CO.,Ltd.",
+       [3]byte{108, 236, 161}: "SHENZHEN CLOU ELECTRONICS CO. LTD.",
+       [3]byte{108, 236, 235}: "Texas Instruments",
+       [3]byte{108, 239, 198}: "SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.",
+       [3]byte{108, 240, 73}:  "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{108, 243, 115}: "Samsung Electronics Co.,Ltd",
+       [3]byte{108, 243, 127}: "Aruba Networks",
+       [3]byte{108, 245, 232}: "Mooredoll Inc.",
+       [3]byte{108, 249, 124}: "Nanoptix Inc.",
+       [3]byte{108, 249, 210}: "Chengdu Goods for the Road Electronic Technology C",
+       [3]byte{108, 250, 88}:  "Avaya Inc",
+       [3]byte{108, 250, 137}: "Cisco Systems, Inc",
+       [3]byte{108, 250, 167}: "AMPAK Technology, Inc.",
+       [3]byte{108, 253, 185}: "Proware Technologies Co Ltd.",
+       [3]byte{108, 255, 190}: "MPB Communications Inc.",
+       [3]byte{112, 1, 54}:    "FATEK Automation Corporation",
+       [3]byte{112, 2, 88}:    "01DB-METRAVIB",
+       [3]byte{112, 5, 20}:    "LG Electronics (Mobile Communications)",
+       [3]byte{112, 11, 192}:  "Dewav Technology Company",
+       [3]byte{112, 15, 199}:  "SHENZHEN IKINLOOP TECHNOLOGY CO.,LTD.",
+       [3]byte{112, 15, 236}:  "Poindus Systems Corp.",
+       [3]byte{112, 16, 92}:   "Cisco Systems, Inc",
+       [3]byte{112, 16, 111}:  "Hewlett Packard Enterprise",
+       [3]byte{112, 17, 36}:   "Apple, Inc.",
+       [3]byte{112, 17, 174}:  "Music Life LTD",
+       [3]byte{112, 20, 4}:    "Limited Liability Company",
+       [3]byte{112, 20, 166}:  "Apple, Inc.",
+       [3]byte{112, 24, 139}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{112, 26, 4}:    "Liteon Technology Corporation",
+       [3]byte{112, 26, 237}:  "ADVAS CO., LTD.",
+       [3]byte{112, 28, 231}:  "Intel Corporate",
+       [3]byte{112, 29, 127}:  "Comtech Technology Co., Ltd.",
+       [3]byte{112, 29, 196}:  "NorthStar Battery Company, LLC",
+       [3]byte{112, 31, 83}:   "Cisco Systems, Inc",
+       [3]byte{112, 32, 132}:  "Hon Hai Precision Ind. Co., Ltd.",
+       [3]byte{112, 35, 147}:  "fos4X GmbH",
+       [3]byte{112, 37, 38}:   "Nokia",
+       [3]byte{112, 37, 89}:   "CyberTAN Technology Inc.",
+       [3]byte{112, 38, 5}:    "SONY Visual Products Inc.",
+       [3]byte{112, 40, 139}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{112, 41, 0}:    "Shenzhen ChipTrip Technology Co,Ltd",
+       [3]byte{112, 42, 125}:  "EpSpot AB",
+       [3]byte{112, 43, 29}:   "E-Domus International Limited",
+       [3]byte{112, 44, 31}:   "Wisol",
+       [3]byte{112, 45, 132}:  "i4C Innovations",
+       [3]byte{112, 45, 209}:  "Newings Communication CO., LTD.",
+       [3]byte{112, 46, 34}:   "zte corporation",
+       [3]byte{112, 47, 75}:   "PolyVision Inc.",
+       [3]byte{112, 47, 151}:  "Aava Mobile Oy",
+       [3]byte{112, 48, 24}:   "Avaya Inc",
+       [3]byte{112, 48, 93}:   "Ubiquoss Inc",
+       [3]byte{112, 48, 94}:   "Nanjing Zhongke Menglian Information Technology Co.,LTD",
+       [3]byte{112, 49, 135}:  "ACX GmbH",
+       [3]byte{112, 50, 213}:  "Athena Wireless Communications Inc",
+       [3]byte{112, 56, 17}:   "Invensys Rail",
+       [3]byte{112, 56, 180}:  "Low Tech Solutions",
+       [3]byte{112, 56, 238}:  "Avaya Inc",
+       [3]byte{112, 58, 14}:   "Aruba Networks",
+       [3]byte{112, 58, 203}:  "Google, Inc.",
+       [3]byte{112, 58, 216}:  "Shenzhen Afoundry Electronic Co., Ltd",
+       [3]byte{112, 60, 3}:    "RadiAnt Co.,Ltd",
+       [3]byte{112, 60, 57}:   "SEAWING Kft",
+       [3]byte{112, 61, 21}:   "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{112, 62, 172}:  "Apple, Inc.",
+       [3]byte{112, 65, 183}:  "Edwards Lifesciences LLC",
+       [3]byte{112, 70, 66}:   "CHYNG HONG ELECTRONIC CO., LTD.",
+       [3]byte{112, 71, 233}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{112, 72, 15}:   "Apple, Inc.",
+       [3]byte{112, 74, 174}:  "Xstream Flow (Pty) Ltd",
+       [3]byte{112, 74, 228}:  "Rinstrum Pty Ltd",
+       [3]byte{112, 76, 165}:  "Fortinet, Inc.",
+       [3]byte{112, 76, 237}:  "TMRG, Inc.",
+       [3]byte{112, 77, 123}:  "ASUSTek COMPUTER INC.",
+       [3]byte{112, 78, 1}:    "KWANGWON TECH CO., LTD.",
+       [3]byte{112, 78, 102}:  "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{112, 79, 87}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{112, 80, 175}:  "BSkyB Ltd",
+       [3]byte{112, 82, 197}:  "Avaya Inc",
+       [3]byte{112, 83, 63}:   "Alfa Instrumentos Eletronicos Ltda.",
+       [3]byte{112, 84, 210}:  "PEGATRON CORPORATION",
+       [3]byte{112, 84, 245}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{112, 86, 129}:  "Apple, Inc.",
+       [3]byte{112, 88, 18}:   "Panasonic Corporation AVC Networks Company",
+       [3]byte{112, 88, 150}:  "InShow Technology",
+       [3]byte{112, 89, 87}:   "Medallion Instrumentation Systems",
+       [3]byte{112, 89, 134}:  "OOO TTV",
+       [3]byte{112, 90, 15}:   "Hewlett Packard",
+       [3]byte{112, 90, 158}:  "Technicolor CH USA Inc.",
+       [3]byte{112, 90, 182}:  "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{112, 91, 46}:   "M2Communication Inc.",
+       [3]byte{112, 92, 173}:  "Konami Gaming Inc",
+       [3]byte{112, 94, 170}:  "Action Target, Inc.",
+       [3]byte{112, 96, 222}:  "LaVision GmbH",
+       [3]byte{112, 97, 115}:  "Calantec GmbH",
+       [3]byte{112, 98, 184}:  "D-Link International",
+       [3]byte{112, 100, 23}:  "ORBIS TECNOLOGIA ELECTRICA S.A.",
+       [3]byte{112, 101, 130}: "Suzhou Hanming Technologies Co., Ltd.",
+       [3]byte{112, 101, 163}: "Kandao lightforge Co., Ltd.",
+       [3]byte{112, 102, 27}:  "Sonova AG",
+       [3]byte{112, 104, 121}: "Saijo Denki International Co., Ltd.",
+       [3]byte{112, 107, 185}: "Cisco Systems, Inc",
+       [3]byte{112, 109, 236}: "Wifi-soft LLC",
+       [3]byte{112, 110, 109}: "Cisco Systems, Inc",
+       [3]byte{112, 111, 129}: "Private",
+       [3]byte{112, 112, 13}:  "Apple, Inc.",
+       [3]byte{112, 112, 76}:  "Purple Communications, Inc",
+       [3]byte{112, 112, 139}: "Cisco Systems, Inc",
+       [3]byte{112, 113, 179}: "Brain Corporation",
+       [3]byte{112, 113, 188}: "PEGATRON CORPORATION",
+       [3]byte{112, 114, 13}:  "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{112, 114, 60}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{112, 114, 207}: "EdgeCore Networks",
+       [3]byte{112, 115, 203}: "Apple, Inc.",
+       [3]byte{112, 118, 48}:  "ARRIS Group, Inc.",
+       [3]byte{112, 118, 221}: "Oxyguard International A/S",
+       [3]byte{112, 118, 240}: "LevelOne Communications (India) Private Limited",
+       [3]byte{112, 118, 255}: "KERLINK",
+       [3]byte{112, 119, 129}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{112, 120, 139}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{112, 121, 56}:  "Wuxi Zhanrui Electronic Technology Co.,LTD",
+       [3]byte{112, 121, 144}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{112, 123, 232}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{112, 124, 24}:  "ADATA Technology Co., Ltd",
+       [3]byte{112, 124, 105}: "Avaya Inc",
+       [3]byte{112, 125, 149}: "Shenzhen City LinwlanTechnology Co. Ltd.",
+       [3]byte{112, 125, 185}: "Cisco Systems, Inc",
+       [3]byte{112, 126, 67}:  "ARRIS Group, Inc.",
+       [3]byte{112, 126, 222}: "NASTEC LTD.",
+       [3]byte{112, 129, 5}:   "Cisco Systems, Inc",
+       [3]byte{112, 129, 235}: "Apple, Inc.",
+       [3]byte{112, 130, 14}:  "as electronics GmbH",
+       [3]byte{112, 130, 142}: "OleumTech Corporation",
+       [3]byte{112, 133, 194}: "ASRock Incorporation",
+       [3]byte{112, 133, 198}: "ARRIS Group, Inc.",
+       [3]byte{112, 134, 193}: "Texas Instruments",
+       [3]byte{112, 136, 77}:  "JAPAN RADIO CO., LTD.",
+       [3]byte{112, 138, 9}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{112, 139, 120}: "citygrow technology co., ltd",
+       [3]byte{112, 139, 205}: "ASUSTek COMPUTER INC.",
+       [3]byte{112, 141, 9}:   "Nokia Corporation",
+       [3]byte{112, 145, 143}: "Weber-Stephen Products LLC",
+       [3]byte{112, 145, 243}: "Universal Electronics, Inc.",
+       [3]byte{112, 147, 131}: "Intelligent Optical Network High Tech CO.,LTD.",
+       [3]byte{112, 147, 248}: "Space Monkey, Inc.",
+       [3]byte{112, 151, 86}:  "Happyelectronics Co.,Ltd",
+       [3]byte{112, 153, 28}:  "Shenzhen Honesty Electronics Co.,Ltd",
+       [3]byte{112, 154, 11}:  "Italian Institute of Technology",
+       [3]byte{112, 155, 165}: "Shenzhen Y&D Electronics Co.,LTD.",
+       [3]byte{112, 155, 252}: "Bryton Inc.",
+       [3]byte{112, 156, 143}: "Nero AG",
+       [3]byte{112, 158, 41}:  "Sony Interactive Entertainment Inc.",
+       [3]byte{112, 158, 134}: "X6D Limited",
+       [3]byte{112, 159, 45}:  "zte corporation",
+       [3]byte{112, 161, 145}: "Trendsetter Medical, LLC",
+       [3]byte{112, 162, 179}: "Apple, Inc.",
+       [3]byte{112, 164, 28}:  "Advanced Wireless Dynamics S.L.",
+       [3]byte{112, 166, 106}: "Prox Dynamics AS",
+       [3]byte{112, 168, 76}:  "MONAD., Inc.",
+       [3]byte{112, 168, 227}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{112, 170, 178}: "BlackBerry RTS",
+       [3]byte{112, 173, 84}:  "Malvern Instruments Ltd",
+       [3]byte{112, 175, 36}:  "TP Vision Belgium NV",
+       [3]byte{112, 175, 37}:  "Nishiyama Industry Co.,LTD.",
+       [3]byte{112, 175, 106}: "SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.",
+       [3]byte{112, 176, 53}:  "Shenzhen Zowee Technology Co., Ltd",
+       [3]byte{112, 176, 140}: "Shenou Communication Equipment Co.,Ltd",
+       [3]byte{112, 177, 78}:  "ARRIS Group, Inc.",
+       [3]byte{112, 178, 101}: "Hiltron s.r.l.",
+       [3]byte{112, 179, 213}: "IEEE Registration Authority",
+       [3]byte{112, 181, 153}: "Embedded Technologies s.r.o.",
+       [3]byte{112, 183, 226}: "Jiangsu Miter Technology Co.,Ltd.",
+       [3]byte{112, 185, 33}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{112, 186, 239}: "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{112, 191, 62}:  "Charles River Laboratories",
+       [3]byte{112, 198, 172}: "Bosch Automotive Aftermarket",
+       [3]byte{112, 199, 111}: "INNO S",
+       [3]byte{112, 202, 77}:  "Shenzhen lnovance Technology Co.,Ltd.",
+       [3]byte{112, 202, 155}: "Cisco Systems, Inc",
+       [3]byte{112, 205, 96}:  "Apple, Inc.",
+       [3]byte{112, 211, 121}: "Cisco Systems, Inc",
+       [3]byte{112, 212, 242}: "RIM",
+       [3]byte{112, 213, 126}: "Scalar Corporation",
+       [3]byte{112, 213, 231}: "Wellcore Corporation",
+       [3]byte{112, 214, 182}: "Metrum Technologies",
+       [3]byte{112, 216, 128}: "Upos System sp. z o.o.",
+       [3]byte{112, 217, 35}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{112, 217, 49}:  "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{112, 218, 156}: "TECSEN",
+       [3]byte{112, 219, 152}: "Cisco Systems, Inc",
+       [3]byte{112, 221, 161}: "Tellabs",
+       [3]byte{112, 222, 226}: "Apple, Inc.",
+       [3]byte{112, 222, 249}: "FAI WAH INTERNATIONAL (HONG KONG) LIMITED",
+       [3]byte{112, 223, 47}:  "Cisco Systems, Inc",
+       [3]byte{112, 224, 39}:  "HONGYU COMMUNICATION TECHNOLOGY LIMITED",
+       [3]byte{112, 225, 57}:  "3view Ltd",
+       [3]byte{112, 225, 253}: "FLEXTRONICS",
+       [3]byte{112, 226, 76}:  "SAE IT-systems GmbH & Co. KG",
+       [3]byte{112, 226, 132}: "Wistron Infocomm (Zhongshan) Corporation",
+       [3]byte{112, 228, 34}:  "Cisco Systems, Inc",
+       [3]byte{112, 229, 110}: "Texas Instruments",
+       [3]byte{112, 231, 44}:  "Apple, Inc.",
+       [3]byte{112, 232, 67}:  "Beijing C&W Optical Communication Technology Co.,Ltd.",
+       [3]byte{112, 236, 228}: "Apple, Inc.",
+       [3]byte{112, 238, 80}:  "Netatmo",
+       [3]byte{112, 238, 163}: "Eoptolink Technology Inc. Ltd,",
+       [3]byte{112, 240, 135}: "Apple, Inc.",
+       [3]byte{112, 241, 28}:  "Shenzhen Ogemray Technology Co.,Ltd",
+       [3]byte{112, 241, 118}: "Data Modul AG",
+       [3]byte{112, 241, 150}: "Actiontec Electronics, Inc",
+       [3]byte{112, 241, 161}: "Liteon Technology Corporation",
+       [3]byte{112, 241, 229}: "Xetawave LLC",
+       [3]byte{112, 243, 90}:  "Cisco Systems, Inc",
+       [3]byte{112, 243, 149}: "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{112, 248, 231}: "IEEE Registration Authority",
+       [3]byte{112, 249, 39}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{112, 249, 109}: "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{112, 252, 140}: "OneAccess SA",
+       [3]byte{112, 255, 92}:  "Cheerzing Communication(Xiamen)Technology Co.,Ltd",
+       [3]byte{112, 255, 118}: "Texas Instruments",
+       [3]byte{116, 3, 189}:   "BUFFALO.INC",
+       [3]byte{116, 4, 43}:    "Lenovo Mobile Communication (Wuhan) Company Limited",
+       [3]byte{116, 10, 188}:  "LightwaveRF Technology Ltd",
+       [3]byte{116, 14, 219}:  "Optowiz Co., Ltd",
+       [3]byte{116, 20, 137}:  "SRT Wireless",
+       [3]byte{116, 21, 226}:  "Tri-Sen Systems Corporation",
+       [3]byte{116, 24, 101}:  "Shanghai DareGlobal Technologies Co.,Ltd",
+       [3]byte{116, 25, 248}:  "IEEE Registration Authority",
+       [3]byte{116, 26, 224}:  "IEEE Registration Authority",
+       [3]byte{116, 27, 178}:  "Apple, Inc.",
+       [3]byte{116, 28, 39}:   "ITEL MOBILE LIMITED",
+       [3]byte{116, 30, 147}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{116, 31, 74}:   "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{116, 35, 68}:   "Xiaomi Communications Co Ltd",
+       [3]byte{116, 37, 138}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{116, 38, 172}:  "Cisco Systems, Inc",
+       [3]byte{116, 39, 60}:   "ChangYang Technology (Nanjing) Co., LTD",
+       [3]byte{116, 39, 234}:  "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{116, 40, 87}:   "Mayfield Robotics",
+       [3]byte{116, 41, 175}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{116, 43, 15}:   "Infinidat Ltd.",
+       [3]byte{116, 43, 98}:   "FUJITSU LIMITED",
+       [3]byte{116, 45, 10}:   "Norfolk Elektronik AG",
+       [3]byte{116, 46, 252}:  "DirectPacket Research, Inc,",
+       [3]byte{116, 47, 104}:  "AzureWave Technology Inc.",
+       [3]byte{116, 49, 112}:  "Arcadyan Technology Corporation",
+       [3]byte{116, 50, 86}:   "NT-ware Systemprg GmbH",
+       [3]byte{116, 55, 47}:   "Tongfang Shenzhen Cloudcomputing Technology Co.,Ltd",
+       [3]byte{116, 55, 59}:   "UNINET Co.,Ltd.",
+       [3]byte{116, 56, 137}:  "ANNAX Anzeigesysteme GmbH",
+       [3]byte{116, 58, 101}:  "NEC Corporation",
+       [3]byte{116, 62, 43}:   "Ruckus Wireless",
+       [3]byte{116, 62, 203}:  "Gentrice tech",
+       [3]byte{116, 68, 1}:    "NETGEAR",
+       [3]byte{116, 69, 138}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{116, 70, 160}:  "Hewlett Packard",
+       [3]byte{116, 74, 164}:  "zte corporation",
+       [3]byte{116, 75, 233}:  "EXPLORER HYPERTECH CO.,LTD",
+       [3]byte{116, 77, 121}:  "Arrive Systems Inc.",
+       [3]byte{116, 81, 186}:  "Xiaomi Communications Co Ltd",
+       [3]byte{116, 83, 39}:   "COMMSEN CO., LIMITED",
+       [3]byte{116, 84, 39}:   "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{116, 84, 125}:  "Cisco SPVTG",
+       [3]byte{116, 86, 18}:   "ARRIS Group, Inc.",
+       [3]byte{116, 87, 152}:  "TRUMPF Laser GmbH + Co. KG",
+       [3]byte{116, 90, 170}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{116, 92, 75}:   "GN Audio A/S",
+       [3]byte{116, 92, 159}:  "TCT mobile ltd",
+       [3]byte{116, 94, 28}:   "PIONEER CORPORATION",
+       [3]byte{116, 95, 0}:    "Samsung Semiconductor Inc.",
+       [3]byte{116, 95, 174}:  "TSL PPL",
+       [3]byte{116, 97, 75}:   "Chongqing Huijiatong Information Technology Co., Ltd.",
+       [3]byte{116, 99, 223}:  "VTS GmbH",
+       [3]byte{116, 101, 209}: "Atlinks",
+       [3]byte{116, 102, 48}:  "T:mi Ytti",
+       [3]byte{116, 103, 247}: "Extreme Networks, Inc.",
+       [3]byte{116, 106, 58}:  "Aperi Corporation",
+       [3]byte{116, 106, 137}: "Rezolt Corporation",
+       [3]byte{116, 106, 143}: "VS Vision Systems GmbH",
+       [3]byte{116, 107, 130}: "MOVEK",
+       [3]byte{116, 110, 228}: "Asia Vital Components Co.,Ltd.",
+       [3]byte{116, 111, 25}:  "ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.",
+       [3]byte{116, 111, 61}:  "Contec GmbH",
+       [3]byte{116, 111, 247}: "Wistron Neweb Corporation",
+       [3]byte{116, 114, 176}: "Guangzhou Shiyuan Electronics Co., Ltd.",
+       [3]byte{116, 114, 242}: "Chipsip Technology Co., Ltd.",
+       [3]byte{116, 115, 54}:  "MICRODIGTAL Inc",
+       [3]byte{116, 117, 72}:  "Amazon Technologies Inc.",
+       [3]byte{116, 120, 24}:  "Jurumani Solutions",
+       [3]byte{116, 123, 122}: "ETH Inc.",
+       [3]byte{116, 125, 36}:  "Phicomm (Shanghai) Co., Ltd.",
+       [3]byte{116, 125, 182}: "Aliwei Communications, Inc",
+       [3]byte{116, 126, 26}:  "Red Embedded Design Limited",
+       [3]byte{116, 126, 45}:  "Beijing Thomson CITIC Digital Technology Co. LTD.",
+       [3]byte{116, 129, 20}:  "Apple, Inc.",
+       [3]byte{116, 129, 154}: "PT. Hartono Istana Teknologi",
+       [3]byte{116, 131, 239}: "Arista Networks",
+       [3]byte{116, 133, 42}:  "PEGATRON CORPORATION",
+       [3]byte{116, 134, 11}:  "Cisco Systems, Inc",
+       [3]byte{116, 134, 122}: "Dell Inc.",
+       [3]byte{116, 135, 169}: "OCT Technology Co., Ltd.",
+       [3]byte{116, 136, 42}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{116, 136, 139}: "ADB Broadband Italia",
+       [3]byte{116, 138, 105}: "Korea Image Technology Co., Ltd",
+       [3]byte{116, 141, 8}:   "Apple, Inc.",
+       [3]byte{116, 142, 8}:   "Bestek Corp.",
+       [3]byte{116, 142, 248}: "Brocade Communications Systems, Inc.",
+       [3]byte{116, 143, 27}:  "MasterImage 3D",
+       [3]byte{116, 143, 77}:  "MEN Mikro Elektronik GmbH",
+       [3]byte{116, 144, 80}:  "Renesas Electronics Corporation",
+       [3]byte{116, 145, 26}:  "Ruckus Wireless",
+       [3]byte{116, 145, 189}: "Four systems Co.,Ltd.",
+       [3]byte{116, 147, 164}: "Zebra Technologies Corp.",
+       [3]byte{116, 148, 61}:  "AgJunction",
+       [3]byte{116, 149, 236}: "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{116, 150, 55}:  "Todaair Electronic Co., Ltd",
+       [3]byte{116, 151, 129}: "zte corporation",
+       [3]byte{116, 153, 117}: "IBM Corporation",
+       [3]byte{116, 156, 82}:  "Huizhou Desay SV Automotive Co., Ltd.",
+       [3]byte{116, 156, 227}: "KodaCloud Canada, Inc",
+       [3]byte{116, 157, 143}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{116, 157, 220}: "2Wire Inc",
+       [3]byte{116, 160, 47}:  "Cisco Systems, Inc",
+       [3]byte{116, 160, 99}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{116, 162, 230}: "Cisco Systems, Inc",
+       [3]byte{116, 163, 74}:  "ZIMI CORPORATION",
+       [3]byte{116, 164, 167}: "QRS Music Technologies, Inc.",
+       [3]byte{116, 164, 181}: "Powerleader Science and Technology Co. Ltd.",
+       [3]byte{116, 165, 40}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{116, 167, 34}:  "LG Electronics (Mobile Communications)",
+       [3]byte{116, 167, 142}: "zte corporation",
+       [3]byte{116, 172, 95}:  "Qiku Internet Network Scientific (Shenzhen) Co., Ltd.",
+       [3]byte{116, 173, 183}: "China Mobile Group Device Co.,Ltd.",
+       [3]byte{116, 174, 118}: "iNovo Broadband, Inc.",
+       [3]byte{116, 176, 12}:  "Network Video Technologies, Inc",
+       [3]byte{116, 180, 114}: "CIESSE",
+       [3]byte{116, 181, 126}: "zte corporation",
+       [3]byte{116, 185, 235}: "JinQianMao Technology Co.,Ltd.",
+       [3]byte{116, 186, 219}: "Longconn Electornics(shenzhen)Co.,Ltd",
+       [3]byte{116, 187, 211}: "Shenzhen xeme Communication Co., Ltd.",
+       [3]byte{116, 190, 8}:   "ATEK Products, LLC",
+       [3]byte{116, 191, 161}: "HYUNTECK",
+       [3]byte{116, 191, 183}: "Nusoft Corporation",
+       [3]byte{116, 194, 70}:  "Amazon Technologies Inc.",
+       [3]byte{116, 195, 48}:  "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{116, 198, 33}:  "Zhejiang Hite Renewable Energy Co.,LTD",
+       [3]byte{116, 198, 59}:  "AzureWave Technology Inc.",
+       [3]byte{116, 201, 154}: "Ericsson AB",
+       [3]byte{116, 201, 163}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{116, 202, 37}:  "Calxeda, Inc.",
+       [3]byte{116, 204, 57}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{116, 205, 12}:  "Smith Myers Communications Ltd.",
+       [3]byte{116, 206, 86}:  "Packet Force Technology Limited Company",
+       [3]byte{116, 208, 43}:  "ASUSTek COMPUTER INC.",
+       [3]byte{116, 208, 220}: "Ericsson AB",
+       [3]byte{116, 210, 29}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{116, 212, 53}:  "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{116, 214, 117}: "WYMA Tecnologia",
+       [3]byte{116, 214, 234}: "Texas Instruments",
+       [3]byte{116, 215, 202}: "Panasonic Corporation Automotive",
+       [3]byte{116, 216, 80}:  "Evrisko Systems",
+       [3]byte{116, 218, 56}:  "Edimax Technology Co. Ltd.",
+       [3]byte{116, 218, 218}: "D-Link International",
+       [3]byte{116, 218, 234}: "Texas Instruments",
+       [3]byte{116, 219, 209}: "Ebay Inc",
+       [3]byte{116, 222, 43}:  "Liteon Technology Corporation",
+       [3]byte{116, 223, 191}: "Liteon Technology Corporation",
+       [3]byte{116, 224, 110}: "Ergophone GmbH",
+       [3]byte{116, 225, 74}:  "IEEE Registration Authority",
+       [3]byte{116, 225, 154}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{116, 225, 182}: "Apple, Inc.",
+       [3]byte{116, 226, 119}: "Vizmonet Pte Ltd",
+       [3]byte{116, 226, 140}: "Microsoft Corporation",
+       [3]byte{116, 226, 245}: "Apple, Inc.",
+       [3]byte{116, 228, 36}:  "APISTE CORPORATION",
+       [3]byte{116, 229, 11}:  "Intel Corporate",
+       [3]byte{116, 229, 55}:  "RADSPIN",
+       [3]byte{116, 229, 67}:  "Liteon Technology Corporation",
+       [3]byte{116, 229, 249}: "Intel Corporate",
+       [3]byte{116, 230, 15}:  "TECNO MOBILE LIMITED",
+       [3]byte{116, 230, 226}: "Dell Inc.",
+       [3]byte{116, 231, 198}: "ARRIS Group, Inc.",
+       [3]byte{116, 234, 58}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{116, 234, 200}: "New H3C Technologies Co., Ltd",
+       [3]byte{116, 234, 203}: "New H3C Technologies Co., Ltd",
+       [3]byte{116, 234, 232}: "ARRIS Group, Inc.",
+       [3]byte{116, 236, 241}: "Acumen",
+       [3]byte{116, 240, 109}: "AzureWave Technology Inc.",
+       [3]byte{116, 240, 125}: "BnCOM Co.,Ltd",
+       [3]byte{116, 241, 2}:   "Beijing HCHCOM Technology Co., Ltd",
+       [3]byte{116, 244, 19}:  "Maxwell Forest",
+       [3]byte{116, 246, 18}:  "ARRIS Group, Inc.",
+       [3]byte{116, 246, 28}:  "HTC Corporation",
+       [3]byte{116, 246, 97}:  "Schneider Electric Fire & Security Oy",
+       [3]byte{116, 247, 38}:  "Neuron Robotics",
+       [3]byte{116, 248, 93}:  "Berkeley Nucleonics Corp",
+       [3]byte{116, 248, 219}: "IEEE Registration Authority",
+       [3]byte{116, 249, 26}:  "Onface",
+       [3]byte{116, 253, 160}: "Compupal (Group) Corporation",
+       [3]byte{116, 254, 72}:  "ADVANTECH CO., LTD.",
+       [3]byte{116, 255, 76}:  "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+       [3]byte{116, 255, 125}: "Wren Sound Systems, LLC",
+       [3]byte{120, 0, 158}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 2, 143}:   "Adaptive Spectrum and Signal Alignment (ASSIA), Inc.",
+       [3]byte{120, 2, 177}:   "Cisco Systems, Inc",
+       [3]byte{120, 2, 183}:   "ShenZhen Ultra Easy Technology CO.,LTD",
+       [3]byte{120, 2, 248}:   "Xiaomi Communications Co Ltd",
+       [3]byte{120, 5, 65}:    "Queclink Wireless Solutions Co., Ltd",
+       [3]byte{120, 7, 56}:    "Z.U.K. Elzab S.A.",
+       [3]byte{120, 10, 199}:  "Baofeng TV Co., Ltd.",
+       [3]byte{120, 12, 184}:  "Intel Corporate",
+       [3]byte{120, 17, 133}:  "NBS Payment Solutions Inc.",
+       [3]byte{120, 17, 220}:  "XIAOMI Electronics,CO.,LTD",
+       [3]byte{120, 18, 184}:  "ORANTEK LIMITED",
+       [3]byte{120, 24, 129}:  "AzureWave Technology Inc.",
+       [3]byte{120, 25, 46}:   "NASCENT Technology",
+       [3]byte{120, 25, 247}:  "Juniper Networks",
+       [3]byte{120, 28, 90}:   "SHARP Corporation",
+       [3]byte{120, 29, 186}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{120, 29, 253}:  "Jabil Inc",
+       [3]byte{120, 31, 219}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 32, 121}:  "ID Tech",
+       [3]byte{120, 34, 61}:   "Affirmed Networks",
+       [3]byte{120, 35, 174}:  "ARRIS Group, Inc.",
+       [3]byte{120, 36, 175}:  "ASUSTek COMPUTER INC.",
+       [3]byte{120, 37, 68}:   "Omnima Limited",
+       [3]byte{120, 37, 173}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 40, 202}:  "Sonos, Inc.",
+       [3]byte{120, 43, 203}:  "Dell Inc.",
+       [3]byte{120, 45, 126}:  "TRENDnet, Inc.",
+       [3]byte{120, 46, 239}:  "Nokia Corporation",
+       [3]byte{120, 48, 59}:   "Stephen Technologies Co.,Limited",
+       [3]byte{120, 48, 225}:  "UltraClenz, LLC",
+       [3]byte{120, 49, 43}:   "zte corporation",
+       [3]byte{120, 49, 193}:  "Apple, Inc.",
+       [3]byte{120, 50, 27}:   "D-Link International",
+       [3]byte{120, 50, 79}:   "Millennium Group, Inc.",
+       [3]byte{120, 54, 144}:  "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+       [3]byte{120, 58, 132}:  "Apple, Inc.",
+       [3]byte{120, 60, 227}:  "Kai-EE",
+       [3]byte{120, 61, 91}:   "TELNET Redes Inteligentes S.A.",
+       [3]byte{120, 62, 83}:   "BSkyB Ltd",
+       [3]byte{120, 63, 21}:   "EasySYNC Ltd.",
+       [3]byte{120, 64, 228}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 68, 5}:    "FUJITU(HONG KONG) ELECTRONIC Co.,LTD.",
+       [3]byte{120, 68, 118}:  "Zioncom Electronics (Shenzhen) Ltd.",
+       [3]byte{120, 68, 253}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{120, 69, 1}:    "Biamp Systems",
+       [3]byte{120, 69, 97}:   "CyberTAN Technology Inc.",
+       [3]byte{120, 69, 196}:  "Dell Inc.",
+       [3]byte{120, 70, 196}:  "DAEHAP HYPER-TECH",
+       [3]byte{120, 71, 29}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 72, 89}:   "Hewlett Packard",
+       [3]byte{120, 73, 29}:   "The Will-Burt Company",
+       [3]byte{120, 75, 8}:    "f.robotics acquisitions ltd",
+       [3]byte{120, 75, 135}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{120, 79, 67}:   "Apple, Inc.",
+       [3]byte{120, 81, 12}:   "LiveU Ltd.",
+       [3]byte{120, 82, 26}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 82, 98}:   "Shenzhen Hojy Software Co., Ltd.",
+       [3]byte{120, 83, 242}:  "ROXTON Ltd.",
+       [3]byte{120, 84, 46}:   "D-Link International",
+       [3]byte{120, 85, 23}:   "SankyuElectronics",
+       [3]byte{120, 87, 18}:   "Mobile Integration Workgroup",
+       [3]byte{120, 88, 243}:  "Vachen Co.,Ltd",
+       [3]byte{120, 89, 62}:   "RAFI GmbH & Co.KG",
+       [3]byte{120, 89, 94}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 89, 104}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{120, 92, 40}:   "Prime Motion Inc.",
+       [3]byte{120, 92, 114}:  "Hioso Technology Co., Ltd.",
+       [3]byte{120, 95, 76}:   "Argox Information Co., Ltd.",
+       [3]byte{120, 97, 124}:  "MITSUMI ELECTRIC CO.,LTD.",
+       [3]byte{120, 98, 86}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{120, 100, 230}: "Green Motive Technology Limited",
+       [3]byte{120, 102, 174}: "ZTEC Instruments, Inc.",
+       [3]byte{120, 103, 215}: "Apple, Inc.",
+       [3]byte{120, 104, 247}: "YSTen Technology Co.,Ltd",
+       [3]byte{120, 106, 137}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{120, 108, 28}:  "Apple, Inc.",
+       [3]byte{120, 109, 148}: "Palo Alto Networks",
+       [3]byte{120, 113, 156}: "ARRIS Group, Inc.",
+       [3]byte{120, 123, 138}: "Apple, Inc.",
+       [3]byte{120, 125, 72}:  "ITEL MOBILE LIMITED",
+       [3]byte{120, 126, 97}:  "Apple, Inc.",
+       [3]byte{120, 127, 98}:  "GiK mbH",
+       [3]byte{120, 128, 56}:  "FUNAI ELECTRIC CO., LTD.",
+       [3]byte{120, 129, 2}:   "Sercomm Corporation.",
+       [3]byte{120, 129, 143}: "Server Racks Australia Pty Ltd",
+       [3]byte{120, 132, 60}:  "Sony Corporation",
+       [3]byte{120, 132, 238}: "INDRA ESPACIO S.A.",
+       [3]byte{120, 135, 13}:  "Unifiedgateways India Private Limited",
+       [3]byte{120, 136, 109}: "Apple, Inc.",
+       [3]byte{120, 136, 138}: "CDR Sp. z o.o. Sp. k.",
+       [3]byte{120, 137, 115}: "CMC",
+       [3]byte{120, 138, 32}:  "Ubiquiti Networks Inc.",
+       [3]byte{120, 139, 119}: "Standar Telecom",
+       [3]byte{120, 140, 77}:  "Indyme Solutions, LLC",
+       [3]byte{120, 140, 84}:  "Eltek Technologies LTD",
+       [3]byte{120, 141, 247}: "Hitron Technologies. Inc",
+       [3]byte{120, 142, 51}:  "Jiangsu SEUIC Technology Co.,Ltd",
+       [3]byte{120, 146, 62}:  "Nokia Corporation",
+       [3]byte{120, 146, 156}: "Intel Corporate",
+       [3]byte{120, 148, 180}: "Sercomm Corporation.",
+       [3]byte{120, 150, 130}: "zte corporation",
+       [3]byte{120, 150, 132}: "ARRIS Group, Inc.",
+       [3]byte{120, 152, 253}: "Q9 Networks Inc.",
+       [3]byte{120, 153, 92}:  "Nationz Technologies Inc",
+       [3]byte{120, 153, 102}: "Musilab Electronics (DongGuan)Co.,Ltd.",
+       [3]byte{120, 153, 143}: "MEDILINE ITALIA SRL",
+       [3]byte{120, 156, 133}: "August Home, Inc.",
+       [3]byte{120, 156, 231}: "Shenzhen Aikede Technology Co., Ltd",
+       [3]byte{120, 158, 208}: "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 159, 76}:  "HOERBIGER Elektronik GmbH",
+       [3]byte{120, 159, 112}: "Apple, Inc.",
+       [3]byte{120, 159, 135}: "Siemens AG I IA PP PRM",
+       [3]byte{120, 160, 81}:  "iiNet Labs Pty Ltd",
+       [3]byte{120, 161, 6}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{120, 161, 131}: "Advidia",
+       [3]byte{120, 162, 160}: "Nintendo Co., Ltd.",
+       [3]byte{120, 163, 81}:  "SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD",
+       [3]byte{120, 163, 228}: "Apple, Inc.",
+       [3]byte{120, 165, 4}:   "Texas Instruments",
+       [3]byte{120, 165, 221}: "Shenzhen Smarteye Digital Electronics Co., Ltd",
+       [3]byte{120, 166, 131}: "Precidata",
+       [3]byte{120, 166, 189}: "DAEYEON Control&Instrument Co,.Ltd",
+       [3]byte{120, 166, 225}: "Brocade Communications Systems, Inc.",
+       [3]byte{120, 167, 20}:  "Amphenol",
+       [3]byte{120, 168, 115}: "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 171, 96}:  "ABB Australia",
+       [3]byte{120, 171, 187}: "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 172, 191}: "Igneous Systems",
+       [3]byte{120, 172, 192}: "Hewlett Packard",
+       [3]byte{120, 174, 12}:  "Far South Networks",
+       [3]byte{120, 175, 88}:  "GIMASI SA",
+       [3]byte{120, 178, 141}: "Beijing Tengling Technology CO.Ltd",
+       [3]byte{120, 179, 185}: "ShangHai sunup lighting CO.,LTD",
+       [3]byte{120, 179, 206}: "Elo touch solutions",
+       [3]byte{120, 181, 210}: "Ever Treasure Industrial Limited",
+       [3]byte{120, 182, 193}: "AOBO Telecom Co.,Ltd",
+       [3]byte{120, 184, 26}:  "INTER SALES A/S",
+       [3]byte{120, 184, 75}:  "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{120, 186, 208}: "Shinybow Technology Co. Ltd.",
+       [3]byte{120, 186, 249}: "Cisco Systems, Inc",
+       [3]byte{120, 188, 26}:  "Cisco Systems, Inc",
+       [3]byte{120, 189, 188}: "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 190, 182}: "Enhanced Vision",
+       [3]byte{120, 190, 189}: "STULZ GmbH",
+       [3]byte{120, 193, 167}: "zte corporation",
+       [3]byte{120, 194, 192}: "IEEE Registration Authority",
+       [3]byte{120, 195, 233}: "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 196, 14}:  "H&D Wireless",
+       [3]byte{120, 196, 171}: "Shenzhen Runsil Technology Co.,Ltd",
+       [3]byte{120, 197, 229}: "Texas Instruments",
+       [3]byte{120, 198, 187}: "Innovasic, Inc.",
+       [3]byte{120, 202, 4}:   "Nokia Corporation",
+       [3]byte{120, 202, 57}:  "Apple, Inc.",
+       [3]byte{120, 202, 94}:  "ELNO",
+       [3]byte{120, 202, 131}: "IEEE Registration Authority",
+       [3]byte{120, 203, 51}:  "DHC Software Co.,Ltd",
+       [3]byte{120, 203, 104}: "DAEHAP HYPER-TECH",
+       [3]byte{120, 205, 142}: "SMC Networks Inc",
+       [3]byte{120, 208, 4}:   "Neousys Technology Inc.",
+       [3]byte{120, 209, 41}:  "Vicos",
+       [3]byte{120, 211, 79}:  "Pace-O-Matic, Inc.",
+       [3]byte{120, 211, 141}: "HONGKONG YUNLINK TECHNOLOGY LIMITED",
+       [3]byte{120, 213, 181}: "NAVIELEKTRO KY",
+       [3]byte{120, 214, 111}: "Aristocrat Technologies Australia Pty. Ltd.",
+       [3]byte{120, 214, 178}: "Toshiba",
+       [3]byte{120, 214, 240}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{120, 215, 82}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{120, 215, 95}:  "Apple, Inc.",
+       [3]byte{120, 216, 0}:   "IEEE Registration Authority",
+       [3]byte{120, 217, 159}: "NuCom HK Ltd.",
+       [3]byte{120, 218, 110}: "Cisco Systems, Inc",
+       [3]byte{120, 218, 179}: "GBO Technology",
+       [3]byte{120, 221, 8}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{120, 221, 214}: "c-scape",
+       [3]byte{120, 221, 217}: "Guangzhou Shiyuan Electronics Co., Ltd.",
+       [3]byte{120, 222, 228}: "Texas Instruments",
+       [3]byte{120, 225, 3}:   "Amazon Technologies Inc.",
+       [3]byte{120, 227, 181}: "Hewlett Packard",
+       [3]byte{120, 228, 0}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{120, 231, 209}: "Hewlett Packard",
+       [3]byte{120, 232, 182}: "zte corporation",
+       [3]byte{120, 233, 128}: "RainUs Co.,Ltd",
+       [3]byte{120, 235, 20}:  "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{120, 235, 57}:  "Instituto Nacional de Tecnología Industrial",
+       [3]byte{120, 236, 34}:  "Shanghai Qihui Telecom Technology Co., LTD",
+       [3]byte{120, 236, 116}: "Kyland-USA",
+       [3]byte{120, 239, 76}:  "Unetconvergence Co., Ltd.",
+       [3]byte{120, 242, 158}: "PEGATRON CORPORATION",
+       [3]byte{120, 245, 87}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{120, 245, 229}: "BEGA Gantenbrink-Leuchten KG",
+       [3]byte{120, 245, 253}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{120, 247, 190}: "Samsung Electronics Co.,Ltd",
+       [3]byte{120, 247, 208}: "Silverbrook Research",
+       [3]byte{120, 248, 130}: "LG Electronics (Mobile Communications)",
+       [3]byte{120, 249, 68}:  "Private",
+       [3]byte{120, 252, 20}:  "Family Zone Cyber Safety Ltd",
+       [3]byte{120, 253, 148}: "Apple, Inc.",
+       [3]byte{120, 254, 61}:  "Juniper Networks",
+       [3]byte{120, 254, 65}:  "Socus networks",
+       [3]byte{120, 254, 226}: "Shanghai Diveo Technology Co., Ltd",
+       [3]byte{120, 255, 87}:  "Intel Corporate",
+       [3]byte{120, 255, 202}: "TECNO MOBILE LIMITED",
+       [3]byte{124, 1, 10}:    "Texas Instruments",
+       [3]byte{124, 1, 135}:   "Curtis Instruments, Inc.",
+       [3]byte{124, 1, 145}:   "Apple, Inc.",
+       [3]byte{124, 2, 188}:   "Hansung Electronics Co. LTD",
+       [3]byte{124, 3, 76}:    "Sagemcom Broadband SAS",
+       [3]byte{124, 3, 201}:   "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{124, 3, 216}:   "Sagemcom Broadband SAS",
+       [3]byte{124, 4, 208}:   "Apple, Inc.",
+       [3]byte{124, 5, 7}:     "PEGATRON CORPORATION",
+       [3]byte{124, 5, 30}:    "RAFAEL LTD.",
+       [3]byte{124, 6, 35}:    "Ultra Electronics Sonar System Division",
+       [3]byte{124, 8, 217}:   "Shanghai B-Star Technology Co",
+       [3]byte{124, 9, 43}:    "Bekey A/S",
+       [3]byte{124, 10, 80}:   "J-MEX Inc.",
+       [3]byte{124, 11, 198}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{124, 14, 206}:  "Cisco Systems, Inc",
+       [3]byte{124, 16, 21}:   "Brilliant Home Technology, Inc.",
+       [3]byte{124, 17, 190}:  "Apple, Inc.",
+       [3]byte{124, 17, 203}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{124, 17, 205}:  "QianTang Technology",
+       [3]byte{124, 20, 118}:  "Damall Technologies SAS",
+       [3]byte{124, 22, 13}:   "Saia-Burgess Controls AG",
+       [3]byte{124, 24, 205}:  "E-TRON Co.,Ltd.",
+       [3]byte{124, 26, 3}:    "8Locations Co., Ltd.",
+       [3]byte{124, 26, 252}:  "Dalian Co-Edifice Video Technology Co., Ltd",
+       [3]byte{124, 28, 78}:   "LG Innotek",
+       [3]byte{124, 28, 104}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{124, 28, 241}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{124, 29, 217}:  "Xiaomi Communications Co Ltd",
+       [3]byte{124, 30, 82}:   "Microsoft",
+       [3]byte{124, 30, 179}:  "2N TELEKOMUNIKACE a.s.",
+       [3]byte{124, 32, 72}:   "KoamTac",
+       [3]byte{124, 32, 100}:  "Alcatel-Lucent IPD",
+       [3]byte{124, 37, 135}:  "chaowifi.com",
+       [3]byte{124, 38, 52}:   "ARRIS Group, Inc.",
+       [3]byte{124, 38, 100}:  "Sagemcom Broadband SAS",
+       [3]byte{124, 43, 225}:  "Shenzhen Ferex Electrical Co.,Ltd",
+       [3]byte{124, 44, 243}:  "Secure Electrans Ltd",
+       [3]byte{124, 46, 13}:   "Blackmagic Design",
+       [3]byte{124, 46, 221}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{124, 47, 128}:  "Gigaset Communications GmbH",
+       [3]byte{124, 51, 110}:  "MEG Electronics Inc.",
+       [3]byte{124, 53, 72}:   "Transcend Information",
+       [3]byte{124, 56, 102}:  "Texas Instruments",
+       [3]byte{124, 56, 108}:  "Real Time Logic",
+       [3]byte{124, 57, 32}:   "SSOMA SECURITY",
+       [3]byte{124, 59, 213}:  "Imago Group",
+       [3]byte{124, 60, 182}:  "Shenzhen Homecare Technology Co.,Ltd.",
+       [3]byte{124, 62, 157}:  "PATECH",
+       [3]byte{124, 67, 143}:  "E-Band Communications Corp.",
+       [3]byte{124, 68, 76}:   "Entertainment Solutions, S.L.",
+       [3]byte{124, 70, 133}:  "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+       [3]byte{124, 71, 124}:  "IEEE Registration Authority",
+       [3]byte{124, 73, 185}:  "Plexus Manufacturing Sdn Bhd",
+       [3]byte{124, 74, 130}:  "Portsmith LLC",
+       [3]byte{124, 74, 168}:  "MindTree Wireless PVT Ltd",
+       [3]byte{124, 75, 120}:  "Red Sun Synthesis Pte Ltd",
+       [3]byte{124, 76, 88}:   "Scale Computing, Inc.",
+       [3]byte{124, 76, 165}:  "BSkyB Ltd",
+       [3]byte{124, 79, 125}:  "Sawwave",
+       [3]byte{124, 79, 181}:  "Arcadyan Technology Corporation",
+       [3]byte{124, 80, 73}:   "Apple, Inc.",
+       [3]byte{124, 83, 74}:   "Metamako",
+       [3]byte{124, 85, 231}:  "YSI, Inc.",
+       [3]byte{124, 87, 78}:   "COBI GmbH",
+       [3]byte{124, 90, 28}:   "Sophos Ltd",
+       [3]byte{124, 90, 103}:  "JNC Systems, Inc.",
+       [3]byte{124, 92, 248}:  "Intel Corporate",
+       [3]byte{124, 96, 151}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{124, 97, 147}:  "HTC Corporation",
+       [3]byte{124, 100, 86}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{124, 102, 157}: "Texas Instruments",
+       [3]byte{124, 103, 162}: "Intel Corporate",
+       [3]byte{124, 105, 246}: "Cisco Systems, Inc",
+       [3]byte{124, 106, 179}: "IBC TECHNOLOGIES INC.",
+       [3]byte{124, 106, 195}: "GatesAir, Inc",
+       [3]byte{124, 106, 219}: "SafeTone Technology Co.,Ltd",
+       [3]byte{124, 106, 243}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{124, 107, 51}:  "Tenyu Tech Co. Ltd.",
+       [3]byte{124, 107, 82}:  "Tigaro Wireless",
+       [3]byte{124, 107, 247}: "NTI co., ltd.",
+       [3]byte{124, 108, 57}:  "PIXSYS SRL",
+       [3]byte{124, 108, 143}: "AMS NEVE LTD",
+       [3]byte{124, 109, 98}:  "Apple, Inc.",
+       [3]byte{124, 109, 248}: "Apple, Inc.",
+       [3]byte{124, 111, 6}:   "Caterpillar Trimble Control Technologies",
+       [3]byte{124, 111, 248}: "ShenZhen ACTO Digital Video Technology Co.,Ltd.",
+       [3]byte{124, 112, 188}: "IEEE Registration Authority",
+       [3]byte{124, 113, 118}: "Wuxi iData Technology Company Ltd.",
+       [3]byte{124, 114, 228}: "Unikey Technologies",
+       [3]byte{124, 115, 139}: "Cocoon Alarm Ltd",
+       [3]byte{124, 118, 48}:  "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{124, 118, 53}:  "Intel Corporate",
+       [3]byte{124, 118, 115}: "ENMAS GmbH",
+       [3]byte{124, 120, 126}: "Samsung Electronics Co.,Ltd",
+       [3]byte{124, 121, 232}: "PayRange Inc.",
+       [3]byte{124, 122, 83}:  "Phytrex Technology Corp.",
+       [3]byte{124, 122, 145}: "Intel Corporate",
+       [3]byte{124, 123, 139}: "Control Concepts, Inc.",
+       [3]byte{124, 123, 228}: "Z'SEDAI KENKYUSHO CORPORATION",
+       [3]byte{124, 125, 61}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{124, 125, 65}:  "Jinmuyu Electronics Co., Ltd.",
+       [3]byte{124, 130, 45}:  "Nortec",
+       [3]byte{124, 130, 116}: "Shenzhen Hikeen Technology CO.,LTD",
+       [3]byte{124, 131, 6}:   "Glen Dimplex Nordic as",
+       [3]byte{124, 139, 202}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{124, 141, 145}: "Shanghai Hongzhuo Information Technology co.,LTD",
+       [3]byte{124, 142, 228}: "Texas Instruments",
+       [3]byte{124, 145, 34}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{124, 148, 178}: "Philips Healthcare PCCI",
+       [3]byte{124, 149, 177}: "Aerohive Networks Inc.",
+       [3]byte{124, 149, 243}: "Cisco Systems, Inc",
+       [3]byte{124, 151, 99}:  "Openmatics s.r.o.",
+       [3]byte{124, 154, 155}: "VSE valencia smart energy",
+       [3]byte{124, 161, 93}:  "GN ReSound A/S",
+       [3]byte{124, 162, 55}:  "King Slide Technology CO., LTD.",
+       [3]byte{124, 162, 62}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{124, 162, 155}: "D.SignT GmbH & Co. KG",
+       [3]byte{124, 166, 29}:  "MHL, LLC",
+       [3]byte{124, 169, 125}: "Objenious",
+       [3]byte{124, 171, 37}:  "MESMO TECHNOLOGY INC.",
+       [3]byte{124, 172, 178}: "Bosch Software Innovations GmbH",
+       [3]byte{124, 173, 116}: "Cisco Systems, Inc",
+       [3]byte{124, 176, 62}:  "OSRAM GmbH",
+       [3]byte{124, 176, 194}: "Intel Corporate",
+       [3]byte{124, 177, 93}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{124, 177, 119}: "Satelco AG",
+       [3]byte{124, 178, 27}:  "Cisco SPVTG",
+       [3]byte{124, 178, 50}:  "Hui Zhou Gaoshengda Technology Co.,LTD",
+       [3]byte{124, 178, 92}:  "Acacia Communications",
+       [3]byte{124, 181, 66}:  "ACES Technology",
+       [3]byte{124, 183, 51}:  "ASKEY COMPUTER CORP",
+       [3]byte{124, 183, 123}: "Paradigm Electronics Inc",
+       [3]byte{124, 185, 96}:  "Shanghai X-Cheng telecom LTD",
+       [3]byte{124, 186, 204}: "IEEE Registration Authority",
+       [3]byte{124, 187, 111}: "Cosco Electronics Co., Ltd.",
+       [3]byte{124, 187, 138}: "Nintendo Co., Ltd.",
+       [3]byte{124, 189, 6}:   "AE REFUsol",
+       [3]byte{124, 191, 136}: "Mobilicom LTD",
+       [3]byte{124, 191, 177}: "ARRIS Group, Inc.",
+       [3]byte{124, 195, 161}: "Apple, Inc.",
+       [3]byte{124, 196, 239}: "Devialet",
+       [3]byte{124, 197, 55}:  "Apple, Inc.",
+       [3]byte{124, 198, 196}: "Kolff Computer Supplies b.v.",
+       [3]byte{124, 199, 9}:   "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+       [3]byte{124, 200, 171}: "Acro Associates, Inc.",
+       [3]byte{124, 200, 208}: "TIANJIN YAAN TECHNOLOGY CO., LTD.",
+       [3]byte{124, 200, 215}: "Damalisk",
+       [3]byte{124, 201, 90}:  "Dell EMC",
+       [3]byte{124, 203, 13}:  "Antaira Technologies, LLC",
+       [3]byte{124, 203, 226}: "IEEE Registration Authority",
+       [3]byte{124, 204, 31}:  "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{124, 204, 184}: "Intel Corporate",
+       [3]byte{124, 205, 17}:  "MS-Magnet",
+       [3]byte{124, 205, 60}:  "Guangzhou Juzing Technology Co., Ltd",
+       [3]byte{124, 207, 207}: "Shanghai SEARI Intelligent System Co., Ltd",
+       [3]byte{124, 209, 195}: "Apple, Inc.",
+       [3]byte{124, 211, 10}:  "INVENTEC Corporation",
+       [3]byte{124, 215, 98}:  "Freestyle Technology Pty Ltd",
+       [3]byte{124, 216, 68}:  "Enmotus Inc",
+       [3]byte{124, 217, 254}: "New Cosmos Electric Co., Ltd.",
+       [3]byte{124, 218, 132}: "Dongnian Networks Inc.",
+       [3]byte{124, 221, 17}:  "Chongqing MAS SCI&TECH.Co.,Ltd",
+       [3]byte{124, 221, 32}:  "IOXOS Technologies S.A.",
+       [3]byte{124, 221, 118}: "Suzhou Hanming Technologies Co., Ltd.",
+       [3]byte{124, 221, 144}: "Shenzhen Ogemray Technology Co., Ltd.",
+       [3]byte{124, 224, 68}:  "NEON Inc",
+       [3]byte{124, 225, 255}: "Computer Performance, Inc. DBA Digital Loggers, Inc.",
+       [3]byte{124, 226, 202}: "Juniper Networks",
+       [3]byte{124, 228, 170}: "Private",
+       [3]byte{124, 229, 36}:  "Quirky, Inc.",
+       [3]byte{124, 229, 107}: "ESEN Optoelectronics Technology Co.,Ltd.",
+       [3]byte{124, 233, 124}: "ITEL MOBILE LIMITED",
+       [3]byte{124, 233, 211}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{124, 235, 127}: "Dmet Products Corp.",
+       [3]byte{124, 235, 174}: "Ridgeline Instruments",
+       [3]byte{124, 235, 234}: "ASCT",
+       [3]byte{124, 236, 121}: "Texas Instruments",
+       [3]byte{124, 237, 141}: "Microsoft",
+       [3]byte{124, 239, 24}:  "Creative Product Design Pty. Ltd.",
+       [3]byte{124, 239, 138}: "Inhon International Ltd.",
+       [3]byte{124, 240, 95}:  "Apple, Inc.",
+       [3]byte{124, 240, 152}: "Bee Beans Technologies, Inc.",
+       [3]byte{124, 240, 186}: "Linkwell Telesystems Pvt Ltd",
+       [3]byte{124, 244, 41}:  "NUUO Inc.",
+       [3]byte{124, 248, 84}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{124, 249, 14}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{124, 249, 92}:  "U.I. Lapp GmbH",
+       [3]byte{124, 250, 223}: "Apple, Inc.",
+       [3]byte{124, 252, 60}:  "Visteon Corporation",
+       [3]byte{124, 254, 40}:  "Salutron Inc.",
+       [3]byte{124, 254, 78}:  "Shenzhen Safe vision Technology Co.,LTD",
+       [3]byte{124, 254, 144}: "Mellanox Technologies, Inc.",
+       [3]byte{124, 255, 98}:  "Huizhou Super Electron Technology Co.,Ltd.",
+       [3]byte{128, 0, 11}:    "Intel Corporate",
+       [3]byte{128, 0, 16}:    "AT&T",
+       [3]byte{128, 0, 110}:   "Apple, Inc.",
+       [3]byte{128, 1, 132}:   "HTC Corporation",
+       [3]byte{128, 2, 223}:   "ORA Inc.",
+       [3]byte{128, 5, 223}:   "Montage Technology Group Limited",
+       [3]byte{128, 7, 162}:   "Esson Technology Inc.",
+       [3]byte{128, 9, 2}:     "Keysight Technologies, Inc.",
+       [3]byte{128, 10, 6}:    "COMTEC co.,ltd",
+       [3]byte{128, 10, 128}:  "IEEE Registration Authority",
+       [3]byte{128, 11, 81}:   "Chengdu XGimi Technology Co.,Ltd",
+       [3]byte{128, 13, 215}:  "Latticework, Inc",
+       [3]byte{128, 14, 36}:   "ForgetBox",
+       [3]byte{128, 19, 130}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{128, 20, 64}:   "Sunlit System Technology Corp",
+       [3]byte{128, 20, 168}:  "Guangzhou V-SOLUTION Electronic Technology Co., Ltd.",
+       [3]byte{128, 22, 183}:  "Brunel University",
+       [3]byte{128, 23, 125}:  "Nortel Networks",
+       [3]byte{128, 24, 68}:   "Dell Inc.",
+       [3]byte{128, 24, 167}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{128, 25, 52}:   "Intel Corporate",
+       [3]byte{128, 25, 103}:  "Shanghai Reallytek Information Technology  Co.,Ltd",
+       [3]byte{128, 25, 254}:  "JianLing Technology CO., LTD",
+       [3]byte{128, 29, 170}:  "Avaya Inc",
+       [3]byte{128, 31, 2}:    "Edimax Technology Co. Ltd.",
+       [3]byte{128, 32, 175}:  "Trade FIDES, a.s.",
+       [3]byte{128, 34, 117}:  "Beijing Beny Wave Technology Co Ltd",
+       [3]byte{128, 38, 137}:  "D-Link International",
+       [3]byte{128, 41, 148}:  "Technicolor CH USA Inc.",
+       [3]byte{128, 42, 168}:  "Ubiquiti Networks Inc.",
+       [3]byte{128, 42, 250}:  "Germaneers GmbH",
+       [3]byte{128, 45, 225}:  "Solarbridge Technologies",
+       [3]byte{128, 46, 20}:   "azeti Networks AG",
+       [3]byte{128, 47, 222}:  "Zurich Instruments AG",
+       [3]byte{128, 48, 220}:  "Texas Instruments",
+       [3]byte{128, 52, 87}:   "OT Systems Limited",
+       [3]byte{128, 55, 115}:  "NETGEAR",
+       [3]byte{128, 56, 150}:  "SHARP Corporation",
+       [3]byte{128, 56, 188}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{128, 56, 253}:  "LeapFrog Enterprises, Inc.",
+       [3]byte{128, 57, 229}:  "PATLITE CORPORATION",
+       [3]byte{128, 58, 10}:   "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{128, 58, 89}:   "AT&T",
+       [3]byte{128, 59, 42}:   "ABB Xiamen Low Voltage Equipment Co.,Ltd.",
+       [3]byte{128, 59, 154}:  "ghe-ces electronic ag",
+       [3]byte{128, 59, 246}:  "LOOK EASY INTERNATIONAL LIMITED",
+       [3]byte{128, 63, 93}:   "Winstars Technology Ltd",
+       [3]byte{128, 63, 214}:  "bytes at work AG",
+       [3]byte{128, 65, 78}:   "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+       [3]byte{128, 66, 124}:  "Adolf Tedsen GmbH & Co. KG",
+       [3]byte{128, 71, 49}:   "Packet Design, Inc.",
+       [3]byte{128, 72, 165}:  "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{128, 73, 113}:  "Apple, Inc.",
+       [3]byte{128, 75, 32}:   "Ventilation Control",
+       [3]byte{128, 78, 129}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{128, 79, 88}:   "ThinkEco, Inc.",
+       [3]byte{128, 80, 27}:   "Nokia Corporation",
+       [3]byte{128, 80, 103}:  "W & D TECHNOLOGY CORPORATION",
+       [3]byte{128, 86, 242}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{128, 87, 25}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{128, 88, 197}:  "NovaTec Kommunikationstechnik GmbH",
+       [3]byte{128, 88, 248}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{128, 89, 253}:  "Noviga",
+       [3]byte{128, 90, 4}:    "LG Electronics (Mobile Communications)",
+       [3]byte{128, 94, 12}:   "YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.",
+       [3]byte{128, 94, 192}:  "YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.",
+       [3]byte{128, 96, 7}:    "RIM",
+       [3]byte{128, 97, 95}:   "Beijing Sinead Technology Co., Ltd.",
+       [3]byte{128, 97, 143}:  "Shenzhen sangfei consumer communications co.,ltd",
+       [3]byte{128, 100, 89}:  "Nimbus Inc.",
+       [3]byte{128, 101, 109}: "Samsung Electronics Co.,Ltd",
+       [3]byte{128, 101, 233}: "BenQ Corporation",
+       [3]byte{128, 102, 41}:  "Prescope Technologies CO.,LTD.",
+       [3]byte{128, 106, 176}: "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{128, 108, 27}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{128, 108, 139}: "KAESER KOMPRESSOREN AG",
+       [3]byte{128, 108, 188}: "NET New Electronic Technology GmbH",
+       [3]byte{128, 113, 31}:  "Juniper Networks",
+       [3]byte{128, 113, 122}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{128, 115, 159}: "KYOCERA CORPORATION",
+       [3]byte{128, 116, 89}:  "K's Co.,Ltd.",
+       [3]byte{128, 118, 147}: "Newag SA",
+       [3]byte{128, 121, 174}: "ShanDong Tecsunrise  Co.,Ltd",
+       [3]byte{128, 122, 127}: "ABB Genway Xiamen Electrical Equipment CO., LTD",
+       [3]byte{128, 122, 191}: "HTC Corporation",
+       [3]byte{128, 123, 30}:  "Corsair Components",
+       [3]byte{128, 123, 133}: "IEEE Registration Authority",
+       [3]byte{128, 125, 27}:  "Neosystem Co. Ltd.",
+       [3]byte{128, 125, 227}: "Chongqing Sichuan Instrument Microcircuit Co.LTD.",
+       [3]byte{128, 129, 165}: "TONGQING COMMUNICATION EQUIPMENT (SHENZHEN) Co.,Ltd",
+       [3]byte{128, 130, 135}: "ATCOM Technology Co.Ltd.",
+       [3]byte{128, 134, 152}: "Netronics Technologies Inc.",
+       [3]byte{128, 134, 242}: "Intel Corporate",
+       [3]byte{128, 137, 23}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{128, 139, 92}:  "Shenzhen Runhuicheng Technology Co., Ltd",
+       [3]byte{128, 140, 151}: "Kaonmedia CO., LTD.",
+       [3]byte{128, 141, 183}: "Hewlett Packard Enterprise",
+       [3]byte{128, 145, 42}:  "Lih Rong electronic Enterprise Co., Ltd.",
+       [3]byte{128, 145, 192}: "AgileMesh, Inc.",
+       [3]byte{128, 146, 159}: "Apple, Inc.",
+       [3]byte{128, 147, 147}: "Xapt GmbH",
+       [3]byte{128, 148, 108}: "TOKYO RADAR CORPORATION",
+       [3]byte{128, 150, 177}: "ARRIS Group, Inc.",
+       [3]byte{128, 150, 202}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{128, 151, 27}:  "Altenergy Power System,Inc.",
+       [3]byte{128, 155, 32}:  "Intel Corporate",
+       [3]byte{128, 159, 171}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{128, 160, 54}:  "Shanghai MXCHIP Information Technology Co., Ltd.",
+       [3]byte{128, 161, 171}: "Intellisis",
+       [3]byte{128, 161, 215}: "Shanghai DareGlobal Technologies Co.,Ltd",
+       [3]byte{128, 165, 137}: "AzureWave Technology Inc.",
+       [3]byte{128, 168, 93}:  "Osterhout Design Group",
+       [3]byte{128, 170, 164}: "USAG",
+       [3]byte{128, 172, 172}: "Juniper Networks",
+       [3]byte{128, 173, 103}: "Kasda Networks Inc",
+       [3]byte{128, 176, 61}:  "Apple, Inc.",
+       [3]byte{128, 178, 25}:  "ELEKTRON TECHNOLOGY UK LIMITED",
+       [3]byte{128, 178, 52}:  "Technicolor CH USA Inc.",
+       [3]byte{128, 178, 137}: "Forworld Electronics Ltd.",
+       [3]byte{128, 179, 42}:  "Alstom Grid",
+       [3]byte{128, 182, 134}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{128, 183, 8}:   "Blue Danube Systems, Inc",
+       [3]byte{128, 183, 9}:   "Viptela, Inc",
+       [3]byte{128, 185, 92}:  "ELFTECH Co., Ltd.",
+       [3]byte{128, 186, 172}: "TeleAdapt Ltd",
+       [3]byte{128, 186, 230}: "Neets",
+       [3]byte{128, 187, 235}: "Satmap Systems Ltd",
+       [3]byte{128, 190, 5}:   "Apple, Inc.",
+       [3]byte{128, 193, 110}: "Hewlett Packard",
+       [3]byte{128, 197, 230}: "Microsoft Corporation",
+       [3]byte{128, 197, 242}: "AzureWave Technology Inc.",
+       [3]byte{128, 198, 63}:  "Remec Broadband Wireless , LLC",
+       [3]byte{128, 198, 171}: "Technicolor CH USA Inc.",
+       [3]byte{128, 198, 202}: "Endian s.r.l.",
+       [3]byte{128, 199, 85}:  "Panasonic Appliances Company",
+       [3]byte{128, 200, 98}:  "Openpeak, Inc",
+       [3]byte{128, 206, 177}: "Theissen Training Systems GmbH",
+       [3]byte{128, 207, 65}:  "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{128, 208, 25}:  "Embed, Inc",
+       [3]byte{128, 208, 155}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{128, 209, 96}:  "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{128, 209, 139}: "Hangzhou I'converge Technology Co.,Ltd",
+       [3]byte{128, 210, 29}:  "AzureWave Technology Inc.",
+       [3]byte{128, 212, 51}:  "LzLabs GmbH",
+       [3]byte{128, 212, 165}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{128, 214, 5}:   "Apple, Inc.",
+       [3]byte{128, 215, 51}:  "QSR Automations, Inc.",
+       [3]byte{128, 219, 49}:  "Power Quotient International Co., Ltd.",
+       [3]byte{128, 224, 29}:  "Cisco Systems, Inc",
+       [3]byte{128, 228, 218}: "IEEE Registration Authority",
+       [3]byte{128, 230, 80}:  "Apple, Inc.",
+       [3]byte{128, 232, 111}: "Cisco Systems, Inc",
+       [3]byte{128, 234, 35}:  "Wistron Neweb Corporation",
+       [3]byte{128, 234, 150}: "Apple, Inc.",
+       [3]byte{128, 234, 202}: "Dialog Semiconductor Hellas SA",
+       [3]byte{128, 235, 119}: "Wistron Corporation",
+       [3]byte{128, 237, 44}:  "Apple, Inc.",
+       [3]byte{128, 238, 115}: "Shuttle Inc.",
+       [3]byte{128, 242, 94}:  "Kyynel",
+       [3]byte{128, 245, 3}:   "ARRIS Group, Inc.",
+       [3]byte{128, 245, 147}: "IRCO Sistemas de Telecomunicación S.A.",
+       [3]byte{128, 246, 46}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{128, 248, 235}: "RayTight",
+       [3]byte{128, 250, 91}:  "CLEVO CO.",
+       [3]byte{128, 251, 6}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{128, 255, 168}: "UNIDIS",
+       [3]byte{132, 0, 45}:    "PEGATRON CORPORATION",
+       [3]byte{132, 0, 210}:   "Sony Mobile Communications AB",
+       [3]byte{132, 1, 167}:   "Greyware Automation Products, Inc",
+       [3]byte{132, 4, 210}:   "Kirale Technologies SL",
+       [3]byte{132, 11, 45}:   "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{132, 15, 69}:   "Shanghai GMT Digital Technologies Co., Ltd",
+       [3]byte{132, 16, 13}:   "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{132, 17, 158}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{132, 22, 249}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{132, 23, 21}:   "GP Electronics (HK) Ltd.",
+       [3]byte{132, 23, 102}:  "Weifang GoerTek Technology Co.,Ltd.",
+       [3]byte{132, 24, 38}:   "Osram GmbH",
+       [3]byte{132, 24, 58}:   "Ruckus Wireless",
+       [3]byte{132, 24, 136}:  "Juniper Networks",
+       [3]byte{132, 27, 56}:   "Shenzhen Excelsecu Data Technology Co.,Ltd",
+       [3]byte{132, 27, 94}:   "NETGEAR",
+       [3]byte{132, 30, 38}:   "KERNEL-I Co.,LTD",
+       [3]byte{132, 32, 150}:  "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+       [3]byte{132, 33, 65}:   "Shenzhen Ginwave Technologies Ltd.",
+       [3]byte{132, 33, 241}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{132, 36, 141}:  "Zebra Technologies Inc",
+       [3]byte{132, 37, 25}:   "Samsung Electronics",
+       [3]byte{132, 37, 63}:   "silex technology, Inc.",
+       [3]byte{132, 37, 164}:  "Tariox Limited",
+       [3]byte{132, 37, 219}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{132, 38, 21}:   "ADB Broadband Italia",
+       [3]byte{132, 38, 43}:   "Nokia",
+       [3]byte{132, 38, 144}:  "BEIJING THOUGHT SCIENCE CO.,LTD.",
+       [3]byte{132, 39, 206}:  "Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints",
+       [3]byte{132, 40, 90}:   "Saffron Solutions Inc",
+       [3]byte{132, 41, 20}:   "EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG",
+       [3]byte{132, 41, 153}:  "Apple, Inc.",
+       [3]byte{132, 43, 43}:   "Dell Inc.",
+       [3]byte{132, 43, 80}:   "Huria Co.,Ltd.",
+       [3]byte{132, 43, 188}:  "Modelleisenbahn GmbH",
+       [3]byte{132, 44, 128}:  "Sichuan Changhong Electric Ltd.",
+       [3]byte{132, 46, 39}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{132, 47, 117}:  "Innokas Group",
+       [3]byte{132, 48, 229}:  "SkyHawke Technologies, LLC",
+       [3]byte{132, 50, 234}:  "ANHUI WANZTEN P&T CO., LTD",
+       [3]byte{132, 52, 151}:  "Hewlett Packard",
+       [3]byte{132, 54, 17}:   "hyungseul publishing networks",
+       [3]byte{132, 56, 53}:   "Apple, Inc.",
+       [3]byte{132, 56, 56}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{132, 58, 75}:   "Intel Corporate",
+       [3]byte{132, 61, 198}:  "Cisco Systems, Inc",
+       [3]byte{132, 63, 78}:   "Tri-Tech Manufacturing, Inc.",
+       [3]byte{132, 64, 118}:  "Drivenets",
+       [3]byte{132, 65, 103}:  "Apple, Inc.",
+       [3]byte{132, 68, 100}:  "ServerU Inc",
+       [3]byte{132, 71, 101}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{132, 72, 35}:   "WOXTER TECHNOLOGY Co. Ltd",
+       [3]byte{132, 73, 21}:   "vArmour Networks, Inc.",
+       [3]byte{132, 75, 183}:  "Beijing Sankuai Online Technology Co.,Ltd",
+       [3]byte{132, 75, 245}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{132, 79, 3}:    "Ablelink Electronics Ltd",
+       [3]byte{132, 80, 154}:  "Easy Soft TV Co., Ltd",
+       [3]byte{132, 81, 129}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{132, 85, 165}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{132, 86, 156}:  "Coho Data, Inc.,",
+       [3]byte{132, 87, 135}:  "DVR C&C Co., Ltd.",
+       [3]byte{132, 90, 129}:  "ffly4u",
+       [3]byte{132, 91, 18}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{132, 92, 147}:  "Chabrier Services",
+       [3]byte{132, 93, 215}:  "Shenzhen Netcom Electronics Co.,Ltd",
+       [3]byte{132, 97, 160}:  "ARRIS Group, Inc.",
+       [3]byte{132, 98, 35}:   "Shenzhen Coship Electronics Co., Ltd.",
+       [3]byte{132, 98, 166}:  "EuroCB (Phils), Inc.",
+       [3]byte{132, 99, 214}:  "Microsoft Corporation",
+       [3]byte{132, 104, 62}:  "Intel Corporate",
+       [3]byte{132, 106, 237}: "Wireless Tsukamoto.,co.LTD",
+       [3]byte{132, 110, 177}: "Park Assist LLC",
+       [3]byte{132, 114, 7}:   "I&C Technology",
+       [3]byte{132, 115, 3}:   "Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.",
+       [3]byte{132, 116, 42}:  "zte corporation",
+       [3]byte{132, 118, 22}:  "Addat s.r.o.",
+       [3]byte{132, 119, 120}: "Cochlear Limited",
+       [3]byte{132, 120, 139}: "Apple, Inc.",
+       [3]byte{132, 120, 172}: "Cisco Systems, Inc",
+       [3]byte{132, 121, 51}:  "profichip GmbH",
+       [3]byte{132, 121, 115}: "Shanghai Baud Data Communication Co.,Ltd.",
+       [3]byte{132, 122, 136}: "HTC Corporation",
+       [3]byte{132, 123, 235}: "Dell Inc.",
+       [3]byte{132, 125, 80}:  "Holley Metering Limited",
+       [3]byte{132, 126, 64}:  "Texas Instruments",
+       [3]byte{132, 128, 45}:  "Cisco Systems, Inc",
+       [3]byte{132, 130, 244}: "Beijing Huasun Unicreate Technology Co., Ltd",
+       [3]byte{132, 131, 25}:  "Hangzhou Zero Zero Technology Co., Ltd.",
+       [3]byte{132, 131, 54}:  "Newrun",
+       [3]byte{132, 131, 113}: "Avaya Inc",
+       [3]byte{132, 132, 51}:  "Paradox Engineering SA",
+       [3]byte{132, 133, 6}:   "Apple, Inc.",
+       [3]byte{132, 133, 10}:  "Hella Sonnen- und Wetterschutztechnik GmbH",
+       [3]byte{132, 134, 243}: "Greenvity Communications",
+       [3]byte{132, 137, 173}: "Apple, Inc.",
+       [3]byte{132, 141, 132}: "Rajant Corporation",
+       [3]byte{132, 141, 199}: "Cisco SPVTG",
+       [3]byte{132, 142, 12}:  "Apple, Inc.",
+       [3]byte{132, 142, 150}: "Embertec Pty Ltd",
+       [3]byte{132, 142, 223}: "Sony Mobile Communications AB",
+       [3]byte{132, 143, 105}: "Dell Inc.",
+       [3]byte{132, 144, 0}:   "Arnold & Richter Cine Technik",
+       [3]byte{132, 147, 12}:  "InCoax Networks Europe AB",
+       [3]byte{132, 148, 140}: "Hitron Technologies. Inc",
+       [3]byte{132, 150, 129}: "Cathay Communication Co.,Ltd",
+       [3]byte{132, 150, 216}: "ARRIS Group, Inc.",
+       [3]byte{132, 151, 184}: "Memjet Inc.",
+       [3]byte{132, 152, 102}: "Samsung Electronics Co.,Ltd",
+       [3]byte{132, 156, 166}: "Arcadyan Technology Corporation",
+       [3]byte{132, 157, 100}: "SMC Corporation",
+       [3]byte{132, 157, 197}: "Centera Photonics Inc.",
+       [3]byte{132, 159, 181}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{132, 161, 52}:  "Apple, Inc.",
+       [3]byte{132, 161, 209}: "Sagemcom Broadband SAS",
+       [3]byte{132, 164, 35}:  "Sagemcom Broadband SAS",
+       [3]byte{132, 164, 102}: "Samsung Electronics Co.,Ltd",
+       [3]byte{132, 166, 200}: "Intel Corporate",
+       [3]byte{132, 167, 131}: "Alcatel Lucent",
+       [3]byte{132, 167, 136}: "Perples",
+       [3]byte{132, 168, 228}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{132, 169, 145}: "Cyber Trans Japan Co.,Ltd.",
+       [3]byte{132, 169, 196}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{132, 170, 156}: "MitraStar Technology Corp.",
+       [3]byte{132, 172, 164}: "Beijing Novel Super Digital TV Technology Co., Ltd",
+       [3]byte{132, 172, 251}: "Crouzet Automatismes",
+       [3]byte{132, 173, 88}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{132, 175, 31}:  "Beat System Service Co,. Ltd.",
+       [3]byte{132, 175, 236}: "BUFFALO.INC",
+       [3]byte{132, 177, 83}:  "Apple, Inc.",
+       [3]byte{132, 178, 97}:  "Cisco Systems, Inc",
+       [3]byte{132, 181, 23}:  "Cisco Systems, Inc",
+       [3]byte{132, 181, 65}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{132, 181, 156}: "Juniper Networks",
+       [3]byte{132, 184, 2}:   "Cisco Systems, Inc",
+       [3]byte{132, 186, 59}:  "CANON INC.",
+       [3]byte{132, 190, 82}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{132, 192, 239}: "Samsung Electronics Co.,Ltd",
+       [3]byte{132, 193, 193}: "Juniper Networks",
+       [3]byte{132, 194, 228}: "Jiangsu Qinheng Co., Ltd.",
+       [3]byte{132, 195, 232}: "Vaillant GmbH",
+       [3]byte{132, 199, 39}:  "Gnodal Ltd",
+       [3]byte{132, 199, 169}: "C3PO S.A.",
+       [3]byte{132, 199, 234}: "Sony Mobile Communications AB",
+       [3]byte{132, 200, 177}: "Incognito Software Systems Inc.",
+       [3]byte{132, 201, 178}: "D-Link International",
+       [3]byte{132, 205, 98}:  "ShenZhen IDWELL Technology CO.,Ltd",
+       [3]byte{132, 207, 191}: "Fairphone",
+       [3]byte{132, 211, 42}:  "IEEE 1905.1",
+       [3]byte{132, 212, 126}: "Aruba Networks",
+       [3]byte{132, 212, 200}: "Widex A/S",
+       [3]byte{132, 214, 208}: "Amazon Technologies Inc.",
+       [3]byte{132, 217, 49}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{132, 217, 200}: "Unipattern Co.,",
+       [3]byte{132, 219, 47}:  "Sierra Wireless Inc",
+       [3]byte{132, 219, 172}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{132, 219, 252}: "Nokia",
+       [3]byte{132, 221, 32}:  "Texas Instruments",
+       [3]byte{132, 221, 183}: "Cilag GmbH International",
+       [3]byte{132, 222, 61}:  "Crystal Vision Ltd",
+       [3]byte{132, 223, 12}:  "NET2GRID BV",
+       [3]byte{132, 223, 25}:  "Chuango Security Technology Corporation",
+       [3]byte{132, 224, 88}:  "ARRIS Group, Inc.",
+       [3]byte{132, 224, 244}: "IEEE Registration Authority",
+       [3]byte{132, 227, 35}:  "Green Wave Telecommunication SDN BHD",
+       [3]byte{132, 227, 39}:  "TAILYN TECHNOLOGIES INC",
+       [3]byte{132, 228, 217}: "Shenzhen NEED technology Ltd.",
+       [3]byte{132, 230, 41}:  "Bluwan SA",
+       [3]byte{132, 231, 20}:  "Liang Herng Enterprise,Co.Ltd.",
+       [3]byte{132, 234, 153}: "Vieworks",
+       [3]byte{132, 235, 24}:  "Texas Instruments",
+       [3]byte{132, 237, 51}:  "BBMC Co.,Ltd",
+       [3]byte{132, 239, 24}:  "Intel Corporate",
+       [3]byte{132, 241, 41}:  "Metrascale Inc.",
+       [3]byte{132, 244, 147}: "OMS spol. s.r.o.",
+       [3]byte{132, 246, 76}:  "Cross Point BV",
+       [3]byte{132, 246, 250}: "Miovision Technologies Incorporated",
+       [3]byte{132, 252, 172}: "Apple, Inc.",
+       [3]byte{132, 252, 254}: "Apple, Inc.",
+       [3]byte{132, 254, 158}: "RTC Industries, Inc.",
+       [3]byte{132, 254, 220}: "Borqs Beijing Ltd.",
+       [3]byte{136, 1, 242}:   "Vitec System Engineering Inc.",
+       [3]byte{136, 3, 85}:    "Arcadyan Technology Corporation",
+       [3]byte{136, 7, 75}:    "LG Electronics (Mobile Communications)",
+       [3]byte{136, 9, 5}:     "MTMCommunications",
+       [3]byte{136, 9, 175}:   "Masimo Corporation",
+       [3]byte{136, 15, 16}:   "Huami Information Technology Co.,Ltd.",
+       [3]byte{136, 15, 182}:  "Jabil Circuits India Pvt Ltd,-EHTP unit",
+       [3]byte{136, 16, 54}:   "Panodic(ShenZhen) Electronics Limted",
+       [3]byte{136, 18, 78}:   "Qualcomm Inc.",
+       [3]byte{136, 20, 43}:   "Protonic Holland",
+       [3]byte{136, 21, 68}:   "Cisco Meraki",
+       [3]byte{136, 24, 174}:  "Tamron Co., Ltd",
+       [3]byte{136, 27, 153}:  "SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.",
+       [3]byte{136, 29, 252}:  "Cisco Systems, Inc",
+       [3]byte{136, 31, 161}:  "Apple, Inc.",
+       [3]byte{136, 32, 18}:   "LMI Technologies",
+       [3]byte{136, 33, 227}:  "Nebusens, S.L.",
+       [3]byte{136, 35, 100}:  "Watchnet DVR Inc",
+       [3]byte{136, 35, 254}:  "TTTech Computertechnik AG",
+       [3]byte{136, 37, 44}:   "Arcadyan Technology Corporation",
+       [3]byte{136, 37, 147}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{136, 40, 179}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 41, 80}:   "Dalian Netmoon Tech Develop Co.,Ltd",
+       [3]byte{136, 43, 215}:  "ADDÉNERGIE  TECHNOLOGIES",
+       [3]byte{136, 46, 90}:   "storONE",
+       [3]byte{136, 48, 138}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{136, 50, 155}:  "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{136, 51, 20}:   "Texas Instruments",
+       [3]byte{136, 51, 190}:  "Ivenix, Inc.",
+       [3]byte{136, 53, 76}:   "Transics",
+       [3]byte{136, 54, 18}:   "SRC Computers, LLC",
+       [3]byte{136, 54, 95}:   "LG Electronics (Mobile Communications)",
+       [3]byte{136, 54, 108}:  "EFM Networks",
+       [3]byte{136, 59, 139}:  "Cheering Connection Co. Ltd.",
+       [3]byte{136, 60, 28}:   "MERCURY CORPORATION",
+       [3]byte{136, 63, 211}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 65, 87}:   "Shenzhen Atsmart Technology Co.,Ltd.",
+       [3]byte{136, 65, 193}:  "ORBISAT DA AMAZONIA IND E AEROL SA",
+       [3]byte{136, 65, 252}:  "AirTies Wireless Networks",
+       [3]byte{136, 67, 225}:  "Cisco Systems, Inc",
+       [3]byte{136, 68, 119}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 68, 246}:  "Nokia Corporation",
+       [3]byte{136, 70, 42}:   "Telechips Inc.",
+       [3]byte{136, 74, 234}:  "Texas Instruments",
+       [3]byte{136, 75, 57}:   "Siemens AG, Healthcare Sector",
+       [3]byte{136, 76, 207}:  "Pulzze Systems, Inc",
+       [3]byte{136, 80, 221}:  "Infiniband Trade Association",
+       [3]byte{136, 81, 251}:  "Hewlett Packard",
+       [3]byte{136, 83, 46}:   "Intel Corporate",
+       [3]byte{136, 83, 149}:  "Apple, Inc.",
+       [3]byte{136, 83, 212}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 87, 109}:  "XTA Electronics Ltd",
+       [3]byte{136, 87, 238}:  "BUFFALO.INC",
+       [3]byte{136, 90, 146}:  "Cisco Systems, Inc",
+       [3]byte{136, 91, 221}:  "Aerohive Networks Inc.",
+       [3]byte{136, 92, 71}:   "Alcatel Lucent",
+       [3]byte{136, 93, 144}:  "IEEE Registration Authority",
+       [3]byte{136, 93, 251}:  "zte corporation",
+       [3]byte{136, 97, 90}:   "Siano Mobile Silicon Ltd.",
+       [3]byte{136, 99, 223}:  "Apple, Inc.",
+       [3]byte{136, 102, 57}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 102, 165}: "Apple, Inc.",
+       [3]byte{136, 104, 92}:  "Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd",
+       [3]byte{136, 106, 177}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{136, 106, 227}: "Alpha Networks Inc.",
+       [3]byte{136, 107, 15}:  "Bluegiga Technologies OY",
+       [3]byte{136, 107, 68}:  "Sunnovo International Limited",
+       [3]byte{136, 107, 110}: "Apple, Inc.",
+       [3]byte{136, 107, 118}: "CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD",
+       [3]byte{136, 112, 51}:  "Hangzhou Silan Microelectronic Inc",
+       [3]byte{136, 112, 140}: "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{136, 112, 239}: "SC Professional Trading Co., Ltd.",
+       [3]byte{136, 113, 229}: "Amazon Technologies Inc.",
+       [3]byte{136, 115, 132}: "Toshiba",
+       [3]byte{136, 115, 152}: "K2E Tekpoint",
+       [3]byte{136, 117, 86}:  "Cisco Systems, Inc",
+       [3]byte{136, 117, 152}: "Samsung Electronics Co.,Ltd",
+       [3]byte{136, 120, 115}: "Intel Corporate",
+       [3]byte{136, 120, 156}: "Game Technologies SA",
+       [3]byte{136, 121, 91}:  "Konka Group Co., Ltd.",
+       [3]byte{136, 121, 126}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{136, 122, 49}:  "Velankani Electronics Pvt. Ltd.",
+       [3]byte{136, 127, 3}:   "Comper Technology Investment Limited",
+       [3]byte{136, 130, 121}: "Shenzhen RB-LINK Intelligent Technology Co.Ltd",
+       [3]byte{136, 131, 34}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{136, 131, 93}:  "FN-LINK TECHNOLOGY LIMITED",
+       [3]byte{136, 134, 3}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 134, 160}: "Simton Technologies, Ltd.",
+       [3]byte{136, 134, 194}: "STABILO International GmbH",
+       [3]byte{136, 135, 23}:  "CANON INC.",
+       [3]byte{136, 135, 221}: "DarbeeVision Inc.",
+       [3]byte{136, 137, 20}:  "All Components Incorporated",
+       [3]byte{136, 137, 100}: "GSI Electronics Inc.",
+       [3]byte{136, 139, 93}:  "Storage Appliance Corporation",
+       [3]byte{136, 140, 25}:  "Brady Corp Asia Pacific Ltd",
+       [3]byte{136, 144, 141}: "Cisco Systems, Inc",
+       [3]byte{136, 145, 102}: "Viewcooper Corp.",
+       [3]byte{136, 145, 221}: "Racktivity",
+       [3]byte{136, 148, 113}: "Brocade Communications Systems, Inc.",
+       [3]byte{136, 148, 126}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{136, 148, 249}: "Gemicom Technology, Inc.",
+       [3]byte{136, 149, 185}: "Unified Packet Systems Crop",
+       [3]byte{136, 150, 118}: "TTC MARCONI s.r.o.",
+       [3]byte{136, 150, 182}: "Global Fire Equipment S.A.",
+       [3]byte{136, 150, 242}: "Valeo Schalter und Sensoren GmbH",
+       [3]byte{136, 151, 223}: "Entrypass Corporation Sdn. Bhd.",
+       [3]byte{136, 152, 33}:  "TERAON",
+       [3]byte{136, 155, 57}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{136, 156, 166}: "BTB Korea INC",
+       [3]byte{136, 159, 250}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{136, 160, 132}: "Formation Data Systems",
+       [3]byte{136, 162, 94}:  "Juniper Networks",
+       [3]byte{136, 162, 215}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 163, 204}: "Amatis Controls",
+       [3]byte{136, 165, 189}: "QPCOM INC.",
+       [3]byte{136, 166, 198}: "Sagemcom Broadband SAS",
+       [3]byte{136, 167, 60}:  "Ragentek Technology Group",
+       [3]byte{136, 172, 193}: "Generiton Co., Ltd.",
+       [3]byte{136, 173, 67}:  "PEGATRON CORPORATION",
+       [3]byte{136, 173, 210}: "Samsung Electronics Co.,Ltd",
+       [3]byte{136, 174, 29}:  "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{136, 177, 17}:  "Intel Corporate",
+       [3]byte{136, 177, 104}: "Delta Control GmbH",
+       [3]byte{136, 177, 225}: "Mojo Networks, Inc.",
+       [3]byte{136, 180, 166}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{136, 182, 39}:  "Gembird Europe BV",
+       [3]byte{136, 184, 208}: "Dongguan Koppo Electronic Co.,Ltd",
+       [3]byte{136, 186, 127}: "Qfiednet Co., Ltd.",
+       [3]byte{136, 189, 120}: "Flaircomm Microelectronics,Inc.",
+       [3]byte{136, 191, 213}: "Simple Audio Ltd",
+       [3]byte{136, 194, 66}:  "Poynt Co.",
+       [3]byte{136, 194, 85}:  "Texas Instruments",
+       [3]byte{136, 195, 110}: "Beijing Ereneben lnformation Technology Limited",
+       [3]byte{136, 195, 179}: "SOVICO",
+       [3]byte{136, 198, 38}:  "Logitech, Inc",
+       [3]byte{136, 198, 99}:  "Apple, Inc.",
+       [3]byte{136, 201, 208}: "LG Electronics (Mobile Communications)",
+       [3]byte{136, 203, 135}: "Apple, Inc.",
+       [3]byte{136, 203, 165}: "Suzhou Torchstar Intelligent Technology Co.,Ltd",
+       [3]byte{136, 204, 69}:  "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+       [3]byte{136, 206, 250}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 207, 152}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 208, 57}:  "TCL Technoly Electronics(Huizhou).,Ltd",
+       [3]byte{136, 209, 113}: "BEGHELLI S.P.A",
+       [3]byte{136, 210, 116}: "zte corporation",
+       [3]byte{136, 211, 123}: "FirmTek, LLC",
+       [3]byte{136, 213, 12}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{136, 215, 188}: "DEP Company",
+       [3]byte{136, 215, 246}: "ASUSTek COMPUTER INC.",
+       [3]byte{136, 217, 98}:  "Canopus Systems US LLC",
+       [3]byte{136, 218, 26}:  "Redpine Signals, Inc.",
+       [3]byte{136, 220, 150}: "SENAO Networks, Inc.",
+       [3]byte{136, 221, 121}: "Voltaire",
+       [3]byte{136, 222, 169}: "Roku, Inc.",
+       [3]byte{136, 224, 160}: "Shenzhen VisionSTOR Technologies Co., Ltd",
+       [3]byte{136, 224, 243}: "Juniper Networks",
+       [3]byte{136, 225, 97}:  "Art Beijing Science and Technology Development Co., Ltd.",
+       [3]byte{136, 227, 171}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{136, 230, 3}:   "Avotek corporation",
+       [3]byte{136, 230, 40}:  "Shenzhen Kezhonglong Optoelectronic Technology Co.,Ltd",
+       [3]byte{136, 231, 18}:  "Whirlpool Corporation",
+       [3]byte{136, 231, 166}: "iKnowledge Integration Corp.",
+       [3]byte{136, 232, 127}: "Apple, Inc.",
+       [3]byte{136, 232, 248}: "YONG TAI ELECTRONIC (DONGGUAN) LTD.",
+       [3]byte{136, 233, 23}:  "Tamaggo",
+       [3]byte{136, 237, 28}:  "Cudo Communication Co., Ltd.",
+       [3]byte{136, 240, 49}:  "Cisco Systems, Inc",
+       [3]byte{136, 240, 119}: "Cisco Systems, Inc",
+       [3]byte{136, 244, 136}: "cellon communications technology(shenzhen)Co.,Ltd.",
+       [3]byte{136, 244, 144}: "Jetmobile Pte Ltd",
+       [3]byte{136, 247, 199}: "Technicolor CH USA Inc.",
+       [3]byte{136, 253, 21}:  "LINEEYE CO., LTD",
+       [3]byte{136, 254, 214}: "ShangHai WangYong Software Co., Ltd.",
+       [3]byte{140, 0, 109}:   "Apple, Inc.",
+       [3]byte{140, 4, 255}:   "Technicolor CH USA Inc.",
+       [3]byte{140, 5, 81}:    "Koubachi AG",
+       [3]byte{140, 7, 140}:   "FLOW DATA INC",
+       [3]byte{140, 8, 139}:   "Remote Solution",
+       [3]byte{140, 9, 244}:   "ARRIS Group, Inc.",
+       [3]byte{140, 12, 144}:  "Ruckus Wireless",
+       [3]byte{140, 12, 163}:  "Amper",
+       [3]byte{140, 13, 118}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{140, 14, 227}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{140, 15, 111}:  "PEGATRON CORPORATION",
+       [3]byte{140, 15, 131}:  "Angie Hospitality LLC",
+       [3]byte{140, 16, 212}:  "Sagemcom Broadband SAS",
+       [3]byte{140, 17, 203}:  "ABUS Security-Center GmbH & Co. KG",
+       [3]byte{140, 20, 125}:  "IEEE Registration Authority",
+       [3]byte{140, 24, 217}:  "Shenzhen RF Technology Co., Ltd",
+       [3]byte{140, 25, 45}:   "IEEE Registration Authority",
+       [3]byte{140, 26, 191}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{140, 31, 148}:  "RF Surgical System Inc.",
+       [3]byte{140, 33, 10}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{140, 37, 5}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{140, 39, 29}:   "QuantHouse",
+       [3]byte{140, 39, 138}:  "Vocollect Inc",
+       [3]byte{140, 41, 55}:   "Apple, Inc.",
+       [3]byte{140, 45, 170}:  "Apple, Inc.",
+       [3]byte{140, 47, 57}:   "IBA Dosimetry GmbH",
+       [3]byte{140, 47, 166}:  "Solid Optics B.V.",
+       [3]byte{140, 51, 48}:   "EmFirst Co., Ltd.",
+       [3]byte{140, 51, 87}:   "HiteVision Digital Media Technology Co.,Ltd.",
+       [3]byte{140, 52, 253}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{140, 57, 92}:   "Bit4id Srl",
+       [3]byte{140, 58, 227}:  "LG Electronics (Mobile Communications)",
+       [3]byte{140, 59, 173}:  "NETGEAR",
+       [3]byte{140, 60, 7}:    "Skiva Technologies, Inc.",
+       [3]byte{140, 60, 74}:   "NAKAYO Inc",
+       [3]byte{140, 65, 242}:  "RDA Technologies Ltd.",
+       [3]byte{140, 68, 53}:   "Shanghai BroadMobi Communication Technology Co., Ltd.",
+       [3]byte{140, 69, 0}:    "Murata Manufacturing Co., Ltd.",
+       [3]byte{140, 74, 238}:  "GIGA TMS INC",
+       [3]byte{140, 75, 89}:   "3D Imaging & Simulations Corp",
+       [3]byte{140, 76, 220}:  "PLANEX COMMUNICATIONS INC.",
+       [3]byte{140, 77, 185}:  "Unmonday Ltd",
+       [3]byte{140, 77, 234}:  "Cerio Corporation",
+       [3]byte{140, 81, 5}:    "Shenzhen ireadygo Information Technology CO.,LTD.",
+       [3]byte{140, 83, 247}:  "A&D ENGINEERING CO., LTD.",
+       [3]byte{140, 84, 29}:   "LGE",
+       [3]byte{140, 86, 157}:  "Imaging Solutions Group",
+       [3]byte{140, 86, 197}:  "Nintendo Co., Ltd.",
+       [3]byte{140, 87, 155}:  "Wistron Neweb Corporation",
+       [3]byte{140, 87, 253}:  "LVX Western",
+       [3]byte{140, 88, 119}:  "Apple, Inc.",
+       [3]byte{140, 89, 139}:  "C Technologies AB",
+       [3]byte{140, 89, 195}:  "ADB Italia",
+       [3]byte{140, 90, 240}:  "Exeltech Solar Products",
+       [3]byte{140, 91, 240}:  "ARRIS Group, Inc.",
+       [3]byte{140, 92, 161}:  "d-broad,INC",
+       [3]byte{140, 93, 96}:   "UCI Corporation Co.,Ltd.",
+       [3]byte{140, 95, 72}:   "Continental Intelligent Transportation Systems LLC",
+       [3]byte{140, 95, 223}:  "Beijing Railway Signal Factory",
+       [3]byte{140, 96, 79}:   "Cisco Systems, Inc",
+       [3]byte{140, 96, 231}:  "MPGIO CO.,LTD",
+       [3]byte{140, 97, 2}:    "Beijing Baofengmojing Technologies Co., Ltd",
+       [3]byte{140, 100, 11}:  "Beyond Devices d.o.o.",
+       [3]byte{140, 100, 34}:  "Sony Mobile Communications AB",
+       [3]byte{140, 104, 120}: "Nortek-AS",
+       [3]byte{140, 106, 228}: "Viogem Limited",
+       [3]byte{140, 109, 80}:  "SHENZHEN MTC CO LTD",
+       [3]byte{140, 112, 90}:  "Intel Corporate",
+       [3]byte{140, 113, 248}: "Samsung Electronics Co.,Ltd",
+       [3]byte{140, 115, 110}: "FUJITSU LIMITED",
+       [3]byte{140, 118, 193}: "Goden Tech Limited",
+       [3]byte{140, 119, 18}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{140, 119, 22}:  "LONGCHEER TELECOMMUNICATION LIMITED",
+       [3]byte{140, 120, 215}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{140, 121, 103}: "zte corporation",
+       [3]byte{140, 123, 157}: "Apple, Inc.",
+       [3]byte{140, 124, 146}: "Apple, Inc.",
+       [3]byte{140, 124, 181}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{140, 124, 255}: "Brocade Communications Systems, Inc.",
+       [3]byte{140, 126, 179}: "Lytro, Inc.",
+       [3]byte{140, 127, 59}:  "ARRIS Group, Inc.",
+       [3]byte{140, 130, 168}: "Insigma Technology Co.,Ltd",
+       [3]byte{140, 131, 157}: "SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD",
+       [3]byte{140, 132, 1}:   "Private",
+       [3]byte{140, 133, 128}: "Smart Innovation LLC",
+       [3]byte{140, 133, 144}: "Apple, Inc.",
+       [3]byte{140, 135, 59}:  "Leica Camera AG",
+       [3]byte{140, 137, 122}: "AUGTEK",
+       [3]byte{140, 137, 165}: "Micro-Star INT'L CO., LTD",
+       [3]byte{140, 138, 110}: "ESTUN AUTOMATION TECHNOLOY CO., LTD",
+       [3]byte{140, 138, 187}: "Beijing Orient View Technology Co., Ltd.",
+       [3]byte{140, 139, 131}: "Texas Instruments",
+       [3]byte{140, 142, 118}: "taskit GmbH",
+       [3]byte{140, 142, 242}: "Apple, Inc.",
+       [3]byte{140, 143, 233}: "Apple, Inc.",
+       [3]byte{140, 144, 211}: "Nokia",
+       [3]byte{140, 145, 9}:   "Toyoshima Electric Technoeogy(Suzhou) Co.,Ltd.",
+       [3]byte{140, 146, 54}:  "Aus.Linx Technology Co., Ltd.",
+       [3]byte{140, 147, 81}:  "Jigowatts Inc.",
+       [3]byte{140, 148, 207}: "Encell Technology, Inc.",
+       [3]byte{140, 153, 230}: "TCT mobile ltd",
+       [3]byte{140, 159, 59}:  "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{140, 160, 72}:  "Beijing NeTopChip Technology Co.,LTD",
+       [3]byte{140, 162, 253}: "Starry, Inc.",
+       [3]byte{140, 165, 161}: "Oregano Systems - Design & Consulting GmbH",
+       [3]byte{140, 166, 223}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{140, 169, 130}: "Intel Corporate",
+       [3]byte{140, 171, 142}: "Shanghai Feixun Communication Co.,Ltd.",
+       [3]byte{140, 174, 76}:  "Plugable Technologies",
+       [3]byte{140, 174, 137}: "Y-cam Solutions Ltd",
+       [3]byte{140, 176, 148}: "Airtech I&C Co., Ltd",
+       [3]byte{140, 182, 79}:  "Cisco Systems, Inc",
+       [3]byte{140, 183, 247}: "Shenzhen UniStrong Science & Technology Co., Ltd",
+       [3]byte{140, 184, 44}:  "IPitomy Communications",
+       [3]byte{140, 184, 100}: "AcSiP Technology Corp.",
+       [3]byte{140, 190, 190}: "Xiaomi Communications Co Ltd",
+       [3]byte{140, 191, 157}: "Shanghai Xinyou Information Technology Ltd. Co.",
+       [3]byte{140, 191, 166}: "Samsung Electronics Co.,Ltd",
+       [3]byte{140, 193, 33}:  "Panasonic Corporation AVC Networks Company",
+       [3]byte{140, 197, 225}: "ShenZhen Konka Telecommunication Technology Co.,Ltd",
+       [3]byte{140, 198, 97}:  "Current, powered by GE",
+       [3]byte{140, 199, 170}: "Radinet Communications Inc.",
+       [3]byte{140, 199, 208}: "zhejiang ebang communication co.,ltd",
+       [3]byte{140, 200, 205}: "Samsung Electronics Co.,Ltd",
+       [3]byte{140, 200, 244}: "IEEE Registration Authority",
+       [3]byte{140, 205, 162}: "ACTP, Inc.",
+       [3]byte{140, 205, 232}: "Nintendo Co., Ltd.",
+       [3]byte{140, 207, 9}:   "Dell EMC",
+       [3]byte{140, 207, 92}:  "BEFEGA GmbH",
+       [3]byte{140, 209, 123}: "CG Mobile",
+       [3]byte{140, 210, 233}: "YOKOTE SEIKO CO., LTD.",
+       [3]byte{140, 211, 162}: "VisSim AS",
+       [3]byte{140, 212, 142}: "ITEL MOBILE LIMITED",
+       [3]byte{140, 214, 40}:  "Ikor Metering",
+       [3]byte{140, 219, 37}:  "ESG Solutions",
+       [3]byte{140, 220, 212}: "Hewlett Packard",
+       [3]byte{140, 221, 141}: "Wifly-City System Inc.",
+       [3]byte{140, 222, 82}:  "ISSC Technologies Corp.",
+       [3]byte{140, 222, 153}: "Comlab Inc.",
+       [3]byte{140, 223, 157}: "NEC Corporation",
+       [3]byte{140, 224, 129}: "zte corporation",
+       [3]byte{140, 225, 23}:  "zte corporation",
+       [3]byte{140, 226, 218}: "Circle Media Inc",
+       [3]byte{140, 227, 142}: "Toshiba Memory Corporation",
+       [3]byte{140, 231, 72}:  "Private",
+       [3]byte{140, 231, 140}: "DK Networks",
+       [3]byte{140, 231, 179}: "Sonardyne International Ltd",
+       [3]byte{140, 234, 27}:  "Edgecore Networks Corporation",
+       [3]byte{140, 235, 198}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{140, 236, 75}:  "Dell Inc.",
+       [3]byte{140, 238, 198}: "Precepscion Pty. Ltd.",
+       [3]byte{140, 242, 40}:  "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{140, 245, 163}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{140, 248, 19}:  "ORANGE POLSKA",
+       [3]byte{140, 249, 69}:  "Power Automation pte Ltd",
+       [3]byte{140, 249, 201}: "MESADA Technology Co.,Ltd.",
+       [3]byte{140, 250, 186}: "Apple, Inc.",
+       [3]byte{140, 253, 240}: "Qualcomm Inc.",
+       [3]byte{140, 254, 180}: "VSOONTECH ELECTRONICS CO., LIMITED",
+       [3]byte{144, 0, 78}:    "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{144, 0, 219}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{144, 1, 59}:    "Sagemcom Broadband SAS",
+       [3]byte{144, 2, 138}:   "Shenzhen Shidean Legrand Electronic Products Co.,Ltd",
+       [3]byte{144, 2, 169}:   "Zhejiang Dahua Technology Co., Ltd.",
+       [3]byte{144, 3, 37}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{144, 3, 183}:   "PARROT SA",
+       [3]byte{144, 6, 40}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{144, 9, 23}:    "Far-sighted mobile",
+       [3]byte{144, 10, 26}:   "Taicang T&W Electronics",
+       [3]byte{144, 10, 57}:   "Wiio, Inc.",
+       [3]byte{144, 10, 58}:   "PSG Plastic Service GmbH",
+       [3]byte{144, 11, 193}:  "Sprocomm Technologies CO.,Ltd",
+       [3]byte{144, 12, 180}:  "Alinket Electronic Technology Co., Ltd",
+       [3]byte{144, 13, 102}:  "Digimore Electronics Co., Ltd",
+       [3]byte{144, 13, 203}:  "ARRIS Group, Inc.",
+       [3]byte{144, 14, 131}:  "Monico Monitoring, Inc.",
+       [3]byte{144, 23, 17}:   "Hagenuk Marinekommunikation GmbH",
+       [3]byte{144, 23, 155}:  "Nanomegas",
+       [3]byte{144, 23, 172}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{144, 24, 94}:   "Apex Tool Group GmbH & Co OHG",
+       [3]byte{144, 24, 124}:  "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{144, 24, 174}:  "Shanghai Meridian Technologies, Co. Ltd.",
+       [3]byte{144, 25, 0}:    "SCS SA",
+       [3]byte{144, 26, 202}:  "ARRIS Group, Inc.",
+       [3]byte{144, 27, 14}:   "Fujitsu Technology Solutions GmbH",
+       [3]byte{144, 29, 39}:   "zte corporation",
+       [3]byte{144, 30, 221}:  "GREAT COMPUTER CORPORATION",
+       [3]byte{144, 32, 58}:   "BYD Precision Manufacture Co.,Ltd",
+       [3]byte{144, 32, 131}:  "General Engine Management Systems Ltd.",
+       [3]byte{144, 33, 6}:    "BSkyB Ltd",
+       [3]byte{144, 33, 85}:   "HTC Corporation",
+       [3]byte{144, 33, 129}:  "Shanghai Huaqin Telecom Technology Co.,Ltd",
+       [3]byte{144, 35, 236}:  "Availink, Inc.",
+       [3]byte{144, 39, 228}:  "Apple, Inc.",
+       [3]byte{144, 43, 52}:   "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{144, 44, 199}:  "C-MAX Asia Limited",
+       [3]byte{144, 46, 28}:   "Intel Corporate",
+       [3]byte{144, 46, 135}:  "LabJack",
+       [3]byte{144, 49, 205}:  "Onyx Healthcare Inc.",
+       [3]byte{144, 50, 75}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{144, 52, 43}:   "Gatekeeper Systems, Inc.",
+       [3]byte{144, 52, 252}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{144, 53, 110}:  "Vodafone Omnitel N.V.",
+       [3]byte{144, 56, 9}:    "Ericsson AB",
+       [3]byte{144, 56, 223}:  "Changzhou Tiannengbo System Co. Ltd.",
+       [3]byte{144, 58, 160}:  "Nokia",
+       [3]byte{144, 58, 230}:  "PARROT SA",
+       [3]byte{144, 60, 146}:  "Apple, Inc.",
+       [3]byte{144, 60, 174}:  "Yunnan KSEC Digital Technology Co.,Ltd.",
+       [3]byte{144, 61, 90}:   "Shenzhen Wision Technology Holding Limited",
+       [3]byte{144, 61, 107}:  "Zicon Technology Corp.",
+       [3]byte{144, 61, 189}:  "SECURE METERS LIMITED",
+       [3]byte{144, 62, 171}:  "ARRIS Group, Inc.",
+       [3]byte{144, 69, 6}:    "Tokyo Boeki Medisys Inc.",
+       [3]byte{144, 70, 162}:  "Tedipay UK Ltd",
+       [3]byte{144, 70, 183}:  "Vadaro Pte Ltd",
+       [3]byte{144, 71, 22}:   "RORZE CORPORATION",
+       [3]byte{144, 72, 154}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{144, 73, 250}:  "Intel Corporate",
+       [3]byte{144, 76, 229}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{144, 77, 74}:   "Sagemcom Broadband SAS",
+       [3]byte{144, 78, 43}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{144, 78, 145}:  "IEEE Registration Authority",
+       [3]byte{144, 80, 90}:   "unGlue, Inc",
+       [3]byte{144, 80, 123}:  "Advanced PANMOBIL Systems GmbH & Co. KG",
+       [3]byte{144, 80, 202}:  "Hitron Technologies. Inc",
+       [3]byte{144, 81, 63}:   "Elettronica Santerno SpA",
+       [3]byte{144, 84, 70}:   "TES ELECTRONIC SOLUTIONS",
+       [3]byte{144, 85, 174}:  "Ericsson, EAB/RWI/K",
+       [3]byte{144, 86, 130}:  "Lenbrook Industries Limited",
+       [3]byte{144, 86, 146}:  "Autotalks Ltd.",
+       [3]byte{144, 89, 175}:  "Texas Instruments",
+       [3]byte{144, 92, 68}:   "Compal Broadband Networks, Inc.",
+       [3]byte{144, 95, 46}:   "TCT mobile ltd",
+       [3]byte{144, 95, 141}:  "modas GmbH",
+       [3]byte{144, 96, 241}:  "Apple, Inc.",
+       [3]byte{144, 97, 12}:   "Fida International (S) Pte Ltd",
+       [3]byte{144, 97, 174}:  "Intel Corporate",
+       [3]byte{144, 103, 23}:  "Alphion India Private Limited",
+       [3]byte{144, 103, 28}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{144, 103, 181}: "Alcatel-Lucent",
+       [3]byte{144, 103, 243}: "Alcatel Lucent",
+       [3]byte{144, 104, 195}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{144, 108, 172}: "Fortinet, Inc.",
+       [3]byte{144, 109, 200}: "DLG Automação Industrial Ltda",
+       [3]byte{144, 110, 187}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{144, 111, 24}:  "Private",
+       [3]byte{144, 111, 169}: "NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.",
+       [3]byte{144, 112, 37}:  "Garea Microsys Co.,Ltd.",
+       [3]byte{144, 112, 101}: "Texas Instruments",
+       [3]byte{144, 114, 64}:  "Apple, Inc.",
+       [3]byte{144, 114, 130}: "Sagemcom Broadband SAS",
+       [3]byte{144, 121, 144}: "Benchmark Electronics Romania SRL",
+       [3]byte{144, 122, 10}:  "Gebr. Bode GmbH & Co KG",
+       [3]byte{144, 122, 40}:  "Beijing Morncloud Information And Technology Co. Ltd.",
+       [3]byte{144, 122, 241}: "Wally",
+       [3]byte{144, 126, 186}: "UTEK TECHNOLOGY (SHENZHEN) CO.,LTD",
+       [3]byte{144, 127, 97}:  "Chicony Electronics Co., Ltd.",
+       [3]byte{144, 130, 96}:  "IEEE 1904.1 Working Group",
+       [3]byte{144, 131, 122}: "General Electric Water & Process Technologies",
+       [3]byte{144, 132, 13}:  "Apple, Inc.",
+       [3]byte{144, 132, 43}:  "LEGO System A/S",
+       [3]byte{144, 134, 116}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{144, 136, 162}: "IONICS TECHNOLOGY ME LTDA",
+       [3]byte{144, 140, 9}:   "Total Phase",
+       [3]byte{144, 140, 68}:  "H.K ZONGMU TECHNOLOGY CO., LTD.",
+       [3]byte{144, 140, 99}:  "GZ Weedong Networks Technology Co. , Ltd",
+       [3]byte{144, 141, 29}:  "GH Technologies",
+       [3]byte{144, 141, 108}: "Apple, Inc.",
+       [3]byte{144, 141, 120}: "D-Link International",
+       [3]byte{144, 143, 207}: "UNO System Co., Ltd",
+       [3]byte{144, 144, 60}:  "TRISON TECHNOLOGY CORPORATION",
+       [3]byte{144, 144, 96}:  "RSI VIDEO TECHNOLOGIES",
+       [3]byte{144, 146, 180}: "Diehl BGT Defence GmbH & Co. KG",
+       [3]byte{144, 148, 228}: "D-Link International",
+       [3]byte{144, 151, 213}: "Espressif Inc.",
+       [3]byte{144, 151, 243}: "Samsung Electronics Co.,Ltd",
+       [3]byte{144, 152, 100}: "Impex-Sat GmbH&amp;Co KG",
+       [3]byte{144, 153, 22}:  "ELVEES NeoTek OJSC",
+       [3]byte{144, 157, 125}: "ARRIS Group, Inc.",
+       [3]byte{144, 157, 224}: "Newland Design + Assoc. Inc.",
+       [3]byte{144, 159, 51}:  "EFM Networks",
+       [3]byte{144, 159, 67}:  "Accutron Instruments Inc.",
+       [3]byte{144, 162, 16}:  "United Telecoms Ltd",
+       [3]byte{144, 162, 218}: "GHEO SA",
+       [3]byte{144, 163, 101}: "HMD Global Oy",
+       [3]byte{144, 164, 106}: "SISNET CO., LTD",
+       [3]byte{144, 164, 222}: "Wistron Neweb Corporation",
+       [3]byte{144, 166, 47}:  "NAVER",
+       [3]byte{144, 167, 131}: "JSW PACIFIC CORPORATION",
+       [3]byte{144, 167, 193}: "Pakedge Device and Software Inc.",
+       [3]byte{144, 172, 63}:  "BrightSign LLC",
+       [3]byte{144, 173, 247}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{144, 174, 27}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{144, 176, 237}: "Apple, Inc.",
+       [3]byte{144, 177, 28}:  "Dell Inc.",
+       [3]byte{144, 177, 52}:  "ARRIS Group, Inc.",
+       [3]byte{144, 177, 224}: "Beijing Nebula Link Technology Co., Ltd",
+       [3]byte{144, 178, 31}:  "Apple, Inc.",
+       [3]byte{144, 182, 134}: "Murata Manufacturing Co., Ltd.",
+       [3]byte{144, 184, 208}: "Joyent, Inc.",
+       [3]byte{144, 185, 49}:  "Apple, Inc.",
+       [3]byte{144, 185, 125}: "Johnson Outdoors Marine Electronics d/b/a Minnkota",
+       [3]byte{144, 193, 21}:  "Sony Mobile Communications AB",
+       [3]byte{144, 193, 198}: "Apple, Inc.",
+       [3]byte{144, 195, 95}:  "Nanjing Jiahao Technology Co., Ltd.",
+       [3]byte{144, 198, 130}: "IEEE Registration Authority",
+       [3]byte{144, 199, 146}: "ARRIS Group, Inc.",
+       [3]byte{144, 199, 216}: "zte corporation",
+       [3]byte{144, 201, 155}: "Recore Systems",
+       [3]byte{144, 204, 36}:  "Synaptics, Inc",
+       [3]byte{144, 205, 182}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{144, 207, 21}:  "Nokia Corporation",
+       [3]byte{144, 207, 111}: "Dlogixs Co Ltd",
+       [3]byte{144, 207, 125}: "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{144, 209, 27}:  "Palomar Medical Technologies",
+       [3]byte{144, 215, 79}:  "Bookeen",
+       [3]byte{144, 215, 190}: "Wavelab Global Inc.",
+       [3]byte{144, 215, 235}: "Texas Instruments",
+       [3]byte{144, 216, 82}:  "Comtec Co., Ltd.",
+       [3]byte{144, 216, 243}: "zte corporation",
+       [3]byte{144, 217, 44}:  "HUG-WITSCHI AG",
+       [3]byte{144, 218, 78}:  "AVANU",
+       [3]byte{144, 218, 106}: "FOCUS H&S Co., Ltd.",
+       [3]byte{144, 219, 70}:  "E-LEAD ELECTRONIC CO., LTD",
+       [3]byte{144, 223, 183}: "s.m.s smart microwave sensors GmbH",
+       [3]byte{144, 223, 251}: "HOMERIDER SYSTEMS",
+       [3]byte{144, 224, 240}: "IEEE 1722a Working Group",
+       [3]byte{144, 226, 186}: "Intel Corporate",
+       [3]byte{144, 230, 186}: "ASUSTek COMPUTER INC.",
+       [3]byte{144, 231, 196}: "HTC Corporation",
+       [3]byte{144, 234, 96}:  "SPI Lasers Ltd",
+       [3]byte{144, 236, 80}:  "C.O.B.O. SPA",
+       [3]byte{144, 238, 217}: "UNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA",
+       [3]byte{144, 239, 104}: "Zyxel Communications Corporation",
+       [3]byte{144, 240, 82}:  "MEIZU Technology Co., Ltd.",
+       [3]byte{144, 241, 170}: "Samsung Electronics Co.,Ltd",
+       [3]byte{144, 241, 176}: "Hangzhou Anheng Info&Tech CO.,LTD",
+       [3]byte{144, 242, 120}: "Radius Gateway",
+       [3]byte{144, 243, 5}:   "HUMAX Co., Ltd.",
+       [3]byte{144, 243, 183}: "Kirisun Communications Co., Ltd.",
+       [3]byte{144, 244, 193}: "Rand McNally",
+       [3]byte{144, 246, 82}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{144, 247, 47}:  "Phillips Machine & Welding Co., Inc.",
+       [3]byte{144, 251, 91}:  "Avaya Inc",
+       [3]byte{144, 251, 166}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{144, 253, 97}:  "Apple, Inc.",
+       [3]byte{144, 253, 159}: "Silicon Laboratories",
+       [3]byte{144, 255, 121}: "Metro Ethernet Forum",
+       [3]byte{148, 0, 6}:     "jinyoung",
+       [3]byte{148, 0, 112}:   "Nokia Corporation",
+       [3]byte{148, 1, 73}:    "AutoHotBox",
+       [3]byte{148, 1, 194}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{148, 4, 156}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{148, 5, 182}:   "Liling FullRiver Electronics & Technology Ltd",
+       [3]byte{148, 9, 55}:    "HUMAX Co., Ltd.",
+       [3]byte{148, 11, 45}:   "NetView Technologies(Shenzhen) Co., Ltd",
+       [3]byte{148, 11, 213}:  "Himax Technologies, Inc",
+       [3]byte{148, 12, 109}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{148, 14, 107}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{148, 16, 62}:   "Belkin International Inc.",
+       [3]byte{148, 17, 218}:  "ITF Fröschl GmbH",
+       [3]byte{148, 20, 122}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{148, 22, 115}:  "Point Core SARL",
+       [3]byte{148, 24, 130}:  "Hewlett Packard Enterprise",
+       [3]byte{148, 29, 28}:   "TLab West Systems AB",
+       [3]byte{148, 32, 83}:   "Nokia Corporation",
+       [3]byte{148, 33, 151}:  "Stalmart Technology Limited",
+       [3]byte{148, 35, 110}:  "Shenzhen Junlan Electronic Ltd",
+       [3]byte{148, 40, 46}:   "New H3C Technologies Co., Ltd",
+       [3]byte{148, 42, 63}:   "Diversey Inc",
+       [3]byte{148, 44, 179}:  "HUMAX Co., Ltd.",
+       [3]byte{148, 46, 23}:   "Schneider Electric Canada Inc",
+       [3]byte{148, 46, 99}:   "Finsécur",
+       [3]byte{148, 49, 155}:  "Alphatronics BV",
+       [3]byte{148, 51, 221}:  "Taco Inc",
+       [3]byte{148, 53, 10}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{148, 54, 224}:  "Sichuan Bihong Broadcast &amp; Television New Technologies Co.,Ltd",
+       [3]byte{148, 57, 229}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{148, 58, 240}:  "Nokia Corporation",
+       [3]byte{148, 59, 177}:  "Kaonmedia CO., LTD.",
+       [3]byte{148, 61, 201}:  "Asahi Net, Inc.",
+       [3]byte{148, 63, 194}:  "Hewlett Packard Enterprise",
+       [3]byte{148, 64, 162}:  "Anywave Communication Technologies, Inc.",
+       [3]byte{148, 65, 193}:  "Mini-Cam Limited",
+       [3]byte{148, 68, 68}:   "LG Innotek",
+       [3]byte{148, 68, 82}:   "Belkin International Inc.",
+       [3]byte{148, 70, 150}:  "BaudTec Corporation",
+       [3]byte{148, 73, 150}:  "WiSilica Inc",
+       [3]byte{148, 74, 9}:    "BitWise Controls",
+       [3]byte{148, 74, 12}:   "Sercomm Corporation",
+       [3]byte{148, 80, 71}:   "Rechnerbetriebsgruppe",
+       [3]byte{148, 80, 137}:  "SimonsVoss Technologies GmbH",
+       [3]byte{148, 81, 3}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{148, 81, 61}:   "iSmart Alarm, Inc.",
+       [3]byte{148, 81, 191}:  "Hyundai ESG",
+       [3]byte{148, 83, 48}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{148, 84, 147}:  "Rigado, LLC",
+       [3]byte{148, 87, 165}:  "Hewlett Packard",
+       [3]byte{148, 89, 7}:    "Shanghai HITE-BELDEN Network Technology Co., Ltd.",
+       [3]byte{148, 89, 45}:   "EKE Building Technology Systems Ltd",
+       [3]byte{148, 91, 126}:  "TRILOBIT LTDA.",
+       [3]byte{148, 97, 30}:   "Wata Electronics Co.,Ltd.",
+       [3]byte{148, 97, 36}:   "Pason Systems",
+       [3]byte{148, 98, 105}:  "ARRIS Group, Inc.",
+       [3]byte{148, 99, 209}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{148, 101, 45}:  "OnePlus Technology (Shenzhen) Co., Ltd",
+       [3]byte{148, 101, 156}: "Intel Corporate",
+       [3]byte{148, 102, 231}: "WOM Engineering",
+       [3]byte{148, 112, 210}: "WINFIRM TECHNOLOGY",
+       [3]byte{148, 113, 172}: "TCT mobile ltd",
+       [3]byte{148, 117, 110}: "QinetiQ North America",
+       [3]byte{148, 118, 183}: "Samsung Electronics Co.,Ltd",
+       [3]byte{148, 119, 43}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{148, 123, 190}: "Ubicquia",
+       [3]byte{148, 123, 231}: "Samsung Electronics Co.,Ltd",
+       [3]byte{148, 124, 62}:  "Polewall Norge AS",
+       [3]byte{148, 126, 185}: "National Narrowband Network Communications Pty Ltd",
+       [3]byte{148, 129, 164}: "Azuray Technologies",
+       [3]byte{148, 133, 122}: "Evantage Industries Corp",
+       [3]byte{148, 134, 205}: "SEOUL ELECTRONICS&TELECOM",
+       [3]byte{148, 134, 212}: "Surveillance Pro Corporation",
+       [3]byte{148, 135, 124}: "ARRIS Group, Inc.",
+       [3]byte{148, 136, 21}:  "Infinique Worldwide Inc",
+       [3]byte{148, 136, 84}:  "Texas Instruments",
+       [3]byte{148, 136, 94}:  "Surfilter Network Technology Co., Ltd.",
+       [3]byte{148, 139, 3}:   "EAGET Innovation and Technology Co., Ltd.",
+       [3]byte{148, 139, 193}: "Samsung Electronics Co.,Ltd",
+       [3]byte{148, 141, 80}:  "Beamex Oy Ab",
+       [3]byte{148, 142, 137}: "INDUSTRIAS UNIDAS SA DE CV",
+       [3]byte{148, 143, 238}: "Verizon Telematics",
+       [3]byte{148, 146, 188}: "SYNTECH(HK) TECHNOLOGY LIMITED",
+       [3]byte{148, 148, 38}:  "Apple, Inc.",
+       [3]byte{148, 149, 160}: "Google, Inc.",
+       [3]byte{148, 152, 162}: "Shanghai LISTEN TECH.LTD",
+       [3]byte{148, 153, 1}:   "Shenzhen YITOA Digital Appliance CO.,LTD",
+       [3]byte{148, 154, 169}: "Microsoft Corporation",
+       [3]byte{148, 155, 253}: "Trans New Technology, Inc.",
+       [3]byte{148, 156, 85}:  "Alta Data Technologies",
+       [3]byte{148, 159, 62}:  "Sonos, Inc.",
+       [3]byte{148, 159, 63}:  "Optek Digital Technology company limited",
+       [3]byte{148, 159, 180}: "ChengDu JiaFaAnTai Technology Co.,Ltd",
+       [3]byte{148, 160, 78}:  "Bostex Technology Co., LTD",
+       [3]byte{148, 161, 162}: "AMPAK Technology, Inc.",
+       [3]byte{148, 167, 183}: "zte corporation",
+       [3]byte{148, 167, 188}: "BodyMedia, Inc.",
+       [3]byte{148, 170, 184}: "Joview(Beijing) Technology Co. Ltd.",
+       [3]byte{148, 171, 222}: "OMX Technology - FZE",
+       [3]byte{148, 172, 202}: "trivum technologies GmbH",
+       [3]byte{148, 174, 97}:  "Alcatel Lucent",
+       [3]byte{148, 174, 227}: "Belden Hirschmann Industries (Suzhou) Ltd.",
+       [3]byte{148, 177, 10}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{148, 178, 204}: "PIONEER CORPORATION",
+       [3]byte{148, 180, 15}:  "Aruba Networks",
+       [3]byte{148, 184, 25}:  "Nokia",
+       [3]byte{148, 184, 197}: "RuggedCom Inc.",
+       [3]byte{148, 185, 180}: "Aptos Technology",
+       [3]byte{148, 186, 49}:  "Visiontec da Amazônia Ltda.",
+       [3]byte{148, 186, 86}:  "Shenzhen Coship Electronics Co., Ltd.",
+       [3]byte{148, 187, 174}: "Husqvarna AB",
+       [3]byte{148, 191, 30}:  "eflow Inc. / Smart Device Planning and Development Division",
+       [3]byte{148, 191, 149}: "Shenzhen Coship Electronics Co., Ltd",
+       [3]byte{148, 192, 20}:  "Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek",
+       [3]byte{148, 192, 56}:  "Tallac Networks",
+       [3]byte{148, 193, 80}:  "2Wire Inc",
+       [3]byte{148, 195, 228}: "SCA Schucker Gmbh & Co KG",
+       [3]byte{148, 196, 233}: "PowerLayer Microsystems HongKong Limited",
+       [3]byte{148, 198, 145}: "EliteGroup Computer Systems Co., LTD",
+       [3]byte{148, 198, 235}: "NOVA electronics, Inc.",
+       [3]byte{148, 199, 175}: "Raylios Technology",
+       [3]byte{148, 201, 96}:  "Zhongshan B&T technology.co.,ltd",
+       [3]byte{148, 201, 98}:  "Teseq AG",
+       [3]byte{148, 202, 15}:  "Honeywell Analytics",
+       [3]byte{148, 204, 185}: "ARRIS Group, Inc.",
+       [3]byte{148, 205, 172}: "Creowave Oy",
+       [3]byte{148, 206, 44}:  "Sony Mobile Communications AB",
+       [3]byte{148, 206, 49}:  "CTS Limited",
+       [3]byte{148, 208, 25}:  "Cydle Corp.",
+       [3]byte{148, 208, 41}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{148, 212, 23}:  "GPI KOREA INC.",
+       [3]byte{148, 212, 105}: "Cisco Systems, Inc",
+       [3]byte{148, 214, 14}:  "shenzhen yunmao information technologies co., ltd",
+       [3]byte{148, 215, 35}:  "Shanghai DareGlobal Technologies Co.,Ltd",
+       [3]byte{148, 215, 113}: "Samsung Electronics Co.,Ltd",
+       [3]byte{148, 216, 89}:  "TCT mobile ltd",
+       [3]byte{148, 217, 60}:  "ENELPS",
+       [3]byte{148, 217, 179}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{148, 219, 73}:  "SITCORP",
+       [3]byte{148, 219, 201}: "AzureWave Technology Inc.",
+       [3]byte{148, 219, 218}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{148, 221, 63}:  "A+V Link Technologies, Corp.",
+       [3]byte{148, 222, 14}:  "SmartOptics AS",
+       [3]byte{148, 222, 128}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{148, 223, 78}:  "Wistron InfoComm(Kunshan)Co.,Ltd.",
+       [3]byte{148, 223, 88}:  "IJ Electron CO.,Ltd.",
+       [3]byte{148, 224, 208}: "HealthStream Taiwan Inc.",
+       [3]byte{148, 226, 38}:  "D. ORtiz Consulting, LLC",
+       [3]byte{148, 226, 253}: "Boge Kompressoren OTTO Boge GmbH & Co. KG",
+       [3]byte{148, 227, 109}: "Texas Instruments",
+       [3]byte{148, 231, 17}:  "Xirka Dama Persada PT",
+       [3]byte{148, 232, 72}:  "FYLDE MICRO LTD",
+       [3]byte{148, 232, 197}: "ARRIS Group, Inc.",
+       [3]byte{148, 233, 106}: "Apple, Inc.",
+       [3]byte{148, 233, 121}: "Liteon Technology Corporation",
+       [3]byte{148, 233, 140}: "Nokia",
+       [3]byte{148, 235, 44}:  "Google, Inc.",
+       [3]byte{148, 235, 205}: "BlackBerry RTS",
+       [3]byte{148, 241, 40}:  "Hewlett Packard Enterprise",
+       [3]byte{148, 241, 158}: "HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD",
+       [3]byte{148, 242, 120}: "Elma Electronic",
+       [3]byte{148, 245, 81}:  "Cadi Scientific Pte Ltd",
+       [3]byte{148, 246, 101}: "Ruckus Wireless",
+       [3]byte{148, 246, 146}: "Geminico co.,Ltd.",
+       [3]byte{148, 246, 163}: "Apple, Inc.",
+       [3]byte{148, 247, 32}:  "Tianjin Deviser Electronics Instrument Co., Ltd",
+       [3]byte{148, 250, 232}: "Shenzhen Eycom Technology Co., Ltd",
+       [3]byte{148, 251, 41}:  "Zebra Technologies Inc.",
+       [3]byte{148, 251, 178}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{148, 253, 29}:  "WhereWhen Corp",
+       [3]byte{148, 253, 46}:  "Shanghai Uniscope Technologies Co.,Ltd",
+       [3]byte{148, 254, 34}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{148, 254, 244}: "Sagemcom Broadband SAS",
+       [3]byte{152, 0, 116}:   "Raisecom Technology CO., LTD",
+       [3]byte{152, 0, 193}:   "GuangZhou CREATOR Technology Co.,Ltd.(CHINA)",
+       [3]byte{152, 0, 198}:   "Apple, Inc.",
+       [3]byte{152, 1, 167}:   "Apple, Inc.",
+       [3]byte{152, 2, 132}:   "Theobroma Systems GmbH",
+       [3]byte{152, 2, 216}:   "IEEE Registration Authority",
+       [3]byte{152, 3, 160}:   "ABB n.v. Power Quality Products",
+       [3]byte{152, 3, 216}:   "Apple, Inc.",
+       [3]byte{152, 7, 45}:    "Texas Instruments",
+       [3]byte{152, 12, 130}:  "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{152, 12, 165}:  "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+       [3]byte{152, 13, 46}:   "HTC Corporation",
+       [3]byte{152, 14, 228}:  "Private",
+       [3]byte{152, 16, 148}:  "Shenzhen Vsun communication technology Co.,ltd",
+       [3]byte{152, 16, 232}:  "Apple, Inc.",
+       [3]byte{152, 19, 51}:   "zte corporation",
+       [3]byte{152, 22, 236}:  "IC Intracom",
+       [3]byte{152, 29, 250}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{152, 30, 15}:   "Jeelan (Shanghai Jeelan Technology Information Inc",
+       [3]byte{152, 31, 177}:  "Shenzhen Lemon Network Technology Co.,Ltd",
+       [3]byte{152, 32, 142}:  "Definium Technologies",
+       [3]byte{152, 34, 239}:  "Liteon Technology Corporation",
+       [3]byte{152, 35, 78}:   "Micromedia AG",
+       [3]byte{152, 38, 42}:   "Applied Research Associates, Inc",
+       [3]byte{152, 40, 166}:  "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{152, 41, 29}:   "Jaguar de Mexico, SA de CV",
+       [3]byte{152, 41, 63}:   "Fujian Start Computer Equipment Co.,Ltd",
+       [3]byte{152, 41, 166}:  "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{152, 44, 190}:  "2Wire Inc",
+       [3]byte{152, 45, 86}:   "Resolution Audio",
+       [3]byte{152, 45, 104}:  "Samsung Electronics Co., Ltd",
+       [3]byte{152, 45, 186}:  "Fibergate Inc.",
+       [3]byte{152, 47, 60}:   "Sichuan Changhong Electric Ltd.",
+       [3]byte{152, 48, 0}:    "Beijing KEMACOM Technologies Co., Ltd.",
+       [3]byte{152, 48, 113}:  "DAIKYUNG VASCOM",
+       [3]byte{152, 52, 157}:  "Krauss Maffei Technologies GmbH",
+       [3]byte{152, 53, 113}:  "Sub10 Systems Ltd",
+       [3]byte{152, 53, 184}:  "Assembled Products Corporation",
+       [3]byte{152, 55, 19}:   "PT.Navicom Indonesia",
+       [3]byte{152, 57, 142}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{152, 59, 22}:   "AMPAK Technology, Inc.",
+       [3]byte{152, 63, 159}:  "China SSJ (Suzhou) Network Technology Inc.",
+       [3]byte{152, 64, 187}:  "Dell Inc.",
+       [3]byte{152, 66, 70}:   "SOL INDUSTRY PTE., LTD",
+       [3]byte{152, 67, 218}:  "INTERTECH",
+       [3]byte{152, 71, 60}:   "SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD",
+       [3]byte{152, 74, 71}:   "CHG Hospital Beds",
+       [3]byte{152, 75, 74}:   "ARRIS Group, Inc.",
+       [3]byte{152, 75, 225}:  "Hewlett Packard",
+       [3]byte{152, 76, 4}:    "Zhangzhou Keneng Electrical Equipment Co Ltd",
+       [3]byte{152, 76, 211}:  "Mantis Deposition",
+       [3]byte{152, 78, 151}:  "Starlight Marketing (H. K.) Ltd.",
+       [3]byte{152, 79, 238}:  "Intel Corporate",
+       [3]byte{152, 82, 177}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{152, 84, 27}:   "Intel Corporate",
+       [3]byte{152, 87, 211}:  "HON HAI-CCPBG  PRECISION IND.CO.,LTD.",
+       [3]byte{152, 88, 138}:  "SYSGRATION Ltd.",
+       [3]byte{152, 89, 69}:   "Texas Instruments",
+       [3]byte{152, 90, 235}:  "Apple, Inc.",
+       [3]byte{152, 91, 176}:  "KMDATA INC.",
+       [3]byte{152, 92, 147}:  "SBG Systems SAS",
+       [3]byte{152, 93, 70}:   "PeopleNet Communication",
+       [3]byte{152, 93, 173}:  "Texas Instruments",
+       [3]byte{152, 94, 27}:   "ConversDigital Co., Ltd.",
+       [3]byte{152, 95, 211}:  "Microsoft Corporation",
+       [3]byte{152, 96, 34}:   "EMW Co., Ltd.",
+       [3]byte{152, 102, 234}: "Industrial Control Communications, Inc.",
+       [3]byte{152, 107, 61}:  "ARRIS Group, Inc.",
+       [3]byte{152, 108, 92}:  "Jiangxi Gosun Guard Security Co.,Ltd",
+       [3]byte{152, 108, 245}: "zte corporation",
+       [3]byte{152, 109, 53}:  "IEEE Registration Authority",
+       [3]byte{152, 109, 200}: "TOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION",
+       [3]byte{152, 111, 96}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{152, 112, 232}: "INNATECH SDN BHD",
+       [3]byte{152, 115, 196}: "Sage Electronic Engineering LLC",
+       [3]byte{152, 116, 61}:  "Shenzhen Jun Kai Hengye Technology Co. Ltd",
+       [3]byte{152, 116, 218}: "Infinix mobility limited",
+       [3]byte{152, 118, 182}: "Adafruit",
+       [3]byte{152, 119, 112}: "Pep Digital Technology (Guangzhou) Co., Ltd",
+       [3]byte{152, 123, 243}: "Texas Instruments",
+       [3]byte{152, 126, 70}:  "Emizon Networks Limited",
+       [3]byte{152, 130, 23}:  "Disruptive Ltd",
+       [3]byte{152, 131, 137}: "Samsung Electronics Co.,Ltd",
+       [3]byte{152, 132, 227}: "Texas Instruments",
+       [3]byte{152, 134, 177}: "Flyaudio corporation (China)",
+       [3]byte{152, 135, 68}:  "Wuxi Hongda Science and Technology Co.,LTD",
+       [3]byte{152, 137, 237}: "Anadem Information Inc.",
+       [3]byte{152, 139, 93}:  "Sagemcom Broadband SAS",
+       [3]byte{152, 139, 173}: "Corintech Ltd.",
+       [3]byte{152, 142, 52}:  "ZHEJIANG BOXSAM ELECTRONIC CO.,LTD",
+       [3]byte{152, 142, 74}:  "NOXUS(BEIJING) TECHNOLOGY CO.,LTD",
+       [3]byte{152, 142, 221}: "TE Connectivity Limerick",
+       [3]byte{152, 144, 128}: "Linkpower Network System Inc Ltd.",
+       [3]byte{152, 144, 150}: "Dell Inc.",
+       [3]byte{152, 147, 204}: "LG ELECTRONICS INC",
+       [3]byte{152, 148, 73}:  "Skyworth Wireless Technology Ltd.",
+       [3]byte{152, 151, 209}: "MitraStar Technology Corp.",
+       [3]byte{152, 156, 87}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{152, 158, 99}:  "Apple, Inc.",
+       [3]byte{152, 164, 14}:  "Snap, Inc.",
+       [3]byte{152, 167, 176}: "MCST ZAO",
+       [3]byte{152, 170, 60}:  "Will i-tech Co., Ltd.",
+       [3]byte{152, 170, 215}: "BLUE WAVE NETWORKING CO LTD",
+       [3]byte{152, 170, 252}: "IEEE Registration Authority",
+       [3]byte{152, 176, 57}:  "Nokia",
+       [3]byte{152, 182, 233}: "Nintendo Co.,Ltd",
+       [3]byte{152, 184, 227}: "Apple, Inc.",
+       [3]byte{152, 187, 30}:  "BYD Precision Manufacture Company Ltd.",
+       [3]byte{152, 188, 87}:  "SVA TECHNOLOGIES CO.LTD",
+       [3]byte{152, 188, 153}: "Edeltech Co.,Ltd.",
+       [3]byte{152, 190, 148}: "IBM",
+       [3]byte{152, 192, 235}: "Global Regency Ltd",
+       [3]byte{152, 197, 219}: "Ericsson AB",
+       [3]byte{152, 200, 69}:  "PacketAccess",
+       [3]byte{152, 203, 39}:  "Galore Networks Pvt. Ltd.",
+       [3]byte{152, 205, 180}: "Virident Systems, Inc.",
+       [3]byte{152, 207, 83}:  "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.",
+       [3]byte{152, 210, 147}: "Google, Inc.",
+       [3]byte{152, 211, 49}:  "Shenzhen Bolutek Technology Co.,Ltd.",
+       [3]byte{152, 211, 210}: "MEKRA Lang GmbH & Co. KG",
+       [3]byte{152, 214, 134}: "Chyi Lee industry Co., ltd.",
+       [3]byte{152, 214, 187}: "Apple, Inc.",
+       [3]byte{152, 214, 247}: "LG Electronics (Mobile Communications)",
+       [3]byte{152, 216, 140}: "Nortel Networks",
+       [3]byte{152, 218, 146}: "Vuzix Corporation",
+       [3]byte{152, 220, 217}: "UNITEC Co., Ltd.",
+       [3]byte{152, 221, 234}: "Infinix mobility limited",
+       [3]byte{152, 222, 208}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{152, 224, 217}: "Apple, Inc.",
+       [3]byte{152, 225, 101}: "Accutome",
+       [3]byte{152, 228, 118}: "Zentan",
+       [3]byte{152, 231, 154}: "Foxconn(NanJing) Communication Co.,Ltd.",
+       [3]byte{152, 231, 244}: "Hewlett Packard",
+       [3]byte{152, 231, 245}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{152, 232, 72}:  "Axiim",
+       [3]byte{152, 236, 101}: "Cosesy ApS",
+       [3]byte{152, 238, 203}: "Wistron Infocomm (Zhongshan) Corporation",
+       [3]byte{152, 239, 155}: "OHSUNG",
+       [3]byte{152, 240, 88}:  "Lynxspring, Incl.",
+       [3]byte{152, 240, 171}: "Apple, Inc.",
+       [3]byte{152, 241, 112}: "Murata Manufacturing Co., Ltd.",
+       [3]byte{152, 241, 153}: "NEC Platforms, Ltd.",
+       [3]byte{152, 242, 179}: "Hewlett Packard Enterprise",
+       [3]byte{152, 244, 40}:  "zte corporation",
+       [3]byte{152, 245, 55}:  "zte corporation",
+       [3]byte{152, 245, 169}: "OHSUNG",
+       [3]byte{152, 247, 215}: "ARRIS Group, Inc.",
+       [3]byte{152, 248, 193}: "IDT Technology Limited",
+       [3]byte{152, 248, 219}: "Marini Impianti Industriali s.r.l.",
+       [3]byte{152, 250, 227}: "Xiaomi Communications Co Ltd",
+       [3]byte{152, 251, 18}:  "Grand Electronics (HK) Ltd",
+       [3]byte{152, 252, 17}:  "Cisco-Linksys, LLC",
+       [3]byte{152, 253, 116}: "ACT.CO.LTD",
+       [3]byte{152, 253, 180}: "Primax Electronics Ltd.",
+       [3]byte{152, 254, 3}:   "Ericsson - North America",
+       [3]byte{152, 254, 148}: "Apple, Inc.",
+       [3]byte{152, 255, 106}: "OTEC(Shanghai)Technology Co.,Ltd.",
+       [3]byte{152, 255, 208}: "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{156, 1, 17}:    "Shenzhen Newabel Electronic Co., Ltd.",
+       [3]byte{156, 2, 152}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{156, 3, 158}:   "Beijing Winchannel Software Technology Co., Ltd",
+       [3]byte{156, 4, 115}:   "Tecmobile (International) Ltd.",
+       [3]byte{156, 4, 235}:   "Apple, Inc.",
+       [3]byte{156, 6, 27}:    "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{156, 6, 110}:   "Hytera Communications Corporation Limited",
+       [3]byte{156, 13, 172}:  "Tymphany HK Limited",
+       [3]byte{156, 14, 74}:   "Shenzhen Vastking Electronic Co.,Ltd.",
+       [3]byte{156, 19, 171}:  "Chanson Water Co., Ltd.",
+       [3]byte{156, 20, 101}:  "Edata Elektronik San. ve Tic. A.Ş.",
+       [3]byte{156, 24, 116}:  "Nokia Danmark A/S",
+       [3]byte{156, 28, 18}:   "Aruba Networks",
+       [3]byte{156, 29, 88}:   "Texas Instruments",
+       [3]byte{156, 30, 149}:  "Actiontec Electronics, Inc",
+       [3]byte{156, 31, 221}:  "Accupix Inc.",
+       [3]byte{156, 32, 123}:  "Apple, Inc.",
+       [3]byte{156, 33, 106}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{156, 34, 14}:   "TASCAN Systems GmbH",
+       [3]byte{156, 40, 64}:   "Discovery Technology,LTD..",
+       [3]byte{156, 40, 191}:  "Continental Automotive Czech Republic s.r.o.",
+       [3]byte{156, 40, 239}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{156, 41, 63}:   "Apple, Inc.",
+       [3]byte{156, 42, 112}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{156, 42, 131}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{156, 48, 91}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{156, 48, 102}:  "RWE Effizienz GmbH",
+       [3]byte{156, 49, 120}:  "Foshan Huadian Intelligent Communications Teachnologies Co.,Ltd",
+       [3]byte{156, 49, 182}:  "Kulite Semiconductor Products Inc",
+       [3]byte{156, 50, 169}:  "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{156, 52, 38}:   "ARRIS Group, Inc.",
+       [3]byte{156, 53, 131}:  "Nipro Diagnostics, Inc",
+       [3]byte{156, 53, 235}:  "Apple, Inc.",
+       [3]byte{156, 55, 244}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{156, 58, 175}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{156, 61, 207}:  "NETGEAR",
+       [3]byte{156, 62, 170}:  "EnvyLogic Co.,Ltd.",
+       [3]byte{156, 65, 124}:  "Hame  Technology Co.,  Limited",
+       [3]byte{156, 68, 61}:   "CHENGDU XUGUANG TECHNOLOGY CO, LTD",
+       [3]byte{156, 68, 166}:  "SwiftTest, Inc.",
+       [3]byte{156, 69, 99}:   "DIMEP Sistemas",
+       [3]byte{156, 74, 123}:  "Nokia Corporation",
+       [3]byte{156, 76, 174}:  "Mesa Labs",
+       [3]byte{156, 78, 32}:   "Cisco Systems, Inc",
+       [3]byte{156, 78, 54}:   "Intel Corporate",
+       [3]byte{156, 78, 142}:  "ALT Systems Ltd",
+       [3]byte{156, 78, 191}:  "BoxCast",
+       [3]byte{156, 79, 207}:  "TCT mobile ltd",
+       [3]byte{156, 79, 218}:  "Apple, Inc.",
+       [3]byte{156, 80, 238}:  "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{156, 82, 248}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{156, 83, 205}:  "ENGICAM s.r.l.",
+       [3]byte{156, 84, 28}:   "Shenzhen My-power Technology Co.,Ltd",
+       [3]byte{156, 84, 202}:  "Zhengzhou VCOM Science and Technology Co.,Ltd",
+       [3]byte{156, 85, 180}:  "I.S.E. S.r.l.",
+       [3]byte{156, 87, 17}:   "Feitian Xunda(Beijing) Aeronautical Information Technology Co., Ltd.",
+       [3]byte{156, 87, 173}:  "Cisco Systems, Inc",
+       [3]byte{156, 91, 150}:  "NMR Corporation",
+       [3]byte{156, 92, 141}:  "FIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS  LTDA",
+       [3]byte{156, 92, 142}:  "ASUSTek COMPUTER INC.",
+       [3]byte{156, 92, 249}:  "Sony Mobile Communications AB",
+       [3]byte{156, 93, 18}:   "Aerohive Networks Inc.",
+       [3]byte{156, 93, 149}:  "VTC Electronics Corp.",
+       [3]byte{156, 94, 115}:  "Calibre UK LTD",
+       [3]byte{156, 97, 29}:   "Omni-ID USA, Inc.",
+       [3]byte{156, 97, 33}:   "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{156, 98, 171}:  "Sumavision Technologies Co.,Ltd",
+       [3]byte{156, 99, 237}:  "zte corporation",
+       [3]byte{156, 100, 94}:  "Harman Consumer Group",
+       [3]byte{156, 101, 176}: "Samsung Electronics Co.,Ltd",
+       [3]byte{156, 101, 238}: "DASAN Network Solutions",
+       [3]byte{156, 101, 249}: "AcSiP Technology Corp.",
+       [3]byte{156, 102, 80}:  "Glodio Technolies Co.,Ltd Tianjin Branch",
+       [3]byte{156, 104, 91}:  "Octonion SA",
+       [3]byte{156, 106, 190}: "QEES ApS.",
+       [3]byte{156, 108, 21}:  "Microsoft Corporation",
+       [3]byte{156, 111, 82}:  "zte corporation",
+       [3]byte{156, 116, 26}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{156, 117, 20}:  "Wildix srl",
+       [3]byte{156, 119, 170}: "NADASNV",
+       [3]byte{156, 121, 172}: "Suntec Software(Shanghai) Co., Ltd.",
+       [3]byte{156, 122, 3}:   "Ciena Corporation",
+       [3]byte{156, 123, 210}: "NEOLAB Convergence",
+       [3]byte{156, 125, 163}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{156, 128, 125}: "SYSCABLE Korea Inc.",
+       [3]byte{156, 128, 223}: "Arcadyan Technology Corporation",
+       [3]byte{156, 131, 191}: "PRO-VISION, Inc.",
+       [3]byte{156, 132, 191}: "Apple, Inc.",
+       [3]byte{156, 134, 218}: "Phoenix Geophysics Ltd.",
+       [3]byte{156, 136, 136}: "Simac Techniek NV",
+       [3]byte{156, 136, 173}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{156, 139, 160}: "Apple, Inc.",
+       [3]byte{156, 139, 241}: "The Warehouse Limited",
+       [3]byte{156, 140, 110}: "Samsung Electronics Co.,Ltd",
+       [3]byte{156, 141, 26}:  "INTEG process group inc",
+       [3]byte{156, 141, 124}: "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{156, 141, 211}: "Leonton Technologies",
+       [3]byte{156, 142, 153}: "Hewlett Packard",
+       [3]byte{156, 142, 205}: "Amcrest Technologies",
+       [3]byte{156, 142, 220}: "Teracom Limited",
+       [3]byte{156, 147, 78}:  "Xerox Corporation",
+       [3]byte{156, 147, 228}: "Private",
+       [3]byte{156, 149, 248}: "SmartDoor Systems, LLC",
+       [3]byte{156, 151, 38}:  "Technicolor",
+       [3]byte{156, 152, 17}:  "Guangzhou Sunrise Electronics Development Co., Ltd",
+       [3]byte{156, 153, 160}: "Xiaomi Communications Co Ltd",
+       [3]byte{156, 156, 29}:  "Starkey Labs Inc.",
+       [3]byte{156, 156, 64}:  "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{156, 157, 93}:  "Raden Inc",
+       [3]byte{156, 161, 10}:  "SCLE SFE",
+       [3]byte{156, 161, 52}:  "Nike, Inc.",
+       [3]byte{156, 163, 169}: "Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd",
+       [3]byte{156, 163, 186}: "SAKURA Internet Inc.",
+       [3]byte{156, 165, 119}: "Osorno Enterprises Inc.",
+       [3]byte{156, 165, 192}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{156, 166, 157}: "Whaley Technology Co.Ltd",
+       [3]byte{156, 169, 228}: "zte corporation",
+       [3]byte{156, 172, 109}: "Universal Electronics, Inc.",
+       [3]byte{156, 173, 151}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{156, 173, 239}: "Obihai Technology, Inc.",
+       [3]byte{156, 174, 211}: "Seiko Epson Corporation",
+       [3]byte{156, 175, 111}: "ITEL MOBILE LIMITED",
+       [3]byte{156, 175, 202}: "Cisco Systems, Inc",
+       [3]byte{156, 176, 8}:   "Ubiquitous Computing Technology Corporation",
+       [3]byte{156, 178, 6}:   "PROCENTEC",
+       [3]byte{156, 178, 178}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{156, 182, 84}:  "Hewlett Packard",
+       [3]byte{156, 182, 208}: "Rivet Networks",
+       [3]byte{156, 183, 13}:  "Liteon Technology Corporation",
+       [3]byte{156, 183, 147}: "Creatcomm Technology Inc.",
+       [3]byte{156, 187, 152}: "Shen Zhen RND Electronic Co.,LTD",
+       [3]byte{156, 189, 157}: "SkyDisk, Inc.",
+       [3]byte{156, 190, 224}: "Biosoundlab Co., Ltd.",
+       [3]byte{156, 192, 119}: "PrintCounts, LLC",
+       [3]byte{156, 192, 210}: "Conductix-Wampfler GmbH",
+       [3]byte{156, 193, 114}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{156, 199, 166}: "AVM GmbH",
+       [3]byte{156, 199, 209}: "SHARP Corporation",
+       [3]byte{156, 200, 174}: "Becton, Dickinson  and Company",
+       [3]byte{156, 202, 217}: "Nokia Corporation",
+       [3]byte{156, 204, 131}: "Juniper Networks",
+       [3]byte{156, 205, 130}: "CHENG UEI PRECISION INDUSTRY CO.,LTD",
+       [3]byte{156, 210, 30}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{156, 210, 75}:  "zte corporation",
+       [3]byte{156, 211, 50}:  "PLC Technology Ltd",
+       [3]byte{156, 211, 91}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{156, 211, 109}: "NETGEAR",
+       [3]byte{156, 212, 139}: "Innolux Technology Europe BV",
+       [3]byte{156, 214, 67}:  "D-Link International",
+       [3]byte{156, 217, 23}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{156, 217, 203}: "Lesira Manufacturing Pty Ltd",
+       [3]byte{156, 218, 62}:  "Intel Corporate",
+       [3]byte{156, 220, 113}: "Hewlett Packard Enterprise",
+       [3]byte{156, 221, 31}:  "Intelligent Steward Co.,Ltd",
+       [3]byte{156, 223, 3}:   "Harman/Becker Automotive Systems GmbH",
+       [3]byte{156, 223, 177}: "Shenzhen Crave Communication Co., LTD",
+       [3]byte{156, 224, 99}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{156, 225, 14}:  "NCTech Ltd",
+       [3]byte{156, 225, 214}: "Junger Audio-Studiotechnik GmbH",
+       [3]byte{156, 226, 48}:  "JULONG CO,.LTD.",
+       [3]byte{156, 227, 63}:  "Apple, Inc.",
+       [3]byte{156, 227, 116}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{156, 230, 53}:  "Nintendo Co., Ltd.",
+       [3]byte{156, 230, 231}: "Samsung Electronics Co.,Ltd",
+       [3]byte{156, 231, 189}: "Winduskorea co., Ltd",
+       [3]byte{156, 233, 81}:  "Shenzhen Sang Fei Consumer Communications Ltd., Co.",
+       [3]byte{156, 235, 232}: "BizLink (Kunshan) Co.,Ltd",
+       [3]byte{156, 239, 213}: "Panda Wireless, Inc.",
+       [3]byte{156, 243, 135}: "Apple, Inc.",
+       [3]byte{156, 244, 142}: "Apple, Inc.",
+       [3]byte{156, 246, 26}:  "UTC Fire and Security",
+       [3]byte{156, 246, 125}: "Ricardo Prague, s.r.o.",
+       [3]byte{156, 248, 219}: "shenzhen eyunmei technology co,.ltd",
+       [3]byte{156, 249, 56}:  "AREVA NP GmbH",
+       [3]byte{156, 251, 213}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{156, 251, 241}: "MESOMATIC GmbH & Co.KG",
+       [3]byte{156, 252, 1}:   "Apple, Inc.",
+       [3]byte{156, 252, 209}: "Aetheris Technology (Shanghai) Co., Ltd.",
+       [3]byte{156, 255, 190}: "OTSL Inc.",
+       [3]byte{160, 2, 220}:   "Amazon Technologies Inc.",
+       [3]byte{160, 3, 99}:    "Robert Bosch Healthcare GmbH",
+       [3]byte{160, 4, 62}:    "Parker Hannifin Manufacturing Germany GmbH & Co. KG",
+       [3]byte{160, 4, 96}:    "NETGEAR",
+       [3]byte{160, 6, 39}:    "NEXPA System",
+       [3]byte{160, 7, 152}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{160, 7, 182}:   "Advanced Technical Support, Inc.",
+       [3]byte{160, 8, 111}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{160, 9, 76}:    "CenturyLink",
+       [3]byte{160, 9, 237}:   "Avaya Inc",
+       [3]byte{160, 10, 191}:  "Wieson Technologies Co., Ltd.",
+       [3]byte{160, 11, 186}:  "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{160, 12, 161}:  "SKTB SKiT",
+       [3]byte{160, 16, 129}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{160, 18, 144}:  "Avaya Inc",
+       [3]byte{160, 18, 219}:  "TABUCHI ELECTRIC CO.,LTD",
+       [3]byte{160, 19, 59}:   "HiTi Digital, Inc.",
+       [3]byte{160, 19, 203}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{160, 20, 61}:   "PARROT SA",
+       [3]byte{160, 22, 92}:   "Triteka LTD",
+       [3]byte{160, 24, 40}:   "Apple, Inc.",
+       [3]byte{160, 24, 89}:   "Shenzhen Yidashi Electronics Co Ltd",
+       [3]byte{160, 25, 23}:   "Bertel S.p.a.",
+       [3]byte{160, 27, 41}:   "Sagemcom Broadband SAS",
+       [3]byte{160, 28, 5}:    "NIMAX TELECOM CO.,LTD.",
+       [3]byte{160, 29, 72}:   "Hewlett Packard",
+       [3]byte{160, 30, 11}:   "MINIX Technology Limited",
+       [3]byte{160, 32, 166}:  "Espressif Inc.",
+       [3]byte{160, 33, 149}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{160, 33, 183}:  "NETGEAR",
+       [3]byte{160, 35, 27}:   "TeleComp R&D Corp.",
+       [3]byte{160, 35, 159}:  "Cisco Systems, Inc",
+       [3]byte{160, 43, 184}:  "Hewlett Packard",
+       [3]byte{160, 44, 54}:   "FN-LINK TECHNOLOGY LIMITED",
+       [3]byte{160, 46, 243}:  "United Integrated Services Co., Led.",
+       [3]byte{160, 50, 153}:  "Lenovo (Beijing) Co., Ltd.",
+       [3]byte{160, 52, 27}:   "TrackR, Inc",
+       [3]byte{160, 54, 159}:  "Intel Corporate",
+       [3]byte{160, 54, 240}:  "Comprehensive Power",
+       [3]byte{160, 54, 250}:  "Ettus Research LLC",
+       [3]byte{160, 57, 247}:  "LG Electronics (Mobile Communications)",
+       [3]byte{160, 58, 117}:  "PSS Belgium N.V.",
+       [3]byte{160, 59, 27}:   "Inspire Tech",
+       [3]byte{160, 59, 227}:  "Apple, Inc.",
+       [3]byte{160, 61, 111}:  "Cisco Systems, Inc",
+       [3]byte{160, 62, 107}:  "IEEE Registration Authority",
+       [3]byte{160, 64, 37}:   "Actioncable, Inc.",
+       [3]byte{160, 64, 65}:   "SAMWONFA Co.,Ltd.",
+       [3]byte{160, 64, 160}:  "NETGEAR",
+       [3]byte{160, 65, 94}:   "Opsens Solution Inc.",
+       [3]byte{160, 65, 167}:  "NL Ministry of Defense",
+       [3]byte{160, 66, 63}:   "Tyan Computer Corp",
+       [3]byte{160, 67, 219}:  "Sitael S.p.A.",
+       [3]byte{160, 72, 28}:   "Hewlett Packard",
+       [3]byte{160, 76, 91}:   "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{160, 76, 193}:  "Helixtech Corp.",
+       [3]byte{160, 78, 1}:    "CENTRAL ENGINEERING co.,ltd.",
+       [3]byte{160, 78, 4}:    "Nokia Corporation",
+       [3]byte{160, 78, 167}:  "Apple, Inc.",
+       [3]byte{160, 79, 212}:  "ADB Broadband Italia",
+       [3]byte{160, 81, 198}:  "Avaya Inc",
+       [3]byte{160, 85, 79}:   "Cisco Systems, Inc",
+       [3]byte{160, 85, 222}:  "ARRIS Group, Inc.",
+       [3]byte{160, 86, 178}:  "Harman/Becker Automotive Systems GmbH",
+       [3]byte{160, 89, 58}:   "V.D.S. Video Display Systems srl",
+       [3]byte{160, 90, 164}:  "Grand Products Nevada, Inc.",
+       [3]byte{160, 91, 33}:   "ENVINET GmbH",
+       [3]byte{160, 93, 193}:  "TMCT Co., LTD.",
+       [3]byte{160, 93, 231}:  "DIRECTV, Inc.",
+       [3]byte{160, 94, 107}:  "MELPER Co., Ltd.",
+       [3]byte{160, 96, 144}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{160, 99, 145}:  "NETGEAR",
+       [3]byte{160, 100, 143}: "ASKEY COMPUTER CORP",
+       [3]byte{160, 101, 24}:  "VNPT TECHNOLOGY",
+       [3]byte{160, 103, 190}: "Sicon srl",
+       [3]byte{160, 105, 134}: "Wellav Technologies Ltd",
+       [3]byte{160, 106, 0}:   "Verilink Corporation",
+       [3]byte{160, 106, 68}:  "Vizio, Inc",
+       [3]byte{160, 108, 236}: "RIM",
+       [3]byte{160, 109, 9}:   "Intelcan Technosystems Inc.",
+       [3]byte{160, 110, 80}:  "Nanotek Elektronik Sistemler Ltd. Sti.",
+       [3]byte{160, 111, 170}: "LG Innotek",
+       [3]byte{160, 112, 153}: "Beijing Huacan Electronics Co., Ltd",
+       [3]byte{160, 113, 169}: "Nokia Corporation",
+       [3]byte{160, 114, 44}:  "HUMAX Co., Ltd.",
+       [3]byte{160, 114, 228}: "NJ SYSTEM CO.,LTD",
+       [3]byte{160, 115, 50}:  "Cashmaster International Limited",
+       [3]byte{160, 115, 252}: "Rancore Technologies Private Limited",
+       [3]byte{160, 117, 145}: "Samsung Electronics Co.,Ltd",
+       [3]byte{160, 119, 113}: "Vialis BV",
+       [3]byte{160, 120, 186}: "Pantech Co., Ltd.",
+       [3]byte{160, 130, 31}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{160, 130, 172}: "Linear DMS Solutions Sdn. Bhd.",
+       [3]byte{160, 130, 199}: "P.T.I Co.,LTD",
+       [3]byte{160, 132, 203}: "SonicSensory,Inc.",
+       [3]byte{160, 134, 29}:  "Chengdu Fuhuaxin Technology co.,Ltd",
+       [3]byte{160, 134, 198}: "Xiaomi Communications Co Ltd",
+       [3]byte{160, 134, 236}: "SAEHAN HITEC Co., Ltd",
+       [3]byte{160, 136, 105}: "Intel Corporate",
+       [3]byte{160, 136, 180}: "Intel Corporate",
+       [3]byte{160, 137, 228}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+       [3]byte{160, 138, 135}: "HuiZhou KaiYue Electronic Co.,Ltd",
+       [3]byte{160, 140, 21}:  "Gerhard D. Wempe KG",
+       [3]byte{160, 140, 155}: "Xtreme Technologies Corp",
+       [3]byte{160, 140, 248}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{160, 140, 253}: "Hewlett Packard",
+       [3]byte{160, 141, 22}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{160, 142, 120}: "Sagemcom Broadband SAS",
+       [3]byte{160, 144, 222}: "VEEDIMS,LLC",
+       [3]byte{160, 145, 105}: "LG Electronics (Mobile Communications)",
+       [3]byte{160, 145, 200}: "zte corporation",
+       [3]byte{160, 147, 71}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{160, 149, 12}:  "China Mobile IOTCompany Limited",
+       [3]byte{160, 152, 5}:   "OpenVox Communication Co Ltd",
+       [3]byte{160, 152, 237}: "Shandong Intelligent Optical Communication Development Co., Ltd.",
+       [3]byte{160, 153, 155}: "Apple, Inc.",
+       [3]byte{160, 154, 90}:  "Time Domain",
+       [3]byte{160, 155, 189}: "Total Aviation Solutions Pty Ltd",
+       [3]byte{160, 157, 134}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{160, 157, 145}: "SoundBridge",
+       [3]byte{160, 157, 193}: "China Dragon Technology Limited",
+       [3]byte{160, 158, 26}:  "Polar Electro Oy",
+       [3]byte{160, 161, 48}:  "DLI Taiwan Branch office",
+       [3]byte{160, 162, 60}:  "GPMS",
+       [3]byte{160, 163, 59}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{160, 163, 226}: "Actiontec Electronics, Inc",
+       [3]byte{160, 166, 92}:  "Supercomputing Systems AG",
+       [3]byte{160, 167, 99}:  "Polytron Vertrieb GmbH",
+       [3]byte{160, 168, 205}: "Intel Corporate",
+       [3]byte{160, 170, 253}: "EraThink Technologies Corp.",
+       [3]byte{160, 171, 27}:  "D-Link International",
+       [3]byte{160, 173, 161}: "JMR Electronics, Inc",
+       [3]byte{160, 175, 189}: "Intel Corporate",
+       [3]byte{160, 177, 0}:   "ShenZhen Cando Electronics Co.,Ltd",
+       [3]byte{160, 179, 204}: "Hewlett Packard",
+       [3]byte{160, 180, 55}:  "GD Mission Systems",
+       [3]byte{160, 180, 165}: "Samsung Electronics Co.,Ltd",
+       [3]byte{160, 181, 218}: "HongKong THTF Co., Ltd",
+       [3]byte{160, 182, 98}:  "Acutvista Innovation Co., Ltd.",
+       [3]byte{160, 184, 248}: "Amgen U.S.A. Inc.",
+       [3]byte{160, 185, 237}: "Skytap",
+       [3]byte{160, 186, 184}: "Pixon Imaging",
+       [3]byte{160, 187, 62}:  "IEEE Registration Authority",
+       [3]byte{160, 189, 205}: "BSkyB Ltd",
+       [3]byte{160, 191, 80}:  "S.C. ADD-PRODUCTION S.R.L.",
+       [3]byte{160, 191, 165}: "CORESYS",
+       [3]byte{160, 194, 222}: "Costar Video Systems",
+       [3]byte{160, 195, 222}: "Triton Electronic Systems Ltd.",
+       [3]byte{160, 196, 165}: "SYGN HOUSE CO.,LTD",
+       [3]byte{160, 197, 98}:  "ARRIS Group, Inc.",
+       [3]byte{160, 197, 137}: "Intel Corporate",
+       [3]byte{160, 197, 242}: "IEEE Registration Authority",
+       [3]byte{160, 198, 236}: "ShenZhen ANYK Technology Co.,LTD",
+       [3]byte{160, 201, 160}: "Murata Manufacturing Co., Ltd.",
+       [3]byte{160, 203, 253}: "Samsung Electronics Co.,Ltd",
+       [3]byte{160, 204, 43}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{160, 206, 200}: "CE LINK LIMITED",
+       [3]byte{160, 207, 91}:  "Cisco Systems, Inc",
+       [3]byte{160, 209, 42}:  "AXPRO Technology Inc.",
+       [3]byte{160, 211, 122}: "Intel Corporate",
+       [3]byte{160, 211, 133}: "AUMA Riester GmbH & Co. KG",
+       [3]byte{160, 211, 193}: "Hewlett Packard",
+       [3]byte{160, 215, 149}: "Apple, Inc.",
+       [3]byte{160, 216, 111}: "Private",
+       [3]byte{160, 218, 146}: "Nanjing Glarun Atten Technology Co. Ltd.",
+       [3]byte{160, 220, 4}:   "Becker-Antriebe GmbH",
+       [3]byte{160, 221, 151}: "PolarLink Technologies, Ltd",
+       [3]byte{160, 221, 229}: "SHARP Corporation",
+       [3]byte{160, 222, 5}:   "JSC Irbis-T",
+       [3]byte{160, 224, 175}: "Cisco Systems, Inc",
+       [3]byte{160, 226, 1}:   "AVTrace Ltd.(China)",
+       [3]byte{160, 226, 90}:  "Amicus SK, s.r.o.",
+       [3]byte{160, 226, 149}: "DAT System Co.,Ltd",
+       [3]byte{160, 228, 83}:  "Sony Mobile Communications AB",
+       [3]byte{160, 228, 203}: "Zyxel Communications Corporation",
+       [3]byte{160, 229, 52}:  "Stratec Biomedical AG",
+       [3]byte{160, 229, 233}: "enimai Inc",
+       [3]byte{160, 230, 248}: "Texas Instruments",
+       [3]byte{160, 233, 219}: "Ningbo FreeWings Technologies Co.,Ltd",
+       [3]byte{160, 235, 118}: "AirCUVE Inc.",
+       [3]byte{160, 236, 128}: "zte corporation",
+       [3]byte{160, 236, 249}: "Cisco Systems, Inc",
+       [3]byte{160, 237, 205}: "Apple, Inc.",
+       [3]byte{160, 239, 132}: "Seine Image Int'l Co., Ltd",
+       [3]byte{160, 242, 23}:  "GE Medical System(China) Co., Ltd.",
+       [3]byte{160, 243, 193}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{160, 243, 228}: "Alcatel-Lucent IPD",
+       [3]byte{160, 244, 25}:  "Nokia Corporation",
+       [3]byte{160, 244, 80}:  "HTC Corporation",
+       [3]byte{160, 244, 89}:  "FN-LINK TECHNOLOGY LIMITED",
+       [3]byte{160, 244, 121}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{160, 246, 253}: "Texas Instruments",
+       [3]byte{160, 248, 73}:  "Cisco Systems, Inc",
+       [3]byte{160, 248, 149}: "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{160, 249, 224}: "VIVATEL COMPANY LIMITED",
+       [3]byte{160, 252, 110}: "Telegrafia a.s.",
+       [3]byte{160, 254, 97}:  "Vivint Wireless Inc.",
+       [3]byte{160, 254, 145}: "AVAT Automation GmbH",
+       [3]byte{164, 1, 48}:    "ABIsystems Co., LTD",
+       [3]byte{164, 2, 185}:   "Intel Corporate",
+       [3]byte{164, 4, 80}:    "nFore Technology Inc.",
+       [3]byte{164, 5, 158}:   "STA Infinity LLP",
+       [3]byte{164, 7, 182}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{164, 8, 234}:   "Murata Manufacturing Co., Ltd.",
+       [3]byte{164, 8, 245}:   "Sagemcom Broadband SAS",
+       [3]byte{164, 9, 203}:   "Alfred Kaercher GmbH &amp; Co KG",
+       [3]byte{164, 11, 237}:  "Carry Technology Co.,Ltd",
+       [3]byte{164, 12, 195}:  "Cisco Systems, Inc",
+       [3]byte{164, 13, 188}:  "Xiamen Intretech Inc.",
+       [3]byte{164, 14, 43}:   "Facebook Inc",
+       [3]byte{164, 17, 21}:   "Robert Bosch Engineering and Business Solutions pvt. Ltd.",
+       [3]byte{164, 17, 99}:   "IEEE Registration Authority",
+       [3]byte{164, 18, 66}:   "NEC Platforms, Ltd.",
+       [3]byte{164, 19, 78}:   "Luxul",
+       [3]byte{164, 20, 55}:   "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{164, 21, 102}:  "Weifang GoerTek Technology Co.,Ltd.",
+       [3]byte{164, 21, 136}:  "ARRIS Group, Inc.",
+       [3]byte{164, 23, 49}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{164, 24, 117}:  "Cisco Systems, Inc",
+       [3]byte{164, 27, 192}:  "Fastec Imaging Corporation",
+       [3]byte{164, 31, 114}:  "Dell Inc.",
+       [3]byte{164, 33, 138}:  "Nortel Networks",
+       [3]byte{164, 35, 5}:    "Open Networking Laboratory",
+       [3]byte{164, 36, 179}:  "FlatFrog Laboratories AB",
+       [3]byte{164, 36, 221}:  "Cambrionix Ltd",
+       [3]byte{164, 37, 27}:   "Avaya Inc",
+       [3]byte{164, 41, 64}:   "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{164, 41, 131}:  "Boeing Defence Australia",
+       [3]byte{164, 41, 183}:  "bluesky",
+       [3]byte{164, 43, 140}:  "NETGEAR",
+       [3]byte{164, 43, 176}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{164, 44, 8}:    "Masterwork Automodules",
+       [3]byte{164, 49, 17}:   "ZIV",
+       [3]byte{164, 49, 53}:   "Apple, Inc.",
+       [3]byte{164, 51, 209}:  "Fibrlink Communications Co.,Ltd.",
+       [3]byte{164, 52, 18}:   "Thales Alenia Space",
+       [3]byte{164, 52, 217}:  "Intel Corporate",
+       [3]byte{164, 52, 241}:  "Texas Instruments",
+       [3]byte{164, 56, 49}:   "RF elements s.r.o.",
+       [3]byte{164, 56, 252}:  "Plastic Logic",
+       [3]byte{164, 58, 105}:  "Vers Inc",
+       [3]byte{164, 59, 250}:  "IEEE Registration Authority",
+       [3]byte{164, 61, 120}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{164, 62, 81}:   "ANOV FRANCE",
+       [3]byte{164, 68, 209}:  "Wingtech Group (HongKong)Limited",
+       [3]byte{164, 70, 107}:  "EOC Technology",
+       [3]byte{164, 70, 250}:  "AmTRAN Video Corporation",
+       [3]byte{164, 74, 211}:  "ST Electronics(Shanghai) Co.,Ltd",
+       [3]byte{164, 75, 21}:   "Sun Cupid Technology (HK) LTD",
+       [3]byte{164, 76, 17}:   "Cisco Systems, Inc",
+       [3]byte{164, 76, 200}:  "Dell Inc.",
+       [3]byte{164, 78, 45}:   "Adaptive Wireless Solutions, LLC",
+       [3]byte{164, 78, 49}:   "Intel Corporate",
+       [3]byte{164, 79, 41}:   "IEEE Registration Authority",
+       [3]byte{164, 80, 85}:   "busware.de",
+       [3]byte{164, 81, 111}:  "Microsoft Mobile Oy",
+       [3]byte{164, 82, 111}:  "ADB Broadband Italia",
+       [3]byte{164, 83, 133}:  "Weifang GoerTek Technology Co.,Ltd.",
+       [3]byte{164, 86, 2}:    "fenglian Technology Co.,Ltd.",
+       [3]byte{164, 86, 27}:   "MCOT Corporation",
+       [3]byte{164, 86, 48}:   "Cisco Systems, Inc",
+       [3]byte{164, 88, 15}:   "IEEE Registration Authority",
+       [3]byte{164, 90, 28}:   "smart-electronic GmbH",
+       [3]byte{164, 92, 39}:   "Nintendo Co., Ltd.",
+       [3]byte{164, 93, 54}:   "Hewlett Packard",
+       [3]byte{164, 93, 161}:  "ADB Broadband Italia",
+       [3]byte{164, 94, 96}:   "Apple, Inc.",
+       [3]byte{164, 96, 17}:   "Verifone",
+       [3]byte{164, 96, 50}:   "MRV Communications (Networks) LTD",
+       [3]byte{164, 98, 223}:  "DS Global. Co., LTD",
+       [3]byte{164, 103, 6}:   "Apple, Inc.",
+       [3]byte{164, 104, 188}: "Private",
+       [3]byte{164, 108, 42}:  "Cisco Systems, Inc",
+       [3]byte{164, 108, 193}: "LTi REEnergy GmbH",
+       [3]byte{164, 110, 121}: "DFT System Co.Ltd",
+       [3]byte{164, 112, 214}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{164, 113, 116}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{164, 119, 51}:  "Google, Inc.",
+       [3]byte{164, 119, 88}:  "Ningbo Freewings Technologies Co.,Ltd",
+       [3]byte{164, 119, 96}:  "Nokia Corporation",
+       [3]byte{164, 120, 134}: "Avaya Inc",
+       [3]byte{164, 121, 228}: "KLINFO Corp",
+       [3]byte{164, 122, 164}: "ARRIS Group, Inc.",
+       [3]byte{164, 122, 207}: "VIBICOM COMMUNICATIONS INC.",
+       [3]byte{164, 123, 44}:  "Nokia",
+       [3]byte{164, 123, 133}: "ULTIMEDIA Co Ltd,",
+       [3]byte{164, 123, 157}: "Espressif Inc.",
+       [3]byte{164, 124, 20}:  "ChargeStorm AB",
+       [3]byte{164, 124, 31}:  "Cobham plc",
+       [3]byte{164, 126, 57}:  "zte corporation",
+       [3]byte{164, 129, 238}: "Nokia Corporation",
+       [3]byte{164, 130, 105}: "Datrium, Inc.",
+       [3]byte{164, 132, 49}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{164, 133, 107}: "Q Electronics Ltd",
+       [3]byte{164, 134, 174}: "Quectel Wireless Solutions",
+       [3]byte{164, 137, 91}:  "ARK INFOSOLUTIONS PVT LTD",
+       [3]byte{164, 140, 219}: "Lenovo",
+       [3]byte{164, 141, 59}:  "Vizio, Inc",
+       [3]byte{164, 142, 10}:  "DeLaval International AB",
+       [3]byte{164, 144, 5}:   "CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD",
+       [3]byte{164, 145, 177}: "Technicolor",
+       [3]byte{164, 147, 76}:  "Cisco Systems, Inc",
+       [3]byte{164, 151, 187}: "Hitachi Industrial Equipment Systems Co.,Ltd",
+       [3]byte{164, 153, 71}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{164, 153, 129}: "FuJian Elite Power Tech CO.,LTD.",
+       [3]byte{164, 154, 88}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{164, 155, 19}:  "Digital Check",
+       [3]byte{164, 155, 245}: "Hybridserver Tec GmbH",
+       [3]byte{164, 157, 73}:  "Ketra, Inc.",
+       [3]byte{164, 158, 219}: "AutoCrib, Inc.",
+       [3]byte{164, 159, 133}: "Lyve Minds, Inc",
+       [3]byte{164, 159, 137}: "Shanghai Rui Rui Communication Technology Co.Ltd.",
+       [3]byte{164, 161, 194}: "Ericsson AB",
+       [3]byte{164, 161, 228}: "Innotube, Inc.",
+       [3]byte{164, 162, 74}:  "Cisco SPVTG",
+       [3]byte{164, 164, 211}: "Bluebank Communication Technology Co.Ltd",
+       [3]byte{164, 166, 169}: "Private",
+       [3]byte{164, 168, 15}:  "Shenzhen Coship Electronics Co., Ltd.",
+       [3]byte{164, 173, 0}:   "Ragsdale Technology",
+       [3]byte{164, 173, 184}: "Vitec Group, Camera Dynamics Ltd",
+       [3]byte{164, 174, 154}: "Maestro Wireless Solutions ltd.",
+       [3]byte{164, 177, 33}:  "Arantia 2010 S.L.",
+       [3]byte{164, 177, 151}: "Apple, Inc.",
+       [3]byte{164, 177, 233}: "Technicolor",
+       [3]byte{164, 177, 238}: "H. ZANDER GmbH & Co. KG",
+       [3]byte{164, 178, 167}: "Adaxys Solutions AG",
+       [3]byte{164, 179, 106}: "JSC SDO Chromatec",
+       [3]byte{164, 181, 46}:  "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{164, 184, 5}:   "Apple, Inc.",
+       [3]byte{164, 184, 24}:  "PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH",
+       [3]byte{164, 185, 128}: "Parking BOXX Inc.",
+       [3]byte{164, 186, 118}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{164, 186, 219}: "Dell Inc.",
+       [3]byte{164, 187, 175}: "Lime Instruments",
+       [3]byte{164, 190, 97}:  "EutroVision System, Inc.",
+       [3]byte{164, 191, 1}:   "Intel Corporate",
+       [3]byte{164, 192, 199}: "ShenZhen Hitom Communication Technology Co..LTD",
+       [3]byte{164, 192, 225}: "Nintendo Co., Ltd.",
+       [3]byte{164, 193, 56}:  "Telink Semiconductor (Taipei) Co. Ltd.",
+       [3]byte{164, 194, 171}: "Hangzhou LEAD-IT Information & Technology Co.,Ltd",
+       [3]byte{164, 195, 97}:  "Apple, Inc.",
+       [3]byte{164, 196, 148}: "Intel Corporate",
+       [3]byte{164, 198, 79}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{164, 199, 222}: "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{164, 202, 160}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{164, 204, 50}:  "Inficomm Co., Ltd",
+       [3]byte{164, 208, 148}: "Erwin Peters Systemtechnik GmbH",
+       [3]byte{164, 209, 140}: "Apple, Inc.",
+       [3]byte{164, 209, 143}: "Shenzhen Skyee Optical Fiber Communication Technology Ltd.",
+       [3]byte{164, 209, 209}: "ECOtality North America",
+       [3]byte{164, 209, 210}: "Apple, Inc.",
+       [3]byte{164, 211, 181}: "GLITEL Stropkov, s.r.o.",
+       [3]byte{164, 213, 120}: "Texas Instruments",
+       [3]byte{164, 216, 86}:  "Gimbal, Inc",
+       [3]byte{164, 216, 202}: "HONG KONG WATER WORLD TECHNOLOGY CO. LIMITED",
+       [3]byte{164, 217, 164}: "neXus ID Solutions AB",
+       [3]byte{164, 218, 63}:  "Bionics Corp.",
+       [3]byte{164, 219, 46}:  "Kingspan Environmental Ltd",
+       [3]byte{164, 219, 48}:  "Liteon Technology Corporation",
+       [3]byte{164, 220, 190}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{164, 222, 80}:  "Total Walther GmbH",
+       [3]byte{164, 222, 201}: "QLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.",
+       [3]byte{164, 224, 230}: "FILIZOLA S.A. PESAGEM E AUTOMACAO",
+       [3]byte{164, 227, 46}:  "Silicon & Software Systems Ltd.",
+       [3]byte{164, 227, 145}: "DENY FONTAINE",
+       [3]byte{164, 228, 184}: "BlackBerry RTS",
+       [3]byte{164, 229, 151}: "Gessler GmbH",
+       [3]byte{164, 230, 177}: "Shanghai Joindata Technology Co.,Ltd.",
+       [3]byte{164, 231, 49}:  "Nokia Corporation",
+       [3]byte{164, 231, 228}: "Connex GmbH",
+       [3]byte{164, 233, 117}: "Apple, Inc.",
+       [3]byte{164, 233, 145}: "SISTEMAS AUDIOVISUALES ITELSIS S.L.",
+       [3]byte{164, 233, 163}: "Honest Technology Co., Ltd",
+       [3]byte{164, 235, 211}: "Samsung Electronics Co.,Ltd",
+       [3]byte{164, 237, 78}:  "ARRIS Group, Inc.",
+       [3]byte{164, 238, 87}:  "Seiko Epson Corporation",
+       [3]byte{164, 239, 82}:  "Telewave Co., Ltd.",
+       [3]byte{164, 241, 232}: "Apple, Inc.",
+       [3]byte{164, 243, 193}: "Open Source Robotics Foundation, Inc.",
+       [3]byte{164, 243, 231}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{164, 244, 194}: "VNPT TECHNOLOGY",
+       [3]byte{164, 245, 34}:  "CHOFU SEISAKUSHO CO.,LTD",
+       [3]byte{164, 247, 208}: "LAN Accessories Co., Ltd.",
+       [3]byte{164, 251, 141}: "Hangzhou Dunchong Technology Co.Ltd",
+       [3]byte{164, 252, 206}: "Security Expert Ltd.",
+       [3]byte{168, 1, 128}:   "IMAGO Technologies GmbH",
+       [3]byte{168, 6, 0}:     "Samsung Electronics Co.,Ltd",
+       [3]byte{168, 12, 13}:   "Cisco Systems, Inc",
+       [3]byte{168, 12, 99}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{168, 12, 202}:  "Shenzhen Sundray Technologies Company Limited",
+       [3]byte{168, 17, 252}:  "ARRIS Group, Inc.",
+       [3]byte{168, 19, 116}:  "Panasonic Corporation AVC Networks Company",
+       [3]byte{168, 21, 77}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{168, 21, 89}:   "Breathometer, Inc.",
+       [3]byte{168, 21, 214}:  "Shenzhen Meione Technology CO., LTD",
+       [3]byte{168, 22, 178}:  "LG Electronics (Mobile Communications)",
+       [3]byte{168, 23, 88}:   "Elektronik System i Umeå AB",
+       [3]byte{168, 27, 24}:   "XTS CORP",
+       [3]byte{168, 27, 90}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{168, 27, 93}:   "Foxtel Management Pty Ltd",
+       [3]byte{168, 27, 106}:  "Texas Instruments",
+       [3]byte{168, 29, 22}:   "AzureWave Technology Inc.",
+       [3]byte{168, 30, 132}:  "QUANTA COMPUTER INC.",
+       [3]byte{168, 31, 175}:  "KRYPTON POLSKA",
+       [3]byte{168, 32, 102}:  "Apple, Inc.",
+       [3]byte{168, 36, 235}:  "ZAO NPO Introtest",
+       [3]byte{168, 37, 235}:  "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{168, 38, 217}:  "HTC Corporation",
+       [3]byte{168, 41, 76}:   "Precision Optical Transceivers, Inc.",
+       [3]byte{168, 43, 181}:  "Edgecore Networks Corporation",
+       [3]byte{168, 43, 214}:  "Shina System Co., Ltd",
+       [3]byte{168, 48, 173}:  "Weifang GoerTek Technology Co.,Ltd.",
+       [3]byte{168, 50, 154}:  "Digicom Futuristic Technologies Ltd.",
+       [3]byte{168, 57, 68}:   "Actiontec Electronics, Inc",
+       [3]byte{168, 64, 65}:   "Dragino Technology Co., Limited",
+       [3]byte{168, 68, 129}:  "Nokia Corporation",
+       [3]byte{168, 69, 205}:  "Siselectron Technology LTD.",
+       [3]byte{168, 69, 233}:  "Firich Enterprises CO., LTD.",
+       [3]byte{168, 71, 74}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{168, 73, 165}:  "Lisantech Co., Ltd.",
+       [3]byte{168, 78, 63}:   "Hitron Technologies. Inc",
+       [3]byte{168, 84, 178}:  "Wistron Neweb Corporation",
+       [3]byte{168, 85, 106}:  "Pocketnet Technology Inc.",
+       [3]byte{168, 87, 78}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{168, 88, 64}:   "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{168, 91, 120}:  "Apple, Inc.",
+       [3]byte{168, 91, 176}:  "Shenzhen Dehoo Technology Co.,Ltd",
+       [3]byte{168, 91, 243}:  "Audivo GmbH",
+       [3]byte{168, 92, 44}:   "Apple, Inc.",
+       [3]byte{168, 94, 228}:  "12Sided Technology, LLC",
+       [3]byte{168, 96, 182}:  "Apple, Inc.",
+       [3]byte{168, 97, 170}:  "Cloudview Limited",
+       [3]byte{168, 98, 162}:  "JIWUMEDIA CO., LTD.",
+       [3]byte{168, 99, 223}:  "DISPLAIRE CORPORATION",
+       [3]byte{168, 99, 242}:  "Texas Instruments",
+       [3]byte{168, 100, 5}:   "nimbus 9, Inc",
+       [3]byte{168, 101, 178}: "DONGGUAN YISHANG ELECTRONIC TECHNOLOGY CO., LIMITED",
+       [3]byte{168, 102, 127}: "Apple, Inc.",
+       [3]byte{168, 106, 111}: "RIM",
+       [3]byte{168, 106, 193}: "HanbitEDS Co., Ltd.",
+       [3]byte{168, 107, 124}: "SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.",
+       [3]byte{168, 107, 173}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{168, 112, 165}: "UniComm Inc.",
+       [3]byte{168, 114, 133}: "IDT, INC.",
+       [3]byte{168, 116, 29}:  "PHOENIX CONTACT Electronics GmbH",
+       [3]byte{168, 117, 214}: "FreeTek International Co., Ltd.",
+       [3]byte{168, 117, 226}: "Aventura Technologies, Inc.",
+       [3]byte{168, 119, 111}: "Zonoff",
+       [3]byte{168, 123, 57}:  "Nokia Corporation",
+       [3]byte{168, 124, 1}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{168, 126, 51}:  "Nokia Danmark A/S",
+       [3]byte{168, 128, 56}:  "ShenZhen MovingComm Technology Co., Limited",
+       [3]byte{168, 129, 149}: "Samsung Electronics Co.,Ltd",
+       [3]byte{168, 129, 241}: "BMEYE B.V.",
+       [3]byte{168, 130, 0}:   "Hisense Electric Co.,Ltd",
+       [3]byte{168, 130, 127}: "CIBN Oriental Network(Beijing) CO.,Ltd",
+       [3]byte{168, 134, 221}: "Apple, Inc.",
+       [3]byte{168, 135, 146}: "Broadband Antenna Tracking Systems",
+       [3]byte{168, 135, 237}: "ARC Wireless LLC",
+       [3]byte{168, 136, 8}:   "Apple, Inc.",
+       [3]byte{168, 140, 238}: "MicroMade Galka i Drozdz sp.j.",
+       [3]byte{168, 141, 123}: "SunDroid Global limited.",
+       [3]byte{168, 142, 36}:  "Apple, Inc.",
+       [3]byte{168, 144, 8}:   "Beijing Yuecheng Technology Co. Ltd.",
+       [3]byte{168, 146, 44}:  "LG Electronics (Mobile Communications)",
+       [3]byte{168, 147, 82}:  "SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD",
+       [3]byte{168, 147, 230}: "JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LTD",
+       [3]byte{168, 149, 176}: "Aker Subsea Ltd",
+       [3]byte{168, 150, 117}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{168, 150, 138}: "Apple, Inc.",
+       [3]byte{168, 151, 220}: "IBM",
+       [3]byte{168, 152, 198}: "Shinbo Co., Ltd.",
+       [3]byte{168, 153, 92}:  "aizo ag",
+       [3]byte{168, 155, 16}:  "inMotion Ltd.",
+       [3]byte{168, 157, 33}:  "Cisco Systems, Inc",
+       [3]byte{168, 157, 210}: "Shanghai DareGlobal Technologies Co.,Ltd",
+       [3]byte{168, 159, 186}: "Samsung Electronics Co.,Ltd",
+       [3]byte{168, 159, 236}: "ARRIS Group, Inc.",
+       [3]byte{168, 160, 137}: "Tactical Communications",
+       [3]byte{168, 161, 152}: "TCT mobile ltd",
+       [3]byte{168, 165, 226}: "MSF-Vathauer Antriebstechnik GmbH & Co KG",
+       [3]byte{168, 166, 72}:  "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{168, 166, 104}: "zte corporation",
+       [3]byte{168, 167, 149}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{168, 173, 61}:  "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{168, 176, 174}: "LEONI",
+       [3]byte{168, 177, 212}: "Cisco Systems, Inc",
+       [3]byte{168, 178, 218}: "FUJITSU LIMITED",
+       [3]byte{168, 184, 110}: "LG Electronics (Mobile Communications)",
+       [3]byte{168, 185, 179}: "ESSYS",
+       [3]byte{168, 187, 80}:  "WiZ IoT Company Limited",
+       [3]byte{168, 187, 207}: "Apple, Inc.",
+       [3]byte{168, 189, 26}:  "Honey Bee (Hong Kong) Limited",
+       [3]byte{168, 189, 39}:  "Hewlett Packard Enterprise",
+       [3]byte{168, 189, 58}:  "UNIONMAN TECHNOLOGY CO.,LTD",
+       [3]byte{168, 190, 39}:  "Apple, Inc.",
+       [3]byte{168, 194, 34}:  "TM-Research Inc.",
+       [3]byte{168, 200, 58}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{168, 200, 127}: "Roqos, Inc.",
+       [3]byte{168, 202, 123}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{168, 203, 149}: "EAST BEST CO., LTD.",
+       [3]byte{168, 204, 197}: "Saab AB (publ)",
+       [3]byte{168, 206, 144}: "CVC",
+       [3]byte{168, 208, 227}: "Systech Electronics Ltd.",
+       [3]byte{168, 208, 229}: "Juniper Networks",
+       [3]byte{168, 210, 54}:  "Lightware Visual Engineering",
+       [3]byte{168, 211, 200}: "Topcon Electronics GmbH & Co. KG",
+       [3]byte{168, 211, 247}: "Arcadyan Technology Corporation",
+       [3]byte{168, 212, 9}:   "USA 111 Inc",
+       [3]byte{168, 213, 121}: "Beijing Chushang Science and Technology Co.,Ltd",
+       [3]byte{168, 216, 40}:  "Ascensia Diabetes Care",
+       [3]byte{168, 216, 138}: "Wyconn",
+       [3]byte{168, 224, 24}:  "Nokia Corporation",
+       [3]byte{168, 227, 238}: "Sony Interactive Entertainment Inc.",
+       [3]byte{168, 229, 57}:  "Moimstone Co.,Ltd",
+       [3]byte{168, 231, 5}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{168, 232, 36}:  "INIM ELECTRONICS S.R.L.",
+       [3]byte{168, 238, 198}: "Muuselabs NV/SA",
+       [3]byte{168, 239, 38}:  "Tritonwave",
+       [3]byte{168, 240, 56}:  "SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD",
+       [3]byte{168, 242, 116}: "Samsung Electronics Co.,Ltd",
+       [3]byte{168, 244, 112}: "Fujian Newland Communication Science Technologies Co.,Ltd.",
+       [3]byte{168, 247, 224}: "PLANET Technology Corporation",
+       [3]byte{168, 249, 75}:  "Eltex Enterprise Ltd.",
+       [3]byte{168, 250, 216}: "Apple, Inc.",
+       [3]byte{168, 251, 112}: "WiseSec L.t.d",
+       [3]byte{168, 252, 183}: "Consolidated Resource Imaging",
+       [3]byte{170, 0, 0}:     "DIGITAL EQUIPMENT CORPORATION",
+       [3]byte{170, 0, 1}:     "DIGITAL EQUIPMENT CORPORATION",
+       [3]byte{170, 0, 2}:     "DIGITAL EQUIPMENT CORPORATION",
+       [3]byte{170, 0, 3}:     "DIGITAL EQUIPMENT CORPORATION",
+       [3]byte{170, 0, 4}:     "DIGITAL EQUIPMENT CORPORATION",
+       [3]byte{172, 1, 66}:    "Uriel Technologies SIA",
+       [3]byte{172, 2, 202}:   "HI Solutions, Inc.",
+       [3]byte{172, 2, 207}:   "RW Tecnologia Industria e Comercio Ltda",
+       [3]byte{172, 2, 239}:   "Comsis",
+       [3]byte{172, 4, 11}:    "Peloton Interactive, Inc",
+       [3]byte{172, 4, 129}:   "Jiangsu Huaxing Electronics Co., Ltd.",
+       [3]byte{172, 6, 19}:    "Senselogix Ltd",
+       [3]byte{172, 6, 199}:   "ServerNet S.r.l.",
+       [3]byte{172, 10, 97}:   "Labor S.r.L.",
+       [3]byte{172, 13, 27}:   "LG Electronics (Mobile Communications)",
+       [3]byte{172, 13, 254}:  "Ekon GmbH - myGEKKO",
+       [3]byte{172, 17, 211}:  "Suzhou HOTEK  Video Technology Co. Ltd",
+       [3]byte{172, 20, 97}:   "ATAW  Co., Ltd.",
+       [3]byte{172, 20, 210}:  "wi-daq, inc.",
+       [3]byte{172, 22, 45}:   "Hewlett Packard",
+       [3]byte{172, 23, 2}:    "Fibar Group sp. z o.o.",
+       [3]byte{172, 24, 38}:   "Seiko Epson Corporation",
+       [3]byte{172, 25, 159}:  "SUNGROW POWER SUPPLY CO.,LTD.",
+       [3]byte{172, 29, 223}:  "IEEE Registration Authority",
+       [3]byte{172, 31, 107}:  "Super Micro Computer, Inc.",
+       [3]byte{172, 31, 116}:  "Apple, Inc.",
+       [3]byte{172, 31, 215}:  "Real Vision Technology Co.,Ltd.",
+       [3]byte{172, 32, 46}:   "Hitron Technologies. Inc",
+       [3]byte{172, 32, 62}:   "Wuhan Tianyu Information Industry Co., Ltd.",
+       [3]byte{172, 32, 170}:  "DMATEK Co., Ltd.",
+       [3]byte{172, 34, 5}:    "Compal Broadband Networks, Inc.",
+       [3]byte{172, 34, 11}:   "ASUSTek COMPUTER INC.",
+       [3]byte{172, 35, 63}:   "Shenzhen Minew Technologies Co., Ltd.",
+       [3]byte{172, 41, 58}:   "Apple, Inc.",
+       [3]byte{172, 42, 12}:   "CSR ZHUZHOU INSTITUTE CO.,LTD.",
+       [3]byte{172, 43, 110}:  "Intel Corporate",
+       [3]byte{172, 45, 163}:  "TXTR GmbH",
+       [3]byte{172, 47, 168}:  "Humannix Co.,Ltd.",
+       [3]byte{172, 49, 157}:  "Shenzhen TG-NET Botone Technology Co.,Ltd.",
+       [3]byte{172, 52, 203}:  "Shanhai GBCOM Communication Technology Co. Ltd",
+       [3]byte{172, 54, 19}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{172, 55, 67}:   "HTC Corporation",
+       [3]byte{172, 56, 112}:  "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{172, 58, 122}:  "Roku, Inc.",
+       [3]byte{172, 60, 11}:   "Apple, Inc.",
+       [3]byte{172, 60, 180}:  "Nilan A/S",
+       [3]byte{172, 61, 5}:    "Instorescreen Aisa",
+       [3]byte{172, 61, 117}:  "HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.",
+       [3]byte{172, 63, 164}:  "TAIYO YUDEN CO.,LTD",
+       [3]byte{172, 64, 234}:  "C&T Solution Inc.",
+       [3]byte{172, 65, 34}:   "Eclipse Electronic Systems Inc.",
+       [3]byte{172, 68, 242}:  "YAMAHA CORPORATION",
+       [3]byte{172, 71, 35}:   "Genelec",
+       [3]byte{172, 72, 45}:   "Ralinwi Nanjing Electronic Technology Co., Ltd.",
+       [3]byte{172, 74, 254}:  "Hisense Broadband Multimedia Technology Co.,Ltd.",
+       [3]byte{172, 75, 200}:  "Juniper Networks",
+       [3]byte{172, 78, 46}:   "Shenzhen JingHanDa Electronics Co.Ltd",
+       [3]byte{172, 78, 145}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{172, 79, 252}:  "SVS-VISTEK GmbH",
+       [3]byte{172, 80, 54}:   "Pi-Coral Inc",
+       [3]byte{172, 81, 44}:   "Infinix mobility limited",
+       [3]byte{172, 81, 53}:   "MPI TECH",
+       [3]byte{172, 81, 238}:  "Cambridge Communication Systems Ltd",
+       [3]byte{172, 84, 236}:  "IEEE P1823 Standards Working Group",
+       [3]byte{172, 86, 44}:   "LAVA INTERNATIONAL(H.K) LIMITED",
+       [3]byte{172, 88, 59}:   "Human Assembler, Inc.",
+       [3]byte{172, 88, 123}:  "JCT Healthcare",
+       [3]byte{172, 90, 20}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{172, 93, 16}:   "Pace Americas",
+       [3]byte{172, 94, 140}:  "Utillink",
+       [3]byte{172, 95, 62}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{172, 96, 182}:  "Ericsson AB",
+       [3]byte{172, 97, 35}:   "Drivven, Inc.",
+       [3]byte{172, 97, 117}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{172, 97, 234}:  "Apple, Inc.",
+       [3]byte{172, 98, 13}:   "Jabil Circuit(Wuxi) Co.,Ltd",
+       [3]byte{172, 99, 190}:  "Amazon Technologies Inc.",
+       [3]byte{172, 100, 23}:  "Siemens AG - Industrial Automation - EWA",
+       [3]byte{172, 100, 98}:  "zte corporation",
+       [3]byte{172, 100, 221}: "IEEE Registration Authority",
+       [3]byte{172, 103, 6}:   "Ruckus Wireless",
+       [3]byte{172, 103, 111}: "Electrocompaniet A.S.",
+       [3]byte{172, 107, 15}:  "CADENCE DESIGN SYSTEMS INC",
+       [3]byte{172, 107, 172}: "Jenny Science AG",
+       [3]byte{172, 110, 26}:  "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{172, 111, 79}:  "Enspert Inc",
+       [3]byte{172, 111, 187}: "TATUNG Technology Inc.",
+       [3]byte{172, 111, 217}: "Valueplus Inc.",
+       [3]byte{172, 114, 54}:  "Lexking Technology Co., Ltd.",
+       [3]byte{172, 114, 137}: "Intel Corporate",
+       [3]byte{172, 116, 9}:   "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{172, 122, 66}:  "iConnectivity",
+       [3]byte{172, 122, 77}:  "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{172, 123, 161}: "Intel Corporate",
+       [3]byte{172, 126, 138}: "Cisco Systems, Inc",
+       [3]byte{172, 127, 62}:  "Apple, Inc.",
+       [3]byte{172, 128, 214}: "Hexatronic AB",
+       [3]byte{172, 129, 18}:  "Gemtek Technology Co., Ltd.",
+       [3]byte{172, 129, 243}: "Nokia Corporation",
+       [3]byte{172, 131, 23}:  "Shenzhen Furtunetel Communication Co., Ltd",
+       [3]byte{172, 131, 240}: "ImmediaTV Corporation",
+       [3]byte{172, 131, 243}: "AMPAK Technology, Inc.",
+       [3]byte{172, 132, 198}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{172, 132, 201}: "Sagemcom Broadband SAS",
+       [3]byte{172, 133, 61}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{172, 134, 116}: "Open Mesh, Inc.",
+       [3]byte{172, 134, 126}: "Create New Technology (HK) Limited Company",
+       [3]byte{172, 135, 163}: "Apple, Inc.",
+       [3]byte{172, 137, 149}: "AzureWave Technology Inc.",
+       [3]byte{172, 138, 205}: "ROGER D.Wensker, G.Wensker sp.j.",
+       [3]byte{172, 141, 20}:  "Smartrove Inc",
+       [3]byte{172, 147, 47}:  "Nokia Corporation",
+       [3]byte{172, 148, 3}:   "Envision Peripherals Inc",
+       [3]byte{172, 154, 34}:  "NXP Semiconductors",
+       [3]byte{172, 154, 150}: "Lantiq Deutschland GmbH",
+       [3]byte{172, 155, 10}:  "Sony Corporation",
+       [3]byte{172, 155, 132}: "Smak Tecnologia e Automacao",
+       [3]byte{172, 156, 228}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{172, 158, 23}:  "ASUSTek COMPUTER INC.",
+       [3]byte{172, 160, 22}:  "Cisco Systems, Inc",
+       [3]byte{172, 162, 19}:  "Shenzhen Bilian electronic CO.,LTD",
+       [3]byte{172, 162, 44}:  "Baycity Technologies Ltd",
+       [3]byte{172, 163, 30}:  "Aruba Networks",
+       [3]byte{172, 164, 48}:  "Peerless AV",
+       [3]byte{172, 166, 103}: "Electronic Systems Protection, Inc.",
+       [3]byte{172, 169, 25}:  "TrekStor GmbH",
+       [3]byte{172, 169, 160}: "Audioengine, Ltd.",
+       [3]byte{172, 171, 46}:  "Beijing LasNubes Technology Co., Ltd.",
+       [3]byte{172, 171, 141}: "Lyngso Marine A/S",
+       [3]byte{172, 171, 191}: "AthenTek Inc.",
+       [3]byte{172, 175, 185}: "Samsung Electronics Co.,Ltd",
+       [3]byte{172, 179, 19}:  "ARRIS Group, Inc.",
+       [3]byte{172, 181, 125}: "Liteon Technology Corporation",
+       [3]byte{172, 183, 79}:  "METEL s.r.o.",
+       [3]byte{172, 184, 89}:  "Uniband Electronic Corp,",
+       [3]byte{172, 188, 50}:  "Apple, Inc.",
+       [3]byte{172, 189, 11}:  "IMAC CO.,LTD",
+       [3]byte{172, 190, 117}: "Ufine Technologies Co.,Ltd.",
+       [3]byte{172, 190, 182}: "Visualedge Technology Co., Ltd.",
+       [3]byte{172, 193, 238}: "Xiaomi Communications Co Ltd",
+       [3]byte{172, 194, 236}: "CLT INT'L IND. CORP.",
+       [3]byte{172, 195, 58}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{172, 197, 27}:  "Zhuhai Pantum Electronics Co., Ltd.",
+       [3]byte{172, 197, 149}: "Graphite Systems",
+       [3]byte{172, 198, 98}:  "MitraStar Technology Corp.",
+       [3]byte{172, 198, 152}: "Kohzu Precision Co., Ltd.",
+       [3]byte{172, 199, 63}:  "VITSMO CO., LTD.",
+       [3]byte{172, 201, 53}:  "Ness Corporation",
+       [3]byte{172, 202, 84}:  "Telldus Technologies AB",
+       [3]byte{172, 202, 142}: "ODA Technologies",
+       [3]byte{172, 202, 171}: "Virtual Electric Inc",
+       [3]byte{172, 202, 186}: "Midokura Co., Ltd.",
+       [3]byte{172, 203, 9}:   "Hefcom Metering (Pty) Ltd",
+       [3]byte{172, 204, 142}: "Axis Communications AB",
+       [3]byte{172, 206, 143}: "HWA YAO TECHNOLOGIES CO., LTD",
+       [3]byte{172, 207, 35}:  "Hi-flying electronics technology Co.,Ltd",
+       [3]byte{172, 207, 92}:  "Apple, Inc.",
+       [3]byte{172, 207, 133}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{172, 208, 116}: "Espressif Inc.",
+       [3]byte{172, 209, 128}: "Crexendo Business Solutions, Inc.",
+       [3]byte{172, 209, 184}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{172, 211, 100}: "ABB SPA, ABB SACE DIV.",
+       [3]byte{172, 214, 87}:  "Shaanxi GuoLian Digital TV Technology Co.,Ltd.",
+       [3]byte{172, 217, 214}: "tci GmbH",
+       [3]byte{172, 219, 218}: "Shenzhen Geniatech Inc, Ltd",
+       [3]byte{172, 220, 229}: "Procter & Gamble Company",
+       [3]byte{172, 222, 72}:  "Private",
+       [3]byte{172, 224, 16}:  "Liteon Technology Corporation",
+       [3]byte{172, 224, 105}: "ISAAC Instruments",
+       [3]byte{172, 226, 21}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{172, 226, 211}: "Hewlett Packard",
+       [3]byte{172, 227, 72}:  "MadgeTech, Inc",
+       [3]byte{172, 228, 46}:  "SK hynix",
+       [3]byte{172, 228, 181}: "Apple, Inc.",
+       [3]byte{172, 229, 240}: "Doppler Labs",
+       [3]byte{172, 230, 75}:  "Shenzhen Baojia Battery Technology Co., Ltd.",
+       [3]byte{172, 231, 123}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{172, 232, 123}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{172, 232, 126}: "Bytemark Computer Consulting Ltd",
+       [3]byte{172, 233, 127}: "IoT Tech Limited",
+       [3]byte{172, 233, 170}: "Hay Systems Ltd",
+       [3]byte{172, 234, 106}: "GENIX INFOCOMM CO., LTD.",
+       [3]byte{172, 236, 128}: "ARRIS Group, Inc.",
+       [3]byte{172, 237, 92}:  "Intel Corporate",
+       [3]byte{172, 238, 59}:  "6harmonics Inc",
+       [3]byte{172, 238, 158}: "Samsung Electronics Co.,Ltd",
+       [3]byte{172, 240, 178}: "Becker Electronics Taiwan Ltd.",
+       [3]byte{172, 241, 223}: "D-Link International",
+       [3]byte{172, 242, 197}: "Cisco Systems, Inc",
+       [3]byte{172, 247, 243}: "Xiaomi Communications Co Ltd",
+       [3]byte{172, 248, 92}:  "Private",
+       [3]byte{172, 249, 126}: "ELESYS INC.",
+       [3]byte{172, 253, 147}: "Weifang GoerTek Technology Co.,Ltd.",
+       [3]byte{172, 253, 206}: "Intel Corporate",
+       [3]byte{172, 253, 236}: "Apple, Inc.",
+       [3]byte{176, 0, 180}:   "Cisco Systems, Inc",
+       [3]byte{176, 5, 148}:   "Liteon Technology Corporation",
+       [3]byte{176, 8, 191}:   "Vital Connect, Inc.",
+       [3]byte{176, 9, 211}:   "Avizia",
+       [3]byte{176, 9, 218}:   "Ring Solutions",
+       [3]byte{176, 16, 65}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{176, 18, 3}:    "Dynamics Hong Kong Limited",
+       [3]byte{176, 18, 102}:  "Futaba-Kikaku",
+       [3]byte{176, 20, 8}:    "LIGHTSPEED INTERNATIONAL CO.",
+       [3]byte{176, 23, 67}:   "EDISON GLOBAL CIRCUITS LLC",
+       [3]byte{176, 25, 198}:  "Apple, Inc.",
+       [3]byte{176, 27, 124}:  "Ontrol A.S.",
+       [3]byte{176, 27, 210}:  "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+       [3]byte{176, 28, 145}:  "Elim Co",
+       [3]byte{176, 31, 41}:   "Helvetia INC.",
+       [3]byte{176, 31, 129}:  "IEEE Registration Authority",
+       [3]byte{176, 36, 243}:  "Progeny Systems",
+       [3]byte{176, 37, 170}:  "Private",
+       [3]byte{176, 38, 40}:   "Broadcom Limited",
+       [3]byte{176, 52, 149}:  "Apple, Inc.",
+       [3]byte{176, 53, 11}:   "MOBIWIRE MOBILES (NINGBO) CO.,LTD",
+       [3]byte{176, 53, 141}:  "Nokia Corporation",
+       [3]byte{176, 53, 159}:  "Intel Corporate",
+       [3]byte{176, 56, 41}:   "Siliconware Precision Industries Co., Ltd.",
+       [3]byte{176, 56, 80}:   "Nanjing CAS-ZDC IOT SYSTEM CO.,LTD",
+       [3]byte{176, 57, 86}:   "NETGEAR",
+       [3]byte{176, 61, 150}:  "Vision Valley FZ LLC",
+       [3]byte{176, 62, 176}:  "MICRODIA Ltd.",
+       [3]byte{176, 64, 137}:  "Senient Systems LTD",
+       [3]byte{176, 65, 29}:   "ITTIM Technologies",
+       [3]byte{176, 67, 93}:   "NuLEDs, Inc.",
+       [3]byte{176, 69, 21}:   "mira fitness,LLC.",
+       [3]byte{176, 69, 25}:   "TCT mobile ltd",
+       [3]byte{176, 69, 69}:   "YACOUB Automation GmbH",
+       [3]byte{176, 70, 252}:  "MitraStar Technology Corp.",
+       [3]byte{176, 71, 191}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{176, 72, 26}:   "Apple, Inc.",
+       [3]byte{176, 72, 122}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{176, 73, 95}:   "OMRON HEALTHCARE Co., Ltd.",
+       [3]byte{176, 75, 191}:  "PT HAN SUNG ELECTORONICS INDONESIA",
+       [3]byte{176, 76, 5}:    "Fresenius Medical Care Deutschland GmbH",
+       [3]byte{176, 78, 38}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{176, 80, 188}:  "SHENZHEN BASICOM ELECTRONIC CO.,LTD.",
+       [3]byte{176, 81, 142}:  "Holl technology CO.Ltd.",
+       [3]byte{176, 82, 22}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{176, 85, 8}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{176, 87, 6}:    "Vallox Oy",
+       [3]byte{176, 88, 196}:  "Broadcast Microwave Services, Inc",
+       [3]byte{176, 89, 71}:   "Shenzhen Qihu Intelligent Technology Company Limited",
+       [3]byte{176, 90, 218}:  "Hewlett Packard",
+       [3]byte{176, 91, 31}:   "THERMO FISHER SCIENTIFIC S.P.A.",
+       [3]byte{176, 91, 103}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{176, 92, 229}:  "Nokia Corporation",
+       [3]byte{176, 97, 199}:  "Ericsson-LG Enterprise",
+       [3]byte{176, 101, 99}:  "Shanghai Railway Communication Factory",
+       [3]byte{176, 101, 189}: "Apple, Inc.",
+       [3]byte{176, 104, 182}: "Hangzhou OYE Technology Co. Ltd",
+       [3]byte{176, 105, 113}: "DEI Sales, Inc.",
+       [3]byte{176, 108, 191}: "3ality Digital Systems GmbH",
+       [3]byte{176, 110, 191}: "ASUSTek COMPUTER INC.",
+       [3]byte{176, 112, 45}:  "Apple, Inc.",
+       [3]byte{176, 114, 191}: "Murata Manufacturing Co., Ltd.",
+       [3]byte{176, 117, 12}:  "QA Cafe",
+       [3]byte{176, 117, 77}:  "Nokia",
+       [3]byte{176, 117, 213}: "zte corporation",
+       [3]byte{176, 119, 172}: "ARRIS Group, Inc.",
+       [3]byte{176, 120, 112}: "Wi-NEXT, Inc.",
+       [3]byte{176, 120, 240}: "Beijing HuaqinWorld Technology Co.,Ltd.",
+       [3]byte{176, 121, 8}:   "Cummings Engineering",
+       [3]byte{176, 121, 60}:  "Revolv Inc",
+       [3]byte{176, 121, 148}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{176, 125, 71}:  "Cisco Systems, Inc",
+       [3]byte{176, 125, 98}:  "Dipl.-Ing. H. Horstmann GmbH",
+       [3]byte{176, 126, 112}: "Zadara Storage Ltd.",
+       [3]byte{176, 127, 185}: "NETGEAR",
+       [3]byte{176, 128, 140}: "Laser Light Engines",
+       [3]byte{176, 129, 216}: "I-sys Corp",
+       [3]byte{176, 131, 254}: "Dell Inc.",
+       [3]byte{176, 134, 158}: "Chloride S.r.L",
+       [3]byte{176, 136, 7}:   "Strata Worldwide",
+       [3]byte{176, 137, 0}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{176, 137, 145}: "LGE",
+       [3]byte{176, 137, 194}: "Zyptonite",
+       [3]byte{176, 142, 26}:  "URadio Systems Co., Ltd",
+       [3]byte{176, 144, 116}: "Fulan Electronics Limited",
+       [3]byte{176, 144, 212}: "Shenzhen Hoin Internet Technology Co., Ltd",
+       [3]byte{176, 145, 34}:  "Texas Instruments",
+       [3]byte{176, 145, 52}:  "Taleo",
+       [3]byte{176, 145, 55}:  "ISis ImageStream Internet Solutions, Inc",
+       [3]byte{176, 147, 91}:  "ARRIS Group, Inc.",
+       [3]byte{176, 149, 142}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{176, 150, 108}: "Lanbowan Technology Ltd.",
+       [3]byte{176, 151, 58}:  "E-Fuel Corporation",
+       [3]byte{176, 152, 43}:  "Sagemcom Broadband SAS",
+       [3]byte{176, 152, 159}: "LG CNS",
+       [3]byte{176, 153, 40}:  "FUJITSU LIMITED",
+       [3]byte{176, 154, 226}: "STEMMER IMAGING GmbH",
+       [3]byte{176, 155, 212}: "GNH Software India Private Limited",
+       [3]byte{176, 159, 186}: "Apple, Inc.",
+       [3]byte{176, 161, 10}:  "Pivotal Systems Corporation",
+       [3]byte{176, 162, 231}: "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{176, 163, 126}: "Qingdao Haier Telecom Co.,Ltd",
+       [3]byte{176, 167, 42}:  "Ensemble Designs, Inc.",
+       [3]byte{176, 167, 55}:  "Roku, Inc.",
+       [3]byte{176, 168, 110}: "Juniper Networks",
+       [3]byte{176, 170, 54}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{176, 170, 119}: "Cisco Systems, Inc",
+       [3]byte{176, 172, 250}: "FUJITSU LIMITED",
+       [3]byte{176, 173, 170}: "Avaya Inc",
+       [3]byte{176, 178, 143}: "Sagemcom Broadband SAS",
+       [3]byte{176, 178, 220}: "Zyxel Communications Corporation",
+       [3]byte{176, 179, 43}:  "Slican Sp. z o.o.",
+       [3]byte{176, 180, 72}:  "Texas Instruments",
+       [3]byte{176, 184, 213}: "Nanjing Nengrui Auto Equipment CO.,Ltd",
+       [3]byte{176, 185, 138}: "NETGEAR",
+       [3]byte{176, 189, 109}: "Echostreams Innovative Solutions",
+       [3]byte{176, 189, 161}: "ZAKLAD ELEKTRONICZNY SIMS",
+       [3]byte{176, 191, 153}: "WIZITDONGDO",
+       [3]byte{176, 192, 144}: "Chicony Electronics Co., Ltd.",
+       [3]byte{176, 193, 40}:  "Adler ELREHA GmbH",
+       [3]byte{176, 193, 158}: "zte corporation",
+       [3]byte{176, 194, 5}:   "BIONIME",
+       [3]byte{176, 194, 135}: "Technicolor CH USA Inc.",
+       [3]byte{176, 196, 108}: "Senseit",
+       [3]byte{176, 196, 231}: "Samsung Electronics Co.,Ltd",
+       [3]byte{176, 197, 84}:  "D-Link International",
+       [3]byte{176, 197, 89}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{176, 197, 202}: "IEEE Registration Authority",
+       [3]byte{176, 198, 154}: "Juniper Networks",
+       [3]byte{176, 199, 69}:  "BUFFALO.INC",
+       [3]byte{176, 200, 63}:  "Jiangsu Cynray IOT Co., Ltd.",
+       [3]byte{176, 200, 173}: "People Power Company",
+       [3]byte{176, 201, 91}:  "Beijing Symtech CO.,LTD",
+       [3]byte{176, 202, 104}: "Apple, Inc.",
+       [3]byte{176, 206, 24}:  "Zhejiang shenghui lighting co.,Ltd",
+       [3]byte{176, 207, 77}:  "MI-Zone Technology Ireland",
+       [3]byte{176, 208, 156}: "Samsung Electronics Co.,Ltd",
+       [3]byte{176, 210, 245}: "Vello Systems, Inc.",
+       [3]byte{176, 213, 157}: "Shenzhen Zowee Technology Co., Ltd",
+       [3]byte{176, 213, 204}: "Texas Instruments",
+       [3]byte{176, 215, 197}: "Logipix Ltd",
+       [3]byte{176, 215, 204}: "Tridonic GmbH & Co KG",
+       [3]byte{176, 218, 0}:   "CERA ELECTRONIQUE",
+       [3]byte{176, 218, 249}: "ARRIS Group, Inc.",
+       [3]byte{176, 223, 58}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{176, 223, 193}: "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{176, 224, 60}:  "TCT mobile ltd",
+       [3]byte{176, 225, 126}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{176, 226, 53}:  "Xiaomi Communications Co Ltd",
+       [3]byte{176, 226, 229}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{176, 227, 157}: "CAT SYSTEM CO.,LTD.",
+       [3]byte{176, 229, 14}:  "NRG SYSTEMS INC",
+       [3]byte{176, 229, 237}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{176, 231, 84}:  "2Wire Inc",
+       [3]byte{176, 232, 146}: "Seiko Epson Corporation",
+       [3]byte{176, 233, 126}: "Advanced Micro Peripherals",
+       [3]byte{176, 234, 188}: "ASKEY COMPUTER CORP",
+       [3]byte{176, 236, 113}: "Samsung Electronics Co.,Ltd",
+       [3]byte{176, 236, 143}: "GMX SAS",
+       [3]byte{176, 236, 225}: "Private",
+       [3]byte{176, 238, 69}:  "AzureWave Technology Inc.",
+       [3]byte{176, 238, 123}: "Roku, Inc",
+       [3]byte{176, 241, 163}: "Fengfan (BeiJing) Technology Co., Ltd.",
+       [3]byte{176, 241, 188}: "Dhemax Ingenieros Ltda",
+       [3]byte{176, 241, 236}: "AMPAK Technology, Inc.",
+       [3]byte{176, 248, 147}: "Shanghai MXCHIP Information Technology Co., Ltd.",
+       [3]byte{176, 249, 99}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{176, 250, 235}: "Cisco Systems, Inc",
+       [3]byte{176, 252, 54}:  "CyberTAN Technology Inc.",
+       [3]byte{176, 254, 189}: "Private",
+       [3]byte{180, 0, 22}:    "INGENICO TERMINALS SAS",
+       [3]byte{180, 0, 156}:   "CableWorld Ltd.",
+       [3]byte{180, 1, 66}:    "GCI Science & Technology Co.,LTD",
+       [3]byte{180, 4, 24}:    "Smartchip Integrated Inc.",
+       [3]byte{180, 5, 102}:   "SP Best Corporation Co., LTD.",
+       [3]byte{180, 7, 249}:   "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{180, 8, 50}:    "TC Communications",
+       [3]byte{180, 10, 198}:  "DEXON Systems Ltd.",
+       [3]byte{180, 11, 68}:   "Smartisan Technology Co., Ltd.",
+       [3]byte{180, 11, 122}:  "Brusa Elektronik AG",
+       [3]byte{180, 12, 37}:   "Palo Alto Networks",
+       [3]byte{180, 14, 150}:  "HERAN",
+       [3]byte{180, 14, 220}:  "LG-Ericsson Co.,Ltd.",
+       [3]byte{180, 15, 59}:   "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{180, 20, 137}:  "Cisco Systems, Inc",
+       [3]byte{180, 21, 19}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{180, 23, 128}:  "DTI Group Ltd",
+       [3]byte{180, 24, 209}:  "Apple, Inc.",
+       [3]byte{180, 29, 239}:  "Internet Laboratories, Inc.",
+       [3]byte{180, 33, 29}:   "Beijing GuangXin Technology Co., Ltd",
+       [3]byte{180, 33, 138}:  "Dog Hunter LLC",
+       [3]byte{180, 36, 231}:  "Codetek Technology Co.,Ltd",
+       [3]byte{180, 40, 241}:  "E-Prime Co., Ltd.",
+       [3]byte{180, 41, 61}:   "Shenzhen Urovo Technology Co.,Ltd.",
+       [3]byte{180, 42, 14}:   "Technicolor CH USA Inc.",
+       [3]byte{180, 42, 57}:   "ORBIT MERRET, spol. s r. o.",
+       [3]byte{180, 44, 146}:  "Zhejiang Weirong Electronic Co., Ltd",
+       [3]byte{180, 44, 190}:  "Direct Payment Solutions Limited",
+       [3]byte{180, 45, 86}:   "Extreme Networks, Inc.",
+       [3]byte{180, 48, 82}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{180, 48, 192}:  "York Instruments Ltd",
+       [3]byte{180, 49, 184}:  "Aviwest",
+       [3]byte{180, 52, 108}:  "MATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED",
+       [3]byte{180, 53, 100}:  "Fujian Tian Cheng Electron Science & Technical Development Co.,Ltd.",
+       [3]byte{180, 53, 247}:  "Zhejiang Pearmain Electronics Co.ltd.",
+       [3]byte{180, 54, 169}:  "Fibocom Wireless Inc.",
+       [3]byte{180, 54, 227}:  "KBVISION GROUP",
+       [3]byte{180, 55, 65}:   "Consert, Inc.",
+       [3]byte{180, 55, 209}:  "IEEE Registration Authority",
+       [3]byte{180, 57, 52}:   "Pen Generations, Inc.",
+       [3]byte{180, 57, 214}:  "ProCurve Networking by HP",
+       [3]byte{180, 58, 40}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{180, 61, 178}:  "Degreane Horizon",
+       [3]byte{180, 62, 59}:   "Viableware, Inc",
+       [3]byte{180, 65, 122}:  "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{180, 67, 13}:   "Broadlink Pty Ltd",
+       [3]byte{180, 71, 94}:   "Avaya Inc",
+       [3]byte{180, 75, 210}:  "Apple, Inc.",
+       [3]byte{180, 76, 194}:  "NR ELECTRIC CO., LTD",
+       [3]byte{180, 79, 150}:  "Zhejiang Xinzailing Technology co., ltd",
+       [3]byte{180, 81, 249}:  "NB Software",
+       [3]byte{180, 82, 83}:   "Seagate Technology",
+       [3]byte{180, 82, 125}:  "Sony Mobile Communications AB",
+       [3]byte{180, 82, 126}:  "Sony Mobile Communications AB",
+       [3]byte{180, 85, 112}:  "Borea",
+       [3]byte{180, 86, 185}:  "Teraspek Technologies Co.,Ltd",
+       [3]byte{180, 88, 97}:   "CRemote, LLC",
+       [3]byte{180, 92, 164}:  "Thing-talk Wireless Communication Technologies Corporation Limited",
+       [3]byte{180, 93, 80}:   "Aruba Networks",
+       [3]byte{180, 97, 255}:  "Lumigon A/S",
+       [3]byte{180, 98, 56}:   "Exablox",
+       [3]byte{180, 98, 147}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{180, 98, 173}:  "Elysia Germany GmbH",
+       [3]byte{180, 102, 152}: "Zealabs srl",
+       [3]byte{180, 103, 233}: "Qingdao GoerTek Technology Co., Ltd.",
+       [3]byte{180, 109, 53}:  "Dalian Seasky Automation Co;Ltd",
+       [3]byte{180, 109, 131}: "Intel Corporate",
+       [3]byte{180, 115, 86}:  "Hangzhou Treebear Networking Co., Ltd.",
+       [3]byte{180, 116, 67}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{180, 116, 71}:  "CoreOS",
+       [3]byte{180, 116, 159}: "ASKEY COMPUTER CORP",
+       [3]byte{180, 117, 14}:  "Belkin International Inc.",
+       [3]byte{180, 121, 167}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{180, 124, 41}:  "Shenzhen Guzidi Technology Co.,Ltd",
+       [3]byte{180, 124, 156}: "Amazon Technologies Inc.",
+       [3]byte{180, 127, 94}:  "Foresight Manufacture (S) Pte Ltd",
+       [3]byte{180, 130, 85}:  "Research Products Corporation",
+       [3]byte{180, 130, 123}: "AKG Acoustics GmbH",
+       [3]byte{180, 130, 197}: "Relay2, Inc.",
+       [3]byte{180, 130, 254}: "ASKEY COMPUTER CORP",
+       [3]byte{180, 133, 71}:  "Amptown System Company GmbH",
+       [3]byte{180, 137, 16}:  "Coster T.E. S.P.A.",
+       [3]byte{180, 139, 25}:  "Apple, Inc.",
+       [3]byte{180, 148, 78}:  "WeTelecom Co., Ltd.",
+       [3]byte{180, 150, 145}: "Intel Corporate",
+       [3]byte{180, 152, 66}:  "zte corporation",
+       [3]byte{180, 153, 76}:  "Texas Instruments",
+       [3]byte{180, 153, 186}: "Hewlett Packard",
+       [3]byte{180, 156, 223}: "Apple, Inc.",
+       [3]byte{180, 157, 11}:  "BQ",
+       [3]byte{180, 157, 180}: "Axion Technologies Inc.",
+       [3]byte{180, 158, 172}: "Imagik Int'l Corp",
+       [3]byte{180, 158, 230}: "SHENZHEN TECHNOLOGY CO LTD",
+       [3]byte{180, 163, 130}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{180, 164, 181}: "Zen Eye Co.,Ltd",
+       [3]byte{180, 164, 227}: "Cisco Systems, Inc",
+       [3]byte{180, 165, 169}: "MODI GmbH",
+       [3]byte{180, 165, 239}: "Sercomm Corporation.",
+       [3]byte{180, 168, 40}:  "Shenzhen Concox Information Technology Co., Ltd",
+       [3]byte{180, 168, 43}:  "Histar Digital Electronics Co., Ltd.",
+       [3]byte{180, 169, 90}:  "Avaya Inc",
+       [3]byte{180, 169, 132}: "Symantec Corporation",
+       [3]byte{180, 169, 254}: "GHIA Technology (Shenzhen) LTD",
+       [3]byte{180, 170, 77}:  "Ensequence, Inc.",
+       [3]byte{180, 171, 44}:  "MtM Technology Corporation",
+       [3]byte{180, 174, 43}:  "Microsoft",
+       [3]byte{180, 174, 111}: "Circle Reliance, Inc DBA Cranberry Networks",
+       [3]byte{180, 176, 23}:  "Avaya Inc",
+       [3]byte{180, 177, 90}:  "Siemens AG Energy Management Division",
+       [3]byte{180, 178, 101}: "DAEHO I&T",
+       [3]byte{180, 179, 98}:  "zte corporation",
+       [3]byte{180, 179, 132}: "ShenZhen Figigantic Electronic Co.,Ltd",
+       [3]byte{180, 181, 47}:  "Hewlett Packard",
+       [3]byte{180, 181, 66}:  "Hubbell Power Systems, Inc.",
+       [3]byte{180, 181, 175}: "Minsung Electronics",
+       [3]byte{180, 182, 118}: "Intel Corporate",
+       [3]byte{180, 184, 89}:  "Texa Spa",
+       [3]byte{180, 184, 141}: "Thuh Company",
+       [3]byte{180, 191, 246}: "Samsung Electronics Co.,Ltd",
+       [3]byte{180, 193, 112}: "Yi chip Microelectronics (Hangzhou) Co., Ltd",
+       [3]byte{180, 196, 78}:  "VXL eTech Pvt Ltd",
+       [3]byte{180, 198, 248}: "Axilspot Communication",
+       [3]byte{180, 199, 153}: "Extreme Networks, Inc.",
+       [3]byte{180, 200, 16}:  "UMPI Elettronica",
+       [3]byte{180, 204, 233}: "PROSYST",
+       [3]byte{180, 206, 246}: "HTC Corporation",
+       [3]byte{180, 207, 219}: "Shenzhen Jiuzhou Electric Co.,LTD",
+       [3]byte{180, 209, 53}:  "Cloudistics",
+       [3]byte{180, 213, 189}: "Intel Corporate",
+       [3]byte{180, 214, 78}:  "Caldero Limited",
+       [3]byte{180, 216, 169}: "BetterBots",
+       [3]byte{180, 216, 222}: "iota Computing, Inc.",
+       [3]byte{180, 221, 21}:  "ControlThings Oy Ab",
+       [3]byte{180, 223, 59}:  "Chromlech",
+       [3]byte{180, 223, 250}: "Litemax Electronics Inc.",
+       [3]byte{180, 224, 205}: "Fusion-io, Inc",
+       [3]byte{180, 225, 15}:  "Dell Inc.",
+       [3]byte{180, 225, 196}: "Microsoft Mobile Oy",
+       [3]byte{180, 225, 235}: "Private",
+       [3]byte{180, 230, 42}:  "LG Innotek",
+       [3]byte{180, 231, 130}: "Vivalnk",
+       [3]byte{180, 233, 176}: "Cisco Systems, Inc",
+       [3]byte{180, 237, 25}:  "Pie Digital, Inc.",
+       [3]byte{180, 237, 84}:  "Wohler Technologies",
+       [3]byte{180, 238, 180}: "ASKEY COMPUTER CORP",
+       [3]byte{180, 238, 212}: "Texas Instruments",
+       [3]byte{180, 239, 4}:   "DAIHAN Scientific Co., Ltd.",
+       [3]byte{180, 239, 57}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{180, 239, 250}: "Lemobile Information Technology (Beijing) Co., Ltd.",
+       [3]byte{180, 240, 171}: "Apple, Inc.",
+       [3]byte{180, 241, 218}: "LG Electronics (Mobile Communications)",
+       [3]byte{180, 242, 232}: "ARRIS Group, Inc.",
+       [3]byte{180, 243, 35}:  "PETATEL INC.",
+       [3]byte{180, 246, 28}:  "Apple, Inc.",
+       [3]byte{180, 248, 30}:  "Kinova",
+       [3]byte{180, 251, 228}: "Ubiquiti Networks Inc.",
+       [3]byte{180, 252, 117}: "SEMA Electronics(HK) CO.,LTD",
+       [3]byte{180, 254, 140}: "Centro Sicurezza Italia SpA",
+       [3]byte{184, 0, 24}:    "Htel",
+       [3]byte{184, 3, 5}:     "Intel Corporate",
+       [3]byte{184, 4, 21}:    "Bayan Audio",
+       [3]byte{184, 5, 171}:   "zte corporation",
+       [3]byte{184, 7, 22}:    "vivo Mobile Communication Co., Ltd.",
+       [3]byte{184, 8, 207}:   "Intel Corporate",
+       [3]byte{184, 8, 215}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{184, 9, 138}:   "Apple, Inc.",
+       [3]byte{184, 11, 157}:  "ROPEX Industrie-Elektronik GmbH",
+       [3]byte{184, 19, 233}:  "Trace Live Network",
+       [3]byte{184, 20, 19}:   "Keen High Holding(HK) Ltd.",
+       [3]byte{184, 22, 25}:   "ARRIS Group, Inc.",
+       [3]byte{184, 22, 219}:  "CHANT SINCERE CO.,LTD",
+       [3]byte{184, 23, 194}:  "Apple, Inc.",
+       [3]byte{184, 24, 111}:  "ORIENTAL MOTOR CO., LTD.",
+       [3]byte{184, 25, 153}:  "Nesys",
+       [3]byte{184, 29, 170}:  "LG Electronics (Mobile Communications)",
+       [3]byte{184, 32, 231}:  "Guangzhou Horizontal Information & Network Integration Co. Ltd",
+       [3]byte{184, 34, 79}:   "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{184, 36, 16}:   "Magneti Marelli Slovakia s.r.o.",
+       [3]byte{184, 36, 26}:   "SWEDA INFORMATICA LTDA",
+       [3]byte{184, 36, 240}:  "SOYO Technology Development Co., Ltd.",
+       [3]byte{184, 38, 108}:  "ANOV France",
+       [3]byte{184, 38, 212}:  "Furukawa Industrial S.A. Produtos Elétricos",
+       [3]byte{184, 39, 235}:  "Raspberry Pi Foundation",
+       [3]byte{184, 40, 139}:  "Parker Hannifin Manufacturing (UK) Ltd",
+       [3]byte{184, 41, 247}:  "Blaster Tech",
+       [3]byte{184, 42, 114}:  "Dell Inc.",
+       [3]byte{184, 42, 220}:  "EFR Europäische Funk-Rundsteuerung GmbH",
+       [3]byte{184, 44, 160}:  "Honeywell HomMed",
+       [3]byte{184, 48, 168}:  "Road-Track Telematics Development",
+       [3]byte{184, 50, 65}:   "Wuhan Tianyu Information Industry Co., Ltd.",
+       [3]byte{184, 54, 216}:  "Videoswitch",
+       [3]byte{184, 55, 101}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{184, 56, 97}:   "Cisco Systems, Inc",
+       [3]byte{184, 56, 202}:  "Kyokko Tsushin System CO.,LTD",
+       [3]byte{184, 58, 8}:    "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{184, 58, 123}:  "Worldplay (Canada) Inc.",
+       [3]byte{184, 58, 157}:  "Alarm.com",
+       [3]byte{184, 61, 78}:   "Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch",
+       [3]byte{184, 62, 89}:   "Roku, Inc.",
+       [3]byte{184, 65, 95}:   "ASP AG",
+       [3]byte{184, 67, 228}:  "Vlatacom",
+       [3]byte{184, 68, 217}:  "Apple, Inc.",
+       [3]byte{184, 71, 198}:  "SanJet Technology Corp.",
+       [3]byte{184, 79, 213}:  "Microsoft Corporation",
+       [3]byte{184, 80, 1}:    "Extreme Networks, Inc.",
+       [3]byte{184, 83, 172}:  "Apple, Inc.",
+       [3]byte{184, 85, 16}:   "Zioncom Electronics (Shenzhen) Ltd.",
+       [3]byte{184, 86, 189}:  "ITT LLC",
+       [3]byte{184, 87, 216}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{184, 88, 16}:   "NUMERA, INC.",
+       [3]byte{184, 90, 115}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{184, 90, 247}:  "Ouya, Inc",
+       [3]byte{184, 90, 254}:  "Handaer Communication Technology (Beijing) Co., Ltd",
+       [3]byte{184, 94, 123}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{184, 96, 145}:  "Onnet Technologies and Innovations LLC",
+       [3]byte{184, 97, 111}:  "Accton Technology Corp",
+       [3]byte{184, 98, 31}:   "Cisco Systems, Inc",
+       [3]byte{184, 99, 77}:   "Apple, Inc.",
+       [3]byte{184, 99, 188}:  "ROBOTIS, Co, Ltd",
+       [3]byte{184, 100, 145}: "CK Telecom Ltd",
+       [3]byte{184, 101, 59}:  "Bolymin, Inc.",
+       [3]byte{184, 105, 194}: "Sunitec Enterprise Co., Ltd.",
+       [3]byte{184, 107, 35}:  "Toshiba",
+       [3]byte{184, 108, 232}: "Samsung Electronics Co.,Ltd",
+       [3]byte{184, 112, 244}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{184, 116, 36}:  "Viessmann Elektronik GmbH",
+       [3]byte{184, 116, 71}:  "Convergence Technologies",
+       [3]byte{184, 117, 192}: "PayPal, Inc.",
+       [3]byte{184, 118, 63}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{184, 119, 195}: "METER Group",
+       [3]byte{184, 120, 46}:  "Apple, Inc.",
+       [3]byte{184, 120, 121}: "Roche Diagnostics GmbH",
+       [3]byte{184, 121, 126}: "Secure Meters (UK) Limited",
+       [3]byte{184, 122, 201}: "Siemens Ltd.",
+       [3]byte{184, 124, 242}: "Aerohive Networks Inc.",
+       [3]byte{184, 129, 152}: "Intel Corporate",
+       [3]byte{184, 134, 135}: "Liteon Technology Corporation",
+       [3]byte{184, 135, 30}:  "Good Mind Industries Co., Ltd.",
+       [3]byte{184, 135, 168}: "Step Ahead Innovations Inc.",
+       [3]byte{184, 136, 227}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{184, 137, 129}: "Chengdu InnoThings Technology Co., Ltd.",
+       [3]byte{184, 137, 202}: "ILJIN ELECTRIC Co., Ltd.",
+       [3]byte{184, 138, 96}:  "Intel Corporate",
+       [3]byte{184, 141, 18}:  "Apple, Inc.",
+       [3]byte{184, 142, 58}:  "Infinite Technologies JLT",
+       [3]byte{184, 142, 198}: "Stateless Networks",
+       [3]byte{184, 142, 223}: "Zencheer Communication Technology Co., Ltd.",
+       [3]byte{184, 143, 20}:  "Analytica GmbH",
+       [3]byte{184, 146, 29}:  "BG T&A",
+       [3]byte{184, 148, 210}: "Retail Innovation HTT AB",
+       [3]byte{184, 150, 116}: "AllDSP GmbH & Co. KG",
+       [3]byte{184, 151, 90}:  "BIOSTAR Microtech Int'l Corp.",
+       [3]byte{184, 152, 176}: "Atlona Inc.",
+       [3]byte{184, 152, 247}: "Gionee Communication Equipment Co,Ltd.ShenZhen",
+       [3]byte{184, 153, 25}:  "7signal Solutions, Inc",
+       [3]byte{184, 153, 176}: "Cohere Technologies",
+       [3]byte{184, 154, 205}: "ELITE OPTOELECTRONIC(ASIA)CO.,LTD",
+       [3]byte{184, 154, 237}: "OceanServer Technology, Inc",
+       [3]byte{184, 155, 201}: "SMC Networks Inc",
+       [3]byte{184, 155, 228}: "ABB Power Systems Power Generation",
+       [3]byte{184, 161, 117}: "Roku, Inc.",
+       [3]byte{184, 163, 134}: "D-Link International",
+       [3]byte{184, 163, 224}: "BenRui Technology Co.,Ltd",
+       [3]byte{184, 168, 175}: "Logic S.p.A.",
+       [3]byte{184, 172, 111}: "Dell Inc.",
+       [3]byte{184, 173, 62}:  "BLUECOM",
+       [3]byte{184, 174, 110}: "Nintendo Co., Ltd.",
+       [3]byte{184, 174, 237}: "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{184, 175, 103}: "Hewlett Packard",
+       [3]byte{184, 177, 199}: "BT&COM CO.,LTD",
+       [3]byte{184, 178, 235}: "Googol Technology (HK) Limited",
+       [3]byte{184, 179, 220}: "DEREK (SHAOGUAN) LIMITED",
+       [3]byte{184, 180, 46}:  "Gionee Communication Equipment Co,Ltd.ShenZhen",
+       [3]byte{184, 183, 215}: "2GIG Technologies",
+       [3]byte{184, 184, 30}:  "Intel Corporate",
+       [3]byte{184, 185, 78}:  "Shenzhen iBaby Labs, Inc.",
+       [3]byte{184, 186, 104}: "Xi'an Jizhong Digital Communication Co.,Ltd",
+       [3]byte{184, 186, 114}: "Cynove",
+       [3]byte{184, 187, 35}:  "Guangdong Nufront CSC Co., Ltd",
+       [3]byte{184, 187, 109}: "ENERES Co.,Ltd.",
+       [3]byte{184, 187, 175}: "Samsung Electronics Co.,Ltd",
+       [3]byte{184, 188, 27}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{184, 189, 121}: "TrendPoint Systems",
+       [3]byte{184, 190, 191}: "Cisco Systems, Inc",
+       [3]byte{184, 191, 131}: "Intel Corporate",
+       [3]byte{184, 193, 17}:  "Apple, Inc.",
+       [3]byte{184, 193, 162}: "Dragon Path Technologies Co., Limited",
+       [3]byte{184, 195, 191}: "Henan Chengshi NetWork Technology Co.,Ltd",
+       [3]byte{184, 196, 111}: "PRIMMCON INDUSTRIES INC",
+       [3]byte{184, 198, 142}: "Samsung Electronics Co.,Ltd",
+       [3]byte{184, 199, 22}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{184, 199, 93}:  "Apple, Inc.",
+       [3]byte{184, 200, 85}:  "Shanghai GBCOM Communication Technology Co.,Ltd.",
+       [3]byte{184, 200, 235}: "ITEL MOBILE LIMITED",
+       [3]byte{184, 202, 4}:   "Holtek Semiconductor Inc.",
+       [3]byte{184, 202, 58}:  "Dell Inc.",
+       [3]byte{184, 205, 147}: "Penetek, Inc",
+       [3]byte{184, 205, 167}: "Maxeler Technologies Ltd.",
+       [3]byte{184, 208, 111}: "GUANGZHOU HKUST FOK YING TUNG RESEARCH INSTITUTE",
+       [3]byte{184, 212, 157}: "M Seven System Ltd.",
+       [3]byte{184, 213, 11}:  "Sunitec Enterprise Co.,Ltd",
+       [3]byte{184, 215, 175}: "Murata Manufacturing Co., Ltd.",
+       [3]byte{184, 216, 18}:  "IEEE Registration Authority",
+       [3]byte{184, 217, 77}:  "Sagemcom Broadband SAS",
+       [3]byte{184, 217, 206}: "Samsung Electronics Co.,Ltd",
+       [3]byte{184, 218, 241}: "Strahlenschutz- Entwicklungs- und Ausruestungsgesellschaft mbH",
+       [3]byte{184, 218, 247}: "Advanced Photonics, Inc.",
+       [3]byte{184, 219, 28}:  "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{184, 220, 135}: "IAI Corporation",
+       [3]byte{184, 223, 107}: "SpotCam Co., Ltd.",
+       [3]byte{184, 229, 137}: "Payter BV",
+       [3]byte{184, 230, 37}:  "2Wire Inc",
+       [3]byte{184, 231, 121}: "9Solutions Oy",
+       [3]byte{184, 232, 86}:  "Apple, Inc.",
+       [3]byte{184, 233, 55}:  "Sonos, Inc.",
+       [3]byte{184, 234, 170}: "ICG NETWORKS CO.,ltd",
+       [3]byte{184, 236, 163}: "Zyxel Communications Corporation",
+       [3]byte{184, 238, 14}:  "Sagemcom Broadband SAS",
+       [3]byte{184, 238, 101}: "Liteon Technology Corporation",
+       [3]byte{184, 238, 121}: "YWire Technologies, Inc.",
+       [3]byte{184, 240, 128}: "SPS, INC.",
+       [3]byte{184, 243, 23}:  "iSun Smasher Communications Private Limited",
+       [3]byte{184, 244, 208}: "Herrmann Ultraschalltechnik GmbH & Co. Kg",
+       [3]byte{184, 245, 231}: "WayTools, LLC",
+       [3]byte{184, 246, 177}: "Apple, Inc.",
+       [3]byte{184, 247, 50}:  "Aryaka Networks Inc",
+       [3]byte{184, 247, 74}:  "RCNTEC",
+       [3]byte{184, 248, 40}:  "Changshu Gaoshida Optoelectronic Technology Co. Ltd.",
+       [3]byte{184, 248, 131}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{184, 248, 190}: "BLUECOM",
+       [3]byte{184, 249, 52}:  "Sony Mobile Communications AB",
+       [3]byte{184, 252, 154}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+       [3]byte{184, 253, 50}:  "Zhejiang ROICX Microelectronics",
+       [3]byte{184, 255, 97}:  "Apple, Inc.",
+       [3]byte{184, 255, 111}: "Shanghai Typrotech Technology Co.Ltd",
+       [3]byte{184, 255, 179}: "MitraStar Technology Corp.",
+       [3]byte{184, 255, 254}: "Texas Instruments",
+       [3]byte{188, 2, 0}:     "Stewart Audio",
+       [3]byte{188, 2, 74}:    "HMD Global Oy",
+       [3]byte{188, 5, 67}:    "AVM GmbH",
+       [3]byte{188, 13, 165}:  "Texas Instruments",
+       [3]byte{188, 15, 43}:   "FORTUNE TECHGROUP CO.,LTD",
+       [3]byte{188, 15, 100}:  "Intel Corporate",
+       [3]byte{188, 18, 94}:   "Beijing  WisVideo  INC.",
+       [3]byte{188, 20, 1}:    "Hitron Technologies. Inc",
+       [3]byte{188, 20, 133}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 20, 239}:  "ITON Technology Limited",
+       [3]byte{188, 21, 166}:  "Taiwan Jantek Electronics,Ltd.",
+       [3]byte{188, 21, 172}:  "Vodafone Italia S.p.A.",
+       [3]byte{188, 22, 101}:  "Cisco Systems, Inc",
+       [3]byte{188, 22, 245}:  "Cisco Systems, Inc",
+       [3]byte{188, 26, 103}:  "YF Technology Co., Ltd",
+       [3]byte{188, 28, 129}:  "Sichuan iLink Technology Co., Ltd.",
+       [3]byte{188, 32, 164}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 32, 186}:  "Inspur (Shandong) Electronic Information Co., Ltd",
+       [3]byte{188, 37, 224}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{188, 37, 240}:  "3D Display Technologies Co., Ltd.",
+       [3]byte{188, 38, 29}:   "HONG KONG TECON TECHNOLOGY",
+       [3]byte{188, 40, 44}:   "e-Smart Systems Pvt. Ltd",
+       [3]byte{188, 40, 70}:   "NextBIT Computing Pvt. Ltd.",
+       [3]byte{188, 40, 214}:  "Rowley Associates Limited",
+       [3]byte{188, 43, 107}:  "Beijing Haier IC Design Co.,Ltd",
+       [3]byte{188, 43, 215}:  "Revogi Innovation Co., Ltd.",
+       [3]byte{188, 44, 85}:   "Bear Flag Design, Inc.",
+       [3]byte{188, 45, 152}:  "ThinGlobal LLC",
+       [3]byte{188, 46, 72}:   "ARRIS Group, Inc.",
+       [3]byte{188, 47, 61}:   "vivo Mobile Communication Co., Ltd.",
+       [3]byte{188, 48, 91}:   "Dell Inc.",
+       [3]byte{188, 48, 125}:  "Wistron Neweb Corporation",
+       [3]byte{188, 48, 126}:  "Wistron Neweb Corporation",
+       [3]byte{188, 52, 0}:    "IEEE Registration Authority",
+       [3]byte{188, 53, 229}:  "Hydro Systems Company",
+       [3]byte{188, 56, 210}:  "Pandachip Limited",
+       [3]byte{188, 57, 166}:  "CSUN System Technology Co.,LTD",
+       [3]byte{188, 57, 217}:  "Z-TEC",
+       [3]byte{188, 58, 234}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{188, 59, 175}:  "Apple, Inc.",
+       [3]byte{188, 61, 133}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{188, 62, 19}:   "Accordance Systems Inc.",
+       [3]byte{188, 63, 143}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{188, 65, 0}:    "CODACO ELECTRONIC s.r.o.",
+       [3]byte{188, 65, 1}:    "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{188, 67, 119}:  "Hang Zhou Huite Technology Co.,ltd.",
+       [3]byte{188, 68, 52}:   "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{188, 68, 134}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 68, 176}:  "Elastifile",
+       [3]byte{188, 69, 46}:   "Knowledge Development for POF S.L.",
+       [3]byte{188, 70, 153}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{188, 71, 96}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 75, 121}:  "SensingTek",
+       [3]byte{188, 76, 196}:  "Apple, Inc.",
+       [3]byte{188, 77, 251}:  "Hitron Technologies. Inc",
+       [3]byte{188, 78, 60}:   "CORE STAFF CO., LTD.",
+       [3]byte{188, 78, 93}:   "ZhongMiao Technology Co., Ltd.",
+       [3]byte{188, 81, 254}:  "Swann communications Pty Ltd",
+       [3]byte{188, 82, 180}:  "Nokia",
+       [3]byte{188, 82, 183}:  "Apple, Inc.",
+       [3]byte{188, 84, 54}:   "Apple, Inc.",
+       [3]byte{188, 84, 81}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 84, 249}:  "Drogoo Technology Co., Ltd.",
+       [3]byte{188, 84, 252}:  "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{188, 92, 76}:   "ELECOM CO.,LTD.",
+       [3]byte{188, 95, 244}:  "ASRock Incorporation",
+       [3]byte{188, 95, 246}:  "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{188, 96, 16}:   "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{188, 96, 167}:  "Sony Interactive Entertainment Inc.",
+       [3]byte{188, 98, 14}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{188, 98, 159}:  "Telenet Systems P. Ltd.",
+       [3]byte{188, 100, 75}:  "ARRIS Group, Inc.",
+       [3]byte{188, 102, 65}:  "IEEE Registration Authority",
+       [3]byte{188, 102, 222}: "Shadow Creator Information Technology Co.,Ltd.",
+       [3]byte{188, 103, 28}:  "Cisco Systems, Inc",
+       [3]byte{188, 103, 120}: "Apple, Inc.",
+       [3]byte{188, 103, 132}: "Environics Oy",
+       [3]byte{188, 106, 22}:  "tdvine",
+       [3]byte{188, 106, 41}:  "Texas Instruments",
+       [3]byte{188, 106, 47}:  "Henge Docks LLC",
+       [3]byte{188, 106, 68}:  "Commend International GmbH",
+       [3]byte{188, 107, 77}:  "Nokia",
+       [3]byte{188, 108, 33}:  "Apple, Inc.",
+       [3]byte{188, 110, 100}: "Sony Mobile Communications AB",
+       [3]byte{188, 110, 118}: "Green Energy Options Ltd",
+       [3]byte{188, 113, 193}: "XTrillion, Inc.",
+       [3]byte{188, 114, 177}: "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 116, 215}: "HangZhou JuRu Technology CO.,LTD",
+       [3]byte{188, 117, 116}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{188, 118, 78}:  "Rackspace US, Inc.",
+       [3]byte{188, 118, 94}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 118, 112}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{188, 119, 55}:  "Intel Corporate",
+       [3]byte{188, 119, 159}: "SBM Co., Ltd.",
+       [3]byte{188, 121, 173}: "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 125, 209}: "Radio Data Comms",
+       [3]byte{188, 129, 31}:  "Ingate Systems",
+       [3]byte{188, 129, 153}: "BASIC Co.,Ltd.",
+       [3]byte{188, 130, 93}:  "MITSUMI ELECTRIC CO.,LTD.",
+       [3]byte{188, 131, 133}: "Microsoft Corporation",
+       [3]byte{188, 131, 167}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+       [3]byte{188, 133, 31}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 133, 86}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{188, 136, 147}: "VILLBAU Ltd.",
+       [3]byte{188, 136, 195}: "Ningbo Dooya Mechanic & Electronic Technology Co., Ltd",
+       [3]byte{188, 138, 163}: "NHN Entertainment",
+       [3]byte{188, 138, 232}: "QING DAO HAIER TELECOM CO.,LTD.",
+       [3]byte{188, 139, 85}:  "NPP ELIKS America Inc. DBA T&M Atlantic",
+       [3]byte{188, 140, 205}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{188, 141, 14}:  "Nokia",
+       [3]byte{188, 144, 58}:  "Robert Bosch GmbH",
+       [3]byte{188, 145, 181}: "Infinix mobility limited",
+       [3]byte{188, 146, 107}: "Apple, Inc.",
+       [3]byte{188, 150, 128}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{188, 152, 137}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{188, 153, 188}: "FonSee Technology Inc.",
+       [3]byte{188, 156, 49}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{188, 156, 197}: "Beijing Huafei Technology Co., Ltd.",
+       [3]byte{188, 157, 165}: "DASCOM Europe GmbH",
+       [3]byte{188, 159, 239}: "Apple, Inc.",
+       [3]byte{188, 160, 66}:  "SHANGHAI FLYCO ELECTRICAL APPLIANCE CO.,LTD",
+       [3]byte{188, 164, 225}: "Nabto",
+       [3]byte{188, 168, 166}: "Intel Corporate",
+       [3]byte{188, 169, 32}:  "Apple, Inc.",
+       [3]byte{188, 169, 214}: "Cyber-Rain, Inc.",
+       [3]byte{188, 173, 40}:  "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{188, 173, 171}: "Avaya Inc",
+       [3]byte{188, 174, 197}: "ASUSTek COMPUTER INC.",
+       [3]byte{188, 177, 129}: "SHARP CORPORATION",
+       [3]byte{188, 177, 243}: "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 179, 8}:   "HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED",
+       [3]byte{188, 184, 82}:  "Cybera, Inc.",
+       [3]byte{188, 186, 225}: "AREC Inc.",
+       [3]byte{188, 187, 201}: "Kellendonk Elektronik GmbH",
+       [3]byte{188, 188, 70}:  "SKS Welding Systems GmbH",
+       [3]byte{188, 192, 15}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{188, 193, 104}: "DinBox Sverige AB",
+       [3]byte{188, 194, 58}:  "Thomson Video Networks",
+       [3]byte{188, 195, 27}:  "Kygo Life AS",
+       [3]byte{188, 195, 66}:  "Panasonic Communications Co., Ltd.",
+       [3]byte{188, 196, 147}: "Cisco Systems, Inc",
+       [3]byte{188, 198, 26}:  "SPECTRA EMBEDDED SYSTEMS",
+       [3]byte{188, 198, 219}: "Nokia Corporation",
+       [3]byte{188, 200, 16}:  "Cisco SPVTG",
+       [3]byte{188, 202, 181}: "ARRIS Group, Inc.",
+       [3]byte{188, 205, 69}:  "VOISMART",
+       [3]byte{188, 207, 204}: "HTC Corporation",
+       [3]byte{188, 209, 31}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 209, 101}: "Cisco SPVTG",
+       [3]byte{188, 209, 119}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{188, 209, 211}: "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{188, 213, 182}: "d2d technologies",
+       [3]byte{188, 215, 19}:  "Owl Labs",
+       [3]byte{188, 217, 64}:  "ASR Co,.Ltd.",
+       [3]byte{188, 224, 157}: "Eoslink",
+       [3]byte{188, 229, 159}: "WATERWORLD Technology Co.,LTD",
+       [3]byte{188, 230, 63}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{188, 231, 103}: "Quanzhou  TDX Electronics Co., Ltd",
+       [3]byte{188, 234, 43}:  "CityCom GmbH",
+       [3]byte{188, 234, 250}: "Hewlett Packard",
+       [3]byte{188, 235, 95}:  "Fujian Beifeng Telecom Technology Co., Ltd.",
+       [3]byte{188, 236, 35}:  "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+       [3]byte{188, 236, 93}:  "Apple, Inc.",
+       [3]byte{188, 238, 123}: "ASUSTek COMPUTER INC.",
+       [3]byte{188, 241, 242}: "Cisco Systems, Inc",
+       [3]byte{188, 242, 146}: "PLANTRONICS, INC.",
+       [3]byte{188, 242, 175}: "devolo AG",
+       [3]byte{188, 245, 172}: "LG Electronics (Mobile Communications)",
+       [3]byte{188, 246, 28}:  "Geomodeling Wuxi Technology Co. Ltd.",
+       [3]byte{188, 246, 133}: "D-Link International",
+       [3]byte{188, 248, 17}:  "Xiamen DNAKE Technology Co.,Ltd",
+       [3]byte{188, 254, 140}: "Altronic, LLC",
+       [3]byte{188, 255, 172}: "TOPCON CORPORATION",
+       [3]byte{188, 255, 235}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{192, 2, 141}:   "WINSTAR Display CO.,Ltd",
+       [3]byte{192, 5, 194}:   "ARRIS Group, Inc.",
+       [3]byte{192, 13, 126}:  "Additech, Inc.",
+       [3]byte{192, 17, 115}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{192, 17, 166}:  "Fort-Telecom ltd.",
+       [3]byte{192, 18, 66}:   "Alpha Security Products",
+       [3]byte{192, 20, 61}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{192, 23, 77}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{192, 24, 133}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{192, 26, 218}:  "Apple, Inc.",
+       [3]byte{192, 30, 155}:  "Pixavi AS",
+       [3]byte{192, 33, 13}:   "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+       [3]byte{192, 34, 80}:   "Private",
+       [3]byte{192, 37, 6}:    "AVM GmbH",
+       [3]byte{192, 37, 92}:   "Cisco Systems, Inc",
+       [3]byte{192, 37, 103}:  "Nexxt Solutions",
+       [3]byte{192, 37, 162}:  "NEC Platforms, Ltd.",
+       [3]byte{192, 37, 233}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{192, 39, 185}:  "Beijing National Railway Research & Design Institute  of Signal & Communication Co., Ltd.",
+       [3]byte{192, 40, 141}:  "Logitech, Inc",
+       [3]byte{192, 41, 115}:  "Audyssey Laboratories Inc.",
+       [3]byte{192, 41, 243}:  "XySystem",
+       [3]byte{192, 43, 252}:  "iNES. applied informatics GmbH",
+       [3]byte{192, 44, 122}:  "Shenzhen Horn Audio Co.,Ltd.",
+       [3]byte{192, 45, 238}:  "Cuff",
+       [3]byte{192, 47, 241}:  "Volta Networks",
+       [3]byte{192, 51, 94}:   "Microsoft",
+       [3]byte{192, 52, 180}:  "Gigastone Corporation",
+       [3]byte{192, 53, 128}:  "A&R TECH",
+       [3]byte{192, 53, 189}:  "Velocytech Aps",
+       [3]byte{192, 53, 197}:  "Prosoft Systems LTD",
+       [3]byte{192, 56, 150}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{192, 56, 249}:  "Nokia Danmark A/S",
+       [3]byte{192, 59, 143}:  "Minicom Digital Signage",
+       [3]byte{192, 61, 70}:   "Shanghai Sango Network Technology Co.,Ltd",
+       [3]byte{192, 62, 15}:   "BSkyB Ltd",
+       [3]byte{192, 63, 14}:   "NETGEAR",
+       [3]byte{192, 63, 42}:   "Biscotti, Inc.",
+       [3]byte{192, 63, 213}:  "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{192, 65, 246}:  "LG ELECTRONICS INC",
+       [3]byte{192, 67, 1}:    "Epec Oy",
+       [3]byte{192, 68, 227}:  "Shenzhen Sinkna Electronics Co., LTD",
+       [3]byte{192, 73, 61}:   "MAITRISE TECHNOLOGIQUE",
+       [3]byte{192, 74, 0}:    "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{192, 74, 9}:    "Zhejiang Everbright Communication Equip. Co,. Ltd",
+       [3]byte{192, 77, 247}:  "SERELEC",
+       [3]byte{192, 86, 39}:   "Belkin International Inc.",
+       [3]byte{192, 86, 227}:  "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{192, 87, 188}:  "Avaya Inc",
+       [3]byte{192, 88, 167}:  "Pico Systems Co., Ltd.",
+       [3]byte{192, 94, 111}:  "V. Stonkaus firma Kodinis Raktas",
+       [3]byte{192, 94, 121}:  "SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD",
+       [3]byte{192, 97, 24}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{192, 98, 107}:  "Cisco Systems, Inc",
+       [3]byte{192, 99, 148}:  "Apple, Inc.",
+       [3]byte{192, 100, 198}: "Nokia Corporation",
+       [3]byte{192, 101, 153}: "Samsung Electronics Co.,Ltd",
+       [3]byte{192, 103, 175}: "Cisco Systems, Inc",
+       [3]byte{192, 108, 15}:  "Dobbs Stanford",
+       [3]byte{192, 108, 109}: "MagneMotion, Inc.",
+       [3]byte{192, 109, 26}:  "Tianjin Henxinhuifeng Technology Co.,Ltd.",
+       [3]byte{192, 112, 9}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{192, 116, 43}:  "SHENZHEN XUNLONG SOFTWARE CO.,LIMITED",
+       [3]byte{192, 123, 188}: "Cisco Systems, Inc",
+       [3]byte{192, 124, 209}: "PEGATRON CORPORATION",
+       [3]byte{192, 126, 64}:  "SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD",
+       [3]byte{192, 129, 112}: "Effigis GeoSolutions",
+       [3]byte{192, 131, 10}:  "2Wire Inc",
+       [3]byte{192, 132, 122}: "Apple, Inc.",
+       [3]byte{192, 132, 136}: "Finis Inc",
+       [3]byte{192, 133, 76}:  "Ragentek Technology Group",
+       [3]byte{192, 135, 235}: "Samsung Electronics Co.,Ltd",
+       [3]byte{192, 136, 91}:  "SnD Tech Co., Ltd.",
+       [3]byte{192, 137, 151}: "Samsung Electronics Co.,Ltd",
+       [3]byte{192, 138, 222}: "Ruckus Wireless",
+       [3]byte{192, 139, 111}: "S I Sistemas Inteligentes Eletrônicos Ltda",
+       [3]byte{192, 140, 96}:  "Cisco Systems, Inc",
+       [3]byte{192, 145, 50}:  "Patriot Memory",
+       [3]byte{192, 145, 52}:  "ProCurve Networking by HP",
+       [3]byte{192, 151, 39}:  "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{192, 152, 121}: "Acer Inc.",
+       [3]byte{192, 152, 229}: "University of Michigan",
+       [3]byte{192, 154, 113}: "XIAMEN MEITU MOBILE TECHNOLOGY CO.LTD",
+       [3]byte{192, 156, 4}:   "Shaanxi GuoLian Digital TV Technology Co.,Ltd.",
+       [3]byte{192, 156, 146}: "COBY",
+       [3]byte{192, 157, 38}:  "Topicon HK Lmd.",
+       [3]byte{192, 159, 5}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{192, 159, 66}:  "Apple, Inc.",
+       [3]byte{192, 160, 13}:  "ARRIS Group, Inc.",
+       [3]byte{192, 160, 187}: "D-Link International",
+       [3]byte{192, 160, 199}: "FAIRFIELD INDUSTRIES",
+       [3]byte{192, 160, 222}: "Multi Touch Oy",
+       [3]byte{192, 160, 226}: "Eden Innovations",
+       [3]byte{192, 161, 162}: "MarqMetrix",
+       [3]byte{192, 162, 109}: "Abbott Point of Care",
+       [3]byte{192, 163, 100}: "3D Systems Massachusetts",
+       [3]byte{192, 163, 158}: "EarthCam, Inc.",
+       [3]byte{192, 165, 62}:  "Apple, Inc.",
+       [3]byte{192, 165, 221}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{192, 170, 104}: "OSASI Technos Inc.",
+       [3]byte{192, 172, 84}:  "Sagemcom Broadband SAS",
+       [3]byte{192, 179, 57}:  "Comigo Ltd.",
+       [3]byte{192, 179, 87}:  "Yoshiki Electronics Industry Ltd.",
+       [3]byte{192, 183, 19}:  "Beijing Xiaoyuer Technology Co. Ltd.",
+       [3]byte{192, 184, 177}: "BitBox Ltd",
+       [3]byte{192, 186, 230}: "Application Solutions (Electronics and Vision) Ltd",
+       [3]byte{192, 189, 66}:  "ZPA Smart Energy a.s.",
+       [3]byte{192, 189, 209}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{192, 191, 192}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{192, 193, 192}: "Cisco-Linksys, LLC",
+       [3]byte{192, 195, 182}: "Automatic Systems",
+       [3]byte{192, 197, 32}:  "Ruckus Wireless",
+       [3]byte{192, 197, 34}:  "ARRIS Group, Inc.",
+       [3]byte{192, 197, 105}: "SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD",
+       [3]byte{192, 198, 135}: "Cisco SPVTG",
+       [3]byte{192, 201, 70}:  "MITSUYA LABORATORIES INC.",
+       [3]byte{192, 201, 118}: "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{192, 203, 56}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{192, 204, 248}: "Apple, Inc.",
+       [3]byte{192, 206, 205}: "Apple, Inc.",
+       [3]byte{192, 207, 163}: "Creative Electronics & Software, Inc.",
+       [3]byte{192, 208, 18}:  "Apple, Inc.",
+       [3]byte{192, 208, 68}:  "Sagemcom Broadband SAS",
+       [3]byte{192, 211, 145}: "IEEE Registration Authority",
+       [3]byte{192, 211, 192}: "Samsung Electronics Co.,Ltd",
+       [3]byte{192, 217, 98}:  "ASKEY COMPUTER CORP",
+       [3]byte{192, 217, 247}: "ShanDong Domor Intelligent S&T CO.,Ltd",
+       [3]byte{192, 218, 116}: "Hangzhou Sunyard Technology Co., Ltd.",
+       [3]byte{192, 220, 106}: "Qingdao Eastsoft Communication Technology Co.,LTD",
+       [3]byte{192, 223, 119}: "Conrad Electronic SE",
+       [3]byte{192, 228, 34}:  "Texas Instruments",
+       [3]byte{192, 228, 45}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{192, 229, 78}:  "ARIES Embedded GmbH",
+       [3]byte{192, 234, 228}: "Sonicwall",
+       [3]byte{192, 238, 64}:  "Laird Technologies",
+       [3]byte{192, 238, 251}: "OnePlus Tech (Shenzhen) Ltd",
+       [3]byte{192, 241, 196}: "Pacidal Corporation Ltd.",
+       [3]byte{192, 242, 251}: "Apple, Inc.",
+       [3]byte{192, 246, 54}:  "Hangzhou Kuaiyue Technologies, Ltd.",
+       [3]byte{192, 247, 157}: "Powercode",
+       [3]byte{192, 248, 218}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{192, 249, 69}:  "Toshiba Toko Meter Systems Co., LTD.",
+       [3]byte{192, 249, 145}: "GME Standard Communications P/L",
+       [3]byte{192, 255, 212}: "NETGEAR",
+       [3]byte{196, 0, 6}:     "Lipi Data Systems Ltd.",
+       [3]byte{196, 0, 73}:    "Kamama",
+       [3]byte{196, 1, 66}:    "MaxMedia Technology Limited",
+       [3]byte{196, 1, 124}:   "Ruckus Wireless",
+       [3]byte{196, 1, 177}:   "SeekTech INC",
+       [3]byte{196, 1, 206}:   "PRESITION (2000) CO., LTD.",
+       [3]byte{196, 4, 21}:    "NETGEAR",
+       [3]byte{196, 4, 123}:   "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{196, 5, 40}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{196, 7, 47}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{196, 8, 74}:    "Nokia",
+       [3]byte{196, 8, 128}:   "Shenzhen UTEPO Tech Co., Ltd.",
+       [3]byte{196, 9, 56}:    "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+       [3]byte{196, 10, 203}:  "Cisco Systems, Inc",
+       [3]byte{196, 11, 203}:  "Xiaomi Communications Co Ltd",
+       [3]byte{196, 14, 69}:   "ACK Networks,Inc.",
+       [3]byte{196, 15, 9}:    "Hermes electronic GmbH",
+       [3]byte{196, 16, 138}:  "Ruckus Wireless",
+       [3]byte{196, 17, 224}:  "Bull Group Co., Ltd",
+       [3]byte{196, 18, 245}:  "D-Link International",
+       [3]byte{196, 19, 226}:  "Aerohive Networks Inc.",
+       [3]byte{196, 20, 60}:   "Cisco Systems, Inc",
+       [3]byte{196, 22, 250}:  "Prysm Inc",
+       [3]byte{196, 23, 254}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{196, 25, 139}:  "Dominion Voting Systems Corporation",
+       [3]byte{196, 25, 236}:  "Qualisys AB",
+       [3]byte{196, 28, 255}:  "Vizio, Inc",
+       [3]byte{196, 30, 206}:  "HMI Sources Ltd.",
+       [3]byte{196, 33, 200}:  "KYOCERA CORPORATION",
+       [3]byte{196, 35, 122}:  "WhizNets Inc.",
+       [3]byte{196, 36, 46}:   "Galvanic Applied Sciences Inc",
+       [3]byte{196, 38, 40}:   "Airo Wireless",
+       [3]byte{196, 39, 149}:  "Technicolor CH USA Inc.",
+       [3]byte{196, 40, 45}:   "Embedded Intellect Pty Ltd",
+       [3]byte{196, 41, 29}:   "KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.",
+       [3]byte{196, 44, 3}:    "Apple, Inc.",
+       [3]byte{196, 47, 144}:  "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+       [3]byte{196, 48, 24}:   "MCS Logic Inc.",
+       [3]byte{196, 52, 107}:  "Hewlett Packard",
+       [3]byte{196, 54, 85}:   "Shenzhen Fenglian Technology Co., Ltd.",
+       [3]byte{196, 54, 108}:  "LG Innotek",
+       [3]byte{196, 54, 218}:  "Rusteletech Ltd.",
+       [3]byte{196, 56, 211}:  "TAGATEC CO.,LTD",
+       [3]byte{196, 57, 58}:   "SMC Networks Inc",
+       [3]byte{196, 58, 159}:  "Siconix Inc.",
+       [3]byte{196, 58, 190}:  "Sony Mobile Communications AB",
+       [3]byte{196, 60, 60}:   "CYBELEC SA",
+       [3]byte{196, 61, 199}:  "NETGEAR",
+       [3]byte{196, 64, 68}:   "RackTop Systems Inc.",
+       [3]byte{196, 66, 2}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{196, 67, 143}:  "LG Electronics (Mobile Communications)",
+       [3]byte{196, 68, 160}:  "Cisco Systems, Inc",
+       [3]byte{196, 69, 103}:  "SAMBON PRECISON and ELECTRONICS",
+       [3]byte{196, 69, 236}:  "Shanghai Yali Electron Co.,LTD",
+       [3]byte{196, 70, 25}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{196, 71, 63}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{196, 72, 56}:   "Satcom Direct, Inc.",
+       [3]byte{196, 73, 187}:  "MITSUMI ELECTRIC CO.,LTD.",
+       [3]byte{196, 74, 208}:  "FIREFLIES SYSTEMS",
+       [3]byte{196, 75, 68}:   "Omniprint Inc.",
+       [3]byte{196, 75, 209}:  "Wallys Communications  Teachnologies Co.,Ltd.",
+       [3]byte{196, 78, 31}:   "BlueN",
+       [3]byte{196, 78, 172}:  "Shenzhen Shiningworth Technology Co., Ltd.",
+       [3]byte{196, 80, 6}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{196, 84, 68}:   "QUANTA COMPUTER INC.",
+       [3]byte{196, 85, 166}:  "Cadac Holdings Ltd",
+       [3]byte{196, 85, 194}:  "Bach-Simpson",
+       [3]byte{196, 86, 0}:    "Galleon Embedded Computing",
+       [3]byte{196, 86, 254}:  "Lava International Ltd.",
+       [3]byte{196, 87, 31}:   "June Life Inc",
+       [3]byte{196, 87, 110}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{196, 88, 194}:  "Shenzhen TATFOOK Technology Co., Ltd.",
+       [3]byte{196, 89, 118}:  "Fugoo Coorporation",
+       [3]byte{196, 93, 216}:  "HDMI Forum",
+       [3]byte{196, 96, 68}:   "Everex Electronics Limited",
+       [3]byte{196, 98, 107}:  "ZPT Vigantice",
+       [3]byte{196, 98, 234}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{196, 99, 84}:   "U-Raku, Inc.",
+       [3]byte{196, 100, 19}:  "Cisco Systems, Inc",
+       [3]byte{196, 102, 153}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{196, 103, 181}: "Libratone A/S",
+       [3]byte{196, 104, 208}: "VTech Telecommunications Ltd.",
+       [3]byte{196, 105, 62}:  "Turbulence Design Inc.",
+       [3]byte{196, 106, 183}: "Xiaomi Communications Co Ltd",
+       [3]byte{196, 107, 180}: "myIDkey",
+       [3]byte{196, 109, 241}: "DataGravity",
+       [3]byte{196, 110, 31}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{196, 112, 11}:  "GUANGZHOU CHIP TECHNOLOGIES CO.,LTD",
+       [3]byte{196, 113, 48}:  "Fon Technology S.L.",
+       [3]byte{196, 113, 84}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{196, 113, 254}: "Cisco Systems, Inc",
+       [3]byte{196, 114, 149}: "Cisco Systems, Inc",
+       [3]byte{196, 115, 30}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{196, 119, 171}: "Beijing ASU Tech Co.,Ltd",
+       [3]byte{196, 119, 175}: "Advanced Digital Broadcast SA",
+       [3]byte{196, 123, 47}:  "Beijing JoinHope Image Technology Ltd.",
+       [3]byte{196, 123, 163}: "NAVIS Inc.",
+       [3]byte{196, 124, 141}: "IEEE Registration Authority",
+       [3]byte{196, 125, 70}:  "FUJITSU LIMITED",
+       [3]byte{196, 125, 79}:  "Cisco Systems, Inc",
+       [3]byte{196, 125, 204}: "Zebra Technologies Inc",
+       [3]byte{196, 125, 254}: "A.N. Solutions GmbH",
+       [3]byte{196, 127, 81}:  "Inventek Systems",
+       [3]byte{196, 130, 63}:  "Fujian Newland Auto-ID Tech. Co,.Ltd.",
+       [3]byte{196, 130, 78}:  "Changzhou Uchip Electronics Co., LTD.",
+       [3]byte{196, 131, 111}: "Ciena Corporation",
+       [3]byte{196, 133, 8}:   "Intel Corporate",
+       [3]byte{196, 134, 233}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{196, 136, 229}: "Samsung Electronics Co.,Ltd",
+       [3]byte{196, 142, 143}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{196, 143, 7}:   "Shenzhen Yihao Hulian Science and Technology Co., Ltd.",
+       [3]byte{196, 145, 58}:  "Shenzhen Sanland Electronic Co., ltd.",
+       [3]byte{196, 146, 76}:  "KEISOKUKI CENTER CO.,LTD.",
+       [3]byte{196, 147, 0}:   "8Devices",
+       [3]byte{196, 147, 19}:  "100fio networks technology llc",
+       [3]byte{196, 147, 128}: "Speedytel technology",
+       [3]byte{196, 149, 162}: "SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD",
+       [3]byte{196, 152, 5}:   "Minieum Networks, Inc",
+       [3]byte{196, 154, 2}:   "LG Electronics (Mobile Communications)",
+       [3]byte{196, 157, 237}: "Microsoft Corporation",
+       [3]byte{196, 158, 65}:  "G24 Power Limited",
+       [3]byte{196, 159, 243}: "Mciao Technologies, Inc.",
+       [3]byte{196, 163, 102}: "zte corporation",
+       [3]byte{196, 168, 29}:  "D-Link International",
+       [3]byte{196, 170, 161}: "SUMMIT DEVELOPMENT, spol.s r.o.",
+       [3]byte{196, 171, 178}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{196, 173, 33}:  "MEDIAEDGE Corporation",
+       [3]byte{196, 173, 241}: "GOPEACE Inc.",
+       [3]byte{196, 174, 18}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{196, 179, 1}:   "Apple, Inc.",
+       [3]byte{196, 181, 18}:  "General Electric Digital Energy",
+       [3]byte{196, 185, 205}: "Cisco Systems, Inc",
+       [3]byte{196, 186, 153}: "I+ME Actia Informatik und Mikro-Elektronik GmbH",
+       [3]byte{196, 186, 163}: "Beijing Winicssec Technologies Co., Ltd.",
+       [3]byte{196, 187, 76}:  "Zebra Information Tech Co. Ltd",
+       [3]byte{196, 187, 234}: "Pakedge Device and Software Inc",
+       [3]byte{196, 189, 106}: "SKF GmbH",
+       [3]byte{196, 190, 132}: "Texas Instruments",
+       [3]byte{196, 190, 212}: "Avaya Inc",
+       [3]byte{196, 192, 174}: "MIDORI ELECTRONIC CO., LTD.",
+       [3]byte{196, 193, 159}: "National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)",
+       [3]byte{196, 197, 99}:  "TECNO MOBILE LIMITED",
+       [3]byte{196, 199, 85}:  "Beijing HuaqinWorld Technology Co.,Ltd",
+       [3]byte{196, 201, 25}:  "Energy Imports Ltd",
+       [3]byte{196, 201, 236}: "Gugaoo   HK Limited",
+       [3]byte{196, 202, 217}: "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{196, 203, 107}: "Airista Flow, Inc.",
+       [3]byte{196, 205, 69}:  "Beijing Boomsense Technology CO.,LTD.",
+       [3]byte{196, 205, 130}: "Hangzhou Lowan Information Technology Co., Ltd.",
+       [3]byte{196, 209, 151}: "Ventia Utility Services",
+       [3]byte{196, 212, 137}: "JiangSu Joyque Information Industry Co.,Ltd",
+       [3]byte{196, 214, 85}:  "Tercel technology co.,ltd",
+       [3]byte{196, 217, 135}: "Intel Corporate",
+       [3]byte{196, 218, 38}:  "NOBLEX SA",
+       [3]byte{196, 218, 125}: "Ivium Technologies B.V.",
+       [3]byte{196, 224, 50}:  "IEEE 1904.1 Working Group",
+       [3]byte{196, 225, 124}: "U2S co.",
+       [3]byte{196, 229, 16}:  "Mechatro, Inc.",
+       [3]byte{196, 231, 190}: "SCSpro Co.,Ltd",
+       [3]byte{196, 233, 47}:  "AB Sciex",
+       [3]byte{196, 233, 132}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{196, 234, 29}:  "Technicolor",
+       [3]byte{196, 235, 227}: "RRCN SAS",
+       [3]byte{196, 237, 186}: "Texas Instruments",
+       [3]byte{196, 238, 174}: "VSS Monitoring",
+       [3]byte{196, 238, 245}: "II-VI Incorporated",
+       [3]byte{196, 239, 112}: "Home Skinovations",
+       [3]byte{196, 240, 129}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{196, 241, 209}: "BEIJING SOGOU TECHNOLOGY DEVELOPMENT CO., LTD.",
+       [3]byte{196, 243, 18}:  "Texas Instruments",
+       [3]byte{196, 244, 100}: "Spica international",
+       [3]byte{196, 245, 124}: "Brocade Communications Systems, Inc.",
+       [3]byte{196, 245, 165}: "Kumalift Co., Ltd.",
+       [3]byte{196, 252, 228}: "DishTV NZ Ltd",
+       [3]byte{196, 255, 31}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{200, 0, 132}:   "Cisco Systems, Inc",
+       [3]byte{200, 2, 16}:    "LG Innotek",
+       [3]byte{200, 2, 88}:    "ITW GSE ApS",
+       [3]byte{200, 2, 143}:   "Nova Electronics (Shanghai) Co., Ltd.",
+       [3]byte{200, 2, 166}:   "Beijing Newmine Technology",
+       [3]byte{200, 7, 24}:    "TDSi",
+       [3]byte{200, 8, 233}:   "LG Electronics",
+       [3]byte{200, 10, 169}:  "QUANTA COMPUTER INC.",
+       [3]byte{200, 12, 200}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{200, 14, 20}:   "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+       [3]byte{200, 14, 119}:  "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+       [3]byte{200, 14, 149}:  "OmniLync Inc.",
+       [3]byte{200, 16, 115}:  "CENTURY OPTICOMM CO.,LTD",
+       [3]byte{200, 20, 81}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{200, 20, 121}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{200, 22, 165}:  "Masimo Corporation",
+       [3]byte{200, 22, 189}:  "Qingdao Hisense Communications Co.,Ltd.",
+       [3]byte{200, 25, 247}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{200, 26, 254}:  "DLOGIC GmbH",
+       [3]byte{200, 27, 92}:   "BCTech",
+       [3]byte{200, 27, 107}:  "Innova Security",
+       [3]byte{200, 30, 142}:  "ADV Security (S) Pte Ltd",
+       [3]byte{200, 30, 231}:  "Apple, Inc.",
+       [3]byte{200, 31, 102}:  "Dell Inc.",
+       [3]byte{200, 31, 190}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{200, 31, 234}:  "Avaya Inc",
+       [3]byte{200, 32, 142}:  "Storagedata",
+       [3]byte{200, 33, 88}:   "Intel Corporate",
+       [3]byte{200, 37, 225}:  "Lemobile Information Technology (Beijing) Co., Ltd",
+       [3]byte{200, 41, 42}:   "Barun Electronics",
+       [3]byte{200, 42, 20}:   "Apple, Inc.",
+       [3]byte{200, 46, 148}:  "Halfa Enterprise Co., Ltd.",
+       [3]byte{200, 49, 104}:  "eZEX corporation",
+       [3]byte{200, 50, 50}:   "Hunting Innova",
+       [3]byte{200, 51, 75}:   "Apple, Inc.",
+       [3]byte{200, 52, 142}:  "Intel Corporate",
+       [3]byte{200, 53, 184}:  "Ericsson, EAB/RWI/K",
+       [3]byte{200, 56, 112}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{200, 58, 53}:   "Tenda Technology Co., Ltd.",
+       [3]byte{200, 58, 107}:  "Roku, Inc",
+       [3]byte{200, 59, 69}:   "JRI",
+       [3]byte{200, 60, 133}:  "Apple, Inc.",
+       [3]byte{200, 61, 151}:  "Nokia Corporation",
+       [3]byte{200, 61, 212}:  "CyberTAN Technology Inc.",
+       [3]byte{200, 61, 252}:  "Pioneer DJ Corporation",
+       [3]byte{200, 62, 153}:  "Texas Instruments",
+       [3]byte{200, 62, 167}:  "KUNBUS GmbH",
+       [3]byte{200, 63, 38}:   "Microsoft Corporation",
+       [3]byte{200, 63, 180}:  "ARRIS Group, Inc.",
+       [3]byte{200, 64, 41}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{200, 69, 41}:   "IMK Networks Co.,Ltd",
+       [3]byte{200, 69, 68}:   "Asia Pacific CIS (Wuxi) Co, Ltd",
+       [3]byte{200, 69, 143}:  "Wyler AG",
+       [3]byte{200, 71, 140}:  "Beken Corporation",
+       [3]byte{200, 72, 245}:  "MEDISON Xray Co., Ltd",
+       [3]byte{200, 76, 117}:  "Cisco Systems, Inc",
+       [3]byte{200, 80, 233}:  "Raisecom Technology CO., LTD",
+       [3]byte{200, 81, 149}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{200, 86, 69}:   "Intermas France",
+       [3]byte{200, 86, 99}:   "Sunflex Europe GmbH",
+       [3]byte{200, 91, 118}:  "LCFC(HeFei) Electronics Technology co., ltd",
+       [3]byte{200, 96, 0}:    "ASUSTek COMPUTER INC.",
+       [3]byte{200, 99, 241}:  "Sony Interactive Entertainment Inc.",
+       [3]byte{200, 100, 199}: "zte corporation",
+       [3]byte{200, 102, 44}:  "Beijing Haitai Fangyuan High Technology Co,.Ltd.",
+       [3]byte{200, 102, 93}:  "Aerohive Networks Inc.",
+       [3]byte{200, 103, 94}:  "Aerohive Networks Inc.",
+       [3]byte{200, 105, 205}: "Apple, Inc.",
+       [3]byte{200, 108, 30}:  "Display Systems Ltd",
+       [3]byte{200, 108, 135}: "Zyxel Communications Corporation",
+       [3]byte{200, 108, 182}: "Optcom Co., Ltd.",
+       [3]byte{200, 111, 29}:  "Apple, Inc.",
+       [3]byte{200, 114, 72}:  "Aplicom Oy",
+       [3]byte{200, 115, 36}:  "Sow Cheng Technology Co. Ltd.",
+       [3]byte{200, 117, 91}:  "Quantify Technology Pty. Ltd.",
+       [3]byte{200, 119, 139}: "Themis Computer",
+       [3]byte{200, 123, 91}:  "zte corporation",
+       [3]byte{200, 124, 188}: "Valink Co., Ltd.",
+       [3]byte{200, 125, 119}: "Shenzhen Kingtech Communication Equipment Co.,Ltd",
+       [3]byte{200, 126, 117}: "Samsung Electronics Co.,Ltd",
+       [3]byte{200, 132, 57}:  "Sunrise Technologies",
+       [3]byte{200, 132, 71}:  "Beautiful Enterprise Co., Ltd",
+       [3]byte{200, 133, 80}:  "Apple, Inc.",
+       [3]byte{200, 135, 34}:  "Lumenpulse",
+       [3]byte{200, 135, 59}:  "Net Optics",
+       [3]byte{200, 138, 131}: "Dongguan HuaHong Electronics Co.,Ltd",
+       [3]byte{200, 139, 71}:  "Nolangroup S.P.A con Socio Unico",
+       [3]byte{200, 141, 131}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{200, 142, 209}: "IEEE Registration Authority",
+       [3]byte{200, 144, 62}:  "Pakton Technologies",
+       [3]byte{200, 145, 249}: "Sagemcom Broadband SAS",
+       [3]byte{200, 147, 70}:  "MXCHIP Company Limited",
+       [3]byte{200, 147, 131}: "Embedded Automation, Inc.",
+       [3]byte{200, 148, 187}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{200, 148, 210}: "Jiangsu Datang  Electronic Products Co., Ltd",
+       [3]byte{200, 151, 159}: "Nokia Corporation",
+       [3]byte{200, 156, 29}:  "Cisco Systems, Inc",
+       [3]byte{200, 156, 220}: "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{200, 159, 29}:  "SHENZHEN COMMUNICATION TECHNOLOGIES CO.,LTD",
+       [3]byte{200, 159, 66}:  "VDII Innovation AB",
+       [3]byte{200, 160, 48}:  "Texas Instruments",
+       [3]byte{200, 161, 182}: "Shenzhen Longway Technologies Co., Ltd",
+       [3]byte{200, 161, 186}: "Neul Ltd",
+       [3]byte{200, 162, 206}: "Oasis Media Systems LLC",
+       [3]byte{200, 166, 32}:  "Nebula, Inc",
+       [3]byte{200, 167, 10}:  "Verizon Business",
+       [3]byte{200, 167, 41}:  "SYStronics Co., Ltd.",
+       [3]byte{200, 168, 35}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{200, 169, 252}: "Goyoo Networks Inc.",
+       [3]byte{200, 170, 33}:  "ARRIS Group, Inc.",
+       [3]byte{200, 170, 85}:  "Hunan Comtom Electronic Incorporated Co.,Ltd",
+       [3]byte{200, 170, 204}: "Private",
+       [3]byte{200, 174, 156}: "Shanghai TYD Elecronic Technology Co. Ltd",
+       [3]byte{200, 175, 64}:  "marco Systemanalyse und Entwicklung GmbH",
+       [3]byte{200, 175, 227}: "Hefei Radio Communication Technology Co., Ltd",
+       [3]byte{200, 178, 30}:  "CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.",
+       [3]byte{200, 179, 115}: "Cisco-Linksys, LLC",
+       [3]byte{200, 181, 173}: "Hewlett Packard Enterprise",
+       [3]byte{200, 181, 183}: "Apple, Inc.",
+       [3]byte{200, 186, 148}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{200, 187, 211}: "Embrane",
+       [3]byte{200, 188, 200}: "Apple, Inc.",
+       [3]byte{200, 190, 25}:  "D-Link International",
+       [3]byte{200, 193, 38}:  "ZPM Industria e Comercio Ltda",
+       [3]byte{200, 193, 60}:  "RuggedTek Hangzhou Co., Ltd",
+       [3]byte{200, 194, 198}: "Shanghai Airm2m Communication Technology Co., Ltd",
+       [3]byte{200, 197, 14}:  "Shenzhen Primestone Network Technologies.Co., Ltd.",
+       [3]byte{200, 199, 145}: "Zero1.tv GmbH",
+       [3]byte{200, 203, 184}: "Hewlett Packard",
+       [3]byte{200, 205, 114}: "Sagemcom Broadband SAS",
+       [3]byte{200, 208, 25}:  "Shanghai Tigercel Communication Technology Co.,Ltd",
+       [3]byte{200, 209, 11}:  "Nokia Corporation",
+       [3]byte{200, 209, 42}:  "Comtrend Corporation",
+       [3]byte{200, 209, 94}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{200, 209, 209}: "AGAiT Technology Corporation",
+       [3]byte{200, 210, 193}: "Jetlun (Shenzhen) Corporation",
+       [3]byte{200, 211, 163}: "D-Link International",
+       [3]byte{200, 211, 255}: "Hewlett Packard",
+       [3]byte{200, 212, 41}:  "Muehlbauer AG",
+       [3]byte{200, 213, 144}: "FLIGHT DATA SYSTEMS",
+       [3]byte{200, 213, 254}: "Shenzhen Zowee Technology Co., Ltd",
+       [3]byte{200, 215, 25}:  "Cisco-Linksys, LLC",
+       [3]byte{200, 215, 121}: "Qingdao Haier Telecom Co.,Ltd",
+       [3]byte{200, 215, 176}: "Samsung Electronics Co.,Ltd",
+       [3]byte{200, 219, 38}:  "Logitech",
+       [3]byte{200, 221, 201}: "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{200, 222, 81}:  "IntegraOptics",
+       [3]byte{200, 222, 201}: "Coriant",
+       [3]byte{200, 223, 124}: "Nokia Corporation",
+       [3]byte{200, 223, 132}: "Texas Instruments",
+       [3]byte{200, 224, 235}: "Apple, Inc.",
+       [3]byte{200, 225, 48}:  "Milkyway Group Ltd",
+       [3]byte{200, 225, 167}: "Vertu Corporation Limited",
+       [3]byte{200, 228, 47}:  "Technical Research Design and Development",
+       [3]byte{200, 231, 118}: "PTCOM Technology",
+       [3]byte{200, 231, 216}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{200, 231, 240}: "Juniper Networks",
+       [3]byte{200, 238, 8}:   "TANGTOP TECHNOLOGY CO.,LTD",
+       [3]byte{200, 238, 117}: "Pishion International Co. Ltd",
+       [3]byte{200, 238, 166}: "Shenzhen SHX Technology Co., Ltd",
+       [3]byte{200, 239, 46}:  "Beijing Gefei Tech. Co., Ltd",
+       [3]byte{200, 242, 48}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{200, 243, 107}: "Yamato Scale Co.,Ltd.",
+       [3]byte{200, 243, 134}: "Shenzhen Xiaoniao Technology Co.,Ltd",
+       [3]byte{200, 244, 6}:   "Avaya Inc",
+       [3]byte{200, 246, 80}:  "Apple, Inc.",
+       [3]byte{200, 246, 141}: "S.E.TECHNOLOGIES LIMITED",
+       [3]byte{200, 247, 4}:   "Building Block Video",
+       [3]byte{200, 247, 51}:  "Intel Corporate",
+       [3]byte{200, 248, 109}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{200, 249, 70}:  "LOCOSYS Technology Inc.",
+       [3]byte{200, 249, 129}: "Seneca s.r.l.",
+       [3]byte{200, 249, 200}: "NewSharp Technology(SuZhou)Co,Ltd",
+       [3]byte{200, 249, 249}: "Cisco Systems, Inc",
+       [3]byte{200, 251, 38}:  "Cisco SPVTG",
+       [3]byte{200, 253, 25}:  "Texas Instruments",
+       [3]byte{200, 254, 48}:  "Bejing DAYO Mobile Communication Technology Ltd.",
+       [3]byte{200, 255, 40}:  "Liteon Technology Corporation",
+       [3]byte{200, 255, 119}: "Dyson Limited",
+       [3]byte{204, 0, 128}:   "BETTINI SRL",
+       [3]byte{204, 3, 217}:   "Cisco Meraki",
+       [3]byte{204, 3, 250}:   "Technicolor CH USA Inc.",
+       [3]byte{204, 4, 124}:   "G-WAY Microwave",
+       [3]byte{204, 4, 180}:   "Select Comfort",
+       [3]byte{204, 5, 27}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{204, 6, 119}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{204, 7, 171}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{204, 7, 228}:   "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{204, 8, 141}:   "Apple, Inc.",
+       [3]byte{204, 8, 224}:   "Apple, Inc.",
+       [3]byte{204, 9, 200}:   "IMAQLIQ LTD",
+       [3]byte{204, 12, 218}:  "Miljovakt AS",
+       [3]byte{204, 13, 236}:  "Cisco SPVTG",
+       [3]byte{204, 16, 163}:  "Beijing Nan Bao Technology Co., Ltd.",
+       [3]byte{204, 20, 166}:  "Yichun MyEnergy Domain, Inc",
+       [3]byte{204, 22, 126}:  "Cisco Systems, Inc",
+       [3]byte{204, 24, 123}:  "Manzanita Systems, Inc.",
+       [3]byte{204, 25, 168}:  "PT Inovação e Sistemas SA",
+       [3]byte{204, 26, 250}:  "zte corporation",
+       [3]byte{204, 27, 224}:  "IEEE Registration Authority",
+       [3]byte{204, 30, 255}:  "Metrological Group BV",
+       [3]byte{204, 31, 196}:  "InVue",
+       [3]byte{204, 32, 232}:  "Apple, Inc.",
+       [3]byte{204, 34, 24}:   "InnoDigital Co., Ltd.",
+       [3]byte{204, 34, 55}:   "IEEE Registration Authority",
+       [3]byte{204, 37, 239}:  "Apple, Inc.",
+       [3]byte{204, 38, 45}:   "Verifi, LLC",
+       [3]byte{204, 41, 245}:  "Apple, Inc.",
+       [3]byte{204, 42, 128}:  "Micro-Biz intelligence solutions Co.,Ltd",
+       [3]byte{204, 45, 33}:   "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{204, 45, 131}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{204, 45, 140}:  "LG ELECTRONICS INC",
+       [3]byte{204, 45, 224}:  "Routerboard.com",
+       [3]byte{204, 47, 113}:  "Intel Corporate",
+       [3]byte{204, 48, 128}:  "VAIO Corporation",
+       [3]byte{204, 51, 187}:  "Sagemcom Broadband SAS",
+       [3]byte{204, 52, 41}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{204, 52, 215}:  "GEWISS S.P.A.",
+       [3]byte{204, 53, 64}:   "Technicolor CH USA Inc.",
+       [3]byte{204, 55, 171}:  "Edgecore Networks Corportation",
+       [3]byte{204, 57, 140}:  "Shiningtek",
+       [3]byte{204, 58, 97}:   "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{204, 58, 223}:  "Private",
+       [3]byte{204, 59, 62}:   "Lester Electrical",
+       [3]byte{204, 60, 63}:   "SA.S.S. Datentechnik AG",
+       [3]byte{204, 61, 130}:  "Intel Corporate",
+       [3]byte{204, 62, 95}:   "Hewlett Packard",
+       [3]byte{204, 63, 29}:   "Intesis Software SL",
+       [3]byte{204, 64, 208}:  "NETGEAR",
+       [3]byte{204, 67, 227}:  "Trump s.a.",
+       [3]byte{204, 68, 99}:   "Apple, Inc.",
+       [3]byte{204, 70, 57}:   "WAAV, Inc.",
+       [3]byte{204, 70, 214}:  "Cisco Systems, Inc",
+       [3]byte{204, 71, 3}:    "Intercon Systems Co., Ltd.",
+       [3]byte{204, 74, 225}:  "fourtec -Fourier Technologies",
+       [3]byte{204, 75, 115}:  "AMPAK Technology, Inc.",
+       [3]byte{204, 75, 251}:  "Hellberg Safety AB",
+       [3]byte{204, 78, 36}:   "Brocade Communications Systems, Inc.",
+       [3]byte{204, 78, 236}:  "HUMAX Co., Ltd.",
+       [3]byte{204, 80, 10}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{204, 80, 28}:   "KVH Industries, Inc.",
+       [3]byte{204, 80, 118}:  "Ocom Communications, Inc.",
+       [3]byte{204, 82, 175}:  "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{204, 83, 181}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{204, 84, 89}:   "OnTime Networks AS",
+       [3]byte{204, 85, 173}:  "RIM",
+       [3]byte{204, 89, 62}:   "TOUMAZ LTD",
+       [3]byte{204, 90, 83}:   "Cisco Systems, Inc",
+       [3]byte{204, 92, 117}:  "Weightech Com. Imp. Exp. Equip. Pesagem Ltda",
+       [3]byte{204, 93, 78}:   "Zyxel Communications Corporation",
+       [3]byte{204, 93, 87}:   "Information  System Research Institute,Inc.",
+       [3]byte{204, 95, 191}:  "Topwise 3G Communication Co., Ltd.",
+       [3]byte{204, 96, 187}:  "Empower RF Systems",
+       [3]byte{204, 97, 229}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{204, 101, 173}: "ARRIS Group, Inc.",
+       [3]byte{204, 102, 178}: "Nokia",
+       [3]byte{204, 105, 176}: "Global Traffic Technologies, LLC",
+       [3]byte{204, 107, 152}: "Minetec Wireless Technologies",
+       [3]byte{204, 107, 241}: "Sound Masking Inc.",
+       [3]byte{204, 109, 160}: "Roku, Inc.",
+       [3]byte{204, 109, 239}: "TJK Tietolaite Oy",
+       [3]byte{204, 110, 164}: "Samsung Electronics Co.,Ltd",
+       [3]byte{204, 114, 15}:  "Viscount Systems Inc.",
+       [3]byte{204, 115, 20}:  "HONG KONG WHEATEK TECHNOLOGY LIMITED",
+       [3]byte{204, 116, 152}: "Filmetrics Inc.",
+       [3]byte{204, 118, 105}: "SEETECH",
+       [3]byte{204, 120, 95}:  "Apple, Inc.",
+       [3]byte{204, 120, 171}: "Texas Instruments",
+       [3]byte{204, 121, 74}:  "BLU Products Inc.",
+       [3]byte{204, 121, 207}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+       [3]byte{204, 122, 48}:  "CMAX Wireless Co., Ltd.",
+       [3]byte{204, 123, 53}:  "zte corporation",
+       [3]byte{204, 125, 55}:  "ARRIS Group, Inc.",
+       [3]byte{204, 126, 231}: "Panasonic Corporation AVC Networks Company",
+       [3]byte{204, 129, 218}: "Phicomm (Shanghai) Co., Ltd.",
+       [3]byte{204, 130, 235}: "KYOCERA CORPORATION",
+       [3]byte{204, 133, 108}: "SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD",
+       [3]byte{204, 137, 253}: "Nokia Corporation",
+       [3]byte{204, 140, 218}: "Shenzhen Wei Da Intelligent Technology Go.,Ltd",
+       [3]byte{204, 140, 227}: "Texas Instruments",
+       [3]byte{204, 144, 147}: "Hansong Tehnologies",
+       [3]byte{204, 144, 232}: "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{204, 145, 43}:  "TE Connectivity Touch Solutions",
+       [3]byte{204, 148, 74}:  "Pfeiffer Vacuum GmbH",
+       [3]byte{204, 148, 112}: "Kinestral Technologies, Inc.",
+       [3]byte{204, 149, 215}: "Vizio, Inc",
+       [3]byte{204, 150, 53}:  "LVS Co.,Ltd.",
+       [3]byte{204, 150, 160}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{204, 152, 145}: "Cisco Systems, Inc",
+       [3]byte{204, 158, 0}:   "Nintendo Co., Ltd.",
+       [3]byte{204, 159, 53}:  "Transbit Sp. z o.o.",
+       [3]byte{204, 159, 122}: "Chiun Mai Communication Systems, Inc",
+       [3]byte{204, 160, 229}: "DZG Metering GmbH",
+       [3]byte{204, 162, 25}:  "SHENZHEN ALONG INVESTMENT CO.,LTD",
+       [3]byte{204, 162, 35}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{204, 162, 96}:  "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{204, 163, 116}: "Guangdong Guanglian Electronic Technology Co.Ltd",
+       [3]byte{204, 164, 98}:  "ARRIS Group, Inc.",
+       [3]byte{204, 164, 175}: "Shenzhen Sowell Technology Co., LTD",
+       [3]byte{204, 166, 20}:  "AIFA TECHNOLOGY CORP.",
+       [3]byte{204, 175, 120}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{204, 176, 218}: "Liteon Technology Corporation",
+       [3]byte{204, 177, 26}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{204, 178, 85}:  "D-Link International",
+       [3]byte{204, 179, 171}: "shenzhen Biocare Bio-Medical Equipment Co.,Ltd.",
+       [3]byte{204, 179, 248}: "FUJITSU ISOTEC LIMITED",
+       [3]byte{204, 181, 90}:  "Fraunhofer ITWM",
+       [3]byte{204, 182, 145}: "NECMagnusCommunications",
+       [3]byte{204, 184, 136}: "AnB Securite s.a.",
+       [3]byte{204, 184, 168}: "AMPAK Technology, Inc.",
+       [3]byte{204, 184, 241}: "EAGLE KINGDOM TECHNOLOGIES LIMITED",
+       [3]byte{204, 189, 53}:  "Steinel GmbH",
+       [3]byte{204, 189, 211}: "Ultimaker B.V.",
+       [3]byte{204, 190, 89}:  "Calix Inc.",
+       [3]byte{204, 190, 113}: "OptiLogix BV",
+       [3]byte{204, 193, 4}:   "Applied Technical Systems",
+       [3]byte{204, 195, 234}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{204, 197, 10}:  "SHENZHEN DAJIAHAO TECHNOLOGY CO.,LTD",
+       [3]byte{204, 197, 239}: "Co-Comm Servicios Telecomunicaciones S.L.",
+       [3]byte{204, 198, 43}:  "Tri-Systems Corporation",
+       [3]byte{204, 199, 96}:  "Apple, Inc.",
+       [3]byte{204, 200, 215}: "CIAS Elettronica srl",
+       [3]byte{204, 204, 78}:  "Sun Fountainhead USA. Corp",
+       [3]byte{204, 204, 129}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{204, 205, 100}: "SM-Electronic GmbH",
+       [3]byte{204, 206, 30}:  "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+       [3]byte{204, 206, 64}:  "Janteq Corp",
+       [3]byte{204, 210, 155}: "Shenzhen Bopengfa Elec&Technology CO.,Ltd",
+       [3]byte{204, 211, 30}:  "IEEE Registration Authority",
+       [3]byte{204, 211, 226}: "Jiangsu Yinhe  Electronics Co.,Ltd.",
+       [3]byte{204, 213, 57}:  "Cisco Systems, Inc",
+       [3]byte{204, 216, 17}:  "Aiconn Technology Corporation",
+       [3]byte{204, 216, 193}: "Cisco Systems, Inc",
+       [3]byte{204, 217, 233}: "SCR Engineers Ltd.",
+       [3]byte{204, 224, 195}: "Mangstor, Inc.",
+       [3]byte{204, 225, 127}: "Juniper Networks",
+       [3]byte{204, 225, 213}: "BUFFALO.INC",
+       [3]byte{204, 231, 152}: "My Social Stuff",
+       [3]byte{204, 231, 223}: "American Magnetics, Inc.",
+       [3]byte{204, 232, 172}: "SOYEA Technology Co.,Ltd.",
+       [3]byte{204, 234, 28}:  "DCONWORKS  Co., Ltd",
+       [3]byte{204, 238, 217}: "VAHLE DETO GmbH",
+       [3]byte{204, 239, 72}:  "Cisco Systems, Inc",
+       [3]byte{204, 243, 165}: "Chi Mei Communication Systems, Inc",
+       [3]byte{204, 244, 7}:   "EUKREA ELECTROMATIQUE SARL",
+       [3]byte{204, 245, 56}:  "3isysnetworks",
+       [3]byte{204, 246, 122}: "Ayecka Communication Systems LTD",
+       [3]byte{204, 248, 65}:  "Lumewave",
+       [3]byte{204, 248, 240}: "Xi'an HISU Multimedia Technology Co.,Ltd.",
+       [3]byte{204, 249, 84}:  "Avaya Inc",
+       [3]byte{204, 249, 87}:  "u-blox AG",
+       [3]byte{204, 249, 232}: "Samsung Electronics Co.,Ltd",
+       [3]byte{204, 250, 0}:   "LG Electronics (Mobile Communications)",
+       [3]byte{204, 251, 101}: "Nintendo Co., Ltd.",
+       [3]byte{204, 252, 109}: "RIZ TRANSMITTERS",
+       [3]byte{204, 252, 177}: "Wireless Technology, Inc.",
+       [3]byte{204, 253, 23}:  "TCT mobile ltd",
+       [3]byte{204, 254, 60}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 3, 75}:    "Apple, Inc.",
+       [3]byte{208, 4, 1}:     "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{208, 4, 146}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{208, 5, 42}:    "Arcadyan Corporation",
+       [3]byte{208, 7, 144}:   "Texas Instruments",
+       [3]byte{208, 7, 202}:   "Juniper Networks",
+       [3]byte{208, 10, 171}:  "Yokogawa Digital Computer Corporation",
+       [3]byte{208, 14, 164}:  "Porsche Cars North America",
+       [3]byte{208, 14, 217}:  "Taicang T&W Electronics",
+       [3]byte{208, 15, 109}:  "T&W Electronics Company",
+       [3]byte{208, 18, 66}:   "BIOS Corporation",
+       [3]byte{208, 19, 30}:   "Sunrex Technology Corp",
+       [3]byte{208, 19, 253}:  "LG Electronics (Mobile Communications)",
+       [3]byte{208, 21, 74}:   "zte corporation",
+       [3]byte{208, 23, 106}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 23, 194}:  "ASUSTek COMPUTER INC.",
+       [3]byte{208, 26, 167}:  "UniPrint",
+       [3]byte{208, 28, 187}:  "Beijing Ctimes Digital Technology Co., Ltd.",
+       [3]byte{208, 34, 18}:   "IEEE Registration Authority",
+       [3]byte{208, 34, 190}:  "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{208, 35, 219}:  "Apple, Inc.",
+       [3]byte{208, 37, 22}:   "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{208, 37, 68}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{208, 37, 152}:  "Apple, Inc.",
+       [3]byte{208, 39, 136}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{208, 44, 69}:   "littleBits Electronics, Inc.",
+       [3]byte{208, 45, 179}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{208, 49, 16}:   "Ingenic Semiconductor Co.,Ltd",
+       [3]byte{208, 49, 105}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 51, 17}:   "Apple, Inc.",
+       [3]byte{208, 55, 66}:   "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+       [3]byte{208, 55, 97}:   "Texas Instruments",
+       [3]byte{208, 57, 114}:  "Texas Instruments",
+       [3]byte{208, 57, 179}:  "ARRIS Group, Inc.",
+       [3]byte{208, 61, 195}:  "AQ Corporation",
+       [3]byte{208, 62, 92}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{208, 67, 30}:   "Dell Inc.",
+       [3]byte{208, 70, 220}:  "Southwest Research Institute",
+       [3]byte{208, 72, 243}:  "DATTUS Inc",
+       [3]byte{208, 73, 139}:  "ZOOM SERVER",
+       [3]byte{208, 76, 193}:  "SINTRONES Technology Corp.",
+       [3]byte{208, 77, 44}:   "Roku, Inc.",
+       [3]byte{208, 79, 126}:  "Apple, Inc.",
+       [3]byte{208, 80, 153}:  "ASRock Incorporation",
+       [3]byte{208, 81, 98}:   "Sony Mobile Communications AB",
+       [3]byte{208, 82, 168}:  "Physical Graph Corporation",
+       [3]byte{208, 83, 73}:   "Liteon Technology Corporation",
+       [3]byte{208, 84, 45}:   "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{208, 85, 178}:  "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{208, 87, 76}:   "Cisco Systems, Inc",
+       [3]byte{208, 87, 123}:  "Intel Corporate",
+       [3]byte{208, 87, 133}:  "Pantech Co., Ltd.",
+       [3]byte{208, 87, 161}:  "Werma Signaltechnik GmbH & Co. KG",
+       [3]byte{208, 88, 117}:  "Active Control Technology Inc.",
+       [3]byte{208, 88, 168}:  "zte corporation",
+       [3]byte{208, 89, 149}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{208, 89, 195}:  "CeraMicro Technology Corporation",
+       [3]byte{208, 89, 228}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 90, 0}:    "Technicolor CH USA Inc.",
+       [3]byte{208, 90, 15}:   "I-BT DIGITAL CO.,LTD",
+       [3]byte{208, 90, 241}:  "Shenzhen Pulier Tech CO.,Ltd",
+       [3]byte{208, 91, 168}:  "zte corporation",
+       [3]byte{208, 92, 122}:  "Sartura d.o.o.",
+       [3]byte{208, 95, 184}:  "Texas Instruments",
+       [3]byte{208, 95, 206}:  "Hitachi Data Systems",
+       [3]byte{208, 96, 140}:  "zte corporation",
+       [3]byte{208, 98, 160}:  "China Essence Technology (Zhumadian) Co., Ltd.",
+       [3]byte{208, 99, 77}:   "Meiko Maschinenbau GmbH &amp; Co. KG",
+       [3]byte{208, 99, 180}:  "SolidRun Ltd.",
+       [3]byte{208, 101, 202}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{208, 102, 109}: "Shenzhen Bus-Lan Technology Co., Ltd.",
+       [3]byte{208, 102, 123}: "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 103, 38}:  "Hewlett Packard Enterprise",
+       [3]byte{208, 103, 229}: "Dell Inc.",
+       [3]byte{208, 105, 158}: "LUMINEX Lighting Control Equipment",
+       [3]byte{208, 105, 208}: "Verto Medical Solutions, LLC",
+       [3]byte{208, 106, 31}:  "BSE CO.,LTD.",
+       [3]byte{208, 111, 74}:  "TOPWELL INTERNATIONAL HOLDINGS LIMITED",
+       [3]byte{208, 111, 130}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{208, 113, 196}: "zte corporation",
+       [3]byte{208, 114, 220}: "Cisco Systems, Inc",
+       [3]byte{208, 115, 127}: "Mini-Circuits",
+       [3]byte{208, 115, 142}: "DONG OH PRECISION CO., LTD.",
+       [3]byte{208, 115, 213}: "LIFI LABS MANAGEMENT PTY LTD",
+       [3]byte{208, 117, 190}: "Reno A&E",
+       [3]byte{208, 118, 80}:  "IEEE Registration Authority",
+       [3]byte{208, 122, 181}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{208, 124, 45}:  "Leie IOT technology Co., Ltd",
+       [3]byte{208, 125, 229}: "Forward Pay Systems, Inc.",
+       [3]byte{208, 126, 40}:  "Hewlett Packard",
+       [3]byte{208, 126, 53}:  "Intel Corporate",
+       [3]byte{208, 127, 196}: "Ou Wei Technology Co.,Ltd. of Shenzhen City",
+       [3]byte{208, 131, 212}: "Xtel Wireless ApS",
+       [3]byte{208, 132, 176}: "Sagemcom Broadband SAS",
+       [3]byte{208, 135, 226}: "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 137, 153}: "APCON, Inc.",
+       [3]byte{208, 138, 85}:  "Skullcandy",
+       [3]byte{208, 139, 126}: "Passif Semiconductor",
+       [3]byte{208, 140, 181}: "Texas Instruments",
+       [3]byte{208, 140, 255}: "UPWIS AB",
+       [3]byte{208, 146, 158}: "Microsoft Corporation",
+       [3]byte{208, 147, 128}: "Ducere Technologies Pvt. Ltd.",
+       [3]byte{208, 147, 248}: "Stonestreet One LLC",
+       [3]byte{208, 148, 102}: "Dell Inc.",
+       [3]byte{208, 149, 199}: "Pantech Co., Ltd.",
+       [3]byte{208, 150, 251}: "DASAN Network Solutions",
+       [3]byte{208, 153, 213}: "Alcatel-Lucent",
+       [3]byte{208, 155, 5}:   "Emtronix",
+       [3]byte{208, 156, 48}:  "Foster Electric Company, Limited",
+       [3]byte{208, 157, 10}:  "LINKCOM",
+       [3]byte{208, 157, 171}: "TCT mobile ltd",
+       [3]byte{208, 160, 214}: "Chengdu TD Tech Ltd.",
+       [3]byte{208, 163, 17}:  "Neuberger Gebäudeautomation GmbH",
+       [3]byte{208, 164, 177}: "Sonifex Ltd.",
+       [3]byte{208, 165, 166}: "Cisco Systems, Inc",
+       [3]byte{208, 166, 55}:  "Apple, Inc.",
+       [3]byte{208, 174, 236}: "Alpha Networks Inc.",
+       [3]byte{208, 175, 182}: "Linktop Technology Co., LTD",
+       [3]byte{208, 176, 205}: "Moen",
+       [3]byte{208, 177, 40}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 178, 196}: "Technicolor CH USA Inc.",
+       [3]byte{208, 179, 63}:  "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{208, 180, 152}: "Robert Bosch LLC Automotive Electronics",
+       [3]byte{208, 181, 35}:  "Bestcare Cloucal Corp.",
+       [3]byte{208, 181, 61}:  "SEPRO ROBOTIQUE",
+       [3]byte{208, 181, 194}: "Texas Instruments",
+       [3]byte{208, 186, 228}: "Shanghai MXCHIP Information Technology Co., Ltd.",
+       [3]byte{208, 187, 128}: "SHL Telemedicine International Ltd.",
+       [3]byte{208, 189, 1}:   "DS International",
+       [3]byte{208, 190, 44}:  "CNSLink Co., Ltd.",
+       [3]byte{208, 191, 156}: "Hewlett Packard",
+       [3]byte{208, 192, 191}: "Actions Microelectronics Co., Ltd",
+       [3]byte{208, 193, 147}: "SKYBELL, INC",
+       [3]byte{208, 193, 177}: "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 194, 130}: "Cisco Systems, Inc",
+       [3]byte{208, 196, 47}:  "Tamagawa Seiki Co.,Ltd.",
+       [3]byte{208, 197, 243}: "Apple, Inc.",
+       [3]byte{208, 199, 137}: "Cisco Systems, Inc",
+       [3]byte{208, 199, 192}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{208, 205, 225}: "Scientech Electronics",
+       [3]byte{208, 207, 94}:  "Energy Micro AS",
+       [3]byte{208, 208, 75}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{208, 208, 253}: "Cisco Systems, Inc",
+       [3]byte{208, 210, 18}:  "K2NET Co.,Ltd.",
+       [3]byte{208, 210, 134}: "Beckman Coulter K.K.",
+       [3]byte{208, 210, 176}: "Apple, Inc.",
+       [3]byte{208, 211, 252}: "Mios, Ltd.",
+       [3]byte{208, 212, 18}:  "ADB Broadband Italia",
+       [3]byte{208, 212, 113}: "MVTECH co., Ltd",
+       [3]byte{208, 214, 204}: "Wintop",
+       [3]byte{208, 217, 79}:  "IEEE Registration Authority",
+       [3]byte{208, 219, 50}:  "Nokia Corporation",
+       [3]byte{208, 223, 154}: "Liteon Technology Corporation",
+       [3]byte{208, 223, 178}: "Genie Networks Limited",
+       [3]byte{208, 223, 199}: "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 225, 64}:  "Apple, Inc.",
+       [3]byte{208, 227, 71}:  "Yoga",
+       [3]byte{208, 228, 11}:  "Wearable Inc.",
+       [3]byte{208, 228, 74}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{208, 229, 77}:  "ARRIS Group, Inc.",
+       [3]byte{208, 231, 130}: "AzureWave Technology Inc.",
+       [3]byte{208, 235, 3}:   "Zhehua technology limited",
+       [3]byte{208, 235, 158}: "Seowoo Inc.",
+       [3]byte{208, 240, 219}: "Ericsson",
+       [3]byte{208, 242, 127}: "SteadyServ Technoligies, LLC",
+       [3]byte{208, 247, 59}:  "Helmut Mauell GmbH Werk Weida",
+       [3]byte{208, 248, 140}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+       [3]byte{208, 250, 29}:  "Qihoo  360  Technology Co.,Ltd",
+       [3]byte{208, 252, 204}: "Samsung Electronics Co.,Ltd",
+       [3]byte{208, 255, 80}:  "Texas Instruments",
+       [3]byte{208, 255, 152}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 0, 13}:    "Phoenix Broadband Technologies, LLC.",
+       [3]byte{212, 0, 87}:    "MC Technologies GmbH",
+       [3]byte{212, 1, 41}:    "Broadcom",
+       [3]byte{212, 1, 109}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{212, 2, 74}:    "Delphian Systems LLC",
+       [3]byte{212, 4, 205}:   "ARRIS Group, Inc.",
+       [3]byte{212, 4, 255}:   "Juniper Networks",
+       [3]byte{212, 5, 152}:   "ARRIS Group, Inc.",
+       [3]byte{212, 10, 169}:  "ARRIS Group, Inc.",
+       [3]byte{212, 11, 26}:   "HTC Corporation",
+       [3]byte{212, 11, 185}:  "Solid Semecs bv.",
+       [3]byte{212, 15, 178}:  "Applied Micro Electronics AME bv",
+       [3]byte{212, 16, 144}:  "iNFORM Systems AG",
+       [3]byte{212, 16, 207}:  "Huanshun Network Science and Technology Co., Ltd.",
+       [3]byte{212, 17, 214}:  "ShotSpotter, Inc.",
+       [3]byte{212, 18, 150}:  "Anobit Technologies Ltd.",
+       [3]byte{212, 18, 187}:  "Quadrant Components Inc. Ltd",
+       [3]byte{212, 19, 111}:  "Asia Pacific Brands",
+       [3]byte{212, 26, 63}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{212, 28, 28}:   "RCF S.P.A.",
+       [3]byte{212, 29, 113}:  "Palo Alto Networks",
+       [3]byte{212, 30, 53}:   "TOHO Electronics INC.",
+       [3]byte{212, 31, 12}:   "JAI Oy",
+       [3]byte{212, 32, 109}:  "HTC Corporation",
+       [3]byte{212, 33, 34}:   "Sercomm Corporation",
+       [3]byte{212, 34, 63}:   "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{212, 34, 78}:   "Alcatel Lucent",
+       [3]byte{212, 37, 139}:  "Intel Corporate",
+       [3]byte{212, 39, 81}:   "Infopia Co., Ltd",
+       [3]byte{212, 40, 178}:  "ioBridge, Inc.",
+       [3]byte{212, 40, 213}:  "TCT mobile ltd",
+       [3]byte{212, 41, 234}:  "Zimory GmbH",
+       [3]byte{212, 44, 15}:   "ARRIS Group, Inc.",
+       [3]byte{212, 44, 61}:   "Sky Light Digital Limited",
+       [3]byte{212, 44, 68}:   "Cisco Systems, Inc",
+       [3]byte{212, 47, 35}:   "Akenori PTE Ltd",
+       [3]byte{212, 49, 157}:  "Sinwatec",
+       [3]byte{212, 50, 102}:  "Fike Corporation",
+       [3]byte{212, 54, 57}:   "Texas Instruments",
+       [3]byte{212, 54, 219}:  "Jiangsu Toppower Automotive Electronics Co., Ltd",
+       [3]byte{212, 55, 215}:  "zte corporation",
+       [3]byte{212, 56, 156}:  "Sony Mobile Communications AB",
+       [3]byte{212, 58, 101}:  "IGRS Engineering Lab Ltd.",
+       [3]byte{212, 58, 233}:  "DONGGUAN ipt INDUSTRIAL CO., LTD",
+       [3]byte{212, 61, 103}:  "Carma Industries Inc.",
+       [3]byte{212, 61, 126}:  "Micro-Star Int'l Co, Ltd",
+       [3]byte{212, 64, 240}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 65, 101}:  "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{212, 67, 168}:  "Changzhou Haojie Electric Co., Ltd.",
+       [3]byte{212, 69, 232}:  "Jiangxi Hongpai Technology Co., Ltd.",
+       [3]byte{212, 75, 94}:   "TAIYO YUDEN CO., LTD.",
+       [3]byte{212, 76, 36}:   "Vuppalamritha Magnetic Components LTD",
+       [3]byte{212, 76, 156}:  "Shenzhen YOOBAO Technology Co.Ltd",
+       [3]byte{212, 76, 167}:  "Informtekhnika & Communication, LLC",
+       [3]byte{212, 79, 128}:  "Kemper Digital GmbH",
+       [3]byte{212, 80, 63}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{212, 80, 122}:  "CEIVA Logic, Inc",
+       [3]byte{212, 82, 42}:   "TangoWiFi.com",
+       [3]byte{212, 82, 81}:   "IBT Ingenieurbureau Broennimann Thun",
+       [3]byte{212, 82, 151}:  "nSTREAMS Technologies, Inc.",
+       [3]byte{212, 83, 175}:  "VIGO System S.A.",
+       [3]byte{212, 85, 86}:   "Fiber Mountain Inc.",
+       [3]byte{212, 85, 190}:  "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 90, 178}:  "Galleon Systems",
+       [3]byte{212, 92, 112}:  "Wi-Fi Alliance",
+       [3]byte{212, 93, 66}:   "Nokia Corporation",
+       [3]byte{212, 93, 223}:  "PEGATRON CORPORATION",
+       [3]byte{212, 95, 37}:   "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{212, 97, 46}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 97, 50}:   "Pro Concept Manufacturer Co.,Ltd.",
+       [3]byte{212, 97, 157}:  "Apple, Inc.",
+       [3]byte{212, 97, 254}:  "Hangzhou H3C Technologies Co., Limited",
+       [3]byte{212, 99, 198}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{212, 99, 254}:  "Arcadyan Corporation",
+       [3]byte{212, 100, 247}: "CHENGDU USEE DIGITAL TECHNOLOGY CO., LTD",
+       [3]byte{212, 102, 168}: "Riedo Networks GmbH",
+       [3]byte{212, 103, 97}:  "SAHAB TECHNOLOGY",
+       [3]byte{212, 103, 231}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{212, 104, 77}:  "Ruckus Wireless",
+       [3]byte{212, 104, 103}: "Neoventus Design Group",
+       [3]byte{212, 104, 186}: "Shenzhen Sundray Technologies Company Limited",
+       [3]byte{212, 106, 106}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{212, 106, 145}: "Snap AV",
+       [3]byte{212, 106, 168}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 108, 191}: "Goodrich ISR",
+       [3]byte{212, 108, 218}: "CSM GmbH",
+       [3]byte{212, 109, 80}:  "Cisco Systems, Inc",
+       [3]byte{212, 110, 14}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{212, 110, 92}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 111, 66}:  "WAXESS USA Inc",
+       [3]byte{212, 114, 8}:   "Bragi GmbH",
+       [3]byte{212, 118, 234}: "zte corporation",
+       [3]byte{212, 120, 86}:  "Avaya Inc",
+       [3]byte{212, 121, 195}: "Cameronet GmbH & Co. KG",
+       [3]byte{212, 122, 226}: "Samsung Electronics Co.,Ltd",
+       [3]byte{212, 123, 53}:  "NEO Monitors AS",
+       [3]byte{212, 123, 117}: "HARTING Electronics GmbH",
+       [3]byte{212, 123, 176}: "ASKEY COMPUTER CORP",
+       [3]byte{212, 125, 252}: "TECNO MOBILE LIMITED",
+       [3]byte{212, 129, 202}: "iDevices, LLC",
+       [3]byte{212, 129, 215}: "Dell Inc.",
+       [3]byte{212, 130, 62}:  "Argosy Technologies, Ltd.",
+       [3]byte{212, 131, 4}:   "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 133, 100}: "Hewlett Packard",
+       [3]byte{212, 135, 216}: "Samsung Electronics Co.,Ltd",
+       [3]byte{212, 136, 63}:  "HDPRO CO., LTD.",
+       [3]byte{212, 136, 144}: "Samsung Electronics Co.,Ltd",
+       [3]byte{212, 140, 181}: "Cisco Systems, Inc",
+       [3]byte{212, 141, 217}: "Meld Technology, Inc",
+       [3]byte{212, 143, 51}:  "Microsoft Corporation",
+       [3]byte{212, 143, 170}: "Sogecam Industrial, S.A.",
+       [3]byte{212, 144, 224}: "Topcon Electronics GmbH & Co. KG",
+       [3]byte{212, 145, 175}: "Electroacustica General Iberica, S.A.",
+       [3]byte{212, 147, 152}: "Nokia Corporation",
+       [3]byte{212, 147, 160}: "Fidelix Oy",
+       [3]byte{212, 148, 90}:  "COSMO CO., LTD",
+       [3]byte{212, 148, 161}: "Texas Instruments",
+       [3]byte{212, 148, 232}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 149, 36}:  "Clover Network, Inc.",
+       [3]byte{212, 150, 223}: "SUNGJIN C&T CO.,LTD",
+       [3]byte{212, 151, 11}:  "Xiaomi Communications Co Ltd",
+       [3]byte{212, 154, 32}:  "Apple, Inc.",
+       [3]byte{212, 155, 92}:  "Chongqing Miedu Technology Co., Ltd.",
+       [3]byte{212, 156, 40}:  "JayBird LLC",
+       [3]byte{212, 156, 142}: "University of FUKUI",
+       [3]byte{212, 158, 109}: "Wuhan Zhongyuan Huadian Science & Technology Co.,",
+       [3]byte{212, 160, 42}:  "Cisco Systems, Inc",
+       [3]byte{212, 161, 72}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 164, 37}:  "SMAX Technology Co., Ltd.",
+       [3]byte{212, 164, 153}: "InView Technology Corporation",
+       [3]byte{212, 169, 40}:  "GreenWave Reality Inc",
+       [3]byte{212, 170, 255}: "MICRO WORLD",
+       [3]byte{212, 172, 78}:  "BODi rS, LLC",
+       [3]byte{212, 173, 45}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{212, 174, 5}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{212, 174, 82}:  "Dell Inc.",
+       [3]byte{212, 177, 16}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{212, 177, 105}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+       [3]byte{212, 178, 122}: "ARRIS Group, Inc.",
+       [3]byte{212, 180, 62}:  "Messcomp Datentechnik GmbH",
+       [3]byte{212, 184, 255}: "Home Control Singapore Pte Ltd",
+       [3]byte{212, 190, 217}: "Dell Inc.",
+       [3]byte{212, 191, 45}:  "SE Controls Asia Pacific Ltd",
+       [3]byte{212, 191, 127}: "UPVEL",
+       [3]byte{212, 193, 200}: "zte corporation",
+       [3]byte{212, 193, 252}: "Nokia Corporation",
+       [3]byte{212, 199, 102}: "Acentic GmbH",
+       [3]byte{212, 200, 176}: "Prime Electronics & Satellitics Inc.",
+       [3]byte{212, 201, 178}: "Quanergy Systems Inc",
+       [3]byte{212, 201, 239}: "Hewlett Packard",
+       [3]byte{212, 202, 109}: "Routerboard.com",
+       [3]byte{212, 202, 110}: "u-blox AG",
+       [3]byte{212, 203, 175}: "Nokia Corporation",
+       [3]byte{212, 206, 184}: "Enatel LTD",
+       [3]byte{212, 207, 55}:  "Symbolic IO",
+       [3]byte{212, 207, 249}: "Shenzhen Sen5 Technology Co., Ltd.",
+       [3]byte{212, 209, 132}: "ADB Broadband Italia",
+       [3]byte{212, 210, 73}:  "Power Ethernet",
+       [3]byte{212, 210, 229}: "BKAV Corporation",
+       [3]byte{212, 213, 13}:  "Southwest Microwave, Inc",
+       [3]byte{212, 215, 72}:  "Cisco Systems, Inc",
+       [3]byte{212, 215, 169}: "Shanghai Kaixiang Info Tech LTD",
+       [3]byte{212, 216, 152}: "Korea CNO Tech Co., Ltd",
+       [3]byte{212, 217, 25}:  "GoPro",
+       [3]byte{212, 220, 205}: "Apple, Inc.",
+       [3]byte{212, 223, 87}:  "Alpinion Medical Systems",
+       [3]byte{212, 224, 142}: "ValueHD Corporation",
+       [3]byte{212, 227, 44}:  "S. Siedle & Sohne",
+       [3]byte{212, 227, 63}:  "Nokia",
+       [3]byte{212, 232, 178}: "Samsung Electronics Co.,Ltd",
+       [3]byte{212, 233, 11}:  "CVT CO.,LTD",
+       [3]byte{212, 234, 14}:  "Avaya Inc",
+       [3]byte{212, 236, 12}:  "Harley-Davidson Motor Company",
+       [3]byte{212, 236, 134}: "LinkedHope Intelligent Technologies Co., Ltd",
+       [3]byte{212, 238, 7}:   "HIWIFI Co., Ltd.",
+       [3]byte{212, 240, 39}:  "Navetas Energy Management",
+       [3]byte{212, 240, 180}: "Napco Security Technologies",
+       [3]byte{212, 241, 67}:  "IPROAD.,Inc",
+       [3]byte{212, 242, 7}:   "DIAODIAO(Beijing)Technology CO.,Ltd",
+       [3]byte{212, 244, 111}: "Apple, Inc.",
+       [3]byte{212, 244, 190}: "Palo Alto Networks",
+       [3]byte{212, 245, 19}:  "Texas Instruments",
+       [3]byte{212, 246, 63}:  "IEA S.R.L.",
+       [3]byte{212, 249, 161}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{216, 0, 77}:    "Apple, Inc.",
+       [3]byte{216, 5, 46}:    "Skyviia Corporation",
+       [3]byte{216, 6, 209}:   "Honeywell Fire System (Shanghai) Co,. Ltd.",
+       [3]byte{216, 8, 49}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{216, 8, 245}:   "Arcadia Networks Co. Ltd.",
+       [3]byte{216, 9, 195}:   "Cercacor Labs",
+       [3]byte{216, 12, 207}:  "C.G.V. S.A.S.",
+       [3]byte{216, 13, 227}:  "FXI TECHNOLOGIES AS",
+       [3]byte{216, 15, 153}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{216, 20, 214}:  "SURE SYSTEM Co Ltd",
+       [3]byte{216, 21, 13}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{216, 22, 10}:   "Nippon Electro-Sensory Devices",
+       [3]byte{216, 22, 193}:  "DEWAV (HK) ELECTRONICS LIMITED",
+       [3]byte{216, 24, 43}:   "Conti Temic Microelectronic GmbH",
+       [3]byte{216, 25, 122}:  "Nuheara Ltd",
+       [3]byte{216, 25, 206}:  "Telesquare",
+       [3]byte{216, 27, 254}:  "TWINLINX CORPORATION",
+       [3]byte{216, 28, 20}:   "Compacta International, Ltd.",
+       [3]byte{216, 29, 114}:  "Apple, Inc.",
+       [3]byte{216, 30, 222}:  "B&W Group Ltd",
+       [3]byte{216, 31, 204}:  "Brocade Communications Systems, Inc.",
+       [3]byte{216, 32, 159}:  "Cubro Acronet GesmbH",
+       [3]byte{216, 34, 244}:  "Avnet Silica",
+       [3]byte{216, 36, 189}:  "Cisco Systems, Inc",
+       [3]byte{216, 37, 34}:   "ARRIS Group, Inc.",
+       [3]byte{216, 37, 176}:  "Rockeetech Systems Co.,Ltd.",
+       [3]byte{216, 38, 185}:  "Guangdong Coagent Electronics S&amp;T Co.,Ltd.",
+       [3]byte{216, 39, 12}:   "MaxTronic International Co., Ltd.",
+       [3]byte{216, 40, 201}:  "General Electric Consumer and Industrial",
+       [3]byte{216, 41, 22}:   "Ascent Communication Technology",
+       [3]byte{216, 41, 134}:  "Best Wish Technology LTD",
+       [3]byte{216, 42, 21}:   "Leitner SpA",
+       [3]byte{216, 42, 126}:  "Nokia Corporation",
+       [3]byte{216, 45, 155}:  "Shenzhen G.Credit Communication Technology Co., Ltd",
+       [3]byte{216, 45, 225}:  "Tricascade Inc.",
+       [3]byte{216, 48, 98}:   "Apple, Inc.",
+       [3]byte{216, 49, 207}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{216, 50, 20}:   "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{216, 50, 90}:   "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{216, 51, 127}:  "Office FA.com Co.,Ltd.",
+       [3]byte{216, 55, 190}:  "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{216, 56, 13}:   "SHENZHEN IP-COM Network Co.,Ltd",
+       [3]byte{216, 56, 252}:  "Ruckus Wireless",
+       [3]byte{216, 60, 105}:  "Shenzhen TINNO Mobile Technology Corp.",
+       [3]byte{216, 66, 172}:  "Shanghai Feixun Communication Co.,Ltd.",
+       [3]byte{216, 66, 226}:  "Canary Connect, Inc.",
+       [3]byte{216, 67, 237}:  "Suzuken",
+       [3]byte{216, 69, 43}:   "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{216, 70, 6}:    "Silicon Valley Global Marketing",
+       [3]byte{216, 71, 16}:   "Sichuan Changhong Electric Ltd.",
+       [3]byte{216, 72, 238}:  "Hangzhou Xueji Technology Co., Ltd.",
+       [3]byte{216, 73, 11}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{216, 73, 47}:   "CANON INC.",
+       [3]byte{216, 74, 135}:  "OI ELECTRIC CO.,LTD",
+       [3]byte{216, 75, 42}:   "Cognitas Technologies, Inc.",
+       [3]byte{216, 79, 184}:  "LG ELECTRONICS",
+       [3]byte{216, 80, 230}:  "ASUSTek COMPUTER INC.",
+       [3]byte{216, 84, 58}:   "Texas Instruments",
+       [3]byte{216, 84, 162}:  "Aerohive Networks Inc.",
+       [3]byte{216, 85, 163}:  "zte corporation",
+       [3]byte{216, 87, 239}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{216, 88, 215}:  "CZ.NIC, z.s.p.o.",
+       [3]byte{216, 91, 42}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{216, 93, 76}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{216, 93, 132}:  "CAx soft GmbH",
+       [3]byte{216, 93, 226}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{216, 93, 239}:  "Busch-Jaeger Elektro GmbH",
+       [3]byte{216, 93, 251}:  "Private",
+       [3]byte{216, 96, 176}:  "bioMérieux Italia S.p.A.",
+       [3]byte{216, 96, 179}:  "Guangdong Global Electronic Technology CO.,LTD",
+       [3]byte{216, 97, 98}:   "Wistron Neweb Corporation",
+       [3]byte{216, 97, 148}:  "Objetivos y Sevicios de Valor Añadido",
+       [3]byte{216, 98, 219}:  "Eno Inc.",
+       [3]byte{216, 99, 117}:  "Xiaomi Communications Co Ltd",
+       [3]byte{216, 101, 149}: "Toy's Myth Inc.",
+       [3]byte{216, 102, 198}: "Shenzhen Daystar Technology Co.,ltd",
+       [3]byte{216, 102, 238}: "BOXIN COMMUNICATION CO.,LTD.",
+       [3]byte{216, 103, 217}: "Cisco Systems, Inc",
+       [3]byte{216, 105, 96}:  "Steinsvik",
+       [3]byte{216, 107, 247}: "Nintendo Co., Ltd.",
+       [3]byte{216, 108, 2}:   "Huaqin Telecom Technology Co.,Ltd",
+       [3]byte{216, 108, 99}:  "Google, Inc.",
+       [3]byte{216, 108, 233}: "Sagemcom Broadband SAS",
+       [3]byte{216, 113, 87}:  "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{216, 116, 149}: "zte corporation",
+       [3]byte{216, 117, 51}:  "Nokia Corporation",
+       [3]byte{216, 118, 10}:  "Escort, Inc.",
+       [3]byte{216, 120, 229}: "KUHN SA",
+       [3]byte{216, 121, 136}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{216, 124, 221}: "SANIX INCORPORATED",
+       [3]byte{216, 126, 177}: "x.o.ware, inc.",
+       [3]byte{216, 128, 57}:  "Microchip Technology Inc.",
+       [3]byte{216, 128, 60}:  "Anhui Huami Information Technology Company Limited",
+       [3]byte{216, 129, 206}: "AHN INC.",
+       [3]byte{216, 132, 102}: "Extreme Networks, Inc.",
+       [3]byte{216, 135, 213}: "Leadcore Technology CO.,LTD",
+       [3]byte{216, 136, 206}: "RF Technology Pty Ltd",
+       [3]byte{216, 138, 59}:  "UNIT-EM",
+       [3]byte{216, 139, 76}:  "KingTing Tech.",
+       [3]byte{216, 141, 92}:  "Elentec",
+       [3]byte{216, 143, 118}: "Apple, Inc.",
+       [3]byte{216, 144, 232}: "Samsung Electronics Co.,Ltd",
+       [3]byte{216, 147, 65}:  "General Electric Global Research",
+       [3]byte{216, 148, 3}:   "Hewlett Packard Enterprise",
+       [3]byte{216, 149, 47}:  "Texas Instruments",
+       [3]byte{216, 150, 133}: "GoPro",
+       [3]byte{216, 150, 149}: "Apple, Inc.",
+       [3]byte{216, 150, 224}: "Alibaba Cloud Computing Ltd.",
+       [3]byte{216, 151, 59}:  "Artesyn Embedded Technologies",
+       [3]byte{216, 151, 96}:  "C2 Development, Inc.",
+       [3]byte{216, 151, 124}: "Grey Innovation",
+       [3]byte{216, 151, 186}: "PEGATRON CORPORATION",
+       [3]byte{216, 154, 52}:  "Beijing SHENQI Technology Co., Ltd.",
+       [3]byte{216, 157, 103}: "Hewlett Packard",
+       [3]byte{216, 157, 185}: "eMegatech International Corp.",
+       [3]byte{216, 158, 63}:  "Apple, Inc.",
+       [3]byte{216, 158, 243}: "Dell Inc.",
+       [3]byte{216, 160, 29}:  "Espressif Inc.",
+       [3]byte{216, 161, 5}:   "Syslane, Co., Ltd.",
+       [3]byte{216, 162, 94}:  "Apple, Inc.",
+       [3]byte{216, 165, 52}:  "Spectronix Corporation",
+       [3]byte{216, 173, 221}: "Sonavation, Inc.",
+       [3]byte{216, 174, 144}: "Itibia Technologies",
+       [3]byte{216, 175, 59}:  "Hangzhou Bigbright Integrated communications system Co.,Ltd",
+       [3]byte{216, 175, 241}: "Panasonic Appliances Company",
+       [3]byte{216, 176, 46}:  "Guangzhou Zonerich Business Machine Co., LTD.",
+       [3]byte{216, 176, 76}:  "Jinan USR IOT Technology Co., Ltd.",
+       [3]byte{216, 177, 34}:  "Juniper Networks",
+       [3]byte{216, 177, 42}:  "Panasonic Mobile Communications Co.,Ltd.",
+       [3]byte{216, 177, 144}: "Cisco Systems, Inc",
+       [3]byte{216, 179, 119}: "HTC Corporation",
+       [3]byte{216, 182, 183}: "Comtrend Corporation",
+       [3]byte{216, 182, 193}: "NetworkAccountant, Inc.",
+       [3]byte{216, 182, 214}: "Blu Tether Limited",
+       [3]byte{216, 184, 246}: "Nantworks",
+       [3]byte{216, 185, 14}:  "Triple Domain Vision Co.,Ltd.",
+       [3]byte{216, 187, 44}:  "Apple, Inc.",
+       [3]byte{216, 191, 76}:  "Victory Concept Electronics Limited",
+       [3]byte{216, 192, 104}: "Netgenetech.co.,ltd.",
+       [3]byte{216, 192, 106}: "Hunantv.com Interactive Entertainment Media Co.,Ltd.",
+       [3]byte{216, 195, 251}: "DETRACOM",
+       [3]byte{216, 196, 106}: "Murata Manufacturing Co., Ltd.",
+       [3]byte{216, 196, 151}: "Quanta Computer Inc.",
+       [3]byte{216, 196, 233}: "Samsung Electronics Co.,Ltd",
+       [3]byte{216, 198, 145}: "Hichan Technology Corp.",
+       [3]byte{216, 199, 113}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{216, 199, 200}: "Aruba Networks",
+       [3]byte{216, 200, 233}: "Phicomm (Shanghai) Co., Ltd.",
+       [3]byte{216, 201, 157}: "EA DISPLAY LIMITED",
+       [3]byte{216, 203, 138}: "Micro-Star INTL CO., LTD.",
+       [3]byte{216, 207, 156}: "Apple, Inc.",
+       [3]byte{216, 209, 203}: "Apple, Inc.",
+       [3]byte{216, 210, 124}: "JEMA ENERGY, SA",
+       [3]byte{216, 211, 133}: "Hewlett Packard",
+       [3]byte{216, 212, 60}:  "Sony Corporation",
+       [3]byte{216, 213, 185}: "Rainforest Automation, Inc.",
+       [3]byte{216, 214, 126}: "GSK CNC EQUIPMENT CO.,LTD",
+       [3]byte{216, 215, 35}:  "IDS, Inc",
+       [3]byte{216, 216, 102}: "SHENZHEN TOZED TECHNOLOGIES CO.,LTD.",
+       [3]byte{216, 218, 82}:  "APATOR S.A.",
+       [3]byte{216, 220, 233}: "Kunshan Erlab ductless filtration system Co.,Ltd",
+       [3]byte{216, 221, 95}:  "BALMUDA Inc.",
+       [3]byte{216, 221, 253}: "Texas Instruments",
+       [3]byte{216, 222, 206}: "ISUNG CO.,LTD",
+       [3]byte{216, 223, 13}:  "beroNet GmbH",
+       [3]byte{216, 223, 122}: "Quest Software, Inc.",
+       [3]byte{216, 224, 4}:   "Vodia Networks Inc",
+       [3]byte{216, 224, 184}: "BULAT LLC",
+       [3]byte{216, 224, 225}: "Samsung Electronics Co.,Ltd",
+       [3]byte{216, 227, 174}: "CIRTEC MEDICAL SYSTEMS",
+       [3]byte{216, 229, 109}: "TCT mobile ltd",
+       [3]byte{216, 231, 43}:  "NetScout Systems, Inc.",
+       [3]byte{216, 231, 67}:  "Wush, Inc",
+       [3]byte{216, 233, 82}:  "KEOPSYS",
+       [3]byte{216, 235, 151}: "TRENDnet, Inc.",
+       [3]byte{216, 237, 28}:  "Magna Technology SL",
+       [3]byte{216, 238, 120}: "Moog Protokraft",
+       [3]byte{216, 239, 205}: "Nokia",
+       [3]byte{216, 240, 242}: "Zeebo Inc",
+       [3]byte{216, 241, 240}: "Pepxim International Limited",
+       [3]byte{216, 247, 16}:  "Libre Wireless Technologies Inc.",
+       [3]byte{216, 251, 17}:  "AXACORE",
+       [3]byte{216, 251, 94}:  "ASKEY COMPUTER CORP",
+       [3]byte{216, 251, 104}: "Cloud Corner Ltd.",
+       [3]byte{216, 252, 56}:  "Giantec Semiconductor Inc",
+       [3]byte{216, 252, 147}: "Intel Corporate",
+       [3]byte{216, 254, 143}: "IDFone Co., Ltd.",
+       [3]byte{216, 254, 227}: "D-Link International",
+       [3]byte{220, 0, 119}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{220, 2, 101}:   "Meditech Kft",
+       [3]byte{220, 2, 142}:   "zte corporation",
+       [3]byte{220, 5, 47}:    "National Products Inc.",
+       [3]byte{220, 5, 117}:   "SIEMENS ENERGY AUTOMATION",
+       [3]byte{220, 5, 237}:   "Nabtesco  Corporation",
+       [3]byte{220, 7, 193}:   "HangZhou QiYang Technology Co.,Ltd.",
+       [3]byte{220, 8, 86}:    "Alcatel-Lucent Enterprise",
+       [3]byte{220, 9, 20}:    "Talk-A-Phone Co.",
+       [3]byte{220, 9, 76}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{220, 11, 26}:   "ADB Broadband Italia",
+       [3]byte{220, 11, 52}:   "LG Electronics (Mobile Communications)",
+       [3]byte{220, 12, 45}:   "WEIFANG GOERTEK ELECTRONICS CO.,LTD",
+       [3]byte{220, 12, 92}:   "Apple, Inc.",
+       [3]byte{220, 13, 48}:   "Shenzhen Feasycom Technology Co., Ltd.",
+       [3]byte{220, 14, 161}:  "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{220, 21, 219}:  "Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.",
+       [3]byte{220, 22, 162}:  "Medtronic Diabetes",
+       [3]byte{220, 23, 90}:   "Hitachi High-Technologies Corporation",
+       [3]byte{220, 23, 146}:  "Captivate Network",
+       [3]byte{220, 26, 1}:    "Ecoliv Technology ( Shenzhen ) Ltd.",
+       [3]byte{220, 26, 197}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{220, 29, 159}:  "U & B tech",
+       [3]byte{220, 29, 212}:  "Microstep-MIS spol. s r.o.",
+       [3]byte{220, 30, 163}:  "Accensus LLC",
+       [3]byte{220, 32, 8}:    "ASD Electronics Ltd",
+       [3]byte{220, 40, 52}:   "HAKKO Corporation",
+       [3]byte{220, 41, 58}:   "Shenzhen Nuoshi Technology Co., LTD.",
+       [3]byte{220, 42, 20}:   "Shanghai Longjing Technology Co.",
+       [3]byte{220, 43, 42}:   "Apple, Inc.",
+       [3]byte{220, 43, 97}:   "Apple, Inc.",
+       [3]byte{220, 43, 102}:  "InfoBLOCK S.A. de C.V.",
+       [3]byte{220, 43, 202}:  "Zera GmbH",
+       [3]byte{220, 44, 38}:   "Iton Technology Limited",
+       [3]byte{220, 45, 203}:  "Beijing Unis HengYue Technology Co., Ltd.",
+       [3]byte{220, 46, 106}:  "HCT. Co., Ltd.",
+       [3]byte{220, 47, 3}:    "Step forward Group Co., Ltd.",
+       [3]byte{220, 48, 156}:  "Heyrex Limited",
+       [3]byte{220, 51, 13}:   "Qingdao Haier Telecom Co.,Ltd",
+       [3]byte{220, 51, 80}:   "TechSAT GmbH",
+       [3]byte{220, 53, 241}:  "Positivo Informática SA.",
+       [3]byte{220, 55, 20}:   "Apple, Inc.",
+       [3]byte{220, 55, 82}:   "GE",
+       [3]byte{220, 55, 210}:  "Hunan HKT Electronic Technology Co., Ltd",
+       [3]byte{220, 56, 225}:  "Juniper Networks",
+       [3]byte{220, 57, 121}:  "Skyport Systems",
+       [3]byte{220, 58, 94}:   "Roku, Inc.",
+       [3]byte{220, 60, 46}:   "Manufacturing System Insights, Inc.",
+       [3]byte{220, 60, 132}:  "Ticom Geomatics, Inc.",
+       [3]byte{220, 60, 246}:  "Atomic Rules LLC",
+       [3]byte{220, 62, 81}:   "Solberg & Andersen AS",
+       [3]byte{220, 62, 248}:  "Nokia Corporation",
+       [3]byte{220, 65, 95}:   "Apple, Inc.",
+       [3]byte{220, 68, 39}:   "IEEE Registration Authority",
+       [3]byte{220, 68, 109}:  "Allwinner Technology Co., Ltd",
+       [3]byte{220, 68, 182}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{220, 69, 23}:   "ARRIS Group, Inc.",
+       [3]byte{220, 72, 178}:  "Baraja Pty. Ltd.",
+       [3]byte{220, 73, 201}:  "CASCO SIGNAL LTD",
+       [3]byte{220, 74, 62}:   "Hewlett Packard",
+       [3]byte{220, 77, 35}:   "MRV Comunications",
+       [3]byte{220, 78, 222}:  "SHINYEI TECHNOLOGY CO., LTD.",
+       [3]byte{220, 79, 34}:   "Espressif Inc.",
+       [3]byte{220, 83, 96}:   "Intel Corporate",
+       [3]byte{220, 83, 124}:  "Compal Broadband Networks, Inc.",
+       [3]byte{220, 85, 131}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{220, 86, 230}:  "Shenzhen Bococom Technology Co.,LTD",
+       [3]byte{220, 87, 38}:   "Power-One",
+       [3]byte{220, 94, 54}:   "Paterson Technology",
+       [3]byte{220, 96, 161}:  "Teledyne DALSA Professional Imaging",
+       [3]byte{220, 100, 124}: "C.R.S. iiMotion GmbH",
+       [3]byte{220, 100, 184}: "Shenzhen JingHanDa Electronics Co.Ltd",
+       [3]byte{220, 102, 58}:  "Apacer Technology Inc.",
+       [3]byte{220, 102, 114}: "Samsung Electronics Co.,Ltd",
+       [3]byte{220, 104, 235}: "Nintendo Co.,Ltd",
+       [3]byte{220, 106, 234}: "Infinix mobility limited",
+       [3]byte{220, 109, 205}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{220, 111, 0}:   "Livescribe, Inc.",
+       [3]byte{220, 111, 8}:   "Bay Storage Technology",
+       [3]byte{220, 112, 20}:  "Private",
+       [3]byte{220, 113, 68}:  "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{220, 116, 168}: "Samsung Electronics Co.,Ltd",
+       [3]byte{220, 120, 52}:  "LOGICOM SA",
+       [3]byte{220, 123, 148}: "Cisco Systems, Inc",
+       [3]byte{220, 127, 164}: "2Wire Inc",
+       [3]byte{220, 130, 91}:  "JANUS, spol. s r.o.",
+       [3]byte{220, 130, 246}: "iPort",
+       [3]byte{220, 133, 222}: "AzureWave Technology Inc.",
+       [3]byte{220, 134, 216}: "Apple, Inc.",
+       [3]byte{220, 154, 142}: "Nanjing Cocomm electronics co., LTD",
+       [3]byte{220, 155, 30}:  "Intercom, Inc.",
+       [3]byte{220, 155, 156}: "Apple, Inc.",
+       [3]byte{220, 156, 82}:  "Sapphire Technology Limited.",
+       [3]byte{220, 156, 159}: "Shenzhen YOUHUA Technology Co., Ltd",
+       [3]byte{220, 159, 164}: "Nokia Corporation",
+       [3]byte{220, 159, 219}: "Ubiquiti Networks Inc.",
+       [3]byte{220, 163, 172}: "RBcloudtech",
+       [3]byte{220, 164, 202}: "Apple, Inc.",
+       [3]byte{220, 165, 244}: "Cisco Systems, Inc",
+       [3]byte{220, 166, 189}: "Beijing Lanbo Technology Co., Ltd.",
+       [3]byte{220, 167, 217}: "Compressor Controls Corp",
+       [3]byte{220, 168, 207}: "New Spin Golf, LLC.",
+       [3]byte{220, 169, 4}:   "Apple, Inc.",
+       [3]byte{220, 169, 113}: "Intel Corporate",
+       [3]byte{220, 169, 137}: "MACANDC",
+       [3]byte{220, 173, 158}: "GreenPriz",
+       [3]byte{220, 174, 4}:   "CELOXICA Ltd",
+       [3]byte{220, 176, 88}:  "Bürkert Werke GmbH",
+       [3]byte{220, 179, 180}: "Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.",
+       [3]byte{220, 180, 196}: "Microsoft XCG",
+       [3]byte{220, 190, 122}: "Zhejiang Nurotron Biotechnology Co.",
+       [3]byte{220, 191, 144}: "HUIZHOU QIAOXING TELECOMMUNICATION INDUSTRY CO.,LTD.",
+       [3]byte{220, 191, 233}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{220, 192, 219}: "Shenzhen Kaiboer Technology Co., Ltd.",
+       [3]byte{220, 192, 235}: "ASSA ABLOY CÔTE PICARDE",
+       [3]byte{220, 193, 1}:   "SOLiD Technologies, Inc.",
+       [3]byte{220, 196, 34}:  "Systembase Limited",
+       [3]byte{220, 198, 34}:  "BUHEUNG SYSTEM",
+       [3]byte{220, 198, 75}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{220, 199, 147}: "Nokia Corporation",
+       [3]byte{220, 200, 245}: "Shanghai UMEinfo CO.,LTD.",
+       [3]byte{220, 203, 168}: "Explora Technologies Inc",
+       [3]byte{220, 206, 65}:  "FE GLOBAL HONG KONG LIMITED",
+       [3]byte{220, 206, 188}: "Shenzhen JSR Technology Co.,Ltd.",
+       [3]byte{220, 206, 193}: "Cisco Systems, Inc",
+       [3]byte{220, 207, 148}: "Beijing Rongcheng Hutong Technology Co., Ltd.",
+       [3]byte{220, 207, 150}: "Samsung Electronics Co.,Ltd",
+       [3]byte{220, 208, 247}: "Bentek Systems Ltd.",
+       [3]byte{220, 210, 85}:  "Kinpo Electronics, Inc.",
+       [3]byte{220, 210, 252}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{220, 211, 33}:  "HUMAX Co., Ltd.",
+       [3]byte{220, 213, 42}:  "Sunny Heart Limited",
+       [3]byte{220, 216, 124}: "Beijing Jingdong Century Trading Co., LTD.",
+       [3]byte{220, 216, 127}: "Shenzhen JoinCyber Telecom Equipment Ltd",
+       [3]byte{220, 217, 22}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{220, 218, 79}:  "GETCK TECHNOLOGY,  INC",
+       [3]byte{220, 219, 112}: "Tonfunk Systementwicklung und Service GmbH",
+       [3]byte{220, 220, 7}:   "TRP Systems BV",
+       [3]byte{220, 222, 202}: "Akyllor",
+       [3]byte{220, 224, 38}:  "Patrol Tag, Inc",
+       [3]byte{220, 225, 173}: "Shenzhen Wintop Photoelectric Technology Co., Ltd",
+       [3]byte{220, 226, 172}: "Lumens Digital Optics Inc.",
+       [3]byte{220, 229, 120}: "Experimental Factory of Scientific Engineering and Special Design Department",
+       [3]byte{220, 231, 28}:  "AUG Elektronik GmbH",
+       [3]byte{220, 232, 56}:  "CK Telecom (Shenzhen) Limited",
+       [3]byte{220, 235, 83}:  "Wuhan QianXiao Elecronic Technology CO.,LTD",
+       [3]byte{220, 235, 148}: "Cisco Systems, Inc",
+       [3]byte{220, 236, 6}:   "Heimi Network Technology Co., Ltd.",
+       [3]byte{220, 238, 6}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{220, 239, 9}:   "NETGEAR",
+       [3]byte{220, 239, 202}: "Murata Manufacturing Co., Ltd.",
+       [3]byte{220, 240, 93}:  "Letta Teknoloji",
+       [3]byte{220, 240, 144}: "Nubia Technology Co.,Ltd.",
+       [3]byte{220, 241, 16}:  "Nokia Corporation",
+       [3]byte{220, 247, 85}:  "SITRONIK",
+       [3]byte{220, 248, 88}:  "Lorent Networks, Inc.",
+       [3]byte{220, 250, 213}: "STRONG Ges.m.b.H.",
+       [3]byte{220, 251, 2}:   "BUFFALO.INC",
+       [3]byte{220, 254, 7}:   "PEGATRON CORPORATION",
+       [3]byte{220, 254, 24}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{224, 3, 112}:   "ShenZhen Continental Wireless Technology Co., Ltd.",
+       [3]byte{224, 5, 197}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{224, 6, 230}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{224, 7, 27}:    "Hewlett Packard Enterprise",
+       [3]byte{224, 11, 40}:   "Inovonics",
+       [3]byte{224, 12, 127}:  "Nintendo Co., Ltd.",
+       [3]byte{224, 13, 185}:  "Cree, Inc.",
+       [3]byte{224, 14, 218}:  "Cisco Systems, Inc",
+       [3]byte{224, 16, 127}:  "Ruckus Wireless",
+       [3]byte{224, 20, 62}:   "Modoosis Inc.",
+       [3]byte{224, 24, 119}:  "FUJITSU LIMITED",
+       [3]byte{224, 25, 29}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{224, 26, 234}:  "Allied Telesis, Inc.",
+       [3]byte{224, 28, 65}:   "Aerohive Networks Inc.",
+       [3]byte{224, 28, 238}:  "Bravo Tech, Inc.",
+       [3]byte{224, 29, 56}:   "Beijing HuaqinWorld Technology Co.,Ltd",
+       [3]byte{224, 29, 59}:   "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{224, 30, 7}:    "Anite Telecoms  US. Inc",
+       [3]byte{224, 31, 10}:   "Xslent Energy Technologies. LLC",
+       [3]byte{224, 34, 2}:    "ARRIS Group, Inc.",
+       [3]byte{224, 36, 127}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{224, 37, 56}:   "Titan Pet Products",
+       [3]byte{224, 38, 48}:   "Intrigue Technologies, Inc.",
+       [3]byte{224, 38, 54}:   "Nortel Networks",
+       [3]byte{224, 39, 26}:   "TTC Next-generation Home Network System WG",
+       [3]byte{224, 40, 97}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{224, 40, 109}:  "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+       [3]byte{224, 42, 130}:  "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{224, 44, 178}:  "Lenovo Mobile Communication (Wuhan) Company Limited",
+       [3]byte{224, 44, 243}:  "MRS Electronic GmbH",
+       [3]byte{224, 47, 109}:  "Cisco Systems, Inc",
+       [3]byte{224, 48, 5}:    "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{224, 49, 158}:  "Valve Corporation",
+       [3]byte{224, 49, 208}:  "SZ Telstar CO., LTD",
+       [3]byte{224, 52, 228}:  "Feit Electric Company, Inc.",
+       [3]byte{224, 53, 96}:   "Challenger Supply Holdings, LLC",
+       [3]byte{224, 54, 118}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{224, 54, 227}:  "Stage One International Co., Ltd.",
+       [3]byte{224, 55, 191}:  "Wistron Neweb Corporation",
+       [3]byte{224, 57, 215}:  "Plexxi, Inc.",
+       [3]byte{224, 60, 91}:   "SHENZHEN JIAXINJIE ELECTRON CO.,LTD",
+       [3]byte{224, 62, 68}:   "Broadcom",
+       [3]byte{224, 62, 74}:   "Cavanagh Group International",
+       [3]byte{224, 62, 125}:  "data-complex GmbH",
+       [3]byte{224, 63, 73}:   "ASUSTek COMPUTER INC.",
+       [3]byte{224, 65, 54}:   "MitraStar Technology Corp.",
+       [3]byte{224, 67, 219}:  "Shenzhen ViewAt Technology Co.,Ltd.",
+       [3]byte{224, 70, 154}:  "NETGEAR",
+       [3]byte{224, 72, 175}:  "Premietech Limited",
+       [3]byte{224, 72, 211}:  "MOBIWIRE MOBILES (NINGBO) CO.,LTD",
+       [3]byte{224, 75, 69}:   "Hi-P Electronics Pte Ltd",
+       [3]byte{224, 79, 67}:   "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{224, 79, 189}:  "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{224, 80, 139}:  "Zhejiang Dahua Technology Co., Ltd.",
+       [3]byte{224, 81, 36}:   "NXP Semiconductors",
+       [3]byte{224, 81, 99}:   "Arcadyan Corporation",
+       [3]byte{224, 85, 61}:   "Cisco Meraki",
+       [3]byte{224, 85, 151}:  "Emergent Vision Technologies Inc.",
+       [3]byte{224, 86, 244}:  "AxesNetwork Solutions inc.",
+       [3]byte{224, 88, 158}:  "Laerdal Medical",
+       [3]byte{224, 91, 112}:  "Innovid, Co., Ltd.",
+       [3]byte{224, 93, 166}:  "Detlef Fink Elektronik & Softwareentwicklung",
+       [3]byte{224, 95, 69}:   "Apple, Inc.",
+       [3]byte{224, 95, 185}:  "Cisco Systems, Inc",
+       [3]byte{224, 96, 102}:  "Sercomm Corporation",
+       [3]byte{224, 96, 137}:  "Cloudleaf, Inc.",
+       [3]byte{224, 97, 178}:  "HANGZHOU ZENOINTEL TECHNOLOGY CO., LTD",
+       [3]byte{224, 98, 144}:  "Jinan Jovision Science & Technology Co., Ltd.",
+       [3]byte{224, 99, 229}:  "Sony Mobile Communications AB",
+       [3]byte{224, 100, 187}: "DigiView S.r.l.",
+       [3]byte{224, 102, 120}: "Apple, Inc.",
+       [3]byte{224, 103, 179}: "C-Data Technology Co., Ltd",
+       [3]byte{224, 104, 109}: "Raybased AB",
+       [3]byte{224, 105, 149}: "PEGATRON CORPORATION",
+       [3]byte{224, 117, 10}:  "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{224, 117, 125}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{224, 118, 208}: "AMPAK Technology, Inc.",
+       [3]byte{224, 120, 163}: "Shanghai Winner Information Technology Co.,Inc",
+       [3]byte{224, 124, 19}:  "zte corporation",
+       [3]byte{224, 124, 98}:  "Whistle Labs, Inc.",
+       [3]byte{224, 127, 83}:  "TECHBOARD SRL",
+       [3]byte{224, 127, 136}: "EVIDENCE Network SIA",
+       [3]byte{224, 129, 119}: "GreenBytes, Inc.",
+       [3]byte{224, 132, 243}: "High Grade Controls Corporation",
+       [3]byte{224, 135, 177}: "Nata-Info Ltd.",
+       [3]byte{224, 136, 93}:  "Technicolor CH USA Inc.",
+       [3]byte{224, 137, 157}: "Cisco Systems, Inc",
+       [3]byte{224, 138, 126}: "Exponent",
+       [3]byte{224, 142, 60}:  "Aztech Electronics Pte Ltd",
+       [3]byte{224, 143, 236}: "REPOTEC CO., LTD.",
+       [3]byte{224, 145, 83}:  "XAVi Technologies Corp.",
+       [3]byte{224, 145, 245}: "NETGEAR",
+       [3]byte{224, 148, 103}: "Intel Corporate",
+       [3]byte{224, 149, 121}: "ORTHOsoft inc, d/b/a Zimmer CAS",
+       [3]byte{224, 151, 150}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{224, 151, 242}: "Atomax Inc.",
+       [3]byte{224, 152, 97}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{224, 153, 113}: "Samsung Electronics Co.,Ltd",
+       [3]byte{224, 157, 49}:  "Intel Corporate",
+       [3]byte{224, 157, 184}: "PLANEX COMMUNICATIONS INC.",
+       [3]byte{224, 157, 250}: "Wanan Hongsheng Electronic Co.Ltd",
+       [3]byte{224, 161, 152}: "NOJA Power Switchgear Pty Ltd",
+       [3]byte{224, 161, 215}: "SFR",
+       [3]byte{224, 163, 15}:  "Pevco",
+       [3]byte{224, 163, 172}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{224, 166, 112}: "Nokia Corporation",
+       [3]byte{224, 167, 0}:   "Verkada Inc",
+       [3]byte{224, 168, 184}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited",
+       [3]byte{224, 170, 150}: "Samsung Electronics Co.,Ltd",
+       [3]byte{224, 170, 176}: "GENERAL VISION ELECTRONICS CO. LTD.",
+       [3]byte{224, 170, 219}: "Nanjing PANENG Technology Development Co.,Ltd",
+       [3]byte{224, 171, 254}: "Orb Networks, Inc.",
+       [3]byte{224, 172, 203}: "Apple, Inc.",
+       [3]byte{224, 172, 241}: "Cisco Systems, Inc",
+       [3]byte{224, 174, 94}:  "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{224, 174, 178}: "Bender GmbH &amp; Co.KG",
+       [3]byte{224, 174, 237}: "LOENK",
+       [3]byte{224, 175, 75}:  "Pluribus Networks, Inc.",
+       [3]byte{224, 178, 241}: "FN-LINK TECHNOLOGY LIMITED",
+       [3]byte{224, 181, 45}:  "Apple, Inc.",
+       [3]byte{224, 182, 245}: "IEEE Registration Authority",
+       [3]byte{224, 183, 10}:  "ARRIS Group, Inc.",
+       [3]byte{224, 183, 177}: "ARRIS Group, Inc.",
+       [3]byte{224, 185, 77}:  "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
+       [3]byte{224, 185, 165}: "AzureWave Technology Inc.",
+       [3]byte{224, 185, 186}: "Apple, Inc.",
+       [3]byte{224, 185, 229}: "Technicolor",
+       [3]byte{224, 188, 67}:  "C2 Microsystems, Inc.",
+       [3]byte{224, 192, 209}: "CK Telecom (Shenzhen) Limited",
+       [3]byte{224, 194, 134}: "Aisai Communication Technology Co., Ltd.",
+       [3]byte{224, 194, 183}: "Masimo Corporation",
+       [3]byte{224, 195, 243}: "zte corporation",
+       [3]byte{224, 198, 179}: "MilDef AB",
+       [3]byte{224, 199, 103}: "Apple, Inc.",
+       [3]byte{224, 199, 157}: "Texas Instruments",
+       [3]byte{224, 200, 106}: "SHENZHEN TW-SCIE Co., Ltd",
+       [3]byte{224, 201, 34}:  "Jireh Energy Tech., Ltd.",
+       [3]byte{224, 201, 122}: "Apple, Inc.",
+       [3]byte{224, 202, 77}:  "Shenzhen Unistar Communication Co.,LTD",
+       [3]byte{224, 202, 148}: "ASKEY COMPUTER CORP",
+       [3]byte{224, 203, 29}:  "Private",
+       [3]byte{224, 203, 78}:  "ASUSTek COMPUTER INC.",
+       [3]byte{224, 203, 188}: "Cisco Meraki",
+       [3]byte{224, 203, 238}: "Samsung Electronics Co.,Ltd",
+       [3]byte{224, 205, 253}: "Beijing E3Control Technology Co, LTD",
+       [3]byte{224, 206, 195}: "ASKEY COMPUTER CORP",
+       [3]byte{224, 207, 45}:  "Gemintek Corporation",
+       [3]byte{224, 209, 10}:  "Katoudenkikougyousyo co ltd",
+       [3]byte{224, 209, 115}: "Cisco Systems, Inc",
+       [3]byte{224, 209, 230}: "Aliph dba Jawbone",
+       [3]byte{224, 211, 26}:  "EQUES Technology Co., Limited",
+       [3]byte{224, 213, 94}:  "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{224, 215, 186}: "Texas Instruments",
+       [3]byte{224, 216, 72}:  "Dell Inc.",
+       [3]byte{224, 217, 162}: "Hippih aps",
+       [3]byte{224, 217, 227}: "Eltex Enterprise Ltd.",
+       [3]byte{224, 218, 220}: "JVC KENWOOD Corporation",
+       [3]byte{224, 219, 16}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{224, 219, 85}:  "Dell Inc.",
+       [3]byte{224, 219, 136}: "Open Standard Digital-IF Interface for SATCOM Systems",
+       [3]byte{224, 220, 160}: "Siemens Industrial Automation Products Ltd Chengdu",
+       [3]byte{224, 221, 192}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{224, 229, 207}: "Texas Instruments",
+       [3]byte{224, 230, 49}:  "SNB TECHNOLOGIES LIMITED",
+       [3]byte{224, 231, 81}:  "Nintendo Co., Ltd.",
+       [3]byte{224, 231, 187}: "Nureva, Inc.",
+       [3]byte{224, 232, 232}: "Olive Telecommunication Pvt. Ltd",
+       [3]byte{224, 237, 26}:  "vastriver Technology Co., Ltd",
+       [3]byte{224, 237, 199}: "Shenzhen Friendcom Technology Development Co., Ltd",
+       [3]byte{224, 238, 27}:  "Panasonic Automotive Systems Company of America",
+       [3]byte{224, 239, 37}:  "Lintes Technology Co., Ltd.",
+       [3]byte{224, 242, 17}:  "Digitalwatt",
+       [3]byte{224, 243, 121}: "Vaddio",
+       [3]byte{224, 245, 198}: "Apple, Inc.",
+       [3]byte{224, 245, 202}: "CHENG UEI PRECISION INDUSTRY CO.,LTD.",
+       [3]byte{224, 248, 71}:  "Apple, Inc.",
+       [3]byte{224, 249, 190}: "Cloudena Corp.",
+       [3]byte{224, 250, 236}: "Platan sp. z o.o. sp. k.",
+       [3]byte{224, 255, 247}: "Softiron Inc.",
+       [3]byte{228, 2, 155}:   "Intel Corporate",
+       [3]byte{228, 4, 57}:    "TomTom Software Ltd",
+       [3]byte{228, 17, 91}:   "Hewlett Packard",
+       [3]byte{228, 18, 24}:   "ShenZhen Rapoo Technology Co., Ltd.",
+       [3]byte{228, 18, 29}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 18, 137}:  "topsystem Systemhaus GmbH",
+       [3]byte{228, 23, 216}:  "8BITDO TECHNOLOGY HK LIMITED",
+       [3]byte{228, 24, 107}:  "Zyxel Communications Corporation",
+       [3]byte{228, 26, 44}:   "ZPE Systems, Inc.",
+       [3]byte{228, 28, 75}:   "V2 TECHNOLOGY, INC.",
+       [3]byte{228, 29, 45}:   "Mellanox Technologies, Inc.",
+       [3]byte{228, 31, 19}:   "IBM Corp",
+       [3]byte{228, 34, 165}:  "PLANTRONICS, INC.",
+       [3]byte{228, 35, 84}:   "SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD",
+       [3]byte{228, 37, 231}:  "Apple, Inc.",
+       [3]byte{228, 37, 233}:  "Color-Chip",
+       [3]byte{228, 39, 113}:  "Smartlabs",
+       [3]byte{228, 42, 211}:  "Magneti Marelli S.p.A. Powertrain",
+       [3]byte{228, 43, 52}:   "Apple, Inc.",
+       [3]byte{228, 44, 86}:   "Lilee Systems, Ltd.",
+       [3]byte{228, 45, 2}:    "TCT mobile ltd",
+       [3]byte{228, 47, 38}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{228, 47, 86}:   "OptoMET GmbH",
+       [3]byte{228, 47, 246}:  "Unicore communication Inc.",
+       [3]byte{228, 50, 203}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 53, 147}:  "Hangzhou GoTo technology Co.Ltd",
+       [3]byte{228, 53, 200}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{228, 53, 251}:  "Sabre Technology (Hull) Ltd",
+       [3]byte{228, 55, 215}:  "HENRI DEPAEPE S.A.S.",
+       [3]byte{228, 56, 242}:  "Advantage Controls",
+       [3]byte{228, 58, 110}:  "Shenzhen Zeroone Technology CO.,LTD",
+       [3]byte{228, 62, 215}:  "Arcadyan Corporation",
+       [3]byte{228, 63, 162}:  "Wuxi DSP Technologies Inc.",
+       [3]byte{228, 64, 226}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 65, 230}:  "Ottec Technology GmbH",
+       [3]byte{228, 66, 166}:  "Intel Corporate",
+       [3]byte{228, 70, 189}:  "C&C TECHNIC TAIWAN CO., LTD.",
+       [3]byte{228, 70, 218}:  "Xiaomi Communications Co Ltd",
+       [3]byte{228, 71, 144}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{228, 72, 199}:  "Cisco SPVTG",
+       [3]byte{228, 76, 108}:  "Shenzhen Guo Wei Electronic Co,. Ltd.",
+       [3]byte{228, 78, 24}:   "Gardasoft VisionLimited",
+       [3]byte{228, 79, 41}:   "MA Lighting Technology GmbH",
+       [3]byte{228, 79, 95}:   "EDS Elektronik Destek San.Tic.Ltd.Sti",
+       [3]byte{228, 80, 154}:  "HW Communications Ltd",
+       [3]byte{228, 85, 234}:  "Dedicated Computing",
+       [3]byte{228, 86, 20}:   "Suttle Apparatus",
+       [3]byte{228, 87, 64}:   "ARRIS Group, Inc.",
+       [3]byte{228, 87, 168}:  "Stuart Manufacturing, Inc.",
+       [3]byte{228, 88, 184}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 88, 231}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 90, 162}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{228, 93, 81}:   "SFR",
+       [3]byte{228, 93, 82}:   "Avaya Inc",
+       [3]byte{228, 93, 117}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 98, 81}:   "HAO CHENG GROUP LIMITED",
+       [3]byte{228, 100, 73}:  "ARRIS Group, Inc.",
+       [3]byte{228, 103, 186}: "Danish Interpretation Systems A/S",
+       [3]byte{228, 104, 163}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{228, 105, 90}:  "Dictum Health, Inc.",
+       [3]byte{228, 108, 33}:  "messMa GmbH",
+       [3]byte{228, 111, 19}:  "D-Link International",
+       [3]byte{228, 112, 184}: "Intel Corporate",
+       [3]byte{228, 113, 133}: "Securifi Ltd",
+       [3]byte{228, 114, 226}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{228, 117, 30}:  "Getinge Sterilization AB",
+       [3]byte{228, 119, 35}:  "zte corporation",
+       [3]byte{228, 119, 107}: "AARTESYS AG",
+       [3]byte{228, 119, 212}: "Minrray Industry Co.,Ltd",
+       [3]byte{228, 123, 63}:  "BEIJING CO-CLOUD TECHNOLOGY LTD.",
+       [3]byte{228, 124, 249}: "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 125, 90}:  "Beijing Hanbang Technology Corp.",
+       [3]byte{228, 125, 189}: "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 125, 235}: "Shanghai Notion Information Technology CO.,LTD.",
+       [3]byte{228, 126, 102}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{228, 127, 178}: "FUJITSU LIMITED",
+       [3]byte{228, 129, 132}: "Nokia",
+       [3]byte{228, 129, 179}: "Shenzhen ACT Industrial Co.,Ltd.",
+       [3]byte{228, 131, 153}: "ARRIS Group, Inc.",
+       [3]byte{228, 133, 1}:   "Geberit International AG",
+       [3]byte{228, 138, 213}: "RF WINDOW CO., LTD.",
+       [3]byte{228, 139, 127}: "Apple, Inc.",
+       [3]byte{228, 140, 15}:  "Discovery Insure",
+       [3]byte{228, 141, 140}: "Routerboard.com",
+       [3]byte{228, 143, 52}:  "Vodafone Italia S.p.A.",
+       [3]byte{228, 144, 105}: "Rockwell Automation",
+       [3]byte{228, 144, 126}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{228, 146, 231}: "Gridlink Tech. Co.,Ltd.",
+       [3]byte{228, 146, 251}: "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 149, 110}: "IEEE Registration Authority",
+       [3]byte{228, 150, 174}: "ALTOGRAPHICS Inc.",
+       [3]byte{228, 151, 240}: "Shanghai VLC Technologies Ltd. Co.",
+       [3]byte{228, 152, 209}: "Microsoft Mobile Oy",
+       [3]byte{228, 152, 214}: "Apple, Inc.",
+       [3]byte{228, 154, 121}: "Apple, Inc.",
+       [3]byte{228, 154, 220}: "Apple, Inc.",
+       [3]byte{228, 158, 18}:  "FREEBOX SAS",
+       [3]byte{228, 161, 230}: "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{228, 163, 47}:  "Shanghai Artimen Technology Co., Ltd.",
+       [3]byte{228, 163, 135}: "Control Solutions LLC",
+       [3]byte{228, 164, 113}: "Intel Corporate",
+       [3]byte{228, 165, 239}: "TRON LINK ELECTRONICS CO., LTD.",
+       [3]byte{228, 167, 73}:  "Palo Alto Networks",
+       [3]byte{228, 167, 160}: "Intel Corporate",
+       [3]byte{228, 167, 197}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{228, 167, 253}: "Cellco Partnership",
+       [3]byte{228, 168, 182}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{228, 170, 93}:  "Cisco Systems, Inc",
+       [3]byte{228, 171, 70}:  "UAB Selteka",
+       [3]byte{228, 173, 125}: "SCL Elements",
+       [3]byte{228, 175, 161}: "HES-SO",
+       [3]byte{228, 176, 5}:   "Beijing IQIYI Science & Technology Co., Ltd.",
+       [3]byte{228, 176, 33}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 179, 24}:  "Intel Corporate",
+       [3]byte{228, 186, 217}: "360 Fly Inc.",
+       [3]byte{228, 189, 75}:  "zte corporation",
+       [3]byte{228, 190, 237}: "Netcore Technology Inc.",
+       [3]byte{228, 193, 70}:  "Objetivos y Servicios de Valor A",
+       [3]byte{228, 193, 241}: "SHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd",
+       [3]byte{228, 194, 209}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{228, 198, 43}:  "Airware",
+       [3]byte{228, 198, 61}:  "Apple, Inc.",
+       [3]byte{228, 198, 230}: "Mophie, LLC",
+       [3]byte{228, 199, 34}:  "Cisco Systems, Inc",
+       [3]byte{228, 200, 1}:   "BLU Products Inc",
+       [3]byte{228, 200, 6}:   "Ceiec Electric Technology Inc.",
+       [3]byte{228, 206, 2}:   "WyreStorm Technologies Ltd",
+       [3]byte{228, 206, 112}: "Health & Life co., Ltd.",
+       [3]byte{228, 206, 143}: "Apple, Inc.",
+       [3]byte{228, 211, 50}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{228, 211, 241}: "Cisco Systems, Inc",
+       [3]byte{228, 213, 61}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{228, 215, 29}:  "Oraya Therapeutics",
+       [3]byte{228, 221, 121}: "En-Vision America, Inc.",
+       [3]byte{228, 224, 197}: "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 228, 9}:   "LEIFHEIT AG",
+       [3]byte{228, 228, 171}: "Apple, Inc.",
+       [3]byte{228, 236, 16}:  "Nokia Corporation",
+       [3]byte{228, 238, 253}: "MR&D Manufacturing",
+       [3]byte{228, 240, 4}:   "Dell Inc.",
+       [3]byte{228, 240, 66}:  "Google, Inc.",
+       [3]byte{228, 243, 101}: "Time-O-Matic, Inc.",
+       [3]byte{228, 243, 227}: "Shanghai iComhome Co.,Ltd.",
+       [3]byte{228, 243, 245}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{228, 244, 198}: "NETGEAR",
+       [3]byte{228, 247, 161}: "Datafox GmbH",
+       [3]byte{228, 248, 156}: "Intel Corporate",
+       [3]byte{228, 248, 239}: "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 249, 57}:  "Minxon Hotel Technology INC.",
+       [3]byte{228, 250, 29}:  "PAD Peripheral Advanced Design Inc.",
+       [3]byte{228, 250, 237}: "Samsung Electronics Co.,Ltd",
+       [3]byte{228, 250, 253}: "Intel Corporate",
+       [3]byte{228, 251, 93}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{228, 251, 143}: "MOBIWIRE MOBILES (NINGBO) CO.,LTD",
+       [3]byte{228, 254, 217}: "EDMI Europe Ltd",
+       [3]byte{228, 255, 221}: "ELECTRON INDIA",
+       [3]byte{232, 0, 54}:    "Befs co,. ltd",
+       [3]byte{232, 3, 154}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{232, 4, 11}:    "Apple, Inc.",
+       [3]byte{232, 4, 16}:    "Private",
+       [3]byte{232, 4, 98}:    "Cisco Systems, Inc",
+       [3]byte{232, 4, 243}:   "Throughtek Co., Ltd.",
+       [3]byte{232, 5, 109}:   "Nortel Networks",
+       [3]byte{232, 6, 136}:   "Apple, Inc.",
+       [3]byte{232, 7, 52}:    "Champion Optical Network Engineering, LLC",
+       [3]byte{232, 7, 191}:   "SHENZHEN BOOMTECH INDUSTRY CO.,LTD",
+       [3]byte{232, 8, 139}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{232, 9, 69}:    "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{232, 9, 89}:    "Guoguang Electric Co.,Ltd",
+       [3]byte{232, 11, 19}:   "Akib Systems Taiwan, INC",
+       [3]byte{232, 12, 56}:   "DAEYOUNG INFORMATION SYSTEM CO., LTD",
+       [3]byte{232, 12, 117}:  "Syncbak, Inc.",
+       [3]byte{232, 16, 46}:   "Really Simple Software, Inc",
+       [3]byte{232, 17, 50}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{232, 17, 202}:  "SHANDONG KAER ELECTRIC.CO.,LTD",
+       [3]byte{232, 19, 36}:   "GuangZhou Bonsoninfo System CO.,LTD",
+       [3]byte{232, 19, 99}:   "Comstock RD, Inc.",
+       [3]byte{232, 19, 103}:  "AIRSOUND Inc.",
+       [3]byte{232, 21, 14}:   "Nokia Corporation",
+       [3]byte{232, 22, 43}:   "IDEO Security Co., Ltd.",
+       [3]byte{232, 23, 252}:  "Fujitsu Cloud Technologies Limited",
+       [3]byte{232, 24, 99}:   "IEEE Registration Authority",
+       [3]byte{232, 29, 168}:  "Ruckus Wireless",
+       [3]byte{232, 32, 226}:  "HUMAX Co., Ltd.",
+       [3]byte{232, 40, 119}:  "TMY Co., Ltd.",
+       [3]byte{232, 40, 213}:  "Cots Technology",
+       [3]byte{232, 42, 68}:   "Liteon Technology Corporation",
+       [3]byte{232, 42, 234}:  "Intel Corporate",
+       [3]byte{232, 46, 36}:   "Out of the Fog Research LLC",
+       [3]byte{232, 51, 129}:  "ARRIS Group, Inc.",
+       [3]byte{232, 52, 62}:   "Beijing Infosec Technologies Co., LTD.",
+       [3]byte{232, 54, 29}:   "Sense Labs, Inc.",
+       [3]byte{232, 55, 122}:  "Zyxel Communications Corporation",
+       [3]byte{232, 57, 53}:   "Hewlett Packard",
+       [3]byte{232, 57, 223}:  "ASKEY COMPUTER CORP",
+       [3]byte{232, 58, 18}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{232, 58, 151}:  "Toshiba Corporation",
+       [3]byte{232, 62, 182}:  "RIM",
+       [3]byte{232, 62, 251}:  "GEODESIC LTD.",
+       [3]byte{232, 62, 252}:  "ARRIS Group, Inc.",
+       [3]byte{232, 64, 64}:   "Cisco Systems, Inc",
+       [3]byte{232, 64, 242}:  "PEGATRON CORPORATION",
+       [3]byte{232, 67, 182}:  "QNAP Systems, Inc.",
+       [3]byte{232, 68, 126}:  "Bitdefender SRL",
+       [3]byte{232, 72, 31}:   "Advanced Automotive Antennas",
+       [3]byte{232, 77, 208}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{232, 78, 6}:    "EDUP INTERNATIONAL (HK) CO., LTD",
+       [3]byte{232, 78, 132}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{232, 78, 206}:  "Nintendo Co., Ltd.",
+       [3]byte{232, 80, 139}:  "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{232, 81, 110}:  "TSMART Inc.",
+       [3]byte{232, 81, 157}:  "Yeonhab Precision Co.,LTD",
+       [3]byte{232, 84, 132}:  "NEO Information Systems Co., Ltd.",
+       [3]byte{232, 85, 180}:  "SAI Technology Inc.",
+       [3]byte{232, 86, 89}:   "Advanced-Connectek Inc.",
+       [3]byte{232, 86, 214}:  "NCTech Ltd",
+       [3]byte{232, 90, 167}:  "LLC Emzior",
+       [3]byte{232, 91, 91}:   "LG ELECTRONICS INC",
+       [3]byte{232, 91, 240}:  "Imaging Diagnostics",
+       [3]byte{232, 93, 107}:  "Luminate Wireless",
+       [3]byte{232, 94, 83}:   "Infratec Datentechnik GmbH",
+       [3]byte{232, 97, 31}:   "Dawning Information Industry Co.,Ltd",
+       [3]byte{232, 97, 126}:  "Liteon Technology Corporation",
+       [3]byte{232, 97, 131}:  "Black Diamond Advanced Technology, LLC",
+       [3]byte{232, 97, 190}:  "Melec Inc.",
+       [3]byte{232, 101, 73}:  "Cisco Systems, Inc",
+       [3]byte{232, 101, 212}: "Tenda Technology Co.,Ltd.Dongguan branch",
+       [3]byte{232, 102, 196}: "Diamanti",
+       [3]byte{232, 104, 25}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{232, 108, 218}: "Supercomputers and Neurocomputers Research Center",
+       [3]byte{232, 109, 82}:  "ARRIS Group, Inc.",
+       [3]byte{232, 109, 84}:  "Digit Mobile Inc",
+       [3]byte{232, 109, 101}: "AUDIO MOBIL Elektronik GmbH",
+       [3]byte{232, 109, 110}: "voestalpine SIGNALING Fareham Ltd.",
+       [3]byte{232, 111, 242}: "Actiontec Electronics, Inc",
+       [3]byte{232, 113, 141}: "Elsys Equipamentos Eletronicos Ltda",
+       [3]byte{232, 116, 230}: "ADB Broadband Italia",
+       [3]byte{232, 117, 127}: "FIRS Technologies(Shenzhen) Co., Ltd",
+       [3]byte{232, 120, 161}: "BEOVIEW INTERCOM DOO",
+       [3]byte{232, 122, 243}: "S5 Tech S.r.l.",
+       [3]byte{232, 128, 46}:  "Apple, Inc.",
+       [3]byte{232, 128, 216}: "GNTEK Electronics Co.,Ltd.",
+       [3]byte{232, 130, 91}:  "ARRIS Group, Inc.",
+       [3]byte{232, 135, 163}: "Loxley Public Company Limited",
+       [3]byte{232, 136, 108}: "Shenzhen SC Technologies Co.,LTD",
+       [3]byte{232, 137, 44}:  "ARRIS Group, Inc.",
+       [3]byte{232, 141, 40}:  "Apple, Inc.",
+       [3]byte{232, 141, 245}: "ZNYX Networks, Inc.",
+       [3]byte{232, 142, 96}:  "NSD Corporation",
+       [3]byte{232, 145, 32}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{232, 146, 24}:  "Arcontia International AB",
+       [3]byte{232, 146, 164}: "LG Electronics (Mobile Communications)",
+       [3]byte{232, 147, 9}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{232, 148, 76}:  "Cogent Healthcare Systems Ltd",
+       [3]byte{232, 148, 246}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{232, 150, 6}:   "testo Instruments (Shenzhen) Co., Ltd.",
+       [3]byte{232, 153, 90}:  "PiiGAB, Processinformation i Goteborg AB",
+       [3]byte{232, 153, 196}: "HTC Corporation",
+       [3]byte{232, 154, 143}: "QUANTA COMPUTER INC.",
+       [3]byte{232, 154, 255}: "Fujian Landi Commercial Equipment Co.,Ltd",
+       [3]byte{232, 157, 135}: "Toshiba",
+       [3]byte{232, 158, 12}:  "Private",
+       [3]byte{232, 158, 180}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{232, 159, 236}: "CHENGDU KT ELECTRONIC HI-TECH CO.,LTD",
+       [3]byte{232, 163, 100}: "Signal Path International / Peachtree Audio",
+       [3]byte{232, 164, 193}: "Deep Sea Electronics PLC",
+       [3]byte{232, 167, 242}: "sTraffic",
+       [3]byte{232, 171, 250}: "Shenzhen Reecam Tech.Ltd.",
+       [3]byte{232, 177, 252}: "Intel Corporate",
+       [3]byte{232, 178, 172}: "Apple, Inc.",
+       [3]byte{232, 180, 174}: "Shenzhen C&D Electronics Co.,Ltd",
+       [3]byte{232, 180, 200}: "Samsung Electronics Co.,Ltd",
+       [3]byte{232, 182, 194}: "Juniper Networks",
+       [3]byte{232, 183, 72}:  "Cisco Systems, Inc",
+       [3]byte{232, 186, 112}: "Cisco Systems, Inc",
+       [3]byte{232, 187, 61}:  "Sino Prime-Tech Limited",
+       [3]byte{232, 187, 168}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{232, 189, 209}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{232, 190, 129}: "Sagemcom Broadband SAS",
+       [3]byte{232, 193, 215}: "Philips",
+       [3]byte{232, 194, 41}:  "H-Displays (MSC) Bhd",
+       [3]byte{232, 195, 32}:  "Austco Communication Systems Pty Ltd",
+       [3]byte{232, 199, 79}:  "Liteon Technology Corporation",
+       [3]byte{232, 203, 161}: "Nokia Corporation",
+       [3]byte{232, 204, 24}:  "D-Link International",
+       [3]byte{232, 204, 50}:  "Micronet  LTD",
+       [3]byte{232, 205, 45}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{232, 206, 6}:   "SkyHawke Technologies, LLC.",
+       [3]byte{232, 208, 250}: "MKS Instruments Deutschland GmbH",
+       [3]byte{232, 209, 27}:  "ASKEY COMPUTER CORP",
+       [3]byte{232, 212, 131}: "ULTIMATE Europe Transportation Equipment GmbH",
+       [3]byte{232, 212, 224}: "Beijing BenyWave Technology Co., Ltd.",
+       [3]byte{232, 216, 25}:  "AzureWave Technology Inc.",
+       [3]byte{232, 218, 150}: "Zhuhai Tianrui Electrical Power Tech. Co., Ltd.",
+       [3]byte{232, 218, 170}: "VideoHome Technology Corp.",
+       [3]byte{232, 222, 39}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{232, 222, 142}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+       [3]byte{232, 222, 214}: "Intrising Networks, Inc.",
+       [3]byte{232, 223, 112}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+       [3]byte{232, 223, 242}: "PRF Co., Ltd.",
+       [3]byte{232, 224, 143}: "GRAVOTECH MARKING SAS",
+       [3]byte{232, 224, 183}: "Toshiba",
+       [3]byte{232, 225, 225}: "Gemtek Technology Co., Ltd.",
+       [3]byte{232, 225, 226}: "Energotest",
+       [3]byte{232, 229, 214}: "Samsung Electronics Co.,Ltd",
+       [3]byte{232, 231, 50}:  "Alcatel-Lucent Enterprise",
+       [3]byte{232, 231, 112}: "Warp9 Tech Design, Inc.",
+       [3]byte{232, 231, 118}: "Shenzhen Kootion Technology Co., Ltd",
+       [3]byte{232, 232, 117}: "iS5 Communications Inc.",
+       [3]byte{232, 234, 106}: "StarTech.com",
+       [3]byte{232, 234, 218}: "Denkovi Assembly Electronics LTD",
+       [3]byte{232, 235, 17}:  "Texas Instruments",
+       [3]byte{232, 237, 5}:   "ARRIS Group, Inc.",
+       [3]byte{232, 237, 243}: "Cisco Systems, Inc",
+       [3]byte{232, 239, 137}: "OPMEX Tech.",
+       [3]byte{232, 241, 176}: "Sagemcom Broadband SAS",
+       [3]byte{232, 242, 38}:  "MILLSON CUSTOM SOLUTIONS INC.",
+       [3]byte{232, 242, 226}: "LG Innotek",
+       [3]byte{232, 242, 227}: "Starcor Beijing Co.,Limited",
+       [3]byte{232, 247, 36}:  "Hewlett Packard Enterprise",
+       [3]byte{232, 249, 40}:  "RFTECH SRL",
+       [3]byte{232, 252, 96}:  "ELCOM Innovations Private Limited",
+       [3]byte{232, 252, 175}: "NETGEAR",
+       [3]byte{232, 253, 114}: "SHANGHAI LINGUO TECHNOLOGY CO., LTD.",
+       [3]byte{232, 253, 144}: "Turbostor",
+       [3]byte{232, 253, 232}: "CeLa Link Corporation",
+       [3]byte{236, 1, 51}:    "TRINUS SYSTEMS INC.",
+       [3]byte{236, 1, 226}:   "FOXCONN INTERCONNECT TECHNOLOGY",
+       [3]byte{236, 1, 238}:   "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{236, 4, 65}:    "ShenZhen TIGO Semiconductor Co., Ltd.",
+       [3]byte{236, 8, 107}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{236, 13, 154}:  "Mellanox Technologies, Inc.",
+       [3]byte{236, 14, 196}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{236, 14, 214}:  "ITECH INSTRUMENTS SAS",
+       [3]byte{236, 16, 123}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{236, 17, 32}:   "FloDesign Wind Turbine Corporation",
+       [3]byte{236, 17, 39}:   "Texas Instruments",
+       [3]byte{236, 19, 178}:  "Netonix",
+       [3]byte{236, 19, 219}:  "Juniper Networks",
+       [3]byte{236, 20, 246}:  "BioControl AS",
+       [3]byte{236, 23, 47}:   "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{236, 23, 102}:  "Research Centre Module",
+       [3]byte{236, 26, 89}:   "Belkin International Inc.",
+       [3]byte{236, 29, 127}:  "zte corporation",
+       [3]byte{236, 29, 139}:  "Cisco Systems, Inc",
+       [3]byte{236, 31, 114}:  "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{236, 33, 159}:  "VidaBox LLC",
+       [3]byte{236, 33, 229}:  "Toshiba",
+       [3]byte{236, 34, 87}:   "JiangSu NanJing University Electronic Information Technology Co.,Ltd",
+       [3]byte{236, 34, 128}:  "D-Link International",
+       [3]byte{236, 35, 61}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{236, 35, 104}:  "IntelliVoice Co.,Ltd.",
+       [3]byte{236, 35, 123}:  "zte corporation",
+       [3]byte{236, 36, 184}:  "Texas Instruments",
+       [3]byte{236, 38, 202}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{236, 38, 251}:  "TECC CO.,LTD.",
+       [3]byte{236, 42, 240}:  "Ypsomed AG",
+       [3]byte{236, 44, 73}:   "University of Tokyo",
+       [3]byte{236, 46, 78}:   "HITACHI-LG DATA STORAGE INC",
+       [3]byte{236, 48, 145}:  "Cisco Systems, Inc",
+       [3]byte{236, 53, 134}:  "Apple, Inc.",
+       [3]byte{236, 54, 63}:   "Markov Corporation",
+       [3]byte{236, 56, 143}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{236, 59, 240}:  "NovelSat",
+       [3]byte{236, 60, 90}:   "SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD",
+       [3]byte{236, 60, 136}:  "MCNEX Co.,Ltd.",
+       [3]byte{236, 61, 253}:  "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
+       [3]byte{236, 62, 9}:    "PERFORMANCE DESIGNED PRODUCTS, LLC",
+       [3]byte{236, 62, 247}:  "Juniper Networks",
+       [3]byte{236, 63, 5}:    "Institute 706, The Second Academy China Aerospace Science & Industry Corp",
+       [3]byte{236, 66, 180}:  "ADC Corporation",
+       [3]byte{236, 66, 240}:  "ADL Embedded Solutions, Inc.",
+       [3]byte{236, 67, 139}:  "YAPTV",
+       [3]byte{236, 67, 230}:  "AWCER Ltd.",
+       [3]byte{236, 67, 246}:  "Zyxel Communications Corporation",
+       [3]byte{236, 68, 118}:  "Cisco Systems, Inc",
+       [3]byte{236, 70, 68}:   "TTK SAS",
+       [3]byte{236, 70, 112}:  "Meinberg Funkuhren GmbH & Co. KG",
+       [3]byte{236, 71, 60}:   "Redwire, LLC",
+       [3]byte{236, 73, 147}:  "Qihan Technology Co., Ltd",
+       [3]byte{236, 76, 77}:   "ZAO NPK RoTeK",
+       [3]byte{236, 77, 71}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{236, 79, 130}:  "Calix Inc.",
+       [3]byte{236, 81, 188}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{236, 82, 220}:  "WORLD MEDIA AND TECHNOLOGY Corp.",
+       [3]byte{236, 84, 46}:   "Shanghai XiMei Electronic Technology Co. Ltd",
+       [3]byte{236, 85, 249}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{236, 89, 231}:  "Microsoft Corporation",
+       [3]byte{236, 90, 134}:  "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+       [3]byte{236, 92, 105}:  "MITSUBISHI HEAVY INDUSTRIES MECHATRONICS SYSTEMS,LTD.",
+       [3]byte{236, 95, 35}:   "Qinghai Kimascend Electronics Technology Co. Ltd.",
+       [3]byte{236, 96, 224}:  "AVI-ON LABS",
+       [3]byte{236, 98, 100}:  "Global411 Internet Services, LLC",
+       [3]byte{236, 99, 229}:  "ePBoard Design LLC",
+       [3]byte{236, 100, 231}: "MOCACARE Corporation",
+       [3]byte{236, 102, 209}: "B&W Group LTD",
+       [3]byte{236, 104, 129}: "Palo Alto Networks",
+       [3]byte{236, 108, 159}: "Chengdu Volans Technology CO.,LTD",
+       [3]byte{236, 112, 151}: "ARRIS Group, Inc.",
+       [3]byte{236, 113, 219}: "Shenzhen Baichuan Digital Technology Co., Ltd.",
+       [3]byte{236, 116, 186}: "Hirschmann Automation and Control GmbH",
+       [3]byte{236, 124, 116}: "Justone Technologies Co., Ltd.",
+       [3]byte{236, 125, 17}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{236, 125, 157}: "MEI",
+       [3]byte{236, 128, 9}:   "NovaSparks",
+       [3]byte{236, 129, 147}: "Logitech, Inc",
+       [3]byte{236, 131, 80}:  "Microsoft Corporation",
+       [3]byte{236, 131, 108}: "RM Tech Co., Ltd.",
+       [3]byte{236, 133, 47}:  "Apple, Inc.",
+       [3]byte{236, 136, 143}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{236, 136, 146}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{236, 137, 245}: "Lenovo Mobile Communication Technology Ltd.",
+       [3]byte{236, 138, 76}:  "zte corporation",
+       [3]byte{236, 138, 199}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{236, 140, 162}: "Ruckus Wireless",
+       [3]byte{236, 142, 173}: "DLX",
+       [3]byte{236, 142, 174}: "Nagravision SA",
+       [3]byte{236, 142, 181}: "Hewlett Packard",
+       [3]byte{236, 146, 51}:  "Eddyfi NDT Inc",
+       [3]byte{236, 147, 39}:  "MEMMERT GmbH + Co. KG",
+       [3]byte{236, 147, 237}: "DDoS-Guard LTD",
+       [3]byte{236, 150, 129}: "2276427 Ontario Inc",
+       [3]byte{236, 152, 108}: "Lufft Mess- und Regeltechnik GmbH",
+       [3]byte{236, 152, 193}: "Beijing Risbo Network Technology Co.,Ltd",
+       [3]byte{236, 154, 116}: "Hewlett Packard",
+       [3]byte{236, 155, 91}:  "Nokia Corporation",
+       [3]byte{236, 155, 243}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{236, 158, 205}: "Artesyn Embedded Technologies",
+       [3]byte{236, 159, 13}:  "IEEE Registration Authority",
+       [3]byte{236, 162, 155}: "Kemppi Oy",
+       [3]byte{236, 168, 107}: "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{236, 169, 250}: "GUANGDONG GENIUS TECHNOLOGY CO.,LTD.",
+       [3]byte{236, 170, 160}: "PEGATRON CORPORATION",
+       [3]byte{236, 173, 184}: "Apple, Inc.",
+       [3]byte{236, 176, 225}: "Ciena Corporation",
+       [3]byte{236, 177, 6}:   "Acuro Networks, Inc",
+       [3]byte{236, 177, 215}: "Hewlett Packard",
+       [3]byte{236, 181, 65}:  "SHINANO E and E Co.Ltd.",
+       [3]byte{236, 181, 250}: "Philips Lighting BV",
+       [3]byte{236, 184, 112}: "Beijing Heweinet Technology Co.,Ltd.",
+       [3]byte{236, 185, 7}:   "CloudGenix Inc",
+       [3]byte{236, 186, 254}: "GIROPTIC",
+       [3]byte{236, 187, 174}: "Digivoice Tecnologia em Eletronica Ltda",
+       [3]byte{236, 189, 9}:   "FUSION Electronics Ltd",
+       [3]byte{236, 189, 29}:  "Cisco Systems, Inc",
+       [3]byte{236, 192, 106}: "PowerChord Group Limited",
+       [3]byte{236, 195, 138}: "Accuenergy (CANADA) Inc",
+       [3]byte{236, 200, 130}: "Cisco Systems, Inc",
+       [3]byte{236, 203, 48}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{236, 205, 109}: "Allied Telesis, Inc.",
+       [3]byte{236, 208, 14}:  "MiraeRecognition Co., Ltd.",
+       [3]byte{236, 208, 64}:  "GEA Farm Technologies GmbH",
+       [3]byte{236, 208, 159}: "Xiaomi Communications Co Ltd",
+       [3]byte{236, 209, 154}: "Zhuhai Liming Industries Co., Ltd",
+       [3]byte{236, 214, 138}: "Shenzhen JMicron Intelligent Technology Developmen",
+       [3]byte{236, 217, 37}:  "RAMI",
+       [3]byte{236, 217, 80}:  "IRT SA",
+       [3]byte{236, 217, 209}: "Shenzhen TG-NET Botone Technology Co.,Ltd.",
+       [3]byte{236, 222, 61}:  "Lamprey Networks, Inc.",
+       [3]byte{236, 223, 58}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{236, 224, 155}: "Samsung Electronics Co.,Ltd",
+       [3]byte{236, 225, 84}:  "Beijing Unisound Information Technology Co.,Ltd.",
+       [3]byte{236, 225, 169}: "Cisco Systems, Inc",
+       [3]byte{236, 226, 253}: "SKG Electric Group(Thailand) Co., Ltd.",
+       [3]byte{236, 229, 18}:  "tado GmbH",
+       [3]byte{236, 229, 85}:  "Hirschmann Automation",
+       [3]byte{236, 231, 68}:  "Omntec mfg. inc",
+       [3]byte{236, 233, 11}:  "SISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH",
+       [3]byte{236, 233, 21}:  "STI Ltd",
+       [3]byte{236, 233, 248}: "Guang Zhou TRI-SUN Electronics Technology  Co., Ltd",
+       [3]byte{236, 234, 3}:   "DARFON LIGHTING CORP",
+       [3]byte{236, 235, 184}: "Hewlett Packard Enterprise",
+       [3]byte{236, 238, 216}: "ZTLX Network Technology Co.,Ltd",
+       [3]byte{236, 240, 14}:  "AboCom",
+       [3]byte{236, 242, 54}:  "NEOMONTANA ELECTRONICS",
+       [3]byte{236, 243, 66}:  "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{236, 243, 91}:  "Nokia Corporation",
+       [3]byte{236, 244, 81}:  "Arcadyan Corporation",
+       [3]byte{236, 244, 187}: "Dell Inc.",
+       [3]byte{236, 247, 43}:  "HD DIGITAL TECH CO., LTD.",
+       [3]byte{236, 248, 235}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{236, 250, 3}:   "FCA",
+       [3]byte{236, 250, 170}: "The IMS Company",
+       [3]byte{236, 250, 188}: "Espressif Inc.",
+       [3]byte{236, 250, 244}: "SenRa Tech Pvt. Ltd",
+       [3]byte{236, 252, 85}:  "A. Eberle GmbH & Co. KG",
+       [3]byte{236, 254, 126}: "BlueRadios, Inc.",
+       [3]byte{240, 0, 127}:   "Janz - Contadores de Energia, SA",
+       [3]byte{240, 2, 43}:    "Chrontel",
+       [3]byte{240, 2, 72}:    "SmarteBuilding",
+       [3]byte{240, 3, 140}:   "AzureWave Technology Inc.",
+       [3]byte{240, 7, 134}:   "Shandong Bittel Electronics Co., Ltd",
+       [3]byte{240, 8, 241}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{240, 13, 92}:   "JinQianMao  Technology Co.,Ltd.",
+       [3]byte{240, 19, 195}:  "SHENZHEN FENDA TECHNOLOGY CO., LTD",
+       [3]byte{240, 21, 160}:  "KyungDong One Co., Ltd.",
+       [3]byte{240, 21, 185}:  "PlayFusion Limited",
+       [3]byte{240, 24, 43}:   "LG Chem",
+       [3]byte{240, 27, 108}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{240, 28, 19}:   "LG Electronics (Mobile Communications)",
+       [3]byte{240, 28, 45}:   "Juniper Networks",
+       [3]byte{240, 29, 188}:  "Microsoft Corporation",
+       [3]byte{240, 30, 52}:   "ORICO Technologies Co., Ltd",
+       [3]byte{240, 31, 175}:  "Dell Inc.",
+       [3]byte{240, 33, 157}:  "Cal-Comp Electronics & Communications Company Ltd.",
+       [3]byte{240, 34, 78}:   "Esan electronic co.",
+       [3]byte{240, 35, 41}:   "SHOWA DENKI CO.,LTD.",
+       [3]byte{240, 35, 185}:  "IEEE Registration Authority",
+       [3]byte{240, 36, 5}:    "OPUS High Technology Corporation",
+       [3]byte{240, 36, 8}:    "Talaris (Sweden) AB",
+       [3]byte{240, 36, 117}:  "Apple, Inc.",
+       [3]byte{240, 37, 114}:  "Cisco Systems, Inc",
+       [3]byte{240, 37, 183}:  "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{240, 38, 36}:   "WAFA TECHNOLOGIES CO., LTD.",
+       [3]byte{240, 38, 76}:   "Dr. Sigrist AG",
+       [3]byte{240, 39, 45}:   "Amazon Technologies Inc.",
+       [3]byte{240, 39, 69}:   "F-Secure Corporation",
+       [3]byte{240, 39, 101}:  "Murata Manufacturing Co., Ltd.",
+       [3]byte{240, 41, 41}:   "Cisco Systems, Inc",
+       [3]byte{240, 42, 35}:   "Creative Next Design",
+       [3]byte{240, 42, 97}:   "Waldo Networks, Inc.",
+       [3]byte{240, 47, 167}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{240, 47, 216}:  "Bi2-Vision",
+       [3]byte{240, 50, 26}:   "Mita-Teknik A/S",
+       [3]byte{240, 52, 4}:    "TCT mobile ltd",
+       [3]byte{240, 55, 161}:  "Huike Electronics (SHENZHEN) CO., LTD.",
+       [3]byte{240, 58, 75}:   "Bloombase, Inc.",
+       [3]byte{240, 58, 85}:   "Omega Elektronik AS",
+       [3]byte{240, 61, 3}:    "TECNO MOBILE LIMITED",
+       [3]byte{240, 61, 41}:   "Actility",
+       [3]byte{240, 62, 144}:  "Ruckus Wireless",
+       [3]byte{240, 62, 191}:  "GOGORO TAIWAN LIMITED",
+       [3]byte{240, 63, 248}:  "R L Drake",
+       [3]byte{240, 64, 123}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{240, 66, 28}:   "Intel Corporate",
+       [3]byte{240, 67, 53}:   "DVN(Shanghai)Ltd.",
+       [3]byte{240, 67, 71}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{240, 69, 218}:  "Texas Instruments",
+       [3]byte{240, 74, 43}:   "PYRAMID Computer GmbH",
+       [3]byte{240, 75, 106}:  "Scientific Production Association Siberian Arsenal, Ltd.",
+       [3]byte{240, 75, 242}:  "JTECH Communications, Inc.",
+       [3]byte{240, 77, 162}:  "Dell Inc.",
+       [3]byte{240, 79, 124}:  "Private",
+       [3]byte{240, 88, 73}:   "CareView Communications",
+       [3]byte{240, 90, 9}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{240, 91, 123}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{240, 92, 25}:   "Aruba Networks",
+       [3]byte{240, 93, 137}:  "Dycon Limited",
+       [3]byte{240, 93, 200}:  "Duracell Powermat",
+       [3]byte{240, 95, 90}:   "Getriebebau NORD GmbH and Co. KG",
+       [3]byte{240, 97, 48}:   "Advantage Pharmacy Services, LLC",
+       [3]byte{240, 98, 13}:   "Shenzhen Egreat Tech Corp.,Ltd",
+       [3]byte{240, 98, 129}:  "ProCurve Networking by HP",
+       [3]byte{240, 101, 194}: "Yanfeng Visteon Electronics Technology (Shanghai) Co.,Ltd.",
+       [3]byte{240, 101, 221}: "Primax Electronics Ltd.",
+       [3]byte{240, 104, 83}:  "Integrated Corporation",
+       [3]byte{240, 107, 202}: "Samsung Electronics Co.,Ltd",
+       [3]byte{240, 109, 120}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{240, 110, 11}:  "Microsoft Corporation",
+       [3]byte{240, 110, 50}:  "MICROTEL INNOVATION S.R.L.",
+       [3]byte{240, 114, 140}: "Samsung Electronics Co.,Ltd",
+       [3]byte{240, 115, 174}: "PEAK-System Technik",
+       [3]byte{240, 116, 133}: "NGD Systems, Inc.",
+       [3]byte{240, 116, 228}: "Thundercomm Technology Co., Ltd",
+       [3]byte{240, 118, 28}:  "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{240, 119, 101}: "Sourcefire, Inc",
+       [3]byte{240, 119, 208}: "Xcellen",
+       [3]byte{240, 120, 22}:  "Cisco Systems, Inc",
+       [3]byte{240, 121, 89}:  "ASUSTek COMPUTER INC.",
+       [3]byte{240, 121, 96}:  "Apple, Inc.",
+       [3]byte{240, 121, 232}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+       [3]byte{240, 123, 203}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{240, 125, 104}: "D-Link Corporation",
+       [3]byte{240, 127, 6}:   "Cisco Systems, Inc",
+       [3]byte{240, 127, 12}:  "Leopold Kostal GmbH &Co. KG",
+       [3]byte{240, 129, 175}: "IRZ AUTOMATION TECHNOLOGIES LTD",
+       [3]byte{240, 130, 97}:  "Sagemcom Broadband SAS",
+       [3]byte{240, 132, 47}:  "ADB Broadband Italia",
+       [3]byte{240, 132, 201}: "zte corporation",
+       [3]byte{240, 133, 193}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+       [3]byte{240, 138, 40}:  "JIANGSU HENGSION ELECTRONIC S and T CO.,LTD",
+       [3]byte{240, 139, 254}: "COSTEL.,CO.LTD",
+       [3]byte{240, 140, 251}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{240, 142, 219}: "VeloCloud Networks",
+       [3]byte{240, 146, 28}:  "Hewlett Packard",
+       [3]byte{240, 146, 180}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+       [3]byte{240, 147, 58}:  "NxtConect",
+       [3]byte{240, 147, 197}: "Garland Technology",
+       [3]byte{240, 151, 229}: "TAMIO, INC",
+       [3]byte{240, 152, 56}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{240, 152, 157}: "Apple, Inc.",
+       [3]byte{240, 153, 191}: "Apple, Inc.",
+       [3]byte{240, 154, 81}:  "Shanghai Viroyal Electronic Technology Company Limited",
+       [3]byte{240, 156, 187}: "RaonThink Inc.",
+       [3]byte{240, 156, 233}: "Aerohive Networks Inc.",
+       [3]byte{240, 158, 99}:  "Cisco Systems, Inc",
+       [3]byte{240, 159, 194}: "Ubiquiti Networks Inc.",
+       [3]byte{240, 162, 37}:  "Private",
+       [3]byte{240, 167, 100}: "GST Co., Ltd.",
+       [3]byte{240, 171, 84}:  "MITSUMI ELECTRIC CO.,LTD.",
+       [3]byte{240, 172, 164}: "HBC-radiomatic",
+       [3]byte{240, 172, 215}: "IEEE Registration Authority",
+       [3]byte{240, 173, 78}:  "Globalscale Technologies, Inc.",
+       [3]byte{240, 174, 81}:  "Xi3 Corp",
+       [3]byte{240, 176, 82}:  "Ruckus Wireless",
+       [3]byte{240, 176, 231}: "Apple, Inc.",
+       [3]byte{240, 178, 229}: "Cisco Systems, Inc",
+       [3]byte{240, 180, 41}:  "Xiaomi Communications Co Ltd",
+       [3]byte{240, 180, 121}: "Apple, Inc.",
+       [3]byte{240, 182, 235}: "Poslab Technology Co., Ltd.",
+       [3]byte{240, 188, 200}: "MaxID (Pty) Ltd",
+       [3]byte{240, 189, 46}:  "H+S Polatis Ltd",
+       [3]byte{240, 189, 241}: "Sipod Inc.",
+       [3]byte{240, 191, 151}: "Sony Corporation",
+       [3]byte{240, 193, 241}: "Apple, Inc.",
+       [3]byte{240, 194, 76}:  "Zhejiang FeiYue Digital Technology Co., Ltd",
+       [3]byte{240, 194, 124}: "Mianyang Netop Telecom Equipment Co.,Ltd.",
+       [3]byte{240, 199, 127}: "Texas Instruments",
+       [3]byte{240, 200, 80}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{240, 200, 140}: "LeddarTech Inc.",
+       [3]byte{240, 203, 161}: "Apple, Inc.",
+       [3]byte{240, 209, 79}:  "LINEAR LLC",
+       [3]byte{240, 209, 169}: "Apple, Inc.",
+       [3]byte{240, 209, 184}: "LEDVANCE",
+       [3]byte{240, 210, 241}: "Amazon Technologies Inc.",
+       [3]byte{240, 211, 167}: "CobaltRay Co., Ltd",
+       [3]byte{240, 211, 231}: "Sensometrix SA",
+       [3]byte{240, 212, 246}: "Lars Thrane A/S",
+       [3]byte{240, 213, 191}: "Intel Corporate",
+       [3]byte{240, 214, 87}:  "ECHOSENS",
+       [3]byte{240, 215, 103}: "Axema Passagekontroll AB",
+       [3]byte{240, 215, 170}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{240, 217, 178}: "EXO S.A.",
+       [3]byte{240, 218, 124}: "RLH INDUSTRIES,INC.",
+       [3]byte{240, 219, 48}:  "Yottabyte",
+       [3]byte{240, 219, 226}: "Apple, Inc.",
+       [3]byte{240, 219, 248}: "Apple, Inc.",
+       [3]byte{240, 220, 226}: "Apple, Inc.",
+       [3]byte{240, 222, 113}: "Shanghai EDO Technologies Co.,Ltd.",
+       [3]byte{240, 222, 185}: "ShangHai Y&Y Electronics Co., Ltd",
+       [3]byte{240, 222, 241}: "Wistron Infocomm (Zhongshan) Corporation",
+       [3]byte{240, 229, 195}: "Drägerwerk AG & Co. KG aA",
+       [3]byte{240, 231, 126}: "Samsung Electronics Co.,Ltd",
+       [3]byte{240, 235, 208}: "Shanghai Feixun Communication Co.,Ltd.",
+       [3]byte{240, 236, 57}:  "Essec",
+       [3]byte{240, 237, 30}:  "Bilkon Bilgisayar Kontrollu Cih. Im.Ltd.",
+       [3]byte{240, 238, 16}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{240, 238, 88}:  "PACE Telematics GmbH",
+       [3]byte{240, 238, 187}: "VIPAR GmbH",
+       [3]byte{240, 239, 210}: "TF PAYMENT SERVICE CO., LTD",
+       [3]byte{240, 240, 2}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{240, 242, 73}:  "Hitron Technologies. Inc",
+       [3]byte{240, 242, 96}:  "Mobitec AB",
+       [3]byte{240, 243, 54}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{240, 245, 174}: "Adaptrum Inc.",
+       [3]byte{240, 246, 28}:  "Apple, Inc.",
+       [3]byte{240, 246, 68}:  "Whitesky Science & Technology Co.,Ltd.",
+       [3]byte{240, 246, 105}: "Motion Analysis Corporation",
+       [3]byte{240, 247, 85}:  "Cisco Systems, Inc",
+       [3]byte{240, 247, 179}: "Phorm",
+       [3]byte{240, 248, 66}:  "KEEBOX, Inc.",
+       [3]byte{240, 248, 242}: "Texas Instruments",
+       [3]byte{240, 249, 247}: "IES GmbH & Co. KG",
+       [3]byte{240, 253, 160}: "Acurix Networks Pty Ltd",
+       [3]byte{240, 254, 107}: "Shanghai High-Flying Electronics Technology Co., Ltd",
+       [3]byte{244, 3, 4}:     "Google, Inc.",
+       [3]byte{244, 3, 33}:    "BeNeXt B.V.",
+       [3]byte{244, 3, 47}:    "Reduxio Systems",
+       [3]byte{244, 3, 67}:    "Hewlett Packard Enterprise",
+       [3]byte{244, 4, 76}:    "ValenceTech Limited",
+       [3]byte{244, 6, 105}:   "Intel Corporate",
+       [3]byte{244, 6, 141}:   "devolo AG",
+       [3]byte{244, 6, 165}:   "Hangzhou Bianfeng Networking Technology Co., Ltd.",
+       [3]byte{244, 9, 216}:   "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{244, 10, 74}:   "INDUSNET Communication Technology Co.,LTD",
+       [3]byte{244, 11, 147}:  "BlackBerry RTS",
+       [3]byte{244, 14, 17}:   "IEEE Registration Authority",
+       [3]byte{244, 14, 34}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{244, 14, 131}:  "ARRIS Group, Inc.",
+       [3]byte{244, 15, 27}:   "Cisco Systems, Inc",
+       [3]byte{244, 15, 36}:   "Apple, Inc.",
+       [3]byte{244, 15, 155}:  "WAVELINK",
+       [3]byte{244, 21, 53}:   "SPON Communication Technology Co.,Ltd",
+       [3]byte{244, 21, 99}:   "F5 Networks, Inc.",
+       [3]byte{244, 21, 253}:  "Shanghai Pateo Electronic Equipment Manufacturing Co., Ltd.",
+       [3]byte{244, 23, 184}:  "AirTies Wireless Networks",
+       [3]byte{244, 27, 161}:  "Apple, Inc.",
+       [3]byte{244, 30, 38}:   "Simon-Kaloi Engineering",
+       [3]byte{244, 30, 94}:   "RtBrick Inc.",
+       [3]byte{244, 31, 11}:   "YAMABISHI Corporation",
+       [3]byte{244, 31, 136}:  "zte corporation",
+       [3]byte{244, 31, 194}:  "Cisco Systems, Inc",
+       [3]byte{244, 32, 18}:   "Cuciniale GmbH",
+       [3]byte{244, 40, 51}:   "MMPC Inc.",
+       [3]byte{244, 40, 83}:   "Zioncom Electronics (Shenzhen) Ltd.",
+       [3]byte{244, 40, 150}:  "SPECTO PAINEIS ELETRONICOS LTDA",
+       [3]byte{244, 41, 129}:  "vivo Mobile Communication Co., Ltd.",
+       [3]byte{244, 43, 72}:   "Ubiqam",
+       [3]byte{244, 44, 86}:   "SENOR TECH CO LTD",
+       [3]byte{244, 48, 185}:  "Hewlett Packard",
+       [3]byte{244, 49, 195}:  "Apple, Inc.",
+       [3]byte{244, 54, 225}:  "Abilis Systems SARL",
+       [3]byte{244, 55, 183}:  "Apple, Inc.",
+       [3]byte{244, 56, 20}:   "Shanghai Howell Electronic Co.,Ltd",
+       [3]byte{244, 61, 128}:  "FAG Industrial Services GmbH",
+       [3]byte{244, 62, 97}:   "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{244, 62, 157}:  "Benu Networks, Inc.",
+       [3]byte{244, 65, 86}:   "Arrikto Inc.",
+       [3]byte{244, 66, 39}:   "S & S Research Inc.",
+       [3]byte{244, 66, 143}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{244, 68, 80}:   "BND Co., Ltd.",
+       [3]byte{244, 69, 237}:  "Portable Innovation Technology Ltd.",
+       [3]byte{244, 71, 19}:   "Leading Public Performance Co., Ltd.",
+       [3]byte{244, 71, 42}:   "Nanjing Rousing Sci. and Tech. Industrial Co., Ltd",
+       [3]byte{244, 72, 72}:   "Amscreen Group Ltd",
+       [3]byte{244, 73, 239}:  "EMSTONE",
+       [3]byte{244, 75, 42}:   "Cisco SPVTG",
+       [3]byte{244, 76, 112}:  "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
+       [3]byte{244, 76, 127}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{244, 77, 23}:   "GOLDCARD HIGH-TECH CO.,LTD.",
+       [3]byte{244, 77, 48}:   "Elitegroup Computer Systems Co.,Ltd.",
+       [3]byte{244, 78, 5}:    "Cisco Systems, Inc",
+       [3]byte{244, 78, 253}:  "Actions Semiconductor Co.,Ltd.(Cayman Islands)",
+       [3]byte{244, 80, 235}:  "Telechips Inc",
+       [3]byte{244, 82, 20}:   "Mellanox Technologies, Inc.",
+       [3]byte{244, 84, 51}:   "Rockwell Automation",
+       [3]byte{244, 85, 149}:  "HENGBAO Corporation LTD.",
+       [3]byte{244, 85, 156}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{244, 85, 224}:  "Niceway CNC Technology Co.,Ltd.Hunan Province",
+       [3]byte{244, 87, 62}:   "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{244, 88, 66}:   "Boxx TV Ltd",
+       [3]byte{244, 91, 115}:  "Wanjiaan Interconnected Technology Co., Ltd",
+       [3]byte{244, 92, 137}:  "Apple, Inc.",
+       [3]byte{244, 94, 171}:  "Texas Instruments",
+       [3]byte{244, 95, 105}:  "Matsufu Electronics distribution Company",
+       [3]byte{244, 95, 212}:  "Cisco SPVTG",
+       [3]byte{244, 95, 247}:  "DQ Technology Inc.",
+       [3]byte{244, 96, 13}:   "Panoptic Technology, Inc",
+       [3]byte{244, 98, 208}:  "Not for Radio, LLC",
+       [3]byte{244, 99, 73}:   "Diffon Corporation",
+       [3]byte{244, 100, 93}:  "Toshiba",
+       [3]byte{244, 103, 45}:  "ShenZhen Topstar Technology Company",
+       [3]byte{244, 106, 146}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+       [3]byte{244, 106, 188}: "Adonit Corp. Ltd.",
+       [3]byte{244, 107, 239}: "Sagemcom Broadband SAS",
+       [3]byte{244, 109, 4}:   "ASUSTek COMPUTER INC.",
+       [3]byte{244, 109, 226}: "zte corporation",
+       [3]byte{244, 110, 36}:  "NEC Personal Computers, Ltd.",
+       [3]byte{244, 112, 171}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{244, 115, 202}: "Conversion Sound Inc.",
+       [3]byte{244, 118, 38}:  "Viltechmeda UAB",
+       [3]byte{244, 122, 78}:  "Woojeon&Handan",
+       [3]byte{244, 122, 204}: "SolidFire, Inc.",
+       [3]byte{244, 123, 94}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{244, 127, 53}:  "Cisco Systems, Inc",
+       [3]byte{244, 129, 57}:  "CANON INC.",
+       [3]byte{244, 131, 205}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{244, 131, 225}: "Shanghai Clouder Semiconductor Co.,Ltd",
+       [3]byte{244, 133, 198}: "FDT Technologies",
+       [3]byte{244, 135, 113}: "Infoblox",
+       [3]byte{244, 139, 50}:  "Xiaomi Communications Co Ltd",
+       [3]byte{244, 140, 80}:  "Intel Corporate",
+       [3]byte{244, 142, 9}:   "Nokia Corporation",
+       [3]byte{244, 142, 56}:  "Dell Inc.",
+       [3]byte{244, 142, 146}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{244, 144, 202}: "Tensorcom",
+       [3]byte{244, 144, 234}: "Deciso B.V.",
+       [3]byte{244, 145, 30}:  "ZHUHAI EWPE INFORMATION TECHNOLOGY INC",
+       [3]byte{244, 147, 159}: "Hon Hai Precision Ind. Co., Ltd.",
+       [3]byte{244, 148, 97}:  "NexGen Storage",
+       [3]byte{244, 148, 102}: "CountMax,  ltd",
+       [3]byte{244, 150, 52}:  "Intel Corporate",
+       [3]byte{244, 150, 81}:  "NAKAYO Inc",
+       [3]byte{244, 153, 172}: "WEBER Schraubautomaten GmbH",
+       [3]byte{244, 158, 239}: "Taicang T&W Electronics",
+       [3]byte{244, 159, 84}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{244, 159, 243}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{244, 162, 148}: "EAGLE WORLD DEVELOPMENT CO., LIMITED",
+       [3]byte{244, 165, 42}:  "Hawa Technologies Inc",
+       [3]byte{244, 167, 57}:  "Juniper Networks",
+       [3]byte{244, 169, 151}: "CANON INC.",
+       [3]byte{244, 172, 193}: "Cisco Systems, Inc",
+       [3]byte{244, 177, 100}: "Lightning Telecommunications Technology Co. Ltd",
+       [3]byte{244, 179, 129}: "WindowMaster A/S",
+       [3]byte{244, 181, 32}:  "Biostar Microtech international corp.",
+       [3]byte{244, 181, 47}:  "Juniper Networks",
+       [3]byte{244, 181, 73}:  "Xiamen Yeastar Information Technology Co., Ltd.",
+       [3]byte{244, 182, 229}: "TerraSem Co.,Ltd",
+       [3]byte{244, 183, 42}:  "TIME INTERCONNECT LTD",
+       [3]byte{244, 183, 179}: "vivo Mobile Communication Co., Ltd.",
+       [3]byte{244, 183, 226}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{244, 184, 94}:  "Texas Instruments",
+       [3]byte{244, 184, 167}: "zte corporation",
+       [3]byte{244, 189, 124}: "Chengdu jinshi communication Co., LTD",
+       [3]byte{244, 196, 71}:  "Coagent International Enterprise Limited",
+       [3]byte{244, 196, 214}: "Shenzhen Xinfa Electronic Co.,ltd",
+       [3]byte{244, 198, 19}:  "Alcatel-Lucent Shanghai Bell Co., Ltd",
+       [3]byte{244, 198, 215}: "blackned GmbH",
+       [3]byte{244, 199, 20}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{244, 199, 149}: "WEY Elektronik AG",
+       [3]byte{244, 202, 36}:  "FreeBit Co., Ltd.",
+       [3]byte{244, 202, 229}: "FREEBOX SAS",
+       [3]byte{244, 203, 82}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{244, 204, 85}:  "Juniper Networks",
+       [3]byte{244, 205, 144}: "Vispiron Rotec GmbH",
+       [3]byte{244, 206, 70}:  "Hewlett Packard",
+       [3]byte{244, 207, 226}: "Cisco Systems, Inc",
+       [3]byte{244, 208, 50}:  "Yunnan Ideal Information&Technology.,Ltd",
+       [3]byte{244, 210, 97}:  "SEMOCON Co., Ltd",
+       [3]byte{244, 215, 178}: "LGS Innovations, LLC",
+       [3]byte{244, 217, 251}: "Samsung Electronics Co.,Ltd",
+       [3]byte{244, 220, 65}:  "YOUNGZONE CULTURE (SHANGHAI) CORP",
+       [3]byte{244, 220, 77}:  "Beijing CCD Digital Technology Co., Ltd",
+       [3]byte{244, 220, 218}: "Zhuhai Jiahe Communication Technology Co., limited",
+       [3]byte{244, 220, 249}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{244, 221, 158}: "GoPro",
+       [3]byte{244, 222, 12}:  "ESPOD Ltd.",
+       [3]byte{244, 225, 66}:  "Delta Elektronika BV",
+       [3]byte{244, 226, 4}:   "Traqueur",
+       [3]byte{244, 227, 251}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{244, 228, 173}: "zte corporation",
+       [3]byte{244, 230, 215}: "Solar Power Technologies, Inc.",
+       [3]byte{244, 233, 38}:  "Tianjin Zanpu Technology Inc.",
+       [3]byte{244, 233, 212}: "QLogic Corporation",
+       [3]byte{244, 234, 103}: "Cisco Systems, Inc",
+       [3]byte{244, 234, 181}: "Aerohive Networks Inc.",
+       [3]byte{244, 235, 56}:  "Sagemcom Broadband SAS",
+       [3]byte{244, 236, 56}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{244, 237, 95}:  "SHENZHEN KTC TECHNOLOGY GROUP",
+       [3]byte{244, 238, 20}:  "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+       [3]byte{244, 239, 158}: "SGSG SCIENCE & TECHNOLOGY CO. LTD",
+       [3]byte{244, 241, 90}:  "Apple, Inc.",
+       [3]byte{244, 241, 225}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{244, 242, 109}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{244, 243, 170}: "JBL GmbH & Co. KG",
+       [3]byte{244, 245, 36}:  "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{244, 245, 165}: "Nokia Corporation",
+       [3]byte{244, 245, 216}: "Google, Inc.",
+       [3]byte{244, 245, 219}: "Xiaomi Communications Co Ltd",
+       [3]byte{244, 245, 232}: "Google, Inc.",
+       [3]byte{244, 246, 70}:  "Dediprog Technology Co. Ltd.",
+       [3]byte{244, 249, 81}:  "Apple, Inc.",
+       [3]byte{244, 252, 50}:  "Texas Instruments",
+       [3]byte{244, 252, 177}: "JJ Corp",
+       [3]byte{244, 253, 43}:  "ZOYI Company",
+       [3]byte{248, 1, 19}:    "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{248, 2, 120}:   "IEEE Registration Authority",
+       [3]byte{248, 3, 50}:    "Khomp",
+       [3]byte{248, 3, 119}:   "Apple, Inc.",
+       [3]byte{248, 4, 46}:    "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+       [3]byte{248, 5, 28}:    "DRS Imaging and Targeting Solutions",
+       [3]byte{248, 11, 190}:  "ARRIS Group, Inc.",
+       [3]byte{248, 11, 203}:  "Cisco Systems, Inc",
+       [3]byte{248, 11, 208}:  "Datang Telecom communication terminal (Tianjin) Co., Ltd.",
+       [3]byte{248, 12, 243}:  "LG Electronics (Mobile Communications)",
+       [3]byte{248, 13, 67}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{248, 13, 96}:   "CANON INC.",
+       [3]byte{248, 13, 234}:  "ZyCast Technology Inc.",
+       [3]byte{248, 15, 65}:   "Wistron Infocomm (Zhongshan) Corporation",
+       [3]byte{248, 15, 132}:  "Natural Security SAS",
+       [3]byte{248, 16, 55}:   "Atopia Systems, LP",
+       [3]byte{248, 21, 71}:   "Avaya Inc",
+       [3]byte{248, 22, 84}:   "Intel Corporate",
+       [3]byte{248, 24, 151}:  "2Wire Inc",
+       [3]byte{248, 26, 103}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{248, 28, 229}:  "Telefonbau Behnke GmbH",
+       [3]byte{248, 29, 15}:   "Hitron Technologies. Inc",
+       [3]byte{248, 29, 120}:  "IEEE Registration Authority",
+       [3]byte{248, 29, 144}:  "Solidwintech",
+       [3]byte{248, 29, 147}:  "Longdhua(Beijing) Controls Technology Co.,Ltd",
+       [3]byte{248, 30, 223}:  "Apple, Inc.",
+       [3]byte{248, 32, 85}:   "Green Information System",
+       [3]byte{248, 34, 133}:  "Cypress Technology CO., LTD.",
+       [3]byte{248, 35, 178}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{248, 36, 65}:   "Yeelink",
+       [3]byte{248, 39, 147}:  "Apple, Inc.",
+       [3]byte{248, 40, 25}:   "Liteon Technology Corporation",
+       [3]byte{248, 43, 200}:  "Jiangsu Switter Co., Ltd",
+       [3]byte{248, 44, 24}:   "2Wire Inc",
+       [3]byte{248, 46, 219}:  "RTW GmbH & Co. KG",
+       [3]byte{248, 47, 8}:    "Molex",
+       [3]byte{248, 47, 91}:   "eGauge Systems LLC",
+       [3]byte{248, 47, 168}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{248, 48, 148}:  "Alcatel-Lucent Telecom Limited",
+       [3]byte{248, 49, 62}:   "endeavour GmbH",
+       [3]byte{248, 50, 228}:  "ASUSTek COMPUTER INC.",
+       [3]byte{248, 51, 118}:  "Good Mind Innovation Co., Ltd.",
+       [3]byte{248, 52, 65}:   "Intel Corporate",
+       [3]byte{248, 53, 83}:   "Magenta Research Ltd.",
+       [3]byte{248, 53, 221}:  "Gemtek Technology Co., Ltd.",
+       [3]byte{248, 61, 78}:   "Softlink Automation System Co., Ltd",
+       [3]byte{248, 61, 255}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{248, 63, 81}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{248, 66, 251}:  "Yasuda Joho Co.,ltd.",
+       [3]byte{248, 68, 227}:  "Taicang T&W Electronics",
+       [3]byte{248, 69, 173}:  "Konka Group Co., Ltd.",
+       [3]byte{248, 70, 28}:   "Sony Interactive Entertainment Inc.",
+       [3]byte{248, 70, 45}:   "SYNTEC Incorporation",
+       [3]byte{248, 71, 45}:   "X2gen Digital Corp. Ltd",
+       [3]byte{248, 72, 151}:  "Hitachi, Ltd.",
+       [3]byte{248, 74, 115}:  "EUMTECH CO., LTD",
+       [3]byte{248, 74, 127}:  "Innometriks Inc",
+       [3]byte{248, 74, 191}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{248, 79, 87}:   "Cisco Systems, Inc",
+       [3]byte{248, 80, 99}:   "Verathon",
+       [3]byte{248, 81, 109}:  "Denwa Technology Corp.",
+       [3]byte{248, 82, 223}:  "VNL Europe AB",
+       [3]byte{248, 84, 175}:  "ECI Telecom Ltd.",
+       [3]byte{248, 87, 46}:   "Core Brands, LLC",
+       [3]byte{248, 89, 113}:  "Intel Corporate",
+       [3]byte{248, 90, 0}:    "Sanford LP",
+       [3]byte{248, 91, 156}:  "SB SYSTEMS Co.,Ltd",
+       [3]byte{248, 91, 201}:  "M-Cube Spa",
+       [3]byte{248, 92, 69}:   "IC Nexus Co. Ltd.",
+       [3]byte{248, 92, 77}:   "NOKIA",
+       [3]byte{248, 95, 42}:   "Nokia Corporation",
+       [3]byte{248, 98, 20}:   "Apple, Inc.",
+       [3]byte{248, 98, 170}:  "xn systems",
+       [3]byte{248, 99, 63}:   "Intel Corporate",
+       [3]byte{248, 100, 101}: "Anova Applied Electronics, Inc.",
+       [3]byte{248, 102, 1}:   "Suzhou Chi-tek information technology Co., Ltd",
+       [3]byte{248, 102, 209}: "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{248, 102, 242}: "Cisco Systems, Inc",
+       [3]byte{248, 105, 113}: "Seibu Electric Co.,",
+       [3]byte{248, 108, 225}: "Taicang T&W Electronics",
+       [3]byte{248, 110, 207}: "Arcx Inc",
+       [3]byte{248, 110, 238}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{248, 113, 254}: "The Goldman Sachs Group, Inc.",
+       [3]byte{248, 114, 234}: "Cisco Systems, Inc",
+       [3]byte{248, 115, 148}: "NETGEAR",
+       [3]byte{248, 115, 162}: "Avaya Inc",
+       [3]byte{248, 117, 136}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{248, 118, 155}: "Neopis Co., Ltd.",
+       [3]byte{248, 119, 184}: "Samsung Electronics Co.,Ltd",
+       [3]byte{248, 122, 239}: "Rosonix Technology, Inc.",
+       [3]byte{248, 123, 32}:  "Cisco Systems, Inc",
+       [3]byte{248, 123, 98}:  "FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch",
+       [3]byte{248, 123, 122}: "ARRIS Group, Inc.",
+       [3]byte{248, 123, 140}: "Amped Wireless",
+       [3]byte{248, 128, 150}: "Elsys Equipamentos Eletrônicos Ltda",
+       [3]byte{248, 129, 26}:  "OVERKIZ",
+       [3]byte{248, 132, 121}: "Yaojin Technology(Shenzhen)Co.,Ltd",
+       [3]byte{248, 132, 242}: "Samsung Electronics Co.,Ltd",
+       [3]byte{248, 138, 60}:  "IEEE Registration Authority",
+       [3]byte{248, 140, 28}:  "KAISHUN ELECTRONIC TECHNOLOGY CO., LTD. BEIJING",
+       [3]byte{248, 141, 239}: "Tenebraex",
+       [3]byte{248, 142, 133}: "Comtrend Corporation",
+       [3]byte{248, 143, 202}: "Google, Inc.",
+       [3]byte{248, 145, 42}:  "GLP German Light Products GmbH",
+       [3]byte{248, 147, 243}: "VOLANS",
+       [3]byte{248, 148, 194}: "Intel Corporate",
+       [3]byte{248, 149, 80}:  "Proton Products Chengdu Ltd",
+       [3]byte{248, 149, 199}: "LG Electronics (Mobile Communications)",
+       [3]byte{248, 151, 207}: "DAESHIN-INFORMATION TECHNOLOGY CO., LTD.",
+       [3]byte{248, 152, 58}:  "Leeman International (HongKong) Limited",
+       [3]byte{248, 152, 185}: "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{248, 153, 85}:  "Fortress Technology Inc",
+       [3]byte{248, 157, 13}:  "Control Technology Inc.",
+       [3]byte{248, 157, 187}: "Tintri",
+       [3]byte{248, 159, 184}: "YAZAKI Energy System Corporation",
+       [3]byte{248, 160, 61}:  "Dinstar Technologies Co., Ltd.",
+       [3]byte{248, 160, 151}: "ARRIS Group, Inc.",
+       [3]byte{248, 161, 136}: "LED Roadway Lighting",
+       [3]byte{248, 162, 180}: "RHEWA-WAAGENFABRIK August Freudewald GmbH &amp;Co. KG",
+       [3]byte{248, 163, 79}:  "zte corporation",
+       [3]byte{248, 164, 95}:  "Xiaomi Communications Co Ltd",
+       [3]byte{248, 165, 197}: "Cisco Systems, Inc",
+       [3]byte{248, 169, 99}:  "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{248, 169, 208}: "LG Electronics (Mobile Communications)",
+       [3]byte{248, 169, 222}: "PUISSANCE PLUS",
+       [3]byte{248, 170, 138}: "Axview Technology (Shenzhen) Co.,Ltd",
+       [3]byte{248, 171, 5}:   "Sagemcom Broadband SAS",
+       [3]byte{248, 172, 109}: "Deltenna Ltd",
+       [3]byte{248, 177, 86}:  "Dell Inc.",
+       [3]byte{248, 178, 243}: "GUANGZHOU BOSMA TECHNOLOGY CO.,LTD",
+       [3]byte{248, 181, 104}: "IEEE Registration Authority",
+       [3]byte{248, 181, 153}: "Guangzhou CHNAVS Digital Technology Co.,Ltd",
+       [3]byte{248, 183, 226}: "Cisco Systems, Inc",
+       [3]byte{248, 187, 191}: "eero inc.",
+       [3]byte{248, 188, 18}:  "Dell Inc.",
+       [3]byte{248, 188, 65}:  "Rosslare Enterprises Limited",
+       [3]byte{248, 190, 13}:  "A2UICT Co.,Ltd.",
+       [3]byte{248, 191, 9}:   "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{248, 192, 1}:   "Juniper Networks",
+       [3]byte{248, 192, 145}: "Highgates Technology",
+       [3]byte{248, 194, 136}: "Cisco Systems, Inc",
+       [3]byte{248, 195, 114}: "TSUZUKI DENKI",
+       [3]byte{248, 195, 151}: "NZXT Corp. Ltd.",
+       [3]byte{248, 198, 120}: "Carefusion",
+       [3]byte{248, 201, 108}: "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{248, 202, 184}: "Dell Inc.",
+       [3]byte{248, 207, 197}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{248, 208, 39}:  "Seiko Epson Corporation",
+       [3]byte{248, 208, 172}: "Sony Interactive Entertainment Inc.",
+       [3]byte{248, 208, 189}: "Samsung Electronics Co.,Ltd",
+       [3]byte{248, 209, 17}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{248, 211, 169}: "AXAN Networks",
+       [3]byte{248, 212, 98}:  "Pumatronix Equipamentos Eletronicos Ltda.",
+       [3]byte{248, 215, 86}:  "Simm Tronic Limited",
+       [3]byte{248, 215, 191}: "REV Ritter GmbH",
+       [3]byte{248, 218, 12}:  "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{248, 218, 223}: "EcoTech, Inc.",
+       [3]byte{248, 218, 226}: "Beta LaserMike",
+       [3]byte{248, 218, 244}: "Taishan Online Technology Co., Ltd.",
+       [3]byte{248, 219, 76}:  "PNY Technologies, INC.",
+       [3]byte{248, 219, 127}: "HTC Corporation",
+       [3]byte{248, 219, 136}: "Dell Inc.",
+       [3]byte{248, 220, 122}: "Variscite LTD",
+       [3]byte{248, 223, 168}: "zte corporation",
+       [3]byte{248, 224, 121}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{248, 228, 251}: "Actiontec Electronics, Inc",
+       [3]byte{248, 230, 26}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{248, 231, 30}:  "Ruckus Wireless",
+       [3]byte{248, 231, 181}: "µTech Tecnologia LTDA",
+       [3]byte{248, 232, 17}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{248, 233, 3}:   "D-Link International",
+       [3]byte{248, 233, 104}: "Egker Kft.",
+       [3]byte{248, 234, 10}:  "Dipl.-Math. Michael Rauch",
+       [3]byte{248, 237, 165}: "ARRIS Group, Inc.",
+       [3]byte{248, 240, 5}:   "Newport Media Inc.",
+       [3]byte{248, 240, 20}:  "RackWare Inc.",
+       [3]byte{248, 240, 130}: "NAG LLC",
+       [3]byte{248, 241, 182}: "Motorola Mobility LLC, a Lenovo Company",
+       [3]byte{248, 242, 30}:  "Intel Corporate",
+       [3]byte{248, 242, 90}:  "G-Lab GmbH",
+       [3]byte{248, 244, 100}: "Rawe Electonic GmbH",
+       [3]byte{248, 247, 211}: "International Communications Corporation",
+       [3]byte{248, 247, 255}: "SYN-TECH SYSTEMS INC",
+       [3]byte{248, 251, 47}:  "Santur Corporation",
+       [3]byte{248, 254, 92}:  "Reciprocal Labs Corp",
+       [3]byte{248, 254, 168}: "Technico Japan Corporation",
+       [3]byte{248, 255, 11}:  "Electronic Technology Inc.",
+       [3]byte{248, 255, 95}:  "Shenzhen Communication Technology Co.,Ltd",
+       [3]byte{252, 0, 18}:    "Toshiba Samsung Storage Technolgoy Korea Corporation",
+       [3]byte{252, 1, 124}:   "Hon Hai Precision Ind. Co.,Ltd.",
+       [3]byte{252, 1, 158}:   "VIEVU",
+       [3]byte{252, 1, 205}:   "FUNDACION TEKNIKER",
+       [3]byte{252, 6, 71}:    "Cortland Research, LLC",
+       [3]byte{252, 6, 237}:   "M2Motive Technology Inc.",
+       [3]byte{252, 7, 160}:   "LRE Medical GmbH",
+       [3]byte{252, 8, 74}:    "FUJITSU LIMITED",
+       [3]byte{252, 8, 119}:   "Prentke Romich Company",
+       [3]byte{252, 9, 216}:   "ACTEON Group",
+       [3]byte{252, 9, 246}:   "GUANGDONG TONZE ELECTRIC CO.,LTD",
+       [3]byte{252, 10, 129}:  "Extreme Networks, Inc.",
+       [3]byte{252, 15, 75}:   "Texas Instruments",
+       [3]byte{252, 15, 230}:  "Sony Interactive Entertainment Inc.",
+       [3]byte{252, 16, 189}:  "Control Sistematizado S.A.",
+       [3]byte{252, 16, 198}:  "Taicang T&W Electronics",
+       [3]byte{252, 17, 134}:  "Logic3 plc",
+       [3]byte{252, 19, 73}:   "Global Apps Corp.",
+       [3]byte{252, 21, 180}:  "Hewlett Packard",
+       [3]byte{252, 22, 7}:    "Taian Technology(Wuxi) Co.,Ltd.",
+       [3]byte{252, 23, 148}:  "InterCreative Co., Ltd",
+       [3]byte{252, 25, 16}:   "Samsung Electronics Co.,Ltd",
+       [3]byte{252, 25, 208}:  "Cloud Vision Networks Technology Co.,Ltd.",
+       [3]byte{252, 26, 17}:   "vivo Mobile Communication Co., Ltd.",
+       [3]byte{252, 27, 255}:  "V-ZUG AG",
+       [3]byte{252, 29, 89}:   "I Smart Cities HK Ltd",
+       [3]byte{252, 29, 132}:  "Autobase",
+       [3]byte{252, 30, 22}:   "IPEVO corp",
+       [3]byte{252, 31, 25}:   "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+       [3]byte{252, 31, 192}:  "EURECAM",
+       [3]byte{252, 34, 156}:  "Han Kyung I Net Co.,Ltd.",
+       [3]byte{252, 35, 37}:   "EosTek (Shenzhen) Co., Ltd.",
+       [3]byte{252, 37, 63}:   "Apple, Inc.",
+       [3]byte{252, 39, 162}:  "TRANS ELECTRIC CO., LTD.",
+       [3]byte{252, 42, 84}:   "Connected Data, Inc.",
+       [3]byte{252, 45, 94}:   "zte corporation",
+       [3]byte{252, 46, 45}:   "Lorom Industrial Co.LTD.",
+       [3]byte{252, 47, 64}:   "Calxeda, Inc.",
+       [3]byte{252, 47, 107}:  "Everspin Technologies, Inc.",
+       [3]byte{252, 47, 170}:  "Nokia",
+       [3]byte{252, 47, 239}:  "UTT Technologies Co., Ltd.",
+       [3]byte{252, 50, 136}:  "CELOT Wireless Co., Ltd",
+       [3]byte{252, 51, 95}:   "Polyera",
+       [3]byte{252, 53, 152}:  "Favite Inc.",
+       [3]byte{252, 53, 230}:  "Visteon corp",
+       [3]byte{252, 55, 43}:   "SICHUAN TIANYI COMHEART TELECOMCO.,LTD",
+       [3]byte{252, 60, 233}:  "Tsingtong Technologies Co, Ltd.",
+       [3]byte{252, 61, 147}:  "LONGCHEER TELECOMMUNICATION LIMITED",
+       [3]byte{252, 63, 124}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{252, 63, 171}:  "Henan Lanxin Technology Co., Ltd",
+       [3]byte{252, 63, 219}:  "Hewlett Packard",
+       [3]byte{252, 66, 3}:    "Samsung Electronics Co.,Ltd",
+       [3]byte{252, 68, 99}:   "Universal Audio, Inc",
+       [3]byte{252, 68, 153}:  "Swarco LEA d.o.o.",
+       [3]byte{252, 69, 95}:   "JIANGXI SHANSHUI OPTOELECTRONIC TECHNOLOGY CO.,LTD",
+       [3]byte{252, 69, 150}:  "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
+       [3]byte{252, 72, 239}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{252, 74, 233}:  "Castlenet Technology Inc.",
+       [3]byte{252, 75, 28}:   "INTERSENSOR S.R.L.",
+       [3]byte{252, 75, 188}:  "Sunplus Technology Co., Ltd.",
+       [3]byte{252, 77, 140}:  "SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD",
+       [3]byte{252, 77, 212}:  "Universal Global Scientific Industrial Co., Ltd.",
+       [3]byte{252, 80, 144}:  "SIMEX Sp. z o.o.",
+       [3]byte{252, 81, 164}:  "ARRIS Group, Inc.",
+       [3]byte{252, 82, 141}:  "Technicolor CH USA Inc.",
+       [3]byte{252, 82, 206}:  "Control iD",
+       [3]byte{252, 83, 158}:  "Shanghai Wind Technologies Co.,Ltd",
+       [3]byte{252, 85, 220}:  "Baltic Latvian Universal Electronics LLC",
+       [3]byte{252, 88, 250}:  "Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.",
+       [3]byte{252, 90, 29}:   "Hitron Technologies. Inc",
+       [3]byte{252, 91, 36}:   "Weibel Scientific A/S",
+       [3]byte{252, 91, 38}:   "MikroBits",
+       [3]byte{252, 91, 57}:   "Cisco Systems, Inc",
+       [3]byte{252, 96, 24}:   "Zhejiang Kangtai Electric Co., Ltd.",
+       [3]byte{252, 97, 152}:  "NEC Personal Products, Ltd",
+       [3]byte{252, 98, 110}:  "Beijing MDC Telecom",
+       [3]byte{252, 98, 185}:  "ALPS ELECTRIC CO.,LTD.",
+       [3]byte{252, 100, 186}: "Xiaomi Communications Co Ltd",
+       [3]byte{252, 101, 222}: "Amazon Technologies Inc.",
+       [3]byte{252, 104, 62}:  "Directed Perception, Inc",
+       [3]byte{252, 108, 49}:  "LXinstruments GmbH",
+       [3]byte{252, 109, 192}: "BME CORPORATION",
+       [3]byte{252, 111, 183}: "ARRIS Group, Inc.",
+       [3]byte{252, 117, 22}:  "D-Link International",
+       [3]byte{252, 117, 230}: "Handreamnet",
+       [3]byte{252, 121, 11}:  "Hitachi High Technologies America, Inc.",
+       [3]byte{252, 124, 231}: "FCI USA LLC",
+       [3]byte{252, 127, 86}:  "CoSyst Control Systems GmbH",
+       [3]byte{252, 131, 41}:  "Trei technics",
+       [3]byte{252, 131, 153}: "Avaya Inc",
+       [3]byte{252, 131, 198}: "N-Radio Technologies Co., Ltd.",
+       [3]byte{252, 139, 151}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+       [3]byte{252, 142, 126}: "ARRIS Group, Inc.",
+       [3]byte{252, 143, 144}: "Samsung Electronics Co.,Ltd",
+       [3]byte{252, 143, 196}: "Intelligent Technology Inc.",
+       [3]byte{252, 145, 20}:  "Technicolor CH USA Inc.",
+       [3]byte{252, 146, 59}:  "Nokia Corporation",
+       [3]byte{252, 148, 108}: "UBIVELOX",
+       [3]byte{252, 148, 227}: "Technicolor CH USA Inc.",
+       [3]byte{252, 153, 71}:  "Cisco Systems, Inc",
+       [3]byte{252, 154, 250}: "Motus Global Inc.",
+       [3]byte{252, 157, 216}: "Beijing TongTongYiLian Science and Technology Ltd.",
+       [3]byte{252, 159, 174}: "Fidus Systems Inc",
+       [3]byte{252, 159, 225}: "CONWIN.Tech. Ltd",
+       [3]byte{252, 161, 62}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{252, 162, 42}:  "PT. Callysta Multi Engineering",
+       [3]byte{252, 163, 134}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+       [3]byte{252, 166, 103}: "Amazon Technologies Inc.",
+       [3]byte{252, 168, 65}:  "Avaya Inc",
+       [3]byte{252, 168, 154}: "Sunitec Enterprise Co.,Ltd",
+       [3]byte{252, 169, 176}: "MIARTECH (SHANGHAI),INC.",
+       [3]byte{252, 170, 20}:  "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+       [3]byte{252, 173, 15}:  "QTS NETWORKS",
+       [3]byte{252, 175, 106}: "Qulsar Inc",
+       [3]byte{252, 175, 172}: "Socionext Inc.",
+       [3]byte{252, 176, 196}: "Shanghai DareGlobal Technologies Co.,Ltd",
+       [3]byte{252, 180, 230}: "ASKEY COMPUTER CORP",
+       [3]byte{252, 181, 138}: "Wapice Ltd.",
+       [3]byte{252, 182, 152}: "Cambridge Industries(Group) Co.,Ltd.",
+       [3]byte{252, 187, 161}: "Shenzhen Minicreate Technology Co.,Ltd",
+       [3]byte{252, 188, 156}: "Vimar Spa",
+       [3]byte{252, 194, 51}:  "Private",
+       [3]byte{252, 194, 61}:  "Atmel Corporation",
+       [3]byte{252, 194, 222}: "Murata Manufacturing Co., Ltd.",
+       [3]byte{252, 199, 52}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{252, 200, 151}: "zte corporation",
+       [3]byte{252, 202, 196}: "LifeHealth, LLC",
+       [3]byte{252, 204, 228}: "Ascon Ltd.",
+       [3]byte{252, 207, 67}:  "HUIZHOU CITY HUIYANG DISTRICT MEISIQI INDUSTRY DEVELOPMENT CO,.LTD",
+       [3]byte{252, 207, 98}:  "IBM Corp",
+       [3]byte{252, 212, 242}: "The Coca Cola Company",
+       [3]byte{252, 212, 246}: "Messana Air.Ray Conditioning s.r.l.",
+       [3]byte{252, 213, 217}: "Shenzhen SDMC Technology Co., Ltd.",
+       [3]byte{252, 214, 189}: "Robert Bosch GmbH",
+       [3]byte{252, 215, 51}:  "TP-LINK TECHNOLOGIES CO.,LTD.",
+       [3]byte{252, 216, 23}:  "Beijing Hesun Technologies Co.Ltd.",
+       [3]byte{252, 216, 72}:  "Apple, Inc.",
+       [3]byte{252, 219, 150}: "ENERVALLEY CO., LTD",
+       [3]byte{252, 219, 179}: "Murata Manufacturing Co., Ltd.",
+       [3]byte{252, 220, 74}:  "G-Wearables Corp.",
+       [3]byte{252, 221, 85}:  "Shenzhen WeWins wireless Co.,Ltd",
+       [3]byte{252, 225, 134}: "A3M Co., LTD",
+       [3]byte{252, 225, 146}: "Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd",
+       [3]byte{252, 225, 217}: "Stable Imaging Solutions LLC",
+       [3]byte{252, 225, 251}: "Array Networks",
+       [3]byte{252, 226, 63}:  "CLAY PAKY SPA",
+       [3]byte{252, 227, 60}:  "HUAWEI TECHNOLOGIES CO.,LTD",
+       [3]byte{252, 229, 87}:  "Nokia Corporation",
+       [3]byte{252, 232, 146}: "Hangzhou Lancable Technology Co.,Ltd",
+       [3]byte{252, 233, 152}: "Apple, Inc.",
+       [3]byte{252, 236, 218}: "Ubiquiti Networks Inc.",
+       [3]byte{252, 237, 185}: "Arrayent",
+       [3]byte{252, 238, 230}: "FORMIKE ELECTRONIC CO., LTD",
+       [3]byte{252, 241, 54}:  "Samsung Electronics Co.,Ltd",
+       [3]byte{252, 241, 82}:  "Sony Corporation",
+       [3]byte{252, 241, 205}: "OPTEX-FA CO.,LTD.",
+       [3]byte{252, 245, 40}:  "Zyxel Communications Corporation",
+       [3]byte{252, 246, 71}:  "Fiberhome Telecommunication Technologies Co.,LTD",
+       [3]byte{252, 248, 174}: "Intel Corporate",
+       [3]byte{252, 248, 183}: "TRONTEQ Electronic",
+       [3]byte{252, 250, 247}: "Shanghai Baud Data Communication Co.,Ltd.",
+       [3]byte{252, 251, 251}: "Cisco Systems, Inc",
+       [3]byte{252, 252, 72}:  "Apple, Inc.",
+       [3]byte{252, 254, 119}: "Hitachi Reftechno, Inc.",
+       [3]byte{252, 254, 194}: "Invensys Controls UK Limited",
+       [3]byte{252, 255, 170}: "IEEE Registration Authority",
+}
diff --git a/vendor/github.com/google/gopacket/packet.go b/vendor/github.com/google/gopacket/packet.go
new file mode 100644 (file)
index 0000000..76b62d8
--- /dev/null
@@ -0,0 +1,838 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "bytes"
+       "encoding/hex"
+       "errors"
+       "fmt"
+       "io"
+       "os"
+       "reflect"
+       "runtime/debug"
+       "strings"
+       "time"
+)
+
+// CaptureInfo provides standardized information about a packet captured off
+// the wire or read from a file.
+type CaptureInfo struct {
+       // Timestamp is the time the packet was captured, if that is known.
+       Timestamp time.Time
+       // CaptureLength is the total number of bytes read off of the wire.
+       CaptureLength int
+       // Length is the size of the original packet.  Should always be >=
+       // CaptureLength.
+       Length int
+       // InterfaceIndex
+       InterfaceIndex int
+}
+
+// PacketMetadata contains metadata for a packet.
+type PacketMetadata struct {
+       CaptureInfo
+       // Truncated is true if packet decoding logic detects that there are fewer
+       // bytes in the packet than are detailed in various headers (for example, if
+       // the number of bytes in the IPv4 contents/payload is less than IPv4.Length).
+       // This is also set automatically for packets captured off the wire if
+       // CaptureInfo.CaptureLength < CaptureInfo.Length.
+       Truncated bool
+}
+
+// Packet is the primary object used by gopacket.  Packets are created by a
+// Decoder's Decode call.  A packet is made up of a set of Data, which
+// is broken into a number of Layers as it is decoded.
+type Packet interface {
+       //// Functions for outputting the packet as a human-readable string:
+       //// ------------------------------------------------------------------
+       // String returns a human-readable string representation of the packet.
+       // It uses LayerString on each layer to output the layer.
+       String() string
+       // Dump returns a verbose human-readable string representation of the packet,
+       // including a hex dump of all layers.  It uses LayerDump on each layer to
+       // output the layer.
+       Dump() string
+
+       //// Functions for accessing arbitrary packet layers:
+       //// ------------------------------------------------------------------
+       // Layers returns all layers in this packet, computing them as necessary
+       Layers() []Layer
+       // Layer returns the first layer in this packet of the given type, or nil
+       Layer(LayerType) Layer
+       // LayerClass returns the first layer in this packet of the given class,
+       // or nil.
+       LayerClass(LayerClass) Layer
+
+       //// Functions for accessing specific types of packet layers.  These functions
+       //// return the first layer of each type found within the packet.
+       //// ------------------------------------------------------------------
+       // LinkLayer returns the first link layer in the packet
+       LinkLayer() LinkLayer
+       // NetworkLayer returns the first network layer in the packet
+       NetworkLayer() NetworkLayer
+       // TransportLayer returns the first transport layer in the packet
+       TransportLayer() TransportLayer
+       // ApplicationLayer returns the first application layer in the packet
+       ApplicationLayer() ApplicationLayer
+       // ErrorLayer is particularly useful, since it returns nil if the packet
+       // was fully decoded successfully, and non-nil if an error was encountered
+       // in decoding and the packet was only partially decoded.  Thus, its output
+       // can be used to determine if the entire packet was able to be decoded.
+       ErrorLayer() ErrorLayer
+
+       //// Functions for accessing data specific to the packet:
+       //// ------------------------------------------------------------------
+       // Data returns the set of bytes that make up this entire packet.
+       Data() []byte
+       // Metadata returns packet metadata associated with this packet.
+       Metadata() *PacketMetadata
+}
+
+// packet contains all the information we need to fulfill the Packet interface,
+// and its two "subclasses" (yes, no such thing in Go, bear with me),
+// eagerPacket and lazyPacket, provide eager and lazy decoding logic around the
+// various functions needed to access this information.
+type packet struct {
+       // data contains the entire packet data for a packet
+       data []byte
+       // initialLayers is space for an initial set of layers already created inside
+       // the packet.
+       initialLayers [6]Layer
+       // layers contains each layer we've already decoded
+       layers []Layer
+       // last is the last layer added to the packet
+       last Layer
+       // metadata is the PacketMetadata for this packet
+       metadata PacketMetadata
+
+       decodeOptions DecodeOptions
+
+       // Pointers to the various important layers
+       link        LinkLayer
+       network     NetworkLayer
+       transport   TransportLayer
+       application ApplicationLayer
+       failure     ErrorLayer
+}
+
+func (p *packet) SetTruncated() {
+       p.metadata.Truncated = true
+}
+
+func (p *packet) SetLinkLayer(l LinkLayer) {
+       if p.link == nil {
+               p.link = l
+       }
+}
+
+func (p *packet) SetNetworkLayer(l NetworkLayer) {
+       if p.network == nil {
+               p.network = l
+       }
+}
+
+func (p *packet) SetTransportLayer(l TransportLayer) {
+       if p.transport == nil {
+               p.transport = l
+       }
+}
+
+func (p *packet) SetApplicationLayer(l ApplicationLayer) {
+       if p.application == nil {
+               p.application = l
+       }
+}
+
+func (p *packet) SetErrorLayer(l ErrorLayer) {
+       if p.failure == nil {
+               p.failure = l
+       }
+}
+
+func (p *packet) AddLayer(l Layer) {
+       p.layers = append(p.layers, l)
+       p.last = l
+}
+
+func (p *packet) DumpPacketData() {
+       fmt.Fprint(os.Stderr, p.packetDump())
+       os.Stderr.Sync()
+}
+
+func (p *packet) Metadata() *PacketMetadata {
+       return &p.metadata
+}
+
+func (p *packet) Data() []byte {
+       return p.data
+}
+
+func (p *packet) DecodeOptions() *DecodeOptions {
+       return &p.decodeOptions
+}
+
+func (p *packet) addFinalDecodeError(err error, stack []byte) {
+       fail := &DecodeFailure{err: err, stack: stack}
+       if p.last == nil {
+               fail.data = p.data
+       } else {
+               fail.data = p.last.LayerPayload()
+       }
+       p.AddLayer(fail)
+       p.SetErrorLayer(fail)
+}
+
+func (p *packet) recoverDecodeError() {
+       if !p.decodeOptions.SkipDecodeRecovery {
+               if r := recover(); r != nil {
+                       p.addFinalDecodeError(fmt.Errorf("%v", r), debug.Stack())
+               }
+       }
+}
+
+// LayerString outputs an individual layer as a string.  The layer is output
+// in a single line, with no trailing newline.  This function is specifically
+// designed to do the right thing for most layers... it follows the following
+// rules:
+//  * If the Layer has a String function, just output that.
+//  * Otherwise, output all exported fields in the layer, recursing into
+//    exported slices and structs.
+// NOTE:  This is NOT THE SAME AS fmt's "%#v".  %#v will output both exported
+// and unexported fields... many times packet layers contain unexported stuff
+// that would just mess up the output of the layer, see for example the
+// Payload layer and it's internal 'data' field, which contains a large byte
+// array that would really mess up formatting.
+func LayerString(l Layer) string {
+       return fmt.Sprintf("%v\t%s", l.LayerType(), layerString(reflect.ValueOf(l), false, false))
+}
+
+// Dumper dumps verbose information on a value.  If a layer type implements
+// Dumper, then its LayerDump() string will include the results in its output.
+type Dumper interface {
+       Dump() string
+}
+
+// LayerDump outputs a very verbose string representation of a layer.  Its
+// output is a concatenation of LayerString(l) and hex.Dump(l.LayerContents()).
+// It contains newlines and ends with a newline.
+func LayerDump(l Layer) string {
+       var b bytes.Buffer
+       b.WriteString(LayerString(l))
+       b.WriteByte('\n')
+       if d, ok := l.(Dumper); ok {
+               dump := d.Dump()
+               if dump != "" {
+                       b.WriteString(dump)
+                       if dump[len(dump)-1] != '\n' {
+                               b.WriteByte('\n')
+                       }
+               }
+       }
+       b.WriteString(hex.Dump(l.LayerContents()))
+       return b.String()
+}
+
+// layerString outputs, recursively, a layer in a "smart" way.  See docs for
+// LayerString for more details.
+//
+// Params:
+//   i - value to write out
+//   anonymous:  if we're currently recursing an anonymous member of a struct
+//   writeSpace:  if we've already written a value in a struct, and need to
+//     write a space before writing more.  This happens when we write various
+//     anonymous values, and need to keep writing more.
+func layerString(v reflect.Value, anonymous bool, writeSpace bool) string {
+       // Let String() functions take precedence.
+       if v.CanInterface() {
+               if s, ok := v.Interface().(fmt.Stringer); ok {
+                       return s.String()
+               }
+       }
+       // Reflect, and spit out all the exported fields as key=value.
+       switch v.Type().Kind() {
+       case reflect.Interface, reflect.Ptr:
+               if v.IsNil() {
+                       return "nil"
+               }
+               r := v.Elem()
+               return layerString(r, anonymous, writeSpace)
+       case reflect.Struct:
+               var b bytes.Buffer
+               typ := v.Type()
+               if !anonymous {
+                       b.WriteByte('{')
+               }
+               for i := 0; i < v.NumField(); i++ {
+                       // Check if this is upper-case.
+                       ftype := typ.Field(i)
+                       f := v.Field(i)
+                       if ftype.Anonymous {
+                               anonStr := layerString(f, true, writeSpace)
+                               writeSpace = writeSpace || anonStr != ""
+                               b.WriteString(anonStr)
+                       } else if ftype.PkgPath == "" { // exported
+                               if writeSpace {
+                                       b.WriteByte(' ')
+                               }
+                               writeSpace = true
+                               fmt.Fprintf(&b, "%s=%s", typ.Field(i).Name, layerString(f, false, writeSpace))
+                       }
+               }
+               if !anonymous {
+                       b.WriteByte('}')
+               }
+               return b.String()
+       case reflect.Slice:
+               var b bytes.Buffer
+               b.WriteByte('[')
+               if v.Len() > 4 {
+                       fmt.Fprintf(&b, "..%d..", v.Len())
+               } else {
+                       for j := 0; j < v.Len(); j++ {
+                               if j != 0 {
+                                       b.WriteString(", ")
+                               }
+                               b.WriteString(layerString(v.Index(j), false, false))
+                       }
+               }
+               b.WriteByte(']')
+               return b.String()
+       }
+       return fmt.Sprintf("%v", v.Interface())
+}
+
+const (
+       longBytesLength = 128
+)
+
+// LongBytesGoString returns a string representation of the byte slice shortened
+// using the format '<type>{<truncated slice> ... (<n> bytes)}' if it
+// exceeds a predetermined length. Can be used to avoid filling the display with
+// very long byte strings.
+func LongBytesGoString(buf []byte) string {
+       if len(buf) < longBytesLength {
+               return fmt.Sprintf("%#v", buf)
+       }
+       s := fmt.Sprintf("%#v", buf[:longBytesLength-1])
+       s = strings.TrimSuffix(s, "}")
+       return fmt.Sprintf("%s ... (%d bytes)}", s, len(buf))
+}
+
+func baseLayerString(value reflect.Value) string {
+       t := value.Type()
+       content := value.Field(0)
+       c := make([]byte, content.Len())
+       for i := range c {
+               c[i] = byte(content.Index(i).Uint())
+       }
+       payload := value.Field(1)
+       p := make([]byte, payload.Len())
+       for i := range p {
+               p[i] = byte(payload.Index(i).Uint())
+       }
+       return fmt.Sprintf("%s{Contents:%s, Payload:%s}", t.String(),
+               LongBytesGoString(c),
+               LongBytesGoString(p))
+}
+
+func layerGoString(i interface{}, b *bytes.Buffer) {
+       if s, ok := i.(fmt.GoStringer); ok {
+               b.WriteString(s.GoString())
+               return
+       }
+
+       var v reflect.Value
+       var ok bool
+       if v, ok = i.(reflect.Value); !ok {
+               v = reflect.ValueOf(i)
+       }
+       switch v.Kind() {
+       case reflect.Ptr, reflect.Interface:
+               if v.Kind() == reflect.Ptr {
+                       b.WriteByte('&')
+               }
+               layerGoString(v.Elem().Interface(), b)
+       case reflect.Struct:
+               t := v.Type()
+               b.WriteString(t.String())
+               b.WriteByte('{')
+               for i := 0; i < v.NumField(); i++ {
+                       if i > 0 {
+                               b.WriteString(", ")
+                       }
+                       if t.Field(i).Name == "BaseLayer" {
+                               fmt.Fprintf(b, "BaseLayer:%s", baseLayerString(v.Field(i)))
+                       } else if v.Field(i).Kind() == reflect.Struct {
+                               fmt.Fprintf(b, "%s:", t.Field(i).Name)
+                               layerGoString(v.Field(i), b)
+                       } else if v.Field(i).Kind() == reflect.Ptr {
+                               b.WriteByte('&')
+                               layerGoString(v.Field(i), b)
+                       } else {
+                               fmt.Fprintf(b, "%s:%#v", t.Field(i).Name, v.Field(i))
+                       }
+               }
+               b.WriteByte('}')
+       default:
+               fmt.Fprintf(b, "%#v", i)
+       }
+}
+
+// LayerGoString returns a representation of the layer in Go syntax,
+// taking care to shorten "very long" BaseLayer byte slices
+func LayerGoString(l Layer) string {
+       b := new(bytes.Buffer)
+       layerGoString(l, b)
+       return b.String()
+}
+
+func (p *packet) packetString() string {
+       var b bytes.Buffer
+       fmt.Fprintf(&b, "PACKET: %d bytes", len(p.Data()))
+       if p.metadata.Truncated {
+               b.WriteString(", truncated")
+       }
+       if p.metadata.Length > 0 {
+               fmt.Fprintf(&b, ", wire length %d cap length %d", p.metadata.Length, p.metadata.CaptureLength)
+       }
+       if !p.metadata.Timestamp.IsZero() {
+               fmt.Fprintf(&b, " @ %v", p.metadata.Timestamp)
+       }
+       b.WriteByte('\n')
+       for i, l := range p.layers {
+               fmt.Fprintf(&b, "- Layer %d (%02d bytes) = %s\n", i+1, len(l.LayerContents()), LayerString(l))
+       }
+       return b.String()
+}
+
+func (p *packet) packetDump() string {
+       var b bytes.Buffer
+       fmt.Fprintf(&b, "-- FULL PACKET DATA (%d bytes) ------------------------------------\n%s", len(p.data), hex.Dump(p.data))
+       for i, l := range p.layers {
+               fmt.Fprintf(&b, "--- Layer %d ---\n%s", i+1, LayerDump(l))
+       }
+       return b.String()
+}
+
+// eagerPacket is a packet implementation that does eager decoding.  Upon
+// initial construction, it decodes all the layers it can from packet data.
+// eagerPacket implements Packet and PacketBuilder.
+type eagerPacket struct {
+       packet
+}
+
+var errNilDecoder = errors.New("NextDecoder passed nil decoder, probably an unsupported decode type")
+
+func (p *eagerPacket) NextDecoder(next Decoder) error {
+       if next == nil {
+               return errNilDecoder
+       }
+       if p.last == nil {
+               return errors.New("NextDecoder called, but no layers added yet")
+       }
+       d := p.last.LayerPayload()
+       if len(d) == 0 {
+               return nil
+       }
+       // Since we're eager, immediately call the next decoder.
+       return next.Decode(d, p)
+}
+func (p *eagerPacket) initialDecode(dec Decoder) {
+       defer p.recoverDecodeError()
+       err := dec.Decode(p.data, p)
+       if err != nil {
+               p.addFinalDecodeError(err, nil)
+       }
+}
+func (p *eagerPacket) LinkLayer() LinkLayer {
+       return p.link
+}
+func (p *eagerPacket) NetworkLayer() NetworkLayer {
+       return p.network
+}
+func (p *eagerPacket) TransportLayer() TransportLayer {
+       return p.transport
+}
+func (p *eagerPacket) ApplicationLayer() ApplicationLayer {
+       return p.application
+}
+func (p *eagerPacket) ErrorLayer() ErrorLayer {
+       return p.failure
+}
+func (p *eagerPacket) Layers() []Layer {
+       return p.layers
+}
+func (p *eagerPacket) Layer(t LayerType) Layer {
+       for _, l := range p.layers {
+               if l.LayerType() == t {
+                       return l
+               }
+       }
+       return nil
+}
+func (p *eagerPacket) LayerClass(lc LayerClass) Layer {
+       for _, l := range p.layers {
+               if lc.Contains(l.LayerType()) {
+                       return l
+               }
+       }
+       return nil
+}
+func (p *eagerPacket) String() string { return p.packetString() }
+func (p *eagerPacket) Dump() string   { return p.packetDump() }
+
+// lazyPacket does lazy decoding on its packet data.  On construction it does
+// no initial decoding.  For each function call, it decodes only as many layers
+// as are necessary to compute the return value for that function.
+// lazyPacket implements Packet and PacketBuilder.
+type lazyPacket struct {
+       packet
+       next Decoder
+}
+
+func (p *lazyPacket) NextDecoder(next Decoder) error {
+       if next == nil {
+               return errNilDecoder
+       }
+       p.next = next
+       return nil
+}
+func (p *lazyPacket) decodeNextLayer() {
+       if p.next == nil {
+               return
+       }
+       d := p.data
+       if p.last != nil {
+               d = p.last.LayerPayload()
+       }
+       next := p.next
+       p.next = nil
+       // We've just set p.next to nil, so if we see we have no data, this should be
+       // the final call we get to decodeNextLayer if we return here.
+       if len(d) == 0 {
+               return
+       }
+       defer p.recoverDecodeError()
+       err := next.Decode(d, p)
+       if err != nil {
+               p.addFinalDecodeError(err, nil)
+       }
+}
+func (p *lazyPacket) LinkLayer() LinkLayer {
+       for p.link == nil && p.next != nil {
+               p.decodeNextLayer()
+       }
+       return p.link
+}
+func (p *lazyPacket) NetworkLayer() NetworkLayer {
+       for p.network == nil && p.next != nil {
+               p.decodeNextLayer()
+       }
+       return p.network
+}
+func (p *lazyPacket) TransportLayer() TransportLayer {
+       for p.transport == nil && p.next != nil {
+               p.decodeNextLayer()
+       }
+       return p.transport
+}
+func (p *lazyPacket) ApplicationLayer() ApplicationLayer {
+       for p.application == nil && p.next != nil {
+               p.decodeNextLayer()
+       }
+       return p.application
+}
+func (p *lazyPacket) ErrorLayer() ErrorLayer {
+       for p.failure == nil && p.next != nil {
+               p.decodeNextLayer()
+       }
+       return p.failure
+}
+func (p *lazyPacket) Layers() []Layer {
+       for p.next != nil {
+               p.decodeNextLayer()
+       }
+       return p.layers
+}
+func (p *lazyPacket) Layer(t LayerType) Layer {
+       for _, l := range p.layers {
+               if l.LayerType() == t {
+                       return l
+               }
+       }
+       numLayers := len(p.layers)
+       for p.next != nil {
+               p.decodeNextLayer()
+               for _, l := range p.layers[numLayers:] {
+                       if l.LayerType() == t {
+                               return l
+                       }
+               }
+               numLayers = len(p.layers)
+       }
+       return nil
+}
+func (p *lazyPacket) LayerClass(lc LayerClass) Layer {
+       for _, l := range p.layers {
+               if lc.Contains(l.LayerType()) {
+                       return l
+               }
+       }
+       numLayers := len(p.layers)
+       for p.next != nil {
+               p.decodeNextLayer()
+               for _, l := range p.layers[numLayers:] {
+                       if lc.Contains(l.LayerType()) {
+                               return l
+                       }
+               }
+               numLayers = len(p.layers)
+       }
+       return nil
+}
+func (p *lazyPacket) String() string { p.Layers(); return p.packetString() }
+func (p *lazyPacket) Dump() string   { p.Layers(); return p.packetDump() }
+
+// DecodeOptions tells gopacket how to decode a packet.
+type DecodeOptions struct {
+       // Lazy decoding decodes the minimum number of layers needed to return data
+       // for a packet at each function call.  Be careful using this with concurrent
+       // packet processors, as each call to packet.* could mutate the packet, and
+       // two concurrent function calls could interact poorly.
+       Lazy bool
+       // NoCopy decoding doesn't copy its input buffer into storage that's owned by
+       // the packet.  If you can guarantee that the bytes underlying the slice
+       // passed into NewPacket aren't going to be modified, this can be faster.  If
+       // there's any chance that those bytes WILL be changed, this will invalidate
+       // your packets.
+       NoCopy bool
+       // SkipDecodeRecovery skips over panic recovery during packet decoding.
+       // Normally, when packets decode, if a panic occurs, that panic is captured
+       // by a recover(), and a DecodeFailure layer is added to the packet detailing
+       // the issue.  If this flag is set, panics are instead allowed to continue up
+       // the stack.
+       SkipDecodeRecovery bool
+       // DecodeStreamsAsDatagrams enables routing of application-level layers in the TCP
+       // decoder. If true, we should try to decode layers after TCP in single packets.
+       // This is disabled by default because the reassembly package drives the decoding
+       // of TCP payload data after reassembly.
+       DecodeStreamsAsDatagrams bool
+}
+
+// Default decoding provides the safest (but slowest) method for decoding
+// packets.  It eagerly processes all layers (so it's concurrency-safe) and it
+// copies its input buffer upon creation of the packet (so the packet remains
+// valid if the underlying slice is modified.  Both of these take time,
+// though, so beware.  If you can guarantee that the packet will only be used
+// by one goroutine at a time, set Lazy decoding.  If you can guarantee that
+// the underlying slice won't change, set NoCopy decoding.
+var Default = DecodeOptions{}
+
+// Lazy is a DecodeOptions with just Lazy set.
+var Lazy = DecodeOptions{Lazy: true}
+
+// NoCopy is a DecodeOptions with just NoCopy set.
+var NoCopy = DecodeOptions{NoCopy: true}
+
+// DecodeStreamsAsDatagrams is a DecodeOptions with just DecodeStreamsAsDatagrams set.
+var DecodeStreamsAsDatagrams = DecodeOptions{DecodeStreamsAsDatagrams: true}
+
+// NewPacket creates a new Packet object from a set of bytes.  The
+// firstLayerDecoder tells it how to interpret the first layer from the bytes,
+// future layers will be generated from that first layer automatically.
+func NewPacket(data []byte, firstLayerDecoder Decoder, options DecodeOptions) Packet {
+       if !options.NoCopy {
+               dataCopy := make([]byte, len(data))
+               copy(dataCopy, data)
+               data = dataCopy
+       }
+       if options.Lazy {
+               p := &lazyPacket{
+                       packet: packet{data: data, decodeOptions: options},
+                       next:   firstLayerDecoder,
+               }
+               p.layers = p.initialLayers[:0]
+               // Crazy craziness:
+               // If the following return statemet is REMOVED, and Lazy is FALSE, then
+               // eager packet processing becomes 17% FASTER.  No, there is no logical
+               // explanation for this.  However, it's such a hacky micro-optimization that
+               // we really can't rely on it.  It appears to have to do with the size the
+               // compiler guesses for this function's stack space, since one symptom is
+               // that with the return statement in place, we more than double calls to
+               // runtime.morestack/runtime.lessstack.  We'll hope the compiler gets better
+               // over time and we get this optimization for free.  Until then, we'll have
+               // to live with slower packet processing.
+               return p
+       }
+       p := &eagerPacket{
+               packet: packet{data: data, decodeOptions: options},
+       }
+       p.layers = p.initialLayers[:0]
+       p.initialDecode(firstLayerDecoder)
+       return p
+}
+
+// PacketDataSource is an interface for some source of packet data.  Users may
+// create their own implementations, or use the existing implementations in
+// gopacket/pcap (libpcap, allows reading from live interfaces or from
+// pcap files) or gopacket/pfring (PF_RING, allows reading from live
+// interfaces).
+type PacketDataSource interface {
+       // ReadPacketData returns the next packet available from this data source.
+       // It returns:
+       //  data:  The bytes of an individual packet.
+       //  ci:  Metadata about the capture
+       //  err:  An error encountered while reading packet data.  If err != nil,
+       //    then data/ci will be ignored.
+       ReadPacketData() (data []byte, ci CaptureInfo, err error)
+}
+
+// ConcatFinitePacketDataSources returns a PacketDataSource that wraps a set
+// of internal PacketDataSources, each of which will stop with io.EOF after
+// reading a finite number of packets.  The returned PacketDataSource will
+// return all packets from the first finite source, followed by all packets from
+// the second, etc.  Once all finite sources have returned io.EOF, the returned
+// source will as well.
+func ConcatFinitePacketDataSources(pds ...PacketDataSource) PacketDataSource {
+       c := concat(pds)
+       return &c
+}
+
+type concat []PacketDataSource
+
+func (c *concat) ReadPacketData() (data []byte, ci CaptureInfo, err error) {
+       for len(*c) > 0 {
+               data, ci, err = (*c)[0].ReadPacketData()
+               if err == io.EOF {
+                       *c = (*c)[1:]
+                       continue
+               }
+               return
+       }
+       return nil, CaptureInfo{}, io.EOF
+}
+
+// ZeroCopyPacketDataSource is an interface to pull packet data from sources
+// that allow data to be returned without copying to a user-controlled buffer.
+// It's very similar to PacketDataSource, except that the caller must be more
+// careful in how the returned buffer is handled.
+type ZeroCopyPacketDataSource interface {
+       // ZeroCopyReadPacketData returns the next packet available from this data source.
+       // It returns:
+       //  data:  The bytes of an individual packet.  Unlike with
+       //    PacketDataSource's ReadPacketData, the slice returned here points
+       //    to a buffer owned by the data source.  In particular, the bytes in
+       //    this buffer may be changed by future calls to
+       //    ZeroCopyReadPacketData.  Do not use the returned buffer after
+       //    subsequent ZeroCopyReadPacketData calls.
+       //  ci:  Metadata about the capture
+       //  err:  An error encountered while reading packet data.  If err != nil,
+       //    then data/ci will be ignored.
+       ZeroCopyReadPacketData() (data []byte, ci CaptureInfo, err error)
+}
+
+// PacketSource reads in packets from a PacketDataSource, decodes them, and
+// returns them.
+//
+// There are currently two different methods for reading packets in through
+// a PacketSource:
+//
+// Reading With Packets Function
+//
+// This method is the most convenient and easiest to code, but lacks
+// flexibility.  Packets returns a 'chan Packet', then asynchronously writes
+// packets into that channel.  Packets uses a blocking channel, and closes
+// it if an io.EOF is returned by the underlying PacketDataSource.  All other
+// PacketDataSource errors are ignored and discarded.
+//  for packet := range packetSource.Packets() {
+//    ...
+//  }
+//
+// Reading With NextPacket Function
+//
+// This method is the most flexible, and exposes errors that may be
+// encountered by the underlying PacketDataSource.  It's also the fastest
+// in a tight loop, since it doesn't have the overhead of a channel
+// read/write.  However, it requires the user to handle errors, most
+// importantly the io.EOF error in cases where packets are being read from
+// a file.
+//  for {
+//    packet, err := packetSource.NextPacket()
+//    if err == io.EOF {
+//      break
+//    } else if err != nil {
+//      log.Println("Error:", err)
+//      continue
+//    }
+//    handlePacket(packet)  // Do something with each packet.
+//  }
+type PacketSource struct {
+       source  PacketDataSource
+       decoder Decoder
+       // DecodeOptions is the set of options to use for decoding each piece
+       // of packet data.  This can/should be changed by the user to reflect the
+       // way packets should be decoded.
+       DecodeOptions
+       c chan Packet
+}
+
+// NewPacketSource creates a packet data source.
+func NewPacketSource(source PacketDataSource, decoder Decoder) *PacketSource {
+       return &PacketSource{
+               source:  source,
+               decoder: decoder,
+       }
+}
+
+// NextPacket returns the next decoded packet from the PacketSource.  On error,
+// it returns a nil packet and a non-nil error.
+func (p *PacketSource) NextPacket() (Packet, error) {
+       data, ci, err := p.source.ReadPacketData()
+       if err != nil {
+               return nil, err
+       }
+       packet := NewPacket(data, p.decoder, p.DecodeOptions)
+       m := packet.Metadata()
+       m.CaptureInfo = ci
+       m.Truncated = m.Truncated || ci.CaptureLength < ci.Length
+       return packet, nil
+}
+
+// packetsToChannel reads in all packets from the packet source and sends them
+// to the given channel.  When it receives an error, it ignores it.  When it
+// receives an io.EOF, it closes the channel.
+func (p *PacketSource) packetsToChannel() {
+       defer close(p.c)
+       for {
+               packet, err := p.NextPacket()
+               if err == io.EOF {
+                       return
+               } else if err == nil {
+                       p.c <- packet
+               }
+       }
+}
+
+// Packets returns a channel of packets, allowing easy iterating over
+// packets.  Packets will be asynchronously read in from the underlying
+// PacketDataSource and written to the returned channel.  If the underlying
+// PacketDataSource returns an io.EOF error, the channel will be closed.
+// If any other error is encountered, it is ignored.
+//
+//  for packet := range packetSource.Packets() {
+//    handlePacket(packet)  // Do something with each packet.
+//  }
+//
+// If called more than once, returns the same channel.
+func (p *PacketSource) Packets() chan Packet {
+       if p.c == nil {
+               p.c = make(chan Packet, 1000)
+               go p.packetsToChannel()
+       }
+       return p.c
+}
diff --git a/vendor/github.com/google/gopacket/packet_test.go b/vendor/github.com/google/gopacket/packet_test.go
new file mode 100644 (file)
index 0000000..bd05448
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "io"
+       "reflect"
+       "testing"
+)
+
+type embedded struct {
+       A, B int
+}
+
+type embedding struct {
+       embedded
+       C, D int
+}
+
+func TestDumpEmbedded(t *testing.T) {
+       e := embedding{embedded: embedded{A: 1, B: 2}, C: 3, D: 4}
+       if got, want := layerString(reflect.ValueOf(e), false, false), "{A=1 B=2 C=3 D=4}"; got != want {
+               t.Errorf("embedded dump mismatch:\n   got: %v\n  want: %v", got, want)
+       }
+}
+
+type singlePacketSource [1][]byte
+
+func (s *singlePacketSource) ReadPacketData() ([]byte, CaptureInfo, error) {
+       if (*s)[0] == nil {
+               return nil, CaptureInfo{}, io.EOF
+       }
+       out := (*s)[0]
+       (*s)[0] = nil
+       return out, CaptureInfo{}, nil
+}
+
+func TestConcatPacketSources(t *testing.T) {
+       sourceA := &singlePacketSource{[]byte{1}}
+       sourceB := &singlePacketSource{[]byte{2}}
+       sourceC := &singlePacketSource{[]byte{3}}
+       concat := ConcatFinitePacketDataSources(sourceA, sourceB, sourceC)
+       a, _, err := concat.ReadPacketData()
+       if err != nil || len(a) != 1 || a[0] != 1 {
+               t.Errorf("expected [1], got %v/%v", a, err)
+       }
+       b, _, err := concat.ReadPacketData()
+       if err != nil || len(b) != 1 || b[0] != 2 {
+               t.Errorf("expected [2], got %v/%v", b, err)
+       }
+       c, _, err := concat.ReadPacketData()
+       if err != nil || len(c) != 1 || c[0] != 3 {
+               t.Errorf("expected [3], got %v/%v", c, err)
+       }
+       if _, _, err := concat.ReadPacketData(); err != io.EOF {
+               t.Errorf("expected io.EOF, got %v", err)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/parser.go b/vendor/github.com/google/gopacket/parser.go
new file mode 100644 (file)
index 0000000..f786834
--- /dev/null
@@ -0,0 +1,198 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "fmt"
+)
+
+// DecodingLayer is an interface for packet layers that can decode themselves.
+//
+// The important part of DecodingLayer is that they decode themselves in-place.
+// Calling DecodeFromBytes on a DecodingLayer totally resets the entire layer to
+// the new state defined by the data passed in.  A returned error leaves the
+// DecodingLayer in an unknown intermediate state, thus its fields should not be
+// trusted.
+//
+// Because the DecodingLayer is resetting its own fields, a call to
+// DecodeFromBytes should normally not require any memory allocation.
+type DecodingLayer interface {
+       // DecodeFromBytes resets the internal state of this layer to the state
+       // defined by the passed-in bytes.  Slices in the DecodingLayer may
+       // reference the passed-in data, so care should be taken to copy it
+       // first should later modification of data be required before the
+       // DecodingLayer is discarded.
+       DecodeFromBytes(data []byte, df DecodeFeedback) error
+       // CanDecode returns the set of LayerTypes this DecodingLayer can
+       // decode.  For Layers that are also DecodingLayers, this will most
+       // often be that Layer's LayerType().
+       CanDecode() LayerClass
+       // NextLayerType returns the LayerType which should be used to decode
+       // the LayerPayload.
+       NextLayerType() LayerType
+       // LayerPayload is the set of bytes remaining to decode after a call to
+       // DecodeFromBytes.
+       LayerPayload() []byte
+}
+
+// DecodingLayerParser parses a given set of layer types.  See DecodeLayers for
+// more information on how DecodingLayerParser should be used.
+type DecodingLayerParser struct {
+       // DecodingLayerParserOptions is the set of options available to the
+       // user to define the parser's behavior.
+       DecodingLayerParserOptions
+       first    LayerType
+       decoders map[LayerType]DecodingLayer
+       df       DecodeFeedback
+       // Truncated is set when a decode layer detects that the packet has been
+       // truncated.
+       Truncated bool
+}
+
+// AddDecodingLayer adds a decoding layer to the parser.  This adds support for
+// the decoding layer's CanDecode layers to the parser... should they be
+// encountered, they'll be parsed.
+func (l *DecodingLayerParser) AddDecodingLayer(d DecodingLayer) {
+       for _, typ := range d.CanDecode().LayerTypes() {
+               l.decoders[typ] = d
+       }
+}
+
+// SetTruncated is used by DecodingLayers to set the Truncated boolean in the
+// DecodingLayerParser.  Users should simply read Truncated after calling
+// DecodeLayers.
+func (l *DecodingLayerParser) SetTruncated() {
+       l.Truncated = true
+}
+
+// NewDecodingLayerParser creates a new DecodingLayerParser and adds in all
+// of the given DecodingLayers with AddDecodingLayer.
+//
+// Each call to DecodeLayers will attempt to decode the given bytes first by
+// treating them as a 'first'-type layer, then by using NextLayerType on
+// subsequently decoded layers to find the next relevant decoder.  Should a
+// deoder not be available for the layer type returned by NextLayerType,
+// decoding will stop.
+func NewDecodingLayerParser(first LayerType, decoders ...DecodingLayer) *DecodingLayerParser {
+       dlp := &DecodingLayerParser{
+               decoders: make(map[LayerType]DecodingLayer),
+               first:    first,
+       }
+       dlp.df = dlp // Cast this once to the interface
+       for _, d := range decoders {
+               dlp.AddDecodingLayer(d)
+       }
+       return dlp
+}
+
+// DecodeLayers decodes as many layers as possible from the given data.  It
+// initially treats the data as layer type 'typ', then uses NextLayerType on
+// each subsequent decoded layer until it gets to a layer type it doesn't know
+// how to parse.
+//
+// For each layer successfully decoded, DecodeLayers appends the layer type to
+// the decoded slice.  DecodeLayers truncates the 'decoded' slice initially, so
+// there's no need to empty it yourself.
+//
+// This decoding method is about an order of magnitude faster than packet
+// decoding, because it only decodes known layers that have already been
+// allocated.  This means it doesn't need to allocate each layer it returns...
+// instead it overwrites the layers that already exist.
+//
+// Example usage:
+//    func main() {
+//      var eth layers.Ethernet
+//      var ip4 layers.IPv4
+//      var ip6 layers.IPv6
+//      var tcp layers.TCP
+//      var udp layers.UDP
+//      var payload gopacket.Payload
+//      parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &ip6, &tcp, &udp, &payload)
+//      var source gopacket.PacketDataSource = getMyDataSource()
+//      decodedLayers := make([]gopacket.LayerType, 0, 10)
+//      for {
+//        data, _, err := source.ReadPacketData()
+//        if err == nil {
+//          fmt.Println("Error reading packet data: ", err)
+//          continue
+//        }
+//        fmt.Println("Decoding packet")
+//        err = parser.DecodeLayers(data, &decodedLayers)
+//        for _, typ := range decodedLayers {
+//          fmt.Println("  Successfully decoded layer type", typ)
+//          switch typ {
+//            case layers.LayerTypeEthernet:
+//              fmt.Println("    Eth ", eth.SrcMAC, eth.DstMAC)
+//            case layers.LayerTypeIPv4:
+//              fmt.Println("    IP4 ", ip4.SrcIP, ip4.DstIP)
+//            case layers.LayerTypeIPv6:
+//              fmt.Println("    IP6 ", ip6.SrcIP, ip6.DstIP)
+//            case layers.LayerTypeTCP:
+//              fmt.Println("    TCP ", tcp.SrcPort, tcp.DstPort)
+//            case layers.LayerTypeUDP:
+//              fmt.Println("    UDP ", udp.SrcPort, udp.DstPort)
+//          }
+//        }
+//        if decodedLayers.Truncated {
+//          fmt.Println("  Packet has been truncated")
+//        }
+//        if err != nil {
+//          fmt.Println("  Error encountered:", err)
+//        }
+//      }
+//    }
+//
+// If DecodeLayers is unable to decode the next layer type, it will return the
+// error UnsupportedLayerType.
+func (l *DecodingLayerParser) DecodeLayers(data []byte, decoded *[]LayerType) (err error) {
+       l.Truncated = false
+       if !l.IgnorePanic {
+               defer panicToError(&err)
+       }
+       typ := l.first
+       *decoded = (*decoded)[:0] // Truncated decoded layers.
+       for len(data) > 0 {
+               decoder, ok := l.decoders[typ]
+               if !ok {
+                       return UnsupportedLayerType(typ)
+               } else if err = decoder.DecodeFromBytes(data, l.df); err != nil {
+                       return err
+               }
+               *decoded = append(*decoded, typ)
+               typ = decoder.NextLayerType()
+               data = decoder.LayerPayload()
+       }
+       return nil
+}
+
+// UnsupportedLayerType is returned by DecodingLayerParser if DecodeLayers
+// encounters a layer type that the DecodingLayerParser has no decoder for.
+type UnsupportedLayerType LayerType
+
+// Error implements the error interface, returning a string to say that the
+// given layer type is unsupported.
+func (e UnsupportedLayerType) Error() string {
+       return fmt.Sprintf("No decoder for layer type %v", LayerType(e))
+}
+
+func panicToError(e *error) {
+       if r := recover(); r != nil {
+               *e = fmt.Errorf("panic: %v", r)
+       }
+}
+
+// DecodingLayerParserOptions provides options to affect the behavior of a given
+// DecodingLayerParser.
+type DecodingLayerParserOptions struct {
+       // IgnorePanic determines whether a DecodingLayerParser should stop
+       // panics on its own (by returning them as an error from DecodeLayers)
+       // or should allow them to raise up the stack.  Handling errors does add
+       // latency to the process of decoding layers, but is much safer for
+       // callers.  IgnorePanic defaults to false, thus if the caller does
+       // nothing decode panics will be returned as errors.
+       IgnorePanic bool
+}
diff --git a/vendor/github.com/google/gopacket/pcap/doc.go b/vendor/github.com/google/gopacket/pcap/doc.go
new file mode 100644 (file)
index 0000000..5bf8d86
--- /dev/null
@@ -0,0 +1,106 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*
+Package pcap allows users of gopacket to read packets off the wire or from
+pcap files.
+
+This package is meant to be used with its parent,
+http://github.com/google/gopacket, although it can also be used independently
+if you just want to get packet data from the wire.
+
+Reading PCAP Files
+
+The following code can be used to read in data from a pcap file.
+
+ if handle, err := pcap.OpenOffline("/path/to/my/file"); err != nil {
+   panic(err)
+ } else {
+   packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+   for packet := range packetSource.Packets() {
+     handlePacket(packet)  // Do something with a packet here.
+   }
+ }
+
+Reading Live Packets
+
+The following code can be used to read in data from a live device, in this case
+"eth0".
+
+ if handle, err := pcap.OpenLive("eth0", 1600, true, pcap.BlockForever); err != nil {
+   panic(err)
+ } else if err := handle.SetBPFFilter("tcp and port 80"); err != nil {  // optional
+   panic(err)
+ } else {
+   packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+   for packet := range packetSource.Packets() {
+     handlePacket(packet)  // Do something with a packet here.
+   }
+ }
+
+Inactive Handles
+
+Newer PCAP functionality requires the concept of an 'inactive' PCAP handle.
+Instead of constantly adding new arguments to pcap_open_live, users now call
+pcap_create to create a handle, set it up with a bunch of optional function
+calls, then call pcap_activate to activate it.  This library mirrors that
+mechanism, for those that want to expose/use these new features:
+
+  inactive, err := pcap.NewInactiveHandle(deviceName)
+  if err != nil {
+    log.Fatal(err)
+  }
+  defer inactive.CleanUp()
+
+  // Call various functions on inactive to set it up the way you'd like:
+  if err = inactive.SetTimeout(time.Minute); err != nil {
+    log.Fatal(err)
+  } else if err = inactive.SetTimestampSource("foo"); err != nil {
+    log.Fatal(err)
+  }
+
+  // Finally, create the actual handle by calling Activate:
+  handle, err := inactive.Activate()  // after this, inactive is no longer valid
+  if err != nil {
+    log.Fatal(err)
+  }
+  defer handle.Close()
+
+  // Now use your handle as you see fit.
+
+PCAP Timeouts
+
+pcap.OpenLive and pcap.SetTimeout both take timeouts.
+If you don't care about timeouts, just pass in BlockForever,
+which should do what you expect with minimal fuss.
+
+A timeout of 0 is not recommended.  Some platforms, like Macs
+(http://www.manpages.info/macosx/pcap.3.html) say:
+  The read timeout is used to arrange that the read not necessarily return
+  immediately when a packet is seen, but that it wait for some amount of time
+  to allow more packets to arrive and to read multiple packets from the OS
+  kernel in one operation.
+This means that if you only capture one packet, the kernel might decide to wait
+'timeout' for more packets to batch with it before returning.  A timeout of
+0, then, means 'wait forever for more packets', which is... not good.
+
+To get around this, we've introduced the following behavior:  if a negative
+timeout is passed in, we set the positive timeout in the handle, then loop
+internally in ReadPacketData/ZeroCopyReadPacketData when we see timeout
+errors.
+
+PCAP File Writing
+
+This package does not implement PCAP file writing.  However, gopacket/pcapgo
+does!  Look there if you'd like to write PCAP files.
+
+Note For Windows 10 Users
+
+If you're trying to use 64-bit winpcap on Windows 10, you might have to do
+the crazy hijinks detailed at
+http://stackoverflow.com/questions/38047858/compile-gopacket-on-windows-64bit
+*/
+package pcap
diff --git a/vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go b/vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go
new file mode 100644 (file)
index 0000000..cbcae17
--- /dev/null
@@ -0,0 +1,247 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// This benchmark reads in file <tempdir>/gopacket_benchmark.pcap and measures
+// the time it takes to decode all packets from that file.  If the file doesn't
+// exist, it's pulled down from a publicly available location.  However, you can
+// feel free to substitute your own file at that location, in which case the
+// benchmark will run on your own data.
+//
+// It's also useful for figuring out which packets may be causing errors.  Pass
+// in the --printErrors flag, and it'll print out error layers for each packet
+// that has them.  This includes any packets that it's just unable to decode,
+// which is a great way to find new protocols to decode, and get test packets to
+// write tests for them.
+package main
+
+import (
+       "compress/gzip"
+       "encoding/hex"
+       "flag"
+       "fmt"
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+       "github.com/google/gopacket/pcap"
+       "github.com/google/gopacket/tcpassembly"
+       "io"
+       "io/ioutil"
+       "net/http"
+       "os"
+       "runtime"
+       "runtime/pprof"
+       "time"
+)
+
+var decodeLazy *bool = flag.Bool("lazy", false, "If true, use lazy decoding")
+var decodeNoCopy *bool = flag.Bool("nocopy", true, "If true, avoid an extra copy when decoding packets")
+var printErrors *bool = flag.Bool("printErrors", false, "If true, check for and print error layers.")
+var printLayers *bool = flag.Bool("printLayers", false, "If true, print out the layers of each packet")
+var repeat *int = flag.Int("repeat", 5, "Read over the file N times")
+var cpuProfile *string = flag.String("cpuprofile", "", "If set, write CPU profile to filename")
+var url *string = flag.String("url", "http://www.ll.mit.edu/mission/communications/cyber/CSTcorpora/ideval/data/1999/training/week1/tuesday/inside.tcpdump.gz", "URL to gzip'd pcap file")
+
+type BufferPacketSource struct {
+       index int
+       data  [][]byte
+       ci    []gopacket.CaptureInfo
+}
+
+func NewBufferPacketSource(p gopacket.PacketDataSource) *BufferPacketSource {
+       start := time.Now()
+       b := &BufferPacketSource{}
+       for {
+               data, ci, err := p.ReadPacketData()
+               if err == io.EOF {
+                       break
+               }
+               b.data = append(b.data, data)
+               b.ci = append(b.ci, ci)
+       }
+       duration := time.Since(start)
+       fmt.Printf("Reading packet data into memory: %d packets in %v, %v per packet\n", len(b.data), duration, duration/time.Duration(len(b.data)))
+       return b
+}
+
+func (b *BufferPacketSource) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+       if b.index >= len(b.data) {
+               err = io.EOF
+               return
+       }
+       data = b.data[b.index]
+       ci = b.ci[b.index]
+       b.index++
+       return
+}
+
+func (b *BufferPacketSource) Reset() {
+       runtime.GC()
+       b.index = 0
+}
+
+func main() {
+       flag.Parse()
+       filename := os.TempDir() + string(os.PathSeparator) + "gopacket_benchmark.pcap"
+       if _, err := os.Stat(filename); err != nil {
+               // This URL points to a publicly available packet data set from a DARPA
+               // intrusion detection evaluation.  See
+               // http://www.ll.mit.edu/mission/communications/cyber/CSTcorpora/ideval/data/1999/training/week1/index.html
+               // for more details.
+               fmt.Println("Local pcap file", filename, "doesn't exist, reading from", *url)
+               if resp, err := http.Get(*url); err != nil {
+                       panic(err)
+               } else if out, err := os.Create(filename); err != nil {
+                       panic(err)
+               } else if gz, err := gzip.NewReader(resp.Body); err != nil {
+                       panic(err)
+               } else if n, err := io.Copy(out, gz); err != nil {
+                       panic(err)
+               } else if err := gz.Close(); err != nil {
+                       panic(err)
+               } else if err := out.Close(); err != nil {
+                       panic(err)
+               } else {
+                       fmt.Println("Successfully read", n, "bytes from url, unzipped to local storage")
+               }
+       }
+       fmt.Println("Reading file once through to hopefully cache most of it")
+       if f, err := os.Open(filename); err != nil {
+               panic(err)
+       } else if n, err := io.Copy(ioutil.Discard, f); err != nil {
+               panic(err)
+       } else if err := f.Close(); err != nil {
+               panic(err)
+       } else {
+               fmt.Println("Read in file", filename, ", total of", n, "bytes")
+       }
+       if *cpuProfile != "" {
+               if cpu, err := os.Create(*cpuProfile); err != nil {
+                       panic(err)
+               } else if err := pprof.StartCPUProfile(cpu); err != nil {
+                       panic(err)
+               } else {
+                       defer func() {
+                               pprof.StopCPUProfile()
+                               cpu.Close()
+                       }()
+               }
+       }
+       var packetDataSource *BufferPacketSource
+       var packetSource *gopacket.PacketSource
+       fmt.Printf("Opening file %q for read\n", filename)
+       if h, err := pcap.OpenOffline(filename); err != nil {
+               panic(err)
+       } else {
+               fmt.Println("Reading all packets into memory with BufferPacketSource.")
+               start := time.Now()
+               packetDataSource = NewBufferPacketSource(h)
+               duration := time.Since(start)
+               fmt.Printf("Time to read packet data into memory from file: %v\n", duration)
+               packetSource = gopacket.NewPacketSource(packetDataSource, h.LinkType())
+               packetSource.DecodeOptions.Lazy = *decodeLazy
+               packetSource.DecodeOptions.NoCopy = *decodeNoCopy
+       }
+       fmt.Println()
+       for i := 0; i < *repeat; i++ {
+               packetDataSource.Reset()
+               fmt.Printf("Benchmarking decode %d/%d\n", i+1, *repeat)
+               benchmarkPacketDecode(packetSource)
+       }
+       fmt.Println()
+       for i := 0; i < *repeat; i++ {
+               packetDataSource.Reset()
+               fmt.Printf("Benchmarking decoding layer parser %d/%d\n", i+1, *repeat)
+               benchmarkLayerDecode(packetDataSource, false)
+       }
+       fmt.Println()
+       for i := 0; i < *repeat; i++ {
+               packetDataSource.Reset()
+               fmt.Printf("Benchmarking decoding layer parser with assembly %d/%d\n", i+1, *repeat)
+               benchmarkLayerDecode(packetDataSource, true)
+       }
+}
+
+func benchmarkPacketDecode(packetSource *gopacket.PacketSource) {
+       count, errors := 0, 0
+       start := time.Now()
+       for packet, err := packetSource.NextPacket(); err != io.EOF; packet, err = packetSource.NextPacket() {
+               if err != nil {
+                       fmt.Println("Error reading in packet:", err)
+                       continue
+               }
+               count++
+               var hasError bool
+               if *printErrors && packet.ErrorLayer() != nil {
+                       fmt.Println("\n\n\nError decoding packet:", packet.ErrorLayer().Error())
+                       fmt.Println(hex.Dump(packet.Data()))
+                       fmt.Printf("%#v\n", packet.Data())
+                       errors++
+                       hasError = true
+               }
+               if *printLayers || hasError {
+                       fmt.Printf("\n=== PACKET %d ===\n", count)
+                       for _, l := range packet.Layers() {
+                               fmt.Printf("--- LAYER %v ---\n%#v\n\n", l.LayerType(), l)
+                       }
+                       fmt.Println()
+               }
+       }
+       duration := time.Since(start)
+       fmt.Printf("\tRead in %v packets in %v, %v per packet\n", count, duration, duration/time.Duration(count))
+       if *printErrors {
+               fmt.Printf("%v errors, successfully decoded %.02f%%\n", errors, float64(count-errors)*100.0/float64(count))
+       }
+}
+
+type streamFactory struct {
+}
+
+func (s *streamFactory) New(netFlow, tcpFlow gopacket.Flow) tcpassembly.Stream {
+       return s
+}
+func (s *streamFactory) Reassembled([]tcpassembly.Reassembly) {
+}
+func (s *streamFactory) ReassemblyComplete() {
+}
+
+func benchmarkLayerDecode(source *BufferPacketSource, assemble bool) {
+       var tcp layers.TCP
+       var ip layers.IPv4
+       var eth layers.Ethernet
+       var udp layers.UDP
+       var icmp layers.ICMPv4
+       var payload gopacket.Payload
+       parser := gopacket.NewDecodingLayerParser(
+               layers.LayerTypeEthernet,
+               &eth, &ip, &icmp, &tcp, &udp, &payload)
+       pool := tcpassembly.NewStreamPool(&streamFactory{})
+       assembler := tcpassembly.NewAssembler(pool)
+       var decoded []gopacket.LayerType
+       start := time.Now()
+       packets, decodedlayers, assembled := 0, 0, 0
+       for {
+               packets++
+               data, ci, err := source.ReadPacketData()
+               if err == io.EOF {
+                       break
+               } else if err != nil {
+                       fmt.Println("Error reading packet: ", err)
+                       continue
+               }
+               err = parser.DecodeLayers(data, &decoded)
+               for _, typ := range decoded {
+                       decodedlayers++
+                       if typ == layers.LayerTypeTCP && assemble {
+                               assembled++
+                               assembler.AssembleWithTimestamp(ip.NetworkFlow(), &tcp, ci.Timestamp)
+                       }
+               }
+       }
+       if assemble {
+               assembler.FlushAll()
+       }
+       duration := time.Since(start)
+       fmt.Printf("\tRead in %d packets in %v, decoded %v layers, assembled %v packets: %v per packet\n", packets, duration, decodedlayers, assembled, duration/time.Duration(packets))
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap.go b/vendor/github.com/google/gopacket/pcap/pcap.go
new file mode 100644 (file)
index 0000000..1ecdf03
--- /dev/null
@@ -0,0 +1,1005 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcap
+
+/*
+#cgo solaris LDFLAGS: -L /opt/local/lib -lpcap
+#cgo linux LDFLAGS: -lpcap
+#cgo dragonfly LDFLAGS: -lpcap
+#cgo freebsd LDFLAGS: -lpcap
+#cgo openbsd LDFLAGS: -lpcap
+#cgo netbsd LDFLAGS: -lpcap
+#cgo darwin LDFLAGS: -lpcap
+#cgo windows CFLAGS: -I C:/WpdPack/Include
+#cgo windows,386 LDFLAGS: -L C:/WpdPack/Lib -lwpcap
+#cgo windows,amd64 LDFLAGS: -L C:/WpdPack/Lib/x64 -lwpcap
+#include <stdlib.h>
+#include <pcap.h>
+
+// Some old versions of pcap don't define this constant.
+#ifndef PCAP_NETMASK_UNKNOWN
+#define PCAP_NETMASK_UNKNOWN 0xffffffff
+#endif
+
+// libpcap doesn't actually export its version in a #define-guardable way,
+// so we have to use other defined things to differentiate versions.
+// We assume at least libpcap v1.1 at the moment.
+// See http://upstream-tracker.org/versions/libpcap.html
+
+#ifndef PCAP_ERROR_TSTAMP_PRECISION_NOTSUP  // < v1.5
+
+int pcap_set_immediate_mode(pcap_t *p, int mode) {
+  return PCAP_ERROR;
+}
+
+#ifndef PCAP_TSTAMP_HOST  // < v1.2
+
+int pcap_set_tstamp_type(pcap_t* p, int t) { return -1; }
+int pcap_list_tstamp_types(pcap_t* p, int** t) { return 0; }
+void pcap_free_tstamp_types(int *tstamp_types) {}
+const char* pcap_tstamp_type_val_to_name(int t) {
+       return "pcap timestamp types not supported";
+}
+int pcap_tstamp_type_name_to_val(const char* t) {
+       return PCAP_ERROR;
+}
+
+#endif  // < v1.2
+#endif  // < v1.5
+
+#ifndef PCAP_ERROR_PROMISC_PERM_DENIED
+#define PCAP_ERROR_PROMISC_PERM_DENIED -11
+#endif
+
+// WinPcap doesn't export a pcap_statustostr, so use the less-specific
+// pcap_strerror.  Note that linking against something like cygwin libpcap
+// may result is less-specific error messages.
+#ifdef WIN32
+#define pcap_statustostr pcap_strerror
+
+// WinPcap also doesn't export pcap_can_set_rfmon and pcap_set_rfmon,
+// as those are handled by separate libraries (airpcap).
+// https://www.winpcap.org/docs/docs_412/html/group__wpcapfunc.html
+// Stub out those functions here, returning values that indicate rfmon
+// setting is unavailable/unsuccessful.
+int pcap_can_set_rfmon(pcap_t *p) {
+       return 0;
+}
+
+int pcap_set_rfmon(pcap_t *p, int rfmon) {
+       return PCAP_ERROR;
+}
+#endif
+
+// Windows, Macs, and Linux all use different time types.  Joy.
+#ifdef WIN32
+#define gopacket_time_secs_t long
+#define gopacket_time_usecs_t long
+#elif __APPLE__
+#define gopacket_time_secs_t __darwin_time_t
+#define gopacket_time_usecs_t __darwin_suseconds_t
+#elif __GLIBC__
+#define gopacket_time_secs_t __time_t
+#define gopacket_time_usecs_t __suseconds_t
+#else  // Some form of linux/bsd/etc...
+#include <sys/param.h>
+#ifdef __OpenBSD__
+#define gopacket_time_secs_t u_int32_t
+#define gopacket_time_usecs_t u_int32_t
+#else
+#define gopacket_time_secs_t time_t
+#define gopacket_time_usecs_t suseconds_t
+#endif
+#endif
+*/
+import "C"
+
+import (
+       "errors"
+       "fmt"
+       "io"
+       "net"
+       "reflect"
+       "runtime"
+       "strconv"
+       "sync"
+       "sync/atomic"
+       "syscall"
+       "time"
+       "unsafe"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+)
+
+const errorBufferSize = 256
+
+// MaxBpfInstructions is the maximum number of BPF instructions supported (BPF_MAXINSNS),
+// taken from Linux kernel: include/uapi/linux/bpf_common.h
+//
+// https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf_common.h
+const MaxBpfInstructions = 4096
+
+// 8 bytes per instruction, max 4096 instructions
+const bpfInstructionBufferSize = 8 * MaxBpfInstructions
+
+// Handle provides a connection to a pcap handle, allowing users to read packets
+// off the wire (Next), inject packets onto the wire (Inject), and
+// perform a number of other functions to affect and understand packet output.
+//
+// Handles are already pcap_activate'd
+type Handle struct {
+       // cptr is the handle for the actual pcap C object.
+       cptr        *C.pcap_t
+       timeout     time.Duration
+       device      string
+       deviceIndex int
+       mu          sync.Mutex
+       closeMu     sync.Mutex
+       // stop is set to a non-zero value by Handle.Close to signal to
+       // getNextBufPtrLocked to stop trying to read packets
+       stop uint64
+
+       // Since pointers to these objects are passed into a C function, if
+       // they're declared locally then the Go compiler thinks they may have
+       // escaped into C-land, so it allocates them on the heap.  This causes a
+       // huge memory hit, so to handle that we store them here instead.
+       pkthdr *C.struct_pcap_pkthdr
+       bufptr *C.u_char
+}
+
+// Stats contains statistics on how many packets were handled by a pcap handle,
+// and what was done with those packets.
+type Stats struct {
+       PacketsReceived  int
+       PacketsDropped   int
+       PacketsIfDropped int
+}
+
+// Interface describes a single network interface on a machine.
+type Interface struct {
+       Name        string
+       Description string
+       Addresses   []InterfaceAddress
+       // TODO: add more elements
+}
+
+// Datalink describes the datalink
+type Datalink struct {
+       Name        string
+       Description string
+}
+
+// InterfaceAddress describes an address associated with an Interface.
+// Currently, it's IPv4/6 specific.
+type InterfaceAddress struct {
+       IP      net.IP
+       Netmask net.IPMask // Netmask may be nil if we were unable to retrieve it.
+       // TODO: add broadcast + PtP dst ?
+}
+
+// BPF is a compiled filter program, useful for offline packet matching.
+type BPF struct {
+       orig string
+       bpf  _Ctype_struct_bpf_program // takes a finalizer, not overriden by outsiders
+}
+
+// BPFInstruction is a byte encoded structure holding a BPF instruction
+type BPFInstruction struct {
+       Code uint16
+       Jt   uint8
+       Jf   uint8
+       K    uint32
+}
+
+// BlockForever causes it to block forever waiting for packets, when passed
+// into SetTimeout or OpenLive, while still returning incoming packets to userland relatively
+// quickly.
+const BlockForever = -time.Millisecond * 10
+
+func timeoutMillis(timeout time.Duration) C.int {
+       // Flip sign if necessary.  See package docs on timeout for reasoning behind this.
+       if timeout < 0 {
+               timeout *= -1
+       }
+       // Round up
+       if timeout != 0 && timeout < time.Millisecond {
+               timeout = time.Millisecond
+       }
+       return C.int(timeout / time.Millisecond)
+}
+
+// OpenLive opens a device and returns a *Handle.
+// It takes as arguments the name of the device ("eth0"), the maximum size to
+// read for each packet (snaplen), whether to put the interface in promiscuous
+// mode, and a timeout.
+//
+// See the package documentation for important details regarding 'timeout'.
+func OpenLive(device string, snaplen int32, promisc bool, timeout time.Duration) (handle *Handle, _ error) {
+       buf := (*C.char)(C.calloc(errorBufferSize, 1))
+       defer C.free(unsafe.Pointer(buf))
+
+       var pro C.int
+       if promisc {
+               pro = 1
+       }
+       p := &Handle{timeout: timeout, device: device}
+
+       ifc, err := net.InterfaceByName(device)
+       if err != nil {
+               // The device wasn't found in the OS, but could be "any"
+               // Set index to 0
+               p.deviceIndex = 0
+       } else {
+               p.deviceIndex = ifc.Index
+       }
+
+       dev := C.CString(device)
+       defer C.free(unsafe.Pointer(dev))
+
+       p.cptr = C.pcap_open_live(dev, C.int(snaplen), pro, timeoutMillis(timeout), buf)
+       if p.cptr == nil {
+               return nil, errors.New(C.GoString(buf))
+       }
+
+       if err := p.openLive(); err != nil {
+               C.pcap_close(p.cptr)
+               return nil, err
+       }
+
+       return p, nil
+}
+
+// OpenOffline opens a file and returns its contents as a *Handle.
+func OpenOffline(file string) (handle *Handle, err error) {
+       buf := (*C.char)(C.calloc(errorBufferSize, 1))
+       defer C.free(unsafe.Pointer(buf))
+       cf := C.CString(file)
+       defer C.free(unsafe.Pointer(cf))
+
+       cptr := C.pcap_open_offline(cf, buf)
+       if cptr == nil {
+               return nil, errors.New(C.GoString(buf))
+       }
+       return &Handle{cptr: cptr}, nil
+}
+
+// NextError is the return code from a call to Next.
+type NextError int32
+
+// NextError implements the error interface.
+func (n NextError) Error() string {
+       switch n {
+       case NextErrorOk:
+               return "OK"
+       case NextErrorTimeoutExpired:
+               return "Timeout Expired"
+       case NextErrorReadError:
+               return "Read Error"
+       case NextErrorNoMorePackets:
+               return "No More Packets In File"
+       case NextErrorNotActivated:
+               return "Not Activated"
+       }
+       return strconv.Itoa(int(n))
+}
+
+// NextError values.
+const (
+       NextErrorOk             NextError = 1
+       NextErrorTimeoutExpired NextError = 0
+       NextErrorReadError      NextError = -1
+       // NextErrorNoMorePackets is returned when reading from a file (OpenOffline) and
+       // EOF is reached.  When this happens, Next() returns io.EOF instead of this.
+       NextErrorNoMorePackets NextError = -2
+       NextErrorNotActivated  NextError = -3
+)
+
+// ReadPacketData returns the next packet read from the pcap handle, along with an error
+// code associated with that packet.  If the packet is read successfully, the
+// returned error is nil.
+func (p *Handle) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+       p.mu.Lock()
+       err = p.getNextBufPtrLocked(&ci)
+       if err == nil {
+               data = C.GoBytes(unsafe.Pointer(p.bufptr), C.int(ci.CaptureLength))
+       }
+       p.mu.Unlock()
+       if err == NextErrorTimeoutExpired {
+               runtime.Gosched()
+       }
+       return
+}
+
+type activateError C.int
+
+const (
+       aeNoError      = 0
+       aeActivated    = C.PCAP_ERROR_ACTIVATED
+       aePromisc      = C.PCAP_WARNING_PROMISC_NOTSUP
+       aeNoSuchDevice = C.PCAP_ERROR_NO_SUCH_DEVICE
+       aeDenied       = C.PCAP_ERROR_PERM_DENIED
+       aeNotUp        = C.PCAP_ERROR_IFACE_NOT_UP
+)
+
+func (a activateError) Error() string {
+       switch a {
+       case aeNoError:
+               return "No Error"
+       case aeActivated:
+               return "Already Activated"
+       case aePromisc:
+               return "Cannot set as promisc"
+       case aeNoSuchDevice:
+               return "No Such Device"
+       case aeDenied:
+               return "Permission Denied"
+       case aeNotUp:
+               return "Interface Not Up"
+       default:
+               return fmt.Sprintf("unknown activated error: %d", a)
+       }
+}
+
+// getNextBufPtrLocked is shared code for ReadPacketData and
+// ZeroCopyReadPacketData.
+func (p *Handle) getNextBufPtrLocked(ci *gopacket.CaptureInfo) error {
+       if p.cptr == nil {
+               return io.EOF
+       }
+
+       for atomic.LoadUint64(&p.stop) == 0 {
+               // try to read a packet if one is immediately available
+               result := NextError(C.pcap_next_ex(p.cptr, &p.pkthdr, &p.bufptr))
+
+               switch result {
+               case NextErrorOk:
+                       // got a packet, set capture info and return
+                       sec := int64(p.pkthdr.ts.tv_sec)
+                       // convert micros to nanos
+                       nanos := int64(p.pkthdr.ts.tv_usec) * 1000
+
+                       ci.Timestamp = time.Unix(sec, nanos)
+                       ci.CaptureLength = int(p.pkthdr.caplen)
+                       ci.Length = int(p.pkthdr.len)
+                       ci.InterfaceIndex = p.deviceIndex
+
+                       return nil
+               case NextErrorNoMorePackets:
+                       // no more packets, return EOF rather than libpcap-specific error
+                       return io.EOF
+               case NextErrorTimeoutExpired:
+                       // Negative timeout means to loop forever, instead of actually returning
+                       // the timeout error.
+                       if p.timeout < 0 {
+                               // must have had a timeout... wait before trying again
+                               p.waitForPacket()
+                               continue
+                       }
+               default:
+                       return result
+               }
+       }
+
+       // stop must be set
+       return io.EOF
+}
+
+// ZeroCopyReadPacketData reads the next packet off the wire, and returns its data.
+// The slice returned by ZeroCopyReadPacketData points to bytes owned by the
+// the Handle.  Each call to ZeroCopyReadPacketData invalidates any data previously
+// returned by ZeroCopyReadPacketData.  Care must be taken not to keep pointers
+// to old bytes when using ZeroCopyReadPacketData... if you need to keep data past
+// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies
+// the bytes into a new buffer for you.
+//  data1, _, _ := handle.ZeroCopyReadPacketData()
+//  // do everything you want with data1 here, copying bytes out of it if you'd like to keep them around.
+//  data2, _, _ := handle.ZeroCopyReadPacketData()  // invalidates bytes in data1
+func (p *Handle) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+       p.mu.Lock()
+       err = p.getNextBufPtrLocked(&ci)
+       if err == nil {
+               slice := (*reflect.SliceHeader)(unsafe.Pointer(&data))
+               slice.Data = uintptr(unsafe.Pointer(p.bufptr))
+               slice.Len = ci.CaptureLength
+               slice.Cap = ci.CaptureLength
+       }
+       p.mu.Unlock()
+       if err == NextErrorTimeoutExpired {
+               runtime.Gosched()
+       }
+       return
+}
+
+// Close closes the underlying pcap handle.
+func (p *Handle) Close() {
+       p.closeMu.Lock()
+       defer p.closeMu.Unlock()
+
+       if p.cptr == nil {
+               return
+       }
+
+       atomic.StoreUint64(&p.stop, 1)
+
+       // wait for packet reader to stop
+       p.mu.Lock()
+       defer p.mu.Unlock()
+
+       C.pcap_close(p.cptr)
+       p.cptr = nil
+}
+
+// Error returns the current error associated with a pcap handle (pcap_geterr).
+func (p *Handle) Error() error {
+       return errors.New(C.GoString(C.pcap_geterr(p.cptr)))
+}
+
+// Stats returns statistics on the underlying pcap handle.
+func (p *Handle) Stats() (stat *Stats, err error) {
+       var cstats _Ctype_struct_pcap_stat
+       if -1 == C.pcap_stats(p.cptr, &cstats) {
+               return nil, p.Error()
+       }
+       return &Stats{
+               PacketsReceived:  int(cstats.ps_recv),
+               PacketsDropped:   int(cstats.ps_drop),
+               PacketsIfDropped: int(cstats.ps_ifdrop),
+       }, nil
+}
+
+// ListDataLinks obtains a list of all possible data link types supported for an interface.
+func (p *Handle) ListDataLinks() (datalinks []Datalink, err error) {
+       var dltbuf *C.int
+
+       n := int(C.pcap_list_datalinks(p.cptr, &dltbuf))
+       if -1 == n {
+               return nil, p.Error()
+       }
+
+       defer C.pcap_free_datalinks(dltbuf)
+
+       datalinks = make([]Datalink, n)
+
+       dltArray := (*[100]C.int)(unsafe.Pointer(dltbuf))
+
+       for i := 0; i < n; i++ {
+               expr := C.pcap_datalink_val_to_name((*dltArray)[i])
+               datalinks[i].Name = C.GoString(expr)
+
+               expr = C.pcap_datalink_val_to_description((*dltArray)[i])
+               datalinks[i].Description = C.GoString(expr)
+       }
+
+       return datalinks, nil
+}
+
+// pcap_compile is NOT thread-safe, so protect it.
+var pcapCompileMu sync.Mutex
+
+// compileBPFFilter always returns an allocated _Ctype_struct_bpf_program
+// It is the callers responsibility to free the memory again, e.g.
+//
+//    C.pcap_freecode(&bpf)
+//
+func (p *Handle) compileBPFFilter(expr string) (_Ctype_struct_bpf_program, error) {
+       errorBuf := (*C.char)(C.calloc(errorBufferSize, 1))
+       defer C.free(unsafe.Pointer(errorBuf))
+
+       var netp uint32
+       var maskp uint32
+
+       // Only do the lookup on network interfaces.
+       // No device indicates we're handling a pcap file.
+       if len(p.device) > 0 {
+               dev := C.CString(p.device)
+               defer C.free(unsafe.Pointer(dev))
+               if -1 == C.pcap_lookupnet(
+                       dev,
+                       (*C.bpf_u_int32)(unsafe.Pointer(&netp)),
+                       (*C.bpf_u_int32)(unsafe.Pointer(&maskp)),
+                       errorBuf,
+               ) {
+                       // We can't lookup the network, but that could be because the interface
+                       // doesn't have an IPv4.
+               }
+       }
+
+       var bpf _Ctype_struct_bpf_program
+       cexpr := C.CString(expr)
+       defer C.free(unsafe.Pointer(cexpr))
+
+       pcapCompileMu.Lock()
+       defer pcapCompileMu.Unlock()
+       if -1 == C.pcap_compile(p.cptr, &bpf, cexpr, 1, C.bpf_u_int32(maskp)) {
+               return bpf, p.Error()
+       }
+
+       return bpf, nil
+}
+
+// CompileBPFFilter compiles and returns a BPF filter with given a link type and capture length.
+func CompileBPFFilter(linkType layers.LinkType, captureLength int, expr string) ([]BPFInstruction, error) {
+       cptr := C.pcap_open_dead(C.int(linkType), C.int(captureLength))
+       if cptr == nil {
+               return nil, errors.New("error opening dead capture")
+       }
+
+       h := Handle{cptr: cptr}
+       defer h.Close()
+       return h.CompileBPFFilter(expr)
+}
+
+// CompileBPFFilter compiles and returns a BPF filter for the pcap handle.
+func (p *Handle) CompileBPFFilter(expr string) ([]BPFInstruction, error) {
+       bpf, err := p.compileBPFFilter(expr)
+       defer C.pcap_freecode(&bpf)
+       if err != nil {
+               return nil, err
+       }
+
+       bpfInsn := (*[bpfInstructionBufferSize]_Ctype_struct_bpf_insn)(unsafe.Pointer(bpf.bf_insns))[0:bpf.bf_len:bpf.bf_len]
+       bpfInstruction := make([]BPFInstruction, len(bpfInsn), len(bpfInsn))
+
+       for i, v := range bpfInsn {
+               bpfInstruction[i].Code = uint16(v.code)
+               bpfInstruction[i].Jt = uint8(v.jt)
+               bpfInstruction[i].Jf = uint8(v.jf)
+               bpfInstruction[i].K = uint32(v.k)
+       }
+
+       return bpfInstruction, nil
+}
+
+// SetBPFFilter compiles and sets a BPF filter for the pcap handle.
+func (p *Handle) SetBPFFilter(expr string) (err error) {
+       bpf, err := p.compileBPFFilter(expr)
+       defer C.pcap_freecode(&bpf)
+       if err != nil {
+               return err
+       }
+
+       if -1 == C.pcap_setfilter(p.cptr, &bpf) {
+               return p.Error()
+       }
+
+       return nil
+}
+
+// SetBPFInstructionFilter may be used to apply a filter in BPF asm byte code format.
+//
+// Simplest way to generate BPF asm byte code is with tcpdump:
+//     tcpdump -dd 'udp'
+//
+// The output may be used directly to add a filter, e.g.:
+//     bpfInstructions := []pcap.BpfInstruction{
+//                     {0x28, 0, 0, 0x0000000c},
+//                     {0x15, 0, 9, 0x00000800},
+//                     {0x30, 0, 0, 0x00000017},
+//                     {0x15, 0, 7, 0x00000006},
+//                     {0x28, 0, 0, 0x00000014},
+//                     {0x45, 5, 0, 0x00001fff},
+//                     {0xb1, 0, 0, 0x0000000e},
+//                     {0x50, 0, 0, 0x0000001b},
+//                     {0x54, 0, 0, 0x00000012},
+//                     {0x15, 0, 1, 0x00000012},
+//                     {0x6, 0, 0, 0x0000ffff},
+//                     {0x6, 0, 0, 0x00000000},
+//             }
+//
+// An other posibility is to write the bpf code in bpf asm.
+// Documentation: https://www.kernel.org/doc/Documentation/networking/filter.txt
+//
+// To compile the code use bpf_asm from
+// https://github.com/torvalds/linux/tree/master/tools/net
+//
+// The following command may be used to convert bpf_asm output to c/go struct, usable for SetBPFFilterByte:
+// bpf_asm -c tcp.bpf
+func (p *Handle) SetBPFInstructionFilter(bpfInstructions []BPFInstruction) (err error) {
+       bpf, err := bpfInstructionFilter(bpfInstructions)
+       if err != nil {
+               return err
+       }
+
+       if -1 == C.pcap_setfilter(p.cptr, &bpf) {
+               C.pcap_freecode(&bpf)
+               return p.Error()
+       }
+
+       C.pcap_freecode(&bpf)
+
+       return nil
+}
+func bpfInstructionFilter(bpfInstructions []BPFInstruction) (bpf _Ctype_struct_bpf_program, err error) {
+       if len(bpfInstructions) < 1 {
+               return bpf, errors.New("bpfInstructions must not be empty")
+       }
+
+       if len(bpfInstructions) > MaxBpfInstructions {
+               return bpf, fmt.Errorf("bpfInstructions must not be larger than %d", MaxBpfInstructions)
+       }
+
+       bpf.bf_len = C.u_int(len(bpfInstructions))
+       cbpfInsns := C.calloc(C.size_t(len(bpfInstructions)), C.size_t(unsafe.Sizeof(bpfInstructions[0])))
+
+       copy((*[bpfInstructionBufferSize]BPFInstruction)(cbpfInsns)[0:len(bpfInstructions)], bpfInstructions)
+       bpf.bf_insns = (*_Ctype_struct_bpf_insn)(cbpfInsns)
+
+       return
+}
+
+// NewBPF compiles the given string into a new filter program.
+//
+// BPF filters need to be created from activated handles, because they need to
+// know the underlying link type to correctly compile their offsets.
+func (p *Handle) NewBPF(expr string) (*BPF, error) {
+       bpf := &BPF{orig: expr}
+       cexpr := C.CString(expr)
+       defer C.free(unsafe.Pointer(cexpr))
+
+       pcapCompileMu.Lock()
+       defer pcapCompileMu.Unlock()
+       if C.pcap_compile(p.cptr, &bpf.bpf, cexpr /* optimize */, 1, C.PCAP_NETMASK_UNKNOWN) != 0 {
+               return nil, p.Error()
+       }
+
+       runtime.SetFinalizer(bpf, destroyBPF)
+       return bpf, nil
+}
+
+// NewBPFInstructionFilter sets the given BPFInstructions as new filter program.
+//
+// More details see func SetBPFInstructionFilter
+//
+// BPF filters need to be created from activated handles, because they need to
+// know the underlying link type to correctly compile their offsets.
+func (p *Handle) NewBPFInstructionFilter(bpfInstructions []BPFInstruction) (*BPF, error) {
+       var err error
+       bpf := &BPF{orig: "BPF Instruction Filter"}
+
+       bpf.bpf, err = bpfInstructionFilter(bpfInstructions)
+       if err != nil {
+               return nil, err
+       }
+
+       runtime.SetFinalizer(bpf, destroyBPF)
+       return bpf, nil
+}
+func destroyBPF(bpf *BPF) {
+       C.pcap_freecode(&bpf.bpf)
+}
+
+// String returns the original string this BPF filter was compiled from.
+func (b *BPF) String() string {
+       return b.orig
+}
+
+// Matches returns true if the given packet data matches this filter.
+func (b *BPF) Matches(ci gopacket.CaptureInfo, data []byte) bool {
+       var hdr C.struct_pcap_pkthdr
+       hdr.ts.tv_sec = C.gopacket_time_secs_t(ci.Timestamp.Unix())
+       hdr.ts.tv_usec = C.gopacket_time_usecs_t(ci.Timestamp.Nanosecond() / 1000)
+       hdr.caplen = C.bpf_u_int32(len(data)) // Trust actual length over ci.Length.
+       hdr.len = C.bpf_u_int32(ci.Length)
+       dataptr := (*C.u_char)(unsafe.Pointer(&data[0]))
+       return C.pcap_offline_filter(&b.bpf, &hdr, dataptr) != 0
+}
+
+// Version returns pcap_lib_version.
+func Version() string {
+       return C.GoString(C.pcap_lib_version())
+}
+
+// LinkType returns pcap_datalink, as a layers.LinkType.
+func (p *Handle) LinkType() layers.LinkType {
+       return layers.LinkType(C.pcap_datalink(p.cptr))
+}
+
+// SetLinkType calls pcap_set_datalink on the pcap handle.
+func (p *Handle) SetLinkType(dlt layers.LinkType) error {
+       if -1 == C.pcap_set_datalink(p.cptr, C.int(dlt)) {
+               return p.Error()
+       }
+       return nil
+}
+
+// FindAllDevs attempts to enumerate all interfaces on the current machine.
+func FindAllDevs() (ifs []Interface, err error) {
+       var buf *C.char
+       buf = (*C.char)(C.calloc(errorBufferSize, 1))
+       defer C.free(unsafe.Pointer(buf))
+       var alldevsp *C.pcap_if_t
+
+       if -1 == C.pcap_findalldevs((**C.pcap_if_t)(&alldevsp), buf) {
+               return nil, errors.New(C.GoString(buf))
+       }
+       defer C.pcap_freealldevs((*C.pcap_if_t)(alldevsp))
+       dev := alldevsp
+       var i uint32
+       for i = 0; dev != nil; dev = (*C.pcap_if_t)(dev.next) {
+               i++
+       }
+       ifs = make([]Interface, i)
+       dev = alldevsp
+       for j := uint32(0); dev != nil; dev = (*C.pcap_if_t)(dev.next) {
+               var iface Interface
+               iface.Name = C.GoString(dev.name)
+               iface.Description = C.GoString(dev.description)
+               iface.Addresses = findalladdresses(dev.addresses)
+               // TODO: add more elements
+               ifs[j] = iface
+               j++
+       }
+       return
+}
+
+func findalladdresses(addresses *_Ctype_struct_pcap_addr) (retval []InterfaceAddress) {
+       // TODO - make it support more than IPv4 and IPv6?
+       retval = make([]InterfaceAddress, 0, 1)
+       for curaddr := addresses; curaddr != nil; curaddr = (*_Ctype_struct_pcap_addr)(curaddr.next) {
+               // Strangely, it appears that in some cases, we get a pcap address back from
+               // pcap_findalldevs with a nil .addr.  It appears that we can skip over
+               // these.
+               if curaddr.addr == nil {
+                       continue
+               }
+               var a InterfaceAddress
+               var err error
+               if a.IP, err = sockaddrToIP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.addr))); err != nil {
+                       continue
+               }
+               // To be safe, we'll also check for netmask.
+               if curaddr.netmask == nil {
+                       continue
+               }
+               if a.Netmask, err = sockaddrToIP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.netmask))); err != nil {
+                       // If we got an IP address but we can't get a netmask, just return the IP
+                       // address.
+                       a.Netmask = nil
+               }
+               retval = append(retval, a)
+       }
+       return
+}
+
+func sockaddrToIP(rsa *syscall.RawSockaddr) (IP []byte, err error) {
+       switch rsa.Family {
+       case syscall.AF_INET:
+               pp := (*syscall.RawSockaddrInet4)(unsafe.Pointer(rsa))
+               IP = make([]byte, 4)
+               for i := 0; i < len(IP); i++ {
+                       IP[i] = pp.Addr[i]
+               }
+               return
+       case syscall.AF_INET6:
+               pp := (*syscall.RawSockaddrInet6)(unsafe.Pointer(rsa))
+               IP = make([]byte, 16)
+               for i := 0; i < len(IP); i++ {
+                       IP[i] = pp.Addr[i]
+               }
+               return
+       }
+       err = errors.New("Unsupported address type")
+       return
+}
+
+// WritePacketData calls pcap_sendpacket, injecting the given data into the pcap handle.
+func (p *Handle) WritePacketData(data []byte) (err error) {
+       if -1 == C.pcap_sendpacket(p.cptr, (*C.u_char)(&data[0]), (C.int)(len(data))) {
+               err = p.Error()
+       }
+       return
+}
+
+// Direction is used by Handle.SetDirection.
+type Direction uint8
+
+// Direction values for Handle.SetDirection.
+const (
+       DirectionIn    Direction = C.PCAP_D_IN
+       DirectionOut   Direction = C.PCAP_D_OUT
+       DirectionInOut Direction = C.PCAP_D_INOUT
+)
+
+// SetDirection sets the direction for which packets will be captured.
+func (p *Handle) SetDirection(direction Direction) error {
+       if direction != DirectionIn && direction != DirectionOut && direction != DirectionInOut {
+               return fmt.Errorf("Invalid direction: %v", direction)
+       }
+       if status := C.pcap_setdirection(p.cptr, (C.pcap_direction_t)(direction)); status < 0 {
+               return statusError(status)
+       }
+       return nil
+}
+
+// TimestampSource tells PCAP which type of timestamp to use for packets.
+type TimestampSource C.int
+
+// String returns the timestamp type as a human-readable string.
+func (t TimestampSource) String() string {
+       return C.GoString(C.pcap_tstamp_type_val_to_name(C.int(t)))
+}
+
+// TimestampSourceFromString translates a string into a timestamp type, case
+// insensitive.
+func TimestampSourceFromString(s string) (TimestampSource, error) {
+       cs := C.CString(s)
+       defer C.free(unsafe.Pointer(cs))
+       t := C.pcap_tstamp_type_name_to_val(cs)
+       if t < 0 {
+               return 0, statusError(t)
+       }
+       return TimestampSource(t), nil
+}
+
+func statusError(status C.int) error {
+       return errors.New(C.GoString(C.pcap_statustostr(status)))
+}
+
+// InactiveHandle allows you to call pre-pcap_activate functions on your pcap
+// handle to set it up just the way you'd like.
+type InactiveHandle struct {
+       // cptr is the handle for the actual pcap C object.
+       cptr        *C.pcap_t
+       device      string
+       deviceIndex int
+       timeout     time.Duration
+}
+
+// Activate activates the handle.  The current InactiveHandle becomes invalid
+// and all future function calls on it will fail.
+func (p *InactiveHandle) Activate() (*Handle, error) {
+       err := activateError(C.pcap_activate(p.cptr))
+       if err != aeNoError {
+               return nil, err
+       }
+       h := &Handle{
+               cptr:        p.cptr,
+               timeout:     p.timeout,
+               device:      p.device,
+               deviceIndex: p.deviceIndex,
+       }
+       p.cptr = nil
+       return h, nil
+}
+
+// CleanUp cleans up any stuff left over from a successful or failed building
+// of a handle.
+func (p *InactiveHandle) CleanUp() {
+       if p.cptr != nil {
+               C.pcap_close(p.cptr)
+       }
+}
+
+// NewInactiveHandle creates a new InactiveHandle, which wraps an un-activated PCAP handle.
+// Callers of NewInactiveHandle should immediately defer 'CleanUp', as in:
+//   inactive := NewInactiveHandle("eth0")
+//   defer inactive.CleanUp()
+func NewInactiveHandle(device string) (*InactiveHandle, error) {
+       buf := (*C.char)(C.calloc(errorBufferSize, 1))
+       defer C.free(unsafe.Pointer(buf))
+       dev := C.CString(device)
+       defer C.free(unsafe.Pointer(dev))
+
+       // Try to get the interface index, but iy could be something like "any"
+       // in which case use 0, which doesn't exist in nature
+       deviceIndex := 0
+       ifc, err := net.InterfaceByName(device)
+       if err == nil {
+               deviceIndex = ifc.Index
+       }
+
+       // This copies a bunch of the pcap_open_live implementation from pcap.c:
+       cptr := C.pcap_create(dev, buf)
+       if cptr == nil {
+               return nil, errors.New(C.GoString(buf))
+       }
+       return &InactiveHandle{cptr: cptr, device: device, deviceIndex: deviceIndex}, nil
+}
+
+// SetSnapLen sets the snap length (max bytes per packet to capture).
+func (p *InactiveHandle) SetSnapLen(snaplen int) error {
+       if status := C.pcap_set_snaplen(p.cptr, C.int(snaplen)); status < 0 {
+               return statusError(status)
+       }
+       return nil
+}
+
+// SetPromisc sets the handle to either be promiscuous (capture packets
+// unrelated to this host) or not.
+func (p *InactiveHandle) SetPromisc(promisc bool) error {
+       var pro C.int
+       if promisc {
+               pro = 1
+       }
+       if status := C.pcap_set_promisc(p.cptr, pro); status < 0 {
+               return statusError(status)
+       }
+       return nil
+}
+
+// SetTimeout sets the read timeout for the handle.
+//
+// See the package documentation for important details regarding 'timeout'.
+func (p *InactiveHandle) SetTimeout(timeout time.Duration) error {
+       if status := C.pcap_set_timeout(p.cptr, timeoutMillis(timeout)); status < 0 {
+               return statusError(status)
+       }
+       p.timeout = timeout
+       return nil
+}
+
+// SupportedTimestamps returns a list of supported timstamp types for this
+// handle.
+func (p *InactiveHandle) SupportedTimestamps() (out []TimestampSource) {
+       var types *C.int
+       n := int(C.pcap_list_tstamp_types(p.cptr, &types))
+       defer C.pcap_free_tstamp_types(types)
+       typesArray := (*[100]C.int)(unsafe.Pointer(types))
+       for i := 0; i < n; i++ {
+               out = append(out, TimestampSource((*typesArray)[i]))
+       }
+       return
+}
+
+// SetTimestampSource sets the type of timestamp generator PCAP uses when
+// attaching timestamps to packets.
+func (p *InactiveHandle) SetTimestampSource(t TimestampSource) error {
+       if status := C.pcap_set_tstamp_type(p.cptr, C.int(t)); status < 0 {
+               return statusError(status)
+       }
+       return nil
+}
+
+// CannotSetRFMon is returned by SetRFMon if the handle does not allow
+// setting RFMon because pcap_can_set_rfmon returns 0.
+var CannotSetRFMon = errors.New("Cannot set rfmon for this handle")
+
+// SetRFMon turns on radio monitoring mode, similar to promiscuous mode but for
+// wireless networks.  If this mode is enabled, the interface will not need to
+// associate with an access point before it can receive traffic.
+func (p *InactiveHandle) SetRFMon(monitor bool) error {
+       var mon C.int
+       if monitor {
+               mon = 1
+       }
+       switch canset := C.pcap_can_set_rfmon(p.cptr); canset {
+       case 0:
+               return CannotSetRFMon
+       case 1:
+               // success
+       default:
+               return statusError(canset)
+       }
+       if status := C.pcap_set_rfmon(p.cptr, mon); status != 0 {
+               return statusError(status)
+       }
+       return nil
+}
+
+// SetBufferSize sets the buffer size (in bytes) of the handle.
+func (p *InactiveHandle) SetBufferSize(bufferSize int) error {
+       if status := C.pcap_set_buffer_size(p.cptr, C.int(bufferSize)); status < 0 {
+               return statusError(status)
+       }
+       return nil
+}
+
+// SetImmediateMode sets (or unsets) the immediate mode of the
+// handle. In immediate mode, packets are delivered to the application
+// as soon as they arrive.  In other words, this overrides SetTimeout.
+func (p *InactiveHandle) SetImmediateMode(mode bool) error {
+       var md C.int
+       if mode {
+               md = 1
+       }
+       if status := C.pcap_set_immediate_mode(p.cptr, md); status < 0 {
+               return statusError(status)
+       }
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap_test.go b/vendor/github.com/google/gopacket/pcap/pcap_test.go
new file mode 100644 (file)
index 0000000..04f1812
--- /dev/null
@@ -0,0 +1,308 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcap
+
+import (
+       "fmt"
+       "io"
+       "io/ioutil"
+       "log"
+       "os"
+       "testing"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+)
+
+func TestPcapNonexistentFile(t *testing.T) {
+       handle, err := OpenOffline("/path/to/nonexistent/file")
+       if err == nil {
+               t.Error("No error returned for nonexistent file open")
+       } else {
+               t.Logf("Error returned for nonexistent file: %v", err)
+       }
+       if handle != nil {
+               t.Error("Non-nil handle returned for nonexistent file open")
+       }
+}
+
+func TestPcapFileRead(t *testing.T) {
+       invalidData := []byte{
+               0xAB, 0xAD, 0x1D, 0xEA,
+       }
+
+       invalidPcap, err := ioutil.TempFile("", "invalid.pcap")
+       if err != nil {
+               t.Fatal(err)
+       }
+       defer os.Remove(invalidPcap.Name())
+
+       err = ioutil.WriteFile(invalidPcap.Name(), invalidData, 0644)
+       if err != nil {
+               t.Fatal(err)
+       }
+       defer invalidPcap.Close()
+
+       for _, file := range []struct {
+               filename       string
+               num            int
+               expectedLayers []gopacket.LayerType
+               err            string
+       }{
+               {filename: "test_loopback.pcap",
+                       num: 24,
+                       expectedLayers: []gopacket.LayerType{
+                               layers.LayerTypeLoopback,
+                               layers.LayerTypeIPv6,
+                               layers.LayerTypeTCP,
+                       },
+               },
+               {filename: "test_ethernet.pcap",
+                       num: 16,
+                       expectedLayers: []gopacket.LayerType{
+                               layers.LayerTypeEthernet,
+                               layers.LayerTypeIPv4,
+                               layers.LayerTypeTCP,
+                       },
+               },
+               {filename: "test_dns.pcap",
+                       num: 10,
+                       expectedLayers: []gopacket.LayerType{
+                               layers.LayerTypeEthernet,
+                               layers.LayerTypeIPv4,
+                               layers.LayerTypeUDP,
+                               layers.LayerTypeDNS,
+                       },
+               },
+               {filename: invalidPcap.Name(),
+                       num: 0,
+                       err: "unknown file format",
+               },
+       } {
+               t.Logf("\n\n\n\nProcessing file %s\n\n\n\n", file.filename)
+
+               packets := []gopacket.Packet{}
+               if handle, err := OpenOffline(file.filename); err != nil {
+                       if file.err != "" {
+                               if err.Error() != file.err {
+                                       t.Errorf("expected message %q; got %q", file.err, err.Error())
+                               }
+                       } else {
+                               t.Fatal(err)
+                       }
+               } else {
+                       if file.err != "" {
+                               t.Fatalf("Expected error, got none")
+                       }
+                       packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
+                       for packet := range packetSource.Packets() {
+                               packets = append(packets, packet)
+                       }
+               }
+               if len(packets) != file.num {
+                       t.Fatal("Incorrect number of packets, want", file.num, "got", len(packets))
+               }
+               for i, p := range packets {
+                       t.Log(p.Dump())
+                       for _, layertype := range file.expectedLayers {
+                               if p.Layer(layertype) == nil {
+                                       t.Fatal("Packet", i, "has no layer type\n%s", layertype, p.Dump())
+                               }
+                       }
+               }
+       }
+}
+
+func TestBPF(t *testing.T) {
+       handle, err := OpenOffline("test_ethernet.pcap")
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       for _, expected := range []struct {
+               expr   string
+               Error  bool
+               Result bool
+       }{
+               {"foobar", true, false},
+               {"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)", false, true},
+               {"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack", false, true},
+               {"udp", false, false},
+       } {
+               data, ci, err := handle.ReadPacketData()
+               if err != nil {
+                       t.Fatal(err)
+               }
+               t.Log("Testing filter", expected.expr)
+               if bpf, err := handle.NewBPF(expected.expr); err != nil {
+                       if !expected.Error {
+                               t.Error(err, "while compiling filter was unexpected")
+                       }
+               } else if expected.Error {
+                       t.Error("expected error but didn't see one")
+               } else if matches := bpf.Matches(ci, data); matches != expected.Result {
+                       t.Error("Filter result was", matches, "but should be", expected.Result)
+               }
+       }
+}
+
+func TestBPFInstruction(t *testing.T) {
+       handle, err := OpenOffline("test_ethernet.pcap")
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       cntr := 0
+       oversizedBpfInstructionBuffer := [MaxBpfInstructions + 1]BPFInstruction{}
+
+       for _, expected := range []struct {
+               Filter         string
+               BpfInstruction []BPFInstruction
+               Error          bool
+               Result         bool
+       }{
+               // {"foobar", true, false},
+               {"foobar", []BPFInstruction{}, true, false},
+
+               // tcpdump -dd 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'
+               {"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)",
+                       []BPFInstruction{
+                               {0x28, 0, 0, 0x0000000c},
+                               {0x15, 0, 9, 0x00000800},
+                               {0x30, 0, 0, 0x00000017},
+                               {0x15, 0, 7, 0x00000006},
+                               {0x28, 0, 0, 0x00000014},
+                               {0x45, 5, 0, 0x00001fff},
+                               {0xb1, 0, 0, 0x0000000e},
+                               {0x50, 0, 0, 0x0000001b},
+                               {0x54, 0, 0, 0x00000012},
+                               {0x15, 0, 1, 0x00000012},
+                               {0x6, 0, 0, 0x0000ffff},
+                               {0x6, 0, 0, 0x00000000},
+                       }, false, true},
+
+               // tcpdump -dd 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack'
+               {"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack",
+                       []BPFInstruction{
+                               {0x28, 0, 0, 0x0000000c},
+                               {0x15, 0, 9, 0x00000800},
+                               {0x30, 0, 0, 0x00000017},
+                               {0x15, 0, 7, 0x00000006},
+                               {0x28, 0, 0, 0x00000014},
+                               {0x45, 5, 0, 0x00001fff},
+                               {0xb1, 0, 0, 0x0000000e},
+                               {0x50, 0, 0, 0x0000001b},
+                               {0x54, 0, 0, 0x00000012},
+                               {0x15, 0, 1, 0x00000010},
+                               {0x6, 0, 0, 0x0000ffff},
+                               {0x6, 0, 0, 0x00000000},
+                       }, false, true},
+
+               // tcpdump -dd 'udp'
+               {"udp",
+                       []BPFInstruction{
+                               {0x28, 0, 0, 0x0000000c},
+                               {0x15, 0, 5, 0x000086dd},
+                               {0x30, 0, 0, 0x00000014},
+                               {0x15, 6, 0, 0x00000011},
+                               {0x15, 0, 6, 0x0000002c},
+                               {0x30, 0, 0, 0x00000036},
+                               {0x15, 3, 4, 0x00000011},
+                               {0x15, 0, 3, 0x00000800},
+                               {0x30, 0, 0, 0x00000017},
+                               {0x15, 0, 1, 0x00000011},
+                               {0x6, 0, 0, 0x0000ffff},
+                               {0x6, 0, 0, 0x00000000},
+                       }, false, false},
+
+               {"", oversizedBpfInstructionBuffer[:], true, false},
+       } {
+               cntr++
+               data, ci, err := handle.ReadPacketData()
+               if err != nil {
+                       t.Fatal(err)
+               }
+
+               t.Log("Testing BpfInstruction filter", cntr)
+               if bpf, err := handle.NewBPFInstructionFilter(expected.BpfInstruction); err != nil {
+                       if !expected.Error {
+                               t.Error(err, "while compiling filter was unexpected")
+                       }
+               } else if expected.Error {
+                       t.Error("expected error but didn't see one")
+               } else if matches := bpf.Matches(ci, data); matches != expected.Result {
+                       t.Error("Filter result was", matches, "but should be", expected.Result)
+               }
+
+               if expected.Filter != "" {
+                       t.Log("Testing dead bpf filter", cntr)
+                       if bpf, err := CompileBPFFilter(layers.LinkTypeEthernet, 65535, expected.Filter); err != nil {
+                               if !expected.Error {
+                                       t.Error(err, "while compiling filter was unexpected")
+                               }
+                       } else if expected.Error {
+                               t.Error("expected error but didn't see one")
+                       } else {
+                               if len(bpf) != len(expected.BpfInstruction) {
+                                       t.Errorf("expected %d instructions, got %d", len(expected.BpfInstruction), len(bpf))
+                               }
+                               for i := 0; i < len(bpf); i++ {
+                                       if bpf[i] != expected.BpfInstruction[i] {
+                                               t.Errorf("expected instruction %d = %d, got %d", i, expected.BpfInstruction[i], bpf[i])
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+func ExampleBPF() {
+       handle, err := OpenOffline("test_ethernet.pcap")
+       if err != nil {
+               log.Fatal(err)
+       }
+       synack, err := handle.NewBPF("tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)")
+       if err != nil {
+               log.Fatal(err)
+       }
+       syn, err := handle.NewBPF("tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn")
+       if err != nil {
+               log.Fatal(err)
+       }
+       for {
+               data, ci, err := handle.ReadPacketData()
+               switch {
+               case err == io.EOF:
+                       return
+               case err != nil:
+                       log.Fatal(err)
+               case synack.Matches(ci, data):
+                       fmt.Println("SYN/ACK packet")
+               case syn.Matches(ci, data):
+                       fmt.Println("SYN packet")
+               default:
+                       fmt.Println("SYN flag not set")
+               }
+       }
+       // Output:
+       // SYN packet
+       // SYN/ACK packet
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+       // SYN flag not set
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap_tester.go b/vendor/github.com/google/gopacket/pcap/pcap_tester.go
new file mode 100644 (file)
index 0000000..ee32690
--- /dev/null
@@ -0,0 +1,109 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build ignore
+
+// This binary tests that PCAP packet capture is working correctly by issuing
+// HTTP requests, then making sure we actually capture data off the wire.
+package main
+
+import (
+       "errors"
+       "flag"
+       "fmt"
+       "log"
+       "net"
+       "net/http"
+       "os"
+       "time"
+
+       "github.com/google/gopacket/pcap"
+)
+
+var mode = flag.String("mode", "basic", "One of: basic,filtered,timestamp")
+
+func generatePackets() {
+       if resp, err := http.Get("http://code.google.com"); err != nil {
+               log.Printf("Could not get HTTP: %v", err)
+       } else {
+               resp.Body.Close()
+       }
+}
+
+func main() {
+       flag.Parse()
+       ifaces, err := net.Interfaces()
+       if err != nil {
+               log.Fatal(err)
+       }
+       for _, iface := range ifaces {
+               log.Printf("Trying capture on %q", iface.Name)
+               if err := tryCapture(iface); err != nil {
+                       log.Printf("Error capturing on %q: %v", iface.Name, err)
+               } else {
+                       log.Printf("Successfully captured on %q", iface.Name)
+                       return
+               }
+       }
+       os.Exit(1)
+}
+
+func tryCapture(iface net.Interface) error {
+       if iface.Name[:2] == "lo" {
+               return errors.New("skipping loopback")
+       }
+       var h *pcap.Handle
+       var err error
+       switch *mode {
+       case "basic":
+               h, err = pcap.OpenLive(iface.Name, 65536, false, time.Second*3)
+               if err != nil {
+                       return fmt.Errorf("openlive: %v", err)
+               }
+               defer h.Close()
+       case "filtered":
+               h, err = pcap.OpenLive(iface.Name, 65536, false, time.Second*3)
+               if err != nil {
+                       return fmt.Errorf("openlive: %v", err)
+               }
+               defer h.Close()
+               if err := h.SetBPFFilter("port 80 or port 443"); err != nil {
+                       return fmt.Errorf("setbpf: %v", err)
+               }
+       case "timestamp":
+               u, err := pcap.NewInactiveHandle(iface.Name)
+               if err != nil {
+                       return err
+               }
+               defer u.CleanUp()
+               if err = u.SetSnapLen(65536); err != nil {
+                       return err
+               } else if err = u.SetPromisc(false); err != nil {
+                       return err
+               } else if err = u.SetTimeout(time.Second * 3); err != nil {
+                       return err
+               }
+               sources := u.SupportedTimestamps()
+               if len(sources) == 0 {
+                       return errors.New("no supported timestamp sources")
+               } else if err := u.SetTimestampSource(sources[0]); err != nil {
+                       return fmt.Errorf("settimestampsource(%v): %v", sources[0], err)
+               } else if h, err = u.Activate(); err != nil {
+                       return fmt.Errorf("could not activate: %v", err)
+               }
+               defer h.Close()
+       default:
+               panic("Invalid --mode: " + *mode)
+       }
+       go generatePackets()
+       h.ReadPacketData() // Do one dummy read to clear any timeouts.
+       data, ci, err := h.ReadPacketData()
+       if err != nil {
+               return fmt.Errorf("readpacketdata: %v", err)
+       }
+       log.Printf("Read packet, %v bytes, CI: %+v", len(data), ci)
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap_unix.go b/vendor/github.com/google/gopacket/pcap/pcap_unix.go
new file mode 100644 (file)
index 0000000..b2a6dcd
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+//
+// +build !windows
+
+package pcap
+
+/*
+#include <stdlib.h>
+#include <pcap.h>
+
+// pcap_wait returns when the next packet is available or the timeout expires.
+// Since it uses pcap_get_selectable_fd, it will not work in Windows.
+int pcap_wait(pcap_t *p, int usec) {
+       fd_set fds;
+       int fd;
+       struct timeval tv;
+
+       fd = pcap_get_selectable_fd(p);
+       if(fd < 0) {
+               return fd;
+       }
+
+       FD_ZERO(&fds);
+       FD_SET(fd, &fds);
+
+       tv.tv_sec = 0;
+       tv.tv_usec = usec;
+
+       if(usec != 0) {
+               return select(fd+1, &fds, NULL, NULL, &tv);
+       }
+
+       // block indefinitely if no timeout provided
+       return select(fd+1, &fds, NULL, NULL, NULL);
+}
+*/
+import "C"
+
+import (
+       "errors"
+       "unsafe"
+)
+
+func (p *Handle) openLive() error {
+       buf := (*C.char)(C.calloc(errorBufferSize, 1))
+       defer C.free(unsafe.Pointer(buf))
+
+       // Change the device to non-blocking, we'll use pcap_wait to wait until the
+       // handle is ready to read.
+       if v := C.pcap_setnonblock(p.cptr, 1, buf); v == -1 {
+               return errors.New(C.GoString(buf))
+       }
+
+       return nil
+}
+
+// waitForPacket waits for a packet or for the timeout to expire.
+func (p *Handle) waitForPacket() {
+       // need to wait less than the read timeout according to pcap documentation.
+       // timeoutMillis rounds up to at least one millisecond so we can safely
+       // subtract up to a millisecond.
+       usec := timeoutMillis(p.timeout) * 1000
+       usec -= 100
+
+       C.pcap_wait(p.cptr, usec)
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcap_windows.go b/vendor/github.com/google/gopacket/pcap/pcap_windows.go
new file mode 100644 (file)
index 0000000..e3df123
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcap
+
+import (
+       "runtime"
+)
+
+func (p *Handle) openLive() error {
+       // do nothing
+       return nil
+}
+
+// waitForPacket waits for a packet or for the timeout to expire.
+func (p *Handle) waitForPacket() {
+       // can't use select() so instead just switch goroutines
+       runtime.Gosched()
+}
diff --git a/vendor/github.com/google/gopacket/pcap/pcapgo_test.go b/vendor/github.com/google/gopacket/pcap/pcapgo_test.go
new file mode 100644 (file)
index 0000000..4de018a
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcap
+
+import (
+       "bytes"
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+       "github.com/google/gopacket/pcapgo"
+       "io/ioutil"
+       "reflect"
+       "testing"
+       "time"
+)
+
+func TestPCAPGoWrite(t *testing.T) {
+       f, err := ioutil.TempFile("", "pcapgo")
+       if err != nil {
+               t.Fatal(err)
+       }
+       data := []byte{0xab, 0xcd, 0xef, 0x01, 0x02, 0x03, 0x04}
+       ci := gopacket.CaptureInfo{
+               Timestamp:     time.Unix(12345667, 1234567000),
+               Length:        700,
+               CaptureLength: len(data),
+       }
+       func() {
+               defer f.Close()
+               w := pcapgo.NewWriter(f)
+               if err := w.WriteFileHeader(65536, layers.LinkTypeEthernet); err != nil {
+                       t.Fatal(err)
+               }
+               if err := w.WritePacket(ci, data); err != nil {
+                       t.Fatal(err)
+               }
+       }()
+       h, err := OpenOffline(f.Name())
+       if err != nil {
+               t.Fatal(err)
+       }
+       defer h.Close()
+       gotData, gotCI, err := h.ReadPacketData()
+       if err != nil {
+               t.Fatal("could not read first packet:", err)
+       }
+       if !bytes.Equal(gotData, data) {
+               t.Errorf("byte mismatch:\nwant: %v\n got: %v", data, gotData)
+       }
+       if !reflect.DeepEqual(ci, gotCI) {
+               t.Errorf("CI mismatch:\nwant: %v\n got: %v", ci, gotCI)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/pcap/test_dns.pcap b/vendor/github.com/google/gopacket/pcap/test_dns.pcap
new file mode 100644 (file)
index 0000000..3a79f92
Binary files /dev/null and b/vendor/github.com/google/gopacket/pcap/test_dns.pcap differ
diff --git a/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap b/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap
new file mode 100644 (file)
index 0000000..1f8a87c
Binary files /dev/null and b/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap differ
diff --git a/vendor/github.com/google/gopacket/pcap/test_loopback.pcap b/vendor/github.com/google/gopacket/pcap/test_loopback.pcap
new file mode 100644 (file)
index 0000000..ddeb82c
Binary files /dev/null and b/vendor/github.com/google/gopacket/pcap/test_loopback.pcap differ
diff --git a/vendor/github.com/google/gopacket/pcapgo/read.go b/vendor/github.com/google/gopacket/pcapgo/read.go
new file mode 100644 (file)
index 0000000..5acd06f
--- /dev/null
@@ -0,0 +1,155 @@
+// Copyright 2014 Damjan Cvetko. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcapgo
+
+import (
+       "encoding/binary"
+       "errors"
+       "fmt"
+       "io"
+       "time"
+
+       "bufio"
+       "compress/gzip"
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+)
+
+// Reader wraps an underlying io.Reader to read packet data in PCAP
+// format.  See http://wiki.wireshark.org/Development/LibpcapFileFormat
+// for information on the file format.
+//
+// We currenty read v2.4 file format with nanosecond and microsecdond
+// timestamp resolution in little-endian and big-endian encoding.
+//
+// If the PCAP data is gzip compressed it is transparently uncompressed
+// by wrapping the given io.Reader with a gzip.Reader.
+type Reader struct {
+       r              io.Reader
+       byteOrder      binary.ByteOrder
+       nanoSecsFactor uint32
+       versionMajor   uint16
+       versionMinor   uint16
+       // timezone
+       // sigfigs
+       snaplen  uint32
+       linkType layers.LinkType
+       // reusable buffer
+       buf [16]byte
+}
+
+const magicNanoseconds = 0xA1B23C4D
+const magicMicrosecondsBigendian = 0xD4C3B2A1
+const magicNanosecondsBigendian = 0x4D3CB2A1
+
+const magicGzip1 = 0x1f
+const magicGzip2 = 0x8b
+
+// NewReader returns a new reader object, for reading packet data from
+// the given reader. The reader must be open and header data is
+// read from it at this point.
+// If the file format is not supported an error is returned
+//
+//  // Create new reader:
+//  f, _ := os.Open("/tmp/file.pcap")
+//  defer f.Close()
+//  r, err := NewReader(f)
+//  data, ci, err := r.ReadPacketData()
+func NewReader(r io.Reader) (*Reader, error) {
+       ret := Reader{r: r}
+       if err := ret.readHeader(); err != nil {
+               return nil, err
+       }
+       return &ret, nil
+}
+
+func (r *Reader) readHeader() error {
+       br := bufio.NewReader(r.r)
+       gzipMagic, err := br.Peek(2)
+       if err != nil {
+               return err
+       }
+
+       if gzipMagic[0] == magicGzip1 && gzipMagic[1] == magicGzip2 {
+               if r.r, err = gzip.NewReader(br); err != nil {
+                       return err
+               }
+       } else {
+               r.r = br
+       }
+
+       buf := make([]byte, 24)
+       if n, err := io.ReadFull(r.r, buf); err != nil {
+               return err
+       } else if n < 24 {
+               return errors.New("Not enough data for read")
+       }
+       if magic := binary.LittleEndian.Uint32(buf[0:4]); magic == magicNanoseconds {
+               r.byteOrder = binary.LittleEndian
+               r.nanoSecsFactor = 1
+       } else if magic == magicNanosecondsBigendian {
+               r.byteOrder = binary.BigEndian
+               r.nanoSecsFactor = 1
+       } else if magic == magicMicroseconds {
+               r.byteOrder = binary.LittleEndian
+               r.nanoSecsFactor = 1000
+       } else if magic == magicMicrosecondsBigendian {
+               r.byteOrder = binary.BigEndian
+               r.nanoSecsFactor = 1000
+       } else {
+               return fmt.Errorf("Unknown magic %x", magic)
+       }
+       if r.versionMajor = r.byteOrder.Uint16(buf[4:6]); r.versionMajor != versionMajor {
+               return fmt.Errorf("Unknown major version %d", r.versionMajor)
+       }
+       if r.versionMinor = r.byteOrder.Uint16(buf[6:8]); r.versionMinor != versionMinor {
+               return fmt.Errorf("Unknown minor version %d", r.versionMinor)
+       }
+       // ignore timezone 8:12 and sigfigs 12:16
+       r.snaplen = r.byteOrder.Uint32(buf[16:20])
+       r.linkType = layers.LinkType(r.byteOrder.Uint32(buf[20:24]))
+       return nil
+}
+
+// ReadPacketData reads next packet from file.
+func (r *Reader) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+       if ci, err = r.readPacketHeader(); err != nil {
+               return
+       }
+       if ci.CaptureLength > int(r.snaplen) {
+               err = fmt.Errorf("capture length exceeds snap length: %d > %d", 16+ci.CaptureLength, r.snaplen)
+               return
+       }
+       data = make([]byte, ci.CaptureLength)
+       _, err = io.ReadFull(r.r, data)
+       return data, ci, err
+}
+
+func (r *Reader) readPacketHeader() (ci gopacket.CaptureInfo, err error) {
+       if _, err = io.ReadFull(r.r, r.buf[:]); err != nil {
+               return
+       }
+       ci.Timestamp = time.Unix(int64(r.byteOrder.Uint32(r.buf[0:4])), int64(r.byteOrder.Uint32(r.buf[4:8])*r.nanoSecsFactor)).UTC()
+       ci.CaptureLength = int(r.byteOrder.Uint32(r.buf[8:12]))
+       ci.Length = int(r.byteOrder.Uint32(r.buf[12:16]))
+       return
+}
+
+// LinkType returns network, as a layers.LinkType.
+func (r *Reader) LinkType() layers.LinkType {
+       return r.linkType
+}
+
+// Snaplen returns the snapshot length of the capture file.
+func (r *Reader) Snaplen() uint32 {
+       return r.snaplen
+}
+
+// Reader formater
+func (r *Reader) String() string {
+       return fmt.Sprintf("PcapFile  maj: %x min: %x snaplen: %d linktype: %s", r.versionMajor, r.versionMinor, r.snaplen, r.linkType)
+}
diff --git a/vendor/github.com/google/gopacket/pcapgo/read_test.go b/vendor/github.com/google/gopacket/pcapgo/read_test.go
new file mode 100644 (file)
index 0000000..87bf7ab
--- /dev/null
@@ -0,0 +1,203 @@
+// Copyright 2014 Damjan Cvetko. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+package pcapgo
+
+import (
+       "bytes"
+       "testing"
+       "time"
+)
+
+// test header read
+func TestCreatePcapReader(t *testing.T) {
+       test := []byte{
+               0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+       }
+       buf := bytes.NewBuffer(test)
+       _, err := NewReader(buf)
+       if err != nil {
+               t.Error(err)
+               t.FailNow()
+       }
+}
+
+// test big endian file read
+func TestCreatePcapReaderBigEndian(t *testing.T) {
+       test := []byte{
+               0xa1, 0xb2, 0xc3, 0xd4, 0x00, 0x02, 0x00, 0x04,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
+       }
+       buf := bytes.NewBuffer(test)
+       _, err := NewReader(buf)
+       if err != nil {
+               t.Error(err)
+               t.FailNow()
+       }
+}
+
+// test opening invalid data
+func TestCreatePcapReaderFail(t *testing.T) {
+       test := []byte{
+               0xd0, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+       }
+       buf := bytes.NewBuffer(test)
+       _, err := NewReader(buf)
+       if err == nil {
+               t.Error("Should fail but did not")
+               t.FailNow()
+       }
+}
+
+func TestPacket(t *testing.T) {
+       test := []byte{
+               0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs
+               0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType
+               0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec
+               0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len
+               0x01, 0x02, 0x03, 0x04, // data
+       }
+
+       buf := bytes.NewBuffer(test)
+       r, err := NewReader(buf)
+
+       data, ci, err := r.ReadPacketData()
+       if err != nil {
+               t.Error(err)
+               t.FailNow()
+       }
+       if !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1000, time.UTC)) {
+               t.Error("Invalid time read")
+               t.FailNow()
+       }
+       if ci.CaptureLength != 4 || ci.Length != 8 {
+               t.Error("Invalid CapLen or Len")
+       }
+       want := []byte{1, 2, 3, 4}
+       if !bytes.Equal(data, want) {
+               t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, data)
+       }
+}
+
+func TestPacketNano(t *testing.T) {
+       test := []byte{
+               0x4d, 0x3c, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs
+               0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType
+               0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec
+               0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len
+               0x01, 0x02, 0x03, 0x04, // data
+       }
+
+       buf := bytes.NewBuffer(test)
+       r, err := NewReader(buf)
+
+       data, ci, err := r.ReadPacketData()
+       if err != nil {
+               t.Error(err)
+               t.FailNow()
+       }
+       if !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1, time.UTC)) {
+               t.Error("Invalid time read")
+               t.FailNow()
+       }
+       if ci.CaptureLength != 4 || ci.Length != 8 {
+               t.Error("Invalid CapLen or Len")
+       }
+       want := []byte{1, 2, 3, 4}
+       if !bytes.Equal(data, want) {
+               t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, data)
+       }
+}
+
+func TestGzipPacket(t *testing.T) {
+       test := []byte{
+               0x1f, 0x8b, 0x08, 0x08, 0x92, 0x4d, 0x81, 0x57,
+               0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x00, 0xbb,
+               0x72, 0x78, 0xd3, 0x42, 0x26, 0x06, 0x16, 0x06,
+               0x18, 0xf8, 0xff, 0x9f, 0x81, 0x81, 0x11, 0x48,
+               0x47, 0x9d, 0x91, 0x0a, 0x01, 0xd1, 0x20, 0x19,
+               0x0e, 0x20, 0x66, 0x64, 0x62, 0x66, 0x01, 0x00,
+               0xe4, 0x76, 0x9b, 0x75, 0x2c, 0x00, 0x00, 0x00,
+       }
+       buf := bytes.NewBuffer(test)
+       r, err := NewReader(buf)
+       if err != nil {
+               t.Error("Unexpected error returned:", err)
+               t.FailNow()
+       }
+
+       data, ci, err := r.ReadPacketData()
+       if err != nil {
+               t.Error(err)
+               t.FailNow()
+       }
+       if !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1000, time.UTC)) {
+               t.Error("Invalid time read")
+               t.FailNow()
+       }
+       if ci.CaptureLength != 4 || ci.Length != 8 {
+               t.Error("Invalid CapLen or Len")
+       }
+       want := []byte{1, 2, 3, 4}
+       if !bytes.Equal(data, want) {
+               t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, data)
+       }
+}
+
+func TestTruncatedGzipPacket(t *testing.T) {
+       test := []byte{
+               0x1f, 0x8b, 0x08,
+       }
+       buf := bytes.NewBuffer(test)
+       _, err := NewReader(buf)
+       if err == nil {
+               t.Error("Should fail but did not")
+               t.FailNow()
+       }
+}
+
+func TestPacketBufferReuse(t *testing.T) {
+       test := []byte{
+               0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs
+               0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType
+               0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec
+               0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len
+               0x01, 0x02, 0x03, 0x04, // data
+               0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec
+               0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len
+               0x01, 0x02, 0x03, 0x04, // data
+       }
+
+       buf := bytes.NewBuffer(test)
+       r, err := NewReader(buf)
+
+       data1, _, err := r.ReadPacketData()
+       if err != nil {
+               t.Error(err)
+               t.FailNow()
+       }
+       if want := []byte{1, 2, 3, 4}; !bytes.Equal(data1, want) {
+               t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, data1)
+       }
+       data2, _, err := r.ReadPacketData()
+       if err != nil {
+               t.Error(err)
+               t.FailNow()
+       }
+       for i := range data1 {
+               data1[i] = 0xff // modify data1 after getting data2, make sure we don't overlap buffers.
+       }
+       if want := []byte{1, 2, 3, 4}; !bytes.Equal(data2, want) {
+               t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, data2)
+       }
+}
diff --git a/vendor/github.com/google/gopacket/pcapgo/write.go b/vendor/github.com/google/gopacket/pcapgo/write.go
new file mode 100644 (file)
index 0000000..bfc312f
--- /dev/null
@@ -0,0 +1,103 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package pcapgo provides some native PCAP support, not requiring
+// C libpcap to be installed.
+package pcapgo
+
+import (
+       "encoding/binary"
+       "fmt"
+       "io"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+)
+
+// Writer wraps an underlying io.Writer to write packet data in PCAP
+// format.  See http://wiki.wireshark.org/Development/LibpcapFileFormat
+// for information on the file format.
+//
+// For those that care, we currently write v2.4 files with nanosecond
+// timestamp resolution and little-endian encoding.
+type Writer struct {
+       w io.Writer
+}
+
+const magicMicroseconds = 0xA1B2C3D4
+const versionMajor = 2
+const versionMinor = 4
+
+// NewWriter returns a new writer object, for writing packet data out
+// to the given writer.  If this is a new empty writer (as opposed to
+// an append), you must call WriteFileHeader before WritePacket.
+//
+//  // Write a new file:
+//  f, _ := os.Create("/tmp/file.pcap")
+//  w := pcapgo.NewWriter(f)
+//  w.WriteFileHeader(65536, layers.LinkTypeEthernet)  // new file, must do this.
+//  w.WritePacket(gopacket.CaptureInfo{...}, data1)
+//  f.Close()
+//  // Append to existing file (must have same snaplen and linktype)
+//  f2, _ := os.OpenFile("/tmp/file.pcap", os.O_APPEND, 0700)
+//  w2 := pcapgo.NewWriter(f2)
+//  // no need for file header, it's already written.
+//  w2.WritePacket(gopacket.CaptureInfo{...}, data2)
+//  f2.Close()
+func NewWriter(w io.Writer) *Writer {
+       return &Writer{w: w}
+}
+
+// WriteFileHeader writes a file header out to the writer.
+// This must be called exactly once per output.
+func (w *Writer) WriteFileHeader(snaplen uint32, linktype layers.LinkType) error {
+       var buf [24]byte
+       binary.LittleEndian.PutUint32(buf[0:4], magicMicroseconds)
+       binary.LittleEndian.PutUint16(buf[4:6], versionMajor)
+       binary.LittleEndian.PutUint16(buf[6:8], versionMinor)
+       // bytes 8:12 stay 0 (timezone = UTC)
+       // bytes 12:16 stay 0 (sigfigs is always set to zero, according to
+       //   http://wiki.wireshark.org/Development/LibpcapFileFormat
+       binary.LittleEndian.PutUint32(buf[16:20], snaplen)
+       binary.LittleEndian.PutUint32(buf[20:24], uint32(linktype))
+       _, err := w.w.Write(buf[:])
+       return err
+}
+
+const nanosPerMicro = 1000
+
+func (w *Writer) writePacketHeader(ci gopacket.CaptureInfo) error {
+       var buf [16]byte
+
+       t := ci.Timestamp
+       if t.IsZero() {
+               t = time.Now()
+       }
+       secs := t.Unix()
+       usecs := t.Nanosecond() / nanosPerMicro
+       binary.LittleEndian.PutUint32(buf[0:4], uint32(secs))
+       binary.LittleEndian.PutUint32(buf[4:8], uint32(usecs))
+       binary.LittleEndian.PutUint32(buf[8:12], uint32(ci.CaptureLength))
+       binary.LittleEndian.PutUint32(buf[12:16], uint32(ci.Length))
+       _, err := w.w.Write(buf[:])
+       return err
+}
+
+// WritePacket writes the given packet data out to the file.
+func (w *Writer) WritePacket(ci gopacket.CaptureInfo, data []byte) error {
+       if ci.CaptureLength != len(data) {
+               return fmt.Errorf("capture length %d does not match data length %d", ci.CaptureLength, len(data))
+       }
+       if ci.CaptureLength > ci.Length {
+               return fmt.Errorf("invalid capture info %+v:  capture length > length", ci)
+       }
+       if err := w.writePacketHeader(ci); err != nil {
+               return fmt.Errorf("error writing packet header: %v", err)
+       }
+       _, err := w.w.Write(data)
+       return err
+}
diff --git a/vendor/github.com/google/gopacket/pcapgo/write_test.go b/vendor/github.com/google/gopacket/pcapgo/write_test.go
new file mode 100644 (file)
index 0000000..5b87d6a
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pcapgo
+
+import (
+       "bytes"
+       "github.com/google/gopacket"
+       "testing"
+       "time"
+)
+
+func TestWriteHeader(t *testing.T) {
+       var buf bytes.Buffer
+       w := NewWriter(&buf)
+       w.WriteFileHeader(0x1234, 0x56)
+       want := []byte{
+               0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x34, 0x12, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
+       }
+       if got := buf.Bytes(); !bytes.Equal(got, want) {
+               t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, got)
+       }
+}
+
+func TestWritePacket(t *testing.T) {
+       ci := gopacket.CaptureInfo{
+               Timestamp:     time.Unix(0x01020304, 0xAA*1000),
+               Length:        0xABCD,
+               CaptureLength: 10,
+       }
+       data := []byte{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
+       var buf bytes.Buffer
+       w := NewWriter(&buf)
+       w.WritePacket(ci, data)
+       want := []byte{
+               0x04, 0x03, 0x02, 0x01, 0xAA, 0x00, 0x00, 0x00,
+               0x0A, 0x00, 0x00, 0x00, 0xCD, 0xAB, 0x00, 0x00,
+               0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+       }
+       if got := buf.Bytes(); !bytes.Equal(got, want) {
+               t.Errorf("buf mismatch:\nwant: %+v\ngot:  %+v", want, got)
+       }
+}
+
+func TestCaptureInfoErrors(t *testing.T) {
+       data := []byte{1, 2, 3, 4}
+       ts := time.Unix(0, 0)
+       for _, test := range []gopacket.CaptureInfo{
+               gopacket.CaptureInfo{
+                       Timestamp:     ts,
+                       Length:        5,
+                       CaptureLength: 5,
+               },
+               gopacket.CaptureInfo{
+                       Timestamp:     ts,
+                       Length:        3,
+                       CaptureLength: 4,
+               },
+       } {
+               var buf bytes.Buffer
+               w := NewWriter(&buf)
+               if err := w.WritePacket(test, data); err == nil {
+                       t.Errorf("CaptureInfo %+v should have error", test)
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/pfring/doc.go b/vendor/github.com/google/gopacket/pfring/doc.go
new file mode 100644 (file)
index 0000000..32baaf6
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+/*Package pfring wraps the PF_RING C library for Go.
+
+PF_RING is a high-performance packet capture library written by ntop.org (see
+http://www.ntop.org/products/pf_ring/).  This library allows you to utilize the
+PF_RING library with gopacket to read packet data and decode it.
+
+This package is meant to be used with its parent,
+http://github.com/google/gopacket, although it can also be used independently
+if you just want to get packet data from the wire.
+
+Simple Example
+
+This is probably the simplest code you can use to start getting packets through
+pfring:
+
+ if ring, err := pfring.NewRing("eth0", 65536, pfring.FlagPromisc); err != nil {
+   panic(err)
+ } else if err := ring.SetBPFFilter("tcp and port 80"); err != nil {  // optional
+   panic(err)
+ } else if err := ring.Enable(); err != nil { // Must do this!, or you get no packets!
+   panic(err)
+ } else {
+   packetSource := gopacket.NewPacketSource(ring, layers.LinkTypeEthernet)
+        for packet := range packetSource.Packets() {
+     handlePacket(packet)  // Do something with a packet here.
+   }
+ }
+
+Pfring Tweaks
+
+PF_RING has a ton of optimizations and tweaks to make sure you get just the
+packets you want.  For example, if you're only using pfring to read packets,
+consider running:
+
+ ring.SetSocketMode(pfring.ReadOnly)
+
+If you only care about packets received on your interface (not those transmitted
+by the interface), you can run:
+
+ ring.SetDirection(pfring.ReceiveOnly)
+
+Pfring Clusters
+
+PF_RING has an idea of 'clusters', where multiple applications can all read from
+the same cluster, and PF_RING will multiplex packets over that cluster such that
+only one application receives each packet.  We won't discuss this mechanism in
+too much more detail (see the ntop.org docs for more info), but here's how to
+utilize this with the pfring go library:
+
+ ring.SetCluster(1, pfring.ClusterPerFlow5Tuple)
+*/
+package pfring
diff --git a/vendor/github.com/google/gopacket/pfring/pfring.go b/vendor/github.com/google/gopacket/pfring/pfring.go
new file mode 100644 (file)
index 0000000..1d2fa68
--- /dev/null
@@ -0,0 +1,343 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+// Copyright 2009-2011 Andreas Krennmair. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package pfring
+
+/*
+#cgo LDFLAGS: -lpfring -lpcap
+#include <stdlib.h>
+#include <pfring.h>
+#include <linux/pf_ring.h>
+
+int pfring_readpacketdatato_wrapper(
+    pfring* ring,
+    u_char* buffer,
+    u_int buffer_len,
+    struct pfring_pkthdr* hdr) {
+  // We can't pass a Go pointer to a Go pointer which means we can't pass
+  // buffer as a uchar**, like pfring_recv wants, for ReadPacketDataTo.  So,
+  // this wrapper does the pointer conversion in C code.  Since this isn't
+  // zero-copy, it turns out that the pointer-to-pointer part of things isn't
+  // actually used anyway.
+  return pfring_recv(ring, &buffer, buffer_len, hdr, 1);
+}
+*/
+import "C"
+
+// NOTE:  If you install PF_RING with non-standard options, you may also need
+// to use LDFLAGS -lnuma and/or -lrt.  Both have been reported necessary if
+// PF_RING is configured with --disable-bpf.
+
+import (
+       "fmt"
+       "net"
+       "os"
+       "strconv"
+       "sync"
+       "time"
+       "unsafe"
+
+       "github.com/google/gopacket"
+)
+
+const errorBufferSize = 256
+
+// Ring provides a handle to a pf_ring.
+type Ring struct {
+       // cptr is the handle for the actual pcap C object.
+       cptr                    *C.pfring
+       snaplen                 int
+       useExtendedPacketHeader bool
+       interfaceIndex          int
+       mu                      sync.Mutex
+       // Since pointers to these objects are passed into a C function, if
+       // they're declared locally then the Go compiler thinks they may have
+       // escaped into C-land, so it allocates them on the heap.  This causes a
+       // huge memory hit, so to handle that we store them here instead.
+       pkthdr C.struct_pfring_pkthdr
+       bufPtr *C.u_char
+}
+
+// Flag provides a set of boolean flags to use when creating a new ring.
+type Flag uint32
+
+// Set of flags that can be passed (OR'd together) to NewRing.
+const (
+       FlagReentrant       Flag = C.PF_RING_REENTRANT
+       FlagLongHeader      Flag = C.PF_RING_LONG_HEADER
+       FlagPromisc         Flag = C.PF_RING_PROMISC
+       FlagDNASymmetricRSS Flag = C.PF_RING_DNA_SYMMETRIC_RSS
+       FlagTimestamp       Flag = C.PF_RING_TIMESTAMP
+       FlagHWTimestamp     Flag = C.PF_RING_HW_TIMESTAMP
+)
+
+// NewRing creates a new PFRing.  Note that when the ring is initially created,
+// it is disabled.  The caller must call Enable to start receiving packets.
+// The caller should call Close on the given ring when finished with it.
+func NewRing(device string, snaplen uint32, flags Flag) (ring *Ring, _ error) {
+       dev := C.CString(device)
+       defer C.free(unsafe.Pointer(dev))
+
+       cptr, err := C.pfring_open(dev, C.u_int32_t(snaplen), C.u_int32_t(flags))
+       if cptr == nil || err != nil {
+               return nil, fmt.Errorf("pfring NewRing error: %v", err)
+       }
+       ring = &Ring{cptr: cptr, snaplen: int(snaplen)}
+
+       if flags&FlagLongHeader == FlagLongHeader {
+               ring.useExtendedPacketHeader = true
+       } else {
+               ifc, err := net.InterfaceByName(device)
+               if err == nil {
+                       ring.interfaceIndex = ifc.Index
+               }
+       }
+       ring.SetApplicationName(os.Args[0])
+       return
+}
+
+// Close closes the given Ring.  After this call, the Ring should no longer be
+// used.
+func (r *Ring) Close() {
+       C.pfring_close(r.cptr)
+}
+
+// NextResult is the return code from a call to Next.
+type NextResult int32
+
+// Set of results that could be returned from a call to get another packet.
+const (
+       NextNoPacketNonblocking NextResult = 0
+       NextError               NextResult = -1
+       NextOk                  NextResult = 1
+       NextNotEnabled          NextResult = -7
+)
+
+// NextResult implements the error interface.
+func (n NextResult) Error() string {
+       switch n {
+       case NextNoPacketNonblocking:
+               return "No packet available, nonblocking socket"
+       case NextError:
+               return "Generic error"
+       case NextOk:
+               return "Success (not an error)"
+       case NextNotEnabled:
+               return "Ring not enabled"
+       }
+       return strconv.Itoa(int(n))
+}
+
+// ReadPacketDataTo reads packet data into a user-supplied buffer.
+// This function ignores snaplen and instead reads up to the length of the
+// passed-in slice.
+// The number of bytes read into data will be returned in ci.CaptureLength.
+func (r *Ring) ReadPacketDataTo(data []byte) (ci gopacket.CaptureInfo, err error) {
+       // This tricky bufPtr points to the start of our slice data, so pfring_recv
+       // will actually write directly into our Go slice.  Nice!
+       r.mu.Lock()
+       r.bufPtr = (*C.u_char)(unsafe.Pointer(&data[0]))
+       result := NextResult(C.pfring_readpacketdatato_wrapper(r.cptr, r.bufPtr, C.u_int(len(data)), &r.pkthdr))
+       if result != NextOk {
+               err = result
+               r.mu.Unlock()
+               return
+       }
+       ci.Timestamp = time.Unix(int64(r.pkthdr.ts.tv_sec),
+               int64(r.pkthdr.ts.tv_usec)*1000) // convert micros to nanos
+       ci.CaptureLength = int(r.pkthdr.caplen)
+       ci.Length = int(r.pkthdr.len)
+       if r.useExtendedPacketHeader {
+               ci.InterfaceIndex = int(r.pkthdr.extended_hdr.if_index)
+       } else {
+               ci.InterfaceIndex = r.interfaceIndex
+       }
+       r.mu.Unlock()
+       return
+}
+
+// ReadPacketData returns the next packet read from the pcap handle, along with an error
+// code associated with that packet.  If the packet is read successfully, the
+// returned error is nil.
+func (r *Ring) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+       data = make([]byte, r.snaplen)
+       ci, err = r.ReadPacketDataTo(data)
+       if err != nil {
+               data = nil
+               return
+       }
+       data = data[:ci.CaptureLength]
+       return
+}
+
+// ClusterType is a type of clustering used when balancing across multiple
+// rings.
+type ClusterType C.cluster_type
+
+const (
+       // ClusterPerFlow clusters by <src ip, src port, dst ip, dst port, proto,
+       // vlan>
+       ClusterPerFlow ClusterType = C.cluster_per_flow
+       // ClusterRoundRobin round-robins packets between applications, ignoring
+       // packet information.
+       ClusterRoundRobin ClusterType = C.cluster_round_robin
+       // ClusterPerFlow2Tuple clusters by <src ip, dst ip>
+       ClusterPerFlow2Tuple ClusterType = C.cluster_per_flow_2_tuple
+       // ClusterPerFlow4Tuple clusters by <src ip, src port, dst ip, dst port>
+       ClusterPerFlow4Tuple ClusterType = C.cluster_per_flow_4_tuple
+       // ClusterPerFlow5Tuple clusters by <src ip, src port, dst ip, dst port,
+       // proto>
+       ClusterPerFlow5Tuple ClusterType = C.cluster_per_flow_5_tuple
+       // ClusterPerFlowTCP5Tuple acts like ClusterPerFlow5Tuple for TCP packets and
+       // like ClusterPerFlow2Tuple for all other packets.
+       ClusterPerFlowTCP5Tuple ClusterType = C.cluster_per_flow_tcp_5_tuple
+)
+
+// SetCluster sets which cluster the ring should be part of, and the cluster
+// type to use.
+func (r *Ring) SetCluster(cluster int, typ ClusterType) error {
+       if rv := C.pfring_set_cluster(r.cptr, C.u_int(cluster), C.cluster_type(typ)); rv != 0 {
+               return fmt.Errorf("Unable to set cluster, got error code %d", rv)
+       }
+       return nil
+}
+
+// RemoveFromCluster removes the ring from the cluster it was put in with
+// SetCluster.
+func (r *Ring) RemoveFromCluster() error {
+       if rv := C.pfring_remove_from_cluster(r.cptr); rv != 0 {
+               return fmt.Errorf("Unable to remove from cluster, got error code %d", rv)
+       }
+       return nil
+}
+
+// SetSamplingRate sets the sampling rate to 1/<rate>.
+func (r *Ring) SetSamplingRate(rate int) error {
+       if rv := C.pfring_set_sampling_rate(r.cptr, C.u_int32_t(rate)); rv != 0 {
+               return fmt.Errorf("Unable to set sampling rate, got error code %d", rv)
+       }
+       return nil
+}
+
+// SetBPFFilter sets the BPF filter for the ring.
+func (r *Ring) SetBPFFilter(bpfFilter string) error {
+       filter := C.CString(bpfFilter)
+       defer C.free(unsafe.Pointer(filter))
+       if rv := C.pfring_set_bpf_filter(r.cptr, filter); rv != 0 {
+               return fmt.Errorf("Unable to set BPF filter, got error code %d", rv)
+       }
+       return nil
+}
+
+// RemoveBPFFilter removes the BPF filter from the ring.
+func (r *Ring) RemoveBPFFilter() error {
+       if rv := C.pfring_remove_bpf_filter(r.cptr); rv != 0 {
+               return fmt.Errorf("Unable to remove BPF filter, got error code %d", rv)
+       }
+       return nil
+}
+
+// WritePacketData uses the ring to send raw packet data to the interface.
+func (r *Ring) WritePacketData(data []byte) error {
+       buf := (*C.char)(unsafe.Pointer(&data[0]))
+       if rv := C.pfring_send(r.cptr, buf, C.u_int(len(data)), 1); rv < 0 {
+               return fmt.Errorf("Unable to send packet data, got error code %d", rv)
+       }
+       return nil
+}
+
+// Enable enables the given ring.  This function MUST be called on each new
+// ring after it has been set up, or that ring will NOT receive packets.
+func (r *Ring) Enable() error {
+       if rv := C.pfring_enable_ring(r.cptr); rv != 0 {
+               return fmt.Errorf("Unable to enable ring, got error code %d", rv)
+       }
+       return nil
+}
+
+// Disable disables the given ring.  After this call, it will no longer receive
+// packets.
+func (r *Ring) Disable() error {
+       if rv := C.pfring_disable_ring(r.cptr); rv != 0 {
+               return fmt.Errorf("Unable to disable ring, got error code %d", rv)
+       }
+       return nil
+}
+
+// Stats provides simple statistics on a ring.
+type Stats struct {
+       Received, Dropped uint64
+}
+
+// Stats returns statistsics for the ring.
+func (r *Ring) Stats() (s Stats, err error) {
+       var stats C.pfring_stat
+       if rv := C.pfring_stats(r.cptr, &stats); rv != 0 {
+               err = fmt.Errorf("Unable to get ring stats, got error code %d", rv)
+               return
+       }
+       s.Received = uint64(stats.recv)
+       s.Dropped = uint64(stats.drop)
+       return
+}
+
+// Direction is a simple enum to set which packets (TX, RX, or both) a ring
+// captures.
+type Direction C.packet_direction
+
+const (
+       // TransmitOnly will only capture packets transmitted by the ring's
+       // interface(s).
+       TransmitOnly Direction = C.tx_only_direction
+       // ReceiveOnly will only capture packets received by the ring's
+       // interface(s).
+       ReceiveOnly Direction = C.rx_only_direction
+       // ReceiveAndTransmit will capture both received and transmitted packets on
+       // the ring's interface(s).
+       ReceiveAndTransmit Direction = C.rx_and_tx_direction
+)
+
+// SetDirection sets which packets should be captured by the ring.
+func (r *Ring) SetDirection(d Direction) error {
+       if rv := C.pfring_set_direction(r.cptr, C.packet_direction(d)); rv != 0 {
+               return fmt.Errorf("Unable to set ring direction, got error code %d", rv)
+       }
+       return nil
+}
+
+// SocketMode is an enum for setting whether a ring should read, write, or both.
+type SocketMode C.socket_mode
+
+const (
+       // WriteOnly sets up the ring to only send packets (Inject), not read them.
+       WriteOnly SocketMode = C.send_only_mode
+       // ReadOnly sets up the ring to only receive packets (ReadPacketData), not
+       // send them.
+       ReadOnly SocketMode = C.recv_only_mode
+       // WriteAndRead sets up the ring to both send and receive packets.
+       WriteAndRead SocketMode = C.send_and_recv_mode
+)
+
+// SetSocketMode sets the mode of the ring socket to send, receive, or both.
+func (r *Ring) SetSocketMode(s SocketMode) error {
+       if rv := C.pfring_set_socket_mode(r.cptr, C.socket_mode(s)); rv != 0 {
+               return fmt.Errorf("Unable to set socket mode, got error code %d", rv)
+       }
+       return nil
+}
+
+// SetApplicationName sets a string name to the ring.  This name is available in
+// /proc stats for pf_ring.  By default, NewRing automatically calls this with
+// argv[0].
+func (r *Ring) SetApplicationName(name string) error {
+       buf := C.CString(name)
+       defer C.free(unsafe.Pointer(buf))
+       if rv := C.pfring_set_application_name(r.cptr, buf); rv != 0 {
+               return fmt.Errorf("Unable to set ring application name, got error code %d", rv)
+       }
+       return nil
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/cap2test.go b/vendor/github.com/google/gopacket/reassembly/cap2test.go
new file mode 100644 (file)
index 0000000..1d43f1d
--- /dev/null
@@ -0,0 +1,105 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build ignore
+
+package main
+
+import (
+       "bytes"
+       "flag"
+       "fmt"
+       "log"
+       "os"
+       "strings"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+       "github.com/google/gopacket/pcap"
+)
+
+var input = flag.String("i", "", "Input filename")
+
+func main() {
+       var handler *pcap.Handle
+       var err error
+       flag.Parse()
+       if *input == "" {
+               log.Fatalf("Please specify input filename")
+       }
+       if handler, err = pcap.OpenOffline(*input); err != nil {
+               log.Fatalf("Failed to open: %s: %s", *input, err)
+       }
+       args := flag.Args()
+       if len(args) > 0 {
+               filter := strings.Join(args, " ")
+               if err := handler.SetBPFFilter(filter); err != nil {
+                       log.Fatalf("Failed to set BPF filter \"%s\": %s", filter, err)
+               }
+               handler.Stats()
+       }
+       var decoder gopacket.Decoder
+       var ok bool
+       linkType := fmt.Sprintf("%s", handler.LinkType())
+       if decoder, ok = gopacket.DecodersByLayerName[linkType]; !ok {
+               log.Fatalf("Failed to find decoder to pcap's linktype %s", linkType)
+       }
+       source := gopacket.NewPacketSource(handler, decoder)
+       count := uint64(0)
+       pktNonTcp := uint64(0)
+       pktTcp := uint64(0)
+       fmt.Println("test([]testSequence{")
+       for packet := range source.Packets() {
+               count++
+               tcp := packet.Layer(layers.LayerTypeTCP)
+               if tcp == nil {
+                       pktNonTcp++
+                       continue
+               } else {
+                       pktTcp++
+                       tcp := tcp.(*layers.TCP)
+                       //fmt.Printf("packet: %s\n", tcp)
+                       var b bytes.Buffer
+                       b.WriteString("{\n")
+                       // TCP
+                       b.WriteString("tcp: layers.TCP{\n")
+                       if tcp.SYN {
+                               b.WriteString("  SYN: true,\n")
+                       }
+                       if tcp.ACK {
+                               b.WriteString("  ACK: true,\n")
+                       }
+                       if tcp.RST {
+                               b.WriteString("  RST: true,\n")
+                       }
+                       if tcp.FIN {
+                               b.WriteString("  FIN: true,\n")
+                       }
+                       b.WriteString(fmt.Sprintf("  SrcPort: %d,\n", tcp.SrcPort))
+                       b.WriteString(fmt.Sprintf("  DstPort: %d,\n", tcp.DstPort))
+                       b.WriteString(fmt.Sprintf("  Seq: %d,\n", tcp.Seq))
+                       b.WriteString(fmt.Sprintf("  Ack: %d,\n", tcp.Ack))
+                       b.WriteString("  BaseLayer: layers.BaseLayer{Payload: []byte{")
+                       for _, p := range tcp.Payload {
+                               b.WriteString(fmt.Sprintf("%d,", p))
+                       }
+                       b.WriteString("}},\n")
+                       b.WriteString("},\n")
+                       // CaptureInfo
+                       b.WriteString("ci: gopacket.CaptureInfo{\n")
+                       ts := packet.Metadata().CaptureInfo.Timestamp
+                       b.WriteString(fmt.Sprintf("  Timestamp: time.Unix(%d,%d),\n", ts.Unix(), ts.Nanosecond()))
+                       b.WriteString("},\n")
+                       // Struct
+                       b.WriteString("},\n")
+                       fmt.Print(b.String())
+               }
+
+       }
+       fmt.Println("})")
+
+       fmt.Fprintf(os.Stderr, "Total: %d, TCP: %d, non-TCP: %d\n", count, pktTcp, pktNonTcp)
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/memory.go b/vendor/github.com/google/gopacket/reassembly/memory.go
new file mode 100644 (file)
index 0000000..c1b2ae7
--- /dev/null
@@ -0,0 +1,254 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package reassembly
+
+import (
+       "flag"
+       "log"
+       "sync"
+       "time"
+
+       "github.com/google/gopacket/layers"
+)
+
+var memLog = flag.Bool("assembly_memuse_log", defaultDebug, "If true, the github.com/google/gopacket/reassembly library will log information regarding its memory use every once in a while.")
+
+/*
+ * pageCache
+ */
+// pageCache is a concurrency-unsafe store of page objects we use to avoid
+// memory allocation as much as we can.
+type pageCache struct {
+       free         []*page
+       pcSize       int
+       size, used   int
+       pageRequests int64
+       ops          int
+       nextShrink   int
+}
+
+const initialAllocSize = 1024
+
+func newPageCache() *pageCache {
+       pc := &pageCache{
+               free:   make([]*page, 0, initialAllocSize),
+               pcSize: initialAllocSize,
+       }
+       pc.grow()
+       return pc
+}
+
+// grow exponentially increases the size of our page cache as much as necessary.
+func (c *pageCache) grow() {
+       pages := make([]page, c.pcSize)
+       c.size += c.pcSize
+       for i := range pages {
+               c.free = append(c.free, &pages[i])
+       }
+       if *memLog {
+               log.Println("PageCache: created", c.pcSize, "new pages, size:", c.size, "cap:", cap(c.free), "len:", len(c.free))
+       }
+       // control next shrink attempt
+       c.nextShrink = c.pcSize
+       c.ops = 0
+       // prepare for next alloc
+       c.pcSize *= 2
+}
+
+// Remove references to unused pages to let GC collect them
+// Note: memory used by c.free itself it not collected.
+func (c *pageCache) tryShrink() {
+       var min = c.pcSize / 2
+       if min < initialAllocSize {
+               min = initialAllocSize
+       }
+       if len(c.free) <= min {
+               return
+       }
+       for i := range c.free[min:] {
+               c.free[min+i] = nil
+       }
+       c.size -= len(c.free) - min
+       c.free = c.free[:min]
+       c.pcSize = min
+}
+
+// next returns a clean, ready-to-use page object.
+func (c *pageCache) next(ts time.Time) (p *page) {
+       if *memLog {
+               c.pageRequests++
+               if c.pageRequests&0xFFFF == 0 {
+                       log.Println("PageCache:", c.pageRequests, "requested,", c.used, "used,", len(c.free), "free")
+               }
+       }
+       if len(c.free) == 0 {
+               c.grow()
+       }
+       i := len(c.free) - 1
+       p, c.free = c.free[i], c.free[:i]
+       p.seen = ts
+       p.bytes = p.buf[:0]
+       c.used++
+       if *memLog {
+               log.Printf("allocator returns %s\n", p)
+       }
+       c.ops++
+       if c.ops > c.nextShrink {
+               c.ops = 0
+               c.tryShrink()
+       }
+
+       return p
+}
+
+// replace replaces a page into the pageCache.
+func (c *pageCache) replace(p *page) {
+       c.used--
+       if *memLog {
+               log.Printf("replacing %s\n", p)
+       }
+       p.prev = nil
+       p.next = nil
+       c.free = append(c.free, p)
+}
+
+/*
+ * StreamPool
+ */
+
+// StreamPool stores all streams created by Assemblers, allowing multiple
+// assemblers to work together on stream processing while enforcing the fact
+// that a single stream receives its data serially.  It is safe
+// for concurrency, usable by multiple Assemblers at once.
+//
+// StreamPool handles the creation and storage of Stream objects used by one or
+// more Assembler objects.  When a new TCP stream is found by an Assembler, it
+// creates an associated Stream by calling its StreamFactory's New method.
+// Thereafter (until the stream is closed), that Stream object will receive
+// assembled TCP data via Assembler's calls to the stream's Reassembled
+// function.
+//
+// Like the Assembler, StreamPool attempts to minimize allocation.  Unlike the
+// Assembler, though, it does have to do some locking to make sure that the
+// connection objects it stores are accessible to multiple Assemblers.
+type StreamPool struct {
+       conns              map[key]*connection
+       users              int
+       mu                 sync.RWMutex
+       factory            StreamFactory
+       free               []*connection
+       all                [][]connection
+       nextAlloc          int
+       newConnectionCount int64
+}
+
+func (p *StreamPool) grow() {
+       conns := make([]connection, p.nextAlloc)
+       p.all = append(p.all, conns)
+       for i := range conns {
+               p.free = append(p.free, &conns[i])
+       }
+       if *memLog {
+               log.Println("StreamPool: created", p.nextAlloc, "new connections")
+       }
+       p.nextAlloc *= 2
+}
+
+// Dump logs all connections
+func (p *StreamPool) Dump() {
+       p.mu.Lock()
+       defer p.mu.Unlock()
+       log.Printf("Remaining %d connections: ", len(p.conns))
+       for _, conn := range p.conns {
+               log.Printf("%v %s", conn.key, conn)
+       }
+}
+
+func (p *StreamPool) remove(conn *connection) {
+       p.mu.Lock()
+       if _, ok := p.conns[conn.key]; ok {
+               delete(p.conns, conn.key)
+               p.free = append(p.free, conn)
+       }
+       p.mu.Unlock()
+}
+
+// NewStreamPool creates a new connection pool.  Streams will
+// be created as necessary using the passed-in StreamFactory.
+func NewStreamPool(factory StreamFactory) *StreamPool {
+       return &StreamPool{
+               conns:     make(map[key]*connection, initialAllocSize),
+               free:      make([]*connection, 0, initialAllocSize),
+               factory:   factory,
+               nextAlloc: initialAllocSize,
+       }
+}
+
+func (p *StreamPool) connections() []*connection {
+       p.mu.RLock()
+       conns := make([]*connection, 0, len(p.conns))
+       for _, conn := range p.conns {
+               conns = append(conns, conn)
+       }
+       p.mu.RUnlock()
+       return conns
+}
+
+func (p *StreamPool) newConnection(k key, s Stream, ts time.Time) (c *connection, h *halfconnection, r *halfconnection) {
+       if *memLog {
+               p.newConnectionCount++
+               if p.newConnectionCount&0x7FFF == 0 {
+                       log.Println("StreamPool:", p.newConnectionCount, "requests,", len(p.conns), "used,", len(p.free), "free")
+               }
+       }
+       if len(p.free) == 0 {
+               p.grow()
+       }
+       index := len(p.free) - 1
+       c, p.free = p.free[index], p.free[:index]
+       c.reset(k, s, ts)
+       return c, &c.c2s, &c.s2c
+}
+
+func (p *StreamPool) getHalf(k key) (*connection, *halfconnection, *halfconnection) {
+       conn := p.conns[k]
+       if conn != nil {
+               return conn, &conn.c2s, &conn.s2c
+       }
+       rk := k.Reverse()
+       conn = p.conns[rk]
+       if conn != nil {
+               return conn, &conn.s2c, &conn.c2s
+       }
+       return nil, nil, nil
+}
+
+// getConnection returns a connection.  If end is true and a connection
+// does not already exist, returns nil.  This allows us to check for a
+// connection without actually creating one if it doesn't already exist.
+func (p *StreamPool) getConnection(k key, end bool, ts time.Time, tcp *layers.TCP, ac AssemblerContext) (*connection, *halfconnection, *halfconnection) {
+       p.mu.RLock()
+       conn, half, rev := p.getHalf(k)
+       p.mu.RUnlock()
+       if end || conn != nil {
+               return conn, half, rev
+       }
+       s := p.factory.New(k[0], k[1], tcp, ac)
+       p.mu.Lock()
+       defer p.mu.Unlock()
+       conn, half, rev = p.newConnection(k, s, ts)
+       conn2, half2, rev2 := p.getHalf(k)
+       if conn2 != nil {
+               if conn2.key != k {
+                       panic("FIXME: other dir added in the meantime...")
+               }
+               // FIXME: delete s ?
+               return conn2, half2, rev2
+       }
+       p.conns[k] = conn
+       return conn, half, rev
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/tcpassembly.go b/vendor/github.com/google/gopacket/reassembly/tcpassembly.go
new file mode 100644 (file)
index 0000000..bdf0deb
--- /dev/null
@@ -0,0 +1,1311 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package reassembly provides TCP stream re-assembly.
+//
+// The reassembly package implements uni-directional TCP reassembly, for use in
+// packet-sniffing applications.  The caller reads packets off the wire, then
+// presents them to an Assembler in the form of gopacket layers.TCP packets
+// (github.com/google/gopacket, github.com/google/gopacket/layers).
+//
+// The Assembler uses a user-supplied
+// StreamFactory to create a user-defined Stream interface, then passes packet
+// data in stream order to that object.  A concurrency-safe StreamPool keeps
+// track of all current Streams being reassembled, so multiple Assemblers may
+// run at once to assemble packets while taking advantage of multiple cores.
+//
+// TODO: Add simplest example
+package reassembly
+
+import (
+       "encoding/hex"
+       "flag"
+       "fmt"
+       "log"
+       "sync"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+)
+
+// TODO:
+// - push to Stream on Ack
+// - implement chunked (cheap) reads and Reader() interface
+// - better organize file: split files: 'mem', 'misc' (seq + flow)
+
+var defaultDebug = false
+
+var debugLog = flag.Bool("assembly_debug_log", defaultDebug, "If true, the github.com/google/gopacket/reassembly library will log verbose debugging information (at least one line per packet)")
+
+const invalidSequence = -1
+const uint32Max = 0xFFFFFFFF
+
+// Sequence is a TCP sequence number.  It provides a few convenience functions
+// for handling TCP wrap-around.  The sequence should always be in the range
+// [0,0xFFFFFFFF]... its other bits are simply used in wrap-around calculations
+// and should never be set.
+type Sequence int64
+
+// Difference defines an ordering for comparing TCP sequences that's safe for
+// roll-overs.  It returns:
+//    > 0 : if t comes after s
+//    < 0 : if t comes before s
+//      0 : if t == s
+// The number returned is the sequence difference, so 4.Difference(8) will
+// return 4.
+//
+// It handles rollovers by considering any sequence in the first quarter of the
+// uint32 space to be after any sequence in the last quarter of that space, thus
+// wrapping the uint32 space.
+func (s Sequence) Difference(t Sequence) int {
+       if s > uint32Max-uint32Max/4 && t < uint32Max/4 {
+               t += uint32Max
+       } else if t > uint32Max-uint32Max/4 && s < uint32Max/4 {
+               s += uint32Max
+       }
+       return int(t - s)
+}
+
+// Add adds an integer to a sequence and returns the resulting sequence.
+func (s Sequence) Add(t int) Sequence {
+       return (s + Sequence(t)) & uint32Max
+}
+
+// TCPAssemblyStats provides some figures for a ScatterGather
+type TCPAssemblyStats struct {
+       // For this ScatterGather
+       Chunks  int
+       Packets int
+       // For the half connection, since last call to ReassembledSG()
+       QueuedBytes    int
+       QueuedPackets  int
+       OverlapBytes   int
+       OverlapPackets int
+}
+
+// ScatterGather is used to pass reassembled data and metadata of reassembled
+// packets to a Stream via ReassembledSG
+type ScatterGather interface {
+       // Returns the length of available bytes and saved bytes
+       Lengths() (int, int)
+       // Returns the bytes up to length (shall be <= available bytes)
+       Fetch(length int) []byte
+       // Tell to keep from offset
+       KeepFrom(offset int)
+       // Return CaptureInfo of packet corresponding to given offset
+       CaptureInfo(offset int) gopacket.CaptureInfo
+       // Return some info about the reassembled chunks
+       Info() (direction TCPFlowDirection, start bool, end bool, skip int)
+       // Return some stats regarding the state of the stream
+       Stats() TCPAssemblyStats
+}
+
+// byteContainer is either a page or a livePacket
+type byteContainer interface {
+       getBytes() []byte
+       length() int
+       convertToPages(*pageCache, int, AssemblerContext) (*page, *page, int)
+       captureInfo() gopacket.CaptureInfo
+       assemblerContext() AssemblerContext
+       release(*pageCache) int
+       isStart() bool
+       isEnd() bool
+       getSeq() Sequence
+       isPacket() bool
+}
+
+// Implements a ScatterGather
+type reassemblyObject struct {
+       all       []byteContainer
+       Skip      int
+       Direction TCPFlowDirection
+       saved     int
+       toKeep    int
+       // stats
+       queuedBytes    int
+       queuedPackets  int
+       overlapBytes   int
+       overlapPackets int
+}
+
+func (rl *reassemblyObject) Lengths() (int, int) {
+       l := 0
+       for _, r := range rl.all {
+               l += r.length()
+       }
+       return l, rl.saved
+}
+
+func (rl *reassemblyObject) Fetch(l int) []byte {
+       if l <= rl.all[0].length() {
+               return rl.all[0].getBytes()[:l]
+       }
+       bytes := make([]byte, 0, l)
+       for _, bc := range rl.all {
+               bytes = append(bytes, bc.getBytes()...)
+       }
+       return bytes[:l]
+}
+
+func (rl *reassemblyObject) KeepFrom(offset int) {
+       rl.toKeep = offset
+}
+
+func (rl *reassemblyObject) CaptureInfo(offset int) gopacket.CaptureInfo {
+       current := 0
+       for _, r := range rl.all {
+               if current >= offset {
+                       return r.captureInfo()
+               }
+               current += r.length()
+       }
+       // Invalid offset
+       return gopacket.CaptureInfo{}
+}
+
+func (rl *reassemblyObject) Info() (TCPFlowDirection, bool, bool, int) {
+       return rl.Direction, rl.all[0].isStart(), rl.all[len(rl.all)-1].isEnd(), rl.Skip
+}
+
+func (rl *reassemblyObject) Stats() TCPAssemblyStats {
+       packets := int(0)
+       for _, r := range rl.all {
+               if r.isPacket() {
+                       packets++
+               }
+       }
+       return TCPAssemblyStats{
+               Chunks:         len(rl.all),
+               Packets:        packets,
+               QueuedBytes:    rl.queuedBytes,
+               QueuedPackets:  rl.queuedPackets,
+               OverlapBytes:   rl.overlapBytes,
+               OverlapPackets: rl.overlapPackets,
+       }
+}
+
+const pageBytes = 1900
+
+// TCPFlowDirection distinguish the two half-connections directions.
+//
+// TCPDirClientToServer is assigned to half-connection for the first received
+// packet, hence might be wrong if packets are not received in order.
+// It's up to the caller (e.g. in Accept()) to decide if the direction should
+// be interpretted differently.
+type TCPFlowDirection bool
+
+// Value are not really useful
+const (
+       TCPDirClientToServer TCPFlowDirection = false
+       TCPDirServerToClient TCPFlowDirection = true
+)
+
+func (dir TCPFlowDirection) String() string {
+       switch dir {
+       case TCPDirClientToServer:
+               return "client->server"
+       case TCPDirServerToClient:
+               return "server->client"
+       }
+       return ""
+}
+
+// Reverse returns the reversed direction
+func (dir TCPFlowDirection) Reverse() TCPFlowDirection {
+       return !dir
+}
+
+/* page: implements a byteContainer */
+
+// page is used to store TCP data we're not ready for yet (out-of-order
+// packets).  Unused pages are stored in and returned from a pageCache, which
+// avoids memory allocation.  Used pages are stored in a doubly-linked list in
+// a connection.
+type page struct {
+       bytes      []byte
+       seq        Sequence
+       prev, next *page
+       buf        [pageBytes]byte
+       ac         AssemblerContext // only set for the first page of a packet
+       seen       time.Time
+       start, end bool
+}
+
+func (p *page) getBytes() []byte {
+       return p.bytes
+}
+func (p *page) captureInfo() gopacket.CaptureInfo {
+       return p.ac.GetCaptureInfo()
+}
+func (p *page) assemblerContext() AssemblerContext {
+       return p.ac
+}
+func (p *page) convertToPages(pc *pageCache, skip int, ac AssemblerContext) (*page, *page, int) {
+       if skip != 0 {
+               p.bytes = p.bytes[skip:]
+               p.seq = p.seq.Add(skip)
+       }
+       p.prev, p.next = nil, nil
+       return p, p, 1
+}
+func (p *page) length() int {
+       return len(p.bytes)
+}
+func (p *page) release(pc *pageCache) int {
+       pc.replace(p)
+       return 1
+}
+func (p *page) isStart() bool {
+       return p.start
+}
+func (p *page) isEnd() bool {
+       return p.end
+}
+func (p *page) getSeq() Sequence {
+       return p.seq
+}
+func (p *page) isPacket() bool {
+       return p.ac != nil
+}
+func (p *page) String() string {
+       return fmt.Sprintf("page@%p{seq: %v, bytes:%d, -> nextSeq:%v} (prev:%p, next:%p)", p, p.seq, len(p.bytes), p.seq+Sequence(len(p.bytes)), p.prev, p.next)
+}
+
+/* livePacket: implements a byteContainer */
+type livePacket struct {
+       bytes []byte
+       start bool
+       end   bool
+       ci    gopacket.CaptureInfo
+       ac    AssemblerContext
+       seq   Sequence
+}
+
+func (lp *livePacket) getBytes() []byte {
+       return lp.bytes
+}
+func (lp *livePacket) captureInfo() gopacket.CaptureInfo {
+       return lp.ci
+}
+func (lp *livePacket) assemblerContext() AssemblerContext {
+       return lp.ac
+}
+func (lp *livePacket) length() int {
+       return len(lp.bytes)
+}
+func (lp *livePacket) isStart() bool {
+       return lp.start
+}
+func (lp *livePacket) isEnd() bool {
+       return lp.end
+}
+func (lp *livePacket) getSeq() Sequence {
+       return lp.seq
+}
+func (lp *livePacket) isPacket() bool {
+       return true
+}
+
+// Creates a page (or set of pages) from a TCP packet: returns the first and last
+// page in its doubly-linked list of new pages.
+func (lp *livePacket) convertToPages(pc *pageCache, skip int, ac AssemblerContext) (*page, *page, int) {
+       ts := lp.ci.Timestamp
+       first := pc.next(ts)
+       current := first
+       current.prev = nil
+       first.ac = ac
+       numPages := 1
+       seq, bytes := lp.seq.Add(skip), lp.bytes[skip:]
+       for {
+               length := min(len(bytes), pageBytes)
+               current.bytes = current.buf[:length]
+               copy(current.bytes, bytes)
+               current.seq = seq
+               bytes = bytes[length:]
+               if len(bytes) == 0 {
+                       current.end = lp.isEnd()
+                       current.next = nil
+                       break
+               }
+               seq = seq.Add(length)
+               current.next = pc.next(ts)
+               current.next.prev = current
+               current = current.next
+               current.ac = nil
+               numPages++
+       }
+       return first, current, numPages
+}
+func (lp *livePacket) estimateNumberOfPages() int {
+       return (len(lp.bytes) + pageBytes + 1) / pageBytes
+}
+
+func (lp *livePacket) release(*pageCache) int {
+       return 0
+}
+
+// Stream is implemented by the caller to handle incoming reassembled
+// TCP data.  Callers create a StreamFactory, then StreamPool uses
+// it to create a new Stream for every TCP stream.
+//
+// assembly will, in order:
+//    1) Create the stream via StreamFactory.New
+//    2) Call ReassembledSG 0 or more times, passing in reassembled TCP data in order
+//    3) Call ReassemblyComplete one time, after which the stream is dereferenced by assembly.
+type Stream interface {
+       // Tell whether the TCP packet should be accepted, start could be modified to force a start even if no SYN have been seen
+       Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, ackSeq Sequence, start *bool, ac AssemblerContext) bool
+
+       // ReassembledSG is called zero or more times.
+       // ScatterGather is reused after each Reassembled call,
+       // so it's important to copy anything you need out of it,
+       // especially bytes (or use KeepFrom())
+       ReassembledSG(sg ScatterGather, ac AssemblerContext)
+
+       // ReassemblyComplete is called when assembly decides there is
+       // no more data for this Stream, either because a FIN or RST packet
+       // was seen, or because the stream has timed out without any new
+       // packet data (due to a call to FlushCloseOlderThan).
+       // It should return true if the connection should be removed from the pool
+       // It can return false if it want to see subsequent packets with Accept(), e.g. to
+       // see FIN-ACK, for deeper state-machine analysis.
+       ReassemblyComplete(ac AssemblerContext) bool
+}
+
+// StreamFactory is used by assembly to create a new stream for each
+// new TCP session.
+type StreamFactory interface {
+       // New should return a new stream for the given TCP key.
+       New(netFlow, tcpFlow gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream
+}
+
+type key [2]gopacket.Flow
+
+func (k *key) String() string {
+       return fmt.Sprintf("%s:%s", k[0], k[1])
+}
+
+func (k *key) Reverse() key {
+       return key{
+               k[0].Reverse(),
+               k[1].Reverse(),
+       }
+}
+
+const assemblerReturnValueInitialSize = 16
+
+/* one-way connection, i.e. halfconnection */
+type halfconnection struct {
+       dir               TCPFlowDirection
+       pages             int      // Number of pages used (both in first/last and saved)
+       saved             *page    // Doubly-linked list of in-order pages (seq < nextSeq) already given to Stream who told us to keep
+       first, last       *page    // Doubly-linked list of out-of-order pages (seq > nextSeq)
+       nextSeq           Sequence // sequence number of in-order received bytes
+       ackSeq            Sequence
+       created, lastSeen time.Time
+       stream            Stream
+       closed            bool
+       // for stats
+       queuedBytes    int
+       queuedPackets  int
+       overlapBytes   int
+       overlapPackets int
+}
+
+func (half *halfconnection) String() string {
+       closed := ""
+       if half.closed {
+               closed = "closed "
+       }
+       return fmt.Sprintf("%screated:%v, last:%v", closed, half.created, half.lastSeen)
+}
+
+// Dump returns a string (crypticly) describing the halfconnction
+func (half *halfconnection) Dump() string {
+       s := fmt.Sprintf("pages: %d\n"+
+               "nextSeq: %d\n"+
+               "ackSeq: %d\n"+
+               "Seen :  %s\n"+
+               "dir:    %s\n", half.pages, half.nextSeq, half.ackSeq, half.lastSeen, half.dir)
+       nb := 0
+       for p := half.first; p != nil; p = p.next {
+               s += fmt.Sprintf("      Page[%d] %s len: %d\n", nb, p, len(p.bytes))
+               nb++
+       }
+       return s
+}
+
+/* Bi-directionnal connection */
+
+type connection struct {
+       key      key // client->server
+       c2s, s2c halfconnection
+       mu       sync.Mutex
+}
+
+func (c *connection) reset(k key, s Stream, ts time.Time) {
+       c.key = k
+       base := halfconnection{
+               nextSeq:  invalidSequence,
+               ackSeq:   invalidSequence,
+               created:  ts,
+               lastSeen: ts,
+               stream:   s,
+       }
+       c.c2s, c.s2c = base, base
+       c.c2s.dir, c.s2c.dir = TCPDirClientToServer, TCPDirServerToClient
+}
+
+func (c *connection) String() string {
+       return fmt.Sprintf("c2s: %s, s2c: %s", &c.c2s, &c.s2c)
+}
+
+/*
+ * Assembler
+ */
+
+// DefaultAssemblerOptions provides default options for an assembler.
+// These options are used by default when calling NewAssembler, so if
+// modified before a NewAssembler call they'll affect the resulting Assembler.
+//
+// Note that the default options can result in ever-increasing memory usage
+// unless one of the Flush* methods is called on a regular basis.
+var DefaultAssemblerOptions = AssemblerOptions{
+       MaxBufferedPagesPerConnection: 0, // unlimited
+       MaxBufferedPagesTotal:         0, // unlimited
+}
+
+// AssemblerOptions controls the behavior of each assembler.  Modify the
+// options of each assembler you create to change their behavior.
+type AssemblerOptions struct {
+       // MaxBufferedPagesTotal is an upper limit on the total number of pages to
+       // buffer while waiting for out-of-order packets.  Once this limit is
+       // reached, the assembler will degrade to flushing every connection it
+       // gets a packet for.  If <= 0, this is ignored.
+       MaxBufferedPagesTotal int
+       // MaxBufferedPagesPerConnection is an upper limit on the number of pages
+       // buffered for a single connection.  Should this limit be reached for a
+       // particular connection, the smallest sequence number will be flushed, along
+       // with any contiguous data.  If <= 0, this is ignored.
+       MaxBufferedPagesPerConnection int
+}
+
+// Assembler handles reassembling TCP streams.  It is not safe for
+// concurrency... after passing a packet in via the Assemble call, the caller
+// must wait for that call to return before calling Assemble again.  Callers can
+// get around this by creating multiple assemblers that share a StreamPool.  In
+// that case, each individual stream will still be handled serially (each stream
+// has an individual mutex associated with it), however multiple assemblers can
+// assemble different connections concurrently.
+//
+// The Assembler provides (hopefully) fast TCP stream re-assembly for sniffing
+// applications written in Go.  The Assembler uses the following methods to be
+// as fast as possible, to keep packet processing speedy:
+//
+// Avoids Lock Contention
+//
+// Assemblers locks connections, but each connection has an individual lock, and
+// rarely will two Assemblers be looking at the same connection.  Assemblers
+// lock the StreamPool when looking up connections, but they use Reader
+// locks initially, and only force a write lock if they need to create a new
+// connection or close one down.  These happen much less frequently than
+// individual packet handling.
+//
+// Each assembler runs in its own goroutine, and the only state shared between
+// goroutines is through the StreamPool.  Thus all internal Assembler state
+// can be handled without any locking.
+//
+// NOTE:  If you can guarantee that packets going to a set of Assemblers will
+// contain information on different connections per Assembler (for example,
+// they're already hashed by PF_RING hashing or some other hashing mechanism),
+// then we recommend you use a seperate StreamPool per Assembler, thus
+// avoiding all lock contention.  Only when different Assemblers could receive
+// packets for the same Stream should a StreamPool be shared between them.
+//
+// Avoids Memory Copying
+//
+// In the common case, handling of a single TCP packet should result in zero
+// memory allocations.  The Assembler will look up the connection, figure out
+// that the packet has arrived in order, and immediately pass that packet on to
+// the appropriate connection's handling code.  Only if a packet arrives out of
+// order is its contents copied and stored in memory for later.
+//
+// Avoids Memory Allocation
+//
+// Assemblers try very hard to not use memory allocation unless absolutely
+// necessary.  Packet data for sequential packets is passed directly to streams
+// with no copying or allocation.  Packet data for out-of-order packets is
+// copied into reusable pages, and new pages are only allocated rarely when the
+// page cache runs out.  Page caches are Assembler-specific, thus not used
+// concurrently and requiring no locking.
+//
+// Internal representations for connection objects are also reused over time.
+// Because of this, the most common memory allocation done by the Assembler is
+// generally what's done by the caller in StreamFactory.New.  If no allocation
+// is done there, then very little allocation is done ever, mostly to handle
+// large increases in bandwidth or numbers of connections.
+//
+// TODO:  The page caches used by an Assembler will grow to the size necessary
+// to handle a workload, and currently will never shrink.  This means that
+// traffic spikes can result in large memory usage which isn't garbage
+// collected when typical traffic levels return.
+type Assembler struct {
+       AssemblerOptions
+       ret      []byteContainer
+       pc       *pageCache
+       connPool *StreamPool
+       cacheLP  livePacket
+       cacheSG  reassemblyObject
+       start    bool
+}
+
+// NewAssembler creates a new assembler.  Pass in the StreamPool
+// to use, may be shared across assemblers.
+//
+// This sets some sane defaults for the assembler options,
+// see DefaultAssemblerOptions for details.
+func NewAssembler(pool *StreamPool) *Assembler {
+       pool.mu.Lock()
+       pool.users++
+       pool.mu.Unlock()
+       return &Assembler{
+               ret:              make([]byteContainer, assemblerReturnValueInitialSize),
+               pc:               newPageCache(),
+               connPool:         pool,
+               AssemblerOptions: DefaultAssemblerOptions,
+       }
+}
+
+// Dump returns a short string describing the page usage of the Assembler
+func (a *Assembler) Dump() string {
+       s := ""
+       s += fmt.Sprintf("pageCache: used: %d, size: %d, free: %d", a.pc.used, a.pc.size, len(a.pc.free))
+       return s
+}
+
+// AssemblerContext provides method to get metadata
+type AssemblerContext interface {
+       GetCaptureInfo() gopacket.CaptureInfo
+}
+
+// Implements AssemblerContext for Assemble()
+type assemblerSimpleContext gopacket.CaptureInfo
+
+func (asc *assemblerSimpleContext) GetCaptureInfo() gopacket.CaptureInfo {
+       return gopacket.CaptureInfo(*asc)
+}
+
+// Assemble calls AssembleWithContext with the current timestamp, useful for
+// packets being read directly off the wire.
+func (a *Assembler) Assemble(netFlow gopacket.Flow, t *layers.TCP) {
+       ctx := assemblerSimpleContext(gopacket.CaptureInfo{Timestamp: time.Now()})
+       a.AssembleWithContext(netFlow, t, &ctx)
+}
+
+type assemblerAction struct {
+       nextSeq Sequence
+       queue   bool
+}
+
+// AssembleWithContext reassembles the given TCP packet into its appropriate
+// stream.
+//
+// The timestamp passed in must be the timestamp the packet was seen.
+// For packets read off the wire, time.Now() should be fine.  For packets read
+// from PCAP files, CaptureInfo.Timestamp should be passed in.  This timestamp
+// will affect which streams are flushed by a call to FlushCloseOlderThan.
+//
+// Each AssembleWithContext call results in, in order:
+//
+//    zero or one call to StreamFactory.New, creating a stream
+//    zero or one call to ReassembledSG on a single stream
+//    zero or one call to ReassemblyComplete on the same stream
+func (a *Assembler) AssembleWithContext(netFlow gopacket.Flow, t *layers.TCP, ac AssemblerContext) {
+       var conn *connection
+       var half *halfconnection
+       var rev *halfconnection
+
+       a.ret = a.ret[:0]
+       key := key{netFlow, t.TransportFlow()}
+       ci := ac.GetCaptureInfo()
+       timestamp := ci.Timestamp
+
+       conn, half, rev = a.connPool.getConnection(key, false, timestamp, t, ac)
+       if conn == nil {
+               if *debugLog {
+                       log.Printf("%v got empty packet on otherwise empty connection", key)
+               }
+               return
+       }
+       conn.mu.Lock()
+       defer conn.mu.Unlock()
+       if half.lastSeen.Before(timestamp) {
+               half.lastSeen = timestamp
+       }
+       a.start = half.nextSeq == invalidSequence && t.SYN
+       if !half.stream.Accept(t, ci, half.dir, rev.ackSeq, &a.start, ac) {
+               if *debugLog {
+                       log.Printf("Ignoring packet")
+               }
+               return
+       }
+       if half.closed {
+               // this way is closed
+               return
+       }
+
+       seq, ack, bytes := Sequence(t.Seq), Sequence(t.Ack), t.Payload
+       if t.ACK {
+               half.ackSeq = ack
+       }
+       // TODO: push when Ack is seen ??
+       action := assemblerAction{
+               nextSeq: Sequence(invalidSequence),
+               queue:   true,
+       }
+       a.dump("AssembleWithContext()", half)
+       if half.nextSeq == invalidSequence {
+               if t.SYN {
+                       if *debugLog {
+                               log.Printf("%v saw first SYN packet, returning immediately, seq=%v", key, seq)
+                       }
+                       seq = seq.Add(1)
+                       half.nextSeq = seq
+                       action.queue = false
+               } else if a.start {
+                       if *debugLog {
+                               log.Printf("%v start forced", key)
+                       }
+                       half.nextSeq = seq
+                       action.queue = false
+               } else {
+                       if *debugLog {
+                               log.Printf("%v waiting for start, storing into connection", key)
+                       }
+               }
+       } else {
+               diff := half.nextSeq.Difference(seq)
+               if diff > 0 {
+                       if *debugLog {
+                               log.Printf("%v gap in sequence numbers (%v, %v) diff %v, storing into connection", key, half.nextSeq, seq, diff)
+                       }
+               } else {
+                       if *debugLog {
+                               log.Printf("%v found contiguous data (%v, %v), returning immediately: len:%d", key, seq, half.nextSeq, len(bytes))
+                       }
+                       action.queue = false
+               }
+       }
+
+       action = a.handleBytes(bytes, seq, half, ci, t.SYN, t.RST || t.FIN, action, ac)
+       if len(a.ret) > 0 {
+               action.nextSeq = a.sendToConnection(conn, half, ac)
+       }
+       if action.nextSeq != invalidSequence {
+               half.nextSeq = action.nextSeq
+               if t.FIN {
+                       half.nextSeq = half.nextSeq.Add(1)
+               }
+       }
+       if *debugLog {
+               log.Printf("%v nextSeq:%d", key, half.nextSeq)
+       }
+}
+
+// Overlap strategies:
+//  - new packet overlaps with sent packets:
+//     1) discard new overlapping part
+//     2) overwrite old overlapped (TODO)
+//  - new packet overlaps existing queued packets:
+//     a) consider "age" by timestamp (TODO)
+//     b) consider "age" by being present
+//     Then
+//      1) discard new overlapping part
+//      2) overwrite queued part
+
+func (a *Assembler) checkOverlap(half *halfconnection, queue bool, ac AssemblerContext) {
+       var next *page
+       cur := half.last
+       bytes := a.cacheLP.bytes
+       start := a.cacheLP.seq
+       end := start.Add(len(bytes))
+
+       a.dump("before checkOverlap", half)
+
+       //          [s6           :           e6]
+       //   [s1:e1][s2:e2] -- [s3:e3] -- [s4:e4][s5:e5]
+       //             [s <--ds-- : --de--> e]
+       for cur != nil {
+
+               if *debugLog {
+                       log.Printf("cur = %p (%s)\n", cur, cur)
+               }
+
+               // end < cur.start: continue (5)
+               if end.Difference(cur.seq) > 0 {
+                       if *debugLog {
+                               log.Printf("case 5\n")
+                       }
+                       next = cur
+                       cur = cur.prev
+                       continue
+               }
+
+               curEnd := cur.seq.Add(len(cur.bytes))
+               // start > cur.end: stop (1)
+               if start.Difference(curEnd) <= 0 {
+                       if *debugLog {
+                               log.Printf("case 1\n")
+                       }
+                       break
+               }
+
+               diffStart := start.Difference(cur.seq)
+               diffEnd := end.Difference(curEnd)
+
+               // end > cur.end && start < cur.start: drop (3)
+               if diffEnd <= 0 && diffStart >= 0 {
+                       if *debugLog {
+                               log.Printf("case 3\n")
+                       }
+                       if cur.isPacket() {
+                               half.overlapPackets++
+                       }
+                       half.overlapBytes += len(cur.bytes)
+                       // update links
+                       if cur.prev != nil {
+                               cur.prev.next = cur.next
+                       } else {
+                               half.first = cur.next
+                       }
+                       if cur.next != nil {
+                               cur.next.prev = cur.prev
+                       } else {
+                               half.last = cur.prev
+                       }
+                       tmp := cur.prev
+                       half.pages -= cur.release(a.pc)
+                       cur = tmp
+                       continue
+               }
+
+               // end > cur.end && start < cur.end: drop cur's end (2)
+               if diffEnd < 0 && start.Difference(curEnd) > 0 {
+                       if *debugLog {
+                               log.Printf("case 2\n")
+                       }
+                       cur.bytes = cur.bytes[:-start.Difference(cur.seq)]
+                       break
+               } else
+
+               // start < cur.start && end > cur.start: drop cur's start (4)
+               if diffStart > 0 && end.Difference(cur.seq) < 0 {
+                       if *debugLog {
+                               log.Printf("case 4\n")
+                       }
+                       cur.bytes = cur.bytes[-end.Difference(cur.seq):]
+                       cur.seq = cur.seq.Add(-end.Difference(cur.seq))
+                       next = cur
+               } else
+
+               // end < cur.end && start > cur.start: replace bytes inside cur (6)
+               if diffEnd > 0 && diffStart < 0 {
+                       if *debugLog {
+                               log.Printf("case 6\n")
+                       }
+                       copy(cur.bytes[-diffStart:-diffStart+len(bytes)], bytes)
+                       bytes = bytes[:0]
+               } else {
+                       if *debugLog {
+                               log.Printf("no overlap\n")
+                       }
+                       next = cur
+               }
+               cur = cur.prev
+       }
+
+       // Split bytes into pages, and insert in queue
+       a.cacheLP.bytes = bytes
+       a.cacheLP.seq = start
+       if len(bytes) > 0 && queue {
+               p, p2, numPages := a.cacheLP.convertToPages(a.pc, 0, ac)
+               half.queuedPackets++
+               half.queuedBytes += len(bytes)
+               half.pages += numPages
+               if cur != nil {
+                       if *debugLog {
+                               log.Printf("adding %s after %s", p, cur)
+                       }
+                       cur.next = p
+                       p.prev = cur
+               } else {
+                       if *debugLog {
+                               log.Printf("adding %s as first", p)
+                       }
+                       half.first = p
+               }
+               if next != nil {
+                       if *debugLog {
+                               log.Printf("setting %s as next of new %s", next, p2)
+                       }
+                       p2.next = next
+                       next.prev = p2
+               } else {
+                       if *debugLog {
+                               log.Printf("setting %s as last", p2)
+                       }
+                       half.last = p2
+               }
+       }
+       a.dump("After checkOverlap", half)
+}
+
+// Warning: this is a low-level dumper, i.e. a.ret or a.cacheSG might
+// be strange, but it could be ok.
+func (a *Assembler) dump(text string, half *halfconnection) {
+       if !*debugLog {
+               return
+       }
+       log.Printf("%s: dump\n", text)
+       if half != nil {
+               p := half.first
+               if p == nil {
+                       log.Printf(" * half.first = %p, no chunks queued\n", p)
+               } else {
+                       s := 0
+                       nb := 0
+                       log.Printf(" * half.first = %p, queued chunks:", p)
+                       for p != nil {
+                               log.Printf("\t%s bytes:%s\n", p, hex.EncodeToString(p.bytes))
+                               s += len(p.bytes)
+                               nb++
+                               p = p.next
+                       }
+                       log.Printf("\t%d chunks for %d bytes", nb, s)
+               }
+               log.Printf(" * half.last = %p\n", half.last)
+               log.Printf(" * half.saved = %p\n", half.saved)
+               p = half.saved
+               for p != nil {
+                       log.Printf("\tseq:%d %s bytes:%s\n", p.getSeq(), p, hex.EncodeToString(p.bytes))
+                       p = p.next
+               }
+       }
+       log.Printf(" * a.ret\n")
+       for i, r := range a.ret {
+               log.Printf("\t%d: %s b:%s\n", i, r.captureInfo(), hex.EncodeToString(r.getBytes()))
+       }
+       log.Printf(" * a.cacheSG.all\n")
+       for i, r := range a.cacheSG.all {
+               log.Printf("\t%d: %s b:%s\n", i, r.captureInfo(), hex.EncodeToString(r.getBytes()))
+       }
+}
+
+func (a *Assembler) overlapExisting(half *halfconnection, start, end Sequence, bytes []byte) ([]byte, Sequence) {
+       if half.nextSeq == invalidSequence {
+               // no start yet
+               return bytes, start
+       }
+       diff := start.Difference(half.nextSeq)
+       if diff == 0 {
+               return bytes, start
+       }
+       s := 0
+       e := len(bytes)
+       // TODO: depending on strategy, we might want to shrink half.saved if possible
+       if e != 0 {
+               if *debugLog {
+                       log.Printf("Overlap detected: ignoring current packet's first %d bytes", diff)
+               }
+               half.overlapPackets++
+               half.overlapBytes += diff
+       }
+       start = start.Add(diff)
+       s += diff
+       if s >= e {
+               // Completely included in sent
+               s = e
+       }
+       bytes = bytes[s:]
+       e -= diff
+       return bytes, start
+}
+
+// Prepare send or queue
+func (a *Assembler) handleBytes(bytes []byte, seq Sequence, half *halfconnection, ci gopacket.CaptureInfo, start bool, end bool, action assemblerAction, ac AssemblerContext) assemblerAction {
+       a.cacheLP.bytes = bytes
+       a.cacheLP.start = start
+       a.cacheLP.end = end
+       a.cacheLP.seq = seq
+       a.cacheLP.ci = ci
+       a.cacheLP.ac = ac
+
+       if action.queue {
+               a.checkOverlap(half, true, ac)
+               if (a.MaxBufferedPagesPerConnection > 0 && half.pages >= a.MaxBufferedPagesPerConnection) ||
+                       (a.MaxBufferedPagesTotal > 0 && a.pc.used >= a.MaxBufferedPagesTotal) {
+                       if *debugLog {
+                               log.Printf("hit max buffer size: %+v, %v, %v", a.AssemblerOptions, half.pages, a.pc.used)
+                       }
+                       action.queue = false
+                       a.addNextFromConn(half)
+               }
+               a.dump("handleBytes after queue", half)
+       } else {
+               a.cacheLP.bytes, a.cacheLP.seq = a.overlapExisting(half, seq, seq.Add(len(bytes)), a.cacheLP.bytes)
+               a.checkOverlap(half, false, ac)
+               if len(a.cacheLP.bytes) != 0 || end || start {
+                       a.ret = append(a.ret, &a.cacheLP)
+               }
+               a.dump("handleBytes after no queue", half)
+       }
+       return action
+}
+
+func (a *Assembler) setStatsToSG(half *halfconnection) {
+       a.cacheSG.queuedBytes = half.queuedBytes
+       half.queuedBytes = 0
+       a.cacheSG.queuedPackets = half.queuedPackets
+       half.queuedPackets = 0
+       a.cacheSG.overlapBytes = half.overlapBytes
+       half.overlapBytes = 0
+       a.cacheSG.overlapPackets = half.overlapPackets
+       half.overlapPackets = 0
+}
+
+// Build the ScatterGather object, i.e. prepend saved bytes and
+// append continuous bytes.
+func (a *Assembler) buildSG(half *halfconnection) (bool, Sequence) {
+       // find if there are skipped bytes
+       skip := -1
+       if half.nextSeq != invalidSequence {
+               skip = half.nextSeq.Difference(a.ret[0].getSeq())
+       }
+       last := a.ret[0].getSeq().Add(a.ret[0].length())
+       // Prepend saved bytes
+       saved := a.addPending(half, a.ret[0].getSeq())
+       // Append continuous bytes
+       nextSeq := a.addContiguous(half, last)
+       a.cacheSG.all = a.ret
+       a.cacheSG.Direction = half.dir
+       a.cacheSG.Skip = skip
+       a.cacheSG.saved = saved
+       a.cacheSG.toKeep = -1
+       a.setStatsToSG(half)
+       a.dump("after buildSG", half)
+       return a.ret[len(a.ret)-1].isEnd(), nextSeq
+}
+
+func (a *Assembler) cleanSG(half *halfconnection, ac AssemblerContext) {
+       cur := 0
+       ndx := 0
+       skip := 0
+
+       a.dump("cleanSG(start)", half)
+
+       var r byteContainer
+       // Find first page to keep
+       if a.cacheSG.toKeep < 0 {
+               ndx = len(a.cacheSG.all)
+       } else {
+               skip = a.cacheSG.toKeep
+               found := false
+               for ndx, r = range a.cacheSG.all {
+                       if a.cacheSG.toKeep < cur+r.length() {
+                               found = true
+                               break
+                       }
+                       cur += r.length()
+                       if skip >= r.length() {
+                               skip -= r.length()
+                       }
+               }
+               if !found {
+                       ndx++
+               }
+       }
+       // Release consumed pages
+       for _, r := range a.cacheSG.all[:ndx] {
+               if r == half.saved {
+                       if half.saved.next != nil {
+                               half.saved.next.prev = nil
+                       }
+                       half.saved = half.saved.next
+               } else if r == half.first {
+                       if half.first.next != nil {
+                               half.first.next.prev = nil
+                       }
+                       if half.first == half.last {
+                               half.first, half.last = nil, nil
+                       } else {
+                               half.first = half.first.next
+                       }
+               }
+               half.pages -= r.release(a.pc)
+       }
+       a.dump("after consumed release", half)
+       // Keep un-consumed pages
+       nbKept := 0
+       half.saved = nil
+       var saved *page
+       for _, r := range a.cacheSG.all[ndx:] {
+               first, last, nb := r.convertToPages(a.pc, skip, ac)
+               if half.saved == nil {
+                       half.saved = first
+               } else {
+                       saved.next = first
+                       first.prev = saved
+               }
+               saved = last
+               nbKept += nb
+       }
+       if *debugLog {
+               log.Printf("Remaining %d chunks in SG\n", nbKept)
+               log.Printf("%s\n", a.Dump())
+               a.dump("after cleanSG()", half)
+       }
+}
+
+// sendToConnection sends the current values in a.ret to the connection, closing
+// the connection if the last thing sent had End set.
+func (a *Assembler) sendToConnection(conn *connection, half *halfconnection, ac AssemblerContext) Sequence {
+       if *debugLog {
+               log.Printf("sendToConnection\n")
+       }
+       end, nextSeq := a.buildSG(half)
+       half.stream.ReassembledSG(&a.cacheSG, ac)
+       a.cleanSG(half, ac)
+       if end {
+               a.closeHalfConnection(conn, half)
+       }
+       if *debugLog {
+               log.Printf("after sendToConnection: nextSeq: %d\n", nextSeq)
+       }
+       return nextSeq
+}
+
+//
+func (a *Assembler) addPending(half *halfconnection, firstSeq Sequence) int {
+       if half.saved == nil {
+               return 0
+       }
+       s := 0
+       ret := []byteContainer{}
+       for p := half.saved; p != nil; p = p.next {
+               if *debugLog {
+                       log.Printf("adding pending @%p %s (%s)\n", p, p, hex.EncodeToString(p.bytes))
+               }
+               ret = append(ret, p)
+               s += len(p.bytes)
+       }
+       if half.saved.seq.Add(s) != firstSeq {
+               // non-continuous saved: drop them
+               var next *page
+               for p := half.saved; p != nil; p = next {
+                       next = p.next
+                       p.release(a.pc)
+               }
+               half.saved = nil
+               ret = []byteContainer{}
+               s = 0
+       }
+
+       a.ret = append(ret, a.ret...)
+       return s
+}
+
+// addContiguous adds contiguous byte-sets to a connection.
+func (a *Assembler) addContiguous(half *halfconnection, lastSeq Sequence) Sequence {
+       page := half.first
+       if page == nil {
+               if *debugLog {
+                       log.Printf("addContiguous(%d): no pages\n", lastSeq)
+               }
+               return lastSeq
+       }
+       if lastSeq == invalidSequence {
+               lastSeq = page.seq
+       }
+       for page != nil && lastSeq.Difference(page.seq) == 0 {
+               if *debugLog {
+                       log.Printf("addContiguous: lastSeq: %d, first.seq=%d, page.seq=%d\n", half.nextSeq, half.first.seq, page.seq)
+               }
+               lastSeq = lastSeq.Add(len(page.bytes))
+               a.ret = append(a.ret, page)
+               half.first = page.next
+               if half.first == nil {
+                       half.last = nil
+               }
+               if page.next != nil {
+                       page.next.prev = nil
+               }
+               page = page.next
+       }
+       return lastSeq
+}
+
+// skipFlush skips the first set of bytes we're waiting for and returns the
+// first set of bytes we have.  If we have no bytes saved, it closes the
+// connection.
+func (a *Assembler) skipFlush(conn *connection, half *halfconnection) {
+       if *debugLog {
+               log.Printf("skipFlush %v\n", half.nextSeq)
+       }
+       // Well, it's embarassing it there is still something in half.saved
+       // FIXME: change API to give back saved + new/no packets
+       if half.first == nil {
+               a.closeHalfConnection(conn, half)
+               return
+       }
+       a.ret = a.ret[:0]
+       a.addNextFromConn(half)
+       nextSeq := a.sendToConnection(conn, half, a.ret[0].assemblerContext())
+       if nextSeq != invalidSequence {
+               half.nextSeq = nextSeq
+       }
+}
+
+func (a *Assembler) closeHalfConnection(conn *connection, half *halfconnection) {
+       if *debugLog {
+               log.Printf("%v closing", conn)
+       }
+       half.closed = true
+       for p := half.first; p != nil; p = p.next {
+               // FIXME: it should be already empty
+               a.pc.replace(p)
+               half.pages--
+       }
+       if conn.s2c.closed && conn.c2s.closed {
+               if half.stream.ReassemblyComplete(nil) { //FIXME: which context to pass ?
+                       a.connPool.remove(conn)
+               }
+       }
+}
+
+// addNextFromConn pops the first page from a connection off and adds it to the
+// return array.
+func (a *Assembler) addNextFromConn(conn *halfconnection) {
+       if conn.first == nil {
+               return
+       }
+       if *debugLog {
+               log.Printf("   adding from conn (%v, %v) %v (%d)\n", conn.first.seq, conn.nextSeq, conn.nextSeq-conn.first.seq, len(conn.first.bytes))
+       }
+       a.ret = append(a.ret, conn.first)
+       conn.first = conn.first.next
+       if conn.first != nil {
+               conn.first.prev = nil
+       } else {
+               conn.last = nil
+       }
+}
+
+// FlushOptions provide options for flushing connections.
+type FlushOptions struct {
+       T  time.Time // If nonzero, only connections with data older than T are flushed
+       TC time.Time // If nonzero, only connections with data older than TC are closed (if no FIN/RST received)
+}
+
+// FlushWithOptions finds any streams waiting for packets older than
+// the given time T, and pushes through the data they have (IE: tells
+// them to stop waiting and skip the data they're waiting for).
+//
+// It also closes streams older than TC (that can be set to zero, to keep
+// long-lived stream alive, but to flush data anyway).
+//
+// Each Stream maintains a list of zero or more sets of bytes it has received
+// out-of-order.  For example, if it has processed up through sequence number
+// 10, it might have bytes [15-20), [20-25), [30,50) in its list.  Each set of
+// bytes also has the timestamp it was originally viewed.  A flush call will
+// look at the smallest subsequent set of bytes, in this case [15-20), and if
+// its timestamp is older than the passed-in time, it will push it and all
+// contiguous byte-sets out to the Stream's Reassembled function.  In this case,
+// it will push [15-20), but also [20-25), since that's contiguous.  It will
+// only push [30-50) if its timestamp is also older than the passed-in time,
+// otherwise it will wait until the next FlushCloseOlderThan to see if bytes
+// [25-30) come in.
+//
+// Returns the number of connections flushed, and of those, the number closed
+// because of the flush.
+func (a *Assembler) FlushWithOptions(opt FlushOptions) (flushed, closed int) {
+       conns := a.connPool.connections()
+       closes := 0
+       flushes := 0
+       for _, conn := range conns {
+               remove := false
+               conn.mu.Lock()
+               for _, half := range []*halfconnection{&conn.s2c, &conn.c2s} {
+                       flushed, closed := a.flushClose(conn, half, opt.T, opt.TC)
+                       if flushed {
+                               flushes++
+                       }
+                       if closed {
+                               closes++
+                       }
+               }
+               if conn.s2c.closed && conn.c2s.closed && conn.s2c.lastSeen.Before(opt.TC) && conn.c2s.lastSeen.Before(opt.TC) {
+                       remove = true
+               }
+               conn.mu.Unlock()
+               if remove {
+                       a.connPool.remove(conn)
+               }
+       }
+       return flushes, closes
+}
+
+// FlushCloseOlderThan flushes and closes streams older than given time
+func (a *Assembler) FlushCloseOlderThan(t time.Time) (flushed, closed int) {
+       return a.FlushWithOptions(FlushOptions{T: t, TC: t})
+}
+
+func (a *Assembler) flushClose(conn *connection, half *halfconnection, t time.Time, tc time.Time) (bool, bool) {
+       flushed, closed := false, false
+       if half.closed {
+               return flushed, closed
+       }
+       for half.first != nil && half.first.seen.Before(t) {
+               flushed = true
+               a.skipFlush(conn, half)
+               if half.closed {
+                       closed = true
+               }
+       }
+       if !half.closed && half.first == nil && half.lastSeen.Before(tc) {
+               a.closeHalfConnection(conn, half)
+               closed = true
+       }
+       return flushed, closed
+}
+
+// FlushAll flushes all remaining data into all remaining connections and closes
+// those connections. It returns the total number of connections flushed/closed
+// by the call.
+func (a *Assembler) FlushAll() (closed int) {
+       conns := a.connPool.connections()
+       closed = len(conns)
+       for _, conn := range conns {
+               conn.mu.Lock()
+               for _, half := range []*halfconnection{&conn.s2c, &conn.c2s} {
+                       for !half.closed {
+                               a.skipFlush(conn, half)
+                       }
+                       if !half.closed {
+                               a.closeHalfConnection(conn, half)
+                       }
+               }
+               conn.mu.Unlock()
+       }
+       return
+}
+
+func min(a, b int) int {
+       if a < b {
+               return a
+       }
+       return b
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go b/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go
new file mode 100644 (file)
index 0000000..b29cf2f
--- /dev/null
@@ -0,0 +1,1660 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package reassembly
+
+import (
+       "encoding/hex"
+       "fmt"
+       "net"
+       "reflect"
+       "runtime"
+       "testing"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+)
+
+var netFlow gopacket.Flow
+
+var testDebug = false
+
+func init() {
+       netFlow, _ = gopacket.FlowFromEndpoints(
+               layers.NewIPEndpoint(net.IP{1, 2, 3, 4}),
+               layers.NewIPEndpoint(net.IP{5, 6, 7, 8}))
+}
+
+type Reassembly struct {
+       Bytes []byte
+       Start bool
+       End   bool
+       Skip  int
+}
+
+type testSequence struct {
+       in   layers.TCP
+       want []Reassembly
+}
+
+/* For benchmark: do nothing */
+type testFactoryBench struct {
+}
+
+func (t *testFactoryBench) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+       return t
+}
+func (t *testFactoryBench) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+       return true
+}
+func (t *testFactoryBench) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+}
+func (t *testFactoryBench) ReassemblyComplete(ac AssemblerContext) bool {
+       return true
+}
+
+/* For tests: append bytes */
+type testFactory struct {
+       reassembly []Reassembly
+}
+
+func (t *testFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+       return t
+}
+func (t *testFactory) Reassembled(r []Reassembly) {
+       t.reassembly = r
+       for i := 0; i < len(r); i++ {
+               //t.reassembly[i].Seen = time.Time{}
+       }
+}
+func (t *testFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+       _, start, end, skip := sg.Info()
+       l, _ := sg.Lengths()
+       t.reassembly = append(t.reassembly, Reassembly{
+               Bytes: sg.Fetch(l),
+               Skip:  skip,
+               Start: start,
+               End:   end,
+       })
+}
+
+func (t *testFactory) ReassemblyComplete(ac AssemblerContext) bool {
+       return true
+}
+
+func (t *testFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+       return true
+}
+
+/* For memory checks: counts bytes */
+type testMemoryFactory struct {
+       bytes int
+}
+
+func (tf *testMemoryFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+       return tf
+}
+func (tf *testMemoryFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+       return true
+}
+func (tf *testMemoryFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+       bytes, _ := sg.Lengths()
+       tf.bytes += bytes
+}
+func (tf *testMemoryFactory) ReassemblyComplete(ac AssemblerContext) bool {
+       return true
+}
+
+/*
+ * Tests
+ */
+
+func test(t *testing.T, s []testSequence) {
+       fact := &testFactory{}
+       p := NewStreamPool(fact)
+       a := NewAssembler(p)
+       a.MaxBufferedPagesPerConnection = 4
+       for i, test := range s {
+               fact.reassembly = []Reassembly{}
+               if testDebug {
+                       fmt.Printf("#### test: #%d: sending:%s\n", i, hex.EncodeToString(test.in.BaseLayer.Payload))
+               }
+               a.Assemble(netFlow, &test.in)
+               final := []Reassembly{}
+               if len(test.want) > 0 {
+                       final = append(final, Reassembly{})
+                       for _, w := range test.want {
+                               final[0].Bytes = append(final[0].Bytes, w.Bytes...)
+                               if w.End {
+                                       final[0].End = true
+                               }
+                               if w.Start {
+                                       final[0].Start = true
+                               }
+                               if w.Skip != 0 {
+                                       final[0].Skip = w.Skip
+                               }
+                       }
+               }
+               if !reflect.DeepEqual(fact.reassembly, final) {
+                       t.Fatalf("test %v:\nwant: %v\n got: %v\n", i, final, fact.reassembly)
+               }
+               if testDebug {
+                       fmt.Printf("test %v passing...(%s)\n", i, final)
+               }
+       }
+}
+
+func TestReorder(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1001,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1004,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{4, 5, 6}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Skip:  -1,
+                                       Bytes: []byte{1, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{4, 5, 6},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{7, 8, 9},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{10, 11, 12},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1016,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1019,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1013,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{2, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{3, 2, 3},
+                               },
+                       },
+               },
+       })
+}
+
+func TestMaxPerSkip(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1000,
+                               SYN:       true,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1013,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{5, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1016,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{6, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Skip:  3,
+                                       Bytes: []byte{3, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{4, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{5, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{6, 2, 3},
+                               },
+                       },
+               },
+       })
+}
+
+func TestReorderFast(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1004,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{2, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{3, 2, 3},
+                               },
+                       },
+               },
+       })
+}
+
+func TestOverlap(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3, 4, 5},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{6, 7},
+                               },
+                       },
+               },
+       })
+}
+
+func TestBufferedOverlap1(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3, 4, 5},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{6, 7},
+                               },
+                       },
+               },
+       })
+}
+
+func TestBufferedOverlapCase6(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12, 13, 14}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{11, 12, 13, 14, 5},
+                               },
+                       },
+               },
+       })
+}
+
+func TestBufferedOverlapExisting(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1000,
+                               SYN:       true,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1005,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{5, 6, 7, 8, 9, 10}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{8, 9, 10},
+                               },
+                       },
+               },
+       })
+}
+
+func TestBufferedOverlapReemit(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1000,
+                               SYN:       true,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1003,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{3, 4, 5}},
+                       },
+                       want: []Reassembly{},
+               },
+       })
+}
+
+func TestReorderRetransmission2(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1001,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{10, 11}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1004,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{6, 6, 6, 2, 2}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Skip:  -1,
+                                       Bytes: []byte{1, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{6, 6, 6},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{2, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{10, 11},
+                               },
+                       },
+               },
+       })
+}
+
+func TestOverrun1(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       0xFFFFFFFF,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       10,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3, 4},
+                               },
+                       },
+               },
+       })
+}
+
+func TestOverrun2(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       10,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       0xFFFFFFFF,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3, 4},
+                               },
+                       },
+               },
+       })
+}
+
+func TestCacheLargePacket(t *testing.T) {
+       data := make([]byte, pageBytes*3)
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1001,
+                               BaseLayer: layers.BaseLayer{Payload: data},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1000,
+                               SYN:       true,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{},
+                               },
+                               Reassembly{
+                                       Bytes: data[:pageBytes],
+                               },
+                               Reassembly{
+                                       Bytes: data[pageBytes : pageBytes*2],
+                               },
+                               Reassembly{
+                                       Bytes: data[pageBytes*2 : pageBytes*3],
+                               },
+                       },
+               },
+       })
+}
+
+/*
+ * Keep
+ */
+type testKeepFactory struct {
+       keep    int
+       bytes   []byte
+       skipped int
+       t       *testing.T
+}
+
+func (tkf *testKeepFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+       return tkf
+}
+func (tkf *testKeepFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+       l, _ := sg.Lengths()
+       _, _, _, tkf.skipped = sg.Info()
+       tkf.bytes = sg.Fetch(l)
+       sg.KeepFrom(tkf.keep)
+}
+func (tkf *testKeepFactory) ReassemblyComplete(ac AssemblerContext) bool {
+       return true
+}
+
+func (tkf *testKeepFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+       return true
+}
+
+type testKeepSequence struct {
+       tcp     layers.TCP
+       keep    int
+       want    []byte
+       skipped int
+}
+
+func testKeep(t *testing.T, s []testKeepSequence) {
+       fact := &testKeepFactory{t: t}
+       p := NewStreamPool(fact)
+       a := NewAssembler(p)
+       a.MaxBufferedPagesPerConnection = 4
+       port := layers.TCPPort(0)
+       for i, test := range s {
+               // Fake some values according to ports
+               flow := netFlow
+               dir := TCPDirClientToServer
+               if port == 0 {
+                       port = test.tcp.SrcPort
+               }
+               if port != test.tcp.SrcPort {
+                       dir = dir.Reverse()
+                       flow = flow.Reverse()
+               }
+               test.tcp.SetInternalPortsForTesting()
+               fact.keep = test.keep
+               fact.bytes = []byte{}
+               if testDebug {
+                       fmt.Printf("#### testKeep: #%d: sending:%s\n", i, hex.EncodeToString(test.tcp.BaseLayer.Payload))
+               }
+               a.Assemble(flow, &test.tcp)
+               if !reflect.DeepEqual(fact.bytes, test.want) {
+                       t.Fatalf("#%d: invalid bytes: got %v, expected %v", i, fact.bytes, test.want)
+               }
+               if fact.skipped != test.skipped {
+                       t.Fatalf("#%d: expecting %d skipped bytes, got %d", i, test.skipped, fact.skipped)
+               }
+               if testDebug {
+                       fmt.Printf("#### testKeep: #%d: bytes: %s\n", i, hex.EncodeToString(fact.bytes))
+               }
+       }
+}
+
+func TestKeepSimpleOnBoundary(t *testing.T) {
+       testKeep(t, []testKeepSequence{
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       keep: 0,
+                       want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+                       },
+                       want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5},
+               },
+       })
+}
+
+func TestKeepSimpleNotBoundaryLive(t *testing.T) {
+       testKeep(t, []testKeepSequence{
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       keep: 1,
+                       want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+                       },
+                       want: []byte{2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5},
+               },
+       })
+}
+
+func TestKeepSimpleNotBoundaryAlreadyKept(t *testing.T) {
+       testKeep(t, []testKeepSequence{
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10}},
+                       },
+                       keep: 0, // 1→10
+                       want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15}},
+                       },
+                       keep: 11, // 12→15
+                       want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1016,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0x16, 0x17, 0x18}},
+                       },
+                       want: []byte{0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18},
+               },
+       })
+}
+
+func TestKeepLonger(t *testing.T) {
+       testKeep(t, []testKeepSequence{
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}},
+                       },
+                       keep: 0,
+                       want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 10, 11, 12, 13, 14, 15}},
+                       },
+                       keep: 0,
+                       want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12, 13, 14, 15, 16, 17}},
+                       },
+                       want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17},
+               },
+       })
+}
+
+func TestKeepWithFlush(t *testing.T) {
+       testKeep(t, []testKeepSequence{
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1}},
+                       },
+                       keep: 1,
+                       want: []byte{1},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1003,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{3}},
+                       },
+                       keep: 0,
+                       want: []byte{},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1004,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{4}},
+                       },
+                       keep: 0,
+                       want: []byte{},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1006,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{6}},
+                       },
+                       keep: 0,
+                       want: []byte{},
+               },
+               // Exceeding 4 pages: flushing first continuous pages
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1008,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{8}},
+                       },
+                       keep:    0,
+                       skipped: 1,
+                       want:    []byte{3, 4},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{10}},
+                       },
+                       keep:    0,
+                       skipped: 1,
+                       want:    []byte{6},
+               },
+               {
+                       tcp: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1012,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{12}},
+                       },
+                       keep:    0,
+                       skipped: 1,
+                       want:    []byte{8},
+               },
+       })
+}
+
+/*
+ * FSM tests
+ */
+/* For FSM: bump nb on accepted packet */
+type testFSMFactory struct {
+       nb  int
+       fsm TCPSimpleFSM
+}
+
+func (t *testFSMFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream {
+       return t
+}
+func (t *testFSMFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) {
+}
+func (t *testFSMFactory) ReassemblyComplete(ac AssemblerContext) bool {
+       return false
+}
+
+func (t *testFSMFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool {
+       ok := t.fsm.CheckState(tcp, dir)
+       if ok {
+               t.nb++
+       }
+       return ok
+}
+
+type testFSMSequence struct {
+       tcp layers.TCP
+       ci  gopacket.CaptureInfo
+       nb  int
+}
+
+func (seq *testFSMSequence) GetCaptureInfo() gopacket.CaptureInfo {
+       return seq.ci
+}
+
+func testFSM(t *testing.T, s []testFSMSequence) {
+       fact := &testFSMFactory{}
+       p := NewStreamPool(fact)
+       a := NewAssembler(p)
+       //a.MaxBufferedPagesPerConnection = 4
+       fact.nb = 0
+       port := layers.TCPPort(0)
+       for i, test := range s {
+               // Fake some values according to ports
+               flow := netFlow
+               dir := TCPDirClientToServer
+               if port == 0 {
+                       port = test.tcp.SrcPort
+               }
+               if port != test.tcp.SrcPort {
+                       dir = dir.Reverse()
+                       flow = flow.Reverse()
+               }
+               test.tcp.SetInternalPortsForTesting()
+               a.AssembleWithContext(flow, &test.tcp, &test)
+               if fact.nb != test.nb {
+                       t.Fatalf("#%d: packet rejected: got %d, expected %d", i, fact.nb, test.nb)
+               }
+       }
+}
+
+func TestFSMnormalFlow(t *testing.T) {
+       testFSM(t, []testFSMSequence{
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511116,
+                               Ack:       0,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 566690000),
+                       },
+                       nb: 1,
+               },
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787765,
+                               Ack:       374511117,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590332000),
+                       },
+                       nb: 2,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590346000),
+                       },
+                       nb: 3,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590387000),
+                       },
+                       nb: 4,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787766,
+                               Ack:       374511150,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 613687000),
+                       },
+                       nb: 5,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787766,
+                               Ack:       374511150,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{8, 133, 104, 196, 132, 0, 0, 1, 0, 2, 0, 7, 0, 19, 2, 85, 83, 0, 0, 6, 0, 1, 2, 117, 115, 0, 0, 6, 0, 1, 0, 0, 3, 132, 0, 54, 1, 97, 5, 99, 99, 116, 108, 100, 192, 20, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 110, 101, 117, 115, 116, 97, 114, 3, 98, 105, 122, 0, 120, 18, 40, 205, 0, 0, 3, 132, 0, 0, 3, 132, 0, 9, 58, 128, 0, 1, 81, 128, 192, 20, 0, 46, 0, 1, 0, 0, 3, 132, 0, 150, 0, 6, 5, 1, 0, 0, 3, 132, 85, 138, 90, 146, 85, 98, 191, 130, 27, 78, 2, 117, 115, 0, 69, 13, 35, 189, 141, 225, 107, 238, 108, 182, 207, 44, 105, 31, 212, 103, 32, 93, 217, 108, 20, 231, 188, 28, 241, 237, 104, 182, 117, 121, 195, 112, 64, 96, 237, 248, 6, 181, 186, 96, 60, 6, 18, 29, 188, 96, 201, 140, 251, 61, 71, 177, 108, 156, 9, 83, 125, 172, 188, 75, 81, 67, 218, 55, 93, 131, 243, 15, 190, 75, 4, 165, 226, 124, 49, 67, 142, 131, 239, 240, 76, 225, 10, 242, 68, 88, 240, 200, 27, 97, 102, 73, 92, 73, 133, 170, 175, 198, 99, 109, 90, 16, 162, 101, 95, 96, 102, 250, 91, 74, 80, 3, 87, 167, 50, 230, 9, 213, 7, 222, 197, 87, 183, 190, 148, 247, 207, 204, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 10, 1, 102, 5, 99, 99, 116, 108, 100, 192, 12, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 97, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 98, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 99, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 101, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 107, 193, 8, 192, 118, 0, 46, 0, 1, 0, 7, 233, 0, 0, 150, 0, 2, 5, 1, 0, 7, 233, 0, 85, 127, 33, 92, 85, 87, 134, 98, 27, 78, 2, 117, 115, 0, 19, 227, 175, 75, 88, 245, 164, 158, 150, 198, 57, 253, 150, 179, 161, 52, 24, 56, 229, 176, 175, 40, 45, 232, 188, 171, 131, 197, 107, 125, 218, 192, 78, 221, 146, 33, 114, 55, 43, 12, 131, 213, 51, 98, 37, 2, 102, 161, 232, 115, 177, 210, 51, 169, 215, 133, 56, 190, 91, 75, 8, 222, 231, 202, 139, 28, 187, 249, 72, 21, 23, 56, 63, 72, 126, 142, 242, 195, 242, 64, 208, 134, 100, 157, 197, 159, 43, 148, 20, 70, 117, 152, 159, 35, 200, 220, 49, 234, 173, 210, 91, 34, 210, 192, 7, 197, 112, 117, 208, 234, 42, 49, 133, 237, 197, 14, 244, 149, 191, 142, 36, 252, 42, 48, 182, 189, 9, 68, 1, 65, 5, 67, 67, 84, 76, 68, 193, 126, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 124, 70, 1, 66, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 125, 70, 194, 26, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 209, 174, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 1, 67, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 127, 70, 1, 69, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 126, 70, 1, 70, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 209, 173, 58, 70, 194, 108, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 0, 54, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 75, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 128, 70, 194, 154, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 226, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 194, 2, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 230, 49, 85, 73, 83, 2, 27, 78, 2, 117, 115, 0, 82, 36, 11, 141, 74, 85, 70, 98, 179, 63, 173, 83, 8, 70, 155, 41, 102, 166, 140, 62, 71, 178, 130, 38, 171, 200, 180, 68, 2, 215, 45, 6, 43, 59, 171, 146, 223, 215, 9, 77, 5, 104, 167, 42, 237, 170, 30, 114, 205, 129, 59, 225, 152, 224, 79, 1, 65, 68, 208, 153, 121, 237, 199, 87, 2, 251, 100, 105, 59, 24, 73, 226, 169, 121, 250, 91, 41, 124, 14, 23, 135, 52, 2, 86, 72, 224, 100, 135, 70, 216, 16, 107, 84, 59, 13, 168, 58, 187, 54, 98, 230, 167, 246, 42, 46, 156, 206, 238, 120, 199, 25, 144, 98, 249, 70, 162, 34, 43, 145, 114, 186, 233, 47, 42, 75, 95, 152, 235, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 160, 95, 100, 37, 167, 82, 93, 165, 126, 247, 147, 173, 238, 154, 206, 174, 96, 175, 209, 7, 8, 169, 171, 223, 29, 201, 161, 177, 98, 54, 94, 62, 70, 127, 142, 109, 206, 42, 179, 109, 156, 160, 156, 20, 59, 24, 147, 164, 13, 121, 192, 84, 157, 26, 56, 177, 151, 210, 7, 197, 229, 110, 60, 58, 224, 42, 77, 5, 59, 80, 216, 221, 248, 19, 66, 102, 74, 199, 238, 120, 231, 201, 187, 29, 11, 46, 195, 164, 8, 221, 128, 25, 205, 42, 247, 152, 112, 176, 14, 117, 150, 223, 245, 32, 212, 107, 4, 245, 27, 126, 224, 216, 0, 89, 106, 238, 185, 206, 44, 56, 204, 175, 7, 139, 233, 228, 127, 175, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 172, 117, 89, 89, 73, 249, 245, 211, 100, 127, 48, 135, 224, 97, 172, 146, 128, 30, 190, 72, 199, 170, 97, 179, 136, 109, 86, 110, 235, 214, 47, 50, 115, 11, 226, 168, 56, 198, 24, 212, 205, 207, 2, 116, 104, 112, 99, 234, 236, 44, 70, 19, 19, 215, 127, 200, 162, 215, 142, 45, 135, 91, 219, 217, 86, 231, 154, 87, 222, 161, 32, 66, 196, 55, 117, 20, 186, 9, 134, 252, 249, 219, 9, 196, 128, 8, 222, 201, 131, 210, 182, 232, 142, 72, 160, 171, 95, 231, 232, 156, 28, 34, 54, 94, 73, 183, 38, 160, 123, 175, 157, 21, 163, 8, 214, 155, 172, 237, 169, 28, 15, 138, 105, 107, 251, 109, 131, 240, 194, 72, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 77, 207, 197, 130, 236, 138, 192, 241, 225, 114, 8, 22, 76, 54, 43, 121, 42, 44, 9, 92, 56, 253, 224, 179, 191, 131, 40, 176, 94, 61, 33, 12, 43, 82, 156, 236, 211, 29, 187, 100, 220, 243, 24, 134, 42, 204, 46, 161, 214, 91, 68, 119, 40, 252, 53, 54, 146, 136, 196, 168, 204, 195, 131, 110, 6, 73, 16, 161, 86, 35, 150, 153, 162, 185, 227, 65, 228, 160, 203, 42, 250, 121, 14, 42, 115, 221, 232, 96, 99, 164, 230, 29, 195, 149, 85, 206, 41, 1, 252, 77, 188, 88, 8, 182, 37, 249, 6, 158, 6, 244, 158, 254, 141, 203, 6, 158, 198, 103, 130, 98, 123, 34, 245, 44, 126, 77, 24, 187, 194, 90, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 194, 203, 85, 69, 51, 125, 27, 78, 2, 117, 115, 0, 86, 26, 187, 56, 252, 194, 199, 140, 229, 133, 186, 187, 20, 174, 26, 48, 212, 129, 10, 20, 167, 179, 53, 72, 176, 92, 153, 48, 146, 15, 163, 182, 80, 138, 181, 135, 98, 129, 17, 66, 55, 184, 76, 225, 72, 104, 7, 221, 40, 71, 41, 202, 246, 154, 166, 199, 74, 175, 146, 54, 25, 56, 115, 243}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 621198000),
+                       },
+                       nb: 6,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511150,
+                               Ack:       3465789226,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 621220000),
+                       },
+                       nb: 7,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465789226,
+                               Ack:       374511150,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{153, 141, 101, 187, 110, 15, 63, 42, 81, 100, 95, 68, 241, 85, 160, 227, 3, 1, 12, 80, 166, 1, 98, 2, 44, 98, 63, 203, 70, 164, 99, 195, 23, 152, 223, 253, 208, 10, 12, 19, 66, 121, 9, 158, 205, 96, 218, 0, 80, 70, 58, 95, 41, 124, 216, 13, 122, 135, 102, 200, 181, 233, 129, 174, 194, 108, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 223, 157, 85, 69, 74, 55, 27, 78, 2, 117, 115, 0, 149, 71, 215, 149, 16, 165, 115, 229, 141, 136, 187, 158, 88, 225, 131, 231, 182, 218, 235, 27, 48, 65, 244, 77, 186, 135, 72, 18, 87, 52, 180, 128, 130, 67, 75, 173, 160, 243, 104, 178, 103, 117, 96, 209, 36, 51, 108, 47, 232, 214, 254, 15, 208, 182, 218, 174, 248, 237, 88, 150, 35, 190, 239, 249, 171, 151, 9, 236, 2, 252, 255, 13, 79, 190, 147, 36, 161, 210, 202, 80, 209, 136, 167, 180, 186, 68, 246, 249, 48, 123, 46, 11, 132, 103, 132, 207, 186, 68, 110, 133, 142, 109, 194, 19, 122, 57, 203, 217, 120, 93, 67, 168, 91, 252, 87, 38, 33, 228, 229, 162, 190, 170, 23, 188, 89, 15, 241, 71, 194, 108, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 206, 97, 120, 37, 255, 252, 7, 156, 162, 192, 43, 84, 105, 94, 125, 55, 13, 247, 234, 9, 25, 100, 246, 25, 77, 168, 199, 208, 187, 209, 164, 123, 234, 138, 238, 15, 86, 45, 163, 108, 162, 117, 247, 128, 3, 187, 100, 185, 193, 191, 134, 86, 161, 254, 236, 99, 66, 66, 35, 173, 91, 243, 175, 3, 175, 94, 79, 68, 246, 109, 200, 154, 209, 185, 11, 210, 50, 147, 136, 213, 158, 81, 111, 17, 149, 239, 110, 114, 25, 234, 247, 158, 233, 33, 36, 181, 66, 84, 189, 37, 207, 58, 9, 171, 143, 66, 69, 137, 192, 6, 187, 59, 16, 51, 80, 56, 89, 170, 12, 195, 69, 133, 188, 110, 171, 17, 17, 213, 194, 154, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 123, 36, 154, 4, 158, 41, 96, 252, 116, 114, 16, 137, 28, 177, 206, 33, 192, 88, 89, 1, 69, 252, 206, 88, 89, 152, 210, 179, 248, 44, 202, 239, 95, 131, 126, 147, 249, 93, 57, 166, 215, 184, 211, 164, 196, 71, 170, 3, 25, 18, 177, 214, 94, 147, 181, 148, 197, 11, 171, 219, 107, 48, 105, 81, 239, 110, 249, 140, 68, 127, 193, 146, 176, 161, 246, 108, 75, 141, 205, 211, 73, 247, 125, 205, 120, 156, 82, 55, 130, 250, 26, 15, 44, 214, 91, 115, 11, 103, 22, 83, 184, 96, 107, 138, 2, 127, 168, 191, 92, 102, 137, 161, 63, 225, 134, 17, 178, 242, 11, 43, 8, 30, 164, 28, 140, 195, 83, 121, 194, 154, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 189, 98, 234, 251, 237, 24, 143, 210, 30, 242, 97, 66, 50, 211, 47, 109, 110, 121, 244, 239, 89, 0, 39, 92, 218, 155, 71, 5, 23, 136, 231, 107, 95, 52, 231, 118, 253, 206, 250, 178, 209, 136, 13, 36, 36, 54, 157, 237, 35, 110, 134, 253, 80, 237, 162, 163, 38, 21, 54, 241, 240, 253, 73, 33, 191, 128, 32, 6, 198, 165, 35, 203, 244, 15, 166, 250, 159, 67, 149, 56, 19, 243, 230, 87, 6, 44, 150, 90, 79, 107, 18, 121, 112, 23, 176, 104, 50, 110, 176, 138, 250, 6, 209, 22, 41, 73, 234, 4, 124, 233, 208, 218, 236, 117, 232, 217, 10, 172, 18, 215, 143, 119, 193, 113, 10, 59, 255, 221, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 622508000),
+                       },
+                       nb: 8,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511150,
+                               Ack:       3465789949,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 622531000),
+                       },
+                       nb: 9,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               FIN:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511150,
+                               Ack:       3465789949,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 622907000),
+                       },
+                       nb: 10,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               FIN:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465789949,
+                               Ack:       374511151,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 652784000),
+                       },
+                       nb: 11,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511151,
+                               Ack:       3465789950,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 652809000),
+                       },
+                       nb: 12,
+               },
+       })
+}
+
+func TestFSMearlyRST(t *testing.T) {
+       testFSM(t, []testFSMSequence{
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511116,
+                               Ack:       0,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 566690000),
+                       },
+                       nb: 1,
+               },
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787765,
+                               Ack:       374511117,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590332000),
+                       },
+                       nb: 2,
+               },
+               {
+                       tcp: layers.TCP{
+                               RST:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590346000),
+                       },
+                       nb: 3,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590387000),
+                       },
+                       nb: 3,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787766,
+                               Ack:       374511150,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 613687000),
+                       },
+                       nb: 3,
+               },
+       })
+}
+
+func TestFSMestablishedThenRST(t *testing.T) {
+       testFSM(t, []testFSMSequence{
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511116,
+                               Ack:       0,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 566690000),
+                       },
+                       nb: 1,
+               },
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787765,
+                               Ack:       374511117,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590332000),
+                       },
+                       nb: 2,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590346000),
+                       },
+                       nb: 3,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590387000),
+                       },
+                       nb: 4,
+               },
+               {
+                       tcp: layers.TCP{
+                               RST:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787766,
+                               Ack:       374511150,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 613687000),
+                       },
+                       nb: 5,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787766,
+                               Ack:       374511150,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{8, 133, 104, 196, 132, 0, 0, 1, 0, 2, 0, 7, 0, 19, 2, 85, 83, 0, 0, 6, 0, 1, 2, 117, 115, 0, 0, 6, 0, 1, 0, 0, 3, 132, 0, 54, 1, 97, 5, 99, 99, 116, 108, 100, 192, 20, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 110, 101, 117, 115, 116, 97, 114, 3, 98, 105, 122, 0, 120, 18, 40, 205, 0, 0, 3, 132, 0, 0, 3, 132, 0, 9, 58, 128, 0, 1, 81, 128, 192, 20, 0, 46, 0, 1, 0, 0, 3, 132, 0, 150, 0, 6, 5, 1, 0, 0, 3, 132, 85, 138, 90, 146, 85, 98, 191, 130, 27, 78, 2, 117, 115, 0, 69, 13, 35, 189, 141, 225, 107, 238, 108, 182, 207, 44, 105, 31, 212, 103, 32, 93, 217, 108, 20, 231, 188, 28, 241, 237, 104, 182, 117, 121, 195, 112, 64, 96, 237, 248, 6, 181, 186, 96, 60, 6, 18, 29, 188, 96, 201, 140, 251, 61, 71, 177, 108, 156, 9, 83, 125, 172, 188, 75, 81, 67, 218, 55, 93, 131, 243, 15, 190, 75, 4, 165, 226, 124, 49, 67, 142, 131, 239, 240, 76, 225, 10, 242, 68, 88, 240, 200, 27, 97, 102, 73, 92, 73, 133, 170, 175, 198, 99, 109, 90, 16, 162, 101, 95, 96, 102, 250, 91, 74, 80, 3, 87, 167, 50, 230, 9, 213, 7, 222, 197, 87, 183, 190, 148, 247, 207, 204, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 10, 1, 102, 5, 99, 99, 116, 108, 100, 192, 12, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 97, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 98, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 99, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 101, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 107, 193, 8, 192, 118, 0, 46, 0, 1, 0, 7, 233, 0, 0, 150, 0, 2, 5, 1, 0, 7, 233, 0, 85, 127, 33, 92, 85, 87, 134, 98, 27, 78, 2, 117, 115, 0, 19, 227, 175, 75, 88, 245, 164, 158, 150, 198, 57, 253, 150, 179, 161, 52, 24, 56, 229, 176, 175, 40, 45, 232, 188, 171, 131, 197, 107, 125, 218, 192, 78, 221, 146, 33, 114, 55, 43, 12, 131, 213, 51, 98, 37, 2, 102, 161, 232, 115, 177, 210, 51, 169, 215, 133, 56, 190, 91, 75, 8, 222, 231, 202, 139, 28, 187, 249, 72, 21, 23, 56, 63, 72, 126, 142, 242, 195, 242, 64, 208, 134, 100, 157, 197, 159, 43, 148, 20, 70, 117, 152, 159, 35, 200, 220, 49, 234, 173, 210, 91, 34, 210, 192, 7, 197, 112, 117, 208, 234, 42, 49, 133, 237, 197, 14, 244, 149, 191, 142, 36, 252, 42, 48, 182, 189, 9, 68, 1, 65, 5, 67, 67, 84, 76, 68, 193, 126, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 124, 70, 1, 66, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 125, 70, 194, 26, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 209, 174, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 1, 67, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 127, 70, 1, 69, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 126, 70, 1, 70, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 209, 173, 58, 70, 194, 108, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 0, 54, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 75, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 128, 70, 194, 154, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 226, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 194, 2, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 230, 49, 85, 73, 83, 2, 27, 78, 2, 117, 115, 0, 82, 36, 11, 141, 74, 85, 70, 98, 179, 63, 173, 83, 8, 70, 155, 41, 102, 166, 140, 62, 71, 178, 130, 38, 171, 200, 180, 68, 2, 215, 45, 6, 43, 59, 171, 146, 223, 215, 9, 77, 5, 104, 167, 42, 237, 170, 30, 114, 205, 129, 59, 225, 152, 224, 79, 1, 65, 68, 208, 153, 121, 237, 199, 87, 2, 251, 100, 105, 59, 24, 73, 226, 169, 121, 250, 91, 41, 124, 14, 23, 135, 52, 2, 86, 72, 224, 100, 135, 70, 216, 16, 107, 84, 59, 13, 168, 58, 187, 54, 98, 230, 167, 246, 42, 46, 156, 206, 238, 120, 199, 25, 144, 98, 249, 70, 162, 34, 43, 145, 114, 186, 233, 47, 42, 75, 95, 152, 235, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 160, 95, 100, 37, 167, 82, 93, 165, 126, 247, 147, 173, 238, 154, 206, 174, 96, 175, 209, 7, 8, 169, 171, 223, 29, 201, 161, 177, 98, 54, 94, 62, 70, 127, 142, 109, 206, 42, 179, 109, 156, 160, 156, 20, 59, 24, 147, 164, 13, 121, 192, 84, 157, 26, 56, 177, 151, 210, 7, 197, 229, 110, 60, 58, 224, 42, 77, 5, 59, 80, 216, 221, 248, 19, 66, 102, 74, 199, 238, 120, 231, 201, 187, 29, 11, 46, 195, 164, 8, 221, 128, 25, 205, 42, 247, 152, 112, 176, 14, 117, 150, 223, 245, 32, 212, 107, 4, 245, 27, 126, 224, 216, 0, 89, 106, 238, 185, 206, 44, 56, 204, 175, 7, 139, 233, 228, 127, 175, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 172, 117, 89, 89, 73, 249, 245, 211, 100, 127, 48, 135, 224, 97, 172, 146, 128, 30, 190, 72, 199, 170, 97, 179, 136, 109, 86, 110, 235, 214, 47, 50, 115, 11, 226, 168, 56, 198, 24, 212, 205, 207, 2, 116, 104, 112, 99, 234, 236, 44, 70, 19, 19, 215, 127, 200, 162, 215, 142, 45, 135, 91, 219, 217, 86, 231, 154, 87, 222, 161, 32, 66, 196, 55, 117, 20, 186, 9, 134, 252, 249, 219, 9, 196, 128, 8, 222, 201, 131, 210, 182, 232, 142, 72, 160, 171, 95, 231, 232, 156, 28, 34, 54, 94, 73, 183, 38, 160, 123, 175, 157, 21, 163, 8, 214, 155, 172, 237, 169, 28, 15, 138, 105, 107, 251, 109, 131, 240, 194, 72, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 77, 207, 197, 130, 236, 138, 192, 241, 225, 114, 8, 22, 76, 54, 43, 121, 42, 44, 9, 92, 56, 253, 224, 179, 191, 131, 40, 176, 94, 61, 33, 12, 43, 82, 156, 236, 211, 29, 187, 100, 220, 243, 24, 134, 42, 204, 46, 161, 214, 91, 68, 119, 40, 252, 53, 54, 146, 136, 196, 168, 204, 195, 131, 110, 6, 73, 16, 161, 86, 35, 150, 153, 162, 185, 227, 65, 228, 160, 203, 42, 250, 121, 14, 42, 115, 221, 232, 96, 99, 164, 230, 29, 195, 149, 85, 206, 41, 1, 252, 77, 188, 88, 8, 182, 37, 249, 6, 158, 6, 244, 158, 254, 141, 203, 6, 158, 198, 103, 130, 98, 123, 34, 245, 44, 126, 77, 24, 187, 194, 90, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 194, 203, 85, 69, 51, 125, 27, 78, 2, 117, 115, 0, 86, 26, 187, 56, 252, 194, 199, 140, 229, 133, 186, 187, 20, 174, 26, 48, 212, 129, 10, 20, 167, 179, 53, 72, 176, 92, 153, 48, 146, 15, 163, 182, 80, 138, 181, 135, 98, 129, 17, 66, 55, 184, 76, 225, 72, 104, 7, 221, 40, 71, 41, 202, 246, 154, 166, 199, 74, 175, 146, 54, 25, 56, 115, 243}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 621198000),
+                       },
+                       nb: 5,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511150,
+                               Ack:       3465789226,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 621220000),
+                       },
+                       nb: 5,
+               },
+       })
+}
+
+func TestFSMmissingSYNACK(t *testing.T) {
+       testFSM(t, []testFSMSequence{
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511116,
+                               Ack:       0,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 566690000),
+                       },
+                       nb: 1,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590346000),
+                       },
+                       nb: 1,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590387000),
+                       },
+                       nb: 1,
+               },
+       })
+}
+
+/*
+ * Memory test
+ */
+func TestMemoryShrink(t *testing.T) {
+       tcp := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               SYN:       true,
+               Seq:       999,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+       var before runtime.MemStats
+       runtime.GC()
+       runtime.ReadMemStats(&before)
+       run := 1050
+       // Allocate > initial
+       for i := 0; i < run; i++ {
+               a.Assemble(netFlow, &tcp)
+               if tcp.SYN {
+                       tcp.SYN = false
+                       tcp.Seq += 1 + 1
+               }
+               tcp.Seq += 10
+       }
+       var after runtime.MemStats
+       a.FlushAll()
+       runtime.GC()
+       runtime.ReadMemStats(&after)
+       if after.HeapAlloc < before.HeapAlloc {
+               t.Fatalf("Nothing allocated for %d run: before: %d, after: %d", run, before.HeapAlloc, after.HeapAlloc)
+       }
+       before = after
+       // Do ~ initial allocs+free()
+       run *= 2
+       for i := 0; i < run; i++ {
+               a.Assemble(netFlow, &tcp)
+               if i%50 == 0 {
+                       a.FlushAll()
+               }
+               tcp.Seq += 10
+       }
+       runtime.GC()
+       runtime.ReadMemStats(&after)
+       if after.HeapAlloc >= before.HeapAlloc {
+               t.Fatalf("Nothing freed for %d run: before: %d, after: %d", run, before.HeapAlloc, after.HeapAlloc)
+       }
+}
+
+/*
+ * Benchmark tests
+ */
+func BenchmarkSingleStreamNo(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               SYN:       true,
+               Seq:       1000,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+       for i := 0; i < b.N; i++ {
+               a.Assemble(netFlow, &t)
+               if t.SYN {
+                       t.SYN = false
+                       t.Seq++
+               }
+               t.Seq += 10
+       }
+}
+
+func BenchmarkSingleStreamSkips(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               SYN:       true,
+               Seq:       1000,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+       skipped := false
+       for i := 0; i < b.N; i++ {
+               if i%10 == 9 {
+                       t.Seq += 10
+                       skipped = true
+               } else if skipped {
+                       t.Seq -= 20
+               }
+               a.Assemble(netFlow, &t)
+               if t.SYN {
+                       t.SYN = false
+                       t.Seq++
+               }
+               t.Seq += 10
+               if skipped {
+                       t.Seq += 10
+                       skipped = false
+               }
+       }
+}
+
+func BenchmarkSingleStreamLoss(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               SYN:       true,
+               Seq:       1000,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+       for i := 0; i < b.N; i++ {
+               a.Assemble(netFlow, &t)
+               t.SYN = false
+               t.Seq += 11
+       }
+}
+
+func BenchmarkMultiStreamGrow(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               Seq:       0,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+       for i := 0; i < b.N; i++ {
+               t.SrcPort = layers.TCPPort(i)
+               a.Assemble(netFlow, &t)
+               t.Seq += 10
+       }
+}
+
+func BenchmarkMultiStreamConn(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               Seq:       0,
+               SYN:       true,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactoryBench{}))
+       for i := 0; i < b.N; i++ {
+               t.SrcPort = layers.TCPPort(i)
+               a.Assemble(netFlow, &t)
+               if i%65536 == 65535 {
+                       if t.SYN {
+                               t.SYN = false
+                               t.Seq++
+                       }
+                       t.Seq += 10
+               }
+       }
+}
+
+type testMemoryContext struct{}
+
+func (t *testMemoryContext) GetCaptureInfo() gopacket.CaptureInfo {
+       return gopacket.CaptureInfo{
+               Timestamp: time.Unix(1432538521, 590387000),
+       }
+}
+
+func TestFullyOrderedAndCompleteStreamDoesNotAlloc(t *testing.T) {
+       c2s := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               Seq:       0,
+               SYN:       true,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       s2c := layers.TCP{
+               SrcPort:   c2s.DstPort,
+               DstPort:   c2s.SrcPort,
+               Seq:       0,
+               SYN:       true,
+               ACK:       true,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       tf := testMemoryFactory{}
+       a := NewAssembler(NewStreamPool(&tf))
+
+       ctx := &testMemoryContext{}
+       // First packet
+       a.AssembleWithContext(netFlow, &c2s, ctx)
+       a.AssembleWithContext(netFlow.Reverse(), &s2c, ctx)
+       c2s.SYN, s2c.SYN = false, false
+       c2s.ACK = true
+       c2s.Seq++
+       s2c.Seq++
+       N := 1000
+       if n := testing.AllocsPerRun(N, func() {
+               c2s.Seq += 10
+               s2c.Seq += 10
+               c2s.Ack += 10
+               s2c.Ack += 10
+               a.AssembleWithContext(netFlow, &c2s, ctx)
+               a.AssembleWithContext(netFlow.Reverse(), &s2c, ctx)
+       }); n > 0 {
+               t.Error(n, "mallocs for normal TCP stream")
+       }
+       // Ensure all bytes have been through the stream
+       // +1 for first packet and +1 because AllocsPerRun seems to run fun N+1 times.
+       if tf.bytes != 10*2*(N+1+1) {
+               t.Error(tf.bytes, "bytes handled, expected", 10*2*(N+1+1))
+       }
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/tcpcheck.go b/vendor/github.com/google/gopacket/reassembly/tcpcheck.go
new file mode 100644 (file)
index 0000000..4b52aba
--- /dev/null
@@ -0,0 +1,246 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package reassembly
+
+import (
+       "encoding/binary"
+       "fmt"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+)
+
+/*
+ * Check TCP packet against options (window, MSS)
+ */
+
+type tcpStreamOptions struct {
+       mss           int
+       scale         int
+       receiveWindow uint
+}
+
+// TCPOptionCheck contains options for the two directions
+type TCPOptionCheck struct {
+       options [2]tcpStreamOptions
+}
+
+func (t *TCPOptionCheck) getOptions(dir TCPFlowDirection) *tcpStreamOptions {
+       if dir == TCPDirClientToServer {
+               return &t.options[0]
+       }
+       return &t.options[1]
+}
+
+// NewTCPOptionCheck creates default options
+func NewTCPOptionCheck() TCPOptionCheck {
+       return TCPOptionCheck{
+               options: [2]tcpStreamOptions{
+                       tcpStreamOptions{
+                               mss:           0,
+                               scale:         -1,
+                               receiveWindow: 0,
+                       }, tcpStreamOptions{
+                               mss:           0,
+                               scale:         -1,
+                               receiveWindow: 0,
+                       },
+               },
+       }
+}
+
+// Accept checks whether the packet should be accepted by checking TCP options
+func (t *TCPOptionCheck) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, acked Sequence, start *bool) error {
+       options := t.getOptions(dir)
+       if tcp.SYN {
+               mss := -1
+               scale := -1
+               for _, o := range tcp.Options {
+                       // MSS
+                       if o.OptionType == 2 {
+                               if len(o.OptionData) != 2 {
+                                       return fmt.Errorf("MSS option data length expected 2, got %d", len(o.OptionData))
+                               }
+                               mss = int(binary.BigEndian.Uint16(o.OptionData[:2]))
+                       }
+                       // Window scaling
+                       if o.OptionType == 3 {
+                               if len(o.OptionData) != 1 {
+                                       return fmt.Errorf("Window scaling length expected: 1, got %d", len(o.OptionData))
+                               }
+                               scale = int(o.OptionData[0])
+                       }
+               }
+               options.mss = mss
+               options.scale = scale
+       } else {
+               if acked != invalidSequence {
+                       revOptions := t.getOptions(dir.Reverse())
+                       length := len(tcp.Payload)
+
+                       // Check packet is in the correct window
+                       diff := acked.Difference(Sequence(tcp.Seq))
+                       if diff == -1 && (length == 1 || length == 0) {
+                               // This is probably a Keep-alive
+                               // TODO: check byte is ok
+                       } else if diff < 0 {
+                               return fmt.Errorf("Re-emitted packet (diff:%d,seq:%d,rev-ack:%d)", diff,
+                                       tcp.Seq, acked)
+                       } else if revOptions.mss > 0 && length > revOptions.mss {
+                               return fmt.Errorf("%d > mss (%d)", length, revOptions.mss)
+                       } else if revOptions.receiveWindow != 0 && revOptions.scale < 0 && diff > int(revOptions.receiveWindow) {
+                               return fmt.Errorf("%d > receiveWindow(%d)", diff, revOptions.receiveWindow)
+                       }
+               }
+       }
+       // Compute receiveWindow
+       options.receiveWindow = uint(tcp.Window)
+       if options.scale > 0 {
+               options.receiveWindow = options.receiveWindow << (uint(options.scale))
+       }
+       return nil
+}
+
+// TCPSimpleFSM implements a very simple TCP state machine
+//
+// Usage:
+// When implementing a Stream interface and to avoid to consider packets that
+// would be rejected due to client/server's TCP stack, the  Accept() can call
+// TCPSimpleFSM.CheckState().
+//
+// Limitations:
+// - packet should be received in-order.
+// - no check on sequence number is performed
+// - no RST
+type TCPSimpleFSM struct {
+       dir     TCPFlowDirection
+       state   int
+       options TCPSimpleFSMOptions
+}
+
+// TCPSimpleFSMOptions holds options for TCPSimpleFSM
+type TCPSimpleFSMOptions struct {
+       SupportMissingEstablishment bool // Allow missing SYN, SYN+ACK, ACK
+}
+
+// Internal values of state machine
+const (
+       TCPStateClosed      = 0
+       TCPStateSynSent     = 1
+       TCPStateEstablished = 2
+       TCPStateCloseWait   = 3
+       TCPStateLastAck     = 4
+       TCPStateReset       = 5
+)
+
+// NewTCPSimpleFSM creates a new TCPSimpleFSM
+func NewTCPSimpleFSM(options TCPSimpleFSMOptions) *TCPSimpleFSM {
+       return &TCPSimpleFSM{
+               state:   TCPStateClosed,
+               options: options,
+       }
+}
+
+func (t *TCPSimpleFSM) String() string {
+       switch t.state {
+       case TCPStateClosed:
+               return "Closed"
+       case TCPStateSynSent:
+               return "SynSent"
+       case TCPStateEstablished:
+               return "Established"
+       case TCPStateCloseWait:
+               return "CloseWait"
+       case TCPStateLastAck:
+               return "LastAck"
+       case TCPStateReset:
+               return "Reset"
+       }
+       return "?"
+}
+
+// CheckState returns false if tcp is invalid wrt current state or update the state machine's state
+func (t *TCPSimpleFSM) CheckState(tcp *layers.TCP, dir TCPFlowDirection) bool {
+       if t.state == TCPStateClosed && t.options.SupportMissingEstablishment && !(tcp.SYN && !tcp.ACK) {
+               /* try to figure out state */
+               switch true {
+               case tcp.SYN && tcp.ACK:
+                       t.state = TCPStateSynSent
+                       t.dir = dir.Reverse()
+               case tcp.FIN && !tcp.ACK:
+                       t.state = TCPStateEstablished
+               case tcp.FIN && tcp.ACK:
+                       t.state = TCPStateCloseWait
+                       t.dir = dir.Reverse()
+               default:
+                       t.state = TCPStateEstablished
+               }
+       }
+
+       switch t.state {
+       /* openning connection */
+       case TCPStateClosed:
+               if tcp.SYN && !tcp.ACK {
+                       t.dir = dir
+                       t.state = TCPStateSynSent
+                       return true
+               }
+       case TCPStateSynSent:
+               if tcp.RST {
+                       t.state = TCPStateReset
+                       return true
+               }
+
+               if tcp.SYN && tcp.ACK && dir == t.dir.Reverse() {
+                       t.state = TCPStateEstablished
+                       return true
+               }
+               if tcp.SYN && !tcp.ACK && dir == t.dir {
+                       // re-transmission
+                       return true
+               }
+       /* established */
+       case TCPStateEstablished:
+               if tcp.RST {
+                       t.state = TCPStateReset
+                       return true
+               }
+
+               if tcp.FIN {
+                       t.state = TCPStateCloseWait
+                       t.dir = dir
+                       return true
+               }
+               // accept any packet
+               return true
+       /* closing connection */
+       case TCPStateCloseWait:
+               if tcp.RST {
+                       t.state = TCPStateReset
+                       return true
+               }
+
+               if tcp.FIN && tcp.ACK && dir == t.dir.Reverse() {
+                       t.state = TCPStateLastAck
+                       return true
+               }
+               if tcp.ACK {
+                       return true
+               }
+       case TCPStateLastAck:
+               if tcp.RST {
+                       t.state = TCPStateReset
+                       return true
+               }
+
+               if tcp.ACK && t.dir == dir {
+                       t.state = TCPStateClosed
+                       return true
+               }
+       }
+       return false
+}
diff --git a/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go b/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go
new file mode 100644 (file)
index 0000000..4c2391d
--- /dev/null
@@ -0,0 +1,249 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package reassembly
+
+import (
+       "testing"
+       "time"
+
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+)
+
+// netFlow declared in tcpassembly_test
+
+/*
+ * FSM tests
+ */
+
+type testCheckFSMSequence struct {
+       tcp      layers.TCP
+       ci       gopacket.CaptureInfo
+       expected bool
+}
+
+func testCheckFSM(t *testing.T, options TCPSimpleFSMOptions, s []testCheckFSMSequence) {
+       fsm := NewTCPSimpleFSM(options)
+       port := layers.TCPPort(0)
+       for i, test := range s {
+               // Fake some values according to ports
+               flow := netFlow
+               dir := TCPDirClientToServer
+               if port == 0 {
+                       port = test.tcp.SrcPort
+               }
+               if port != test.tcp.SrcPort {
+                       dir = dir.Reverse()
+                       flow = flow.Reverse()
+               }
+               res := fsm.CheckState(&test.tcp, dir)
+               if res != test.expected {
+                       t.Fatalf("#%d: packet rejected (%s): got %s, expected %s. State:%s", i, gopacket.LayerDump(&test.tcp), res, test.expected, fsm.String())
+               }
+       }
+}
+
+func TestCheckFSM(t *testing.T) {
+       testCheckFSM(t, TCPSimpleFSMOptions{}, []testCheckFSMSequence{
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511116,
+                               Ack:       0,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 566690000),
+                       },
+                       expected: true,
+               },
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787765,
+                               Ack:       374511117,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590332000),
+                       },
+                       expected: true,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590346000),
+                       },
+                       expected: true,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590387000),
+                       },
+                       expected: true,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787766,
+                               Ack:       374511150,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 613687000),
+                       },
+                       expected: true,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   53,
+                               DstPort:   54842,
+                               Seq:       3465787766,
+                               Ack:       374511150,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{8, 133, 104, 196, 132, 0, 0, 1, 0, 2, 0, 7, 0, 19, 2, 85, 83, 0, 0, 6, 0, 1, 2, 117, 115, 0, 0, 6, 0, 1, 0, 0, 3, 132, 0, 54, 1, 97, 5, 99, 99, 116, 108, 100, 192, 20, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 110, 101, 117, 115, 116, 97, 114, 3, 98, 105, 122, 0, 120, 18, 40, 205, 0, 0, 3, 132, 0, 0, 3, 132, 0, 9, 58, 128, 0, 1, 81, 128, 192, 20, 0, 46, 0, 1, 0, 0, 3, 132, 0, 150, 0, 6, 5, 1, 0, 0, 3, 132, 85, 138, 90, 146, 85, 98, 191, 130, 27, 78, 2, 117, 115, 0, 69, 13, 35, 189, 141, 225, 107, 238, 108, 182, 207, 44, 105, 31, 212, 103, 32, 93, 217, 108, 20, 231, 188, 28, 241, 237, 104, 182, 117, 121, 195, 112, 64, 96, 237, 248, 6, 181, 186, 96, 60, 6, 18, 29, 188, 96, 201, 140, 251, 61, 71, 177, 108, 156, 9, 83, 125, 172, 188, 75, 81, 67, 218, 55, 93, 131, 243, 15, 190, 75, 4, 165, 226, 124, 49, 67, 142, 131, 239, 240, 76, 225, 10, 242, 68, 88, 240, 200, 27, 97, 102, 73, 92, 73, 133, 170, 175, 198, 99, 109, 90, 16, 162, 101, 95, 96, 102, 250, 91, 74, 80, 3, 87, 167, 50, 230, 9, 213, 7, 222, 197, 87, 183, 190, 148, 247, 207, 204, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 10, 1, 102, 5, 99, 99, 116, 108, 100, 192, 12, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 97, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 98, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 99, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 101, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 107, 193, 8, 192, 118, 0, 46, 0, 1, 0, 7, 233, 0, 0, 150, 0, 2, 5, 1, 0, 7, 233, 0, 85, 127, 33, 92, 85, 87, 134, 98, 27, 78, 2, 117, 115, 0, 19, 227, 175, 75, 88, 245, 164, 158, 150, 198, 57, 253, 150, 179, 161, 52, 24, 56, 229, 176, 175, 40, 45, 232, 188, 171, 131, 197, 107, 125, 218, 192, 78, 221, 146, 33, 114, 55, 43, 12, 131, 213, 51, 98, 37, 2, 102, 161, 232, 115, 177, 210, 51, 169, 215, 133, 56, 190, 91, 75, 8, 222, 231, 202, 139, 28, 187, 249, 72, 21, 23, 56, 63, 72, 126, 142, 242, 195, 242, 64, 208, 134, 100, 157, 197, 159, 43, 148, 20, 70, 117, 152, 159, 35, 200, 220, 49, 234, 173, 210, 91, 34, 210, 192, 7, 197, 112, 117, 208, 234, 42, 49, 133, 237, 197, 14, 244, 149, 191, 142, 36, 252, 42, 48, 182, 189, 9, 68, 1, 65, 5, 67, 67, 84, 76, 68, 193, 126, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 124, 70, 1, 66, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 125, 70, 194, 26, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 209, 174, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 1, 67, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 127, 70, 1, 69, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 126, 70, 1, 70, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 209, 173, 58, 70, 194, 108, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 0, 54, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 75, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 128, 70, 194, 154, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 226, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 194, 2, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 230, 49, 85, 73, 83, 2, 27, 78, 2, 117, 115, 0, 82, 36, 11, 141, 74, 85, 70, 98, 179, 63, 173, 83, 8, 70, 155, 41, 102, 166, 140, 62, 71, 178, 130, 38, 171, 200, 180, 68, 2, 215, 45, 6, 43, 59, 171, 146, 223, 215, 9, 77, 5, 104, 167, 42, 237, 170, 30, 114, 205, 129, 59, 225, 152, 224, 79, 1, 65, 68, 208, 153, 121, 237, 199, 87, 2, 251, 100, 105, 59, 24, 73, 226, 169, 121, 250, 91, 41, 124, 14, 23, 135, 52, 2, 86, 72, 224, 100, 135, 70, 216, 16, 107, 84, 59, 13, 168, 58, 187, 54, 98, 230, 167, 246, 42, 46, 156, 206, 238, 120, 199, 25, 144, 98, 249, 70, 162, 34, 43, 145, 114, 186, 233, 47, 42, 75, 95, 152, 235, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 160, 95, 100, 37, 167, 82, 93, 165, 126, 247, 147, 173, 238, 154, 206, 174, 96, 175, 209, 7, 8, 169, 171, 223, 29, 201, 161, 177, 98, 54, 94, 62, 70, 127, 142, 109, 206, 42, 179, 109, 156, 160, 156, 20, 59, 24, 147, 164, 13, 121, 192, 84, 157, 26, 56, 177, 151, 210, 7, 197, 229, 110, 60, 58, 224, 42, 77, 5, 59, 80, 216, 221, 248, 19, 66, 102, 74, 199, 238, 120, 231, 201, 187, 29, 11, 46, 195, 164, 8, 221, 128, 25, 205, 42, 247, 152, 112, 176, 14, 117, 150, 223, 245, 32, 212, 107, 4, 245, 27, 126, 224, 216, 0, 89, 106, 238, 185, 206, 44, 56, 204, 175, 7, 139, 233, 228, 127, 175, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 172, 117, 89, 89, 73, 249, 245, 211, 100, 127, 48, 135, 224, 97, 172, 146, 128, 30, 190, 72, 199, 170, 97, 179, 136, 109, 86, 110, 235, 214, 47, 50, 115, 11, 226, 168, 56, 198, 24, 212, 205, 207, 2, 116, 104, 112, 99, 234, 236, 44, 70, 19, 19, 215, 127, 200, 162, 215, 142, 45, 135, 91, 219, 217, 86, 231, 154, 87, 222, 161, 32, 66, 196, 55, 117, 20, 186, 9, 134, 252, 249, 219, 9, 196, 128, 8, 222, 201, 131, 210, 182, 232, 142, 72, 160, 171, 95, 231, 232, 156, 28, 34, 54, 94, 73, 183, 38, 160, 123, 175, 157, 21, 163, 8, 214, 155, 172, 237, 169, 28, 15, 138, 105, 107, 251, 109, 131, 240, 194, 72, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 77, 207, 197, 130, 236, 138, 192, 241, 225, 114, 8, 22, 76, 54, 43, 121, 42, 44, 9, 92, 56, 253, 224, 179, 191, 131, 40, 176, 94, 61, 33, 12, 43, 82, 156, 236, 211, 29, 187, 100, 220, 243, 24, 134, 42, 204, 46, 161, 214, 91, 68, 119, 40, 252, 53, 54, 146, 136, 196, 168, 204, 195, 131, 110, 6, 73, 16, 161, 86, 35, 150, 153, 162, 185, 227, 65, 228, 160, 203, 42, 250, 121, 14, 42, 115, 221, 232, 96, 99, 164, 230, 29, 195, 149, 85, 206, 41, 1, 252, 77, 188, 88, 8, 182, 37, 249, 6, 158, 6, 244, 158, 254, 141, 203, 6, 158, 198, 103, 130, 98, 123, 34, 245, 44, 126, 77, 24, 187, 194, 90, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 194, 203, 85, 69, 51, 125, 27, 78, 2, 117, 115, 0, 86, 26, 187, 56, 252, 194, 199, 140, 229, 133, 186, 187, 20, 174, 26, 48, 212, 129, 10, 20, 167, 179, 53, 72, 176, 92, 153, 48, 146, 15, 163, 182, 80, 138, 181, 135, 98, 129, 17, 66, 55, 184, 76, 225, 72, 104, 7, 221, 40, 71, 41, 202, 246, 154, 166, 199, 74, 175, 146, 54, 25, 56, 115, 243}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 621198000),
+                       },
+                       expected: true,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511150,
+                               Ack:       3465789226,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 621220000),
+                       },
+                       expected: true,
+               },
+       })
+}
+
+func TestCheckFSMmissingSYNACK(t *testing.T) {
+       testCheckFSM(t, TCPSimpleFSMOptions{}, []testCheckFSMSequence{
+               {
+                       tcp: layers.TCP{
+                               SYN:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511116,
+                               Ack:       0,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 566690000),
+                       },
+                       expected: true,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590346000),
+                       },
+                       expected: false,
+               },
+               {
+                       tcp: layers.TCP{
+                               ACK:       true,
+                               SrcPort:   54842,
+                               DstPort:   53,
+                               Seq:       374511117,
+                               Ack:       3465787766,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}},
+                       },
+                       ci: gopacket.CaptureInfo{
+                               Timestamp: time.Unix(1432538521, 590387000),
+                       },
+                       expected: false,
+               },
+       })
+}
+
+// Support packets w/o SYN (+SYN+ACK) depending on option
+func TestCheckFSMmissingSYN(t *testing.T) {
+       for _, val := range []bool{false, true} {
+               testCheckFSM(t, TCPSimpleFSMOptions{SupportMissingEstablishment: val}, []testCheckFSMSequence{
+                       {
+                               tcp: layers.TCP{
+                                       ACK:       true,
+                                       SrcPort:   54842,
+                                       DstPort:   53,
+                                       Seq:       12,
+                                       Ack:       1012,
+                                       BaseLayer: layers.BaseLayer{Payload: []byte{1}},
+                               },
+                               ci: gopacket.CaptureInfo{
+                                       Timestamp: time.Unix(1432538521, 566690000),
+                               },
+                               expected: val,
+                       },
+                       {
+                               tcp: layers.TCP{
+                                       ACK:       true,
+                                       SrcPort:   53,
+                                       DstPort:   54842,
+                                       Seq:       1012,
+                                       Ack:       13,
+                                       BaseLayer: layers.BaseLayer{Payload: []byte{2}},
+                               },
+                               ci: gopacket.CaptureInfo{
+                                       Timestamp: time.Unix(1432538521, 590346000),
+                               },
+                               expected: val,
+                       },
+                       {
+                               tcp: layers.TCP{
+                                       ACK:       true,
+                                       SrcPort:   53,
+                                       DstPort:   54842,
+                                       Seq:       1013,
+                                       Ack:       13,
+                                       BaseLayer: layers.BaseLayer{Payload: []byte{3}},
+                               },
+                               ci: gopacket.CaptureInfo{
+                                       Timestamp: time.Unix(1432538521, 590387000),
+                               },
+                               expected: val,
+                       },
+               })
+       }
+}
diff --git a/vendor/github.com/google/gopacket/routing/common.go b/vendor/github.com/google/gopacket/routing/common.go
new file mode 100644 (file)
index 0000000..a6746d4
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package routing
+
+import (
+       "net"
+)
+
+// Router implements simple IPv4/IPv6 routing based on the kernel's routing
+// table.  This routing library has very few features and may actually route
+// incorrectly in some cases, but it should work the majority of the time.
+type Router interface {
+       // Route returns where to route a packet based on the packet's source
+       // and destination IP address.
+       //
+       // Callers may pass in nil for src, in which case the src is treated as
+       // either 0.0.0.0 or ::, depending on whether dst is a v4 or v6 address.
+       //
+       // It returns the interface on which to send the packet, the gateway IP
+       // to send the packet to (if necessary), the preferred src IP to use (if
+       // available).  If the preferred src address is not given in the routing
+       // table, the first IP address of the interface is provided.
+       //
+       // If an error is encountered, iface, geteway, and
+       // preferredSrc will be nil, and err will be set.
+       Route(dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error)
+
+       // RouteWithSrc routes based on source information as well as destination
+       // information.  Either or both of input/src can be nil.  If both are, this
+       // should behave exactly like Route(dst)
+       RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error)
+}
diff --git a/vendor/github.com/google/gopacket/routing/other.go b/vendor/github.com/google/gopacket/routing/other.go
new file mode 100644 (file)
index 0000000..b53fea9
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build !linux
+
+// Package routing is currently only supported in Linux, but the build system requires a valid go file for all architectures.
+
+package routing
+
+func New() (Router, error) {
+       panic("router only implemented in linux")
+}
diff --git a/vendor/github.com/google/gopacket/routing/routing.go b/vendor/github.com/google/gopacket/routing/routing.go
new file mode 100644 (file)
index 0000000..cbbeb6e
--- /dev/null
@@ -0,0 +1,241 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+// Package routing provides a very basic but mostly functional implementation of
+// a routing table for IPv4/IPv6 addresses.  It uses a routing table pulled from
+// the kernel via netlink to find the correct interface, gateway, and preferred
+// source IP address for packets destined to a particular location.
+//
+// The routing package is meant to be used with applications that are sending
+// raw packet data, which don't have the benefit of having the kernel route
+// packets for them.
+package routing
+
+import (
+       "bytes"
+       "errors"
+       "fmt"
+       "net"
+       "sort"
+       "strings"
+       "syscall"
+       "unsafe"
+)
+
+// Pulled from http://man7.org/linux/man-pages/man7/rtnetlink.7.html
+// See the section on RTM_NEWROUTE, specifically 'struct rtmsg'.
+type routeInfoInMemory struct {
+       Family byte
+       DstLen byte
+       SrcLen byte
+       TOS    byte
+
+       Table    byte
+       Protocol byte
+       Scope    byte
+       Type     byte
+
+       Flags uint32
+}
+
+// rtInfo contains information on a single route.
+type rtInfo struct {
+       Src, Dst         *net.IPNet
+       Gateway, PrefSrc net.IP
+       // We currently ignore the InputIface.
+       InputIface, OutputIface uint32
+       Priority                uint32
+}
+
+// routeSlice implements sort.Interface to sort routes by Priority.
+type routeSlice []*rtInfo
+
+func (r routeSlice) Len() int {
+       return len(r)
+}
+func (r routeSlice) Less(i, j int) bool {
+       return r[i].Priority < r[j].Priority
+}
+func (r routeSlice) Swap(i, j int) {
+       r[i], r[j] = r[j], r[i]
+}
+
+type router struct {
+       ifaces []net.Interface
+       addrs  []ipAddrs
+       v4, v6 routeSlice
+}
+
+func (r *router) String() string {
+       strs := []string{"ROUTER", "--- V4 ---"}
+       for _, route := range r.v4 {
+               strs = append(strs, fmt.Sprintf("%+v", *route))
+       }
+       strs = append(strs, "--- V6 ---")
+       for _, route := range r.v6 {
+               strs = append(strs, fmt.Sprintf("%+v", *route))
+       }
+       return strings.Join(strs, "\n")
+}
+
+type ipAddrs struct {
+       v4, v6 net.IP
+}
+
+func (r *router) Route(dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) {
+       return r.RouteWithSrc(nil, nil, dst)
+}
+
+func (r *router) RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) {
+       var ifaceIndex int
+       switch {
+       case dst.To4() != nil:
+               ifaceIndex, gateway, preferredSrc, err = r.route(r.v4, input, src, dst)
+       case dst.To16() != nil:
+               ifaceIndex, gateway, preferredSrc, err = r.route(r.v6, input, src, dst)
+       default:
+               err = errors.New("IP is not valid as IPv4 or IPv6")
+               return
+       }
+
+       // Interfaces are 1-indexed, but we store them in a 0-indexed array.
+       ifaceIndex--
+
+       iface = &r.ifaces[ifaceIndex]
+       if preferredSrc == nil {
+               switch {
+               case dst.To4() != nil:
+                       preferredSrc = r.addrs[ifaceIndex].v4
+               case dst.To16() != nil:
+                       preferredSrc = r.addrs[ifaceIndex].v6
+               }
+       }
+       return
+}
+
+func (r *router) route(routes routeSlice, input net.HardwareAddr, src, dst net.IP) (iface int, gateway, preferredSrc net.IP, err error) {
+       var inputIndex uint32
+       if input != nil {
+               for i, iface := range r.ifaces {
+                       if bytes.Equal(input, iface.HardwareAddr) {
+                               // Convert from zero- to one-indexed.
+                               inputIndex = uint32(i + 1)
+                               break
+                       }
+               }
+       }
+       for _, rt := range routes {
+               if rt.InputIface != 0 && rt.InputIface != inputIndex {
+                       continue
+               }
+               if rt.Src != nil && !rt.Src.Contains(src) {
+                       continue
+               }
+               if rt.Dst != nil && !rt.Dst.Contains(dst) {
+                       continue
+               }
+               return int(rt.OutputIface), rt.Gateway, rt.PrefSrc, nil
+       }
+       err = fmt.Errorf("no route found for %v", dst)
+       return
+}
+
+// New creates a new router object.  The router returned by New currently does
+// not update its routes after construction... care should be taken for
+// long-running programs to call New() regularly to take into account any
+// changes to the routing table which have occurred since the last New() call.
+func New() (Router, error) {
+       rtr := &router{}
+       tab, err := syscall.NetlinkRIB(syscall.RTM_GETROUTE, syscall.AF_UNSPEC)
+       if err != nil {
+               return nil, err
+       }
+       msgs, err := syscall.ParseNetlinkMessage(tab)
+       if err != nil {
+               return nil, err
+       }
+loop:
+       for _, m := range msgs {
+               switch m.Header.Type {
+               case syscall.NLMSG_DONE:
+                       break loop
+               case syscall.RTM_NEWROUTE:
+                       rt := (*routeInfoInMemory)(unsafe.Pointer(&m.Data[0]))
+                       routeInfo := rtInfo{}
+                       attrs, err := syscall.ParseNetlinkRouteAttr(&m)
+                       if err != nil {
+                               return nil, err
+                       }
+                       switch rt.Family {
+                       case syscall.AF_INET:
+                               rtr.v4 = append(rtr.v4, &routeInfo)
+                       case syscall.AF_INET6:
+                               rtr.v6 = append(rtr.v6, &routeInfo)
+                       default:
+                               continue loop
+                       }
+                       for _, attr := range attrs {
+                               switch attr.Attr.Type {
+                               case syscall.RTA_DST:
+                                       routeInfo.Dst = &net.IPNet{
+                                               IP:   net.IP(attr.Value),
+                                               Mask: net.CIDRMask(int(rt.DstLen), len(attr.Value)*8),
+                                       }
+                               case syscall.RTA_SRC:
+                                       routeInfo.Src = &net.IPNet{
+                                               IP:   net.IP(attr.Value),
+                                               Mask: net.CIDRMask(int(rt.SrcLen), len(attr.Value)*8),
+                                       }
+                               case syscall.RTA_GATEWAY:
+                                       routeInfo.Gateway = net.IP(attr.Value)
+                               case syscall.RTA_PREFSRC:
+                                       routeInfo.PrefSrc = net.IP(attr.Value)
+                               case syscall.RTA_IIF:
+                                       routeInfo.InputIface = *(*uint32)(unsafe.Pointer(&attr.Value[0]))
+                               case syscall.RTA_OIF:
+                                       routeInfo.OutputIface = *(*uint32)(unsafe.Pointer(&attr.Value[0]))
+                               case syscall.RTA_PRIORITY:
+                                       routeInfo.Priority = *(*uint32)(unsafe.Pointer(&attr.Value[0]))
+                               }
+                       }
+               }
+       }
+       sort.Sort(rtr.v4)
+       sort.Sort(rtr.v6)
+       ifaces, err := net.Interfaces()
+       if err != nil {
+               return nil, err
+       }
+       for i, iface := range ifaces {
+               if i != iface.Index-1 {
+                       return nil, fmt.Errorf("out of order iface %d = %v", i, iface)
+               }
+               rtr.ifaces = append(rtr.ifaces, iface)
+               var addrs ipAddrs
+               ifaceAddrs, err := iface.Addrs()
+               if err != nil {
+                       return nil, err
+               }
+               for _, addr := range ifaceAddrs {
+                       if inet, ok := addr.(*net.IPNet); ok {
+                               // Go has a nasty habit of giving you IPv4s as ::ffff:1.2.3.4 instead of 1.2.3.4.
+                               // We want to use mapped v4 addresses as v4 preferred addresses, never as v6
+                               // preferred addresses.
+                               if v4 := inet.IP.To4(); v4 != nil {
+                                       if addrs.v4 == nil {
+                                               addrs.v4 = v4
+                                       }
+                               } else if addrs.v6 == nil {
+                                       addrs.v6 = inet.IP
+                               }
+                       }
+               }
+               rtr.addrs = append(rtr.addrs, addrs)
+       }
+       return rtr, nil
+}
diff --git a/vendor/github.com/google/gopacket/tcpassembly/assembly.go b/vendor/github.com/google/gopacket/tcpassembly/assembly.go
new file mode 100644 (file)
index 0000000..50f6487
--- /dev/null
@@ -0,0 +1,788 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package tcpassembly provides TCP stream re-assembly.
+//
+// The tcpassembly package implements uni-directional TCP reassembly, for use in
+// packet-sniffing applications.  The caller reads packets off the wire, then
+// presents them to an Assembler in the form of gopacket layers.TCP packets
+// (github.com/google/gopacket, github.com/google/gopacket/layers).
+//
+// The Assembler uses a user-supplied
+// StreamFactory to create a user-defined Stream interface, then passes packet
+// data in stream order to that object.  A concurrency-safe StreamPool keeps
+// track of all current Streams being reassembled, so multiple Assemblers may
+// run at once to assemble packets while taking advantage of multiple cores.
+package tcpassembly
+
+import (
+       "flag"
+       "fmt"
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+       "log"
+       "sync"
+       "time"
+)
+
+var memLog = flag.Bool("assembly_memuse_log", false, "If true, the github.com/google/gopacket/tcpassembly library will log information regarding its memory use every once in a while.")
+var debugLog = flag.Bool("assembly_debug_log", false, "If true, the github.com/google/gopacket/tcpassembly library will log verbose debugging information (at least one line per packet)")
+
+const invalidSequence = -1
+const uint32Max = 0xFFFFFFFF
+
+// Sequence is a TCP sequence number.  It provides a few convenience functions
+// for handling TCP wrap-around.  The sequence should always be in the range
+// [0,0xFFFFFFFF]... its other bits are simply used in wrap-around calculations
+// and should never be set.
+type Sequence int64
+
+// Difference defines an ordering for comparing TCP sequences that's safe for
+// roll-overs.  It returns:
+//    > 0 : if t comes after s
+//    < 0 : if t comes before s
+//      0 : if t == s
+// The number returned is the sequence difference, so 4.Difference(8) will
+// return 4.
+//
+// It handles rollovers by considering any sequence in the first quarter of the
+// uint32 space to be after any sequence in the last quarter of that space, thus
+// wrapping the uint32 space.
+func (s Sequence) Difference(t Sequence) int {
+       if s > uint32Max-uint32Max/4 && t < uint32Max/4 {
+               t += uint32Max
+       } else if t > uint32Max-uint32Max/4 && s < uint32Max/4 {
+               s += uint32Max
+       }
+       return int(t - s)
+}
+
+// Add adds an integer to a sequence and returns the resulting sequence.
+func (s Sequence) Add(t int) Sequence {
+       return (s + Sequence(t)) & uint32Max
+}
+
+// Reassembly objects are passed by an Assembler into Streams using the
+// Reassembled call.  Callers should not need to create these structs themselves
+// except for testing.
+type Reassembly struct {
+       // Bytes is the next set of bytes in the stream.  May be empty.
+       Bytes []byte
+       // Skip is set to non-zero if bytes were skipped between this and the
+       // last Reassembly.  If this is the first packet in a connection and we
+       // didn't see the start, we have no idea how many bytes we skipped, so
+       // we set it to -1.  Otherwise, it's set to the number of bytes skipped.
+       Skip int
+       // Start is set if this set of bytes has a TCP SYN accompanying it.
+       Start bool
+       // End is set if this set of bytes has a TCP FIN or RST accompanying it.
+       End bool
+       // Seen is the timestamp this set of bytes was pulled off the wire.
+       Seen time.Time
+}
+
+const pageBytes = 1900
+
+// page is used to store TCP data we're not ready for yet (out-of-order
+// packets).  Unused pages are stored in and returned from a pageCache, which
+// avoids memory allocation.  Used pages are stored in a doubly-linked list in
+// a connection.
+type page struct {
+       Reassembly
+       seq        Sequence
+       index      int
+       prev, next *page
+       buf        [pageBytes]byte
+}
+
+// pageCache is a concurrency-unsafe store of page objects we use to avoid
+// memory allocation as much as we can.  It grows but never shrinks.
+type pageCache struct {
+       free         []*page
+       pcSize       int
+       size, used   int
+       pages        [][]page
+       pageRequests int64
+}
+
+const initialAllocSize = 1024
+
+func newPageCache() *pageCache {
+       pc := &pageCache{
+               free:   make([]*page, 0, initialAllocSize),
+               pcSize: initialAllocSize,
+       }
+       pc.grow()
+       return pc
+}
+
+// grow exponentially increases the size of our page cache as much as necessary.
+func (c *pageCache) grow() {
+       pages := make([]page, c.pcSize)
+       c.pages = append(c.pages, pages)
+       c.size += c.pcSize
+       for i := range pages {
+               c.free = append(c.free, &pages[i])
+       }
+       if *memLog {
+               log.Println("PageCache: created", c.pcSize, "new pages")
+       }
+       c.pcSize *= 2
+}
+
+// next returns a clean, ready-to-use page object.
+func (c *pageCache) next(ts time.Time) (p *page) {
+       if *memLog {
+               c.pageRequests++
+               if c.pageRequests&0xFFFF == 0 {
+                       log.Println("PageCache:", c.pageRequests, "requested,", c.used, "used,", len(c.free), "free")
+               }
+       }
+       if len(c.free) == 0 {
+               c.grow()
+       }
+       i := len(c.free) - 1
+       p, c.free = c.free[i], c.free[:i]
+       p.prev = nil
+       p.next = nil
+       p.Seen = ts
+       p.Bytes = p.buf[:0]
+       c.used++
+       return p
+}
+
+// replace replaces a page into the pageCache.
+func (c *pageCache) replace(p *page) {
+       c.used--
+       c.free = append(c.free, p)
+}
+
+// Stream is implemented by the caller to handle incoming reassembled
+// TCP data.  Callers create a StreamFactory, then StreamPool uses
+// it to create a new Stream for every TCP stream.
+//
+// assembly will, in order:
+//    1) Create the stream via StreamFactory.New
+//    2) Call Reassembled 0 or more times, passing in reassembled TCP data in order
+//    3) Call ReassemblyComplete one time, after which the stream is dereferenced by assembly.
+type Stream interface {
+       // Reassembled is called zero or more times.  assembly guarantees
+       // that the set of all Reassembly objects passed in during all
+       // calls are presented in the order they appear in the TCP stream.
+       // Reassembly objects are reused after each Reassembled call,
+       // so it's important to copy anything you need out of them
+       // (specifically out of Reassembly.Bytes) that you need to stay
+       // around after you return from the Reassembled call.
+       Reassembled([]Reassembly)
+       // ReassemblyComplete is called when assembly decides there is
+       // no more data for this Stream, either because a FIN or RST packet
+       // was seen, or because the stream has timed out without any new
+       // packet data (due to a call to FlushOlderThan).
+       ReassemblyComplete()
+}
+
+// StreamFactory is used by assembly to create a new stream for each
+// new TCP session.
+type StreamFactory interface {
+       // New should return a new stream for the given TCP key.
+       New(netFlow, tcpFlow gopacket.Flow) Stream
+}
+
+func (p *StreamPool) connections() []*connection {
+       p.mu.RLock()
+       conns := make([]*connection, 0, len(p.conns))
+       for _, conn := range p.conns {
+               conns = append(conns, conn)
+       }
+       p.mu.RUnlock()
+       return conns
+}
+
+// FlushOptions provide options for flushing connections.
+type FlushOptions struct {
+       T        time.Time // If nonzero, only connections with data older than T are flushed
+       CloseAll bool      // If true, ALL connections are closed post flush, not just those that correctly see FIN/RST.
+}
+
+// FlushWithOptions finds any streams waiting for packets older than
+// the given time, and pushes through the data they have (IE: tells
+// them to stop waiting and skip the data they're waiting for).
+//
+// Each Stream maintains a list of zero or more sets of bytes it has received
+// out-of-order.  For example, if it has processed up through sequence number
+// 10, it might have bytes [15-20), [20-25), [30,50) in its list.  Each set of
+// bytes also has the timestamp it was originally viewed.  A flush call will
+// look at the smallest subsequent set of bytes, in this case [15-20), and if
+// its timestamp is older than the passed-in time, it will push it and all
+// contiguous byte-sets out to the Stream's Reassembled function.  In this case,
+// it will push [15-20), but also [20-25), since that's contiguous.  It will
+// only push [30-50) if its timestamp is also older than the passed-in time,
+// otherwise it will wait until the next FlushOlderThan to see if bytes [25-30)
+// come in.
+//
+// If it pushes all bytes (or there were no sets of bytes to begin with)
+// AND the connection has not received any bytes since the passed-in time,
+// the connection will be closed.
+//
+// If CloseAll is set, it will close out connections that have been drained.
+// Regardless of the CloseAll setting, connections stale for the specified
+// time will be closed.
+//
+// Returns the number of connections flushed, and of those, the number closed
+// because of the flush.
+func (a *Assembler) FlushWithOptions(opt FlushOptions) (flushed, closed int) {
+       conns := a.connPool.connections()
+       closes := 0
+       flushes := 0
+       for _, conn := range conns {
+               flushed := false
+               conn.mu.Lock()
+               if conn.closed {
+                       // Already closed connection, nothing to do here.
+                       conn.mu.Unlock()
+                       continue
+               }
+               for conn.first != nil && conn.first.Seen.Before(opt.T) {
+                       a.skipFlush(conn)
+                       flushed = true
+                       if conn.closed {
+                               closes++
+                               break
+                       }
+               }
+               if opt.CloseAll && !conn.closed && conn.first == nil && conn.lastSeen.Before(opt.T) {
+                       flushed = true
+                       a.closeConnection(conn)
+                       closes++
+               }
+               if flushed {
+                       flushes++
+               }
+               conn.mu.Unlock()
+       }
+       return flushes, closes
+}
+
+// FlushOlderThan calls FlushWithOptions with the CloseAll option set to true.
+func (a *Assembler) FlushOlderThan(t time.Time) (flushed, closed int) {
+       return a.FlushWithOptions(FlushOptions{CloseAll: true, T: t})
+}
+
+// FlushAll flushes all remaining data into all remaining connections, closing
+// those connections.  It returns the total number of connections flushed/closed
+// by the call.
+func (a *Assembler) FlushAll() (closed int) {
+       conns := a.connPool.connections()
+       closed = len(conns)
+       for _, conn := range conns {
+               conn.mu.Lock()
+               for !conn.closed {
+                       a.skipFlush(conn)
+               }
+               conn.mu.Unlock()
+       }
+       return
+}
+
+type key [2]gopacket.Flow
+
+func (k *key) String() string {
+       return fmt.Sprintf("%s:%s", k[0], k[1])
+}
+
+// StreamPool stores all streams created by Assemblers, allowing multiple
+// assemblers to work together on stream processing while enforcing the fact
+// that a single stream receives its data serially.  It is safe
+// for concurrency, usable by multiple Assemblers at once.
+//
+// StreamPool handles the creation and storage of Stream objects used by one or
+// more Assembler objects.  When a new TCP stream is found by an Assembler, it
+// creates an associated Stream by calling its StreamFactory's New method.
+// Thereafter (until the stream is closed), that Stream object will receive
+// assembled TCP data via Assembler's calls to the stream's Reassembled
+// function.
+//
+// Like the Assembler, StreamPool attempts to minimize allocation.  Unlike the
+// Assembler, though, it does have to do some locking to make sure that the
+// connection objects it stores are accessible to multiple Assemblers.
+type StreamPool struct {
+       conns              map[key]*connection
+       users              int
+       mu                 sync.RWMutex
+       factory            StreamFactory
+       free               []*connection
+       all                [][]connection
+       nextAlloc          int
+       newConnectionCount int64
+}
+
+func (p *StreamPool) grow() {
+       conns := make([]connection, p.nextAlloc)
+       p.all = append(p.all, conns)
+       for i := range conns {
+               p.free = append(p.free, &conns[i])
+       }
+       if *memLog {
+               log.Println("StreamPool: created", p.nextAlloc, "new connections")
+       }
+       p.nextAlloc *= 2
+}
+
+// NewStreamPool creates a new connection pool.  Streams will
+// be created as necessary using the passed-in StreamFactory.
+func NewStreamPool(factory StreamFactory) *StreamPool {
+       return &StreamPool{
+               conns:     make(map[key]*connection, initialAllocSize),
+               free:      make([]*connection, 0, initialAllocSize),
+               factory:   factory,
+               nextAlloc: initialAllocSize,
+       }
+}
+
+const assemblerReturnValueInitialSize = 16
+
+// NewAssembler creates a new assembler.  Pass in the StreamPool
+// to use, may be shared across assemblers.
+//
+// This sets some sane defaults for the assembler options,
+// see DefaultAssemblerOptions for details.
+func NewAssembler(pool *StreamPool) *Assembler {
+       pool.mu.Lock()
+       pool.users++
+       pool.mu.Unlock()
+       return &Assembler{
+               ret:              make([]Reassembly, assemblerReturnValueInitialSize),
+               pc:               newPageCache(),
+               connPool:         pool,
+               AssemblerOptions: DefaultAssemblerOptions,
+       }
+}
+
+// DefaultAssemblerOptions provides default options for an assembler.
+// These options are used by default when calling NewAssembler, so if
+// modified before a NewAssembler call they'll affect the resulting Assembler.
+//
+// Note that the default options can result in ever-increasing memory usage
+// unless one of the Flush* methods is called on a regular basis.
+var DefaultAssemblerOptions = AssemblerOptions{
+       MaxBufferedPagesPerConnection: 0, // unlimited
+       MaxBufferedPagesTotal:         0, // unlimited
+}
+
+type connection struct {
+       key               key
+       pages             int
+       first, last       *page
+       nextSeq           Sequence
+       created, lastSeen time.Time
+       stream            Stream
+       closed            bool
+       mu                sync.Mutex
+}
+
+func (c *connection) reset(k key, s Stream, ts time.Time) {
+       c.key = k
+       c.pages = 0
+       c.first, c.last = nil, nil
+       c.nextSeq = invalidSequence
+       c.created = ts
+       c.stream = s
+       c.closed = false
+}
+
+// AssemblerOptions controls the behavior of each assembler.  Modify the
+// options of each assembler you create to change their behavior.
+type AssemblerOptions struct {
+       // MaxBufferedPagesTotal is an upper limit on the total number of pages to
+       // buffer while waiting for out-of-order packets.  Once this limit is
+       // reached, the assembler will degrade to flushing every connection it
+       // gets a packet for.  If <= 0, this is ignored.
+       MaxBufferedPagesTotal int
+       // MaxBufferedPagesPerConnection is an upper limit on the number of pages
+       // buffered for a single connection.  Should this limit be reached for a
+       // particular connection, the smallest sequence number will be flushed, along
+       // with any contiguous data.  If <= 0, this is ignored.
+       MaxBufferedPagesPerConnection int
+}
+
+// Assembler handles reassembling TCP streams.  It is not safe for
+// concurrency... after passing a packet in via the Assemble call, the caller
+// must wait for that call to return before calling Assemble again.  Callers can
+// get around this by creating multiple assemblers that share a StreamPool.  In
+// that case, each individual stream will still be handled serially (each stream
+// has an individual mutex associated with it), however multiple assemblers can
+// assemble different connections concurrently.
+//
+// The Assembler provides (hopefully) fast TCP stream re-assembly for sniffing
+// applications written in Go.  The Assembler uses the following methods to be
+// as fast as possible, to keep packet processing speedy:
+//
+// Avoids Lock Contention
+//
+// Assemblers locks connections, but each connection has an individual lock, and
+// rarely will two Assemblers be looking at the same connection.  Assemblers
+// lock the StreamPool when looking up connections, but they use Reader
+// locks initially, and only force a write lock if they need to create a new
+// connection or close one down.  These happen much less frequently than
+// individual packet handling.
+//
+// Each assembler runs in its own goroutine, and the only state shared between
+// goroutines is through the StreamPool.  Thus all internal Assembler state
+// can be handled without any locking.
+//
+// NOTE:  If you can guarantee that packets going to a set of Assemblers will
+// contain information on different connections per Assembler (for example,
+// they're already hashed by PF_RING hashing or some other hashing mechanism),
+// then we recommend you use a seperate StreamPool per Assembler, thus
+// avoiding all lock contention.  Only when different Assemblers could receive
+// packets for the same Stream should a StreamPool be shared between them.
+//
+// Avoids Memory Copying
+//
+// In the common case, handling of a single TCP packet should result in zero
+// memory allocations.  The Assembler will look up the connection, figure out
+// that the packet has arrived in order, and immediately pass that packet on to
+// the appropriate connection's handling code.  Only if a packet arrives out of
+// order is its contents copied and stored in memory for later.
+//
+// Avoids Memory Allocation
+//
+// Assemblers try very hard to not use memory allocation unless absolutely
+// necessary.  Packet data for sequential packets is passed directly to streams
+// with no copying or allocation.  Packet data for out-of-order packets is
+// copied into reusable pages, and new pages are only allocated rarely when the
+// page cache runs out.  Page caches are Assembler-specific, thus not used
+// concurrently and requiring no locking.
+//
+// Internal representations for connection objects are also reused over time.
+// Because of this, the most common memory allocation done by the Assembler is
+// generally what's done by the caller in StreamFactory.New.  If no allocation
+// is done there, then very little allocation is done ever, mostly to handle
+// large increases in bandwidth or numbers of connections.
+//
+// TODO:  The page caches used by an Assembler will grow to the size necessary
+// to handle a workload, and currently will never shrink.  This means that
+// traffic spikes can result in large memory usage which isn't garbage
+// collected when typical traffic levels return.
+type Assembler struct {
+       AssemblerOptions
+       ret      []Reassembly
+       pc       *pageCache
+       connPool *StreamPool
+}
+
+func (p *StreamPool) newConnection(k key, s Stream, ts time.Time) (c *connection) {
+       if *memLog {
+               p.newConnectionCount++
+               if p.newConnectionCount&0x7FFF == 0 {
+                       log.Println("StreamPool:", p.newConnectionCount, "requests,", len(p.conns), "used,", len(p.free), "free")
+               }
+       }
+       if len(p.free) == 0 {
+               p.grow()
+       }
+       index := len(p.free) - 1
+       c, p.free = p.free[index], p.free[:index]
+       c.reset(k, s, ts)
+       return c
+}
+
+// getConnection returns a connection.  If end is true and a connection
+// does not already exist, returns nil.  This allows us to check for a
+// connection without actually creating one if it doesn't already exist.
+func (p *StreamPool) getConnection(k key, end bool, ts time.Time) *connection {
+       p.mu.RLock()
+       conn := p.conns[k]
+       p.mu.RUnlock()
+       if end || conn != nil {
+               return conn
+       }
+       s := p.factory.New(k[0], k[1])
+       p.mu.Lock()
+       conn = p.newConnection(k, s, ts)
+       if conn2 := p.conns[k]; conn2 != nil {
+               p.mu.Unlock()
+               return conn2
+       }
+       p.conns[k] = conn
+       p.mu.Unlock()
+       return conn
+}
+
+// Assemble calls AssembleWithTimestamp with the current timestamp, useful for
+// packets being read directly off the wire.
+func (a *Assembler) Assemble(netFlow gopacket.Flow, t *layers.TCP) {
+       a.AssembleWithTimestamp(netFlow, t, time.Now())
+}
+
+// AssembleWithTimestamp reassembles the given TCP packet into its appropriate
+// stream.
+//
+// The timestamp passed in must be the timestamp the packet was seen.
+// For packets read off the wire, time.Now() should be fine.  For packets read
+// from PCAP files, CaptureInfo.Timestamp should be passed in.  This timestamp
+// will affect which streams are flushed by a call to FlushOlderThan.
+//
+// Each Assemble call results in, in order:
+//
+//    zero or one calls to StreamFactory.New, creating a stream
+//    zero or one calls to Reassembled on a single stream
+//    zero or one calls to ReassemblyComplete on the same stream
+func (a *Assembler) AssembleWithTimestamp(netFlow gopacket.Flow, t *layers.TCP, timestamp time.Time) {
+       // Ignore empty TCP packets
+       if !t.SYN && !t.FIN && !t.RST && len(t.LayerPayload()) == 0 {
+               if *debugLog {
+                       log.Println("ignoring useless packet")
+               }
+               return
+       }
+
+       a.ret = a.ret[:0]
+       key := key{netFlow, t.TransportFlow()}
+       var conn *connection
+       // This for loop handles a race condition where a connection will close, lock
+       // the connection pool, and remove itself, but before it locked the connection
+       // pool it's returned to another Assemble statement.  This should loop 0-1
+       // times for the VAST majority of cases.
+       for {
+               conn = a.connPool.getConnection(
+                       key, !t.SYN && len(t.LayerPayload()) == 0, timestamp)
+               if conn == nil {
+                       if *debugLog {
+                               log.Printf("%v got empty packet on otherwise empty connection", key)
+                       }
+                       return
+               }
+               conn.mu.Lock()
+               if !conn.closed {
+                       break
+               }
+               conn.mu.Unlock()
+       }
+       if conn.lastSeen.Before(timestamp) {
+               conn.lastSeen = timestamp
+       }
+       seq, bytes := Sequence(t.Seq), t.Payload
+       if conn.nextSeq == invalidSequence {
+               if t.SYN {
+                       if *debugLog {
+                               log.Printf("%v saw first SYN packet, returning immediately, seq=%v", key, seq)
+                       }
+                       a.ret = append(a.ret, Reassembly{
+                               Bytes: bytes,
+                               Skip:  0,
+                               Start: true,
+                               Seen:  timestamp,
+                       })
+                       conn.nextSeq = seq.Add(len(bytes) + 1)
+               } else {
+                       if *debugLog {
+                               log.Printf("%v waiting for start, storing into connection", key)
+                       }
+                       a.insertIntoConn(t, conn, timestamp)
+               }
+       } else if diff := conn.nextSeq.Difference(seq); diff > 0 {
+               if *debugLog {
+                       log.Printf("%v gap in sequence numbers (%v, %v) diff %v, storing into connection", key, conn.nextSeq, seq, diff)
+               }
+               a.insertIntoConn(t, conn, timestamp)
+       } else {
+               bytes, conn.nextSeq = byteSpan(conn.nextSeq, seq, bytes)
+               if *debugLog {
+                       log.Printf("%v found contiguous data (%v, %v), returning immediately", key, seq, conn.nextSeq)
+               }
+               a.ret = append(a.ret, Reassembly{
+                       Bytes: bytes,
+                       Skip:  0,
+                       End:   t.RST || t.FIN,
+                       Seen:  timestamp,
+               })
+       }
+       if len(a.ret) > 0 {
+               a.sendToConnection(conn)
+       }
+       conn.mu.Unlock()
+}
+
+func byteSpan(expected, received Sequence, bytes []byte) (toSend []byte, next Sequence) {
+       if expected == invalidSequence {
+               return bytes, received.Add(len(bytes))
+       }
+       span := int(received.Difference(expected))
+       if span <= 0 {
+               return bytes, received.Add(len(bytes))
+       } else if len(bytes) < span {
+               return nil, expected
+       }
+       return bytes[span:], expected.Add(len(bytes) - span)
+}
+
+// sendToConnection sends the current values in a.ret to the connection, closing
+// the connection if the last thing sent had End set.
+func (a *Assembler) sendToConnection(conn *connection) {
+       a.addContiguous(conn)
+       if conn.stream == nil {
+               panic("why?")
+       }
+       conn.stream.Reassembled(a.ret)
+       if a.ret[len(a.ret)-1].End {
+               a.closeConnection(conn)
+       }
+}
+
+// addContiguous adds contiguous byte-sets to a connection.
+func (a *Assembler) addContiguous(conn *connection) {
+       for conn.first != nil && conn.nextSeq.Difference(conn.first.seq) <= 0 {
+               a.addNextFromConn(conn)
+       }
+}
+
+// skipFlush skips the first set of bytes we're waiting for and returns the
+// first set of bytes we have.  If we have no bytes pending, it closes the
+// connection.
+func (a *Assembler) skipFlush(conn *connection) {
+       if *debugLog {
+               log.Printf("%v skipFlush %v", conn.key, conn.nextSeq)
+       }
+       if conn.first == nil {
+               a.closeConnection(conn)
+               return
+       }
+       a.ret = a.ret[:0]
+       a.addNextFromConn(conn)
+       a.addContiguous(conn)
+       a.sendToConnection(conn)
+}
+
+func (p *StreamPool) remove(conn *connection) {
+       p.mu.Lock()
+       delete(p.conns, conn.key)
+       p.free = append(p.free, conn)
+       p.mu.Unlock()
+}
+
+func (a *Assembler) closeConnection(conn *connection) {
+       if *debugLog {
+               log.Printf("%v closing", conn.key)
+       }
+       conn.stream.ReassemblyComplete()
+       conn.closed = true
+       a.connPool.remove(conn)
+       for p := conn.first; p != nil; p = p.next {
+               a.pc.replace(p)
+       }
+}
+
+// traverseConn traverses our doubly-linked list of pages for the correct
+// position to put the given sequence number.  Note that it traverses backwards,
+// starting at the highest sequence number and going down, since we assume the
+// common case is that TCP packets for a stream will appear in-order, with
+// minimal loss or packet reordering.
+func (c *connection) traverseConn(seq Sequence) (prev, current *page) {
+       prev = c.last
+       for prev != nil && prev.seq.Difference(seq) < 0 {
+               current = prev
+               prev = current.prev
+       }
+       return
+}
+
+// pushBetween inserts the doubly-linked list first-...-last in between the
+// nodes prev-next in another doubly-linked list.  If prev is nil, makes first
+// the new first page in the connection's list.  If next is nil, makes last the
+// new last page in the list.  first/last may point to the same page.
+func (c *connection) pushBetween(prev, next, first, last *page) {
+       // Maintain our doubly linked list
+       if next == nil || c.last == nil {
+               c.last = last
+       } else {
+               last.next = next
+               next.prev = last
+       }
+       if prev == nil || c.first == nil {
+               c.first = first
+       } else {
+               first.prev = prev
+               prev.next = first
+       }
+}
+
+func (a *Assembler) insertIntoConn(t *layers.TCP, conn *connection, ts time.Time) {
+       if conn.first != nil && conn.first.seq == conn.nextSeq {
+               panic("wtf")
+       }
+       p, p2, numPages := a.pagesFromTCP(t, ts)
+       prev, current := conn.traverseConn(Sequence(t.Seq))
+       conn.pushBetween(prev, current, p, p2)
+       conn.pages += numPages
+       if (a.MaxBufferedPagesPerConnection > 0 && conn.pages >= a.MaxBufferedPagesPerConnection) ||
+               (a.MaxBufferedPagesTotal > 0 && a.pc.used >= a.MaxBufferedPagesTotal) {
+               if *debugLog {
+                       log.Printf("%v hit max buffer size: %+v, %v, %v", conn.key, a.AssemblerOptions, conn.pages, a.pc.used)
+               }
+               a.addNextFromConn(conn)
+       }
+}
+
+// pagesFromTCP creates a page (or set of pages) from a TCP packet.  Note that
+// it should NEVER receive a SYN packet, as it doesn't handle sequences
+// correctly.
+//
+// It returns the first and last page in its doubly-linked list of new pages.
+func (a *Assembler) pagesFromTCP(t *layers.TCP, ts time.Time) (p, p2 *page, numPages int) {
+       first := a.pc.next(ts)
+       current := first
+       numPages++
+       seq, bytes := Sequence(t.Seq), t.Payload
+       for {
+               length := min(len(bytes), pageBytes)
+               current.Bytes = current.buf[:length]
+               copy(current.Bytes, bytes)
+               current.seq = seq
+               bytes = bytes[length:]
+               if len(bytes) == 0 {
+                       break
+               }
+               seq = seq.Add(length)
+               current.next = a.pc.next(ts)
+               current.next.prev = current
+               current = current.next
+               numPages++
+       }
+       current.End = t.RST || t.FIN
+       return first, current, numPages
+}
+
+// addNextFromConn pops the first page from a connection off and adds it to the
+// return array.
+func (a *Assembler) addNextFromConn(conn *connection) {
+       if conn.nextSeq == invalidSequence {
+               conn.first.Skip = -1
+       } else if diff := conn.nextSeq.Difference(conn.first.seq); diff > 0 {
+               conn.first.Skip = int(diff)
+       }
+       conn.first.Bytes, conn.nextSeq = byteSpan(conn.nextSeq, conn.first.seq, conn.first.Bytes)
+       if *debugLog {
+               log.Printf("%v   adding from conn (%v, %v)", conn.key, conn.first.seq, conn.nextSeq)
+       }
+       a.ret = append(a.ret, conn.first.Reassembly)
+       a.pc.replace(conn.first)
+       if conn.first == conn.last {
+               conn.first = nil
+               conn.last = nil
+       } else {
+               conn.first = conn.first.next
+               conn.first.prev = nil
+       }
+       conn.pages--
+}
+
+func min(a, b int) int {
+       if a < b {
+               return a
+       }
+       return b
+}
diff --git a/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go b/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go
new file mode 100644 (file)
index 0000000..1bd2842
--- /dev/null
@@ -0,0 +1,562 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package tcpassembly
+
+import (
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+       "net"
+       "reflect"
+       "testing"
+       "time"
+)
+
+var netFlow gopacket.Flow
+
+func init() {
+       netFlow, _ = gopacket.FlowFromEndpoints(
+               layers.NewIPEndpoint(net.IP{1, 2, 3, 4}),
+               layers.NewIPEndpoint(net.IP{5, 6, 7, 8}))
+}
+
+type testSequence struct {
+       in   layers.TCP
+       want []Reassembly
+}
+
+type testFactory struct {
+       reassembly []Reassembly
+}
+
+func (t *testFactory) New(a, b gopacket.Flow) Stream {
+       return t
+}
+func (t *testFactory) Reassembled(r []Reassembly) {
+       t.reassembly = r
+       for i := 0; i < len(r); i++ {
+               t.reassembly[i].Seen = time.Time{}
+       }
+}
+func (t *testFactory) ReassemblyComplete() {
+}
+
+func test(t *testing.T, s []testSequence) {
+       fact := &testFactory{}
+       p := NewStreamPool(fact)
+       a := NewAssembler(p)
+       a.MaxBufferedPagesPerConnection = 4
+       for i, test := range s {
+               fact.reassembly = []Reassembly{}
+               a.Assemble(netFlow, &test.in)
+               if !reflect.DeepEqual(fact.reassembly, test.want) {
+                       t.Fatalf("test %v:\nwant: %v\n got: %v\n", i, test.want, fact.reassembly)
+               }
+       }
+}
+
+func TestReorder(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1001,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1004,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Skip:  -1,
+                                       Bytes: []byte{1, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{2, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{3, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{4, 2, 3},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1016,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1019,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1013,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{2, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{3, 2, 3},
+                               },
+                       },
+               },
+       })
+}
+
+func TestMaxPerSkip(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1000,
+                               SYN:       true,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1013,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{5, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1016,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{6, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Skip:  3,
+                                       Bytes: []byte{3, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{4, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{5, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{6, 2, 3},
+                               },
+                       },
+               },
+       })
+}
+
+func TestReorderFast(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1004,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{2, 2, 3},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{3, 2, 3},
+                               },
+                       },
+               },
+       })
+}
+
+func TestOverlap(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3, 4, 5},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{6, 7},
+                               },
+                       },
+               },
+       })
+}
+
+func TestBufferedOverlap(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1007,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1010,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3, 4, 5},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{6, 7},
+                               },
+                       },
+               },
+       })
+}
+
+func TestOverrun1(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       0xFFFFFFFF,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+                               },
+                       },
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       10,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3, 4},
+                               },
+                       },
+               },
+       })
+}
+
+func TestOverrun2(t *testing.T) {
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       10,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               SYN:       true,
+                               Seq:       0xFFFFFFFF,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0},
+                               },
+                               Reassembly{
+                                       Bytes: []byte{1, 2, 3, 4},
+                               },
+                       },
+               },
+       })
+}
+
+func TestCacheLargePacket(t *testing.T) {
+       data := make([]byte, pageBytes*3)
+       test(t, []testSequence{
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1001,
+                               BaseLayer: layers.BaseLayer{Payload: data},
+                       },
+                       want: []Reassembly{},
+               },
+               {
+                       in: layers.TCP{
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1000,
+                               SYN:       true,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{}},
+                       },
+                       want: []Reassembly{
+                               Reassembly{
+                                       Start: true,
+                                       Bytes: []byte{},
+                               },
+                               Reassembly{
+                                       Bytes: data[:pageBytes],
+                               },
+                               Reassembly{
+                                       Bytes: data[pageBytes : pageBytes*2],
+                               },
+                               Reassembly{
+                                       Bytes: data[pageBytes*2 : pageBytes*3],
+                               },
+                       },
+               },
+       })
+}
+
+func BenchmarkSingleStream(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               SYN:       true,
+               Seq:       1000,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactory{}))
+       for i := 0; i < b.N; i++ {
+               a.Assemble(netFlow, &t)
+               if t.SYN {
+                       t.SYN = false
+                       t.Seq++
+               }
+               t.Seq += 10
+       }
+}
+
+func BenchmarkSingleStreamSkips(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               SYN:       true,
+               Seq:       1000,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactory{}))
+       skipped := false
+       for i := 0; i < b.N; i++ {
+               if i%10 == 9 {
+                       t.Seq += 10
+                       skipped = true
+               } else if skipped {
+                       t.Seq -= 20
+               }
+               a.Assemble(netFlow, &t)
+               if t.SYN {
+                       t.SYN = false
+                       t.Seq++
+               }
+               t.Seq += 10
+               if skipped {
+                       t.Seq += 10
+                       skipped = false
+               }
+       }
+}
+
+func BenchmarkSingleStreamLoss(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               SYN:       true,
+               Seq:       1000,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactory{}))
+       for i := 0; i < b.N; i++ {
+               a.Assemble(netFlow, &t)
+               t.SYN = false
+               t.Seq += 11
+       }
+}
+
+func BenchmarkMultiStreamGrow(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               Seq:       0,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactory{}))
+       for i := 0; i < b.N; i++ {
+               t.SrcPort = layers.TCPPort(i)
+               a.Assemble(netFlow, &t)
+               t.Seq += 10
+       }
+}
+
+func BenchmarkMultiStreamConn(b *testing.B) {
+       t := layers.TCP{
+               SrcPort:   1,
+               DstPort:   2,
+               Seq:       0,
+               SYN:       true,
+               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}},
+       }
+       a := NewAssembler(NewStreamPool(&testFactory{}))
+       for i := 0; i < b.N; i++ {
+               t.SrcPort = layers.TCPPort(i)
+               a.Assemble(netFlow, &t)
+               if i%65536 == 65535 {
+                       if t.SYN {
+                               t.SYN = false
+                               t.Seq++
+                       }
+                       t.Seq += 10
+               }
+       }
+}
diff --git a/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go b/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go
new file mode 100644 (file)
index 0000000..092b811
--- /dev/null
@@ -0,0 +1,210 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// Package tcpreader provides an implementation for tcpassembly.Stream which presents
+// the caller with an io.Reader for easy processing.
+//
+// The assembly package handles packet data reordering, but its output is
+// library-specific, thus not usable by the majority of external Go libraries.
+// The io.Reader interface, on the other hand, is used throughout much of Go
+// code as an easy mechanism for reading in data streams and decoding them.  For
+// example, the net/http package provides the ReadRequest function, which can
+// parase an HTTP request from a live data stream, just what we'd want when
+// sniffing HTTP traffic.  Using ReaderStream, this is relatively easy to set
+// up:
+//
+//  // Create our StreamFactory
+//  type httpStreamFactory struct {}
+//  func (f *httpStreamFactory) New(a, b gopacket.Flow) {
+//     r := tcpreader.NewReaderStream(false)
+//     go printRequests(r)
+//     return &r
+//  }
+//  func printRequests(r io.Reader) {
+//    // Convert to bufio, since that's what ReadRequest wants.
+//     buf := bufio.NewReader(r)
+//     for {
+//             if req, err := http.ReadRequest(buf); err == io.EOF {
+//                     return
+//             } else if err != nil {
+//                     log.Println("Error parsing HTTP requests:", err)
+//             } else {
+//                     fmt.Println("HTTP REQUEST:", req)
+//                     fmt.Println("Body contains", tcpreader.DiscardBytesToEOF(req.Body), "bytes")
+//             }
+//     }
+//  }
+//
+// Using just this code, we're able to reference a powerful, built-in library
+// for HTTP request parsing to do all the dirty-work of parsing requests from
+// the wire in real-time.  Pass this stream factory to an tcpassembly.StreamPool,
+// start up an tcpassembly.Assembler, and you're good to go!
+package tcpreader
+
+import (
+       "errors"
+       "github.com/google/gopacket/tcpassembly"
+       "io"
+)
+
+var discardBuffer = make([]byte, 4096)
+
+// DiscardBytesToFirstError will read in all bytes up to the first error
+// reported by the given reader, then return the number of bytes discarded
+// and the error encountered.
+func DiscardBytesToFirstError(r io.Reader) (discarded int, err error) {
+       for {
+               n, e := r.Read(discardBuffer)
+               discarded += n
+               if e != nil {
+                       return discarded, e
+               }
+       }
+}
+
+// DiscardBytesToEOF will read in all bytes from a Reader until it
+// encounters an io.EOF, then return the number of bytes.  Be careful
+// of this... if used on a Reader that returns a non-io.EOF error
+// consistently, this will loop forever discarding that error while
+// it waits for an EOF.
+func DiscardBytesToEOF(r io.Reader) (discarded int) {
+       for {
+               n, e := DiscardBytesToFirstError(r)
+               discarded += n
+               if e == io.EOF {
+                       return
+               }
+       }
+}
+
+// ReaderStream implements both tcpassembly.Stream and io.Reader.  You can use it
+// as a building block to make simple, easy stream handlers.
+//
+// IMPORTANT:  If you use a ReaderStream, you MUST read ALL BYTES from it,
+// quickly.  Not reading available bytes will block TCP stream reassembly.  It's
+// a common pattern to do this by starting a goroutine in the factory's New
+// method:
+//
+//  type myStreamHandler struct {
+//     r ReaderStream
+//  }
+//  func (m *myStreamHandler) run() {
+//     // Do something here that reads all of the ReaderStream, or your assembly
+//     // will block.
+//     fmt.Println(tcpreader.DiscardBytesToEOF(&m.r))
+//  }
+//  func (f *myStreamFactory) New(a, b gopacket.Flow) tcpassembly.Stream {
+//     s := &myStreamHandler{}
+//     go s.run()
+//     // Return the ReaderStream as the stream that assembly should populate.
+//     return &s.r
+//  }
+type ReaderStream struct {
+       ReaderStreamOptions
+       reassembled  chan []tcpassembly.Reassembly
+       done         chan bool
+       current      []tcpassembly.Reassembly
+       closed       bool
+       lossReported bool
+       first        bool
+       initiated    bool
+}
+
+// ReaderStreamOptions provides user-resettable options for a ReaderStream.
+type ReaderStreamOptions struct {
+       // LossErrors determines whether this stream will return
+       // ReaderStreamDataLoss errors from its Read function whenever it
+       // determines data has been lost.
+       LossErrors bool
+}
+
+// NewReaderStream returns a new ReaderStream object.
+func NewReaderStream() ReaderStream {
+       r := ReaderStream{
+               reassembled: make(chan []tcpassembly.Reassembly),
+               done:        make(chan bool),
+               first:       true,
+               initiated:   true,
+       }
+       return r
+}
+
+// Reassembled implements tcpassembly.Stream's Reassembled function.
+func (r *ReaderStream) Reassembled(reassembly []tcpassembly.Reassembly) {
+       if !r.initiated {
+               panic("ReaderStream not created via NewReaderStream")
+       }
+       r.reassembled <- reassembly
+       <-r.done
+}
+
+// ReassemblyComplete implements tcpassembly.Stream's ReassemblyComplete function.
+func (r *ReaderStream) ReassemblyComplete() {
+       close(r.reassembled)
+       close(r.done)
+}
+
+// stripEmpty strips empty reassembly slices off the front of its current set of
+// slices.
+func (r *ReaderStream) stripEmpty() {
+       for len(r.current) > 0 && len(r.current[0].Bytes) == 0 {
+               r.current = r.current[1:]
+               r.lossReported = false
+       }
+}
+
+// DataLost is returned by the ReaderStream's Read function when it encounters
+// a Reassembly with Skip != 0.
+var DataLost = errors.New("lost data")
+
+// Read implements io.Reader's Read function.
+// Given a byte slice, it will either copy a non-zero number of bytes into
+// that slice and return the number of bytes and a nil error, or it will
+// leave slice p as is and return 0, io.EOF.
+func (r *ReaderStream) Read(p []byte) (int, error) {
+       if !r.initiated {
+               panic("ReaderStream not created via NewReaderStream")
+       }
+       var ok bool
+       r.stripEmpty()
+       for !r.closed && len(r.current) == 0 {
+               if r.first {
+                       r.first = false
+               } else {
+                       r.done <- true
+               }
+               if r.current, ok = <-r.reassembled; ok {
+                       r.stripEmpty()
+               } else {
+                       r.closed = true
+               }
+       }
+       if len(r.current) > 0 {
+               current := &r.current[0]
+               if r.LossErrors && !r.lossReported && current.Skip != 0 {
+                       r.lossReported = true
+                       return 0, DataLost
+               }
+               length := copy(p, current.Bytes)
+               current.Bytes = current.Bytes[length:]
+               return length, nil
+       }
+       return 0, io.EOF
+}
+
+// Close implements io.Closer's Close function, making ReaderStream a
+// io.ReadCloser.  It discards all remaining bytes in the reassembly in a
+// manner that's safe for the assembler (IE: it doesn't block).
+func (r *ReaderStream) Close() error {
+       r.current = nil
+       r.closed = true
+       for {
+               if _, ok := <-r.reassembled; !ok {
+                       return nil
+               }
+               r.done <- true
+       }
+}
diff --git a/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go b/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go
new file mode 100644 (file)
index 0000000..7da9fd9
--- /dev/null
@@ -0,0 +1,129 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package tcpreader
+
+import (
+       "bytes"
+       "fmt"
+       "github.com/google/gopacket"
+       "github.com/google/gopacket/layers"
+       "github.com/google/gopacket/tcpassembly"
+       "io"
+       "net"
+       "testing"
+)
+
+var netFlow gopacket.Flow
+
+func init() {
+       netFlow, _ = gopacket.FlowFromEndpoints(
+               layers.NewIPEndpoint(net.IP{1, 2, 3, 4}),
+               layers.NewIPEndpoint(net.IP{5, 6, 7, 8}))
+}
+
+type readReturn struct {
+       data []byte
+       err  error
+}
+type readSequence struct {
+       in   []layers.TCP
+       want []readReturn
+}
+type testReaderFactory struct {
+       lossErrors bool
+       readSize   int
+       ReaderStream
+       output chan []byte
+}
+
+func (t *testReaderFactory) New(a, b gopacket.Flow) tcpassembly.Stream {
+       return &t.ReaderStream
+}
+
+func testReadSequence(t *testing.T, lossErrors bool, readSize int, seq readSequence) {
+       f := &testReaderFactory{ReaderStream: NewReaderStream()}
+       f.ReaderStream.LossErrors = lossErrors
+       p := tcpassembly.NewStreamPool(f)
+       a := tcpassembly.NewAssembler(p)
+       buf := make([]byte, readSize)
+       go func() {
+               for i, test := range seq.in {
+                       fmt.Println("Assembling", i)
+                       a.Assemble(netFlow, &test)
+                       fmt.Println("Assembly done")
+               }
+       }()
+       for i, test := range seq.want {
+               fmt.Println("Waiting for read", i)
+               n, err := f.Read(buf[:])
+               fmt.Println("Got read")
+               if n != len(test.data) {
+                       t.Errorf("test %d want %d bytes, got %d bytes", i, len(test.data), n)
+               } else if err != test.err {
+                       t.Errorf("test %d want err %v, got err %v", i, test.err, err)
+               } else if !bytes.Equal(buf[:n], test.data) {
+                       t.Errorf("test %d\nwant: %v\n got: %v\n", i, test.data, buf[:n])
+               }
+       }
+       fmt.Println("All done reads")
+}
+
+func TestRead(t *testing.T) {
+       testReadSequence(t, false, 10, readSequence{
+               in: []layers.TCP{
+                       {
+                               SYN:       true,
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       {
+                               FIN:     true,
+                               SrcPort: 1,
+                               DstPort: 2,
+                               Seq:     1004,
+                       },
+               },
+               want: []readReturn{
+                       {data: []byte{1, 2, 3}},
+                       {err: io.EOF},
+               },
+       })
+}
+
+func TestReadSmallChunks(t *testing.T) {
+       testReadSequence(t, false, 2, readSequence{
+               in: []layers.TCP{
+                       {
+                               SYN:       true,
+                               SrcPort:   1,
+                               DstPort:   2,
+                               Seq:       1000,
+                               BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+                       },
+                       {
+                               FIN:     true,
+                               SrcPort: 1,
+                               DstPort: 2,
+                               Seq:     1004,
+                       },
+               },
+               want: []readReturn{
+                       {data: []byte{1, 2}},
+                       {data: []byte{3}},
+                       {err: io.EOF},
+               },
+       })
+}
+
+func ExampleDiscardBytesToEOF() {
+       b := bytes.NewBuffer([]byte{1, 2, 3, 4, 5})
+       fmt.Println(DiscardBytesToEOF(b))
+       // Output:
+       // 5
+}
diff --git a/vendor/github.com/google/gopacket/writer.go b/vendor/github.com/google/gopacket/writer.go
new file mode 100644 (file)
index 0000000..9e85a92
--- /dev/null
@@ -0,0 +1,213 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "fmt"
+)
+
+// SerializableLayer allows its implementations to be written out as a set of bytes,
+// so those bytes may be sent on the wire or otherwise used by the caller.
+// SerializableLayer is implemented by certain Layer types, and can be encoded to
+// bytes using the LayerWriter object.
+type SerializableLayer interface {
+       // SerializeTo writes this layer to a slice, growing that slice if necessary
+       // to make it fit the layer's data.
+       //  Args:
+       //   b:  SerializeBuffer to write this layer on to.  When called, b.Bytes()
+       //     is the payload this layer should wrap, if any.  Note that this
+       //     layer can either prepend itself (common), append itself
+       //     (uncommon), or both (sometimes padding or footers are required at
+       //     the end of packet data). It's also possible (though probably very
+       //     rarely needed) to overwrite any bytes in the current payload.
+       //     After this call, b.Bytes() should return the byte encoding of
+       //     this layer wrapping the original b.Bytes() payload.
+       //   opts:  options to use while writing out data.
+       //  Returns:
+       //   error if a problem was encountered during encoding.  If an error is
+       //   returned, the bytes in data should be considered invalidated, and
+       //   not used.
+       //
+       // SerializeTo calls SHOULD entirely ignore LayerContents and
+       // LayerPayload.  It just serializes based on struct fields, neither
+       // modifying nor using contents/payload.
+       SerializeTo(b SerializeBuffer, opts SerializeOptions) error
+}
+
+// SerializeOptions provides options for behaviors that SerializableLayers may want to
+// implement.
+type SerializeOptions struct {
+       // FixLengths determines whether, during serialization, layers should fix
+       // the values for any length field that depends on the payload.
+       FixLengths bool
+       // ComputeChecksums determines whether, during serialization, layers
+       // should recompute checksums based on their payloads.
+       ComputeChecksums bool
+}
+
+// SerializeBuffer is a helper used by gopacket for writing out packet layers.
+// SerializeBuffer starts off as an empty []byte.  Subsequent calls to PrependBytes
+// return byte slices before the current Bytes(), AppendBytes returns byte
+// slices after.
+//
+// Byte slices returned by PrependBytes/AppendBytes are NOT zero'd out, so if
+// you want to make sure they're all zeros, set them as such.
+//
+// SerializeBuffer is specifically designed to handle packet writing, where unlike
+// with normal writes it's easier to start writing at the inner-most layer and
+// work out, meaning that we often need to prepend bytes.  This runs counter to
+// typical writes to byte slices using append(), where we only write at the end
+// of the buffer.
+//
+// It can be reused via Clear.  Note, however, that a Clear call will invalidate the
+// byte slices returned by any previous Bytes() call (the same buffer is
+// reused).
+//
+//  1) Reusing a write buffer is generally much faster than creating a new one,
+//     and with the default implementation it avoids additional memory allocations.
+//  2) If a byte slice from a previous Bytes() call will continue to be used,
+//     it's better to create a new SerializeBuffer.
+//
+// The Clear method is specifically designed to minimize memory allocations for
+// similar later workloads on the SerializeBuffer.  IE: if you make a set of
+// Prepend/Append calls, then clear, then make the same calls with the same
+// sizes, the second round (and all future similar rounds) shouldn't allocate
+// any new memory.
+type SerializeBuffer interface {
+       // Bytes returns the contiguous set of bytes collected so far by Prepend/Append
+       // calls.  The slice returned by Bytes will be modified by future Clear calls,
+       // so if you're planning on clearing this SerializeBuffer, you may want to copy
+       // Bytes somewhere safe first.
+       Bytes() []byte
+       // PrependBytes returns a set of bytes which prepends the current bytes in this
+       // buffer.  These bytes start in an indeterminate state, so they should be
+       // overwritten by the caller.  The caller must only call PrependBytes if they
+       // know they're going to immediately overwrite all bytes returned.
+       PrependBytes(num int) ([]byte, error)
+       // AppendBytes returns a set of bytes which appends the current bytes in this
+       // buffer.  These bytes start in an indeterminate state, so they should be
+       // overwritten by the caller.  The caller must only call AppendBytes if they
+       // know they're going to immediately overwrite all bytes returned.
+       AppendBytes(num int) ([]byte, error)
+       // Clear resets the SerializeBuffer to a new, empty buffer.  After a call to clear,
+       // the byte slice returned by any previous call to Bytes() for this buffer
+       // should be considered invalidated.
+       Clear() error
+}
+
+type serializeBuffer struct {
+       data                []byte
+       start               int
+       prepended, appended int
+}
+
+// NewSerializeBuffer creates a new instance of the default implementation of
+// the SerializeBuffer interface.
+func NewSerializeBuffer() SerializeBuffer {
+       return &serializeBuffer{}
+}
+
+// NewSerializeBufferExpectedSize creates a new buffer for serialization, optimized for an
+// expected number of bytes prepended/appended.  This tends to decrease the
+// number of memory allocations made by the buffer during writes.
+func NewSerializeBufferExpectedSize(expectedPrependLength, expectedAppendLength int) SerializeBuffer {
+       return &serializeBuffer{
+               data:      make([]byte, expectedPrependLength, expectedPrependLength+expectedAppendLength),
+               start:     expectedPrependLength,
+               prepended: expectedPrependLength,
+               appended:  expectedAppendLength,
+       }
+}
+
+func (w *serializeBuffer) Bytes() []byte {
+       return w.data[w.start:]
+}
+
+func (w *serializeBuffer) PrependBytes(num int) ([]byte, error) {
+       if num < 0 {
+               panic("num < 0")
+       }
+       if w.start < num {
+               toPrepend := w.prepended
+               if toPrepend < num {
+                       toPrepend = num
+               }
+               w.prepended += toPrepend
+               length := cap(w.data) + toPrepend
+               newData := make([]byte, length)
+               newStart := w.start + toPrepend
+               copy(newData[newStart:], w.data[w.start:])
+               w.start = newStart
+               w.data = newData[:toPrepend+len(w.data)]
+       }
+       w.start -= num
+       return w.data[w.start : w.start+num], nil
+}
+
+func (w *serializeBuffer) AppendBytes(num int) ([]byte, error) {
+       if num < 0 {
+               panic("num < 0")
+       }
+       initialLength := len(w.data)
+       if cap(w.data)-initialLength < num {
+               toAppend := w.appended
+               if toAppend < num {
+                       toAppend = num
+               }
+               w.appended += toAppend
+               newData := make([]byte, cap(w.data)+toAppend)
+               copy(newData[w.start:], w.data[w.start:])
+               w.data = newData[:initialLength]
+       }
+       // Grow the buffer.  We know it'll be under capacity given above.
+       w.data = w.data[:initialLength+num]
+       return w.data[initialLength:], nil
+}
+
+func (w *serializeBuffer) Clear() error {
+       w.start = w.prepended
+       w.data = w.data[:w.start]
+       return nil
+}
+
+// SerializeLayers clears the given write buffer, then writes all layers into it so
+// they correctly wrap each other.  Note that by clearing the buffer, it
+// invalidates all slices previously returned by w.Bytes()
+//
+// Example:
+//   buf := gopacket.NewSerializeBuffer()
+//   opts := gopacket.SerializeOptions{}
+//   gopacket.SerializeLayers(buf, opts, a, b, c)
+//   firstPayload := buf.Bytes()  // contains byte representation of a(b(c))
+//   gopacket.SerializeLayers(buf, opts, d, e, f)
+//   secondPayload := buf.Bytes()  // contains byte representation of d(e(f)). firstPayload is now invalidated, since the SerializeLayers call Clears buf.
+func SerializeLayers(w SerializeBuffer, opts SerializeOptions, layers ...SerializableLayer) error {
+       w.Clear()
+       for i := len(layers) - 1; i >= 0; i-- {
+               layer := layers[i]
+               err := layer.SerializeTo(w, opts)
+               if err != nil {
+                       return err
+               }
+       }
+       return nil
+}
+
+// SerializePacket is a convenience function that calls SerializeLayers
+// on packet's Layers().
+// It returns an error if one of the packet layers is not a SerializebleLayer.
+func SerializePacket(buf SerializeBuffer, opts SerializeOptions, packet Packet) error {
+       sls := []SerializableLayer{}
+       for _, layer := range packet.Layers() {
+               sl, ok := layer.(SerializableLayer)
+               if !ok {
+                       return fmt.Errorf("layer %s is not serializable", layer.LayerType().String())
+               }
+               sls = append(sls, sl)
+       }
+       return SerializeLayers(buf, opts, sls...)
+}
diff --git a/vendor/github.com/google/gopacket/writer_test.go b/vendor/github.com/google/gopacket/writer_test.go
new file mode 100644 (file)
index 0000000..e19069b
--- /dev/null
@@ -0,0 +1,94 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+package gopacket
+
+import (
+       "fmt"
+       "testing"
+)
+
+func TestExponentialSizeIncreasePrepend(t *testing.T) {
+       var b serializeBuffer
+       for i, test := range []struct {
+               prepend, size int
+       }{
+               {2, 2},
+               {2, 4},
+               {2, 8},
+               {2, 8},
+               {2, 16},
+               {2, 16},
+               {2, 16},
+               {2, 16},
+               {2, 32},
+       } {
+               b.PrependBytes(test.prepend)
+               if test.size != cap(b.data) {
+                       t.Error(i, "size want", test.size, "got", cap(b.data))
+               }
+       }
+       b.Clear()
+       if b.start != 32 {
+               t.Error(b.start)
+       }
+}
+
+func TestExponentialSizeIncreaseAppend(t *testing.T) {
+       var b serializeBuffer
+       for i, test := range []struct {
+               appnd, size int
+       }{
+               {2, 2},
+               {2, 4},
+               {2, 8},
+               {2, 8},
+               {2, 16},
+               {2, 16},
+               {2, 16},
+               {2, 16},
+               {2, 32},
+       } {
+               b.AppendBytes(test.appnd)
+               if test.size != cap(b.data) {
+                       t.Error(i, "size want", test.size, "got", cap(b.data))
+               }
+       }
+       b.Clear()
+       if b.start != 0 {
+               t.Error(b.start)
+       }
+}
+
+func ExampleSerializeBuffer() {
+       b := NewSerializeBuffer()
+       fmt.Println("1:", b.Bytes())
+       bytes, _ := b.PrependBytes(3)
+       copy(bytes, []byte{1, 2, 3})
+       fmt.Println("2:", b.Bytes())
+       bytes, _ = b.AppendBytes(2)
+       copy(bytes, []byte{4, 5})
+       fmt.Println("3:", b.Bytes())
+       bytes, _ = b.PrependBytes(1)
+       copy(bytes, []byte{0})
+       fmt.Println("4:", b.Bytes())
+       bytes, _ = b.AppendBytes(3)
+       copy(bytes, []byte{6, 7, 8})
+       fmt.Println("5:", b.Bytes())
+       b.Clear()
+       fmt.Println("6:", b.Bytes())
+       bytes, _ = b.PrependBytes(2)
+       copy(bytes, []byte{9, 9})
+       fmt.Println("7:", b.Bytes())
+       // Output:
+       // 1: []
+       // 2: [1 2 3]
+       // 3: [1 2 3 4 5]
+       // 4: [0 1 2 3 4 5]
+       // 5: [0 1 2 3 4 5 6 7 8]
+       // 6: []
+       // 7: [9 9]
+}
diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md
new file mode 100644 (file)
index 0000000..bc6f603
--- /dev/null
@@ -0,0 +1,173 @@
+# Building `sys/unix`
+
+The sys/unix package provides access to the raw system call interface of the
+underlying operating system. See: https://godoc.org/golang.org/x/sys/unix
+
+Porting Go to a new architecture/OS combination or adding syscalls, types, or
+constants to an existing architecture/OS pair requires some manual effort;
+however, there are tools that automate much of the process.
+
+## Build Systems
+
+There are currently two ways we generate the necessary files. We are currently
+migrating the build system to use containers so the builds are reproducible.
+This is being done on an OS-by-OS basis. Please update this documentation as
+components of the build system change.
+
+### Old Build System (currently for `GOOS != "Linux" || GOARCH == "sparc64"`)
+
+The old build system generates the Go files based on the C header files
+present on your system. This means that files
+for a given GOOS/GOARCH pair must be generated on a system with that OS and
+architecture. This also means that the generated code can differ from system
+to system, based on differences in the header files.
+
+To avoid this, if you are using the old build system, only generate the Go
+files on an installation with unmodified header files. It is also important to
+keep track of which version of the OS the files were generated from (ex.
+Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes
+and have each OS upgrade correspond to a single change.
+
+To build the files for your current OS and architecture, make sure GOOS and
+GOARCH are set correctly and run `mkall.sh`. This will generate the files for
+your specific system. Running `mkall.sh -n` shows the commands that will be run.
+
+Requirements: bash, perl, go
+
+### New Build System (currently for `GOOS == "Linux" && GOARCH != "sparc64"`)
+
+The new build system uses a Docker container to generate the go files directly
+from source checkouts of the kernel and various system libraries. This means
+that on any platform that supports Docker, all the files using the new build
+system can be generated at once, and generated files will not change based on
+what the person running the scripts has installed on their computer.
+
+The OS specific files for the new build system are located in the `${GOOS}`
+directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When
+the kernel or system library updates, modify the Dockerfile at
+`${GOOS}/Dockerfile` to checkout the new release of the source.
+
+To build all the files under the new build system, you must be on an amd64/Linux
+system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will
+then generate all of the files for all of the GOOS/GOARCH pairs in the new build
+system. Running `mkall.sh -n` shows the commands that will be run.
+
+Requirements: bash, perl, go, docker
+
+## Component files
+
+This section describes the various files used in the code generation process.
+It also contains instructions on how to modify these files to add a new
+architecture/OS or to add additional syscalls, types, or constants. Note that
+if you are using the new build system, the scripts cannot be called normally.
+They must be called from within the docker container.
+
+### asm files
+
+The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system
+call dispatch. There are three entry points:
+```
+  func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
+  func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
+  func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
+```
+The first and second are the standard ones; they differ only in how many
+arguments can be passed to the kernel. The third is for low-level use by the
+ForkExec wrapper. Unlike the first two, it does not call into the scheduler to
+let it know that a system call is running.
+
+When porting Go to an new architecture/OS, this file must be implemented for
+each GOOS/GOARCH pair.
+
+### mksysnum
+
+Mksysnum is a script located at `${GOOS}/mksysnum.pl` (or `mksysnum_${GOOS}.pl`
+for the old system). This script takes in a list of header files containing the
+syscall number declarations and parses them to produce the corresponding list of
+Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated
+constants.
+
+Adding new syscall numbers is mostly done by running the build on a sufficiently
+new installation of the target OS (or updating the source checkouts for the
+new build system). However, depending on the OS, you make need to update the
+parsing in mksysnum.
+
+### mksyscall.pl
+
+The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are
+hand-written Go files which implement system calls (for unix, the specific OS,
+or the specific OS/Architecture pair respectively) that need special handling
+and list `//sys` comments giving prototypes for ones that can be generated.
+
+The mksyscall.pl script takes the `//sys` and `//sysnb` comments and converts
+them into syscalls. This requires the name of the prototype in the comment to
+match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function
+prototype can be exported (capitalized) or not.
+
+Adding a new syscall often just requires adding a new `//sys` function prototype
+with the desired arguments and a capitalized name so it is exported. However, if
+you want the interface to the syscall to be different, often one will make an
+unexported `//sys` prototype, an then write a custom wrapper in
+`syscall_${GOOS}.go`.
+
+### types files
+
+For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or
+`types_${GOOS}.go` on the old system). This file includes standard C headers and
+creates Go type aliases to the corresponding C types. The file is then fed
+through godef to get the Go compatible definitions. Finally, the generated code
+is fed though mkpost.go to format the code correctly and remove any hidden or
+private identifiers. This cleaned-up code is written to
+`ztypes_${GOOS}_${GOARCH}.go`.
+
+The hardest part about preparing this file is figuring out which headers to
+include and which symbols need to be `#define`d to get the actual data
+structures that pass through to the kernel system calls. Some C libraries
+preset alternate versions for binary compatibility and translate them on the
+way in and out of system calls, but there is almost always a `#define` that can
+get the real ones.
+See `types_darwin.go` and `linux/types.go` for examples.
+
+To add a new type, add in the necessary include statement at the top of the
+file (if it is not already there) and add in a type alias line. Note that if
+your type is significantly different on different architectures, you may need
+some `#if/#elif` macros in your include statements.
+
+### mkerrors.sh
+
+This script is used to generate the system's various constants. This doesn't
+just include the error numbers and error strings, but also the signal numbers
+an a wide variety of miscellaneous constants. The constants come from the list
+of include files in the `includes_${uname}` variable. A regex then picks out
+the desired `#define` statements, and generates the corresponding Go constants.
+The error numbers and strings are generated from `#include <errno.h>`, and the
+signal numbers and strings are generated from `#include <signal.h>`. All of
+these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program,
+`_errors.c`, which prints out all the constants.
+
+To add a constant, add the header that includes it to the appropriate variable.
+Then, edit the regex (if necessary) to match the desired constant. Avoid making
+the regex too broad to avoid matching unintended constants.
+
+
+## Generated files
+
+### `zerror_${GOOS}_${GOARCH}.go`
+
+A file containing all of the system's generated error numbers, error strings,
+signal numbers, and constants. Generated by `mkerrors.sh` (see above).
+
+### `zsyscall_${GOOS}_${GOARCH}.go`
+
+A file containing all the generated syscalls for a specific GOOS and GOARCH.
+Generated by `mksyscall.pl` (see above).
+
+### `zsysnum_${GOOS}_${GOARCH}.go`
+
+A list of numeric constants for all the syscall number of the specific GOOS
+and GOARCH. Generated by mksysnum (see above).
+
+### `ztypes_${GOOS}_${GOARCH}.go`
+
+A file containing Go types for passing into (or returning from) syscalls.
+Generated by godefs and the types file (see above).
diff --git a/vendor/golang.org/x/sys/unix/dirent.go b/vendor/golang.org/x/sys/unix/dirent.go
new file mode 100644 (file)
index 0000000..bd47581
--- /dev/null
@@ -0,0 +1,102 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+
+package unix
+
+import "unsafe"
+
+// readInt returns the size-bytes unsigned integer in native byte order at offset off.
+func readInt(b []byte, off, size uintptr) (u uint64, ok bool) {
+       if len(b) < int(off+size) {
+               return 0, false
+       }
+       if isBigEndian {
+               return readIntBE(b[off:], size), true
+       }
+       return readIntLE(b[off:], size), true
+}
+
+func readIntBE(b []byte, size uintptr) uint64 {
+       switch size {
+       case 1:
+               return uint64(b[0])
+       case 2:
+               _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
+               return uint64(b[1]) | uint64(b[0])<<8
+       case 4:
+               _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
+               return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24
+       case 8:
+               _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
+               return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
+                       uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
+       default:
+               panic("syscall: readInt with unsupported size")
+       }
+}
+
+func readIntLE(b []byte, size uintptr) uint64 {
+       switch size {
+       case 1:
+               return uint64(b[0])
+       case 2:
+               _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
+               return uint64(b[0]) | uint64(b[1])<<8
+       case 4:
+               _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
+               return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24
+       case 8:
+               _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
+               return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
+                       uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+       default:
+               panic("syscall: readInt with unsupported size")
+       }
+}
+
+// ParseDirent parses up to max directory entries in buf,
+// appending the names to names. It returns the number of
+// bytes consumed from buf, the number of entries added
+// to names, and the new names slice.
+func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
+       origlen := len(buf)
+       count = 0
+       for max != 0 && len(buf) > 0 {
+               reclen, ok := direntReclen(buf)
+               if !ok || reclen > uint64(len(buf)) {
+                       return origlen, count, names
+               }
+               rec := buf[:reclen]
+               buf = buf[reclen:]
+               ino, ok := direntIno(rec)
+               if !ok {
+                       break
+               }
+               if ino == 0 { // File absent in directory.
+                       continue
+               }
+               const namoff = uint64(unsafe.Offsetof(Dirent{}.Name))
+               namlen, ok := direntNamlen(rec)
+               if !ok || namoff+namlen > uint64(len(rec)) {
+                       break
+               }
+               name := rec[namoff : namoff+namlen]
+               for i, c := range name {
+                       if c == 0 {
+                               name = name[:i]
+                               break
+                       }
+               }
+               // Check for useless names before allocating a string.
+               if string(name) == "." || string(name) == ".." {
+                       continue
+               }
+               max--
+               count++
+               names = append(names, string(name))
+       }
+       return origlen - len(buf), count, names
+}
diff --git a/vendor/golang.org/x/sys/unix/endian_big.go b/vendor/golang.org/x/sys/unix/endian_big.go
new file mode 100644 (file)
index 0000000..5e92690
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+//
+// +build ppc64 s390x mips mips64
+
+package unix
+
+const isBigEndian = true
diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go
new file mode 100644 (file)
index 0000000..085df2d
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+//
+// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le
+
+package unix
+
+const isBigEndian = false
diff --git a/vendor/golang.org/x/sys/unix/linux/Dockerfile b/vendor/golang.org/x/sys/unix/linux/Dockerfile
new file mode 100644 (file)
index 0000000..4397143
--- /dev/null
@@ -0,0 +1,48 @@
+FROM ubuntu:16.04
+
+# Dependencies to get the git sources and go binaries
+RUN apt-get update && apt-get install -y \
+        curl \
+        git \
+    && rm -rf /var/lib/apt/lists/*
+
+# Get the git sources. If not cached, this takes O(5 minutes).
+WORKDIR /git
+RUN git config --global advice.detachedHead false
+# Linux Kernel: Released 19 Feb 2017
+RUN git clone --branch v4.10 --depth 1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
+# GNU C library: Released 05 Feb 2017 (we should try to get a secure way to clone this)
+RUN git clone --branch glibc-2.25 --depth 1 git://sourceware.org/git/glibc.git
+
+# Get Go 1.8 (https://github.com/docker-library/golang/blob/master/1.8/Dockerfile)
+ENV GOLANG_VERSION 1.8
+ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz
+ENV GOLANG_DOWNLOAD_SHA256 53ab94104ee3923e228a2cb2116e5e462ad3ebaeea06ff04463479d7f12d27ca
+
+RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \
+    && echo "$GOLANG_DOWNLOAD_SHA256  golang.tar.gz" | sha256sum -c - \
+    && tar -C /usr/local -xzf golang.tar.gz \
+    && rm golang.tar.gz
+
+ENV PATH /usr/local/go/bin:$PATH
+
+# Linux and Glibc build dependencies
+RUN apt-get update && apt-get install -y \
+        gawk make python \
+        gcc gcc-multilib \
+        gettext  texinfo \
+    && rm -rf /var/lib/apt/lists/*
+# Emulator and cross compilers
+RUN apt-get update && apt-get install -y \
+        qemu \
+        gcc-aarch64-linux-gnu       gcc-arm-linux-gnueabi     \
+        gcc-mips-linux-gnu          gcc-mips64-linux-gnuabi64 \
+        gcc-mips64el-linux-gnuabi64 gcc-mipsel-linux-gnu      \
+        gcc-powerpc64-linux-gnu     gcc-powerpc64le-linux-gnu \
+        gcc-s390x-linux-gnu         gcc-sparc64-linux-gnu     \
+    && rm -rf /var/lib/apt/lists/*
+
+# Let the scripts know they are in the docker environment
+ENV GOLANG_SYS_BUILD docker
+WORKDIR /build
+ENTRYPOINT ["go", "run", "linux/mkall.go", "/git/linux", "/git/glibc"]
diff --git a/vendor/golang.org/x/sys/unix/linux/mkall.go b/vendor/golang.org/x/sys/unix/linux/mkall.go
new file mode 100644 (file)
index 0000000..429754f
--- /dev/null
@@ -0,0 +1,379 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// linux/mkall.go - Generates all Linux zsysnum, zsyscall, zerror, and ztype
+// files for all 11 linux architectures supported by the go compiler. See
+// README.md for more information about the build system.
+
+// To run it you must have a git checkout of the Linux kernel and glibc. Once
+// the appropriate sources are ready, the program is run as:
+//     go run linux/mkall.go <linux_dir> <glibc_dir>
+
+// +build ignore
+
+package main
+
+import (
+       "fmt"
+       "os"
+       "os/exec"
+       "path/filepath"
+       "runtime"
+       "strings"
+)
+
+// These will be paths to the appropriate source directories.
+var LinuxDir string
+var GlibcDir string
+
+const TempDir = "/tmp"
+const IncludeDir = TempDir + "/include" // To hold our C headers
+const BuildDir = TempDir + "/build"     // To hold intermediate build files
+
+const GOOS = "linux"       // Only for Linux targets
+const BuildArch = "amd64"  // Must be built on this architecture
+const MinKernel = "2.6.23" // https://golang.org/doc/install#requirements
+
+type target struct {
+       GoArch     string // Architecture name according to Go
+       LinuxArch  string // Architecture name according to the Linux Kernel
+       GNUArch    string // Architecture name according to GNU tools (https://wiki.debian.org/Multiarch/Tuples)
+       BigEndian  bool   // Default Little Endian
+       SignedChar bool   // Is -fsigned-char needed (default no)
+       Bits       int
+}
+
+// List of the 11 Linux targets supported by the go compiler. sparc64 is not
+// currently supported, though a port is in progress.
+var targets = []target{
+       {
+               GoArch:    "386",
+               LinuxArch: "x86",
+               GNUArch:   "i686-linux-gnu", // Note "i686" not "i386"
+               Bits:      32,
+       },
+       {
+               GoArch:    "amd64",
+               LinuxArch: "x86",
+               GNUArch:   "x86_64-linux-gnu",
+               Bits:      64,
+       },
+       {
+               GoArch:     "arm64",
+               LinuxArch:  "arm64",
+               GNUArch:    "aarch64-linux-gnu",
+               SignedChar: true,
+               Bits:       64,
+       },
+       {
+               GoArch:    "arm",
+               LinuxArch: "arm",
+               GNUArch:   "arm-linux-gnueabi",
+               Bits:      32,
+       },
+       {
+               GoArch:    "mips",
+               LinuxArch: "mips",
+               GNUArch:   "mips-linux-gnu",
+               BigEndian: true,
+               Bits:      32,
+       },
+       {
+               GoArch:    "mipsle",
+               LinuxArch: "mips",
+               GNUArch:   "mipsel-linux-gnu",
+               Bits:      32,
+       },
+       {
+               GoArch:    "mips64",
+               LinuxArch: "mips",
+               GNUArch:   "mips64-linux-gnuabi64",
+               BigEndian: true,
+               Bits:      64,
+       },
+       {
+               GoArch:    "mips64le",
+               LinuxArch: "mips",
+               GNUArch:   "mips64el-linux-gnuabi64",
+               Bits:      64,
+       },
+       {
+               GoArch:    "ppc64",
+               LinuxArch: "powerpc",
+               GNUArch:   "powerpc64-linux-gnu",
+               BigEndian: true,
+               Bits:      64,
+       },
+       {
+               GoArch:    "ppc64le",
+               LinuxArch: "powerpc",
+               GNUArch:   "powerpc64le-linux-gnu",
+               Bits:      64,
+       },
+       {
+               GoArch:     "s390x",
+               LinuxArch:  "s390",
+               GNUArch:    "s390x-linux-gnu",
+               BigEndian:  true,
+               SignedChar: true,
+               Bits:       64,
+       },
+       // {
+       //      GoArch:    "sparc64",
+       //      LinuxArch: "sparc",
+       //      GNUArch:   "sparc64-linux-gnu",
+       //      BigEndian: true,
+       //      Bits:      64,
+       // },
+}
+
+func main() {
+       if runtime.GOOS != GOOS || runtime.GOARCH != BuildArch {
+               fmt.Printf("Build system has GOOS_GOARCH = %s_%s, need %s_%s\n",
+                       runtime.GOOS, runtime.GOARCH, GOOS, BuildArch)
+               return
+       }
+
+       // Check that we are using the new build system if we should
+       if os.Getenv("GOLANG_SYS_BUILD") != "docker" {
+               fmt.Println("In the new build system, mkall.go should not be called directly.")
+               fmt.Println("See README.md")
+               return
+       }
+
+       // Parse the command line options
+       if len(os.Args) != 3 {
+               fmt.Println("USAGE: go run linux/mkall.go <linux_dir> <glibc_dir>")
+               return
+       }
+       LinuxDir = os.Args[1]
+       GlibcDir = os.Args[2]
+
+       for _, t := range targets {
+               fmt.Printf("----- GENERATING: %s -----\n", t.GoArch)
+               if err := t.generateFiles(); err != nil {
+                       fmt.Printf("%v\n***** FAILURE:    %s *****\n\n", err, t.GoArch)
+               } else {
+                       fmt.Printf("----- SUCCESS:    %s -----\n\n", t.GoArch)
+               }
+       }
+}
+
+// Makes an exec.Cmd with Stderr attached to os.Stderr
+func makeCommand(name string, args ...string) *exec.Cmd {
+       cmd := exec.Command(name, args...)
+       cmd.Stderr = os.Stderr
+       return cmd
+}
+
+// Runs the command, pipes output to a formatter, pipes that to an output file.
+func (t *target) commandFormatOutput(formatter string, outputFile string,
+       name string, args ...string) (err error) {
+       mainCmd := makeCommand(name, args...)
+
+       fmtCmd := makeCommand(formatter)
+       if formatter == "mkpost" {
+               fmtCmd = makeCommand("go", "run", "mkpost.go")
+               // Set GOARCH_TARGET so mkpost knows what GOARCH is..
+               fmtCmd.Env = append(os.Environ(), "GOARCH_TARGET="+t.GoArch)
+               // Set GOARCH to host arch for mkpost, so it can run natively.
+               for i, s := range fmtCmd.Env {
+                       if strings.HasPrefix(s, "GOARCH=") {
+                               fmtCmd.Env[i] = "GOARCH=" + BuildArch
+                       }
+               }
+       }
+
+       // mainCmd | fmtCmd > outputFile
+       if fmtCmd.Stdin, err = mainCmd.StdoutPipe(); err != nil {
+               return
+       }
+       if fmtCmd.Stdout, err = os.Create(outputFile); err != nil {
+               return
+       }
+
+       // Make sure the formatter eventually closes
+       if err = fmtCmd.Start(); err != nil {
+               return
+       }
+       defer func() {
+               fmtErr := fmtCmd.Wait()
+               if err == nil {
+                       err = fmtErr
+               }
+       }()
+
+       return mainCmd.Run()
+}
+
+// Generates all the files for a Linux target
+func (t *target) generateFiles() error {
+       // Setup environment variables
+       os.Setenv("GOOS", GOOS)
+       os.Setenv("GOARCH", t.GoArch)
+
+       // Get appropriate compiler and emulator (unless on x86)
+       if t.LinuxArch != "x86" {
+               // Check/Setup cross compiler
+               compiler := t.GNUArch + "-gcc"
+               if _, err := exec.LookPath(compiler); err != nil {
+                       return err
+               }
+               os.Setenv("CC", compiler)
+
+               // Check/Setup emulator (usually first component of GNUArch)
+               qemuArchName := t.GNUArch[:strings.Index(t.GNUArch, "-")]
+               if t.LinuxArch == "powerpc" {
+                       qemuArchName = t.GoArch
+               }
+               os.Setenv("GORUN", "qemu-"+qemuArchName)
+       } else {
+               os.Setenv("CC", "gcc")
+       }
+
+       // Make the include directory and fill it with headers
+       if err := os.MkdirAll(IncludeDir, os.ModePerm); err != nil {
+               return err
+       }
+       defer os.RemoveAll(IncludeDir)
+       if err := t.makeHeaders(); err != nil {
+               return fmt.Errorf("could not make header files: %v", err)
+       }
+       fmt.Println("header files generated")
+
+       // Make each of the four files
+       if err := t.makeZSysnumFile(); err != nil {
+               return fmt.Errorf("could not make zsysnum file: %v", err)
+       }
+       fmt.Println("zsysnum file generated")
+
+       if err := t.makeZSyscallFile(); err != nil {
+               return fmt.Errorf("could not make zsyscall file: %v", err)
+       }
+       fmt.Println("zsyscall file generated")
+
+       if err := t.makeZTypesFile(); err != nil {
+               return fmt.Errorf("could not make ztypes file: %v", err)
+       }
+       fmt.Println("ztypes file generated")
+
+       if err := t.makeZErrorsFile(); err != nil {
+               return fmt.Errorf("could not make zerrors file: %v", err)
+       }
+       fmt.Println("zerrors file generated")
+
+       return nil
+}
+
+// Create the Linux and glibc headers in the include directory.
+func (t *target) makeHeaders() error {
+       // Make the Linux headers we need for this architecture
+       linuxMake := makeCommand("make", "headers_install", "ARCH="+t.LinuxArch, "INSTALL_HDR_PATH="+TempDir)
+       linuxMake.Dir = LinuxDir
+       if err := linuxMake.Run(); err != nil {
+               return err
+       }
+
+       // A Temporary build directory for glibc
+       if err := os.MkdirAll(BuildDir, os.ModePerm); err != nil {
+               return err
+       }
+       defer os.RemoveAll(BuildDir)
+
+       // Make the glibc headers we need for this architecture
+       confScript := filepath.Join(GlibcDir, "configure")
+       glibcConf := makeCommand(confScript, "--prefix="+TempDir, "--host="+t.GNUArch, "--enable-kernel="+MinKernel)
+       glibcConf.Dir = BuildDir
+       if err := glibcConf.Run(); err != nil {
+               return err
+       }
+       glibcMake := makeCommand("make", "install-headers")
+       glibcMake.Dir = BuildDir
+       if err := glibcMake.Run(); err != nil {
+               return err
+       }
+       // We only need an empty stubs file
+       stubsFile := filepath.Join(IncludeDir, "gnu/stubs.h")
+       if file, err := os.Create(stubsFile); err != nil {
+               return err
+       } else {
+               file.Close()
+       }
+
+       return nil
+}
+
+// makes the zsysnum_linux_$GOARCH.go file
+func (t *target) makeZSysnumFile() error {
+       zsysnumFile := fmt.Sprintf("zsysnum_linux_%s.go", t.GoArch)
+       unistdFile := filepath.Join(IncludeDir, "asm/unistd.h")
+
+       args := append(t.cFlags(), unistdFile)
+       return t.commandFormatOutput("gofmt", zsysnumFile, "linux/mksysnum.pl", args...)
+}
+
+// makes the zsyscall_linux_$GOARCH.go file
+func (t *target) makeZSyscallFile() error {
+       zsyscallFile := fmt.Sprintf("zsyscall_linux_%s.go", t.GoArch)
+       // Find the correct architecture syscall file (might end with x.go)
+       archSyscallFile := fmt.Sprintf("syscall_linux_%s.go", t.GoArch)
+       if _, err := os.Stat(archSyscallFile); os.IsNotExist(err) {
+               shortArch := strings.TrimSuffix(t.GoArch, "le")
+               archSyscallFile = fmt.Sprintf("syscall_linux_%sx.go", shortArch)
+       }
+
+       args := append(t.mksyscallFlags(), "-tags", "linux,"+t.GoArch,
+               "syscall_linux.go", archSyscallFile)
+       return t.commandFormatOutput("gofmt", zsyscallFile, "./mksyscall.pl", args...)
+}
+
+// makes the zerrors_linux_$GOARCH.go file
+func (t *target) makeZErrorsFile() error {
+       zerrorsFile := fmt.Sprintf("zerrors_linux_%s.go", t.GoArch)
+
+       return t.commandFormatOutput("gofmt", zerrorsFile, "./mkerrors.sh", t.cFlags()...)
+}
+
+// makes the ztypes_linux_$GOARCH.go file
+func (t *target) makeZTypesFile() error {
+       ztypesFile := fmt.Sprintf("ztypes_linux_%s.go", t.GoArch)
+
+       args := []string{"tool", "cgo", "-godefs", "--"}
+       args = append(args, t.cFlags()...)
+       args = append(args, "linux/types.go")
+       return t.commandFormatOutput("mkpost", ztypesFile, "go", args...)
+}
+
+// Flags that should be given to gcc and cgo for this target
+func (t *target) cFlags() []string {
+       // Compile statically to avoid cross-architecture dynamic linking.
+       flags := []string{"-Wall", "-Werror", "-static", "-I" + IncludeDir}
+
+       // Architecture-specific flags
+       if t.SignedChar {
+               flags = append(flags, "-fsigned-char")
+       }
+       if t.LinuxArch == "x86" {
+               flags = append(flags, fmt.Sprintf("-m%d", t.Bits))
+       }
+
+       return flags
+}
+
+// Flags that should be given to mksyscall for this target
+func (t *target) mksyscallFlags() (flags []string) {
+       if t.Bits == 32 {
+               if t.BigEndian {
+                       flags = append(flags, "-b32")
+               } else {
+                       flags = append(flags, "-l32")
+               }
+       }
+
+       // This flag menas a 64-bit value should use (even, odd)-pair.
+       if t.GoArch == "arm" || (t.LinuxArch == "mips" && t.Bits == 32) {
+               flags = append(flags, "-arm")
+       }
+       return
+}
similarity index 78%
rename from vendor/golang.org/x/sys/unix/mksysnum_linux.pl
rename to vendor/golang.org/x/sys/unix/linux/mksysnum.pl
index 872ae8c..63fd800 100755 (executable)
@@ -10,11 +10,18 @@ if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
        exit 1;
 }
 
-my $command = "mksysnum_linux.pl ". join(' ', @ARGV);
+# Check that we are using the new build system if we should
+if($ENV{'GOLANG_SYS_BUILD'} ne "docker") {
+       print STDERR "In the new build system, mksysnum should not be called directly.\n";
+       print STDERR "See README.md\n";
+       exit 1;
+}
+
+my $command = "$0 ". join(' ', @ARGV);
 
 print <<EOF;
 // $command
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build $ENV{'GOARCH'},$ENV{'GOOS'}
 
@@ -38,8 +45,8 @@ sub fmt {
 }
 
 my $prev;
-open(GCC, "gcc -E -dD @ARGV |") || die "can't run gcc";
-while(<GCC>){
+open(CC, "$ENV{'CC'} -E -dD @ARGV |") || die "can't run $ENV{'CC'}";
+while(<CC>){
        if(/^#define __NR_Linux\s+([0-9]+)/){
                # mips/mips64: extract offset
                $offset = $1;
similarity index 85%
rename from vendor/golang.org/x/sys/unix/types_linux.go
rename to vendor/golang.org/x/sys/unix/linux/types.go
index a08f7fb..d3bf24a 100644 (file)
@@ -5,7 +5,7 @@
 // +build ignore
 
 /*
-Input to cgo -godefs.  See also mkerrors.sh and mkall.sh
+Input to cgo -godefs.  See README.md
 */
 
 // +godefs map struct_in_addr [4]byte /* in_addr */
@@ -20,7 +20,6 @@ package unix
 #define _GNU_SOURCE
 
 #include <dirent.h>
-#include <fcntl.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
 #include <netpacket/packet.h>
@@ -36,13 +35,11 @@ package unix
 #include <sys/resource.h>
 #include <sys/select.h>
 #include <sys/signal.h>
-#include <sys/stat.h>
 #include <sys/statfs.h>
 #include <sys/sysinfo.h>
 #include <sys/time.h>
 #include <sys/times.h>
 #include <sys/timex.h>
-#include <sys/types.h>
 #include <sys/un.h>
 #include <sys/user.h>
 #include <sys/utsname.h>
@@ -52,14 +49,72 @@ package unix
 #include <linux/rtnetlink.h>
 #include <linux/icmpv6.h>
 #include <asm/termbits.h>
+#include <asm/ptrace.h>
 #include <time.h>
 #include <unistd.h>
 #include <ustat.h>
 #include <utime.h>
-#include <bluetooth/bluetooth.h>
-#include <bluetooth/hci.h>
 #include <linux/can.h>
 #include <linux/if_alg.h>
+#include <linux/fs.h>
+#include <linux/vm_sockets.h>
+
+// On mips64, the glibc stat and kernel stat do not agree
+#if (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64)
+
+// Use the stat defined by the kernel with a few modifications. These are:
+//     * The time fields (like st_atime and st_atimensec) use the timespec
+//       struct (like st_atim) for consitancy with the glibc fields.
+//     * The padding fields get different names to not break compatibility.
+//     * st_blocks is signed, again for compatibility.
+struct stat {
+       unsigned int            st_dev;
+       unsigned int            st_pad1[3]; // Reserved for st_dev expansion
+
+       unsigned long           st_ino;
+
+       mode_t                  st_mode;
+       __u32                   st_nlink;
+
+       uid_t                   st_uid;
+       gid_t                   st_gid;
+
+       unsigned int            st_rdev;
+       unsigned int            st_pad2[3]; // Reserved for st_rdev expansion
+
+       off_t                   st_size;
+
+       // These are declared as speperate fields in the kernel. Here we use
+       // the timespec struct for consistancy with the other stat structs.
+       struct timespec         st_atim;
+       struct timespec         st_mtim;
+       struct timespec         st_ctim;
+
+       unsigned int            st_blksize;
+       unsigned int            st_pad4;
+
+       long                    st_blocks;
+};
+
+// These are needed because we do not include fcntl.h or sys/types.h
+#include <linux/fcntl.h>
+#include <linux/fadvise.h>
+
+#else
+
+// Use the stat defined by glibc
+#include <fcntl.h>
+#include <sys/types.h>
+
+#endif
+
+// Certain constants and structs are missing from the fs/crypto UAPI
+#define FS_MAX_KEY_SIZE                 64
+struct fscrypt_key {
+  __u32 mode;
+  __u8 raw[FS_MAX_KEY_SIZE];
+  __u32 size;
+};
 
 #ifdef TCSETS2
 // On systems that have "struct termios2" use this as type Termios.
@@ -86,6 +141,13 @@ struct sockaddr_any {
        char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];
 };
 
+// copied from /usr/include/bluetooth/hci.h
+struct sockaddr_hci {
+        sa_family_t     hci_family;
+        unsigned short  hci_dev;
+        unsigned short  hci_channel;
+};;
+
 // copied from /usr/include/linux/un.h
 struct my_sockaddr_un {
        sa_family_t sun_family;
@@ -195,6 +257,12 @@ type Fsid C.fsid_t
 
 type Flock_t C.struct_flock
 
+// Filesystem Encryption
+
+type FscryptPolicy C.struct_fscrypt_policy
+
+type FscryptKey C.struct_fscrypt_key
+
 // Advice to Fadvise
 
 const (
@@ -224,6 +292,8 @@ type RawSockaddrCAN C.struct_sockaddr_can
 
 type RawSockaddrALG C.struct_sockaddr_alg
 
+type RawSockaddrVM C.struct_sockaddr_vm
+
 type RawSockaddr C.struct_sockaddr
 
 type RawSockaddrAny C.struct_sockaddr_any
@@ -266,6 +336,7 @@ const (
        SizeofSockaddrHCI       = C.sizeof_struct_sockaddr_hci
        SizeofSockaddrCAN       = C.sizeof_struct_sockaddr_can
        SizeofSockaddrALG       = C.sizeof_struct_sockaddr_alg
+       SizeofSockaddrVM        = C.sizeof_struct_sockaddr_vm
        SizeofLinger            = C.sizeof_struct_linger
        SizeofIPMreq            = C.sizeof_struct_ip_mreq
        SizeofIPMreqn           = C.sizeof_struct_ip_mreqn
@@ -417,11 +488,11 @@ const SizeofInotifyEvent = C.sizeof_struct_inotify_event
 type PtraceRegs C.PtraceRegs
 
 // Structures contained in PtraceRegs on s390x (exported by mkpost.go)
-type ptracePsw C.ptracePsw
+type PtracePsw C.ptracePsw
 
-type ptraceFpregs C.ptraceFpregs
+type PtraceFpregs C.ptraceFpregs
 
-type ptracePer C.ptracePer
+type PtracePer C.ptracePer
 
 // Misc
 
index c1fc2ad..f0d6566 100755 (executable)
@@ -3,75 +3,9 @@
 # Use of this source code is governed by a BSD-style
 # license that can be found in the LICENSE file.
 
-# The unix package provides access to the raw system call
-# interface of the underlying operating system.  Porting Go to
-# a new architecture/operating system combination requires
-# some manual effort, though there are tools that automate
-# much of the process.  The auto-generated files have names
-# beginning with z.
-#
-# This script runs or (given -n) prints suggested commands to generate z files
-# for the current system.  Running those commands is not automatic.
-# This script is documentation more than anything else.
-#
-# * asm_${GOOS}_${GOARCH}.s
-#
-# This hand-written assembly file implements system call dispatch.
-# There are three entry points:
-#
-#      func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr);
-#      func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
-#      func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr);
-#
-# The first and second are the standard ones; they differ only in
-# how many arguments can be passed to the kernel.
-# The third is for low-level use by the ForkExec wrapper;
-# unlike the first two, it does not call into the scheduler to
-# let it know that a system call is running.
-#
-# * syscall_${GOOS}.go
-#
-# This hand-written Go file implements system calls that need
-# special handling and lists "//sys" comments giving prototypes
-# for ones that can be auto-generated.  Mksyscall reads those
-# comments to generate the stubs.
-#
-# * syscall_${GOOS}_${GOARCH}.go
-#
-# Same as syscall_${GOOS}.go except that it contains code specific
-# to ${GOOS} on one particular architecture.
-#
-# * types_${GOOS}.c
-#
-# This hand-written C file includes standard C headers and then
-# creates typedef or enum names beginning with a dollar sign
-# (use of $ in variable names is a gcc extension).  The hardest
-# part about preparing this file is figuring out which headers to
-# include and which symbols need to be #defined to get the
-# actual data structures that pass through to the kernel system calls.
-# Some C libraries present alternate versions for binary compatibility
-# and translate them on the way in and out of system calls, but
-# there is almost always a #define that can get the real ones.
-# See types_darwin.c and types_linux.c for examples.
-#
-# * zerror_${GOOS}_${GOARCH}.go
-#
-# This machine-generated file defines the system's error numbers,
-# error strings, and signal numbers.  The generator is "mkerrors.sh".
-# Usually no arguments are needed, but mkerrors.sh will pass its
-# arguments on to godefs.
-#
-# * zsyscall_${GOOS}_${GOARCH}.go
-#
-# Generated by mksyscall.pl; see syscall_${GOOS}.go above.
-#
-# * zsysnum_${GOOS}_${GOARCH}.go
-#
-# Generated by mksysnum_${GOOS}.
-#
-# * ztypes_${GOOS}_${GOARCH}.go
-#
-# Generated by godefs; see types_${GOOS}.c above.
+# This script runs or (given -n) prints suggested commands to generate files for
+# the Architecture/OS specified by the GOARCH and GOOS environment variables.
+# See README.md for more information about how the build system works.
 
 GOOSARCH="${GOOS}_${GOARCH}"
 
@@ -84,6 +18,7 @@ zsysctl="zsysctl_$GOOSARCH.go"
 mksysnum=
 mktypes=
 run="sh"
+cmd=""
 
 case "$1" in
 -syscalls)
@@ -98,6 +33,7 @@ case "$1" in
        ;;
 -n)
        run="cat"
+       cmd="echo"
        shift
 esac
 
@@ -109,6 +45,14 @@ case "$#" in
        exit 2
 esac
 
+if [[ "$GOOS" = "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then
+       # Use then new build system
+       # Files generated through docker (use $cmd so you can Ctl-C the build or run)
+       $cmd docker build --tag generate:$GOOS $GOOS
+       $cmd docker run --interactive --tty --volume $(dirname "$(readlink -f "$0")"):/build generate:$GOOS
+       exit
+fi
+
 GOOSARCH_in=syscall_$GOOSARCH.go
 case "$GOOSARCH" in
 _* | *_ | _)
@@ -167,64 +111,6 @@ freebsd_arm)
        # API consistent across over platforms.
        mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
        ;;
-linux_386)
-       mkerrors="$mkerrors -m32"
-       mksyscall="./mksyscall.pl -l32"
-       mksysnum="./mksysnum_linux.pl /usr/include/asm/unistd_32.h"
-       mktypes="GOARCH=$GOARCH go tool cgo -godefs"
-       ;;
-linux_amd64)
-       unistd_h=$(ls -1 /usr/include/asm/unistd_64.h /usr/include/x86_64-linux-gnu/asm/unistd_64.h 2>/dev/null | head -1)
-       if [ "$unistd_h" = "" ]; then
-               echo >&2 cannot find unistd_64.h
-               exit 1
-       fi
-       mkerrors="$mkerrors -m64"
-       mksysnum="./mksysnum_linux.pl $unistd_h"
-       mktypes="GOARCH=$GOARCH go tool cgo -godefs"
-       ;;
-linux_arm)
-       mkerrors="$mkerrors"
-       mksyscall="./mksyscall.pl -l32 -arm"
-       mksysnum="curl -s 'http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/arch/arm/include/uapi/asm/unistd.h' | ./mksysnum_linux.pl -"
-       mktypes="GOARCH=$GOARCH go tool cgo -godefs"
-       ;;
-linux_arm64)
-       unistd_h=$(ls -1 /usr/include/asm/unistd.h /usr/include/asm-generic/unistd.h 2>/dev/null | head -1)
-       if [ "$unistd_h" = "" ]; then
-               echo >&2 cannot find unistd_64.h
-               exit 1
-       fi
-       mksysnum="./mksysnum_linux.pl $unistd_h"
-       # Let the type of C char be signed for making the bare syscall
-       # API consistent across over platforms.
-       mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
-       ;;
-linux_ppc64)
-       GOOSARCH_in=syscall_linux_ppc64x.go
-       unistd_h=/usr/include/asm/unistd.h
-       mkerrors="$mkerrors -m64"
-       mksysnum="./mksysnum_linux.pl $unistd_h"
-       mktypes="GOARCH=$GOARCH go tool cgo -godefs"
-       ;;
-linux_ppc64le)
-       GOOSARCH_in=syscall_linux_ppc64x.go
-       unistd_h=/usr/include/powerpc64le-linux-gnu/asm/unistd.h
-       mkerrors="$mkerrors -m64"
-       mksysnum="./mksysnum_linux.pl $unistd_h"
-       mktypes="GOARCH=$GOARCH go tool cgo -godefs"
-       ;;
-linux_s390x)
-       GOOSARCH_in=syscall_linux_s390x.go
-       unistd_h=/usr/include/asm/unistd.h
-       mkerrors="$mkerrors -m64"
-       mksysnum="./mksysnum_linux.pl $unistd_h"
-       # Let the type of C char be signed to make the bare sys
-       # API more consistent between platforms.
-       # This is a deliberate departure from the way the syscall
-       # package generates its version of the types file.
-       mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
-       ;;
 linux_sparc64)
        GOOSARCH_in=syscall_linux_sparc64.go
        unistd_h=/usr/include/sparc64-linux-gnu/asm/unistd.h
@@ -288,7 +174,6 @@ esac
        if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
        if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
        if [ -n "$mktypes" ]; then
-               echo "echo // +build $GOARCH,$GOOS > ztypes_$GOOSARCH.go";
-               echo "$mktypes types_$GOOS.go | go run mkpost.go >>ztypes_$GOOSARCH.go";
+               echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go";
        fi
 ) | $run
index bbc6d19..1bd1c9e 100755 (executable)
@@ -16,6 +16,15 @@ if test -z "$GOARCH" -o -z "$GOOS"; then
        exit 1
 fi
 
+# Check that we are using the new build system if we should
+if [[ "$GOOS" -eq "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then
+       if [[ "$GOLANG_SYS_BUILD" -ne "docker" ]]; then
+               echo 1>&2 "In the new build system, mkerrors should not be called directly."
+               echo 1>&2 "See README.md"
+               exit 1
+       fi
+fi
+
 CC=${CC:-cc}
 
 if [[ "$GOOS" -eq "solaris" ]]; then
@@ -102,6 +111,36 @@ includes_Linux='
 #endif
 #define _GNU_SOURCE
 
+// <sys/ioctl.h> is broken on powerpc64, as it fails to include definitions of
+// these structures. We just include them copied from <bits/termios.h>.
+#if defined(__powerpc__)
+struct sgttyb {
+        char    sg_ispeed;
+        char    sg_ospeed;
+        char    sg_erase;
+        char    sg_kill;
+        short   sg_flags;
+};
+
+struct tchars {
+        char    t_intrc;
+        char    t_quitc;
+        char    t_startc;
+        char    t_stopc;
+        char    t_eofc;
+        char    t_brkc;
+};
+
+struct ltchars {
+        char    t_suspc;
+        char    t_dsuspc;
+        char    t_rprntc;
+        char    t_flushc;
+        char    t_werasc;
+        char    t_lnextc;
+};
+#endif
+
 #include <bits/sockaddr.h>
 #include <sys/epoll.h>
 #include <sys/inotify.h>
@@ -122,6 +161,7 @@ includes_Linux='
 #include <linux/if_addr.h>
 #include <linux/falloc.h>
 #include <linux/filter.h>
+#include <linux/fs.h>
 #include <linux/netlink.h>
 #include <linux/random.h>
 #include <linux/reboot.h>
@@ -132,6 +172,7 @@ includes_Linux='
 #include <linux/icmpv6.h>
 #include <linux/serial.h>
 #include <linux/can.h>
+#include <linux/vm_sockets.h>
 #include <net/route.h>
 #include <asm/termbits.h>
 
@@ -156,6 +197,11 @@ includes_Linux='
 // but it is already in bluetooth_linux.go
 #undef SOL_BLUETOOTH
 #endif
+
+// Certain constants are missing from the fs/crypto UAPI
+#define FS_KEY_DESC_PREFIX              "fscrypt:"
+#define FS_KEY_DESC_PREFIX_SIZE         8
+#define FS_MAX_KEY_SIZE                 64
 '
 
 includes_NetBSD='
@@ -350,11 +396,13 @@ ccflags="$@"
                $2 ~ /^CLOCK_/ ||
                $2 ~ /^CAN_/ ||
                $2 ~ /^ALG_/ ||
+               $2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE|IOC_(GET|SET)_ENCRYPTION)/ ||
                $2 ~ /^GRND_/ ||
                $2 ~ /^SPLICE_/ ||
+               $2 ~ /^(VM|VMADDR)_/ ||
                $2 !~ "WMESGLEN" &&
                $2 ~ /^W[A-Z0-9]+$/ ||
-               $2 ~ /^BLK/ {printf("\t%s = C.%s\n", $2, $2)}
+               $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)}
                $2 ~ /^__WCOREFLAG$/ {next}
                $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}
 
@@ -389,7 +437,7 @@ echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
        sort >_signal.grep
 
 echo '// mkerrors.sh' "$@"
-echo '// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT'
+echo '// Code generated by the command above; see README.md. DO NOT EDIT.'
 echo
 echo "// +build ${GOARCH},${GOOS}"
 echo
@@ -451,7 +499,7 @@ intcmp(const void *a, const void *b)
 int
 main(void)
 {
-       int i, j, e;
+       int i, e;
        char buf[1024], *p;
 
        printf("\n\n// Error table\n");
index ed50d90..d3ff659 100644 (file)
@@ -8,10 +8,11 @@
 // modify the generated types. It is used to clean up
 // the sys API in an architecture specific manner.
 //
-// mkpost is run after cgo -godefs by mkall.sh.
+// mkpost is run after cgo -godefs; see README.md.
 package main
 
 import (
+       "bytes"
        "fmt"
        "go/format"
        "io/ioutil"
@@ -21,42 +22,67 @@ import (
 )
 
 func main() {
+       // Get the OS and architecture (using GOARCH_TARGET if it exists)
+       goos := os.Getenv("GOOS")
+       goarch := os.Getenv("GOARCH_TARGET")
+       if goarch == "" {
+               goarch = os.Getenv("GOARCH")
+       }
+       // Check that we are using the new build system if we should be.
+       if goos == "linux" && goarch != "sparc64" {
+               if os.Getenv("GOLANG_SYS_BUILD") != "docker" {
+                       os.Stderr.WriteString("In the new build system, mkpost should not be called directly.\n")
+                       os.Stderr.WriteString("See README.md\n")
+                       os.Exit(1)
+               }
+       }
+
        b, err := ioutil.ReadAll(os.Stdin)
        if err != nil {
                log.Fatal(err)
        }
-       s := string(b)
 
-       goarch := os.Getenv("GOARCH")
-       goos := os.Getenv("GOOS")
-       if goarch == "s390x" && goos == "linux" {
-               // Export the types of PtraceRegs fields.
-               re := regexp.MustCompile("ptrace(Psw|Fpregs|Per)")
-               s = re.ReplaceAllString(s, "Ptrace$1")
+       // If we have empty Ptrace structs, we should delete them. Only s390x emits
+       // nonempty Ptrace structs.
+       ptraceRexexp := regexp.MustCompile(`type Ptrace((Psw|Fpregs|Per) struct {\s*})`)
+       b = ptraceRexexp.ReplaceAll(b, nil)
 
-               // Replace padding fields inserted by cgo with blank identifiers.
-               re = regexp.MustCompile("Pad_cgo[A-Za-z0-9_]*")
-               s = re.ReplaceAllString(s, "_")
+       // Replace the control_regs union with a blank identifier for now.
+       controlRegsRegex := regexp.MustCompile(`(Control_regs)\s+\[0\]uint64`)
+       b = controlRegsRegex.ReplaceAll(b, []byte("_ [0]uint64"))
 
-               // Replace other unwanted fields with blank identifiers.
-               re = regexp.MustCompile("X_[A-Za-z0-9_]*")
-               s = re.ReplaceAllString(s, "_")
+       // Remove fields that are added by glibc
+       // Note that this is unstable as the identifers are private.
+       removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`)
+       b = removeFieldsRegex.ReplaceAll(b, []byte("_"))
 
-               // Replace the control_regs union with a blank identifier for now.
-               re = regexp.MustCompile("(Control_regs)\\s+\\[0\\]uint64")
-               s = re.ReplaceAllString(s, "_ [0]uint64")
+       // We refuse to export private fields on s390x
+       if goarch == "s390x" && goos == "linux" {
+               // Remove cgo padding fields
+               removeFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`)
+               b = removeFieldsRegex.ReplaceAll(b, []byte("_"))
+
+               // Remove padding, hidden, or unused fields
+               removeFieldsRegex = regexp.MustCompile(`X_\S+`)
+               b = removeFieldsRegex.ReplaceAll(b, []byte("_"))
        }
 
+       // Remove the first line of warning from cgo
+       b = b[bytes.IndexByte(b, '\n')+1:]
+       // Modify the command in the header to include:
+       //  mkpost, our own warning, and a build tag.
+       replacement := fmt.Sprintf(`$1 | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build %s,%s`, goarch, goos)
+       cgoCommandRegex := regexp.MustCompile(`(cgo -godefs .*)`)
+       b = cgoCommandRegex.ReplaceAll(b, []byte(replacement))
+
        // gofmt
-       b, err = format.Source([]byte(s))
+       b, err = format.Source(b)
        if err != nil {
                log.Fatal(err)
        }
 
-       // Append this command to the header to show where the new file
-       // came from.
-       re := regexp.MustCompile("(cgo -godefs [a-zA-Z0-9_]+\\.go.*)")
-       b = re.ReplaceAll(b, []byte("$1 | go run mkpost.go"))
-
-       fmt.Printf("%s", b)
+       os.Stdout.Write(b)
 }
index 34f8ef8..fb929b4 100755 (executable)
@@ -69,6 +69,16 @@ if($ARGV[0] =~ /^-/) {
        exit 1;
 }
 
+# Check that we are using the new build system if we should
+if($ENV{'GOOS'} eq "linux" && $ENV{'GOARCH'} ne "sparc64") {
+       if($ENV{'GOLANG_SYS_BUILD'} ne "docker") {
+               print STDERR "In the new build system, mksyscall should not be called directly.\n";
+               print STDERR "See README.md\n";
+               exit 1;
+       }
+}
+
+
 sub parseparamlist($) {
        my ($list) = @_;
        $list =~ s/^\s*//;
@@ -300,7 +310,7 @@ if($errors) {
 
 print <<EOF;
 // $cmdline
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build $tags
 
index 939c8a7..3e6ed9d 100755 (executable)
@@ -258,7 +258,7 @@ if($errors) {
 
 print <<EOF;
 // $cmdline
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build $tags
 
index d3e5147..5453c53 100755 (executable)
@@ -16,7 +16,7 @@ my $command = "mksysnum_darwin.pl " . join(' ', @ARGV);
 
 print <<EOF;
 // $command
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build $ENV{'GOARCH'},$ENV{'GOOS'}
 
index 266a248..6804f41 100755 (executable)
@@ -17,7 +17,7 @@ my $command = "mksysnum_dragonfly.pl " . join(' ', @ARGV);
 
 print <<EOF;
 // $command
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build $ENV{'GOARCH'},$ENV{'GOOS'}
 
index b767e12..c83064f 100755 (executable)
@@ -17,7 +17,7 @@ my $command = "mksysnum_freebsd.pl " . join(' ', @ARGV);
 
 print <<EOF;
 // $command
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build $ENV{'GOARCH'},$ENV{'GOOS'}
 
index e74616a..d31f2c4 100755 (executable)
@@ -17,7 +17,7 @@ my $command = "mksysnum_netbsd.pl " . join(' ', @ARGV);
 
 print <<EOF;
 // $command
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build $ENV{'GOARCH'},$ENV{'GOOS'}
 
index ae5aad5..84edf60 100755 (executable)
@@ -17,7 +17,7 @@ my $command = "mksysnum_openbsd.pl " . join(' ', @ARGV);
 
 print <<EOF;
 // $command
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build $ENV{'GOARCH'},$ENV{'GOOS'}
 
diff --git a/vendor/golang.org/x/sys/unix/openbsd_pledge.go b/vendor/golang.org/x/sys/unix/openbsd_pledge.go
new file mode 100644 (file)
index 0000000..db4f72e
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build openbsd
+// +build 386 amd64 arm
+
+package unix
+
+import (
+       "syscall"
+       "unsafe"
+)
+
+const (
+       SYS_PLEDGE = 108
+)
+
+// Pledge implements the pledge syscall. For more information see pledge(2).
+func Pledge(promises string, paths []string) error {
+       promisesPtr, err := syscall.BytePtrFromString(promises)
+       if err != nil {
+               return err
+       }
+       promisesUnsafe, pathsUnsafe := unsafe.Pointer(promisesPtr), unsafe.Pointer(nil)
+       if paths != nil {
+               var pathsPtr []*byte
+               if pathsPtr, err = syscall.SlicePtrFromStrings(paths); err != nil {
+                       return err
+               }
+               pathsUnsafe = unsafe.Pointer(&pathsPtr[0])
+       }
+       _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(promisesUnsafe), uintptr(pathsUnsafe), 0)
+       if e != 0 {
+               return e
+       }
+       return nil
+}
diff --git a/vendor/golang.org/x/sys/unix/openbsd_test.go b/vendor/golang.org/x/sys/unix/openbsd_test.go
new file mode 100644 (file)
index 0000000..734d765
--- /dev/null
@@ -0,0 +1,113 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build openbsd
+
+// This, on the face of it, bizarre testing mechanism is necessary because
+// the only reliable way to gauge whether or not a pledge(2) call has succeeded
+// is that the program has been killed as a result of breaking its pledge.
+
+package unix_test
+
+import (
+       "flag"
+       "fmt"
+       "io/ioutil"
+       "os"
+       "os/exec"
+       "path/filepath"
+       "testing"
+
+       "golang.org/x/sys/unix"
+)
+
+type testProc struct {
+       fn      func()       // should always exit instead of returning
+       cleanup func() error // for instance, delete coredumps from testing pledge
+       success bool         // whether zero-exit means success or failure
+}
+
+var (
+       testProcs = map[string]testProc{}
+       procName  = ""
+)
+
+const (
+       optName = "sys-unix-internal-procname"
+)
+
+func init() {
+       flag.StringVar(&procName, optName, "", "internal use only")
+}
+
+// testCmd generates a proper command that, when executed, runs the test
+// corresponding to the given key.
+func testCmd(procName string) (*exec.Cmd, error) {
+       exe, err := filepath.Abs(os.Args[0])
+       if err != nil {
+               return nil, err
+       }
+       cmd := exec.Command(exe, "-"+optName+"="+procName)
+       cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr
+       return cmd, nil
+}
+
+// ExitsCorrectly is a comprehensive, one-line-of-use wrapper for testing
+// a testProc with a key.
+func ExitsCorrectly(procName string, t *testing.T) {
+       s := testProcs[procName]
+       c, err := testCmd(procName)
+       defer func() {
+               if s.cleanup() != nil {
+                       t.Fatalf("Failed to run cleanup for %s", procName)
+               }
+       }()
+       if err != nil {
+               t.Fatalf("Failed to construct command for %s", procName)
+       }
+       if (c.Run() == nil) != s.success {
+               result := "succeed"
+               if !s.success {
+                       result = "fail"
+               }
+               t.Fatalf("Process did not %s when it was supposed to", result)
+       }
+}
+
+func TestMain(m *testing.M) {
+       flag.Parse()
+       if procName != "" {
+               testProcs[procName].fn()
+       }
+       os.Exit(m.Run())
+}
+
+// For example, add a test for pledge.
+func init() {
+       testProcs["pledge"] = testProc{
+               func() {
+                       fmt.Println(unix.Pledge("", nil))
+                       os.Exit(0)
+               },
+               func() error {
+                       files, err := ioutil.ReadDir(".")
+                       if err != nil {
+                               return err
+                       }
+                       for _, file := range files {
+                               if filepath.Ext(file.Name()) == ".core" {
+                                       if err := os.Remove(file.Name()); err != nil {
+                                               return err
+                                       }
+                               }
+                       }
+                       return nil
+               },
+               false,
+       }
+}
+
+func TestPledge(t *testing.T) {
+       ExitsCorrectly("pledge", t)
+}
index 0d1771c..7d91ac0 100644 (file)
@@ -76,32 +76,16 @@ func nametomib(name string) (mib []_C_int, err error) {
        return buf[0 : n/siz], nil
 }
 
-// ParseDirent parses up to max directory entries in buf,
-// appending the names to names.  It returns the number
-// bytes consumed from buf, the number of entries added
-// to names, and the new names slice.
-func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
-       origlen := len(buf)
-       for max != 0 && len(buf) > 0 {
-               dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
-               if dirent.Reclen == 0 {
-                       buf = nil
-                       break
-               }
-               buf = buf[dirent.Reclen:]
-               if dirent.Ino == 0 { // File absent in directory.
-                       continue
-               }
-               bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
-               var name = string(bytes[0:dirent.Namlen])
-               if name == "." || name == ".." { // Useless names
-                       continue
-               }
-               max--
-               count++
-               names = append(names, name)
-       }
-       return origlen - len(buf), count, names
+func direntIno(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
+}
+
+func direntReclen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
+}
+
+func direntNamlen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
 }
 
 //sys   ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
index fbbe0dc..7e0210f 100644 (file)
@@ -1,8 +1,8 @@
-// Copyright 2009,2010 The Go Authors. All rights reserved.
+// Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// FreeBSD system calls.
+// DragonFly BSD system calls.
 // This file is compiled as ordinary Go code,
 // but it is also input to mksyscall,
 // which parses the //sys lines and generates system call stubs.
@@ -34,7 +34,7 @@ func nametomib(name string) (mib []_C_int, err error) {
 
        // NOTE(rsc): It seems strange to set the buffer to have
        // size CTL_MAXNAME+2 but use only CTL_MAXNAME
-       // as the size.  I don't know why the +2 is here, but the
+       // as the size. I don't know why the +2 is here, but the
        // kernel uses +2 for its own implementation of this function.
        // I am scared that if we don't include the +2 here, the kernel
        // will silently write 2 words farther than we specify
@@ -56,29 +56,20 @@ func nametomib(name string) (mib []_C_int, err error) {
        return buf[0 : n/siz], nil
 }
 
-// ParseDirent parses up to max directory entries in buf,
-// appending the names to names.  It returns the number
-// bytes consumed from buf, the number of entries added
-// to names, and the new names slice.
-func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
-       origlen := len(buf)
-       for max != 0 && len(buf) > 0 {
-               dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
-               reclen := int(16+dirent.Namlen+1+7) & ^7
-               buf = buf[reclen:]
-               if dirent.Fileno == 0 { // File absent in directory.
-                       continue
-               }
-               bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
-               var name = string(bytes[0:dirent.Namlen])
-               if name == "." || name == ".." { // Useless names
-                       continue
-               }
-               max--
-               count++
-               names = append(names, name)
+func direntIno(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
+}
+
+func direntReclen(buf []byte) (uint64, bool) {
+       namlen, ok := direntNamlen(buf)
+       if !ok {
+               return 0, false
        }
-       return origlen - len(buf), count, names
+       return (16 + namlen + 1 + 7) &^ 7, true
+}
+
+func direntNamlen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
 }
 
 //sysnb pipe() (r int, w int, err error)
@@ -101,6 +92,24 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
        return extpwrite(fd, p, 0, offset)
 }
 
+func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
+       var rsa RawSockaddrAny
+       var len _Socklen = SizeofSockaddrAny
+       nfd, err = accept4(fd, &rsa, &len, flags)
+       if err != nil {
+               return
+       }
+       if len > SizeofSockaddrAny {
+               panic("RawSockaddrAny too small")
+       }
+       sa, err = anyToSockaddr(&rsa)
+       if err != nil {
+               Close(nfd)
+               nfd = 0
+       }
+       return
+}
+
 func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
        var _p0 unsafe.Pointer
        var bufsize uintptr
@@ -208,6 +217,7 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
 //sys   munmap(addr uintptr, length uintptr) (err error)
 //sys  readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
 //sys  writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
+//sys  accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)
 
 /*
  * Unimplemented
@@ -243,6 +253,8 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
 // Kdebug_trace
 // Sigreturn
 // Mmap
+// Mlock
+// Munlock
 // Atsocket
 // Kqueue_from_portset_np
 // Kqueue_portset
@@ -335,6 +347,8 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
 // Lio_listio
 // __pthread_cond_wait
 // Iopolicysys
+// Mlockall
+// Munlockall
 // __pthread_kill
 // __pthread_sigmask
 // __sigwait
index ec56ed6..077d1f3 100644 (file)
@@ -54,32 +54,16 @@ func nametomib(name string) (mib []_C_int, err error) {
        return buf[0 : n/siz], nil
 }
 
-// ParseDirent parses up to max directory entries in buf,
-// appending the names to names.  It returns the number
-// bytes consumed from buf, the number of entries added
-// to names, and the new names slice.
-func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
-       origlen := len(buf)
-       for max != 0 && len(buf) > 0 {
-               dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
-               if dirent.Reclen == 0 {
-                       buf = nil
-                       break
-               }
-               buf = buf[dirent.Reclen:]
-               if dirent.Fileno == 0 { // File absent in directory.
-                       continue
-               }
-               bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
-               var name = string(bytes[0:dirent.Namlen])
-               if name == "." || name == ".." { // Useless names
-                       continue
-               }
-               max--
-               count++
-               names = append(names, name)
-       }
-       return origlen - len(buf), count, names
+func direntIno(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
+}
+
+func direntReclen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
+}
+
+func direntNamlen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
 }
 
 //sysnb pipe() (r int, w int, err error)
index c011947..9737e08 100644 (file)
@@ -551,6 +551,28 @@ func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) {
        return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil
 }
 
+// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.
+// SockaddrVM provides access to Linux VM sockets: a mechanism that enables
+// bidirectional communication between a hypervisor and its guest virtual
+// machines.
+type SockaddrVM struct {
+       // CID and Port specify a context ID and port address for a VM socket.
+       // Guests have a unique CID, and hosts may have a well-known CID of:
+       //  - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.
+       //  - VMADDR_CID_HOST: refers to other processes on the host.
+       CID  uint32
+       Port uint32
+       raw  RawSockaddrVM
+}
+
+func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
+       sa.raw.Family = AF_VSOCK
+       sa.raw.Port = sa.Port
+       sa.raw.Cid = sa.CID
+
+       return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
+}
+
 func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
        switch rsa.Addr.Family {
        case AF_NETLINK:
@@ -620,6 +642,14 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
                        sa.Addr[i] = pp.Addr[i]
                }
                return sa, nil
+
+       case AF_VSOCK:
+               pp := (*RawSockaddrVM)(unsafe.Pointer(rsa))
+               sa := &SockaddrVM{
+                       CID:  pp.Cid,
+                       Port: pp.Port,
+               }
+               return sa, nil
        }
        return nil, EAFNOSUPPORT
 }
@@ -714,6 +744,13 @@ func GetsockoptUcred(fd, level, opt int) (*Ucred, error) {
        return &value, err
 }
 
+func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {
+       var value TCPInfo
+       vallen := _Socklen(SizeofTCPInfo)
+       err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+       return &value, err
+}
+
 func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
        return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
 }
@@ -851,6 +888,10 @@ func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
        return ptracePeek(PTRACE_PEEKDATA, pid, addr, out)
 }
 
+func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) {
+       return ptracePeek(PTRACE_PEEKUSR, pid, addr, out)
+}
+
 func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) {
        // As for ptracePeek, we need to align our accesses to deal
        // with the possibility of straddling an invalid page.
@@ -949,38 +990,24 @@ func Reboot(cmd int) (err error) {
        return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "")
 }
 
-func clen(n []byte) int {
-       for i := 0; i < len(n); i++ {
-               if n[i] == 0 {
-                       return i
-               }
-       }
-       return len(n)
-}
-
 func ReadDirent(fd int, buf []byte) (n int, err error) {
        return Getdents(fd, buf)
 }
 
-func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
-       origlen := len(buf)
-       count = 0
-       for max != 0 && len(buf) > 0 {
-               dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
-               buf = buf[dirent.Reclen:]
-               if dirent.Ino == 0 { // File absent in directory.
-                       continue
-               }
-               bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
-               var name = string(bytes[0:clen(bytes[:])])
-               if name == "." || name == ".." { // Useless names
-                       continue
-               }
-               max--
-               count++
-               names = append(names, name)
+func direntIno(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
+}
+
+func direntReclen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
+}
+
+func direntNamlen(buf []byte) (uint64, bool) {
+       reclen, ok := direntReclen(buf)
+       if !ok {
+               return 0, false
        }
-       return origlen - len(buf), count, names
+       return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
 }
 
 //sys  mount(source string, target string, fstype string, flags uintptr, data *byte) (err error)
index c4e945c..01f6a48 100644 (file)
@@ -93,32 +93,16 @@ func nametomib(name string) (mib []_C_int, err error) {
        return mib, nil
 }
 
-// ParseDirent parses up to max directory entries in buf,
-// appending the names to names. It returns the number
-// bytes consumed from buf, the number of entries added
-// to names, and the new names slice.
-func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
-       origlen := len(buf)
-       for max != 0 && len(buf) > 0 {
-               dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
-               if dirent.Reclen == 0 {
-                       buf = nil
-                       break
-               }
-               buf = buf[dirent.Reclen:]
-               if dirent.Fileno == 0 { // File absent in directory.
-                       continue
-               }
-               bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
-               var name = string(bytes[0:dirent.Namlen])
-               if name == "." || name == ".." { // Useless names
-                       continue
-               }
-               max--
-               count++
-               names = append(names, name)
-       }
-       return origlen - len(buf), count, names
+func direntIno(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
+}
+
+func direntReclen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
+}
+
+func direntNamlen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
 }
 
 //sysnb pipe() (fd1 int, fd2 int, err error)
index 246131d..c0d2b6c 100644 (file)
@@ -53,32 +53,16 @@ func nametomib(name string) (mib []_C_int, err error) {
        return nil, EINVAL
 }
 
-// ParseDirent parses up to max directory entries in buf,
-// appending the names to names. It returns the number
-// bytes consumed from buf, the number of entries added
-// to names, and the new names slice.
-func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
-       origlen := len(buf)
-       for max != 0 && len(buf) > 0 {
-               dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
-               if dirent.Reclen == 0 {
-                       buf = nil
-                       break
-               }
-               buf = buf[dirent.Reclen:]
-               if dirent.Fileno == 0 { // File absent in directory.
-                       continue
-               }
-               bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
-               var name = string(bytes[0:dirent.Namlen])
-               if name == "." || name == ".." { // Useless names
-                       continue
-               }
-               max--
-               count++
-               names = append(names, name)
-       }
-       return origlen - len(buf), count, names
+func direntIno(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
+}
+
+func direntReclen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
+}
+
+func direntNamlen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
 }
 
 //sysnb pipe(p *[2]_C_int) (err error)
index acb74b1..3cb1d0b 100644 (file)
@@ -44,32 +44,20 @@ func clen(n []byte) int {
        return len(n)
 }
 
-// ParseDirent parses up to max directory entries in buf,
-// appending the names to names.  It returns the number
-// bytes consumed from buf, the number of entries added
-// to names, and the new names slice.
-func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
-       origlen := len(buf)
-       for max != 0 && len(buf) > 0 {
-               dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
-               if dirent.Reclen == 0 {
-                       buf = nil
-                       break
-               }
-               buf = buf[dirent.Reclen:]
-               if dirent.Ino == 0 { // File absent in directory.
-                       continue
-               }
-               bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
-               var name = string(bytes[0:clen(bytes[:])])
-               if name == "." || name == ".." { // Useless names
-                       continue
-               }
-               max--
-               count++
-               names = append(names, name)
+func direntIno(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
+}
+
+func direntReclen(buf []byte) (uint64, bool) {
+       return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
+}
+
+func direntNamlen(buf []byte) (uint64, bool) {
+       reclen, ok := direntReclen(buf)
+       if !ok {
+               return 0, false
        }
-       return origlen - len(buf), count, names
+       return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
 }
 
 //sysnb        pipe(p *[2]_C_int) (n int, err error)
index 1153261..a350817 100644 (file)
@@ -5,7 +5,7 @@
 // +build ignore
 
 /*
-Input to cgo -godefs.  See also mkerrors.sh and mkall.sh
+Input to cgo -godefs.  See README.md
 */
 
 // +godefs map struct_in_addr [4]byte /* in_addr */
index f3c971d..a818704 100644 (file)
@@ -5,7 +5,7 @@
 // +build ignore
 
 /*
-Input to cgo -godefs.  See also mkerrors.sh and mkall.sh
+Input to cgo -godefs.  See README.md
 */
 
 // +godefs map struct_in_addr [4]byte /* in_addr */
index ae24557..972e69a 100644 (file)
@@ -5,7 +5,7 @@
 // +build ignore
 
 /*
-Input to cgo -godefs.  See also mkerrors.sh and mkall.sh
+Input to cgo -godefs.  See README.md
 */
 
 // +godefs map struct_in_addr [4]byte /* in_addr */
index d15f93d..7cfdb9c 100644 (file)
@@ -5,7 +5,7 @@
 // +build ignore
 
 /*
-Input to cgo -godefs.  See also mkerrors.sh and mkall.sh
+Input to cgo -godefs.  See README.md
 */
 
 // +godefs map struct_in_addr [4]byte /* in_addr */
index b66fe25..6c7c227 100644 (file)
@@ -5,7 +5,7 @@
 // +build ignore
 
 /*
-Input to cgo -godefs.  See also mkerrors.sh and mkall.sh
+Input to cgo -godefs.  See README.md
 */
 
 // +godefs map struct_in_addr [4]byte /* in_addr */
index c5d5c8f..69bf1bc 100644 (file)
@@ -5,7 +5,7 @@
 // +build ignore
 
 /*
-Input to cgo -godefs.  See also mkerrors.sh and mkall.sh
+Input to cgo -godefs.  See README.md
 */
 
 // +godefs map struct_in_addr [4]byte /* in_addr */
index 0feceee..8f40598 100644 (file)
@@ -1,5 +1,5 @@
 // mkerrors.sh -m64
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build amd64,dragonfly
 
@@ -37,8 +37,8 @@ const (
        AF_MAX                            = 0x24
        AF_MPLS                           = 0x22
        AF_NATM                           = 0x1d
+       AF_NETBIOS                        = 0x6
        AF_NETGRAPH                       = 0x20
-       AF_NS                             = 0x6
        AF_OSI                            = 0x7
        AF_PUP                            = 0x4
        AF_ROUTE                          = 0x11
@@ -46,6 +46,7 @@ const (
        AF_SNA                            = 0xb
        AF_UNIX                           = 0x1
        AF_UNSPEC                         = 0x0
+       ALTWERASE                         = 0x200
        B0                                = 0x0
        B110                              = 0x6e
        B115200                           = 0x1c200
@@ -141,7 +142,22 @@ const (
        BRKINT                            = 0x2
        CFLUSH                            = 0xf
        CLOCAL                            = 0x8000
+       CLOCK_MONOTONIC                   = 0x4
+       CLOCK_MONOTONIC_FAST              = 0xc
+       CLOCK_MONOTONIC_PRECISE           = 0xb
+       CLOCK_PROCESS_CPUTIME_ID          = 0xf
+       CLOCK_PROF                        = 0x2
+       CLOCK_REALTIME                    = 0x0
+       CLOCK_REALTIME_FAST               = 0xa
+       CLOCK_REALTIME_PRECISE            = 0x9
+       CLOCK_SECOND                      = 0xd
+       CLOCK_THREAD_CPUTIME_ID           = 0xe
+       CLOCK_UPTIME                      = 0x5
+       CLOCK_UPTIME_FAST                 = 0x8
+       CLOCK_UPTIME_PRECISE              = 0x7
+       CLOCK_VIRTUAL                     = 0x1
        CREAD                             = 0x800
+       CRTSCTS                           = 0x30000
        CS5                               = 0x0
        CS6                               = 0x100
        CS7                               = 0x200
@@ -286,24 +302,28 @@ const (
        ECHOPRT                           = 0x20
        EVFILT_AIO                        = -0x3
        EVFILT_EXCEPT                     = -0x8
+       EVFILT_FS                         = -0xa
        EVFILT_MARKER                     = 0xf
        EVFILT_PROC                       = -0x5
        EVFILT_READ                       = -0x1
        EVFILT_SIGNAL                     = -0x6
-       EVFILT_SYSCOUNT                   = 0x8
+       EVFILT_SYSCOUNT                   = 0xa
        EVFILT_TIMER                      = -0x7
+       EVFILT_USER                       = -0x9
        EVFILT_VNODE                      = -0x4
        EVFILT_WRITE                      = -0x2
        EV_ADD                            = 0x1
        EV_CLEAR                          = 0x20
        EV_DELETE                         = 0x2
        EV_DISABLE                        = 0x8
+       EV_DISPATCH                       = 0x80
        EV_ENABLE                         = 0x4
        EV_EOF                            = 0x8000
        EV_ERROR                          = 0x4000
        EV_FLAG1                          = 0x2000
        EV_NODATA                         = 0x1000
        EV_ONESHOT                        = 0x10
+       EV_RECEIPT                        = 0x40
        EV_SYSFLAGS                       = 0xf000
        EXTA                              = 0x4b00
        EXTB                              = 0x9600
@@ -679,7 +699,6 @@ const (
        IPPROTO_SATEXPAK                  = 0x40
        IPPROTO_SATMON                    = 0x45
        IPPROTO_SCCSP                     = 0x60
-       IPPROTO_SCTP                      = 0x84
        IPPROTO_SDRP                      = 0x2a
        IPPROTO_SEP                       = 0x21
        IPPROTO_SKIP                      = 0x39
@@ -730,6 +749,7 @@ const (
        IPV6_LEAVE_GROUP                  = 0xd
        IPV6_MAXHLIM                      = 0xff
        IPV6_MAXPACKET                    = 0xffff
+       IPV6_MINHLIM                      = 0x28
        IPV6_MMTU                         = 0x500
        IPV6_MSFILTER                     = 0x4a
        IPV6_MULTICAST_HOPS               = 0xa
@@ -778,6 +798,7 @@ const (
        IP_FW_FLUSH                       = 0x34
        IP_FW_GET                         = 0x36
        IP_FW_RESETLOG                    = 0x37
+       IP_FW_X                           = 0x31
        IP_FW_ZERO                        = 0x35
        IP_HDRINCL                        = 0x2
        IP_IPSEC_POLICY                   = 0x15
@@ -833,6 +854,7 @@ const (
        MADV_SETMAP                       = 0xb
        MADV_WILLNEED                     = 0x3
        MAP_ANON                          = 0x1000
+       MAP_ANONYMOUS                     = 0x1000
        MAP_COPY                          = 0x2
        MAP_FILE                          = 0x0
        MAP_FIXED                         = 0x10
@@ -851,6 +873,7 @@ const (
        MAP_VPAGETABLE                    = 0x2000
        MCL_CURRENT                       = 0x1
        MCL_FUTURE                        = 0x2
+       MSG_CMSG_CLOEXEC                  = 0x1000
        MSG_CTRUNC                        = 0x20
        MSG_DONTROUTE                     = 0x4
        MSG_DONTWAIT                      = 0x80
@@ -860,11 +883,11 @@ const (
        MSG_FMASK                         = 0xffff0000
        MSG_FNONBLOCKING                  = 0x20000
        MSG_NOSIGNAL                      = 0x400
-       MSG_NOTIFICATION                  = 0x200
        MSG_OOB                           = 0x1
        MSG_PEEK                          = 0x2
        MSG_SYNC                          = 0x800
        MSG_TRUNC                         = 0x10
+       MSG_UNUSED09                      = 0x200
        MSG_WAITALL                       = 0x40
        MS_ASYNC                          = 0x1
        MS_INVALIDATE                     = 0x2
@@ -875,12 +898,19 @@ const (
        NET_RT_IFLIST                     = 0x3
        NET_RT_MAXID                      = 0x4
        NOFLSH                            = 0x80000000
+       NOKERNINFO                        = 0x2000000
        NOTE_ATTRIB                       = 0x8
        NOTE_CHILD                        = 0x4
        NOTE_DELETE                       = 0x1
        NOTE_EXEC                         = 0x20000000
        NOTE_EXIT                         = 0x80000000
        NOTE_EXTEND                       = 0x4
+       NOTE_FFAND                        = 0x40000000
+       NOTE_FFCOPY                       = 0xc0000000
+       NOTE_FFCTRLMASK                   = 0xc0000000
+       NOTE_FFLAGSMASK                   = 0xffffff
+       NOTE_FFNOP                        = 0x0
+       NOTE_FFOR                         = 0x80000000
        NOTE_FORK                         = 0x40000000
        NOTE_LINK                         = 0x10
        NOTE_LOWAT                        = 0x1
@@ -891,6 +921,7 @@ const (
        NOTE_REVOKE                       = 0x40
        NOTE_TRACK                        = 0x1
        NOTE_TRACKERR                     = 0x2
+       NOTE_TRIGGER                      = 0x1000000
        NOTE_WRITE                        = 0x2
        OCRNL                             = 0x10
        ONLCR                             = 0x2
@@ -898,6 +929,7 @@ const (
        ONOCR                             = 0x20
        ONOEOT                            = 0x8
        OPOST                             = 0x1
+       OXTABS                            = 0x4
        O_ACCMODE                         = 0x3
        O_APPEND                          = 0x8
        O_ASYNC                           = 0x40
@@ -910,14 +942,11 @@ const (
        O_FAPPEND                         = 0x100000
        O_FASYNCWRITE                     = 0x800000
        O_FBLOCKING                       = 0x40000
-       O_FBUFFERED                       = 0x2000000
-       O_FMASK                           = 0x7fc0000
+       O_FMASK                           = 0xfc0000
        O_FNONBLOCKING                    = 0x80000
        O_FOFFSET                         = 0x200000
        O_FSYNC                           = 0x80
        O_FSYNCWRITE                      = 0x400000
-       O_FUNBUFFERED                     = 0x1000000
-       O_MAPONREAD                       = 0x4000000
        O_NDELAY                          = 0x4
        O_NOCTTY                          = 0x8000
        O_NOFOLLOW                        = 0x100
@@ -1096,8 +1125,10 @@ const (
        SIOCSLIFPHYADDR                   = 0x8118694a
        SIOCSLOWAT                        = 0x80047302
        SIOCSPGRP                         = 0x80047308
+       SOCK_CLOEXEC                      = 0x10000000
        SOCK_DGRAM                        = 0x2
        SOCK_MAXADDRLEN                   = 0xff
+       SOCK_NONBLOCK                     = 0x20000000
        SOCK_RAW                          = 0x3
        SOCK_RDM                          = 0x4
        SOCK_SEQPACKET                    = 0x5
@@ -1107,6 +1138,7 @@ const (
        SO_ACCEPTCONN                     = 0x2
        SO_ACCEPTFILTER                   = 0x1000
        SO_BROADCAST                      = 0x20
+       SO_CPUHINT                        = 0x1030
        SO_DEBUG                          = 0x1
        SO_DONTROUTE                      = 0x10
        SO_ERROR                          = 0x1007
@@ -1127,8 +1159,12 @@ const (
        SO_TYPE                           = 0x1008
        SO_USELOOPBACK                    = 0x40
        TCIFLUSH                          = 0x1
+       TCIOFF                            = 0x3
        TCIOFLUSH                         = 0x3
+       TCION                             = 0x4
        TCOFLUSH                          = 0x2
+       TCOOFF                            = 0x1
+       TCOON                             = 0x2
        TCP_FASTKEEP                      = 0x80
        TCP_KEEPCNT                       = 0x400
        TCP_KEEPIDLE                      = 0x100
@@ -1227,6 +1263,8 @@ const (
        VKILL                             = 0x5
        VLNEXT                            = 0xe
        VMIN                              = 0x10
+       VM_BCACHE_SIZE_MAX                = 0x0
+       VM_SWZONE_SIZE_MAX                = 0x4000000000
        VQUIT                             = 0x9
        VREPRINT                          = 0x6
        VSTART                            = 0xc
index 94c7e30..341bdfc 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh -m32
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include -m32
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build 386,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- -m32 _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go
 
 package unix
 
@@ -24,6 +24,7 @@ const (
        AF_DECnet                        = 0xc
        AF_ECONET                        = 0x13
        AF_FILE                          = 0x1
+       AF_IB                            = 0x1b
        AF_IEEE802154                    = 0x24
        AF_INET                          = 0x2
        AF_INET6                         = 0xa
@@ -31,10 +32,12 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x28
+       AF_MAX                           = 0x2b
+       AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
        AF_NETROM                        = 0x6
@@ -42,6 +45,7 @@ const (
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -51,6 +55,7 @@ const (
        AF_TIPC                          = 0x1e
        AF_UNIX                          = 0x1
        AF_UNSPEC                        = 0x0
+       AF_VSOCK                         = 0x28
        AF_WANPIPE                       = 0x19
        AF_X25                           = 0x9
        ALG_OP_DECRYPT                   = 0x0
@@ -60,6 +65,7 @@ const (
        ALG_SET_IV                       = 0x2
        ALG_SET_KEY                      = 0x1
        ALG_SET_OP                       = 0x3
+       ARPHRD_6LOWPAN                   = 0x339
        ARPHRD_ADAPT                     = 0x108
        ARPHRD_APPLETLK                  = 0x8
        ARPHRD_ARCNET                    = 0x7
@@ -94,8 +100,10 @@ const (
        ARPHRD_IEEE80211_PRISM           = 0x322
        ARPHRD_IEEE80211_RADIOTAP        = 0x323
        ARPHRD_IEEE802154                = 0x324
+       ARPHRD_IEEE802154_MONITOR        = 0x325
        ARPHRD_IEEE802_TR                = 0x320
        ARPHRD_INFINIBAND                = 0x20
+       ARPHRD_IP6GRE                    = 0x337
        ARPHRD_IPDDP                     = 0x309
        ARPHRD_IPGRE                     = 0x30a
        ARPHRD_IRDA                      = 0x30f
@@ -103,6 +111,7 @@ const (
        ARPHRD_LOCALTLK                  = 0x305
        ARPHRD_LOOPBACK                  = 0x304
        ARPHRD_METRICOM                  = 0x17
+       ARPHRD_NETLINK                   = 0x338
        ARPHRD_NETROM                    = 0x0
        ARPHRD_NONE                      = 0xfffe
        ARPHRD_PHONET                    = 0x334
@@ -159,6 +168,7 @@ const (
        BLKFRASET                        = 0x1264
        BLKGETSIZE                       = 0x1260
        BLKGETSIZE64                     = 0x80041272
+       BLKPBSZGET                       = 0x127b
        BLKRAGET                         = 0x1263
        BLKRASET                         = 0x1262
        BLKROGET                         = 0x125e
@@ -188,6 +198,7 @@ const (
        BPF_LD                           = 0x0
        BPF_LDX                          = 0x1
        BPF_LEN                          = 0x80
+       BPF_LL_OFF                       = -0x200000
        BPF_LSH                          = 0x60
        BPF_MAJOR_VERSION                = 0x1
        BPF_MAXINSNS                     = 0x1000
@@ -195,9 +206,11 @@ const (
        BPF_MEMWORDS                     = 0x10
        BPF_MINOR_VERSION                = 0x1
        BPF_MISC                         = 0x7
+       BPF_MOD                          = 0x90
        BPF_MSH                          = 0xa0
        BPF_MUL                          = 0x20
        BPF_NEG                          = 0x80
+       BPF_NET_OFF                      = -0x100000
        BPF_OR                           = 0x40
        BPF_RET                          = 0x6
        BPF_RSH                          = 0x70
@@ -208,6 +221,7 @@ const (
        BPF_TXA                          = 0x80
        BPF_W                            = 0x0
        BPF_X                            = 0x8
+       BPF_XOR                          = 0xa0
        BRKINT                           = 0x2
        BS0                              = 0x0
        BS1                              = 0x2000
@@ -226,6 +240,7 @@ const (
        CAN_MTU                          = 0x10
        CAN_NPROTO                       = 0x7
        CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
        CAN_RTR_FLAG                     = 0x40000000
        CAN_SFF_ID_BITS                  = 0xb
        CAN_SFF_MASK                     = 0x7ff
@@ -248,6 +263,7 @@ const (
        CLOCK_REALTIME                   = 0x0
        CLOCK_REALTIME_ALARM             = 0x8
        CLOCK_REALTIME_COARSE            = 0x5
+       CLOCK_TAI                        = 0xb
        CLOCK_THREAD_CPUTIME_ID          = 0x3
        CLOCK_TXFROMRX                   = 0x4
        CLOCK_TXINT                      = 0x3
@@ -317,6 +333,7 @@ const (
        ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
        EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -326,19 +343,22 @@ const (
        EPOLLRDBAND                      = 0x80
        EPOLLRDHUP                       = 0x2000
        EPOLLRDNORM                      = 0x40
+       EPOLLWAKEUP                      = 0x20000000
        EPOLLWRBAND                      = 0x200
        EPOLLWRNORM                      = 0x100
        EPOLL_CLOEXEC                    = 0x80000
        EPOLL_CTL_ADD                    = 0x1
        EPOLL_CTL_DEL                    = 0x2
        EPOLL_CTL_MOD                    = 0x3
-       EPOLL_NONBLOCK                   = 0x800
        ETH_P_1588                       = 0x88f7
        ETH_P_8021AD                     = 0x88a8
        ETH_P_8021AH                     = 0x88e7
        ETH_P_8021Q                      = 0x8100
+       ETH_P_80221                      = 0x8917
        ETH_P_802_2                      = 0x4
        ETH_P_802_3                      = 0x1
+       ETH_P_802_3_MIN                  = 0x600
+       ETH_P_802_EX1                    = 0x88b5
        ETH_P_AARP                       = 0x80f3
        ETH_P_AF_IUCV                    = 0xfbfb
        ETH_P_ALL                        = 0x3
@@ -349,9 +369,11 @@ const (
        ETH_P_ATMFATE                    = 0x8884
        ETH_P_ATMMPOA                    = 0x884c
        ETH_P_AX25                       = 0x2
+       ETH_P_BATMAN                     = 0x4305
        ETH_P_BPQ                        = 0x8ff
        ETH_P_CAIF                       = 0xf7
        ETH_P_CAN                        = 0xc
+       ETH_P_CANFD                      = 0xd
        ETH_P_CONTROL                    = 0x16
        ETH_P_CUST                       = 0x6006
        ETH_P_DDCMP                      = 0x6
@@ -366,6 +388,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -377,9 +400,13 @@ const (
        ETH_P_LINK_CTL                   = 0x886c
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
+       ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
+       ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -387,6 +414,7 @@ const (
        ETH_P_PPP_DISC                   = 0x8863
        ETH_P_PPP_MP                     = 0x8
        ETH_P_PPP_SES                    = 0x8864
+       ETH_P_PRP                        = 0x88fb
        ETH_P_PUP                        = 0x200
        ETH_P_PUPAT                      = 0x201
        ETH_P_QINQ1                      = 0x9100
@@ -401,9 +429,11 @@ const (
        ETH_P_TIPC                       = 0x88ca
        ETH_P_TRAILER                    = 0x1c
        ETH_P_TR_802_2                   = 0x11
+       ETH_P_TSN                        = 0x22f0
        ETH_P_WAN_PPP                    = 0x7
        ETH_P_WCCP                       = 0x883e
        ETH_P_X25                        = 0x805
+       ETH_P_XDSA                       = 0xf8
        EXTA                             = 0xe
        EXTB                             = 0xf
        EXTPROC                          = 0x10000
@@ -412,6 +442,7 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
@@ -419,6 +450,24 @@ const (
        FF1                              = 0x8000
        FFDLY                            = 0x8000
        FLUSHO                           = 0x1000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -433,6 +482,9 @@ const (
        F_GETSIG                         = 0xb
        F_LOCK                           = 0x1
        F_NOTIFY                         = 0x402
+       F_OFD_GETLK                      = 0x24
+       F_OFD_SETLK                      = 0x25
+       F_OFD_SETLKW                     = 0x26
        F_OK                             = 0x0
        F_RDLCK                          = 0x0
        F_SETFD                          = 0x2
@@ -463,57 +515,48 @@ const (
        IFA_F_DADFAILED                  = 0x8
        IFA_F_DEPRECATED                 = 0x20
        IFA_F_HOMEADDRESS                = 0x10
+       IFA_F_MANAGETEMPADDR             = 0x100
+       IFA_F_MCAUTOJOIN                 = 0x400
        IFA_F_NODAD                      = 0x2
+       IFA_F_NOPREFIXROUTE              = 0x200
        IFA_F_OPTIMISTIC                 = 0x4
        IFA_F_PERMANENT                  = 0x80
        IFA_F_SECONDARY                  = 0x1
+       IFA_F_STABLE_PRIVACY             = 0x800
        IFA_F_TEMPORARY                  = 0x1
        IFA_F_TENTATIVE                  = 0x40
-       IFA_MAX                          = 0x7
-       IFF_802_1Q_VLAN                  = 0x1
+       IFA_MAX                          = 0x8
        IFF_ALLMULTI                     = 0x200
+       IFF_ATTACH_QUEUE                 = 0x200
        IFF_AUTOMEDIA                    = 0x4000
-       IFF_BONDING                      = 0x20
-       IFF_BRIDGE_PORT                  = 0x4000
        IFF_BROADCAST                    = 0x2
        IFF_DEBUG                        = 0x4
-       IFF_DISABLE_NETPOLL              = 0x1000
-       IFF_DONT_BRIDGE                  = 0x800
+       IFF_DETACH_QUEUE                 = 0x400
        IFF_DORMANT                      = 0x20000
        IFF_DYNAMIC                      = 0x8000
-       IFF_EBRIDGE                      = 0x2
        IFF_ECHO                         = 0x40000
-       IFF_ISATAP                       = 0x80
        IFF_LOOPBACK                     = 0x8
        IFF_LOWER_UP                     = 0x10000
-       IFF_MACVLAN_PORT                 = 0x2000
        IFF_MASTER                       = 0x400
-       IFF_MASTER_8023AD                = 0x8
-       IFF_MASTER_ALB                   = 0x10
-       IFF_MASTER_ARPMON                = 0x100
        IFF_MULTICAST                    = 0x1000
+       IFF_MULTI_QUEUE                  = 0x100
        IFF_NOARP                        = 0x80
+       IFF_NOFILTER                     = 0x1000
        IFF_NOTRAILERS                   = 0x20
        IFF_NO_PI                        = 0x1000
        IFF_ONE_QUEUE                    = 0x2000
-       IFF_OVS_DATAPATH                 = 0x8000
+       IFF_PERSIST                      = 0x800
        IFF_POINTOPOINT                  = 0x10
        IFF_PORTSEL                      = 0x2000
        IFF_PROMISC                      = 0x100
        IFF_RUNNING                      = 0x40
        IFF_SLAVE                        = 0x800
-       IFF_SLAVE_INACTIVE               = 0x4
-       IFF_SLAVE_NEEDARP                = 0x40
        IFF_TAP                          = 0x2
        IFF_TUN                          = 0x1
        IFF_TUN_EXCL                     = 0x8000
-       IFF_TX_SKB_SHARING               = 0x10000
-       IFF_UNICAST_FLT                  = 0x20000
        IFF_UP                           = 0x1
        IFF_VNET_HDR                     = 0x4000
        IFF_VOLATILE                     = 0x70c5a
-       IFF_WAN_HDLC                     = 0x200
-       IFF_XMIT_DST_RELEASE             = 0x400
        IFNAMSIZ                         = 0x10
        IGNBRK                           = 0x1
        IGNCR                            = 0x80
@@ -560,6 +603,7 @@ const (
        IN_Q_OVERFLOW                    = 0x4000
        IN_UNMOUNT                       = 0x2000
        IPPROTO_AH                       = 0x33
+       IPPROTO_BEETPH                   = 0x5e
        IPPROTO_COMP                     = 0x6c
        IPPROTO_DCCP                     = 0x21
        IPPROTO_DSTOPTS                  = 0x3c
@@ -576,6 +620,8 @@ const (
        IPPROTO_IP                       = 0x0
        IPPROTO_IPIP                     = 0x4
        IPPROTO_IPV6                     = 0x29
+       IPPROTO_MH                       = 0x87
+       IPPROTO_MPLS                     = 0x89
        IPPROTO_MTP                      = 0x5c
        IPPROTO_NONE                     = 0x3b
        IPPROTO_PIM                      = 0x67
@@ -598,8 +644,10 @@ const (
        IPV6_ADD_MEMBERSHIP              = 0x14
        IPV6_AUTHHDR                     = 0xa
        IPV6_CHECKSUM                    = 0x7
+       IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -613,15 +661,19 @@ const (
        IPV6_MULTICAST_IF                = 0x11
        IPV6_MULTICAST_LOOP              = 0x13
        IPV6_NEXTHOP                     = 0x9
+       IPV6_PATHMTU                     = 0x3d
        IPV6_PKTINFO                     = 0x32
        IPV6_PMTUDISC_DO                 = 0x2
        IPV6_PMTUDISC_DONT               = 0x0
+       IPV6_PMTUDISC_INTERFACE          = 0x4
+       IPV6_PMTUDISC_OMIT               = 0x5
        IPV6_PMTUDISC_PROBE              = 0x3
        IPV6_PMTUDISC_WANT               = 0x1
        IPV6_RECVDSTOPTS                 = 0x3a
        IPV6_RECVERR                     = 0x19
        IPV6_RECVHOPLIMIT                = 0x33
        IPV6_RECVHOPOPTS                 = 0x35
+       IPV6_RECVPATHMTU                 = 0x3c
        IPV6_RECVPKTINFO                 = 0x31
        IPV6_RECVRTHDR                   = 0x38
        IPV6_RECVTCLASS                  = 0x42
@@ -639,7 +691,9 @@ const (
        IPV6_XFRM_POLICY                 = 0x23
        IP_ADD_MEMBERSHIP                = 0x23
        IP_ADD_SOURCE_MEMBERSHIP         = 0x27
+       IP_BIND_ADDRESS_NO_PORT          = 0x18
        IP_BLOCK_SOURCE                  = 0x26
+       IP_CHECKSUM                      = 0x17
        IP_DEFAULT_MULTICAST_LOOP        = 0x1
        IP_DEFAULT_MULTICAST_TTL         = 0x1
        IP_DF                            = 0x4000
@@ -660,6 +714,7 @@ const (
        IP_MULTICAST_IF                  = 0x20
        IP_MULTICAST_LOOP                = 0x22
        IP_MULTICAST_TTL                 = 0x21
+       IP_NODEFRAG                      = 0x16
        IP_OFFMASK                       = 0x1fff
        IP_OPTIONS                       = 0x4
        IP_ORIGDSTADDR                   = 0x14
@@ -669,6 +724,8 @@ const (
        IP_PMTUDISC                      = 0xa
        IP_PMTUDISC_DO                   = 0x2
        IP_PMTUDISC_DONT                 = 0x0
+       IP_PMTUDISC_INTERFACE            = 0x4
+       IP_PMTUDISC_OMIT                 = 0x5
        IP_PMTUDISC_PROBE                = 0x3
        IP_PMTUDISC_WANT                 = 0x1
        IP_RECVERR                       = 0xb
@@ -684,6 +741,7 @@ const (
        IP_TRANSPARENT                   = 0x13
        IP_TTL                           = 0x2
        IP_UNBLOCK_SOURCE                = 0x25
+       IP_UNICAST_IF                    = 0x32
        IP_XFRM_POLICY                   = 0x11
        ISIG                             = 0x1
        ISTRIP                           = 0x20
@@ -706,9 +764,12 @@ const (
        LOCK_NB                          = 0x4
        LOCK_SH                          = 0x1
        LOCK_UN                          = 0x8
+       MADV_DODUMP                      = 0x11
        MADV_DOFORK                      = 0xb
+       MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -728,6 +789,8 @@ const (
        MAP_FIXED                        = 0x10
        MAP_GROWSDOWN                    = 0x100
        MAP_HUGETLB                      = 0x40000
+       MAP_HUGE_MASK                    = 0x3f
+       MAP_HUGE_SHIFT                   = 0x1a
        MAP_LOCKED                       = 0x2000
        MAP_NONBLOCK                     = 0x10000
        MAP_NORESERVE                    = 0x4000
@@ -738,9 +801,11 @@ const (
        MAP_TYPE                         = 0xf
        MCL_CURRENT                      = 0x1
        MCL_FUTURE                       = 0x2
+       MCL_ONFAULT                      = 0x4
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -764,10 +829,12 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
        MS_KERNMOUNT                     = 0x400000
+       MS_LAZYTIME                      = 0x2000000
        MS_MANDLOCK                      = 0x40
        MS_MGC_MSK                       = 0xffff0000
        MS_MGC_VAL                       = 0xc0ed0000
@@ -776,6 +843,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -784,7 +853,7 @@ const (
        MS_REC                           = 0x4000
        MS_RELATIME                      = 0x200000
        MS_REMOUNT                       = 0x20
-       MS_RMT_MASK                      = 0x800051
+       MS_RMT_MASK                      = 0x2800051
        MS_SHARED                        = 0x100000
        MS_SILENT                        = 0x8000
        MS_SLAVE                         = 0x80000
@@ -792,10 +861,12 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
        NETLINK_BROADCAST_ERROR          = 0x4
+       NETLINK_CAP_ACK                  = 0xa
        NETLINK_CONNECTOR                = 0xb
        NETLINK_CRYPTO                   = 0x15
        NETLINK_DNRTMSG                  = 0xe
@@ -808,14 +879,19 @@ const (
        NETLINK_IP6_FW                   = 0xd
        NETLINK_ISCSI                    = 0x8
        NETLINK_KOBJECT_UEVENT           = 0xf
+       NETLINK_LISTEN_ALL_NSID          = 0x8
+       NETLINK_LIST_MEMBERSHIPS         = 0x9
        NETLINK_NETFILTER                = 0xc
        NETLINK_NFLOG                    = 0x5
        NETLINK_NO_ENOBUFS               = 0x5
        NETLINK_PKTINFO                  = 0x3
        NETLINK_RDMA                     = 0x14
        NETLINK_ROUTE                    = 0x0
+       NETLINK_RX_RING                  = 0x6
        NETLINK_SCSITRANSPORT            = 0x12
        NETLINK_SELINUX                  = 0x7
+       NETLINK_SOCK_DIAG                = 0x4
+       NETLINK_TX_RING                  = 0x7
        NETLINK_UNUSED                   = 0x1
        NETLINK_USERSOCK                 = 0x2
        NETLINK_XFRM                     = 0x6
@@ -886,13 +962,21 @@ const (
        PACKET_COPY_THRESH               = 0x7
        PACKET_DROP_MEMBERSHIP           = 0x2
        PACKET_FANOUT                    = 0x12
+       PACKET_FANOUT_CBPF               = 0x6
        PACKET_FANOUT_CPU                = 0x2
+       PACKET_FANOUT_DATA               = 0x16
+       PACKET_FANOUT_EBPF               = 0x7
        PACKET_FANOUT_FLAG_DEFRAG        = 0x8000
+       PACKET_FANOUT_FLAG_ROLLOVER      = 0x1000
        PACKET_FANOUT_HASH               = 0x0
        PACKET_FANOUT_LB                 = 0x1
+       PACKET_FANOUT_QM                 = 0x5
+       PACKET_FANOUT_RND                = 0x4
+       PACKET_FANOUT_ROLLOVER           = 0x3
        PACKET_FASTROUTE                 = 0x6
        PACKET_HDRLEN                    = 0xb
        PACKET_HOST                      = 0x0
+       PACKET_KERNEL                    = 0x7
        PACKET_LOOPBACK                  = 0x5
        PACKET_LOSS                      = 0xe
        PACKET_MR_ALLMULTI               = 0x2
@@ -903,13 +987,17 @@ const (
        PACKET_ORIGDEV                   = 0x9
        PACKET_OTHERHOST                 = 0x3
        PACKET_OUTGOING                  = 0x4
+       PACKET_QDISC_BYPASS              = 0x14
        PACKET_RECV_OUTPUT               = 0x3
        PACKET_RESERVE                   = 0xc
+       PACKET_ROLLOVER_STATS            = 0x15
        PACKET_RX_RING                   = 0x5
        PACKET_STATISTICS                = 0x6
        PACKET_TIMESTAMP                 = 0x11
+       PACKET_TX_HAS_OFF                = 0x13
        PACKET_TX_RING                   = 0xd
        PACKET_TX_TIMESTAMP              = 0x10
+       PACKET_USER                      = 0x6
        PACKET_VERSION                   = 0xa
        PACKET_VNET_HDR                  = 0xf
        PARENB                           = 0x100
@@ -935,6 +1023,11 @@ const (
        PROT_WRITE                       = 0x2
        PR_CAPBSET_DROP                  = 0x18
        PR_CAPBSET_READ                  = 0x17
+       PR_CAP_AMBIENT                   = 0x2f
+       PR_CAP_AMBIENT_CLEAR_ALL         = 0x4
+       PR_CAP_AMBIENT_IS_SET            = 0x1
+       PR_CAP_AMBIENT_LOWER             = 0x3
+       PR_CAP_AMBIENT_RAISE             = 0x2
        PR_ENDIAN_BIG                    = 0x0
        PR_ENDIAN_LITTLE                 = 0x1
        PR_ENDIAN_PPC_LITTLE             = 0x2
@@ -950,16 +1043,22 @@ const (
        PR_FP_EXC_RES                    = 0x80000
        PR_FP_EXC_SW_ENABLE              = 0x80
        PR_FP_EXC_UND                    = 0x40000
+       PR_FP_MODE_FR                    = 0x1
+       PR_FP_MODE_FRE                   = 0x2
+       PR_GET_CHILD_SUBREAPER           = 0x25
        PR_GET_DUMPABLE                  = 0x3
        PR_GET_ENDIAN                    = 0x13
        PR_GET_FPEMU                     = 0x9
        PR_GET_FPEXC                     = 0xb
+       PR_GET_FP_MODE                   = 0x2e
        PR_GET_KEEPCAPS                  = 0x7
        PR_GET_NAME                      = 0x10
        PR_GET_NO_NEW_PRIVS              = 0x27
        PR_GET_PDEATHSIG                 = 0x2
        PR_GET_SECCOMP                   = 0x15
        PR_GET_SECUREBITS                = 0x1b
+       PR_GET_THP_DISABLE               = 0x2a
+       PR_GET_TID_ADDRESS               = 0x28
        PR_GET_TIMERSLACK                = 0x1e
        PR_GET_TIMING                    = 0xd
        PR_GET_TSC                       = 0x19
@@ -971,15 +1070,27 @@ const (
        PR_MCE_KILL_GET                  = 0x22
        PR_MCE_KILL_LATE                 = 0x0
        PR_MCE_KILL_SET                  = 0x1
+       PR_MPX_DISABLE_MANAGEMENT        = 0x2c
+       PR_MPX_ENABLE_MANAGEMENT         = 0x2b
+       PR_SET_CHILD_SUBREAPER           = 0x24
        PR_SET_DUMPABLE                  = 0x4
        PR_SET_ENDIAN                    = 0x14
        PR_SET_FPEMU                     = 0xa
        PR_SET_FPEXC                     = 0xc
+       PR_SET_FP_MODE                   = 0x2d
        PR_SET_KEEPCAPS                  = 0x8
        PR_SET_MM                        = 0x23
+       PR_SET_MM_ARG_END                = 0x9
+       PR_SET_MM_ARG_START              = 0x8
+       PR_SET_MM_AUXV                   = 0xc
        PR_SET_MM_BRK                    = 0x7
        PR_SET_MM_END_CODE               = 0x2
        PR_SET_MM_END_DATA               = 0x4
+       PR_SET_MM_ENV_END                = 0xb
+       PR_SET_MM_ENV_START              = 0xa
+       PR_SET_MM_EXE_FILE               = 0xd
+       PR_SET_MM_MAP                    = 0xe
+       PR_SET_MM_MAP_SIZE               = 0xf
        PR_SET_MM_START_BRK              = 0x6
        PR_SET_MM_START_CODE             = 0x1
        PR_SET_MM_START_DATA             = 0x3
@@ -991,6 +1102,7 @@ const (
        PR_SET_PTRACER_ANY               = 0xffffffff
        PR_SET_SECCOMP                   = 0x16
        PR_SET_SECUREBITS                = 0x1c
+       PR_SET_THP_DISABLE               = 0x29
        PR_SET_TIMERSLACK                = 0x1d
        PR_SET_TIMING                    = 0xe
        PR_SET_TSC                       = 0x1a
@@ -1020,12 +1132,15 @@ const (
        PTRACE_GETREGS                   = 0xc
        PTRACE_GETREGSET                 = 0x4204
        PTRACE_GETSIGINFO                = 0x4202
+       PTRACE_GETSIGMASK                = 0x420a
        PTRACE_GET_THREAD_AREA           = 0x19
        PTRACE_INTERRUPT                 = 0x4207
        PTRACE_KILL                      = 0x8
        PTRACE_LISTEN                    = 0x4208
        PTRACE_OLDSETOPTIONS             = 0x15
-       PTRACE_O_MASK                    = 0xff
+       PTRACE_O_EXITKILL                = 0x100000
+       PTRACE_O_MASK                    = 0x3000ff
+       PTRACE_O_SUSPEND_SECCOMP         = 0x200000
        PTRACE_O_TRACECLONE              = 0x8
        PTRACE_O_TRACEEXEC               = 0x10
        PTRACE_O_TRACEEXIT               = 0x40
@@ -1035,19 +1150,22 @@ const (
        PTRACE_O_TRACEVFORK              = 0x4
        PTRACE_O_TRACEVFORKDONE          = 0x20
        PTRACE_PEEKDATA                  = 0x2
+       PTRACE_PEEKSIGINFO               = 0x4209
+       PTRACE_PEEKSIGINFO_SHARED        = 0x1
        PTRACE_PEEKTEXT                  = 0x1
        PTRACE_PEEKUSR                   = 0x3
        PTRACE_POKEDATA                  = 0x5
        PTRACE_POKETEXT                  = 0x4
        PTRACE_POKEUSR                   = 0x6
+       PTRACE_SECCOMP_GET_FILTER        = 0x420c
        PTRACE_SEIZE                     = 0x4206
-       PTRACE_SEIZE_DEVEL               = 0x80000000
        PTRACE_SETFPREGS                 = 0xf
        PTRACE_SETFPXREGS                = 0x13
        PTRACE_SETOPTIONS                = 0x4200
        PTRACE_SETREGS                   = 0xd
        PTRACE_SETREGSET                 = 0x4205
        PTRACE_SETSIGINFO                = 0x4203
+       PTRACE_SETSIGMASK                = 0x420b
        PTRACE_SET_THREAD_AREA           = 0x1a
        PTRACE_SINGLEBLOCK               = 0x21
        PTRACE_SINGLESTEP                = 0x9
@@ -1064,18 +1182,21 @@ const (
        RLIMIT_STACK                     = 0x3
        RLIM_INFINITY                    = -0x1
        RTAX_ADVMSS                      = 0x8
+       RTAX_CC_ALGO                     = 0x10
        RTAX_CWND                        = 0x7
        RTAX_FEATURES                    = 0xc
        RTAX_FEATURE_ALLFRAG             = 0x8
        RTAX_FEATURE_ECN                 = 0x1
+       RTAX_FEATURE_MASK                = 0xf
        RTAX_FEATURE_SACK                = 0x2
        RTAX_FEATURE_TIMESTAMP           = 0x4
        RTAX_HOPLIMIT                    = 0xa
        RTAX_INITCWND                    = 0xb
        RTAX_INITRWND                    = 0xe
        RTAX_LOCK                        = 0x1
-       RTAX_MAX                         = 0xe
+       RTAX_MAX                         = 0x10
        RTAX_MTU                         = 0x2
+       RTAX_QUICKACK                    = 0xf
        RTAX_REORDERING                  = 0x9
        RTAX_RTO_MIN                     = 0xd
        RTAX_RTT                         = 0x4
@@ -1084,7 +1205,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x10
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1126,7 +1247,9 @@ const (
        RTM_DELADDR                      = 0x15
        RTM_DELADDRLABEL                 = 0x49
        RTM_DELLINK                      = 0x11
+       RTM_DELMDB                       = 0x55
        RTM_DELNEIGH                     = 0x1d
+       RTM_DELNSID                      = 0x59
        RTM_DELQDISC                     = 0x25
        RTM_DELROUTE                     = 0x19
        RTM_DELRULE                      = 0x21
@@ -1134,6 +1257,7 @@ const (
        RTM_DELTFILTER                   = 0x2d
        RTM_F_CLONED                     = 0x200
        RTM_F_EQUALIZE                   = 0x400
+       RTM_F_LOOKUP_TABLE               = 0x1000
        RTM_F_NOTIFY                     = 0x100
        RTM_F_PREFIX                     = 0x800
        RTM_GETACTION                    = 0x32
@@ -1142,44 +1266,57 @@ const (
        RTM_GETANYCAST                   = 0x3e
        RTM_GETDCB                       = 0x4e
        RTM_GETLINK                      = 0x12
+       RTM_GETMDB                       = 0x56
        RTM_GETMULTICAST                 = 0x3a
        RTM_GETNEIGH                     = 0x1e
        RTM_GETNEIGHTBL                  = 0x42
+       RTM_GETNETCONF                   = 0x52
+       RTM_GETNSID                      = 0x5a
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x4f
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
        RTM_NEWLINK                      = 0x10
+       RTM_NEWMDB                       = 0x54
        RTM_NEWNDUSEROPT                 = 0x44
        RTM_NEWNEIGH                     = 0x1c
        RTM_NEWNEIGHTBL                  = 0x40
+       RTM_NEWNETCONF                   = 0x50
+       RTM_NEWNSID                      = 0x58
        RTM_NEWPREFIX                    = 0x34
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x10
-       RTM_NR_MSGTYPES                  = 0x40
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
+       RTNH_F_LINKDOWN                  = 0x10
+       RTNH_F_OFFLOAD                   = 0x8
        RTNH_F_ONLINK                    = 0x4
        RTNH_F_PERVASIVE                 = 0x2
        RTN_MAX                          = 0xb
+       RTPROT_BABEL                     = 0x2a
        RTPROT_BIRD                      = 0xc
        RTPROT_BOOT                      = 0x3
        RTPROT_DHCP                      = 0x10
        RTPROT_DNROUTED                  = 0xd
        RTPROT_GATED                     = 0x8
        RTPROT_KERNEL                    = 0x2
+       RTPROT_MROUTED                   = 0x11
        RTPROT_MRT                       = 0xa
        RTPROT_NTK                       = 0xf
        RTPROT_RA                        = 0x9
@@ -1200,7 +1337,9 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
+       SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
        SHUT_RDWR                        = 0x2
        SHUT_WR                          = 0x1
@@ -1272,36 +1411,63 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x1
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
+       SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0x1
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1e
+       SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
+       SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x6
        SO_BSDCOMPAT                     = 0xe
+       SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
+       SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
        SO_DOMAIN                        = 0x27
        SO_DONTROUTE                     = 0x5
        SO_ERROR                         = 0x4
+       SO_GET_FILTER                    = 0x1a
+       SO_INCOMING_CPU                  = 0x31
        SO_KEEPALIVE                     = 0x9
        SO_LINGER                        = 0xd
+       SO_LOCK_FILTER                   = 0x2c
        SO_MARK                          = 0x24
+       SO_MAX_PACING_RATE               = 0x2f
+       SO_NOFCS                         = 0x2b
        SO_NO_CHECK                      = 0xb
        SO_OOBINLINE                     = 0xa
        SO_PASSCRED                      = 0x10
        SO_PASSSEC                       = 0x22
+       SO_PEEK_OFF                      = 0x2a
        SO_PEERCRED                      = 0x11
        SO_PEERNAME                      = 0x1c
        SO_PEERSEC                       = 0x1f
@@ -1312,10 +1478,12 @@ const (
        SO_RCVLOWAT                      = 0x12
        SO_RCVTIMEO                      = 0x14
        SO_REUSEADDR                     = 0x2
+       SO_REUSEPORT                     = 0xf
        SO_RXQ_OVFL                      = 0x28
        SO_SECURITY_AUTHENTICATION       = 0x16
        SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
        SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
+       SO_SELECT_ERR_QUEUE              = 0x2d
        SO_SNDBUF                        = 0x7
        SO_SNDBUFFORCE                   = 0x20
        SO_SNDLOWAT                      = 0x13
@@ -1324,6 +1492,14 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x3
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
+       SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
        SPLICE_F_MOVE                    = 0x1
@@ -1372,9 +1548,17 @@ const (
        TCOFLUSH                         = 0x1
        TCOOFF                           = 0x0
        TCOON                            = 0x1
+       TCP_CC_INFO                      = 0x1a
        TCP_CONGESTION                   = 0xd
+       TCP_COOKIE_IN_ALWAYS             = 0x1
+       TCP_COOKIE_MAX                   = 0x10
+       TCP_COOKIE_MIN                   = 0x8
+       TCP_COOKIE_OUT_NEVER             = 0x2
+       TCP_COOKIE_PAIR_SIZE             = 0x20
+       TCP_COOKIE_TRANSACTIONS          = 0xf
        TCP_CORK                         = 0x3
        TCP_DEFER_ACCEPT                 = 0x9
+       TCP_FASTOPEN                     = 0x17
        TCP_INFO                         = 0xb
        TCP_KEEPCNT                      = 0x6
        TCP_KEEPIDLE                     = 0x4
@@ -1386,9 +1570,25 @@ const (
        TCP_MD5SIG                       = 0xe
        TCP_MD5SIG_MAXKEYLEN             = 0x50
        TCP_MSS                          = 0x200
+       TCP_MSS_DEFAULT                  = 0x218
+       TCP_MSS_DESIRED                  = 0x4c4
        TCP_NODELAY                      = 0x1
+       TCP_NOTSENT_LOWAT                = 0x19
+       TCP_QUEUE_SEQ                    = 0x15
        TCP_QUICKACK                     = 0xc
+       TCP_REPAIR                       = 0x13
+       TCP_REPAIR_OPTIONS               = 0x16
+       TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
+       TCP_SAVED_SYN                    = 0x1c
+       TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
+       TCP_S_DATA_IN                    = 0x4
+       TCP_S_DATA_OUT                   = 0x8
+       TCP_THIN_DUPACK                  = 0x11
+       TCP_THIN_LINEAR_TIMEOUTS         = 0x10
+       TCP_TIMESTAMP                    = 0x18
+       TCP_USER_TIMEOUT                 = 0x12
        TCP_WINDOW_CLAMP                 = 0xa
        TCSAFLUSH                        = 0x2
        TCSBRK                           = 0x5409
@@ -1478,20 +1678,27 @@ const (
        TUNATTACHFILTER                  = 0x400854d5
        TUNDETACHFILTER                  = 0x400854d6
        TUNGETFEATURES                   = 0x800454cf
+       TUNGETFILTER                     = 0x800854db
        TUNGETIFF                        = 0x800454d2
        TUNGETSNDBUF                     = 0x800454d3
+       TUNGETVNETBE                     = 0x800454df
        TUNGETVNETHDRSZ                  = 0x800454d7
+       TUNGETVNETLE                     = 0x800454dd
        TUNSETDEBUG                      = 0x400454c9
        TUNSETGROUP                      = 0x400454ce
        TUNSETIFF                        = 0x400454ca
+       TUNSETIFINDEX                    = 0x400454da
        TUNSETLINK                       = 0x400454cd
        TUNSETNOCSUM                     = 0x400454c8
        TUNSETOFFLOAD                    = 0x400454d0
        TUNSETOWNER                      = 0x400454cc
        TUNSETPERSIST                    = 0x400454cb
+       TUNSETQUEUE                      = 0x400454d9
        TUNSETSNDBUF                     = 0x400454d4
        TUNSETTXFILTER                   = 0x400454d1
+       TUNSETVNETBE                     = 0x400454de
        TUNSETVNETHDRSZ                  = 0x400454d8
+       TUNSETVNETLE                     = 0x400454dc
        VDISCARD                         = 0xd
        VEOF                             = 0x4
        VEOL                             = 0xb
@@ -1500,7 +1707,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x6
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
        VSTART                           = 0x8
@@ -1818,7 +2031,7 @@ var errors = [...]string{
        113: "no route to host",
        114: "operation already in progress",
        115: "operation now in progress",
-       116: "stale NFS file handle",
+       116: "stale file handle",
        117: "structure needs cleaning",
        118: "not a XENIX named type file",
        119: "no XENIX semaphores available",
@@ -1835,7 +2048,7 @@ var errors = [...]string{
        130: "owner died",
        131: "state not recoverable",
        132: "operation not possible due to RF-kill",
-       133: "unknown error 133",
+       133: "memory page has hardware error",
 }
 
 // Signal table
index 887210a..f636a39 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh -m64
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include -m64
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build amd64,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- -m64 _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go
 
 package unix
 
@@ -24,6 +24,7 @@ const (
        AF_DECnet                        = 0xc
        AF_ECONET                        = 0x13
        AF_FILE                          = 0x1
+       AF_IB                            = 0x1b
        AF_IEEE802154                    = 0x24
        AF_INET                          = 0x2
        AF_INET6                         = 0xa
@@ -31,10 +32,12 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x28
+       AF_MAX                           = 0x2b
+       AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
        AF_NETROM                        = 0x6
@@ -42,6 +45,7 @@ const (
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -51,6 +55,7 @@ const (
        AF_TIPC                          = 0x1e
        AF_UNIX                          = 0x1
        AF_UNSPEC                        = 0x0
+       AF_VSOCK                         = 0x28
        AF_WANPIPE                       = 0x19
        AF_X25                           = 0x9
        ALG_OP_DECRYPT                   = 0x0
@@ -60,6 +65,7 @@ const (
        ALG_SET_IV                       = 0x2
        ALG_SET_KEY                      = 0x1
        ALG_SET_OP                       = 0x3
+       ARPHRD_6LOWPAN                   = 0x339
        ARPHRD_ADAPT                     = 0x108
        ARPHRD_APPLETLK                  = 0x8
        ARPHRD_ARCNET                    = 0x7
@@ -94,8 +100,10 @@ const (
        ARPHRD_IEEE80211_PRISM           = 0x322
        ARPHRD_IEEE80211_RADIOTAP        = 0x323
        ARPHRD_IEEE802154                = 0x324
+       ARPHRD_IEEE802154_MONITOR        = 0x325
        ARPHRD_IEEE802_TR                = 0x320
        ARPHRD_INFINIBAND                = 0x20
+       ARPHRD_IP6GRE                    = 0x337
        ARPHRD_IPDDP                     = 0x309
        ARPHRD_IPGRE                     = 0x30a
        ARPHRD_IRDA                      = 0x30f
@@ -103,6 +111,7 @@ const (
        ARPHRD_LOCALTLK                  = 0x305
        ARPHRD_LOOPBACK                  = 0x304
        ARPHRD_METRICOM                  = 0x17
+       ARPHRD_NETLINK                   = 0x338
        ARPHRD_NETROM                    = 0x0
        ARPHRD_NONE                      = 0xfffe
        ARPHRD_PHONET                    = 0x334
@@ -159,6 +168,7 @@ const (
        BLKFRASET                        = 0x1264
        BLKGETSIZE                       = 0x1260
        BLKGETSIZE64                     = 0x80081272
+       BLKPBSZGET                       = 0x127b
        BLKRAGET                         = 0x1263
        BLKRASET                         = 0x1262
        BLKROGET                         = 0x125e
@@ -188,6 +198,7 @@ const (
        BPF_LD                           = 0x0
        BPF_LDX                          = 0x1
        BPF_LEN                          = 0x80
+       BPF_LL_OFF                       = -0x200000
        BPF_LSH                          = 0x60
        BPF_MAJOR_VERSION                = 0x1
        BPF_MAXINSNS                     = 0x1000
@@ -195,9 +206,11 @@ const (
        BPF_MEMWORDS                     = 0x10
        BPF_MINOR_VERSION                = 0x1
        BPF_MISC                         = 0x7
+       BPF_MOD                          = 0x90
        BPF_MSH                          = 0xa0
        BPF_MUL                          = 0x20
        BPF_NEG                          = 0x80
+       BPF_NET_OFF                      = -0x100000
        BPF_OR                           = 0x40
        BPF_RET                          = 0x6
        BPF_RSH                          = 0x70
@@ -208,6 +221,7 @@ const (
        BPF_TXA                          = 0x80
        BPF_W                            = 0x0
        BPF_X                            = 0x8
+       BPF_XOR                          = 0xa0
        BRKINT                           = 0x2
        BS0                              = 0x0
        BS1                              = 0x2000
@@ -226,6 +240,7 @@ const (
        CAN_MTU                          = 0x10
        CAN_NPROTO                       = 0x7
        CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
        CAN_RTR_FLAG                     = 0x40000000
        CAN_SFF_ID_BITS                  = 0xb
        CAN_SFF_MASK                     = 0x7ff
@@ -248,6 +263,7 @@ const (
        CLOCK_REALTIME                   = 0x0
        CLOCK_REALTIME_ALARM             = 0x8
        CLOCK_REALTIME_COARSE            = 0x5
+       CLOCK_TAI                        = 0xb
        CLOCK_THREAD_CPUTIME_ID          = 0x3
        CLOCK_TXFROMRX                   = 0x4
        CLOCK_TXINT                      = 0x3
@@ -317,6 +333,7 @@ const (
        ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
        EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -326,19 +343,22 @@ const (
        EPOLLRDBAND                      = 0x80
        EPOLLRDHUP                       = 0x2000
        EPOLLRDNORM                      = 0x40
+       EPOLLWAKEUP                      = 0x20000000
        EPOLLWRBAND                      = 0x200
        EPOLLWRNORM                      = 0x100
        EPOLL_CLOEXEC                    = 0x80000
        EPOLL_CTL_ADD                    = 0x1
        EPOLL_CTL_DEL                    = 0x2
        EPOLL_CTL_MOD                    = 0x3
-       EPOLL_NONBLOCK                   = 0x800
        ETH_P_1588                       = 0x88f7
        ETH_P_8021AD                     = 0x88a8
        ETH_P_8021AH                     = 0x88e7
        ETH_P_8021Q                      = 0x8100
+       ETH_P_80221                      = 0x8917
        ETH_P_802_2                      = 0x4
        ETH_P_802_3                      = 0x1
+       ETH_P_802_3_MIN                  = 0x600
+       ETH_P_802_EX1                    = 0x88b5
        ETH_P_AARP                       = 0x80f3
        ETH_P_AF_IUCV                    = 0xfbfb
        ETH_P_ALL                        = 0x3
@@ -349,9 +369,11 @@ const (
        ETH_P_ATMFATE                    = 0x8884
        ETH_P_ATMMPOA                    = 0x884c
        ETH_P_AX25                       = 0x2
+       ETH_P_BATMAN                     = 0x4305
        ETH_P_BPQ                        = 0x8ff
        ETH_P_CAIF                       = 0xf7
        ETH_P_CAN                        = 0xc
+       ETH_P_CANFD                      = 0xd
        ETH_P_CONTROL                    = 0x16
        ETH_P_CUST                       = 0x6006
        ETH_P_DDCMP                      = 0x6
@@ -366,6 +388,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -377,9 +400,13 @@ const (
        ETH_P_LINK_CTL                   = 0x886c
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
+       ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
+       ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -387,6 +414,7 @@ const (
        ETH_P_PPP_DISC                   = 0x8863
        ETH_P_PPP_MP                     = 0x8
        ETH_P_PPP_SES                    = 0x8864
+       ETH_P_PRP                        = 0x88fb
        ETH_P_PUP                        = 0x200
        ETH_P_PUPAT                      = 0x201
        ETH_P_QINQ1                      = 0x9100
@@ -401,9 +429,11 @@ const (
        ETH_P_TIPC                       = 0x88ca
        ETH_P_TRAILER                    = 0x1c
        ETH_P_TR_802_2                   = 0x11
+       ETH_P_TSN                        = 0x22f0
        ETH_P_WAN_PPP                    = 0x7
        ETH_P_WCCP                       = 0x883e
        ETH_P_X25                        = 0x805
+       ETH_P_XDSA                       = 0xf8
        EXTA                             = 0xe
        EXTB                             = 0xf
        EXTPROC                          = 0x10000
@@ -412,6 +442,7 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
@@ -419,6 +450,24 @@ const (
        FF1                              = 0x8000
        FFDLY                            = 0x8000
        FLUSHO                           = 0x1000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -433,6 +482,9 @@ const (
        F_GETSIG                         = 0xb
        F_LOCK                           = 0x1
        F_NOTIFY                         = 0x402
+       F_OFD_GETLK                      = 0x24
+       F_OFD_SETLK                      = 0x25
+       F_OFD_SETLKW                     = 0x26
        F_OK                             = 0x0
        F_RDLCK                          = 0x0
        F_SETFD                          = 0x2
@@ -463,57 +515,48 @@ const (
        IFA_F_DADFAILED                  = 0x8
        IFA_F_DEPRECATED                 = 0x20
        IFA_F_HOMEADDRESS                = 0x10
+       IFA_F_MANAGETEMPADDR             = 0x100
+       IFA_F_MCAUTOJOIN                 = 0x400
        IFA_F_NODAD                      = 0x2
+       IFA_F_NOPREFIXROUTE              = 0x200
        IFA_F_OPTIMISTIC                 = 0x4
        IFA_F_PERMANENT                  = 0x80
        IFA_F_SECONDARY                  = 0x1
+       IFA_F_STABLE_PRIVACY             = 0x800
        IFA_F_TEMPORARY                  = 0x1
        IFA_F_TENTATIVE                  = 0x40
-       IFA_MAX                          = 0x7
-       IFF_802_1Q_VLAN                  = 0x1
+       IFA_MAX                          = 0x8
        IFF_ALLMULTI                     = 0x200
+       IFF_ATTACH_QUEUE                 = 0x200
        IFF_AUTOMEDIA                    = 0x4000
-       IFF_BONDING                      = 0x20
-       IFF_BRIDGE_PORT                  = 0x4000
        IFF_BROADCAST                    = 0x2
        IFF_DEBUG                        = 0x4
-       IFF_DISABLE_NETPOLL              = 0x1000
-       IFF_DONT_BRIDGE                  = 0x800
+       IFF_DETACH_QUEUE                 = 0x400
        IFF_DORMANT                      = 0x20000
        IFF_DYNAMIC                      = 0x8000
-       IFF_EBRIDGE                      = 0x2
        IFF_ECHO                         = 0x40000
-       IFF_ISATAP                       = 0x80
        IFF_LOOPBACK                     = 0x8
        IFF_LOWER_UP                     = 0x10000
-       IFF_MACVLAN_PORT                 = 0x2000
        IFF_MASTER                       = 0x400
-       IFF_MASTER_8023AD                = 0x8
-       IFF_MASTER_ALB                   = 0x10
-       IFF_MASTER_ARPMON                = 0x100
        IFF_MULTICAST                    = 0x1000
+       IFF_MULTI_QUEUE                  = 0x100
        IFF_NOARP                        = 0x80
+       IFF_NOFILTER                     = 0x1000
        IFF_NOTRAILERS                   = 0x20
        IFF_NO_PI                        = 0x1000
        IFF_ONE_QUEUE                    = 0x2000
-       IFF_OVS_DATAPATH                 = 0x8000
+       IFF_PERSIST                      = 0x800
        IFF_POINTOPOINT                  = 0x10
        IFF_PORTSEL                      = 0x2000
        IFF_PROMISC                      = 0x100
        IFF_RUNNING                      = 0x40
        IFF_SLAVE                        = 0x800
-       IFF_SLAVE_INACTIVE               = 0x4
-       IFF_SLAVE_NEEDARP                = 0x40
        IFF_TAP                          = 0x2
        IFF_TUN                          = 0x1
        IFF_TUN_EXCL                     = 0x8000
-       IFF_TX_SKB_SHARING               = 0x10000
-       IFF_UNICAST_FLT                  = 0x20000
        IFF_UP                           = 0x1
        IFF_VNET_HDR                     = 0x4000
        IFF_VOLATILE                     = 0x70c5a
-       IFF_WAN_HDLC                     = 0x200
-       IFF_XMIT_DST_RELEASE             = 0x400
        IFNAMSIZ                         = 0x10
        IGNBRK                           = 0x1
        IGNCR                            = 0x80
@@ -560,6 +603,7 @@ const (
        IN_Q_OVERFLOW                    = 0x4000
        IN_UNMOUNT                       = 0x2000
        IPPROTO_AH                       = 0x33
+       IPPROTO_BEETPH                   = 0x5e
        IPPROTO_COMP                     = 0x6c
        IPPROTO_DCCP                     = 0x21
        IPPROTO_DSTOPTS                  = 0x3c
@@ -576,6 +620,8 @@ const (
        IPPROTO_IP                       = 0x0
        IPPROTO_IPIP                     = 0x4
        IPPROTO_IPV6                     = 0x29
+       IPPROTO_MH                       = 0x87
+       IPPROTO_MPLS                     = 0x89
        IPPROTO_MTP                      = 0x5c
        IPPROTO_NONE                     = 0x3b
        IPPROTO_PIM                      = 0x67
@@ -598,8 +644,10 @@ const (
        IPV6_ADD_MEMBERSHIP              = 0x14
        IPV6_AUTHHDR                     = 0xa
        IPV6_CHECKSUM                    = 0x7
+       IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -613,15 +661,19 @@ const (
        IPV6_MULTICAST_IF                = 0x11
        IPV6_MULTICAST_LOOP              = 0x13
        IPV6_NEXTHOP                     = 0x9
+       IPV6_PATHMTU                     = 0x3d
        IPV6_PKTINFO                     = 0x32
        IPV6_PMTUDISC_DO                 = 0x2
        IPV6_PMTUDISC_DONT               = 0x0
+       IPV6_PMTUDISC_INTERFACE          = 0x4
+       IPV6_PMTUDISC_OMIT               = 0x5
        IPV6_PMTUDISC_PROBE              = 0x3
        IPV6_PMTUDISC_WANT               = 0x1
        IPV6_RECVDSTOPTS                 = 0x3a
        IPV6_RECVERR                     = 0x19
        IPV6_RECVHOPLIMIT                = 0x33
        IPV6_RECVHOPOPTS                 = 0x35
+       IPV6_RECVPATHMTU                 = 0x3c
        IPV6_RECVPKTINFO                 = 0x31
        IPV6_RECVRTHDR                   = 0x38
        IPV6_RECVTCLASS                  = 0x42
@@ -639,7 +691,9 @@ const (
        IPV6_XFRM_POLICY                 = 0x23
        IP_ADD_MEMBERSHIP                = 0x23
        IP_ADD_SOURCE_MEMBERSHIP         = 0x27
+       IP_BIND_ADDRESS_NO_PORT          = 0x18
        IP_BLOCK_SOURCE                  = 0x26
+       IP_CHECKSUM                      = 0x17
        IP_DEFAULT_MULTICAST_LOOP        = 0x1
        IP_DEFAULT_MULTICAST_TTL         = 0x1
        IP_DF                            = 0x4000
@@ -660,6 +714,7 @@ const (
        IP_MULTICAST_IF                  = 0x20
        IP_MULTICAST_LOOP                = 0x22
        IP_MULTICAST_TTL                 = 0x21
+       IP_NODEFRAG                      = 0x16
        IP_OFFMASK                       = 0x1fff
        IP_OPTIONS                       = 0x4
        IP_ORIGDSTADDR                   = 0x14
@@ -669,6 +724,8 @@ const (
        IP_PMTUDISC                      = 0xa
        IP_PMTUDISC_DO                   = 0x2
        IP_PMTUDISC_DONT                 = 0x0
+       IP_PMTUDISC_INTERFACE            = 0x4
+       IP_PMTUDISC_OMIT                 = 0x5
        IP_PMTUDISC_PROBE                = 0x3
        IP_PMTUDISC_WANT                 = 0x1
        IP_RECVERR                       = 0xb
@@ -684,6 +741,7 @@ const (
        IP_TRANSPARENT                   = 0x13
        IP_TTL                           = 0x2
        IP_UNBLOCK_SOURCE                = 0x25
+       IP_UNICAST_IF                    = 0x32
        IP_XFRM_POLICY                   = 0x11
        ISIG                             = 0x1
        ISTRIP                           = 0x20
@@ -706,9 +764,12 @@ const (
        LOCK_NB                          = 0x4
        LOCK_SH                          = 0x1
        LOCK_UN                          = 0x8
+       MADV_DODUMP                      = 0x11
        MADV_DOFORK                      = 0xb
+       MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -728,6 +789,8 @@ const (
        MAP_FIXED                        = 0x10
        MAP_GROWSDOWN                    = 0x100
        MAP_HUGETLB                      = 0x40000
+       MAP_HUGE_MASK                    = 0x3f
+       MAP_HUGE_SHIFT                   = 0x1a
        MAP_LOCKED                       = 0x2000
        MAP_NONBLOCK                     = 0x10000
        MAP_NORESERVE                    = 0x4000
@@ -738,9 +801,11 @@ const (
        MAP_TYPE                         = 0xf
        MCL_CURRENT                      = 0x1
        MCL_FUTURE                       = 0x2
+       MCL_ONFAULT                      = 0x4
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -764,10 +829,12 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
        MS_KERNMOUNT                     = 0x400000
+       MS_LAZYTIME                      = 0x2000000
        MS_MANDLOCK                      = 0x40
        MS_MGC_MSK                       = 0xffff0000
        MS_MGC_VAL                       = 0xc0ed0000
@@ -776,6 +843,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -784,7 +853,7 @@ const (
        MS_REC                           = 0x4000
        MS_RELATIME                      = 0x200000
        MS_REMOUNT                       = 0x20
-       MS_RMT_MASK                      = 0x800051
+       MS_RMT_MASK                      = 0x2800051
        MS_SHARED                        = 0x100000
        MS_SILENT                        = 0x8000
        MS_SLAVE                         = 0x80000
@@ -792,6 +861,7 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
@@ -892,13 +962,21 @@ const (
        PACKET_COPY_THRESH               = 0x7
        PACKET_DROP_MEMBERSHIP           = 0x2
        PACKET_FANOUT                    = 0x12
+       PACKET_FANOUT_CBPF               = 0x6
        PACKET_FANOUT_CPU                = 0x2
+       PACKET_FANOUT_DATA               = 0x16
+       PACKET_FANOUT_EBPF               = 0x7
        PACKET_FANOUT_FLAG_DEFRAG        = 0x8000
+       PACKET_FANOUT_FLAG_ROLLOVER      = 0x1000
        PACKET_FANOUT_HASH               = 0x0
        PACKET_FANOUT_LB                 = 0x1
+       PACKET_FANOUT_QM                 = 0x5
+       PACKET_FANOUT_RND                = 0x4
+       PACKET_FANOUT_ROLLOVER           = 0x3
        PACKET_FASTROUTE                 = 0x6
        PACKET_HDRLEN                    = 0xb
        PACKET_HOST                      = 0x0
+       PACKET_KERNEL                    = 0x7
        PACKET_LOOPBACK                  = 0x5
        PACKET_LOSS                      = 0xe
        PACKET_MR_ALLMULTI               = 0x2
@@ -909,13 +987,17 @@ const (
        PACKET_ORIGDEV                   = 0x9
        PACKET_OTHERHOST                 = 0x3
        PACKET_OUTGOING                  = 0x4
+       PACKET_QDISC_BYPASS              = 0x14
        PACKET_RECV_OUTPUT               = 0x3
        PACKET_RESERVE                   = 0xc
+       PACKET_ROLLOVER_STATS            = 0x15
        PACKET_RX_RING                   = 0x5
        PACKET_STATISTICS                = 0x6
        PACKET_TIMESTAMP                 = 0x11
+       PACKET_TX_HAS_OFF                = 0x13
        PACKET_TX_RING                   = 0xd
        PACKET_TX_TIMESTAMP              = 0x10
+       PACKET_USER                      = 0x6
        PACKET_VERSION                   = 0xa
        PACKET_VNET_HDR                  = 0xf
        PARENB                           = 0x100
@@ -941,6 +1023,11 @@ const (
        PROT_WRITE                       = 0x2
        PR_CAPBSET_DROP                  = 0x18
        PR_CAPBSET_READ                  = 0x17
+       PR_CAP_AMBIENT                   = 0x2f
+       PR_CAP_AMBIENT_CLEAR_ALL         = 0x4
+       PR_CAP_AMBIENT_IS_SET            = 0x1
+       PR_CAP_AMBIENT_LOWER             = 0x3
+       PR_CAP_AMBIENT_RAISE             = 0x2
        PR_ENDIAN_BIG                    = 0x0
        PR_ENDIAN_LITTLE                 = 0x1
        PR_ENDIAN_PPC_LITTLE             = 0x2
@@ -956,16 +1043,22 @@ const (
        PR_FP_EXC_RES                    = 0x80000
        PR_FP_EXC_SW_ENABLE              = 0x80
        PR_FP_EXC_UND                    = 0x40000
+       PR_FP_MODE_FR                    = 0x1
+       PR_FP_MODE_FRE                   = 0x2
+       PR_GET_CHILD_SUBREAPER           = 0x25
        PR_GET_DUMPABLE                  = 0x3
        PR_GET_ENDIAN                    = 0x13
        PR_GET_FPEMU                     = 0x9
        PR_GET_FPEXC                     = 0xb
+       PR_GET_FP_MODE                   = 0x2e
        PR_GET_KEEPCAPS                  = 0x7
        PR_GET_NAME                      = 0x10
        PR_GET_NO_NEW_PRIVS              = 0x27
        PR_GET_PDEATHSIG                 = 0x2
        PR_GET_SECCOMP                   = 0x15
        PR_GET_SECUREBITS                = 0x1b
+       PR_GET_THP_DISABLE               = 0x2a
+       PR_GET_TID_ADDRESS               = 0x28
        PR_GET_TIMERSLACK                = 0x1e
        PR_GET_TIMING                    = 0xd
        PR_GET_TSC                       = 0x19
@@ -977,15 +1070,27 @@ const (
        PR_MCE_KILL_GET                  = 0x22
        PR_MCE_KILL_LATE                 = 0x0
        PR_MCE_KILL_SET                  = 0x1
+       PR_MPX_DISABLE_MANAGEMENT        = 0x2c
+       PR_MPX_ENABLE_MANAGEMENT         = 0x2b
+       PR_SET_CHILD_SUBREAPER           = 0x24
        PR_SET_DUMPABLE                  = 0x4
        PR_SET_ENDIAN                    = 0x14
        PR_SET_FPEMU                     = 0xa
        PR_SET_FPEXC                     = 0xc
+       PR_SET_FP_MODE                   = 0x2d
        PR_SET_KEEPCAPS                  = 0x8
        PR_SET_MM                        = 0x23
+       PR_SET_MM_ARG_END                = 0x9
+       PR_SET_MM_ARG_START              = 0x8
+       PR_SET_MM_AUXV                   = 0xc
        PR_SET_MM_BRK                    = 0x7
        PR_SET_MM_END_CODE               = 0x2
        PR_SET_MM_END_DATA               = 0x4
+       PR_SET_MM_ENV_END                = 0xb
+       PR_SET_MM_ENV_START              = 0xa
+       PR_SET_MM_EXE_FILE               = 0xd
+       PR_SET_MM_MAP                    = 0xe
+       PR_SET_MM_MAP_SIZE               = 0xf
        PR_SET_MM_START_BRK              = 0x6
        PR_SET_MM_START_CODE             = 0x1
        PR_SET_MM_START_DATA             = 0x3
@@ -997,6 +1102,7 @@ const (
        PR_SET_PTRACER_ANY               = -0x1
        PR_SET_SECCOMP                   = 0x16
        PR_SET_SECUREBITS                = 0x1c
+       PR_SET_THP_DISABLE               = 0x29
        PR_SET_TIMERSLACK                = 0x1d
        PR_SET_TIMING                    = 0xe
        PR_SET_TSC                       = 0x1a
@@ -1027,12 +1133,15 @@ const (
        PTRACE_GETREGS                   = 0xc
        PTRACE_GETREGSET                 = 0x4204
        PTRACE_GETSIGINFO                = 0x4202
+       PTRACE_GETSIGMASK                = 0x420a
        PTRACE_GET_THREAD_AREA           = 0x19
        PTRACE_INTERRUPT                 = 0x4207
        PTRACE_KILL                      = 0x8
        PTRACE_LISTEN                    = 0x4208
        PTRACE_OLDSETOPTIONS             = 0x15
-       PTRACE_O_MASK                    = 0xff
+       PTRACE_O_EXITKILL                = 0x100000
+       PTRACE_O_MASK                    = 0x3000ff
+       PTRACE_O_SUSPEND_SECCOMP         = 0x200000
        PTRACE_O_TRACECLONE              = 0x8
        PTRACE_O_TRACEEXEC               = 0x10
        PTRACE_O_TRACEEXIT               = 0x40
@@ -1042,19 +1151,22 @@ const (
        PTRACE_O_TRACEVFORK              = 0x4
        PTRACE_O_TRACEVFORKDONE          = 0x20
        PTRACE_PEEKDATA                  = 0x2
+       PTRACE_PEEKSIGINFO               = 0x4209
+       PTRACE_PEEKSIGINFO_SHARED        = 0x1
        PTRACE_PEEKTEXT                  = 0x1
        PTRACE_PEEKUSR                   = 0x3
        PTRACE_POKEDATA                  = 0x5
        PTRACE_POKETEXT                  = 0x4
        PTRACE_POKEUSR                   = 0x6
+       PTRACE_SECCOMP_GET_FILTER        = 0x420c
        PTRACE_SEIZE                     = 0x4206
-       PTRACE_SEIZE_DEVEL               = 0x80000000
        PTRACE_SETFPREGS                 = 0xf
        PTRACE_SETFPXREGS                = 0x13
        PTRACE_SETOPTIONS                = 0x4200
        PTRACE_SETREGS                   = 0xd
        PTRACE_SETREGSET                 = 0x4205
        PTRACE_SETSIGINFO                = 0x4203
+       PTRACE_SETSIGMASK                = 0x420b
        PTRACE_SET_THREAD_AREA           = 0x1a
        PTRACE_SINGLEBLOCK               = 0x21
        PTRACE_SINGLESTEP                = 0x9
@@ -1071,18 +1183,21 @@ const (
        RLIMIT_STACK                     = 0x3
        RLIM_INFINITY                    = -0x1
        RTAX_ADVMSS                      = 0x8
+       RTAX_CC_ALGO                     = 0x10
        RTAX_CWND                        = 0x7
        RTAX_FEATURES                    = 0xc
        RTAX_FEATURE_ALLFRAG             = 0x8
        RTAX_FEATURE_ECN                 = 0x1
+       RTAX_FEATURE_MASK                = 0xf
        RTAX_FEATURE_SACK                = 0x2
        RTAX_FEATURE_TIMESTAMP           = 0x4
        RTAX_HOPLIMIT                    = 0xa
        RTAX_INITCWND                    = 0xb
        RTAX_INITRWND                    = 0xe
        RTAX_LOCK                        = 0x1
-       RTAX_MAX                         = 0xe
+       RTAX_MAX                         = 0x10
        RTAX_MTU                         = 0x2
+       RTAX_QUICKACK                    = 0xf
        RTAX_REORDERING                  = 0x9
        RTAX_RTO_MIN                     = 0xd
        RTAX_RTT                         = 0x4
@@ -1091,7 +1206,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x10
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1133,7 +1248,9 @@ const (
        RTM_DELADDR                      = 0x15
        RTM_DELADDRLABEL                 = 0x49
        RTM_DELLINK                      = 0x11
+       RTM_DELMDB                       = 0x55
        RTM_DELNEIGH                     = 0x1d
+       RTM_DELNSID                      = 0x59
        RTM_DELQDISC                     = 0x25
        RTM_DELROUTE                     = 0x19
        RTM_DELRULE                      = 0x21
@@ -1141,6 +1258,7 @@ const (
        RTM_DELTFILTER                   = 0x2d
        RTM_F_CLONED                     = 0x200
        RTM_F_EQUALIZE                   = 0x400
+       RTM_F_LOOKUP_TABLE               = 0x1000
        RTM_F_NOTIFY                     = 0x100
        RTM_F_PREFIX                     = 0x800
        RTM_GETACTION                    = 0x32
@@ -1149,44 +1267,57 @@ const (
        RTM_GETANYCAST                   = 0x3e
        RTM_GETDCB                       = 0x4e
        RTM_GETLINK                      = 0x12
+       RTM_GETMDB                       = 0x56
        RTM_GETMULTICAST                 = 0x3a
        RTM_GETNEIGH                     = 0x1e
        RTM_GETNEIGHTBL                  = 0x42
+       RTM_GETNETCONF                   = 0x52
+       RTM_GETNSID                      = 0x5a
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x4f
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
        RTM_NEWLINK                      = 0x10
+       RTM_NEWMDB                       = 0x54
        RTM_NEWNDUSEROPT                 = 0x44
        RTM_NEWNEIGH                     = 0x1c
        RTM_NEWNEIGHTBL                  = 0x40
+       RTM_NEWNETCONF                   = 0x50
+       RTM_NEWNSID                      = 0x58
        RTM_NEWPREFIX                    = 0x34
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x10
-       RTM_NR_MSGTYPES                  = 0x40
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
+       RTNH_F_LINKDOWN                  = 0x10
+       RTNH_F_OFFLOAD                   = 0x8
        RTNH_F_ONLINK                    = 0x4
        RTNH_F_PERVASIVE                 = 0x2
        RTN_MAX                          = 0xb
+       RTPROT_BABEL                     = 0x2a
        RTPROT_BIRD                      = 0xc
        RTPROT_BOOT                      = 0x3
        RTPROT_DHCP                      = 0x10
        RTPROT_DNROUTED                  = 0xd
        RTPROT_GATED                     = 0x8
        RTPROT_KERNEL                    = 0x2
+       RTPROT_MROUTED                   = 0x11
        RTPROT_MRT                       = 0xa
        RTPROT_NTK                       = 0xf
        RTPROT_RA                        = 0x9
@@ -1207,7 +1338,9 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
+       SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
        SHUT_RDWR                        = 0x2
        SHUT_WR                          = 0x1
@@ -1279,36 +1412,63 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x1
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
+       SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0x1
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1e
+       SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
+       SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x6
        SO_BSDCOMPAT                     = 0xe
+       SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
+       SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
        SO_DOMAIN                        = 0x27
        SO_DONTROUTE                     = 0x5
        SO_ERROR                         = 0x4
+       SO_GET_FILTER                    = 0x1a
+       SO_INCOMING_CPU                  = 0x31
        SO_KEEPALIVE                     = 0x9
        SO_LINGER                        = 0xd
+       SO_LOCK_FILTER                   = 0x2c
        SO_MARK                          = 0x24
+       SO_MAX_PACING_RATE               = 0x2f
+       SO_NOFCS                         = 0x2b
        SO_NO_CHECK                      = 0xb
        SO_OOBINLINE                     = 0xa
        SO_PASSCRED                      = 0x10
        SO_PASSSEC                       = 0x22
+       SO_PEEK_OFF                      = 0x2a
        SO_PEERCRED                      = 0x11
        SO_PEERNAME                      = 0x1c
        SO_PEERSEC                       = 0x1f
@@ -1319,10 +1479,12 @@ const (
        SO_RCVLOWAT                      = 0x12
        SO_RCVTIMEO                      = 0x14
        SO_REUSEADDR                     = 0x2
+       SO_REUSEPORT                     = 0xf
        SO_RXQ_OVFL                      = 0x28
        SO_SECURITY_AUTHENTICATION       = 0x16
        SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
        SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
+       SO_SELECT_ERR_QUEUE              = 0x2d
        SO_SNDBUF                        = 0x7
        SO_SNDBUFFORCE                   = 0x20
        SO_SNDLOWAT                      = 0x13
@@ -1331,6 +1493,14 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x3
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
+       SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
        SPLICE_F_MOVE                    = 0x1
@@ -1379,9 +1549,17 @@ const (
        TCOFLUSH                         = 0x1
        TCOOFF                           = 0x0
        TCOON                            = 0x1
+       TCP_CC_INFO                      = 0x1a
        TCP_CONGESTION                   = 0xd
+       TCP_COOKIE_IN_ALWAYS             = 0x1
+       TCP_COOKIE_MAX                   = 0x10
+       TCP_COOKIE_MIN                   = 0x8
+       TCP_COOKIE_OUT_NEVER             = 0x2
+       TCP_COOKIE_PAIR_SIZE             = 0x20
+       TCP_COOKIE_TRANSACTIONS          = 0xf
        TCP_CORK                         = 0x3
        TCP_DEFER_ACCEPT                 = 0x9
+       TCP_FASTOPEN                     = 0x17
        TCP_INFO                         = 0xb
        TCP_KEEPCNT                      = 0x6
        TCP_KEEPIDLE                     = 0x4
@@ -1393,9 +1571,25 @@ const (
        TCP_MD5SIG                       = 0xe
        TCP_MD5SIG_MAXKEYLEN             = 0x50
        TCP_MSS                          = 0x200
+       TCP_MSS_DEFAULT                  = 0x218
+       TCP_MSS_DESIRED                  = 0x4c4
        TCP_NODELAY                      = 0x1
+       TCP_NOTSENT_LOWAT                = 0x19
+       TCP_QUEUE_SEQ                    = 0x15
        TCP_QUICKACK                     = 0xc
+       TCP_REPAIR                       = 0x13
+       TCP_REPAIR_OPTIONS               = 0x16
+       TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
+       TCP_SAVED_SYN                    = 0x1c
+       TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
+       TCP_S_DATA_IN                    = 0x4
+       TCP_S_DATA_OUT                   = 0x8
+       TCP_THIN_DUPACK                  = 0x11
+       TCP_THIN_LINEAR_TIMEOUTS         = 0x10
+       TCP_TIMESTAMP                    = 0x18
+       TCP_USER_TIMEOUT                 = 0x12
        TCP_WINDOW_CLAMP                 = 0xa
        TCSAFLUSH                        = 0x2
        TCSBRK                           = 0x5409
@@ -1485,20 +1679,27 @@ const (
        TUNATTACHFILTER                  = 0x401054d5
        TUNDETACHFILTER                  = 0x401054d6
        TUNGETFEATURES                   = 0x800454cf
+       TUNGETFILTER                     = 0x801054db
        TUNGETIFF                        = 0x800454d2
        TUNGETSNDBUF                     = 0x800454d3
+       TUNGETVNETBE                     = 0x800454df
        TUNGETVNETHDRSZ                  = 0x800454d7
+       TUNGETVNETLE                     = 0x800454dd
        TUNSETDEBUG                      = 0x400454c9
        TUNSETGROUP                      = 0x400454ce
        TUNSETIFF                        = 0x400454ca
+       TUNSETIFINDEX                    = 0x400454da
        TUNSETLINK                       = 0x400454cd
        TUNSETNOCSUM                     = 0x400454c8
        TUNSETOFFLOAD                    = 0x400454d0
        TUNSETOWNER                      = 0x400454cc
        TUNSETPERSIST                    = 0x400454cb
+       TUNSETQUEUE                      = 0x400454d9
        TUNSETSNDBUF                     = 0x400454d4
        TUNSETTXFILTER                   = 0x400454d1
+       TUNSETVNETBE                     = 0x400454de
        TUNSETVNETHDRSZ                  = 0x400454d8
+       TUNSETVNETLE                     = 0x400454dc
        VDISCARD                         = 0xd
        VEOF                             = 0x4
        VEOL                             = 0xb
@@ -1507,7 +1708,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x6
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
        VSTART                           = 0x8
@@ -1825,7 +2032,7 @@ var errors = [...]string{
        113: "no route to host",
        114: "operation already in progress",
        115: "operation now in progress",
-       116: "stale NFS file handle",
+       116: "stale file handle",
        117: "structure needs cleaning",
        118: "not a XENIX named type file",
        119: "no XENIX semaphores available",
@@ -1842,7 +2049,7 @@ var errors = [...]string{
        130: "owner died",
        131: "state not recoverable",
        132: "operation not possible due to RF-kill",
-       133: "unknown error 133",
+       133: "memory page has hardware error",
 }
 
 // Signal table
index f691747..986a947 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build arm,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
 
 package unix
 
@@ -24,6 +24,7 @@ const (
        AF_DECnet                        = 0xc
        AF_ECONET                        = 0x13
        AF_FILE                          = 0x1
+       AF_IB                            = 0x1b
        AF_IEEE802154                    = 0x24
        AF_INET                          = 0x2
        AF_INET6                         = 0xa
@@ -31,16 +32,20 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x27
+       AF_MAX                           = 0x2b
+       AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
        AF_NETROM                        = 0x6
+       AF_NFC                           = 0x27
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -50,6 +55,7 @@ const (
        AF_TIPC                          = 0x1e
        AF_UNIX                          = 0x1
        AF_UNSPEC                        = 0x0
+       AF_VSOCK                         = 0x28
        AF_WANPIPE                       = 0x19
        AF_X25                           = 0x9
        ALG_OP_DECRYPT                   = 0x0
@@ -59,6 +65,7 @@ const (
        ALG_SET_IV                       = 0x2
        ALG_SET_KEY                      = 0x1
        ALG_SET_OP                       = 0x3
+       ARPHRD_6LOWPAN                   = 0x339
        ARPHRD_ADAPT                     = 0x108
        ARPHRD_APPLETLK                  = 0x8
        ARPHRD_ARCNET                    = 0x7
@@ -66,6 +73,8 @@ const (
        ARPHRD_ATM                       = 0x13
        ARPHRD_AX25                      = 0x3
        ARPHRD_BIF                       = 0x307
+       ARPHRD_CAIF                      = 0x336
+       ARPHRD_CAN                       = 0x118
        ARPHRD_CHAOS                     = 0x5
        ARPHRD_CISCO                     = 0x201
        ARPHRD_CSLIP                     = 0x101
@@ -91,9 +100,10 @@ const (
        ARPHRD_IEEE80211_PRISM           = 0x322
        ARPHRD_IEEE80211_RADIOTAP        = 0x323
        ARPHRD_IEEE802154                = 0x324
-       ARPHRD_IEEE802154_PHY            = 0x325
+       ARPHRD_IEEE802154_MONITOR        = 0x325
        ARPHRD_IEEE802_TR                = 0x320
        ARPHRD_INFINIBAND                = 0x20
+       ARPHRD_IP6GRE                    = 0x337
        ARPHRD_IPDDP                     = 0x309
        ARPHRD_IPGRE                     = 0x30a
        ARPHRD_IRDA                      = 0x30f
@@ -101,8 +111,11 @@ const (
        ARPHRD_LOCALTLK                  = 0x305
        ARPHRD_LOOPBACK                  = 0x304
        ARPHRD_METRICOM                  = 0x17
+       ARPHRD_NETLINK                   = 0x338
        ARPHRD_NETROM                    = 0x0
        ARPHRD_NONE                      = 0xfffe
+       ARPHRD_PHONET                    = 0x334
+       ARPHRD_PHONET_PIPE               = 0x335
        ARPHRD_PIMREG                    = 0x30b
        ARPHRD_PPP                       = 0x200
        ARPHRD_PRONET                    = 0x4
@@ -148,13 +161,14 @@ const (
        B75                              = 0x2
        B921600                          = 0x1007
        B9600                            = 0xd
-       BLKBSZGET                        = 0x80081270
-       BLKBSZSET                        = 0x40081271
+       BLKBSZGET                        = 0x80041270
+       BLKBSZSET                        = 0x40041271
        BLKFLSBUF                        = 0x1261
        BLKFRAGET                        = 0x1265
        BLKFRASET                        = 0x1264
        BLKGETSIZE                       = 0x1260
-       BLKGETSIZE64                     = 0x80081272
+       BLKGETSIZE64                     = 0x80041272
+       BLKPBSZGET                       = 0x127b
        BLKRAGET                         = 0x1263
        BLKRASET                         = 0x1262
        BLKROGET                         = 0x125e
@@ -184,6 +198,7 @@ const (
        BPF_LD                           = 0x0
        BPF_LDX                          = 0x1
        BPF_LEN                          = 0x80
+       BPF_LL_OFF                       = -0x200000
        BPF_LSH                          = 0x60
        BPF_MAJOR_VERSION                = 0x1
        BPF_MAXINSNS                     = 0x1000
@@ -191,9 +206,11 @@ const (
        BPF_MEMWORDS                     = 0x10
        BPF_MINOR_VERSION                = 0x1
        BPF_MISC                         = 0x7
+       BPF_MOD                          = 0x90
        BPF_MSH                          = 0xa0
        BPF_MUL                          = 0x20
        BPF_NEG                          = 0x80
+       BPF_NET_OFF                      = -0x100000
        BPF_OR                           = 0x40
        BPF_RET                          = 0x6
        BPF_RSH                          = 0x70
@@ -204,6 +221,7 @@ const (
        BPF_TXA                          = 0x80
        BPF_W                            = 0x0
        BPF_X                            = 0x8
+       BPF_XOR                          = 0xa0
        BRKINT                           = 0x2
        BS0                              = 0x0
        BS1                              = 0x2000
@@ -222,6 +240,7 @@ const (
        CAN_MTU                          = 0x10
        CAN_NPROTO                       = 0x7
        CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
        CAN_RTR_FLAG                     = 0x40000000
        CAN_SFF_ID_BITS                  = 0xb
        CAN_SFF_MASK                     = 0x7ff
@@ -244,6 +263,7 @@ const (
        CLOCK_REALTIME                   = 0x0
        CLOCK_REALTIME_ALARM             = 0x8
        CLOCK_REALTIME_COARSE            = 0x5
+       CLOCK_TAI                        = 0xb
        CLOCK_THREAD_CPUTIME_ID          = 0x3
        CLOCK_TXFROMRX                   = 0x4
        CLOCK_TXINT                      = 0x3
@@ -298,8 +318,6 @@ const (
        DT_SOCK                          = 0xc
        DT_UNKNOWN                       = 0x0
        DT_WHT                           = 0xe
-       ELF_NGREG                        = 0x12
-       ELF_PRARGSZ                      = 0x50
        ECHO                             = 0x8
        ECHOCTL                          = 0x200
        ECHOE                            = 0x10
@@ -307,8 +325,15 @@ const (
        ECHOKE                           = 0x800
        ECHONL                           = 0x40
        ECHOPRT                          = 0x400
+       ENCODING_DEFAULT                 = 0x0
+       ENCODING_FM_MARK                 = 0x3
+       ENCODING_FM_SPACE                = 0x4
+       ENCODING_MANCHESTER              = 0x5
+       ENCODING_NRZ                     = 0x1
+       ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
-       EPOLLET                          = -0x80000000
+       EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -318,18 +343,24 @@ const (
        EPOLLRDBAND                      = 0x80
        EPOLLRDHUP                       = 0x2000
        EPOLLRDNORM                      = 0x40
+       EPOLLWAKEUP                      = 0x20000000
        EPOLLWRBAND                      = 0x200
        EPOLLWRNORM                      = 0x100
        EPOLL_CLOEXEC                    = 0x80000
        EPOLL_CTL_ADD                    = 0x1
        EPOLL_CTL_DEL                    = 0x2
        EPOLL_CTL_MOD                    = 0x3
-       EPOLL_NONBLOCK                   = 0x800
        ETH_P_1588                       = 0x88f7
+       ETH_P_8021AD                     = 0x88a8
+       ETH_P_8021AH                     = 0x88e7
        ETH_P_8021Q                      = 0x8100
+       ETH_P_80221                      = 0x8917
        ETH_P_802_2                      = 0x4
        ETH_P_802_3                      = 0x1
+       ETH_P_802_3_MIN                  = 0x600
+       ETH_P_802_EX1                    = 0x88b5
        ETH_P_AARP                       = 0x80f3
+       ETH_P_AF_IUCV                    = 0xfbfb
        ETH_P_ALL                        = 0x3
        ETH_P_AOE                        = 0x88a2
        ETH_P_ARCNET                     = 0x1a
@@ -338,9 +369,11 @@ const (
        ETH_P_ATMFATE                    = 0x8884
        ETH_P_ATMMPOA                    = 0x884c
        ETH_P_AX25                       = 0x2
+       ETH_P_BATMAN                     = 0x4305
        ETH_P_BPQ                        = 0x8ff
        ETH_P_CAIF                       = 0xf7
        ETH_P_CAN                        = 0xc
+       ETH_P_CANFD                      = 0xd
        ETH_P_CONTROL                    = 0x16
        ETH_P_CUST                       = 0x6006
        ETH_P_DDCMP                      = 0x6
@@ -355,6 +388,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -366,9 +400,13 @@ const (
        ETH_P_LINK_CTL                   = 0x886c
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
+       ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
+       ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -376,19 +414,26 @@ const (
        ETH_P_PPP_DISC                   = 0x8863
        ETH_P_PPP_MP                     = 0x8
        ETH_P_PPP_SES                    = 0x8864
+       ETH_P_PRP                        = 0x88fb
        ETH_P_PUP                        = 0x200
        ETH_P_PUPAT                      = 0x201
+       ETH_P_QINQ1                      = 0x9100
+       ETH_P_QINQ2                      = 0x9200
+       ETH_P_QINQ3                      = 0x9300
        ETH_P_RARP                       = 0x8035
        ETH_P_SCA                        = 0x6007
        ETH_P_SLOW                       = 0x8809
        ETH_P_SNAP                       = 0x5
+       ETH_P_TDLS                       = 0x890d
        ETH_P_TEB                        = 0x6558
        ETH_P_TIPC                       = 0x88ca
        ETH_P_TRAILER                    = 0x1c
        ETH_P_TR_802_2                   = 0x11
+       ETH_P_TSN                        = 0x22f0
        ETH_P_WAN_PPP                    = 0x7
        ETH_P_WCCP                       = 0x883e
        ETH_P_X25                        = 0x805
+       ETH_P_XDSA                       = 0xf8
        EXTA                             = 0xe
        EXTB                             = 0xf
        EXTPROC                          = 0x10000
@@ -397,6 +442,7 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
@@ -404,6 +450,24 @@ const (
        FF1                              = 0x8000
        FFDLY                            = 0x8000
        FLUSHO                           = 0x1000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -418,6 +482,9 @@ const (
        F_GETSIG                         = 0xb
        F_LOCK                           = 0x1
        F_NOTIFY                         = 0x402
+       F_OFD_GETLK                      = 0x24
+       F_OFD_SETLK                      = 0x25
+       F_OFD_SETLKW                     = 0x26
        F_OK                             = 0x0
        F_RDLCK                          = 0x0
        F_SETFD                          = 0x2
@@ -448,25 +515,37 @@ const (
        IFA_F_DADFAILED                  = 0x8
        IFA_F_DEPRECATED                 = 0x20
        IFA_F_HOMEADDRESS                = 0x10
+       IFA_F_MANAGETEMPADDR             = 0x100
+       IFA_F_MCAUTOJOIN                 = 0x400
        IFA_F_NODAD                      = 0x2
+       IFA_F_NOPREFIXROUTE              = 0x200
        IFA_F_OPTIMISTIC                 = 0x4
        IFA_F_PERMANENT                  = 0x80
        IFA_F_SECONDARY                  = 0x1
+       IFA_F_STABLE_PRIVACY             = 0x800
        IFA_F_TEMPORARY                  = 0x1
        IFA_F_TENTATIVE                  = 0x40
-       IFA_MAX                          = 0x7
+       IFA_MAX                          = 0x8
        IFF_ALLMULTI                     = 0x200
+       IFF_ATTACH_QUEUE                 = 0x200
        IFF_AUTOMEDIA                    = 0x4000
        IFF_BROADCAST                    = 0x2
        IFF_DEBUG                        = 0x4
+       IFF_DETACH_QUEUE                 = 0x400
+       IFF_DORMANT                      = 0x20000
        IFF_DYNAMIC                      = 0x8000
+       IFF_ECHO                         = 0x40000
        IFF_LOOPBACK                     = 0x8
+       IFF_LOWER_UP                     = 0x10000
        IFF_MASTER                       = 0x400
        IFF_MULTICAST                    = 0x1000
+       IFF_MULTI_QUEUE                  = 0x100
        IFF_NOARP                        = 0x80
+       IFF_NOFILTER                     = 0x1000
        IFF_NOTRAILERS                   = 0x20
        IFF_NO_PI                        = 0x1000
        IFF_ONE_QUEUE                    = 0x2000
+       IFF_PERSIST                      = 0x800
        IFF_POINTOPOINT                  = 0x10
        IFF_PORTSEL                      = 0x2000
        IFF_PROMISC                      = 0x100
@@ -477,6 +556,7 @@ const (
        IFF_TUN_EXCL                     = 0x8000
        IFF_UP                           = 0x1
        IFF_VNET_HDR                     = 0x4000
+       IFF_VOLATILE                     = 0x70c5a
        IFNAMSIZ                         = 0x10
        IGNBRK                           = 0x1
        IGNCR                            = 0x80
@@ -523,6 +603,7 @@ const (
        IN_Q_OVERFLOW                    = 0x4000
        IN_UNMOUNT                       = 0x2000
        IPPROTO_AH                       = 0x33
+       IPPROTO_BEETPH                   = 0x5e
        IPPROTO_COMP                     = 0x6c
        IPPROTO_DCCP                     = 0x21
        IPPROTO_DSTOPTS                  = 0x3c
@@ -539,6 +620,8 @@ const (
        IPPROTO_IP                       = 0x0
        IPPROTO_IPIP                     = 0x4
        IPPROTO_IPV6                     = 0x29
+       IPPROTO_MH                       = 0x87
+       IPPROTO_MPLS                     = 0x89
        IPPROTO_MTP                      = 0x5c
        IPPROTO_NONE                     = 0x3b
        IPPROTO_PIM                      = 0x67
@@ -561,8 +644,10 @@ const (
        IPV6_ADD_MEMBERSHIP              = 0x14
        IPV6_AUTHHDR                     = 0xa
        IPV6_CHECKSUM                    = 0x7
+       IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -576,15 +661,19 @@ const (
        IPV6_MULTICAST_IF                = 0x11
        IPV6_MULTICAST_LOOP              = 0x13
        IPV6_NEXTHOP                     = 0x9
+       IPV6_PATHMTU                     = 0x3d
        IPV6_PKTINFO                     = 0x32
        IPV6_PMTUDISC_DO                 = 0x2
        IPV6_PMTUDISC_DONT               = 0x0
+       IPV6_PMTUDISC_INTERFACE          = 0x4
+       IPV6_PMTUDISC_OMIT               = 0x5
        IPV6_PMTUDISC_PROBE              = 0x3
        IPV6_PMTUDISC_WANT               = 0x1
        IPV6_RECVDSTOPTS                 = 0x3a
        IPV6_RECVERR                     = 0x19
        IPV6_RECVHOPLIMIT                = 0x33
        IPV6_RECVHOPOPTS                 = 0x35
+       IPV6_RECVPATHMTU                 = 0x3c
        IPV6_RECVPKTINFO                 = 0x31
        IPV6_RECVRTHDR                   = 0x38
        IPV6_RECVTCLASS                  = 0x42
@@ -602,7 +691,9 @@ const (
        IPV6_XFRM_POLICY                 = 0x23
        IP_ADD_MEMBERSHIP                = 0x23
        IP_ADD_SOURCE_MEMBERSHIP         = 0x27
+       IP_BIND_ADDRESS_NO_PORT          = 0x18
        IP_BLOCK_SOURCE                  = 0x26
+       IP_CHECKSUM                      = 0x17
        IP_DEFAULT_MULTICAST_LOOP        = 0x1
        IP_DEFAULT_MULTICAST_TTL         = 0x1
        IP_DF                            = 0x4000
@@ -619,9 +710,11 @@ const (
        IP_MSS                           = 0x240
        IP_MTU                           = 0xe
        IP_MTU_DISCOVER                  = 0xa
+       IP_MULTICAST_ALL                 = 0x31
        IP_MULTICAST_IF                  = 0x20
        IP_MULTICAST_LOOP                = 0x22
        IP_MULTICAST_TTL                 = 0x21
+       IP_NODEFRAG                      = 0x16
        IP_OFFMASK                       = 0x1fff
        IP_OPTIONS                       = 0x4
        IP_ORIGDSTADDR                   = 0x14
@@ -631,6 +724,8 @@ const (
        IP_PMTUDISC                      = 0xa
        IP_PMTUDISC_DO                   = 0x2
        IP_PMTUDISC_DONT                 = 0x0
+       IP_PMTUDISC_INTERFACE            = 0x4
+       IP_PMTUDISC_OMIT                 = 0x5
        IP_PMTUDISC_PROBE                = 0x3
        IP_PMTUDISC_WANT                 = 0x1
        IP_RECVERR                       = 0xb
@@ -646,6 +741,7 @@ const (
        IP_TRANSPARENT                   = 0x13
        IP_TTL                           = 0x2
        IP_UNBLOCK_SOURCE                = 0x25
+       IP_UNICAST_IF                    = 0x32
        IP_XFRM_POLICY                   = 0x11
        ISIG                             = 0x1
        ISTRIP                           = 0x20
@@ -668,9 +764,12 @@ const (
        LOCK_NB                          = 0x4
        LOCK_SH                          = 0x1
        LOCK_UN                          = 0x8
+       MADV_DODUMP                      = 0x11
        MADV_DOFORK                      = 0xb
+       MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -688,18 +787,24 @@ const (
        MAP_FILE                         = 0x0
        MAP_FIXED                        = 0x10
        MAP_GROWSDOWN                    = 0x100
+       MAP_HUGETLB                      = 0x40000
+       MAP_HUGE_MASK                    = 0x3f
+       MAP_HUGE_SHIFT                   = 0x1a
        MAP_LOCKED                       = 0x2000
        MAP_NONBLOCK                     = 0x10000
        MAP_NORESERVE                    = 0x4000
        MAP_POPULATE                     = 0x8000
        MAP_PRIVATE                      = 0x2
        MAP_SHARED                       = 0x1
+       MAP_STACK                        = 0x20000
        MAP_TYPE                         = 0xf
        MCL_CURRENT                      = 0x1
        MCL_FUTURE                       = 0x2
+       MCL_ONFAULT                      = 0x4
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -723,10 +828,12 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
        MS_KERNMOUNT                     = 0x400000
+       MS_LAZYTIME                      = 0x2000000
        MS_MANDLOCK                      = 0x40
        MS_MGC_MSK                       = 0xffff0000
        MS_MGC_VAL                       = 0xc0ed0000
@@ -735,6 +842,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -743,7 +852,7 @@ const (
        MS_REC                           = 0x4000
        MS_RELATIME                      = 0x200000
        MS_REMOUNT                       = 0x20
-       MS_RMT_MASK                      = 0x800051
+       MS_RMT_MASK                      = 0x2800051
        MS_SHARED                        = 0x100000
        MS_SILENT                        = 0x8000
        MS_SLAVE                         = 0x80000
@@ -751,10 +860,12 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
        NETLINK_BROADCAST_ERROR          = 0x4
+       NETLINK_CAP_ACK                  = 0xa
        NETLINK_CONNECTOR                = 0xb
        NETLINK_CRYPTO                   = 0x15
        NETLINK_DNRTMSG                  = 0xe
@@ -767,6 +878,8 @@ const (
        NETLINK_IP6_FW                   = 0xd
        NETLINK_ISCSI                    = 0x8
        NETLINK_KOBJECT_UEVENT           = 0xf
+       NETLINK_LISTEN_ALL_NSID          = 0x8
+       NETLINK_LIST_MEMBERSHIPS         = 0x9
        NETLINK_NETFILTER                = 0xc
        NETLINK_NFLOG                    = 0x5
        NETLINK_NO_ENOBUFS               = 0x5
@@ -801,6 +914,7 @@ const (
        NLM_F_CREATE                     = 0x400
        NLM_F_DUMP                       = 0x300
        NLM_F_DUMP_FILTERED              = 0x20
+       NLM_F_DUMP_INTR                  = 0x10
        NLM_F_ECHO                       = 0x8
        NLM_F_EXCL                       = 0x200
        NLM_F_MATCH                      = 0x200
@@ -826,7 +940,7 @@ const (
        O_DIRECTORY                      = 0x4000
        O_DSYNC                          = 0x1000
        O_EXCL                           = 0x80
-       O_FSYNC                          = 0x1000
+       O_FSYNC                          = 0x101000
        O_LARGEFILE                      = 0x20000
        O_NDELAY                         = 0x800
        O_NOATIME                        = 0x40000
@@ -836,26 +950,64 @@ const (
        O_PATH                           = 0x200000
        O_RDONLY                         = 0x0
        O_RDWR                           = 0x2
-       O_RSYNC                          = 0x1000
-       O_SYNC                           = 0x1000
+       O_RSYNC                          = 0x101000
+       O_SYNC                           = 0x101000
+       O_TMPFILE                        = 0x404000
        O_TRUNC                          = 0x200
        O_WRONLY                         = 0x1
        PACKET_ADD_MEMBERSHIP            = 0x1
+       PACKET_AUXDATA                   = 0x8
        PACKET_BROADCAST                 = 0x1
+       PACKET_COPY_THRESH               = 0x7
        PACKET_DROP_MEMBERSHIP           = 0x2
+       PACKET_FANOUT                    = 0x12
+       PACKET_FANOUT_CBPF               = 0x6
+       PACKET_FANOUT_CPU                = 0x2
+       PACKET_FANOUT_DATA               = 0x16
+       PACKET_FANOUT_EBPF               = 0x7
+       PACKET_FANOUT_FLAG_DEFRAG        = 0x8000
+       PACKET_FANOUT_FLAG_ROLLOVER      = 0x1000
+       PACKET_FANOUT_HASH               = 0x0
+       PACKET_FANOUT_LB                 = 0x1
+       PACKET_FANOUT_QM                 = 0x5
+       PACKET_FANOUT_RND                = 0x4
+       PACKET_FANOUT_ROLLOVER           = 0x3
        PACKET_FASTROUTE                 = 0x6
+       PACKET_HDRLEN                    = 0xb
        PACKET_HOST                      = 0x0
+       PACKET_KERNEL                    = 0x7
        PACKET_LOOPBACK                  = 0x5
+       PACKET_LOSS                      = 0xe
        PACKET_MR_ALLMULTI               = 0x2
        PACKET_MR_MULTICAST              = 0x0
        PACKET_MR_PROMISC                = 0x1
+       PACKET_MR_UNICAST                = 0x3
        PACKET_MULTICAST                 = 0x2
+       PACKET_ORIGDEV                   = 0x9
        PACKET_OTHERHOST                 = 0x3
        PACKET_OUTGOING                  = 0x4
+       PACKET_QDISC_BYPASS              = 0x14
        PACKET_RECV_OUTPUT               = 0x3
+       PACKET_RESERVE                   = 0xc
+       PACKET_ROLLOVER_STATS            = 0x15
        PACKET_RX_RING                   = 0x5
        PACKET_STATISTICS                = 0x6
+       PACKET_TIMESTAMP                 = 0x11
+       PACKET_TX_HAS_OFF                = 0x13
+       PACKET_TX_RING                   = 0xd
+       PACKET_TX_TIMESTAMP              = 0x10
+       PACKET_USER                      = 0x6
+       PACKET_VERSION                   = 0xa
+       PACKET_VNET_HDR                  = 0xf
        PARENB                           = 0x100
+       PARITY_CRC16_PR0                 = 0x2
+       PARITY_CRC16_PR0_CCITT           = 0x4
+       PARITY_CRC16_PR1                 = 0x3
+       PARITY_CRC16_PR1_CCITT           = 0x5
+       PARITY_CRC32_PR0_CCITT           = 0x6
+       PARITY_CRC32_PR1_CCITT           = 0x7
+       PARITY_DEFAULT                   = 0x0
+       PARITY_NONE                      = 0x1
        PARMRK                           = 0x8
        PARODD                           = 0x200
        PENDIN                           = 0x4000
@@ -870,7 +1022,11 @@ const (
        PROT_WRITE                       = 0x2
        PR_CAPBSET_DROP                  = 0x18
        PR_CAPBSET_READ                  = 0x17
-       PR_CLEAR_SECCOMP_FILTER          = 0x25
+       PR_CAP_AMBIENT                   = 0x2f
+       PR_CAP_AMBIENT_CLEAR_ALL         = 0x4
+       PR_CAP_AMBIENT_IS_SET            = 0x1
+       PR_CAP_AMBIENT_LOWER             = 0x3
+       PR_CAP_AMBIENT_RAISE             = 0x2
        PR_ENDIAN_BIG                    = 0x0
        PR_ENDIAN_LITTLE                 = 0x1
        PR_ENDIAN_PPC_LITTLE             = 0x2
@@ -886,16 +1042,22 @@ const (
        PR_FP_EXC_RES                    = 0x80000
        PR_FP_EXC_SW_ENABLE              = 0x80
        PR_FP_EXC_UND                    = 0x40000
+       PR_FP_MODE_FR                    = 0x1
+       PR_FP_MODE_FRE                   = 0x2
+       PR_GET_CHILD_SUBREAPER           = 0x25
        PR_GET_DUMPABLE                  = 0x3
        PR_GET_ENDIAN                    = 0x13
        PR_GET_FPEMU                     = 0x9
        PR_GET_FPEXC                     = 0xb
+       PR_GET_FP_MODE                   = 0x2e
        PR_GET_KEEPCAPS                  = 0x7
        PR_GET_NAME                      = 0x10
+       PR_GET_NO_NEW_PRIVS              = 0x27
        PR_GET_PDEATHSIG                 = 0x2
        PR_GET_SECCOMP                   = 0x15
-       PR_GET_SECCOMP_FILTER            = 0x23
        PR_GET_SECUREBITS                = 0x1b
+       PR_GET_THP_DISABLE               = 0x2a
+       PR_GET_TID_ADDRESS               = 0x28
        PR_GET_TIMERSLACK                = 0x1e
        PR_GET_TIMING                    = 0xd
        PR_GET_TSC                       = 0x19
@@ -907,19 +1069,39 @@ const (
        PR_MCE_KILL_GET                  = 0x22
        PR_MCE_KILL_LATE                 = 0x0
        PR_MCE_KILL_SET                  = 0x1
-       PR_SECCOMP_FILTER_EVENT          = 0x1
-       PR_SECCOMP_FILTER_SYSCALL        = 0x0
+       PR_MPX_DISABLE_MANAGEMENT        = 0x2c
+       PR_MPX_ENABLE_MANAGEMENT         = 0x2b
+       PR_SET_CHILD_SUBREAPER           = 0x24
        PR_SET_DUMPABLE                  = 0x4
        PR_SET_ENDIAN                    = 0x14
        PR_SET_FPEMU                     = 0xa
        PR_SET_FPEXC                     = 0xc
+       PR_SET_FP_MODE                   = 0x2d
        PR_SET_KEEPCAPS                  = 0x8
+       PR_SET_MM                        = 0x23
+       PR_SET_MM_ARG_END                = 0x9
+       PR_SET_MM_ARG_START              = 0x8
+       PR_SET_MM_AUXV                   = 0xc
+       PR_SET_MM_BRK                    = 0x7
+       PR_SET_MM_END_CODE               = 0x2
+       PR_SET_MM_END_DATA               = 0x4
+       PR_SET_MM_ENV_END                = 0xb
+       PR_SET_MM_ENV_START              = 0xa
+       PR_SET_MM_EXE_FILE               = 0xd
+       PR_SET_MM_MAP                    = 0xe
+       PR_SET_MM_MAP_SIZE               = 0xf
+       PR_SET_MM_START_BRK              = 0x6
+       PR_SET_MM_START_CODE             = 0x1
+       PR_SET_MM_START_DATA             = 0x3
+       PR_SET_MM_START_STACK            = 0x5
        PR_SET_NAME                      = 0xf
+       PR_SET_NO_NEW_PRIVS              = 0x26
        PR_SET_PDEATHSIG                 = 0x1
        PR_SET_PTRACER                   = 0x59616d61
+       PR_SET_PTRACER_ANY               = 0xffffffff
        PR_SET_SECCOMP                   = 0x16
-       PR_SET_SECCOMP_FILTER            = 0x24
        PR_SET_SECUREBITS                = 0x1c
+       PR_SET_THP_DISABLE               = 0x29
        PR_SET_TIMERSLACK                = 0x1d
        PR_SET_TIMING                    = 0xe
        PR_SET_TSC                       = 0x1a
@@ -939,6 +1121,8 @@ const (
        PTRACE_EVENT_EXEC                = 0x4
        PTRACE_EVENT_EXIT                = 0x6
        PTRACE_EVENT_FORK                = 0x1
+       PTRACE_EVENT_SECCOMP             = 0x7
+       PTRACE_EVENT_STOP                = 0x80
        PTRACE_EVENT_VFORK               = 0x2
        PTRACE_EVENT_VFORK_DONE          = 0x5
        PTRACE_GETCRUNCHREGS             = 0x19
@@ -948,25 +1132,35 @@ const (
        PTRACE_GETREGS                   = 0xc
        PTRACE_GETREGSET                 = 0x4204
        PTRACE_GETSIGINFO                = 0x4202
+       PTRACE_GETSIGMASK                = 0x420a
        PTRACE_GETVFPREGS                = 0x1b
        PTRACE_GETWMMXREGS               = 0x12
        PTRACE_GET_THREAD_AREA           = 0x16
+       PTRACE_INTERRUPT                 = 0x4207
        PTRACE_KILL                      = 0x8
+       PTRACE_LISTEN                    = 0x4208
        PTRACE_OLDSETOPTIONS             = 0x15
-       PTRACE_O_MASK                    = 0x7f
+       PTRACE_O_EXITKILL                = 0x100000
+       PTRACE_O_MASK                    = 0x3000ff
+       PTRACE_O_SUSPEND_SECCOMP         = 0x200000
        PTRACE_O_TRACECLONE              = 0x8
        PTRACE_O_TRACEEXEC               = 0x10
        PTRACE_O_TRACEEXIT               = 0x40
        PTRACE_O_TRACEFORK               = 0x2
+       PTRACE_O_TRACESECCOMP            = 0x80
        PTRACE_O_TRACESYSGOOD            = 0x1
        PTRACE_O_TRACEVFORK              = 0x4
        PTRACE_O_TRACEVFORKDONE          = 0x20
        PTRACE_PEEKDATA                  = 0x2
+       PTRACE_PEEKSIGINFO               = 0x4209
+       PTRACE_PEEKSIGINFO_SHARED        = 0x1
        PTRACE_PEEKTEXT                  = 0x1
        PTRACE_PEEKUSR                   = 0x3
        PTRACE_POKEDATA                  = 0x5
        PTRACE_POKETEXT                  = 0x4
        PTRACE_POKEUSR                   = 0x6
+       PTRACE_SECCOMP_GET_FILTER        = 0x420c
+       PTRACE_SEIZE                     = 0x4206
        PTRACE_SETCRUNCHREGS             = 0x1a
        PTRACE_SETFPREGS                 = 0xf
        PTRACE_SETHBPREGS                = 0x1e
@@ -974,6 +1168,7 @@ const (
        PTRACE_SETREGS                   = 0xd
        PTRACE_SETREGSET                 = 0x4205
        PTRACE_SETSIGINFO                = 0x4203
+       PTRACE_SETSIGMASK                = 0x420b
        PTRACE_SETVFPREGS                = 0x1c
        PTRACE_SETWMMXREGS               = 0x13
        PTRACE_SET_SYSCALL               = 0x17
@@ -992,18 +1187,21 @@ const (
        RLIMIT_STACK                     = 0x3
        RLIM_INFINITY                    = -0x1
        RTAX_ADVMSS                      = 0x8
+       RTAX_CC_ALGO                     = 0x10
        RTAX_CWND                        = 0x7
        RTAX_FEATURES                    = 0xc
        RTAX_FEATURE_ALLFRAG             = 0x8
        RTAX_FEATURE_ECN                 = 0x1
+       RTAX_FEATURE_MASK                = 0xf
        RTAX_FEATURE_SACK                = 0x2
        RTAX_FEATURE_TIMESTAMP           = 0x4
        RTAX_HOPLIMIT                    = 0xa
        RTAX_INITCWND                    = 0xb
        RTAX_INITRWND                    = 0xe
        RTAX_LOCK                        = 0x1
-       RTAX_MAX                         = 0xe
+       RTAX_MAX                         = 0x10
        RTAX_MTU                         = 0x2
+       RTAX_QUICKACK                    = 0xf
        RTAX_REORDERING                  = 0x9
        RTAX_RTO_MIN                     = 0xd
        RTAX_RTT                         = 0x4
@@ -1012,7 +1210,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x10
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1054,7 +1252,9 @@ const (
        RTM_DELADDR                      = 0x15
        RTM_DELADDRLABEL                 = 0x49
        RTM_DELLINK                      = 0x11
+       RTM_DELMDB                       = 0x55
        RTM_DELNEIGH                     = 0x1d
+       RTM_DELNSID                      = 0x59
        RTM_DELQDISC                     = 0x25
        RTM_DELROUTE                     = 0x19
        RTM_DELRULE                      = 0x21
@@ -1062,6 +1262,7 @@ const (
        RTM_DELTFILTER                   = 0x2d
        RTM_F_CLONED                     = 0x200
        RTM_F_EQUALIZE                   = 0x400
+       RTM_F_LOOKUP_TABLE               = 0x1000
        RTM_F_NOTIFY                     = 0x100
        RTM_F_PREFIX                     = 0x800
        RTM_GETACTION                    = 0x32
@@ -1070,44 +1271,57 @@ const (
        RTM_GETANYCAST                   = 0x3e
        RTM_GETDCB                       = 0x4e
        RTM_GETLINK                      = 0x12
+       RTM_GETMDB                       = 0x56
        RTM_GETMULTICAST                 = 0x3a
        RTM_GETNEIGH                     = 0x1e
        RTM_GETNEIGHTBL                  = 0x42
+       RTM_GETNETCONF                   = 0x52
+       RTM_GETNSID                      = 0x5a
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x4f
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
        RTM_NEWLINK                      = 0x10
+       RTM_NEWMDB                       = 0x54
        RTM_NEWNDUSEROPT                 = 0x44
        RTM_NEWNEIGH                     = 0x1c
        RTM_NEWNEIGHTBL                  = 0x40
+       RTM_NEWNETCONF                   = 0x50
+       RTM_NEWNSID                      = 0x58
        RTM_NEWPREFIX                    = 0x34
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x10
-       RTM_NR_MSGTYPES                  = 0x40
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
+       RTNH_F_LINKDOWN                  = 0x10
+       RTNH_F_OFFLOAD                   = 0x8
        RTNH_F_ONLINK                    = 0x4
        RTNH_F_PERVASIVE                 = 0x2
        RTN_MAX                          = 0xb
+       RTPROT_BABEL                     = 0x2a
        RTPROT_BIRD                      = 0xc
        RTPROT_BOOT                      = 0x3
        RTPROT_DHCP                      = 0x10
        RTPROT_DNROUTED                  = 0xd
        RTPROT_GATED                     = 0x8
        RTPROT_KERNEL                    = 0x2
+       RTPROT_MROUTED                   = 0x11
        RTPROT_MRT                       = 0xa
        RTPROT_NTK                       = 0xf
        RTPROT_RA                        = 0x9
@@ -1128,7 +1342,9 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
+       SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
        SHUT_RDWR                        = 0x2
        SHUT_WR                          = 0x1
@@ -1200,36 +1416,63 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x1
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
+       SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0x1
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1e
+       SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
+       SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x6
        SO_BSDCOMPAT                     = 0xe
+       SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
+       SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
        SO_DOMAIN                        = 0x27
        SO_DONTROUTE                     = 0x5
        SO_ERROR                         = 0x4
+       SO_GET_FILTER                    = 0x1a
+       SO_INCOMING_CPU                  = 0x31
        SO_KEEPALIVE                     = 0x9
        SO_LINGER                        = 0xd
+       SO_LOCK_FILTER                   = 0x2c
        SO_MARK                          = 0x24
+       SO_MAX_PACING_RATE               = 0x2f
+       SO_NOFCS                         = 0x2b
        SO_NO_CHECK                      = 0xb
        SO_OOBINLINE                     = 0xa
        SO_PASSCRED                      = 0x10
        SO_PASSSEC                       = 0x22
+       SO_PEEK_OFF                      = 0x2a
        SO_PEERCRED                      = 0x11
        SO_PEERNAME                      = 0x1c
        SO_PEERSEC                       = 0x1f
@@ -1240,10 +1483,12 @@ const (
        SO_RCVLOWAT                      = 0x12
        SO_RCVTIMEO                      = 0x14
        SO_REUSEADDR                     = 0x2
+       SO_REUSEPORT                     = 0xf
        SO_RXQ_OVFL                      = 0x28
        SO_SECURITY_AUTHENTICATION       = 0x16
        SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
        SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
+       SO_SELECT_ERR_QUEUE              = 0x2d
        SO_SNDBUF                        = 0x7
        SO_SNDBUFFORCE                   = 0x20
        SO_SNDLOWAT                      = 0x13
@@ -1252,6 +1497,14 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x3
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
+       SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
        SPLICE_F_MOVE                    = 0x1
@@ -1300,9 +1553,17 @@ const (
        TCOFLUSH                         = 0x1
        TCOOFF                           = 0x0
        TCOON                            = 0x1
+       TCP_CC_INFO                      = 0x1a
        TCP_CONGESTION                   = 0xd
+       TCP_COOKIE_IN_ALWAYS             = 0x1
+       TCP_COOKIE_MAX                   = 0x10
+       TCP_COOKIE_MIN                   = 0x8
+       TCP_COOKIE_OUT_NEVER             = 0x2
+       TCP_COOKIE_PAIR_SIZE             = 0x20
+       TCP_COOKIE_TRANSACTIONS          = 0xf
        TCP_CORK                         = 0x3
        TCP_DEFER_ACCEPT                 = 0x9
+       TCP_FASTOPEN                     = 0x17
        TCP_INFO                         = 0xb
        TCP_KEEPCNT                      = 0x6
        TCP_KEEPIDLE                     = 0x4
@@ -1314,9 +1575,25 @@ const (
        TCP_MD5SIG                       = 0xe
        TCP_MD5SIG_MAXKEYLEN             = 0x50
        TCP_MSS                          = 0x200
+       TCP_MSS_DEFAULT                  = 0x218
+       TCP_MSS_DESIRED                  = 0x4c4
        TCP_NODELAY                      = 0x1
+       TCP_NOTSENT_LOWAT                = 0x19
+       TCP_QUEUE_SEQ                    = 0x15
        TCP_QUICKACK                     = 0xc
+       TCP_REPAIR                       = 0x13
+       TCP_REPAIR_OPTIONS               = 0x16
+       TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
+       TCP_SAVED_SYN                    = 0x1c
+       TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
+       TCP_S_DATA_IN                    = 0x4
+       TCP_S_DATA_OUT                   = 0x8
+       TCP_THIN_DUPACK                  = 0x11
+       TCP_THIN_LINEAR_TIMEOUTS         = 0x10
+       TCP_TIMESTAMP                    = 0x18
+       TCP_USER_TIMEOUT                 = 0x12
        TCP_WINDOW_CLAMP                 = 0xa
        TCSAFLUSH                        = 0x2
        TCSBRK                           = 0x5409
@@ -1406,20 +1683,27 @@ const (
        TUNATTACHFILTER                  = 0x400854d5
        TUNDETACHFILTER                  = 0x400854d6
        TUNGETFEATURES                   = 0x800454cf
+       TUNGETFILTER                     = 0x800854db
        TUNGETIFF                        = 0x800454d2
        TUNGETSNDBUF                     = 0x800454d3
+       TUNGETVNETBE                     = 0x800454df
        TUNGETVNETHDRSZ                  = 0x800454d7
+       TUNGETVNETLE                     = 0x800454dd
        TUNSETDEBUG                      = 0x400454c9
        TUNSETGROUP                      = 0x400454ce
        TUNSETIFF                        = 0x400454ca
+       TUNSETIFINDEX                    = 0x400454da
        TUNSETLINK                       = 0x400454cd
        TUNSETNOCSUM                     = 0x400454c8
        TUNSETOFFLOAD                    = 0x400454d0
        TUNSETOWNER                      = 0x400454cc
        TUNSETPERSIST                    = 0x400454cb
+       TUNSETQUEUE                      = 0x400454d9
        TUNSETSNDBUF                     = 0x400454d4
        TUNSETTXFILTER                   = 0x400454d1
+       TUNSETVNETBE                     = 0x400454de
        TUNSETVNETHDRSZ                  = 0x400454d8
+       TUNSETVNETLE                     = 0x400454dc
        VDISCARD                         = 0xd
        VEOF                             = 0x4
        VEOL                             = 0xb
@@ -1428,7 +1712,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x6
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
        VSTART                           = 0x8
@@ -1746,7 +2036,7 @@ var errors = [...]string{
        113: "no route to host",
        114: "operation already in progress",
        115: "operation now in progress",
-       116: "stale NFS file handle",
+       116: "stale file handle",
        117: "structure needs cleaning",
        118: "not a XENIX named type file",
        119: "no XENIX semaphores available",
@@ -1763,7 +2053,7 @@ var errors = [...]string{
        130: "owner died",
        131: "state not recoverable",
        132: "operation not possible due to RF-kill",
-       133: "unknown error 133",
+       133: "memory page has hardware error",
 }
 
 // Signal table
index 6f6d1d9..b72a645 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build arm64,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go
 
 package unix
 
@@ -24,6 +24,7 @@ const (
        AF_DECnet                        = 0xc
        AF_ECONET                        = 0x13
        AF_FILE                          = 0x1
+       AF_IB                            = 0x1b
        AF_IEEE802154                    = 0x24
        AF_INET                          = 0x2
        AF_INET6                         = 0xa
@@ -31,10 +32,12 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x29
+       AF_MAX                           = 0x2b
+       AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
        AF_NETROM                        = 0x6
@@ -42,6 +45,7 @@ const (
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -61,6 +65,7 @@ const (
        ALG_SET_IV                       = 0x2
        ALG_SET_KEY                      = 0x1
        ALG_SET_OP                       = 0x3
+       ARPHRD_6LOWPAN                   = 0x339
        ARPHRD_ADAPT                     = 0x108
        ARPHRD_APPLETLK                  = 0x8
        ARPHRD_ARCNET                    = 0x7
@@ -163,6 +168,7 @@ const (
        BLKFRASET                        = 0x1264
        BLKGETSIZE                       = 0x1260
        BLKGETSIZE64                     = 0x80081272
+       BLKPBSZGET                       = 0x127b
        BLKRAGET                         = 0x1263
        BLKRASET                         = 0x1262
        BLKROGET                         = 0x125e
@@ -192,6 +198,7 @@ const (
        BPF_LD                           = 0x0
        BPF_LDX                          = 0x1
        BPF_LEN                          = 0x80
+       BPF_LL_OFF                       = -0x200000
        BPF_LSH                          = 0x60
        BPF_MAJOR_VERSION                = 0x1
        BPF_MAXINSNS                     = 0x1000
@@ -203,6 +210,7 @@ const (
        BPF_MSH                          = 0xa0
        BPF_MUL                          = 0x20
        BPF_NEG                          = 0x80
+       BPF_NET_OFF                      = -0x100000
        BPF_OR                           = 0x40
        BPF_RET                          = 0x6
        BPF_RSH                          = 0x70
@@ -232,6 +240,7 @@ const (
        CAN_MTU                          = 0x10
        CAN_NPROTO                       = 0x7
        CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
        CAN_RTR_FLAG                     = 0x40000000
        CAN_SFF_ID_BITS                  = 0xb
        CAN_SFF_MASK                     = 0x7ff
@@ -254,6 +263,7 @@ const (
        CLOCK_REALTIME                   = 0x0
        CLOCK_REALTIME_ALARM             = 0x8
        CLOCK_REALTIME_COARSE            = 0x5
+       CLOCK_TAI                        = 0xb
        CLOCK_THREAD_CPUTIME_ID          = 0x3
        CLOCK_TXFROMRX                   = 0x4
        CLOCK_TXINT                      = 0x3
@@ -315,8 +325,6 @@ const (
        ECHOKE                           = 0x800
        ECHONL                           = 0x40
        ECHOPRT                          = 0x400
-       ELF_NGREG                        = 0x22
-       ELF_PRARGSZ                      = 0x50
        ENCODING_DEFAULT                 = 0x0
        ENCODING_FM_MARK                 = 0x3
        ENCODING_FM_SPACE                = 0x4
@@ -325,6 +333,7 @@ const (
        ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
        EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -341,10 +350,12 @@ const (
        EPOLL_CTL_ADD                    = 0x1
        EPOLL_CTL_DEL                    = 0x2
        EPOLL_CTL_MOD                    = 0x3
+       ESR_MAGIC                        = 0x45535201
        ETH_P_1588                       = 0x88f7
        ETH_P_8021AD                     = 0x88a8
        ETH_P_8021AH                     = 0x88e7
        ETH_P_8021Q                      = 0x8100
+       ETH_P_80221                      = 0x8917
        ETH_P_802_2                      = 0x4
        ETH_P_802_3                      = 0x1
        ETH_P_802_3_MIN                  = 0x600
@@ -378,6 +389,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -389,10 +401,13 @@ const (
        ETH_P_LINK_CTL                   = 0x886c
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
+       ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
        ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -415,9 +430,11 @@ const (
        ETH_P_TIPC                       = 0x88ca
        ETH_P_TRAILER                    = 0x1c
        ETH_P_TR_802_2                   = 0x11
+       ETH_P_TSN                        = 0x22f0
        ETH_P_WAN_PPP                    = 0x7
        ETH_P_WCCP                       = 0x883e
        ETH_P_X25                        = 0x805
+       ETH_P_XDSA                       = 0xf8
        EXTA                             = 0xe
        EXTB                             = 0xf
        EXTPROC                          = 0x10000
@@ -426,6 +443,7 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
@@ -433,6 +451,24 @@ const (
        FF1                              = 0x8000
        FFDLY                            = 0x8000
        FLUSHO                           = 0x1000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -447,6 +483,9 @@ const (
        F_GETSIG                         = 0xb
        F_LOCK                           = 0x1
        F_NOTIFY                         = 0x402
+       F_OFD_GETLK                      = 0x24
+       F_OFD_SETLK                      = 0x25
+       F_OFD_SETLKW                     = 0x26
        F_OK                             = 0x0
        F_RDLCK                          = 0x0
        F_SETFD                          = 0x2
@@ -477,38 +516,29 @@ const (
        IFA_F_DADFAILED                  = 0x8
        IFA_F_DEPRECATED                 = 0x20
        IFA_F_HOMEADDRESS                = 0x10
+       IFA_F_MANAGETEMPADDR             = 0x100
+       IFA_F_MCAUTOJOIN                 = 0x400
        IFA_F_NODAD                      = 0x2
+       IFA_F_NOPREFIXROUTE              = 0x200
        IFA_F_OPTIMISTIC                 = 0x4
        IFA_F_PERMANENT                  = 0x80
        IFA_F_SECONDARY                  = 0x1
+       IFA_F_STABLE_PRIVACY             = 0x800
        IFA_F_TEMPORARY                  = 0x1
        IFA_F_TENTATIVE                  = 0x40
-       IFA_MAX                          = 0x7
-       IFF_802_1Q_VLAN                  = 0x1
+       IFA_MAX                          = 0x8
        IFF_ALLMULTI                     = 0x200
        IFF_ATTACH_QUEUE                 = 0x200
        IFF_AUTOMEDIA                    = 0x4000
-       IFF_BONDING                      = 0x20
-       IFF_BRIDGE_PORT                  = 0x4000
        IFF_BROADCAST                    = 0x2
        IFF_DEBUG                        = 0x4
        IFF_DETACH_QUEUE                 = 0x400
-       IFF_DISABLE_NETPOLL              = 0x1000
-       IFF_DONT_BRIDGE                  = 0x800
        IFF_DORMANT                      = 0x20000
        IFF_DYNAMIC                      = 0x8000
-       IFF_EBRIDGE                      = 0x2
        IFF_ECHO                         = 0x40000
-       IFF_ISATAP                       = 0x80
-       IFF_LIVE_ADDR_CHANGE             = 0x100000
        IFF_LOOPBACK                     = 0x8
        IFF_LOWER_UP                     = 0x10000
-       IFF_MACVLAN                      = 0x200000
-       IFF_MACVLAN_PORT                 = 0x2000
        IFF_MASTER                       = 0x400
-       IFF_MASTER_8023AD                = 0x8
-       IFF_MASTER_ALB                   = 0x10
-       IFF_MASTER_ARPMON                = 0x100
        IFF_MULTICAST                    = 0x1000
        IFF_MULTI_QUEUE                  = 0x100
        IFF_NOARP                        = 0x80
@@ -516,27 +546,18 @@ const (
        IFF_NOTRAILERS                   = 0x20
        IFF_NO_PI                        = 0x1000
        IFF_ONE_QUEUE                    = 0x2000
-       IFF_OVS_DATAPATH                 = 0x8000
        IFF_PERSIST                      = 0x800
        IFF_POINTOPOINT                  = 0x10
        IFF_PORTSEL                      = 0x2000
        IFF_PROMISC                      = 0x100
        IFF_RUNNING                      = 0x40
        IFF_SLAVE                        = 0x800
-       IFF_SLAVE_INACTIVE               = 0x4
-       IFF_SLAVE_NEEDARP                = 0x40
-       IFF_SUPP_NOFCS                   = 0x80000
        IFF_TAP                          = 0x2
-       IFF_TEAM_PORT                    = 0x40000
        IFF_TUN                          = 0x1
        IFF_TUN_EXCL                     = 0x8000
-       IFF_TX_SKB_SHARING               = 0x10000
-       IFF_UNICAST_FLT                  = 0x20000
        IFF_UP                           = 0x1
        IFF_VNET_HDR                     = 0x4000
        IFF_VOLATILE                     = 0x70c5a
-       IFF_WAN_HDLC                     = 0x200
-       IFF_XMIT_DST_RELEASE             = 0x400
        IFNAMSIZ                         = 0x10
        IGNBRK                           = 0x1
        IGNCR                            = 0x80
@@ -601,6 +622,7 @@ const (
        IPPROTO_IPIP                     = 0x4
        IPPROTO_IPV6                     = 0x29
        IPPROTO_MH                       = 0x87
+       IPPROTO_MPLS                     = 0x89
        IPPROTO_MTP                      = 0x5c
        IPPROTO_NONE                     = 0x3b
        IPPROTO_PIM                      = 0x67
@@ -623,8 +645,10 @@ const (
        IPV6_ADD_MEMBERSHIP              = 0x14
        IPV6_AUTHHDR                     = 0xa
        IPV6_CHECKSUM                    = 0x7
+       IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -638,15 +662,19 @@ const (
        IPV6_MULTICAST_IF                = 0x11
        IPV6_MULTICAST_LOOP              = 0x13
        IPV6_NEXTHOP                     = 0x9
+       IPV6_PATHMTU                     = 0x3d
        IPV6_PKTINFO                     = 0x32
        IPV6_PMTUDISC_DO                 = 0x2
        IPV6_PMTUDISC_DONT               = 0x0
+       IPV6_PMTUDISC_INTERFACE          = 0x4
+       IPV6_PMTUDISC_OMIT               = 0x5
        IPV6_PMTUDISC_PROBE              = 0x3
        IPV6_PMTUDISC_WANT               = 0x1
        IPV6_RECVDSTOPTS                 = 0x3a
        IPV6_RECVERR                     = 0x19
        IPV6_RECVHOPLIMIT                = 0x33
        IPV6_RECVHOPOPTS                 = 0x35
+       IPV6_RECVPATHMTU                 = 0x3c
        IPV6_RECVPKTINFO                 = 0x31
        IPV6_RECVRTHDR                   = 0x38
        IPV6_RECVTCLASS                  = 0x42
@@ -664,7 +692,9 @@ const (
        IPV6_XFRM_POLICY                 = 0x23
        IP_ADD_MEMBERSHIP                = 0x23
        IP_ADD_SOURCE_MEMBERSHIP         = 0x27
+       IP_BIND_ADDRESS_NO_PORT          = 0x18
        IP_BLOCK_SOURCE                  = 0x26
+       IP_CHECKSUM                      = 0x17
        IP_DEFAULT_MULTICAST_LOOP        = 0x1
        IP_DEFAULT_MULTICAST_TTL         = 0x1
        IP_DF                            = 0x4000
@@ -685,6 +715,7 @@ const (
        IP_MULTICAST_IF                  = 0x20
        IP_MULTICAST_LOOP                = 0x22
        IP_MULTICAST_TTL                 = 0x21
+       IP_NODEFRAG                      = 0x16
        IP_OFFMASK                       = 0x1fff
        IP_OPTIONS                       = 0x4
        IP_ORIGDSTADDR                   = 0x14
@@ -694,6 +725,8 @@ const (
        IP_PMTUDISC                      = 0xa
        IP_PMTUDISC_DO                   = 0x2
        IP_PMTUDISC_DONT                 = 0x0
+       IP_PMTUDISC_INTERFACE            = 0x4
+       IP_PMTUDISC_OMIT                 = 0x5
        IP_PMTUDISC_PROBE                = 0x3
        IP_PMTUDISC_WANT                 = 0x1
        IP_RECVERR                       = 0xb
@@ -737,6 +770,7 @@ const (
        MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -767,9 +801,11 @@ const (
        MAP_TYPE                         = 0xf
        MCL_CURRENT                      = 0x1
        MCL_FUTURE                       = 0x2
+       MCL_ONFAULT                      = 0x4
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -793,10 +829,12 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
        MS_KERNMOUNT                     = 0x400000
+       MS_LAZYTIME                      = 0x2000000
        MS_MANDLOCK                      = 0x40
        MS_MGC_MSK                       = 0xffff0000
        MS_MGC_VAL                       = 0xc0ed0000
@@ -805,6 +843,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -813,7 +853,7 @@ const (
        MS_REC                           = 0x4000
        MS_RELATIME                      = 0x200000
        MS_REMOUNT                       = 0x20
-       MS_RMT_MASK                      = 0x800051
+       MS_RMT_MASK                      = 0x2800051
        MS_SHARED                        = 0x100000
        MS_SILENT                        = 0x8000
        MS_SLAVE                         = 0x80000
@@ -821,6 +861,7 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
@@ -912,7 +953,7 @@ const (
        O_RDWR                           = 0x2
        O_RSYNC                          = 0x101000
        O_SYNC                           = 0x101000
-       O_TMPFILE                        = 0x410000
+       O_TMPFILE                        = 0x404000
        O_TRUNC                          = 0x200
        O_WRONLY                         = 0x1
        PACKET_ADD_MEMBERSHIP            = 0x1
@@ -921,16 +962,21 @@ const (
        PACKET_COPY_THRESH               = 0x7
        PACKET_DROP_MEMBERSHIP           = 0x2
        PACKET_FANOUT                    = 0x12
+       PACKET_FANOUT_CBPF               = 0x6
        PACKET_FANOUT_CPU                = 0x2
+       PACKET_FANOUT_DATA               = 0x16
+       PACKET_FANOUT_EBPF               = 0x7
        PACKET_FANOUT_FLAG_DEFRAG        = 0x8000
        PACKET_FANOUT_FLAG_ROLLOVER      = 0x1000
        PACKET_FANOUT_HASH               = 0x0
        PACKET_FANOUT_LB                 = 0x1
+       PACKET_FANOUT_QM                 = 0x5
        PACKET_FANOUT_RND                = 0x4
        PACKET_FANOUT_ROLLOVER           = 0x3
        PACKET_FASTROUTE                 = 0x6
        PACKET_HDRLEN                    = 0xb
        PACKET_HOST                      = 0x0
+       PACKET_KERNEL                    = 0x7
        PACKET_LOOPBACK                  = 0x5
        PACKET_LOSS                      = 0xe
        PACKET_MR_ALLMULTI               = 0x2
@@ -941,14 +987,17 @@ const (
        PACKET_ORIGDEV                   = 0x9
        PACKET_OTHERHOST                 = 0x3
        PACKET_OUTGOING                  = 0x4
+       PACKET_QDISC_BYPASS              = 0x14
        PACKET_RECV_OUTPUT               = 0x3
        PACKET_RESERVE                   = 0xc
+       PACKET_ROLLOVER_STATS            = 0x15
        PACKET_RX_RING                   = 0x5
        PACKET_STATISTICS                = 0x6
        PACKET_TIMESTAMP                 = 0x11
        PACKET_TX_HAS_OFF                = 0x13
        PACKET_TX_RING                   = 0xd
        PACKET_TX_TIMESTAMP              = 0x10
+       PACKET_USER                      = 0x6
        PACKET_VERSION                   = 0xa
        PACKET_VNET_HDR                  = 0xf
        PARENB                           = 0x100
@@ -974,6 +1023,11 @@ const (
        PROT_WRITE                       = 0x2
        PR_CAPBSET_DROP                  = 0x18
        PR_CAPBSET_READ                  = 0x17
+       PR_CAP_AMBIENT                   = 0x2f
+       PR_CAP_AMBIENT_CLEAR_ALL         = 0x4
+       PR_CAP_AMBIENT_IS_SET            = 0x1
+       PR_CAP_AMBIENT_LOWER             = 0x3
+       PR_CAP_AMBIENT_RAISE             = 0x2
        PR_ENDIAN_BIG                    = 0x0
        PR_ENDIAN_LITTLE                 = 0x1
        PR_ENDIAN_PPC_LITTLE             = 0x2
@@ -989,17 +1043,21 @@ const (
        PR_FP_EXC_RES                    = 0x80000
        PR_FP_EXC_SW_ENABLE              = 0x80
        PR_FP_EXC_UND                    = 0x40000
+       PR_FP_MODE_FR                    = 0x1
+       PR_FP_MODE_FRE                   = 0x2
        PR_GET_CHILD_SUBREAPER           = 0x25
        PR_GET_DUMPABLE                  = 0x3
        PR_GET_ENDIAN                    = 0x13
        PR_GET_FPEMU                     = 0x9
        PR_GET_FPEXC                     = 0xb
+       PR_GET_FP_MODE                   = 0x2e
        PR_GET_KEEPCAPS                  = 0x7
        PR_GET_NAME                      = 0x10
        PR_GET_NO_NEW_PRIVS              = 0x27
        PR_GET_PDEATHSIG                 = 0x2
        PR_GET_SECCOMP                   = 0x15
        PR_GET_SECUREBITS                = 0x1b
+       PR_GET_THP_DISABLE               = 0x2a
        PR_GET_TID_ADDRESS               = 0x28
        PR_GET_TIMERSLACK                = 0x1e
        PR_GET_TIMING                    = 0xd
@@ -1012,11 +1070,14 @@ const (
        PR_MCE_KILL_GET                  = 0x22
        PR_MCE_KILL_LATE                 = 0x0
        PR_MCE_KILL_SET                  = 0x1
+       PR_MPX_DISABLE_MANAGEMENT        = 0x2c
+       PR_MPX_ENABLE_MANAGEMENT         = 0x2b
        PR_SET_CHILD_SUBREAPER           = 0x24
        PR_SET_DUMPABLE                  = 0x4
        PR_SET_ENDIAN                    = 0x14
        PR_SET_FPEMU                     = 0xa
        PR_SET_FPEXC                     = 0xc
+       PR_SET_FP_MODE                   = 0x2d
        PR_SET_KEEPCAPS                  = 0x8
        PR_SET_MM                        = 0x23
        PR_SET_MM_ARG_END                = 0x9
@@ -1028,6 +1089,8 @@ const (
        PR_SET_MM_ENV_END                = 0xb
        PR_SET_MM_ENV_START              = 0xa
        PR_SET_MM_EXE_FILE               = 0xd
+       PR_SET_MM_MAP                    = 0xe
+       PR_SET_MM_MAP_SIZE               = 0xf
        PR_SET_MM_START_BRK              = 0x6
        PR_SET_MM_START_CODE             = 0x1
        PR_SET_MM_START_DATA             = 0x3
@@ -1039,6 +1102,7 @@ const (
        PR_SET_PTRACER_ANY               = -0x1
        PR_SET_SECCOMP                   = 0x16
        PR_SET_SECUREBITS                = 0x1c
+       PR_SET_THP_DISABLE               = 0x29
        PR_SET_TIMERSLACK                = 0x1d
        PR_SET_TIMING                    = 0xe
        PR_SET_TSC                       = 0x1a
@@ -1071,7 +1135,8 @@ const (
        PTRACE_KILL                      = 0x8
        PTRACE_LISTEN                    = 0x4208
        PTRACE_O_EXITKILL                = 0x100000
-       PTRACE_O_MASK                    = 0x1000ff
+       PTRACE_O_MASK                    = 0x3000ff
+       PTRACE_O_SUSPEND_SECCOMP         = 0x200000
        PTRACE_O_TRACECLONE              = 0x8
        PTRACE_O_TRACEEXEC               = 0x10
        PTRACE_O_TRACEEXIT               = 0x40
@@ -1088,6 +1153,7 @@ const (
        PTRACE_POKEDATA                  = 0x5
        PTRACE_POKETEXT                  = 0x4
        PTRACE_POKEUSR                   = 0x6
+       PTRACE_SECCOMP_GET_FILTER        = 0x420c
        PTRACE_SEIZE                     = 0x4206
        PTRACE_SETOPTIONS                = 0x4200
        PTRACE_SETREGS                   = 0xd
@@ -1106,17 +1172,19 @@ const (
        RLIMIT_STACK                     = 0x3
        RLIM_INFINITY                    = -0x1
        RTAX_ADVMSS                      = 0x8
+       RTAX_CC_ALGO                     = 0x10
        RTAX_CWND                        = 0x7
        RTAX_FEATURES                    = 0xc
        RTAX_FEATURE_ALLFRAG             = 0x8
        RTAX_FEATURE_ECN                 = 0x1
+       RTAX_FEATURE_MASK                = 0xf
        RTAX_FEATURE_SACK                = 0x2
        RTAX_FEATURE_TIMESTAMP           = 0x4
        RTAX_HOPLIMIT                    = 0xa
        RTAX_INITCWND                    = 0xb
        RTAX_INITRWND                    = 0xe
        RTAX_LOCK                        = 0x1
-       RTAX_MAX                         = 0xf
+       RTAX_MAX                         = 0x10
        RTAX_MTU                         = 0x2
        RTAX_QUICKACK                    = 0xf
        RTAX_REORDERING                  = 0x9
@@ -1127,7 +1195,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x11
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1171,6 +1239,7 @@ const (
        RTM_DELLINK                      = 0x11
        RTM_DELMDB                       = 0x55
        RTM_DELNEIGH                     = 0x1d
+       RTM_DELNSID                      = 0x59
        RTM_DELQDISC                     = 0x25
        RTM_DELROUTE                     = 0x19
        RTM_DELRULE                      = 0x21
@@ -1178,6 +1247,7 @@ const (
        RTM_DELTFILTER                   = 0x2d
        RTM_F_CLONED                     = 0x200
        RTM_F_EQUALIZE                   = 0x400
+       RTM_F_LOOKUP_TABLE               = 0x1000
        RTM_F_NOTIFY                     = 0x100
        RTM_F_PREFIX                     = 0x800
        RTM_GETACTION                    = 0x32
@@ -1191,12 +1261,14 @@ const (
        RTM_GETNEIGH                     = 0x1e
        RTM_GETNEIGHTBL                  = 0x42
        RTM_GETNETCONF                   = 0x52
+       RTM_GETNSID                      = 0x5a
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x57
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
@@ -1206,22 +1278,28 @@ const (
        RTM_NEWNEIGH                     = 0x1c
        RTM_NEWNEIGHTBL                  = 0x40
        RTM_NEWNETCONF                   = 0x50
+       RTM_NEWNSID                      = 0x58
        RTM_NEWPREFIX                    = 0x34
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x12
-       RTM_NR_MSGTYPES                  = 0x48
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
+       RTNH_F_LINKDOWN                  = 0x10
+       RTNH_F_OFFLOAD                   = 0x8
        RTNH_F_ONLINK                    = 0x4
        RTNH_F_PERVASIVE                 = 0x2
        RTN_MAX                          = 0xb
+       RTPROT_BABEL                     = 0x2a
        RTPROT_BIRD                      = 0xc
        RTPROT_BOOT                      = 0x3
        RTPROT_DHCP                      = 0x10
@@ -1249,6 +1327,7 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
        SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
@@ -1322,31 +1401,52 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x1
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
+       SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0x1
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1e
+       SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
+       SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x6
        SO_BSDCOMPAT                     = 0xe
        SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
+       SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
        SO_DOMAIN                        = 0x27
        SO_DONTROUTE                     = 0x5
        SO_ERROR                         = 0x4
        SO_GET_FILTER                    = 0x1a
+       SO_INCOMING_CPU                  = 0x31
        SO_KEEPALIVE                     = 0x9
        SO_LINGER                        = 0xd
        SO_LOCK_FILTER                   = 0x2c
@@ -1382,6 +1482,13 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x3
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
        SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
@@ -1431,6 +1538,7 @@ const (
        TCOFLUSH                         = 0x1
        TCOOFF                           = 0x0
        TCOON                            = 0x1
+       TCP_CC_INFO                      = 0x1a
        TCP_CONGESTION                   = 0xd
        TCP_COOKIE_IN_ALWAYS             = 0x1
        TCP_COOKIE_MAX                   = 0x10
@@ -1455,11 +1563,15 @@ const (
        TCP_MSS_DEFAULT                  = 0x218
        TCP_MSS_DESIRED                  = 0x4c4
        TCP_NODELAY                      = 0x1
+       TCP_NOTSENT_LOWAT                = 0x19
        TCP_QUEUE_SEQ                    = 0x15
        TCP_QUICKACK                     = 0xc
        TCP_REPAIR                       = 0x13
        TCP_REPAIR_OPTIONS               = 0x16
        TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
+       TCP_SAVED_SYN                    = 0x1c
+       TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
        TCP_S_DATA_IN                    = 0x4
        TCP_S_DATA_OUT                   = 0x8
@@ -1559,7 +1671,9 @@ const (
        TUNGETFILTER                     = 0x801054db
        TUNGETIFF                        = 0x800454d2
        TUNGETSNDBUF                     = 0x800454d3
+       TUNGETVNETBE                     = 0x800454df
        TUNGETVNETHDRSZ                  = 0x800454d7
+       TUNGETVNETLE                     = 0x800454dd
        TUNSETDEBUG                      = 0x400454c9
        TUNSETGROUP                      = 0x400454ce
        TUNSETIFF                        = 0x400454ca
@@ -1572,7 +1686,9 @@ const (
        TUNSETQUEUE                      = 0x400454d9
        TUNSETSNDBUF                     = 0x400454d4
        TUNSETTXFILTER                   = 0x400454d1
+       TUNSETVNETBE                     = 0x400454de
        TUNSETVNETHDRSZ                  = 0x400454d8
+       TUNSETVNETLE                     = 0x400454dc
        VDISCARD                         = 0xd
        VEOF                             = 0x4
        VEOL                             = 0xb
@@ -1581,7 +1697,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x6
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
        VSTART                           = 0x8
index 37d16f7..198a305 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build mips,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
 
 package unix
 
@@ -24,6 +24,7 @@ const (
        AF_DECnet                        = 0xc
        AF_ECONET                        = 0x13
        AF_FILE                          = 0x1
+       AF_IB                            = 0x1b
        AF_IEEE802154                    = 0x24
        AF_INET                          = 0x2
        AF_INET6                         = 0xa
@@ -31,16 +32,20 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x27
+       AF_MAX                           = 0x2b
+       AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
        AF_NETROM                        = 0x6
+       AF_NFC                           = 0x27
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -50,6 +55,7 @@ const (
        AF_TIPC                          = 0x1e
        AF_UNIX                          = 0x1
        AF_UNSPEC                        = 0x0
+       AF_VSOCK                         = 0x28
        AF_WANPIPE                       = 0x19
        AF_X25                           = 0x9
        ALG_OP_DECRYPT                   = 0x0
@@ -59,6 +65,7 @@ const (
        ALG_SET_IV                       = 0x2
        ALG_SET_KEY                      = 0x1
        ALG_SET_OP                       = 0x3
+       ARPHRD_6LOWPAN                   = 0x339
        ARPHRD_ADAPT                     = 0x108
        ARPHRD_APPLETLK                  = 0x8
        ARPHRD_ARCNET                    = 0x7
@@ -93,8 +100,10 @@ const (
        ARPHRD_IEEE80211_PRISM           = 0x322
        ARPHRD_IEEE80211_RADIOTAP        = 0x323
        ARPHRD_IEEE802154                = 0x324
+       ARPHRD_IEEE802154_MONITOR        = 0x325
        ARPHRD_IEEE802_TR                = 0x320
        ARPHRD_INFINIBAND                = 0x20
+       ARPHRD_IP6GRE                    = 0x337
        ARPHRD_IPDDP                     = 0x309
        ARPHRD_IPGRE                     = 0x30a
        ARPHRD_IRDA                      = 0x30f
@@ -102,6 +111,7 @@ const (
        ARPHRD_LOCALTLK                  = 0x305
        ARPHRD_LOOPBACK                  = 0x304
        ARPHRD_METRICOM                  = 0x17
+       ARPHRD_NETLINK                   = 0x338
        ARPHRD_NETROM                    = 0x0
        ARPHRD_NONE                      = 0xfffe
        ARPHRD_PHONET                    = 0x334
@@ -151,21 +161,22 @@ const (
        B75                              = 0x2
        B921600                          = 0x1007
        B9600                            = 0xd
-       BLKBSZGET                        = 0x80081270
-       BLKBSZSET                        = 0x40081271
-       BLKFLSBUF                        = 0x1261
-       BLKFRAGET                        = 0x1265
-       BLKFRASET                        = 0x1264
-       BLKGETSIZE                       = 0x1260
-       BLKGETSIZE64                     = 0x80081272
-       BLKRAGET                         = 0x1263
-       BLKRASET                         = 0x1262
-       BLKROGET                         = 0x125e
-       BLKROSET                         = 0x125d
-       BLKRRPART                        = 0x125f
-       BLKSECTGET                       = 0x1267
-       BLKSECTSET                       = 0x1266
-       BLKSSZGET                        = 0x1268
+       BLKBSZGET                        = 0x40041270
+       BLKBSZSET                        = 0x80041271
+       BLKFLSBUF                        = 0x20001261
+       BLKFRAGET                        = 0x20001265
+       BLKFRASET                        = 0x20001264
+       BLKGETSIZE                       = 0x20001260
+       BLKGETSIZE64                     = 0x40041272
+       BLKPBSZGET                       = 0x2000127b
+       BLKRAGET                         = 0x20001263
+       BLKRASET                         = 0x20001262
+       BLKROGET                         = 0x2000125e
+       BLKROSET                         = 0x2000125d
+       BLKRRPART                        = 0x2000125f
+       BLKSECTGET                       = 0x20001267
+       BLKSECTSET                       = 0x20001266
+       BLKSSZGET                        = 0x20001268
        BOTHER                           = 0x1000
        BPF_A                            = 0x10
        BPF_ABS                          = 0x20
@@ -187,6 +198,7 @@ const (
        BPF_LD                           = 0x0
        BPF_LDX                          = 0x1
        BPF_LEN                          = 0x80
+       BPF_LL_OFF                       = -0x200000
        BPF_LSH                          = 0x60
        BPF_MAJOR_VERSION                = 0x1
        BPF_MAXINSNS                     = 0x1000
@@ -194,9 +206,11 @@ const (
        BPF_MEMWORDS                     = 0x10
        BPF_MINOR_VERSION                = 0x1
        BPF_MISC                         = 0x7
+       BPF_MOD                          = 0x90
        BPF_MSH                          = 0xa0
        BPF_MUL                          = 0x20
        BPF_NEG                          = 0x80
+       BPF_NET_OFF                      = -0x100000
        BPF_OR                           = 0x40
        BPF_RET                          = 0x6
        BPF_RSH                          = 0x70
@@ -207,21 +221,28 @@ const (
        BPF_TXA                          = 0x80
        BPF_W                            = 0x0
        BPF_X                            = 0x8
+       BPF_XOR                          = 0xa0
        BRKINT                           = 0x2
        BS0                              = 0x0
        BS1                              = 0x2000
        BSDLY                            = 0x2000
        CAN_BCM                          = 0x2
        CAN_EFF_FLAG                     = 0x80000000
+       CAN_EFF_ID_BITS                  = 0x1d
        CAN_EFF_MASK                     = 0x1fffffff
        CAN_ERR_FLAG                     = 0x20000000
        CAN_ERR_MASK                     = 0x1fffffff
        CAN_INV_FILTER                   = 0x20000000
        CAN_ISOTP                        = 0x6
+       CAN_MAX_DLC                      = 0x8
+       CAN_MAX_DLEN                     = 0x8
        CAN_MCNET                        = 0x5
+       CAN_MTU                          = 0x10
        CAN_NPROTO                       = 0x7
        CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
        CAN_RTR_FLAG                     = 0x40000000
+       CAN_SFF_ID_BITS                  = 0xb
        CAN_SFF_MASK                     = 0x7ff
        CAN_TP16                         = 0x3
        CAN_TP20                         = 0x4
@@ -230,6 +251,8 @@ const (
        CFLUSH                           = 0xf
        CIBAUD                           = 0x100f0000
        CLOCAL                           = 0x800
+       CLOCK_BOOTTIME                   = 0x7
+       CLOCK_BOOTTIME_ALARM             = 0x9
        CLOCK_DEFAULT                    = 0x0
        CLOCK_EXT                        = 0x1
        CLOCK_INT                        = 0x2
@@ -238,7 +261,9 @@ const (
        CLOCK_MONOTONIC_RAW              = 0x4
        CLOCK_PROCESS_CPUTIME_ID         = 0x2
        CLOCK_REALTIME                   = 0x0
+       CLOCK_REALTIME_ALARM             = 0x8
        CLOCK_REALTIME_COARSE            = 0x5
+       CLOCK_TAI                        = 0xb
        CLOCK_THREAD_CPUTIME_ID          = 0x3
        CLOCK_TXFROMRX                   = 0x4
        CLOCK_TXINT                      = 0x3
@@ -248,6 +273,7 @@ const (
        CLONE_FILES                      = 0x400
        CLONE_FS                         = 0x200
        CLONE_IO                         = 0x80000000
+       CLONE_NEWCGROUP                  = 0x2000000
        CLONE_NEWIPC                     = 0x8000000
        CLONE_NEWNET                     = 0x40000000
        CLONE_NEWNS                      = 0x20000
@@ -306,7 +332,8 @@ const (
        ENCODING_NRZ                     = 0x1
        ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
-       EPOLLET                          = -0x80000000
+       EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -316,19 +343,22 @@ const (
        EPOLLRDBAND                      = 0x80
        EPOLLRDHUP                       = 0x2000
        EPOLLRDNORM                      = 0x40
+       EPOLLWAKEUP                      = 0x20000000
        EPOLLWRBAND                      = 0x200
        EPOLLWRNORM                      = 0x100
        EPOLL_CLOEXEC                    = 0x80000
        EPOLL_CTL_ADD                    = 0x1
        EPOLL_CTL_DEL                    = 0x2
        EPOLL_CTL_MOD                    = 0x3
-       EPOLL_NONBLOCK                   = 0x80
        ETH_P_1588                       = 0x88f7
        ETH_P_8021AD                     = 0x88a8
        ETH_P_8021AH                     = 0x88e7
        ETH_P_8021Q                      = 0x8100
+       ETH_P_80221                      = 0x8917
        ETH_P_802_2                      = 0x4
        ETH_P_802_3                      = 0x1
+       ETH_P_802_3_MIN                  = 0x600
+       ETH_P_802_EX1                    = 0x88b5
        ETH_P_AARP                       = 0x80f3
        ETH_P_AF_IUCV                    = 0xfbfb
        ETH_P_ALL                        = 0x3
@@ -339,9 +369,11 @@ const (
        ETH_P_ATMFATE                    = 0x8884
        ETH_P_ATMMPOA                    = 0x884c
        ETH_P_AX25                       = 0x2
+       ETH_P_BATMAN                     = 0x4305
        ETH_P_BPQ                        = 0x8ff
        ETH_P_CAIF                       = 0xf7
        ETH_P_CAN                        = 0xc
+       ETH_P_CANFD                      = 0xd
        ETH_P_CONTROL                    = 0x16
        ETH_P_CUST                       = 0x6006
        ETH_P_DDCMP                      = 0x6
@@ -356,6 +388,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -367,9 +400,13 @@ const (
        ETH_P_LINK_CTL                   = 0x886c
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
+       ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
+       ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -377,6 +414,7 @@ const (
        ETH_P_PPP_DISC                   = 0x8863
        ETH_P_PPP_MP                     = 0x8
        ETH_P_PPP_SES                    = 0x8864
+       ETH_P_PRP                        = 0x88fb
        ETH_P_PUP                        = 0x200
        ETH_P_PUPAT                      = 0x201
        ETH_P_QINQ1                      = 0x9100
@@ -391,9 +429,11 @@ const (
        ETH_P_TIPC                       = 0x88ca
        ETH_P_TRAILER                    = 0x1c
        ETH_P_TR_802_2                   = 0x11
+       ETH_P_TSN                        = 0x22f0
        ETH_P_WAN_PPP                    = 0x7
        ETH_P_WCCP                       = 0x883e
        ETH_P_X25                        = 0x805
+       ETH_P_XDSA                       = 0xf8
        EXTA                             = 0xe
        EXTB                             = 0xf
        EXTPROC                          = 0x10000
@@ -402,6 +442,7 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
@@ -409,6 +450,24 @@ const (
        FF1                              = 0x8000
        FFDLY                            = 0x8000
        FLUSHO                           = 0x2000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -423,6 +482,9 @@ const (
        F_GETSIG                         = 0xb
        F_LOCK                           = 0x1
        F_NOTIFY                         = 0x402
+       F_OFD_GETLK                      = 0x24
+       F_OFD_SETLK                      = 0x25
+       F_OFD_SETLKW                     = 0x26
        F_OK                             = 0x0
        F_RDLCK                          = 0x0
        F_SETFD                          = 0x2
@@ -453,57 +515,48 @@ const (
        IFA_F_DADFAILED                  = 0x8
        IFA_F_DEPRECATED                 = 0x20
        IFA_F_HOMEADDRESS                = 0x10
+       IFA_F_MANAGETEMPADDR             = 0x100
+       IFA_F_MCAUTOJOIN                 = 0x400
        IFA_F_NODAD                      = 0x2
+       IFA_F_NOPREFIXROUTE              = 0x200
        IFA_F_OPTIMISTIC                 = 0x4
        IFA_F_PERMANENT                  = 0x80
        IFA_F_SECONDARY                  = 0x1
+       IFA_F_STABLE_PRIVACY             = 0x800
        IFA_F_TEMPORARY                  = 0x1
        IFA_F_TENTATIVE                  = 0x40
-       IFA_MAX                          = 0x7
-       IFF_802_1Q_VLAN                  = 0x1
+       IFA_MAX                          = 0x8
        IFF_ALLMULTI                     = 0x200
+       IFF_ATTACH_QUEUE                 = 0x200
        IFF_AUTOMEDIA                    = 0x4000
-       IFF_BONDING                      = 0x20
-       IFF_BRIDGE_PORT                  = 0x4000
        IFF_BROADCAST                    = 0x2
        IFF_DEBUG                        = 0x4
-       IFF_DISABLE_NETPOLL              = 0x1000
-       IFF_DONT_BRIDGE                  = 0x800
+       IFF_DETACH_QUEUE                 = 0x400
        IFF_DORMANT                      = 0x20000
        IFF_DYNAMIC                      = 0x8000
-       IFF_EBRIDGE                      = 0x2
        IFF_ECHO                         = 0x40000
-       IFF_ISATAP                       = 0x80
        IFF_LOOPBACK                     = 0x8
        IFF_LOWER_UP                     = 0x10000
-       IFF_MACVLAN_PORT                 = 0x2000
        IFF_MASTER                       = 0x400
-       IFF_MASTER_8023AD                = 0x8
-       IFF_MASTER_ALB                   = 0x10
-       IFF_MASTER_ARPMON                = 0x100
        IFF_MULTICAST                    = 0x1000
+       IFF_MULTI_QUEUE                  = 0x100
        IFF_NOARP                        = 0x80
+       IFF_NOFILTER                     = 0x1000
        IFF_NOTRAILERS                   = 0x20
        IFF_NO_PI                        = 0x1000
        IFF_ONE_QUEUE                    = 0x2000
-       IFF_OVS_DATAPATH                 = 0x8000
+       IFF_PERSIST                      = 0x800
        IFF_POINTOPOINT                  = 0x10
        IFF_PORTSEL                      = 0x2000
        IFF_PROMISC                      = 0x100
        IFF_RUNNING                      = 0x40
        IFF_SLAVE                        = 0x800
-       IFF_SLAVE_INACTIVE               = 0x4
-       IFF_SLAVE_NEEDARP                = 0x40
        IFF_TAP                          = 0x2
        IFF_TUN                          = 0x1
        IFF_TUN_EXCL                     = 0x8000
-       IFF_TX_SKB_SHARING               = 0x10000
-       IFF_UNICAST_FLT                  = 0x20000
        IFF_UP                           = 0x1
        IFF_VNET_HDR                     = 0x4000
        IFF_VOLATILE                     = 0x70c5a
-       IFF_WAN_HDLC                     = 0x200
-       IFF_XMIT_DST_RELEASE             = 0x400
        IFNAMSIZ                         = 0x10
        IGNBRK                           = 0x1
        IGNCR                            = 0x80
@@ -550,6 +603,7 @@ const (
        IN_Q_OVERFLOW                    = 0x4000
        IN_UNMOUNT                       = 0x2000
        IPPROTO_AH                       = 0x33
+       IPPROTO_BEETPH                   = 0x5e
        IPPROTO_COMP                     = 0x6c
        IPPROTO_DCCP                     = 0x21
        IPPROTO_DSTOPTS                  = 0x3c
@@ -566,6 +620,8 @@ const (
        IPPROTO_IP                       = 0x0
        IPPROTO_IPIP                     = 0x4
        IPPROTO_IPV6                     = 0x29
+       IPPROTO_MH                       = 0x87
+       IPPROTO_MPLS                     = 0x89
        IPPROTO_MTP                      = 0x5c
        IPPROTO_NONE                     = 0x3b
        IPPROTO_PIM                      = 0x67
@@ -588,8 +644,10 @@ const (
        IPV6_ADD_MEMBERSHIP              = 0x14
        IPV6_AUTHHDR                     = 0xa
        IPV6_CHECKSUM                    = 0x7
+       IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -603,15 +661,19 @@ const (
        IPV6_MULTICAST_IF                = 0x11
        IPV6_MULTICAST_LOOP              = 0x13
        IPV6_NEXTHOP                     = 0x9
+       IPV6_PATHMTU                     = 0x3d
        IPV6_PKTINFO                     = 0x32
        IPV6_PMTUDISC_DO                 = 0x2
        IPV6_PMTUDISC_DONT               = 0x0
+       IPV6_PMTUDISC_INTERFACE          = 0x4
+       IPV6_PMTUDISC_OMIT               = 0x5
        IPV6_PMTUDISC_PROBE              = 0x3
        IPV6_PMTUDISC_WANT               = 0x1
        IPV6_RECVDSTOPTS                 = 0x3a
        IPV6_RECVERR                     = 0x19
        IPV6_RECVHOPLIMIT                = 0x33
        IPV6_RECVHOPOPTS                 = 0x35
+       IPV6_RECVPATHMTU                 = 0x3c
        IPV6_RECVPKTINFO                 = 0x31
        IPV6_RECVRTHDR                   = 0x38
        IPV6_RECVTCLASS                  = 0x42
@@ -629,7 +691,9 @@ const (
        IPV6_XFRM_POLICY                 = 0x23
        IP_ADD_MEMBERSHIP                = 0x23
        IP_ADD_SOURCE_MEMBERSHIP         = 0x27
+       IP_BIND_ADDRESS_NO_PORT          = 0x18
        IP_BLOCK_SOURCE                  = 0x26
+       IP_CHECKSUM                      = 0x17
        IP_DEFAULT_MULTICAST_LOOP        = 0x1
        IP_DEFAULT_MULTICAST_TTL         = 0x1
        IP_DF                            = 0x4000
@@ -646,9 +710,11 @@ const (
        IP_MSS                           = 0x240
        IP_MTU                           = 0xe
        IP_MTU_DISCOVER                  = 0xa
+       IP_MULTICAST_ALL                 = 0x31
        IP_MULTICAST_IF                  = 0x20
        IP_MULTICAST_LOOP                = 0x22
        IP_MULTICAST_TTL                 = 0x21
+       IP_NODEFRAG                      = 0x16
        IP_OFFMASK                       = 0x1fff
        IP_OPTIONS                       = 0x4
        IP_ORIGDSTADDR                   = 0x14
@@ -658,6 +724,8 @@ const (
        IP_PMTUDISC                      = 0xa
        IP_PMTUDISC_DO                   = 0x2
        IP_PMTUDISC_DONT                 = 0x0
+       IP_PMTUDISC_INTERFACE            = 0x4
+       IP_PMTUDISC_OMIT                 = 0x5
        IP_PMTUDISC_PROBE                = 0x3
        IP_PMTUDISC_WANT                 = 0x1
        IP_RECVERR                       = 0xb
@@ -673,6 +741,7 @@ const (
        IP_TRANSPARENT                   = 0x13
        IP_TTL                           = 0x2
        IP_UNBLOCK_SOURCE                = 0x25
+       IP_UNICAST_IF                    = 0x32
        IP_XFRM_POLICY                   = 0x11
        ISIG                             = 0x1
        ISTRIP                           = 0x20
@@ -695,9 +764,12 @@ const (
        LOCK_NB                          = 0x4
        LOCK_SH                          = 0x1
        LOCK_UN                          = 0x8
+       MADV_DODUMP                      = 0x11
        MADV_DOFORK                      = 0xb
+       MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -715,6 +787,9 @@ const (
        MAP_FILE                         = 0x0
        MAP_FIXED                        = 0x10
        MAP_GROWSDOWN                    = 0x1000
+       MAP_HUGETLB                      = 0x80000
+       MAP_HUGE_MASK                    = 0x3f
+       MAP_HUGE_SHIFT                   = 0x1a
        MAP_LOCKED                       = 0x8000
        MAP_NONBLOCK                     = 0x20000
        MAP_NORESERVE                    = 0x400
@@ -722,12 +797,15 @@ const (
        MAP_PRIVATE                      = 0x2
        MAP_RENAME                       = 0x800
        MAP_SHARED                       = 0x1
+       MAP_STACK                        = 0x40000
        MAP_TYPE                         = 0xf
        MCL_CURRENT                      = 0x1
        MCL_FUTURE                       = 0x2
+       MCL_ONFAULT                      = 0x4
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -751,10 +829,12 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
        MS_KERNMOUNT                     = 0x400000
+       MS_LAZYTIME                      = 0x2000000
        MS_MANDLOCK                      = 0x40
        MS_MGC_MSK                       = 0xffff0000
        MS_MGC_VAL                       = 0xc0ed0000
@@ -763,6 +843,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -771,7 +853,7 @@ const (
        MS_REC                           = 0x4000
        MS_RELATIME                      = 0x200000
        MS_REMOUNT                       = 0x20
-       MS_RMT_MASK                      = 0x800051
+       MS_RMT_MASK                      = 0x2800051
        MS_SHARED                        = 0x100000
        MS_SILENT                        = 0x8000
        MS_SLAVE                         = 0x80000
@@ -779,6 +861,7 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
@@ -865,10 +948,12 @@ const (
        O_NOCTTY                         = 0x800
        O_NOFOLLOW                       = 0x20000
        O_NONBLOCK                       = 0x80
+       O_PATH                           = 0x200000
        O_RDONLY                         = 0x0
        O_RDWR                           = 0x2
        O_RSYNC                          = 0x4010
        O_SYNC                           = 0x4010
+       O_TMPFILE                        = 0x410000
        O_TRUNC                          = 0x200
        O_WRONLY                         = 0x1
        PACKET_ADD_MEMBERSHIP            = 0x1
@@ -877,13 +962,21 @@ const (
        PACKET_COPY_THRESH               = 0x7
        PACKET_DROP_MEMBERSHIP           = 0x2
        PACKET_FANOUT                    = 0x12
+       PACKET_FANOUT_CBPF               = 0x6
        PACKET_FANOUT_CPU                = 0x2
+       PACKET_FANOUT_DATA               = 0x16
+       PACKET_FANOUT_EBPF               = 0x7
        PACKET_FANOUT_FLAG_DEFRAG        = 0x8000
+       PACKET_FANOUT_FLAG_ROLLOVER      = 0x1000
        PACKET_FANOUT_HASH               = 0x0
        PACKET_FANOUT_LB                 = 0x1
+       PACKET_FANOUT_QM                 = 0x5
+       PACKET_FANOUT_RND                = 0x4
+       PACKET_FANOUT_ROLLOVER           = 0x3
        PACKET_FASTROUTE                 = 0x6
        PACKET_HDRLEN                    = 0xb
        PACKET_HOST                      = 0x0
+       PACKET_KERNEL                    = 0x7
        PACKET_LOOPBACK                  = 0x5
        PACKET_LOSS                      = 0xe
        PACKET_MR_ALLMULTI               = 0x2
@@ -894,13 +987,17 @@ const (
        PACKET_ORIGDEV                   = 0x9
        PACKET_OTHERHOST                 = 0x3
        PACKET_OUTGOING                  = 0x4
+       PACKET_QDISC_BYPASS              = 0x14
        PACKET_RECV_OUTPUT               = 0x3
        PACKET_RESERVE                   = 0xc
+       PACKET_ROLLOVER_STATS            = 0x15
        PACKET_RX_RING                   = 0x5
        PACKET_STATISTICS                = 0x6
        PACKET_TIMESTAMP                 = 0x11
+       PACKET_TX_HAS_OFF                = 0x13
        PACKET_TX_RING                   = 0xd
        PACKET_TX_TIMESTAMP              = 0x10
+       PACKET_USER                      = 0x6
        PACKET_VERSION                   = 0xa
        PACKET_VNET_HDR                  = 0xf
        PARENB                           = 0x100
@@ -926,6 +1023,11 @@ const (
        PROT_WRITE                       = 0x2
        PR_CAPBSET_DROP                  = 0x18
        PR_CAPBSET_READ                  = 0x17
+       PR_CAP_AMBIENT                   = 0x2f
+       PR_CAP_AMBIENT_CLEAR_ALL         = 0x4
+       PR_CAP_AMBIENT_IS_SET            = 0x1
+       PR_CAP_AMBIENT_LOWER             = 0x3
+       PR_CAP_AMBIENT_RAISE             = 0x2
        PR_ENDIAN_BIG                    = 0x0
        PR_ENDIAN_LITTLE                 = 0x1
        PR_ENDIAN_PPC_LITTLE             = 0x2
@@ -941,15 +1043,22 @@ const (
        PR_FP_EXC_RES                    = 0x80000
        PR_FP_EXC_SW_ENABLE              = 0x80
        PR_FP_EXC_UND                    = 0x40000
+       PR_FP_MODE_FR                    = 0x1
+       PR_FP_MODE_FRE                   = 0x2
+       PR_GET_CHILD_SUBREAPER           = 0x25
        PR_GET_DUMPABLE                  = 0x3
        PR_GET_ENDIAN                    = 0x13
        PR_GET_FPEMU                     = 0x9
        PR_GET_FPEXC                     = 0xb
+       PR_GET_FP_MODE                   = 0x2e
        PR_GET_KEEPCAPS                  = 0x7
        PR_GET_NAME                      = 0x10
+       PR_GET_NO_NEW_PRIVS              = 0x27
        PR_GET_PDEATHSIG                 = 0x2
        PR_GET_SECCOMP                   = 0x15
        PR_GET_SECUREBITS                = 0x1b
+       PR_GET_THP_DISABLE               = 0x2a
+       PR_GET_TID_ADDRESS               = 0x28
        PR_GET_TIMERSLACK                = 0x1e
        PR_GET_TIMING                    = 0xd
        PR_GET_TSC                       = 0x19
@@ -961,15 +1070,39 @@ const (
        PR_MCE_KILL_GET                  = 0x22
        PR_MCE_KILL_LATE                 = 0x0
        PR_MCE_KILL_SET                  = 0x1
+       PR_MPX_DISABLE_MANAGEMENT        = 0x2c
+       PR_MPX_ENABLE_MANAGEMENT         = 0x2b
+       PR_SET_CHILD_SUBREAPER           = 0x24
        PR_SET_DUMPABLE                  = 0x4
        PR_SET_ENDIAN                    = 0x14
        PR_SET_FPEMU                     = 0xa
        PR_SET_FPEXC                     = 0xc
+       PR_SET_FP_MODE                   = 0x2d
        PR_SET_KEEPCAPS                  = 0x8
+       PR_SET_MM                        = 0x23
+       PR_SET_MM_ARG_END                = 0x9
+       PR_SET_MM_ARG_START              = 0x8
+       PR_SET_MM_AUXV                   = 0xc
+       PR_SET_MM_BRK                    = 0x7
+       PR_SET_MM_END_CODE               = 0x2
+       PR_SET_MM_END_DATA               = 0x4
+       PR_SET_MM_ENV_END                = 0xb
+       PR_SET_MM_ENV_START              = 0xa
+       PR_SET_MM_EXE_FILE               = 0xd
+       PR_SET_MM_MAP                    = 0xe
+       PR_SET_MM_MAP_SIZE               = 0xf
+       PR_SET_MM_START_BRK              = 0x6
+       PR_SET_MM_START_CODE             = 0x1
+       PR_SET_MM_START_DATA             = 0x3
+       PR_SET_MM_START_STACK            = 0x5
        PR_SET_NAME                      = 0xf
+       PR_SET_NO_NEW_PRIVS              = 0x26
        PR_SET_PDEATHSIG                 = 0x1
+       PR_SET_PTRACER                   = 0x59616d61
+       PR_SET_PTRACER_ANY               = 0xffffffff
        PR_SET_SECCOMP                   = 0x16
        PR_SET_SECUREBITS                = 0x1c
+       PR_SET_THP_DISABLE               = 0x29
        PR_SET_TIMERSLACK                = 0x1d
        PR_SET_TIMING                    = 0xe
        PR_SET_TSC                       = 0x1a
@@ -989,7 +1122,8 @@ const (
        PTRACE_EVENT_EXEC                = 0x4
        PTRACE_EVENT_EXIT                = 0x6
        PTRACE_EVENT_FORK                = 0x1
-       PTRACE_EVENT_STOP                = 0x7
+       PTRACE_EVENT_SECCOMP             = 0x7
+       PTRACE_EVENT_STOP                = 0x80
        PTRACE_EVENT_VFORK               = 0x2
        PTRACE_EVENT_VFORK_DONE          = 0x5
        PTRACE_GETEVENTMSG               = 0x4201
@@ -997,6 +1131,7 @@ const (
        PTRACE_GETREGS                   = 0xc
        PTRACE_GETREGSET                 = 0x4204
        PTRACE_GETSIGINFO                = 0x4202
+       PTRACE_GETSIGMASK                = 0x420a
        PTRACE_GET_THREAD_AREA           = 0x19
        PTRACE_GET_THREAD_AREA_3264      = 0xc4
        PTRACE_GET_WATCH_REGS            = 0xd0
@@ -1004,16 +1139,21 @@ const (
        PTRACE_KILL                      = 0x8
        PTRACE_LISTEN                    = 0x4208
        PTRACE_OLDSETOPTIONS             = 0x15
-       PTRACE_O_MASK                    = 0x7f
+       PTRACE_O_EXITKILL                = 0x100000
+       PTRACE_O_MASK                    = 0x3000ff
+       PTRACE_O_SUSPEND_SECCOMP         = 0x200000
        PTRACE_O_TRACECLONE              = 0x8
        PTRACE_O_TRACEEXEC               = 0x10
        PTRACE_O_TRACEEXIT               = 0x40
        PTRACE_O_TRACEFORK               = 0x2
+       PTRACE_O_TRACESECCOMP            = 0x80
        PTRACE_O_TRACESYSGOOD            = 0x1
        PTRACE_O_TRACEVFORK              = 0x4
        PTRACE_O_TRACEVFORKDONE          = 0x20
        PTRACE_PEEKDATA                  = 0x2
        PTRACE_PEEKDATA_3264             = 0xc1
+       PTRACE_PEEKSIGINFO               = 0x4209
+       PTRACE_PEEKSIGINFO_SHARED        = 0x1
        PTRACE_PEEKTEXT                  = 0x1
        PTRACE_PEEKTEXT_3264             = 0xc0
        PTRACE_PEEKUSR                   = 0x3
@@ -1022,13 +1162,14 @@ const (
        PTRACE_POKETEXT                  = 0x4
        PTRACE_POKETEXT_3264             = 0xc2
        PTRACE_POKEUSR                   = 0x6
+       PTRACE_SECCOMP_GET_FILTER        = 0x420c
        PTRACE_SEIZE                     = 0x4206
-       PTRACE_SEIZE_DEVEL               = 0x80000000
        PTRACE_SETFPREGS                 = 0xf
        PTRACE_SETOPTIONS                = 0x4200
        PTRACE_SETREGS                   = 0xd
        PTRACE_SETREGSET                 = 0x4205
        PTRACE_SETSIGINFO                = 0x4203
+       PTRACE_SETSIGMASK                = 0x420b
        PTRACE_SET_THREAD_AREA           = 0x1a
        PTRACE_SET_WATCH_REGS            = 0xd1
        PTRACE_SINGLESTEP                = 0x9
@@ -1041,20 +1182,23 @@ const (
        RLIMIT_FSIZE                     = 0x1
        RLIMIT_NOFILE                    = 0x5
        RLIMIT_STACK                     = 0x3
-       RLIM_INFINITY                    = 0x7fffffffffffffff
+       RLIM_INFINITY                    = -0x1
        RTAX_ADVMSS                      = 0x8
+       RTAX_CC_ALGO                     = 0x10
        RTAX_CWND                        = 0x7
        RTAX_FEATURES                    = 0xc
        RTAX_FEATURE_ALLFRAG             = 0x8
        RTAX_FEATURE_ECN                 = 0x1
+       RTAX_FEATURE_MASK                = 0xf
        RTAX_FEATURE_SACK                = 0x2
        RTAX_FEATURE_TIMESTAMP           = 0x4
        RTAX_HOPLIMIT                    = 0xa
        RTAX_INITCWND                    = 0xb
        RTAX_INITRWND                    = 0xe
        RTAX_LOCK                        = 0x1
-       RTAX_MAX                         = 0xe
+       RTAX_MAX                         = 0x10
        RTAX_MTU                         = 0x2
+       RTAX_QUICKACK                    = 0xf
        RTAX_REORDERING                  = 0x9
        RTAX_RTO_MIN                     = 0xd
        RTAX_RTT                         = 0x4
@@ -1063,7 +1207,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x10
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1105,7 +1249,9 @@ const (
        RTM_DELADDR                      = 0x15
        RTM_DELADDRLABEL                 = 0x49
        RTM_DELLINK                      = 0x11
+       RTM_DELMDB                       = 0x55
        RTM_DELNEIGH                     = 0x1d
+       RTM_DELNSID                      = 0x59
        RTM_DELQDISC                     = 0x25
        RTM_DELROUTE                     = 0x19
        RTM_DELRULE                      = 0x21
@@ -1113,6 +1259,7 @@ const (
        RTM_DELTFILTER                   = 0x2d
        RTM_F_CLONED                     = 0x200
        RTM_F_EQUALIZE                   = 0x400
+       RTM_F_LOOKUP_TABLE               = 0x1000
        RTM_F_NOTIFY                     = 0x100
        RTM_F_PREFIX                     = 0x800
        RTM_GETACTION                    = 0x32
@@ -1121,44 +1268,57 @@ const (
        RTM_GETANYCAST                   = 0x3e
        RTM_GETDCB                       = 0x4e
        RTM_GETLINK                      = 0x12
+       RTM_GETMDB                       = 0x56
        RTM_GETMULTICAST                 = 0x3a
        RTM_GETNEIGH                     = 0x1e
        RTM_GETNEIGHTBL                  = 0x42
+       RTM_GETNETCONF                   = 0x52
+       RTM_GETNSID                      = 0x5a
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x4f
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
        RTM_NEWLINK                      = 0x10
+       RTM_NEWMDB                       = 0x54
        RTM_NEWNDUSEROPT                 = 0x44
        RTM_NEWNEIGH                     = 0x1c
        RTM_NEWNEIGHTBL                  = 0x40
+       RTM_NEWNETCONF                   = 0x50
+       RTM_NEWNSID                      = 0x58
        RTM_NEWPREFIX                    = 0x34
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x10
-       RTM_NR_MSGTYPES                  = 0x40
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
+       RTNH_F_LINKDOWN                  = 0x10
+       RTNH_F_OFFLOAD                   = 0x8
        RTNH_F_ONLINK                    = 0x4
        RTNH_F_PERVASIVE                 = 0x2
        RTN_MAX                          = 0xb
+       RTPROT_BABEL                     = 0x2a
        RTPROT_BIRD                      = 0xc
        RTPROT_BOOT                      = 0x3
        RTPROT_DHCP                      = 0x10
        RTPROT_DNROUTED                  = 0xd
        RTPROT_GATED                     = 0x8
        RTPROT_KERNEL                    = 0x2
+       RTPROT_MROUTED                   = 0x11
        RTPROT_MRT                       = 0xa
        RTPROT_NTK                       = 0xf
        RTPROT_RA                        = 0x9
@@ -1179,7 +1339,9 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
+       SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
        SHUT_RDWR                        = 0x2
        SHUT_WR                          = 0x1
@@ -1251,37 +1413,63 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x2
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
        SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0xffff
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1009
+       SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
+       SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x20
        SO_BSDCOMPAT                     = 0xe
+       SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
+       SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
        SO_DOMAIN                        = 0x1029
        SO_DONTROUTE                     = 0x10
        SO_ERROR                         = 0x1007
+       SO_GET_FILTER                    = 0x1a
+       SO_INCOMING_CPU                  = 0x31
        SO_KEEPALIVE                     = 0x8
        SO_LINGER                        = 0x80
+       SO_LOCK_FILTER                   = 0x2c
        SO_MARK                          = 0x24
+       SO_MAX_PACING_RATE               = 0x2f
+       SO_NOFCS                         = 0x2b
        SO_NO_CHECK                      = 0xb
        SO_OOBINLINE                     = 0x100
        SO_PASSCRED                      = 0x11
        SO_PASSSEC                       = 0x22
+       SO_PEEK_OFF                      = 0x2a
        SO_PEERCRED                      = 0x12
        SO_PEERNAME                      = 0x1c
        SO_PEERSEC                       = 0x1e
@@ -1292,10 +1480,12 @@ const (
        SO_RCVLOWAT                      = 0x1004
        SO_RCVTIMEO                      = 0x1006
        SO_REUSEADDR                     = 0x4
+       SO_REUSEPORT                     = 0x200
        SO_RXQ_OVFL                      = 0x28
        SO_SECURITY_AUTHENTICATION       = 0x16
        SO_SECURITY_ENCRYPTION_NETWORK   = 0x18
        SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
+       SO_SELECT_ERR_QUEUE              = 0x2d
        SO_SNDBUF                        = 0x1001
        SO_SNDBUFFORCE                   = 0x1f
        SO_SNDLOWAT                      = 0x1003
@@ -1305,6 +1495,14 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x1008
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
+       SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
        SPLICE_F_MOVE                    = 0x1
@@ -1352,9 +1550,17 @@ const (
        TCOFLUSH                         = 0x1
        TCOOFF                           = 0x0
        TCOON                            = 0x1
+       TCP_CC_INFO                      = 0x1a
        TCP_CONGESTION                   = 0xd
+       TCP_COOKIE_IN_ALWAYS             = 0x1
+       TCP_COOKIE_MAX                   = 0x10
+       TCP_COOKIE_MIN                   = 0x8
+       TCP_COOKIE_OUT_NEVER             = 0x2
+       TCP_COOKIE_PAIR_SIZE             = 0x20
+       TCP_COOKIE_TRANSACTIONS          = 0xf
        TCP_CORK                         = 0x3
        TCP_DEFER_ACCEPT                 = 0x9
+       TCP_FASTOPEN                     = 0x17
        TCP_INFO                         = 0xb
        TCP_KEEPCNT                      = 0x6
        TCP_KEEPIDLE                     = 0x4
@@ -1366,9 +1572,25 @@ const (
        TCP_MD5SIG                       = 0xe
        TCP_MD5SIG_MAXKEYLEN             = 0x50
        TCP_MSS                          = 0x200
+       TCP_MSS_DEFAULT                  = 0x218
+       TCP_MSS_DESIRED                  = 0x4c4
        TCP_NODELAY                      = 0x1
+       TCP_NOTSENT_LOWAT                = 0x19
+       TCP_QUEUE_SEQ                    = 0x15
        TCP_QUICKACK                     = 0xc
+       TCP_REPAIR                       = 0x13
+       TCP_REPAIR_OPTIONS               = 0x16
+       TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
+       TCP_SAVED_SYN                    = 0x1c
+       TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
+       TCP_S_DATA_IN                    = 0x4
+       TCP_S_DATA_OUT                   = 0x8
+       TCP_THIN_DUPACK                  = 0x11
+       TCP_THIN_LINEAR_TIMEOUTS         = 0x10
+       TCP_TIMESTAMP                    = 0x18
+       TCP_USER_TIMEOUT                 = 0x12
        TCP_WINDOW_CLAMP                 = 0xa
        TCSAFLUSH                        = 0x5410
        TCSBRK                           = 0x5405
@@ -1389,11 +1611,15 @@ const (
        TIOCGDEV                         = 0x40045432
        TIOCGETD                         = 0x7400
        TIOCGETP                         = 0x7408
+       TIOCGEXCL                        = 0x40045440
        TIOCGICOUNT                      = 0x5492
        TIOCGLCKTRMIOS                   = 0x548b
        TIOCGLTC                         = 0x7474
        TIOCGPGRP                        = 0x40047477
+       TIOCGPKT                         = 0x40045438
+       TIOCGPTLCK                       = 0x40045439
        TIOCGPTN                         = 0x40045430
+       TIOCGRS485                       = 0x4020542e
        TIOCGSERIAL                      = 0x5484
        TIOCGSID                         = 0x7416
        TIOCGSOFTCAR                     = 0x5481
@@ -1446,6 +1672,7 @@ const (
        TIOCSLTC                         = 0x7475
        TIOCSPGRP                        = 0x80047476
        TIOCSPTLCK                       = 0x80045431
+       TIOCSRS485                       = 0xc020542f
        TIOCSSERIAL                      = 0x5485
        TIOCSSOFTCAR                     = 0x5482
        TIOCSTI                          = 0x5472
@@ -1455,20 +1682,27 @@ const (
        TUNATTACHFILTER                  = 0x800854d5
        TUNDETACHFILTER                  = 0x800854d6
        TUNGETFEATURES                   = 0x400454cf
+       TUNGETFILTER                     = 0x400854db
        TUNGETIFF                        = 0x400454d2
        TUNGETSNDBUF                     = 0x400454d3
+       TUNGETVNETBE                     = 0x400454df
        TUNGETVNETHDRSZ                  = 0x400454d7
+       TUNGETVNETLE                     = 0x400454dd
        TUNSETDEBUG                      = 0x800454c9
        TUNSETGROUP                      = 0x800454ce
        TUNSETIFF                        = 0x800454ca
+       TUNSETIFINDEX                    = 0x800454da
        TUNSETLINK                       = 0x800454cd
        TUNSETNOCSUM                     = 0x800454c8
        TUNSETOFFLOAD                    = 0x800454d0
        TUNSETOWNER                      = 0x800454cc
        TUNSETPERSIST                    = 0x800454cb
+       TUNSETQUEUE                      = 0x800454d9
        TUNSETSNDBUF                     = 0x800454d4
        TUNSETTXFILTER                   = 0x800454d1
+       TUNSETVNETBE                     = 0x800454de
        TUNSETVNETHDRSZ                  = 0x800454d8
+       TUNSETVNETLE                     = 0x800454dc
        VDISCARD                         = 0xd
        VEOF                             = 0x10
        VEOL                             = 0x11
@@ -1477,7 +1711,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x4
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
        VSTART                           = 0x8
@@ -1805,7 +2045,7 @@ var errors = [...]string{
        148:  "no route to host",
        149:  "operation already in progress",
        150:  "operation now in progress",
-       151:  "stale NFS file handle",
+       151:  "stale file handle",
        158:  "operation canceled",
        159:  "no medium found",
        160:  "wrong medium type",
@@ -1816,7 +2056,7 @@ var errors = [...]string{
        165:  "owner died",
        166:  "state not recoverable",
        167:  "operation not possible due to RF-kill",
-       168:  "unknown error 168",
+       168:  "memory page has hardware error",
        1133: "disk quota exceeded",
 }
 
index 3aa557b..37d66f3 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build mips64,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
 
 package unix
 
@@ -32,10 +32,11 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x29
+       AF_MAX                           = 0x2b
        AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
@@ -44,6 +45,7 @@ const (
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -159,21 +161,23 @@ const (
        B75                              = 0x2
        B921600                          = 0x1007
        B9600                            = 0xd
-       BLKBSZGET                        = 0x80081270
-       BLKBSZSET                        = 0x40081271
-       BLKFLSBUF                        = 0x1261
-       BLKFRAGET                        = 0x1265
-       BLKFRASET                        = 0x1264
-       BLKGETSIZE                       = 0x1260
-       BLKGETSIZE64                     = 0x80081272
-       BLKRAGET                         = 0x1263
-       BLKRASET                         = 0x1262
-       BLKROGET                         = 0x125e
-       BLKROSET                         = 0x125d
-       BLKRRPART                        = 0x125f
-       BLKSECTGET                       = 0x1267
-       BLKSECTSET                       = 0x1266
-       BLKSSZGET                        = 0x1268
+       BLKBSZGET                        = 0x40081270
+       BLKBSZSET                        = 0x80081271
+       BLKFLSBUF                        = 0x20001261
+       BLKFRAGET                        = 0x20001265
+       BLKFRASET                        = 0x20001264
+       BLKGETSIZE                       = 0x20001260
+       BLKGETSIZE64                     = 0x40081272
+       BLKPBSZGET                       = 0x2000127b
+       BLKRAGET                         = 0x20001263
+       BLKRASET                         = 0x20001262
+       BLKROGET                         = 0x2000125e
+       BLKROSET                         = 0x2000125d
+       BLKRRPART                        = 0x2000125f
+       BLKSECTGET                       = 0x20001267
+       BLKSECTSET                       = 0x20001266
+       BLKSSZGET                        = 0x20001268
+       BOTHER                           = 0x1000
        BPF_A                            = 0x10
        BPF_ABS                          = 0x20
        BPF_ADD                          = 0x0
@@ -219,7 +223,33 @@ const (
        BPF_X                            = 0x8
        BPF_XOR                          = 0xa0
        BRKINT                           = 0x2
+       BS0                              = 0x0
+       BS1                              = 0x2000
+       BSDLY                            = 0x2000
+       CAN_BCM                          = 0x2
+       CAN_EFF_FLAG                     = 0x80000000
+       CAN_EFF_ID_BITS                  = 0x1d
+       CAN_EFF_MASK                     = 0x1fffffff
+       CAN_ERR_FLAG                     = 0x20000000
+       CAN_ERR_MASK                     = 0x1fffffff
+       CAN_INV_FILTER                   = 0x20000000
+       CAN_ISOTP                        = 0x6
+       CAN_MAX_DLC                      = 0x8
+       CAN_MAX_DLEN                     = 0x8
+       CAN_MCNET                        = 0x5
+       CAN_MTU                          = 0x10
+       CAN_NPROTO                       = 0x7
+       CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
+       CAN_RTR_FLAG                     = 0x40000000
+       CAN_SFF_ID_BITS                  = 0xb
+       CAN_SFF_MASK                     = 0x7ff
+       CAN_TP16                         = 0x3
+       CAN_TP20                         = 0x4
+       CBAUD                            = 0x100f
+       CBAUDEX                          = 0x1000
        CFLUSH                           = 0xf
+       CIBAUD                           = 0x100f0000
        CLOCAL                           = 0x800
        CLOCK_BOOTTIME                   = 0x7
        CLOCK_BOOTTIME_ALARM             = 0x9
@@ -260,7 +290,14 @@ const (
        CLONE_UNTRACED                   = 0x800000
        CLONE_VFORK                      = 0x4000
        CLONE_VM                         = 0x100
+       CMSPAR                           = 0x40000000
+       CR0                              = 0x0
+       CR1                              = 0x200
+       CR2                              = 0x400
+       CR3                              = 0x600
+       CRDLY                            = 0x600
        CREAD                            = 0x80
+       CRTSCTS                          = 0x80000000
        CS5                              = 0x0
        CS6                              = 0x10
        CS7                              = 0x20
@@ -296,6 +333,7 @@ const (
        ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
        EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -350,6 +388,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -362,10 +401,12 @@ const (
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
        ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
        ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -401,10 +442,32 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
+       FF0                              = 0x0
+       FF1                              = 0x8000
+       FFDLY                            = 0x8000
        FLUSHO                           = 0x2000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -444,6 +507,7 @@ const (
        GRND_NONBLOCK                    = 0x1
        GRND_RANDOM                      = 0x2
        HUPCL                            = 0x400
+       IBSHIFT                          = 0x10
        ICANON                           = 0x2
        ICMPV6_FILTER                    = 0x1
        ICRNL                            = 0x100
@@ -557,6 +621,7 @@ const (
        IPPROTO_IPIP                     = 0x4
        IPPROTO_IPV6                     = 0x29
        IPPROTO_MH                       = 0x87
+       IPPROTO_MPLS                     = 0x89
        IPPROTO_MTP                      = 0x5c
        IPPROTO_NONE                     = 0x3b
        IPPROTO_PIM                      = 0x67
@@ -582,6 +647,7 @@ const (
        IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -625,6 +691,7 @@ const (
        IPV6_XFRM_POLICY                 = 0x23
        IP_ADD_MEMBERSHIP                = 0x23
        IP_ADD_SOURCE_MEMBERSHIP         = 0x27
+       IP_BIND_ADDRESS_NO_PORT          = 0x18
        IP_BLOCK_SOURCE                  = 0x26
        IP_CHECKSUM                      = 0x17
        IP_DEFAULT_MULTICAST_LOOP        = 0x1
@@ -678,6 +745,7 @@ const (
        IP_XFRM_POLICY                   = 0x11
        ISIG                             = 0x1
        ISTRIP                           = 0x20
+       IUCLC                            = 0x200
        IUTF8                            = 0x4000
        IXANY                            = 0x800
        IXOFF                            = 0x1000
@@ -701,6 +769,7 @@ const (
        MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -732,9 +801,11 @@ const (
        MAP_TYPE                         = 0xf
        MCL_CURRENT                      = 0x1
        MCL_FUTURE                       = 0x2
+       MCL_ONFAULT                      = 0x4
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -758,6 +829,7 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
@@ -771,6 +843,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -787,6 +861,7 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
@@ -820,10 +895,13 @@ const (
        NETLINK_UNUSED                   = 0x1
        NETLINK_USERSOCK                 = 0x2
        NETLINK_XFRM                     = 0x6
+       NL0                              = 0x0
+       NL1                              = 0x100
        NLA_ALIGNTO                      = 0x4
        NLA_F_NESTED                     = 0x8000
        NLA_F_NET_BYTEORDER              = 0x4000
        NLA_HDRLEN                       = 0x4
+       NLDLY                            = 0x100
        NLMSG_ALIGNTO                    = 0x4
        NLMSG_DONE                       = 0x3
        NLMSG_ERROR                      = 0x2
@@ -849,6 +927,7 @@ const (
        OCRNL                            = 0x8
        OFDEL                            = 0x80
        OFILL                            = 0x40
+       OLCUC                            = 0x2
        ONLCR                            = 0x4
        ONLRET                           = 0x20
        ONOCR                            = 0x10
@@ -1083,6 +1162,7 @@ const (
        PTRACE_POKETEXT                  = 0x4
        PTRACE_POKETEXT_3264             = 0xc2
        PTRACE_POKEUSR                   = 0x6
+       PTRACE_SECCOMP_GET_FILTER        = 0x420c
        PTRACE_SEIZE                     = 0x4206
        PTRACE_SETFPREGS                 = 0xf
        PTRACE_SETOPTIONS                = 0x4200
@@ -1127,7 +1207,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x16
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1179,6 +1259,7 @@ const (
        RTM_DELTFILTER                   = 0x2d
        RTM_F_CLONED                     = 0x200
        RTM_F_EQUALIZE                   = 0x400
+       RTM_F_LOOKUP_TABLE               = 0x1000
        RTM_F_NOTIFY                     = 0x100
        RTM_F_PREFIX                     = 0x800
        RTM_GETACTION                    = 0x32
@@ -1196,9 +1277,10 @@ const (
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x5b
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
@@ -1213,15 +1295,16 @@ const (
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x13
-       RTM_NR_MSGTYPES                  = 0x4c
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
-       RTNH_COMPARE_MASK                = 0x11
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
        RTNH_F_LINKDOWN                  = 0x10
        RTNH_F_OFFLOAD                   = 0x8
@@ -1256,6 +1339,7 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
        SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
@@ -1329,27 +1413,44 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x2
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
+       SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0xffff
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1009
        SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
        SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x20
        SO_BSDCOMPAT                     = 0xe
        SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
        SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
@@ -1394,6 +1495,13 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x1008
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
        SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
@@ -1426,10 +1534,23 @@ const (
        S_IXGRP                          = 0x8
        S_IXOTH                          = 0x1
        S_IXUSR                          = 0x40
+       TAB0                             = 0x0
+       TAB1                             = 0x800
+       TAB2                             = 0x1000
+       TAB3                             = 0x1800
+       TABDLY                           = 0x1800
        TCFLSH                           = 0x5407
+       TCGETA                           = 0x5401
+       TCGETS                           = 0x540d
+       TCGETS2                          = 0x4030542a
        TCIFLUSH                         = 0x0
+       TCIOFF                           = 0x2
        TCIOFLUSH                        = 0x2
+       TCION                            = 0x3
        TCOFLUSH                         = 0x1
+       TCOOFF                           = 0x0
+       TCOON                            = 0x1
+       TCP_CC_INFO                      = 0x1a
        TCP_CONGESTION                   = 0xd
        TCP_COOKIE_IN_ALWAYS             = 0x1
        TCP_COOKIE_MAX                   = 0x10
@@ -1454,11 +1575,15 @@ const (
        TCP_MSS_DEFAULT                  = 0x218
        TCP_MSS_DESIRED                  = 0x4c4
        TCP_NODELAY                      = 0x1
+       TCP_NOTSENT_LOWAT                = 0x19
        TCP_QUEUE_SEQ                    = 0x15
        TCP_QUICKACK                     = 0xc
        TCP_REPAIR                       = 0x13
        TCP_REPAIR_OPTIONS               = 0x16
        TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
+       TCP_SAVED_SYN                    = 0x1c
+       TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
        TCP_S_DATA_IN                    = 0x4
        TCP_S_DATA_OUT                   = 0x8
@@ -1469,6 +1594,16 @@ const (
        TCP_WINDOW_CLAMP                 = 0xa
        TCSAFLUSH                        = 0x5410
        TCSBRK                           = 0x5405
+       TCSBRKP                          = 0x5486
+       TCSETA                           = 0x5402
+       TCSETAF                          = 0x5404
+       TCSETAW                          = 0x5403
+       TCSETS                           = 0x540e
+       TCSETS2                          = 0x8030542b
+       TCSETSF                          = 0x5410
+       TCSETSF2                         = 0x8030542d
+       TCSETSW                          = 0x540f
+       TCSETSW2                         = 0x8030542c
        TCXONC                           = 0x5406
        TIOCCBRK                         = 0x5428
        TIOCCONS                         = 0x80047478
@@ -1576,7 +1711,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x4
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
        VSTART                           = 0x8
@@ -1599,6 +1740,8 @@ const (
        WORDSIZE                         = 0x40
        WSTOPPED                         = 0x2
        WUNTRACED                        = 0x2
+       XCASE                            = 0x4
+       XTABS                            = 0x1800
 )
 
 // Errors
index 3b50d85..0f33f0f 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build mips64le,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
 
 package unix
 
@@ -32,10 +32,11 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x29
+       AF_MAX                           = 0x2b
        AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
@@ -44,6 +45,7 @@ const (
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -159,21 +161,23 @@ const (
        B75                              = 0x2
        B921600                          = 0x1007
        B9600                            = 0xd
-       BLKBSZGET                        = 0x80081270
-       BLKBSZSET                        = 0x40081271
-       BLKFLSBUF                        = 0x1261
-       BLKFRAGET                        = 0x1265
-       BLKFRASET                        = 0x1264
-       BLKGETSIZE                       = 0x1260
-       BLKGETSIZE64                     = 0x80081272
-       BLKRAGET                         = 0x1263
-       BLKRASET                         = 0x1262
-       BLKROGET                         = 0x125e
-       BLKROSET                         = 0x125d
-       BLKRRPART                        = 0x125f
-       BLKSECTGET                       = 0x1267
-       BLKSECTSET                       = 0x1266
-       BLKSSZGET                        = 0x1268
+       BLKBSZGET                        = 0x40081270
+       BLKBSZSET                        = 0x80081271
+       BLKFLSBUF                        = 0x20001261
+       BLKFRAGET                        = 0x20001265
+       BLKFRASET                        = 0x20001264
+       BLKGETSIZE                       = 0x20001260
+       BLKGETSIZE64                     = 0x40081272
+       BLKPBSZGET                       = 0x2000127b
+       BLKRAGET                         = 0x20001263
+       BLKRASET                         = 0x20001262
+       BLKROGET                         = 0x2000125e
+       BLKROSET                         = 0x2000125d
+       BLKRRPART                        = 0x2000125f
+       BLKSECTGET                       = 0x20001267
+       BLKSECTSET                       = 0x20001266
+       BLKSSZGET                        = 0x20001268
+       BOTHER                           = 0x1000
        BPF_A                            = 0x10
        BPF_ABS                          = 0x20
        BPF_ADD                          = 0x0
@@ -219,7 +223,33 @@ const (
        BPF_X                            = 0x8
        BPF_XOR                          = 0xa0
        BRKINT                           = 0x2
+       BS0                              = 0x0
+       BS1                              = 0x2000
+       BSDLY                            = 0x2000
+       CAN_BCM                          = 0x2
+       CAN_EFF_FLAG                     = 0x80000000
+       CAN_EFF_ID_BITS                  = 0x1d
+       CAN_EFF_MASK                     = 0x1fffffff
+       CAN_ERR_FLAG                     = 0x20000000
+       CAN_ERR_MASK                     = 0x1fffffff
+       CAN_INV_FILTER                   = 0x20000000
+       CAN_ISOTP                        = 0x6
+       CAN_MAX_DLC                      = 0x8
+       CAN_MAX_DLEN                     = 0x8
+       CAN_MCNET                        = 0x5
+       CAN_MTU                          = 0x10
+       CAN_NPROTO                       = 0x7
+       CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
+       CAN_RTR_FLAG                     = 0x40000000
+       CAN_SFF_ID_BITS                  = 0xb
+       CAN_SFF_MASK                     = 0x7ff
+       CAN_TP16                         = 0x3
+       CAN_TP20                         = 0x4
+       CBAUD                            = 0x100f
+       CBAUDEX                          = 0x1000
        CFLUSH                           = 0xf
+       CIBAUD                           = 0x100f0000
        CLOCAL                           = 0x800
        CLOCK_BOOTTIME                   = 0x7
        CLOCK_BOOTTIME_ALARM             = 0x9
@@ -260,7 +290,14 @@ const (
        CLONE_UNTRACED                   = 0x800000
        CLONE_VFORK                      = 0x4000
        CLONE_VM                         = 0x100
+       CMSPAR                           = 0x40000000
+       CR0                              = 0x0
+       CR1                              = 0x200
+       CR2                              = 0x400
+       CR3                              = 0x600
+       CRDLY                            = 0x600
        CREAD                            = 0x80
+       CRTSCTS                          = 0x80000000
        CS5                              = 0x0
        CS6                              = 0x10
        CS7                              = 0x20
@@ -296,6 +333,7 @@ const (
        ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
        EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -350,6 +388,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -362,10 +401,12 @@ const (
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
        ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
        ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -401,10 +442,32 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
+       FF0                              = 0x0
+       FF1                              = 0x8000
+       FFDLY                            = 0x8000
        FLUSHO                           = 0x2000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -444,6 +507,7 @@ const (
        GRND_NONBLOCK                    = 0x1
        GRND_RANDOM                      = 0x2
        HUPCL                            = 0x400
+       IBSHIFT                          = 0x10
        ICANON                           = 0x2
        ICMPV6_FILTER                    = 0x1
        ICRNL                            = 0x100
@@ -557,6 +621,7 @@ const (
        IPPROTO_IPIP                     = 0x4
        IPPROTO_IPV6                     = 0x29
        IPPROTO_MH                       = 0x87
+       IPPROTO_MPLS                     = 0x89
        IPPROTO_MTP                      = 0x5c
        IPPROTO_NONE                     = 0x3b
        IPPROTO_PIM                      = 0x67
@@ -582,6 +647,7 @@ const (
        IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -625,6 +691,7 @@ const (
        IPV6_XFRM_POLICY                 = 0x23
        IP_ADD_MEMBERSHIP                = 0x23
        IP_ADD_SOURCE_MEMBERSHIP         = 0x27
+       IP_BIND_ADDRESS_NO_PORT          = 0x18
        IP_BLOCK_SOURCE                  = 0x26
        IP_CHECKSUM                      = 0x17
        IP_DEFAULT_MULTICAST_LOOP        = 0x1
@@ -678,6 +745,7 @@ const (
        IP_XFRM_POLICY                   = 0x11
        ISIG                             = 0x1
        ISTRIP                           = 0x20
+       IUCLC                            = 0x200
        IUTF8                            = 0x4000
        IXANY                            = 0x800
        IXOFF                            = 0x1000
@@ -701,6 +769,7 @@ const (
        MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -732,9 +801,11 @@ const (
        MAP_TYPE                         = 0xf
        MCL_CURRENT                      = 0x1
        MCL_FUTURE                       = 0x2
+       MCL_ONFAULT                      = 0x4
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -758,6 +829,7 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
@@ -771,6 +843,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -787,6 +861,7 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
@@ -820,10 +895,13 @@ const (
        NETLINK_UNUSED                   = 0x1
        NETLINK_USERSOCK                 = 0x2
        NETLINK_XFRM                     = 0x6
+       NL0                              = 0x0
+       NL1                              = 0x100
        NLA_ALIGNTO                      = 0x4
        NLA_F_NESTED                     = 0x8000
        NLA_F_NET_BYTEORDER              = 0x4000
        NLA_HDRLEN                       = 0x4
+       NLDLY                            = 0x100
        NLMSG_ALIGNTO                    = 0x4
        NLMSG_DONE                       = 0x3
        NLMSG_ERROR                      = 0x2
@@ -849,6 +927,7 @@ const (
        OCRNL                            = 0x8
        OFDEL                            = 0x80
        OFILL                            = 0x40
+       OLCUC                            = 0x2
        ONLCR                            = 0x4
        ONLRET                           = 0x20
        ONOCR                            = 0x10
@@ -1083,6 +1162,7 @@ const (
        PTRACE_POKETEXT                  = 0x4
        PTRACE_POKETEXT_3264             = 0xc2
        PTRACE_POKEUSR                   = 0x6
+       PTRACE_SECCOMP_GET_FILTER        = 0x420c
        PTRACE_SEIZE                     = 0x4206
        PTRACE_SETFPREGS                 = 0xf
        PTRACE_SETOPTIONS                = 0x4200
@@ -1127,7 +1207,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x16
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1179,6 +1259,7 @@ const (
        RTM_DELTFILTER                   = 0x2d
        RTM_F_CLONED                     = 0x200
        RTM_F_EQUALIZE                   = 0x400
+       RTM_F_LOOKUP_TABLE               = 0x1000
        RTM_F_NOTIFY                     = 0x100
        RTM_F_PREFIX                     = 0x800
        RTM_GETACTION                    = 0x32
@@ -1196,9 +1277,10 @@ const (
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x5b
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
@@ -1213,15 +1295,16 @@ const (
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x13
-       RTM_NR_MSGTYPES                  = 0x4c
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
-       RTNH_COMPARE_MASK                = 0x11
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
        RTNH_F_LINKDOWN                  = 0x10
        RTNH_F_OFFLOAD                   = 0x8
@@ -1256,6 +1339,7 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
        SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
@@ -1329,27 +1413,44 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x2
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
+       SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0xffff
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1009
        SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
        SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x20
        SO_BSDCOMPAT                     = 0xe
        SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
        SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
@@ -1394,6 +1495,13 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x1008
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
        SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
@@ -1426,10 +1534,23 @@ const (
        S_IXGRP                          = 0x8
        S_IXOTH                          = 0x1
        S_IXUSR                          = 0x40
+       TAB0                             = 0x0
+       TAB1                             = 0x800
+       TAB2                             = 0x1000
+       TAB3                             = 0x1800
+       TABDLY                           = 0x1800
        TCFLSH                           = 0x5407
+       TCGETA                           = 0x5401
+       TCGETS                           = 0x540d
+       TCGETS2                          = 0x4030542a
        TCIFLUSH                         = 0x0
+       TCIOFF                           = 0x2
        TCIOFLUSH                        = 0x2
+       TCION                            = 0x3
        TCOFLUSH                         = 0x1
+       TCOOFF                           = 0x0
+       TCOON                            = 0x1
+       TCP_CC_INFO                      = 0x1a
        TCP_CONGESTION                   = 0xd
        TCP_COOKIE_IN_ALWAYS             = 0x1
        TCP_COOKIE_MAX                   = 0x10
@@ -1454,11 +1575,15 @@ const (
        TCP_MSS_DEFAULT                  = 0x218
        TCP_MSS_DESIRED                  = 0x4c4
        TCP_NODELAY                      = 0x1
+       TCP_NOTSENT_LOWAT                = 0x19
        TCP_QUEUE_SEQ                    = 0x15
        TCP_QUICKACK                     = 0xc
        TCP_REPAIR                       = 0x13
        TCP_REPAIR_OPTIONS               = 0x16
        TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
+       TCP_SAVED_SYN                    = 0x1c
+       TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
        TCP_S_DATA_IN                    = 0x4
        TCP_S_DATA_OUT                   = 0x8
@@ -1469,6 +1594,16 @@ const (
        TCP_WINDOW_CLAMP                 = 0xa
        TCSAFLUSH                        = 0x5410
        TCSBRK                           = 0x5405
+       TCSBRKP                          = 0x5486
+       TCSETA                           = 0x5402
+       TCSETAF                          = 0x5404
+       TCSETAW                          = 0x5403
+       TCSETS                           = 0x540e
+       TCSETS2                          = 0x8030542b
+       TCSETSF                          = 0x5410
+       TCSETSF2                         = 0x8030542d
+       TCSETSW                          = 0x540f
+       TCSETSW2                         = 0x8030542c
        TCXONC                           = 0x5406
        TIOCCBRK                         = 0x5428
        TIOCCONS                         = 0x80047478
@@ -1576,7 +1711,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x4
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
        VSTART                           = 0x8
@@ -1599,6 +1740,8 @@ const (
        WORDSIZE                         = 0x40
        WSTOPPED                         = 0x2
        WUNTRACED                        = 0x2
+       XCASE                            = 0x4
+       XTABS                            = 0x1800
 )
 
 // Errors
index 8a122ad..3fa39fa 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build mipsle,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
 
 package unix
 
@@ -36,7 +36,7 @@ const (
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x2a
+       AF_MAX                           = 0x2b
        AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
@@ -45,6 +45,7 @@ const (
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -160,21 +161,22 @@ const (
        B75                              = 0x2
        B921600                          = 0x1007
        B9600                            = 0xd
-       BLKBSZGET                        = 0x80081270
-       BLKBSZSET                        = 0x40081271
-       BLKFLSBUF                        = 0x1261
-       BLKFRAGET                        = 0x1265
-       BLKFRASET                        = 0x1264
-       BLKGETSIZE                       = 0x1260
-       BLKGETSIZE64                     = 0x80081272
-       BLKRAGET                         = 0x1263
-       BLKRASET                         = 0x1262
-       BLKROGET                         = 0x125e
-       BLKROSET                         = 0x125d
-       BLKRRPART                        = 0x125f
-       BLKSECTGET                       = 0x1267
-       BLKSECTSET                       = 0x1266
-       BLKSSZGET                        = 0x1268
+       BLKBSZGET                        = 0x40041270
+       BLKBSZSET                        = 0x80041271
+       BLKFLSBUF                        = 0x20001261
+       BLKFRAGET                        = 0x20001265
+       BLKFRASET                        = 0x20001264
+       BLKGETSIZE                       = 0x20001260
+       BLKGETSIZE64                     = 0x40041272
+       BLKPBSZGET                       = 0x2000127b
+       BLKRAGET                         = 0x20001263
+       BLKRASET                         = 0x20001262
+       BLKROGET                         = 0x2000125e
+       BLKROSET                         = 0x2000125d
+       BLKRRPART                        = 0x2000125f
+       BLKSECTGET                       = 0x20001267
+       BLKSECTSET                       = 0x20001266
+       BLKSSZGET                        = 0x20001268
        BOTHER                           = 0x1000
        BPF_A                            = 0x10
        BPF_ABS                          = 0x20
@@ -238,6 +240,7 @@ const (
        CAN_MTU                          = 0x10
        CAN_NPROTO                       = 0x7
        CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
        CAN_RTR_FLAG                     = 0x40000000
        CAN_SFF_ID_BITS                  = 0xb
        CAN_SFF_MASK                     = 0x7ff
@@ -403,6 +406,7 @@ const (
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
        ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -438,6 +442,7 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
@@ -445,6 +450,24 @@ const (
        FF1                              = 0x8000
        FFDLY                            = 0x8000
        FLUSHO                           = 0x2000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -806,6 +829,7 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
@@ -819,6 +843,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -835,6 +861,7 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
@@ -1180,7 +1207,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x18
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1277,7 +1304,7 @@ const (
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
-       RTNH_COMPARE_MASK                = 0x11
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
        RTNH_F_LINKDOWN                  = 0x10
        RTNH_F_OFFLOAD                   = 0x8
@@ -1312,6 +1339,7 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
        SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
@@ -1467,6 +1495,13 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x1008
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
        SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
@@ -1546,6 +1581,7 @@ const (
        TCP_REPAIR                       = 0x13
        TCP_REPAIR_OPTIONS               = 0x16
        TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
        TCP_SAVED_SYN                    = 0x1c
        TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
@@ -1675,7 +1711,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x4
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
        VSTART                           = 0x8
index e2dd7aa..4585ef7 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh -m64
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build ppc64,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- -m64 _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
 
 package unix
 
@@ -24,6 +24,7 @@ const (
        AF_DECnet                        = 0xc
        AF_ECONET                        = 0x13
        AF_FILE                          = 0x1
+       AF_IB                            = 0x1b
        AF_IEEE802154                    = 0x24
        AF_INET                          = 0x2
        AF_INET6                         = 0xa
@@ -31,10 +32,12 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x29
+       AF_MAX                           = 0x2b
+       AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
        AF_NETROM                        = 0x6
@@ -42,6 +45,7 @@ const (
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -157,21 +161,22 @@ const (
        B75                              = 0x2
        B921600                          = 0x16
        B9600                            = 0xd
-       BLKBSZGET                        = 0x80081270
-       BLKBSZSET                        = 0x40081271
-       BLKFLSBUF                        = 0x1261
-       BLKFRAGET                        = 0x1265
-       BLKFRASET                        = 0x1264
-       BLKGETSIZE                       = 0x1260
-       BLKGETSIZE64                     = 0x80081272
-       BLKRAGET                         = 0x1263
-       BLKRASET                         = 0x1262
-       BLKROGET                         = 0x125e
-       BLKROSET                         = 0x125d
-       BLKRRPART                        = 0x125f
-       BLKSECTGET                       = 0x1267
-       BLKSECTSET                       = 0x1266
-       BLKSSZGET                        = 0x1268
+       BLKBSZGET                        = 0x40081270
+       BLKBSZSET                        = 0x80081271
+       BLKFLSBUF                        = 0x20001261
+       BLKFRAGET                        = 0x20001265
+       BLKFRASET                        = 0x20001264
+       BLKGETSIZE                       = 0x20001260
+       BLKGETSIZE64                     = 0x40081272
+       BLKPBSZGET                       = 0x2000127b
+       BLKRAGET                         = 0x20001263
+       BLKRASET                         = 0x20001262
+       BLKROGET                         = 0x2000125e
+       BLKROSET                         = 0x2000125d
+       BLKRRPART                        = 0x2000125f
+       BLKSECTGET                       = 0x20001267
+       BLKSECTSET                       = 0x20001266
+       BLKSSZGET                        = 0x20001268
        BOTHER                           = 0x1f
        BPF_A                            = 0x10
        BPF_ABS                          = 0x20
@@ -193,6 +198,7 @@ const (
        BPF_LD                           = 0x0
        BPF_LDX                          = 0x1
        BPF_LEN                          = 0x80
+       BPF_LL_OFF                       = -0x200000
        BPF_LSH                          = 0x60
        BPF_MAJOR_VERSION                = 0x1
        BPF_MAXINSNS                     = 0x1000
@@ -204,6 +210,7 @@ const (
        BPF_MSH                          = 0xa0
        BPF_MUL                          = 0x20
        BPF_NEG                          = 0x80
+       BPF_NET_OFF                      = -0x100000
        BPF_OR                           = 0x40
        BPF_RET                          = 0x6
        BPF_RSH                          = 0x70
@@ -233,6 +240,7 @@ const (
        CAN_MTU                          = 0x10
        CAN_NPROTO                       = 0x7
        CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
        CAN_RTR_FLAG                     = 0x40000000
        CAN_SFF_ID_BITS                  = 0xb
        CAN_SFF_MASK                     = 0x7ff
@@ -255,6 +263,7 @@ const (
        CLOCK_REALTIME                   = 0x0
        CLOCK_REALTIME_ALARM             = 0x8
        CLOCK_REALTIME_COARSE            = 0x5
+       CLOCK_TAI                        = 0xb
        CLOCK_THREAD_CPUTIME_ID          = 0x3
        CLOCK_TXFROMRX                   = 0x4
        CLOCK_TXINT                      = 0x3
@@ -324,6 +333,7 @@ const (
        ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
        EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -378,6 +388,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -390,10 +401,12 @@ const (
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
        ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
        ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -416,6 +429,7 @@ const (
        ETH_P_TIPC                       = 0x88ca
        ETH_P_TRAILER                    = 0x1c
        ETH_P_TR_802_2                   = 0x11
+       ETH_P_TSN                        = 0x22f0
        ETH_P_WAN_PPP                    = 0x7
        ETH_P_WCCP                       = 0x883e
        ETH_P_X25                        = 0x805
@@ -428,6 +442,7 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
@@ -435,6 +450,24 @@ const (
        FF1                              = 0x4000
        FFDLY                            = 0x4000
        FLUSHO                           = 0x800000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -483,11 +516,13 @@ const (
        IFA_F_DEPRECATED                 = 0x20
        IFA_F_HOMEADDRESS                = 0x10
        IFA_F_MANAGETEMPADDR             = 0x100
+       IFA_F_MCAUTOJOIN                 = 0x400
        IFA_F_NODAD                      = 0x2
        IFA_F_NOPREFIXROUTE              = 0x200
        IFA_F_OPTIMISTIC                 = 0x4
        IFA_F_PERMANENT                  = 0x80
        IFA_F_SECONDARY                  = 0x1
+       IFA_F_STABLE_PRIVACY             = 0x800
        IFA_F_TEMPORARY                  = 0x1
        IFA_F_TENTATIVE                  = 0x40
        IFA_MAX                          = 0x8
@@ -586,6 +621,7 @@ const (
        IPPROTO_IPIP                     = 0x4
        IPPROTO_IPV6                     = 0x29
        IPPROTO_MH                       = 0x87
+       IPPROTO_MPLS                     = 0x89
        IPPROTO_MTP                      = 0x5c
        IPPROTO_NONE                     = 0x3b
        IPPROTO_PIM                      = 0x67
@@ -608,8 +644,10 @@ const (
        IPV6_ADD_MEMBERSHIP              = 0x14
        IPV6_AUTHHDR                     = 0xa
        IPV6_CHECKSUM                    = 0x7
+       IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -623,6 +661,7 @@ const (
        IPV6_MULTICAST_IF                = 0x11
        IPV6_MULTICAST_LOOP              = 0x13
        IPV6_NEXTHOP                     = 0x9
+       IPV6_PATHMTU                     = 0x3d
        IPV6_PKTINFO                     = 0x32
        IPV6_PMTUDISC_DO                 = 0x2
        IPV6_PMTUDISC_DONT               = 0x0
@@ -634,6 +673,7 @@ const (
        IPV6_RECVERR                     = 0x19
        IPV6_RECVHOPLIMIT                = 0x33
        IPV6_RECVHOPOPTS                 = 0x35
+       IPV6_RECVPATHMTU                 = 0x3c
        IPV6_RECVPKTINFO                 = 0x31
        IPV6_RECVRTHDR                   = 0x38
        IPV6_RECVTCLASS                  = 0x42
@@ -651,7 +691,9 @@ const (
        IPV6_XFRM_POLICY                 = 0x23
        IP_ADD_MEMBERSHIP                = 0x23
        IP_ADD_SOURCE_MEMBERSHIP         = 0x27
+       IP_BIND_ADDRESS_NO_PORT          = 0x18
        IP_BLOCK_SOURCE                  = 0x26
+       IP_CHECKSUM                      = 0x17
        IP_DEFAULT_MULTICAST_LOOP        = 0x1
        IP_DEFAULT_MULTICAST_TTL         = 0x1
        IP_DF                            = 0x4000
@@ -727,6 +769,7 @@ const (
        MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -757,9 +800,11 @@ const (
        MAP_TYPE                         = 0xf
        MCL_CURRENT                      = 0x2000
        MCL_FUTURE                       = 0x4000
+       MCL_ONFAULT                      = 0x8000
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -783,10 +828,12 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
        MS_KERNMOUNT                     = 0x400000
+       MS_LAZYTIME                      = 0x2000000
        MS_MANDLOCK                      = 0x40
        MS_MGC_MSK                       = 0xffff0000
        MS_MGC_VAL                       = 0xc0ed0000
@@ -795,6 +842,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -803,7 +852,7 @@ const (
        MS_REC                           = 0x4000
        MS_RELATIME                      = 0x200000
        MS_REMOUNT                       = 0x20
-       MS_RMT_MASK                      = 0x800051
+       MS_RMT_MASK                      = 0x2800051
        MS_SHARED                        = 0x100000
        MS_SILENT                        = 0x8000
        MS_SLAVE                         = 0x80000
@@ -811,6 +860,7 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
@@ -904,7 +954,7 @@ const (
        O_RDWR                           = 0x2
        O_RSYNC                          = 0x101000
        O_SYNC                           = 0x101000
-       O_TMPFILE                        = 0x410000
+       O_TMPFILE                        = 0x404000
        O_TRUNC                          = 0x200
        O_WRONLY                         = 0x1
        PACKET_ADD_MEMBERSHIP            = 0x1
@@ -913,7 +963,10 @@ const (
        PACKET_COPY_THRESH               = 0x7
        PACKET_DROP_MEMBERSHIP           = 0x2
        PACKET_FANOUT                    = 0x12
+       PACKET_FANOUT_CBPF               = 0x6
        PACKET_FANOUT_CPU                = 0x2
+       PACKET_FANOUT_DATA               = 0x16
+       PACKET_FANOUT_EBPF               = 0x7
        PACKET_FANOUT_FLAG_DEFRAG        = 0x8000
        PACKET_FANOUT_FLAG_ROLLOVER      = 0x1000
        PACKET_FANOUT_HASH               = 0x0
@@ -938,6 +991,7 @@ const (
        PACKET_QDISC_BYPASS              = 0x14
        PACKET_RECV_OUTPUT               = 0x3
        PACKET_RESERVE                   = 0xc
+       PACKET_ROLLOVER_STATS            = 0x15
        PACKET_RX_RING                   = 0x5
        PACKET_STATISTICS                = 0x6
        PACKET_TIMESTAMP                 = 0x11
@@ -971,6 +1025,11 @@ const (
        PROT_WRITE                       = 0x2
        PR_CAPBSET_DROP                  = 0x18
        PR_CAPBSET_READ                  = 0x17
+       PR_CAP_AMBIENT                   = 0x2f
+       PR_CAP_AMBIENT_CLEAR_ALL         = 0x4
+       PR_CAP_AMBIENT_IS_SET            = 0x1
+       PR_CAP_AMBIENT_LOWER             = 0x3
+       PR_CAP_AMBIENT_RAISE             = 0x2
        PR_ENDIAN_BIG                    = 0x0
        PR_ENDIAN_LITTLE                 = 0x1
        PR_ENDIAN_PPC_LITTLE             = 0x2
@@ -986,11 +1045,14 @@ const (
        PR_FP_EXC_RES                    = 0x80000
        PR_FP_EXC_SW_ENABLE              = 0x80
        PR_FP_EXC_UND                    = 0x40000
+       PR_FP_MODE_FR                    = 0x1
+       PR_FP_MODE_FRE                   = 0x2
        PR_GET_CHILD_SUBREAPER           = 0x25
        PR_GET_DUMPABLE                  = 0x3
        PR_GET_ENDIAN                    = 0x13
        PR_GET_FPEMU                     = 0x9
        PR_GET_FPEXC                     = 0xb
+       PR_GET_FP_MODE                   = 0x2e
        PR_GET_KEEPCAPS                  = 0x7
        PR_GET_NAME                      = 0x10
        PR_GET_NO_NEW_PRIVS              = 0x27
@@ -1010,11 +1072,14 @@ const (
        PR_MCE_KILL_GET                  = 0x22
        PR_MCE_KILL_LATE                 = 0x0
        PR_MCE_KILL_SET                  = 0x1
+       PR_MPX_DISABLE_MANAGEMENT        = 0x2c
+       PR_MPX_ENABLE_MANAGEMENT         = 0x2b
        PR_SET_CHILD_SUBREAPER           = 0x24
        PR_SET_DUMPABLE                  = 0x4
        PR_SET_ENDIAN                    = 0x14
        PR_SET_FPEMU                     = 0xa
        PR_SET_FPEXC                     = 0xc
+       PR_SET_FP_MODE                   = 0x2d
        PR_SET_KEEPCAPS                  = 0x8
        PR_SET_MM                        = 0x23
        PR_SET_MM_ARG_END                = 0x9
@@ -1078,7 +1143,8 @@ const (
        PTRACE_KILL                      = 0x8
        PTRACE_LISTEN                    = 0x4208
        PTRACE_O_EXITKILL                = 0x100000
-       PTRACE_O_MASK                    = 0x1000ff
+       PTRACE_O_MASK                    = 0x3000ff
+       PTRACE_O_SUSPEND_SECCOMP         = 0x200000
        PTRACE_O_TRACECLONE              = 0x8
        PTRACE_O_TRACEEXEC               = 0x10
        PTRACE_O_TRACEEXIT               = 0x40
@@ -1095,6 +1161,7 @@ const (
        PTRACE_POKEDATA                  = 0x5
        PTRACE_POKETEXT                  = 0x4
        PTRACE_POKEUSR                   = 0x6
+       PTRACE_SECCOMP_GET_FILTER        = 0x420c
        PTRACE_SEIZE                     = 0x4206
        PTRACE_SETEVRREGS                = 0x15
        PTRACE_SETFPREGS                 = 0xf
@@ -1173,17 +1240,19 @@ const (
        RLIMIT_STACK                     = 0x3
        RLIM_INFINITY                    = -0x1
        RTAX_ADVMSS                      = 0x8
+       RTAX_CC_ALGO                     = 0x10
        RTAX_CWND                        = 0x7
        RTAX_FEATURES                    = 0xc
        RTAX_FEATURE_ALLFRAG             = 0x8
        RTAX_FEATURE_ECN                 = 0x1
+       RTAX_FEATURE_MASK                = 0xf
        RTAX_FEATURE_SACK                = 0x2
        RTAX_FEATURE_TIMESTAMP           = 0x4
        RTAX_HOPLIMIT                    = 0xa
        RTAX_INITCWND                    = 0xb
        RTAX_INITRWND                    = 0xe
        RTAX_LOCK                        = 0x1
-       RTAX_MAX                         = 0xf
+       RTAX_MAX                         = 0x10
        RTAX_MTU                         = 0x2
        RTAX_QUICKACK                    = 0xf
        RTAX_REORDERING                  = 0x9
@@ -1194,7 +1263,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x11
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1238,6 +1307,7 @@ const (
        RTM_DELLINK                      = 0x11
        RTM_DELMDB                       = 0x55
        RTM_DELNEIGH                     = 0x1d
+       RTM_DELNSID                      = 0x59
        RTM_DELQDISC                     = 0x25
        RTM_DELROUTE                     = 0x19
        RTM_DELRULE                      = 0x21
@@ -1245,6 +1315,7 @@ const (
        RTM_DELTFILTER                   = 0x2d
        RTM_F_CLONED                     = 0x200
        RTM_F_EQUALIZE                   = 0x400
+       RTM_F_LOOKUP_TABLE               = 0x1000
        RTM_F_NOTIFY                     = 0x100
        RTM_F_PREFIX                     = 0x800
        RTM_GETACTION                    = 0x32
@@ -1258,12 +1329,14 @@ const (
        RTM_GETNEIGH                     = 0x1e
        RTM_GETNEIGHTBL                  = 0x42
        RTM_GETNETCONF                   = 0x52
+       RTM_GETNSID                      = 0x5a
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x57
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
@@ -1273,22 +1346,28 @@ const (
        RTM_NEWNEIGH                     = 0x1c
        RTM_NEWNEIGHTBL                  = 0x40
        RTM_NEWNETCONF                   = 0x50
+       RTM_NEWNSID                      = 0x58
        RTM_NEWPREFIX                    = 0x34
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x12
-       RTM_NR_MSGTYPES                  = 0x48
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
+       RTNH_F_LINKDOWN                  = 0x10
+       RTNH_F_OFFLOAD                   = 0x8
        RTNH_F_ONLINK                    = 0x4
        RTNH_F_PERVASIVE                 = 0x2
        RTN_MAX                          = 0xb
+       RTPROT_BABEL                     = 0x2a
        RTPROT_BIRD                      = 0xc
        RTPROT_BOOT                      = 0x3
        RTPROT_DHCP                      = 0x10
@@ -1316,6 +1395,7 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
        SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
@@ -1389,32 +1469,52 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x1
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
+       SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0x1
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1e
+       SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
        SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x6
        SO_BSDCOMPAT                     = 0xe
        SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
+       SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
        SO_DOMAIN                        = 0x27
        SO_DONTROUTE                     = 0x5
        SO_ERROR                         = 0x4
        SO_GET_FILTER                    = 0x1a
+       SO_INCOMING_CPU                  = 0x31
        SO_KEEPALIVE                     = 0x9
        SO_LINGER                        = 0xd
        SO_LOCK_FILTER                   = 0x2c
@@ -1450,6 +1550,13 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x3
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
        SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
@@ -1497,6 +1604,7 @@ const (
        TCOFLUSH                         = 0x1
        TCOOFF                           = 0x0
        TCOON                            = 0x1
+       TCP_CC_INFO                      = 0x1a
        TCP_CONGESTION                   = 0xd
        TCP_COOKIE_IN_ALWAYS             = 0x1
        TCP_COOKIE_MAX                   = 0x10
@@ -1521,11 +1629,15 @@ const (
        TCP_MSS_DEFAULT                  = 0x218
        TCP_MSS_DESIRED                  = 0x4c4
        TCP_NODELAY                      = 0x1
+       TCP_NOTSENT_LOWAT                = 0x19
        TCP_QUEUE_SEQ                    = 0x15
        TCP_QUICKACK                     = 0xc
        TCP_REPAIR                       = 0x13
        TCP_REPAIR_OPTIONS               = 0x16
        TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
+       TCP_SAVED_SYN                    = 0x1c
+       TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
        TCP_S_DATA_IN                    = 0x4
        TCP_S_DATA_OUT                   = 0x8
@@ -1631,7 +1743,9 @@ const (
        TUNGETFILTER                     = 0x401054db
        TUNGETIFF                        = 0x400454d2
        TUNGETSNDBUF                     = 0x400454d3
+       TUNGETVNETBE                     = 0x400454df
        TUNGETVNETHDRSZ                  = 0x400454d7
+       TUNGETVNETLE                     = 0x400454dd
        TUNSETDEBUG                      = 0x800454c9
        TUNSETGROUP                      = 0x800454ce
        TUNSETIFF                        = 0x800454ca
@@ -1644,7 +1758,9 @@ const (
        TUNSETQUEUE                      = 0x800454d9
        TUNSETSNDBUF                     = 0x800454d4
        TUNSETTXFILTER                   = 0x800454d1
+       TUNSETVNETBE                     = 0x800454de
        TUNSETVNETHDRSZ                  = 0x800454d8
+       TUNSETVNETLE                     = 0x800454dc
        VDISCARD                         = 0x10
        VEOF                             = 0x4
        VEOL                             = 0x6
@@ -1653,7 +1769,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x5
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xb
        VSTART                           = 0xd
index 090cb25..b2a9128 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh -m64
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build ppc64le,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- -m64 _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
 
 package unix
 
@@ -24,6 +24,7 @@ const (
        AF_DECnet                        = 0xc
        AF_ECONET                        = 0x13
        AF_FILE                          = 0x1
+       AF_IB                            = 0x1b
        AF_IEEE802154                    = 0x24
        AF_INET                          = 0x2
        AF_INET6                         = 0xa
@@ -31,10 +32,12 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x29
+       AF_MAX                           = 0x2b
+       AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
        AF_NETROM                        = 0x6
@@ -42,6 +45,7 @@ const (
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -61,6 +65,7 @@ const (
        ALG_SET_IV                       = 0x2
        ALG_SET_KEY                      = 0x1
        ALG_SET_OP                       = 0x3
+       ARPHRD_6LOWPAN                   = 0x339
        ARPHRD_ADAPT                     = 0x108
        ARPHRD_APPLETLK                  = 0x8
        ARPHRD_ARCNET                    = 0x7
@@ -156,21 +161,22 @@ const (
        B75                              = 0x2
        B921600                          = 0x16
        B9600                            = 0xd
-       BLKBSZGET                        = 0x80081270
-       BLKBSZSET                        = 0x40081271
-       BLKFLSBUF                        = 0x1261
-       BLKFRAGET                        = 0x1265
-       BLKFRASET                        = 0x1264
-       BLKGETSIZE                       = 0x1260
-       BLKGETSIZE64                     = 0x80081272
-       BLKRAGET                         = 0x1263
-       BLKRASET                         = 0x1262
-       BLKROGET                         = 0x125e
-       BLKROSET                         = 0x125d
-       BLKRRPART                        = 0x125f
-       BLKSECTGET                       = 0x1267
-       BLKSECTSET                       = 0x1266
-       BLKSSZGET                        = 0x1268
+       BLKBSZGET                        = 0x40081270
+       BLKBSZSET                        = 0x80081271
+       BLKFLSBUF                        = 0x20001261
+       BLKFRAGET                        = 0x20001265
+       BLKFRASET                        = 0x20001264
+       BLKGETSIZE                       = 0x20001260
+       BLKGETSIZE64                     = 0x40081272
+       BLKPBSZGET                       = 0x2000127b
+       BLKRAGET                         = 0x20001263
+       BLKRASET                         = 0x20001262
+       BLKROGET                         = 0x2000125e
+       BLKROSET                         = 0x2000125d
+       BLKRRPART                        = 0x2000125f
+       BLKSECTGET                       = 0x20001267
+       BLKSECTSET                       = 0x20001266
+       BLKSSZGET                        = 0x20001268
        BOTHER                           = 0x1f
        BPF_A                            = 0x10
        BPF_ABS                          = 0x20
@@ -192,6 +198,7 @@ const (
        BPF_LD                           = 0x0
        BPF_LDX                          = 0x1
        BPF_LEN                          = 0x80
+       BPF_LL_OFF                       = -0x200000
        BPF_LSH                          = 0x60
        BPF_MAJOR_VERSION                = 0x1
        BPF_MAXINSNS                     = 0x1000
@@ -203,6 +210,7 @@ const (
        BPF_MSH                          = 0xa0
        BPF_MUL                          = 0x20
        BPF_NEG                          = 0x80
+       BPF_NET_OFF                      = -0x100000
        BPF_OR                           = 0x40
        BPF_RET                          = 0x6
        BPF_RSH                          = 0x70
@@ -232,6 +240,7 @@ const (
        CAN_MTU                          = 0x10
        CAN_NPROTO                       = 0x7
        CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
        CAN_RTR_FLAG                     = 0x40000000
        CAN_SFF_ID_BITS                  = 0xb
        CAN_SFF_MASK                     = 0x7ff
@@ -254,6 +263,7 @@ const (
        CLOCK_REALTIME                   = 0x0
        CLOCK_REALTIME_ALARM             = 0x8
        CLOCK_REALTIME_COARSE            = 0x5
+       CLOCK_TAI                        = 0xb
        CLOCK_THREAD_CPUTIME_ID          = 0x3
        CLOCK_TXFROMRX                   = 0x4
        CLOCK_TXINT                      = 0x3
@@ -323,6 +333,7 @@ const (
        ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
        EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -343,6 +354,7 @@ const (
        ETH_P_8021AD                     = 0x88a8
        ETH_P_8021AH                     = 0x88e7
        ETH_P_8021Q                      = 0x8100
+       ETH_P_80221                      = 0x8917
        ETH_P_802_2                      = 0x4
        ETH_P_802_3                      = 0x1
        ETH_P_802_3_MIN                  = 0x600
@@ -376,6 +388,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -387,10 +400,13 @@ const (
        ETH_P_LINK_CTL                   = 0x886c
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
+       ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
        ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -413,9 +429,11 @@ const (
        ETH_P_TIPC                       = 0x88ca
        ETH_P_TRAILER                    = 0x1c
        ETH_P_TR_802_2                   = 0x11
+       ETH_P_TSN                        = 0x22f0
        ETH_P_WAN_PPP                    = 0x7
        ETH_P_WCCP                       = 0x883e
        ETH_P_X25                        = 0x805
+       ETH_P_XDSA                       = 0xf8
        EXTA                             = 0xe
        EXTB                             = 0xf
        EXTPROC                          = 0x10000000
@@ -424,6 +442,7 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
@@ -431,6 +450,24 @@ const (
        FF1                              = 0x4000
        FFDLY                            = 0x4000
        FLUSHO                           = 0x800000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -445,6 +482,9 @@ const (
        F_GETSIG                         = 0xb
        F_LOCK                           = 0x1
        F_NOTIFY                         = 0x402
+       F_OFD_GETLK                      = 0x24
+       F_OFD_SETLK                      = 0x25
+       F_OFD_SETLKW                     = 0x26
        F_OK                             = 0x0
        F_RDLCK                          = 0x0
        F_SETFD                          = 0x2
@@ -475,38 +515,29 @@ const (
        IFA_F_DADFAILED                  = 0x8
        IFA_F_DEPRECATED                 = 0x20
        IFA_F_HOMEADDRESS                = 0x10
+       IFA_F_MANAGETEMPADDR             = 0x100
+       IFA_F_MCAUTOJOIN                 = 0x400
        IFA_F_NODAD                      = 0x2
+       IFA_F_NOPREFIXROUTE              = 0x200
        IFA_F_OPTIMISTIC                 = 0x4
        IFA_F_PERMANENT                  = 0x80
        IFA_F_SECONDARY                  = 0x1
+       IFA_F_STABLE_PRIVACY             = 0x800
        IFA_F_TEMPORARY                  = 0x1
        IFA_F_TENTATIVE                  = 0x40
-       IFA_MAX                          = 0x7
-       IFF_802_1Q_VLAN                  = 0x1
+       IFA_MAX                          = 0x8
        IFF_ALLMULTI                     = 0x200
        IFF_ATTACH_QUEUE                 = 0x200
        IFF_AUTOMEDIA                    = 0x4000
-       IFF_BONDING                      = 0x20
-       IFF_BRIDGE_PORT                  = 0x4000
        IFF_BROADCAST                    = 0x2
        IFF_DEBUG                        = 0x4
        IFF_DETACH_QUEUE                 = 0x400
-       IFF_DISABLE_NETPOLL              = 0x1000
-       IFF_DONT_BRIDGE                  = 0x800
        IFF_DORMANT                      = 0x20000
        IFF_DYNAMIC                      = 0x8000
-       IFF_EBRIDGE                      = 0x2
        IFF_ECHO                         = 0x40000
-       IFF_ISATAP                       = 0x80
-       IFF_LIVE_ADDR_CHANGE             = 0x100000
        IFF_LOOPBACK                     = 0x8
        IFF_LOWER_UP                     = 0x10000
-       IFF_MACVLAN                      = 0x200000
-       IFF_MACVLAN_PORT                 = 0x2000
        IFF_MASTER                       = 0x400
-       IFF_MASTER_8023AD                = 0x8
-       IFF_MASTER_ALB                   = 0x10
-       IFF_MASTER_ARPMON                = 0x100
        IFF_MULTICAST                    = 0x1000
        IFF_MULTI_QUEUE                  = 0x100
        IFF_NOARP                        = 0x80
@@ -514,27 +545,18 @@ const (
        IFF_NOTRAILERS                   = 0x20
        IFF_NO_PI                        = 0x1000
        IFF_ONE_QUEUE                    = 0x2000
-       IFF_OVS_DATAPATH                 = 0x8000
        IFF_PERSIST                      = 0x800
        IFF_POINTOPOINT                  = 0x10
        IFF_PORTSEL                      = 0x2000
        IFF_PROMISC                      = 0x100
        IFF_RUNNING                      = 0x40
        IFF_SLAVE                        = 0x800
-       IFF_SLAVE_INACTIVE               = 0x4
-       IFF_SLAVE_NEEDARP                = 0x40
-       IFF_SUPP_NOFCS                   = 0x80000
        IFF_TAP                          = 0x2
-       IFF_TEAM_PORT                    = 0x40000
        IFF_TUN                          = 0x1
        IFF_TUN_EXCL                     = 0x8000
-       IFF_TX_SKB_SHARING               = 0x10000
-       IFF_UNICAST_FLT                  = 0x20000
        IFF_UP                           = 0x1
        IFF_VNET_HDR                     = 0x4000
        IFF_VOLATILE                     = 0x70c5a
-       IFF_WAN_HDLC                     = 0x200
-       IFF_XMIT_DST_RELEASE             = 0x400
        IFNAMSIZ                         = 0x10
        IGNBRK                           = 0x1
        IGNCR                            = 0x80
@@ -599,6 +621,7 @@ const (
        IPPROTO_IPIP                     = 0x4
        IPPROTO_IPV6                     = 0x29
        IPPROTO_MH                       = 0x87
+       IPPROTO_MPLS                     = 0x89
        IPPROTO_MTP                      = 0x5c
        IPPROTO_NONE                     = 0x3b
        IPPROTO_PIM                      = 0x67
@@ -621,8 +644,10 @@ const (
        IPV6_ADD_MEMBERSHIP              = 0x14
        IPV6_AUTHHDR                     = 0xa
        IPV6_CHECKSUM                    = 0x7
+       IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -636,15 +661,19 @@ const (
        IPV6_MULTICAST_IF                = 0x11
        IPV6_MULTICAST_LOOP              = 0x13
        IPV6_NEXTHOP                     = 0x9
+       IPV6_PATHMTU                     = 0x3d
        IPV6_PKTINFO                     = 0x32
        IPV6_PMTUDISC_DO                 = 0x2
        IPV6_PMTUDISC_DONT               = 0x0
+       IPV6_PMTUDISC_INTERFACE          = 0x4
+       IPV6_PMTUDISC_OMIT               = 0x5
        IPV6_PMTUDISC_PROBE              = 0x3
        IPV6_PMTUDISC_WANT               = 0x1
        IPV6_RECVDSTOPTS                 = 0x3a
        IPV6_RECVERR                     = 0x19
        IPV6_RECVHOPLIMIT                = 0x33
        IPV6_RECVHOPOPTS                 = 0x35
+       IPV6_RECVPATHMTU                 = 0x3c
        IPV6_RECVPKTINFO                 = 0x31
        IPV6_RECVRTHDR                   = 0x38
        IPV6_RECVTCLASS                  = 0x42
@@ -662,7 +691,9 @@ const (
        IPV6_XFRM_POLICY                 = 0x23
        IP_ADD_MEMBERSHIP                = 0x23
        IP_ADD_SOURCE_MEMBERSHIP         = 0x27
+       IP_BIND_ADDRESS_NO_PORT          = 0x18
        IP_BLOCK_SOURCE                  = 0x26
+       IP_CHECKSUM                      = 0x17
        IP_DEFAULT_MULTICAST_LOOP        = 0x1
        IP_DEFAULT_MULTICAST_TTL         = 0x1
        IP_DF                            = 0x4000
@@ -683,6 +714,7 @@ const (
        IP_MULTICAST_IF                  = 0x20
        IP_MULTICAST_LOOP                = 0x22
        IP_MULTICAST_TTL                 = 0x21
+       IP_NODEFRAG                      = 0x16
        IP_OFFMASK                       = 0x1fff
        IP_OPTIONS                       = 0x4
        IP_ORIGDSTADDR                   = 0x14
@@ -692,6 +724,8 @@ const (
        IP_PMTUDISC                      = 0xa
        IP_PMTUDISC_DO                   = 0x2
        IP_PMTUDISC_DONT                 = 0x0
+       IP_PMTUDISC_INTERFACE            = 0x4
+       IP_PMTUDISC_OMIT                 = 0x5
        IP_PMTUDISC_PROBE                = 0x3
        IP_PMTUDISC_WANT                 = 0x1
        IP_RECVERR                       = 0xb
@@ -735,6 +769,7 @@ const (
        MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -765,9 +800,11 @@ const (
        MAP_TYPE                         = 0xf
        MCL_CURRENT                      = 0x2000
        MCL_FUTURE                       = 0x4000
+       MCL_ONFAULT                      = 0x8000
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -791,10 +828,12 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
        MS_KERNMOUNT                     = 0x400000
+       MS_LAZYTIME                      = 0x2000000
        MS_MANDLOCK                      = 0x40
        MS_MGC_MSK                       = 0xffff0000
        MS_MGC_VAL                       = 0xc0ed0000
@@ -803,6 +842,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -811,7 +852,7 @@ const (
        MS_REC                           = 0x4000
        MS_RELATIME                      = 0x200000
        MS_REMOUNT                       = 0x20
-       MS_RMT_MASK                      = 0x800051
+       MS_RMT_MASK                      = 0x2800051
        MS_SHARED                        = 0x100000
        MS_SILENT                        = 0x8000
        MS_SLAVE                         = 0x80000
@@ -819,10 +860,12 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
        NETLINK_BROADCAST_ERROR          = 0x4
+       NETLINK_CAP_ACK                  = 0xa
        NETLINK_CONNECTOR                = 0xb
        NETLINK_CRYPTO                   = 0x15
        NETLINK_DNRTMSG                  = 0xe
@@ -835,6 +878,8 @@ const (
        NETLINK_IP6_FW                   = 0xd
        NETLINK_ISCSI                    = 0x8
        NETLINK_KOBJECT_UEVENT           = 0xf
+       NETLINK_LISTEN_ALL_NSID          = 0x8
+       NETLINK_LIST_MEMBERSHIPS         = 0x9
        NETLINK_NETFILTER                = 0xc
        NETLINK_NFLOG                    = 0x5
        NETLINK_NO_ENOBUFS               = 0x5
@@ -909,7 +954,7 @@ const (
        O_RDWR                           = 0x2
        O_RSYNC                          = 0x101000
        O_SYNC                           = 0x101000
-       O_TMPFILE                        = 0x410000
+       O_TMPFILE                        = 0x404000
        O_TRUNC                          = 0x200
        O_WRONLY                         = 0x1
        PACKET_ADD_MEMBERSHIP            = 0x1
@@ -918,16 +963,21 @@ const (
        PACKET_COPY_THRESH               = 0x7
        PACKET_DROP_MEMBERSHIP           = 0x2
        PACKET_FANOUT                    = 0x12
+       PACKET_FANOUT_CBPF               = 0x6
        PACKET_FANOUT_CPU                = 0x2
+       PACKET_FANOUT_DATA               = 0x16
+       PACKET_FANOUT_EBPF               = 0x7
        PACKET_FANOUT_FLAG_DEFRAG        = 0x8000
        PACKET_FANOUT_FLAG_ROLLOVER      = 0x1000
        PACKET_FANOUT_HASH               = 0x0
        PACKET_FANOUT_LB                 = 0x1
+       PACKET_FANOUT_QM                 = 0x5
        PACKET_FANOUT_RND                = 0x4
        PACKET_FANOUT_ROLLOVER           = 0x3
        PACKET_FASTROUTE                 = 0x6
        PACKET_HDRLEN                    = 0xb
        PACKET_HOST                      = 0x0
+       PACKET_KERNEL                    = 0x7
        PACKET_LOOPBACK                  = 0x5
        PACKET_LOSS                      = 0xe
        PACKET_MR_ALLMULTI               = 0x2
@@ -938,14 +988,17 @@ const (
        PACKET_ORIGDEV                   = 0x9
        PACKET_OTHERHOST                 = 0x3
        PACKET_OUTGOING                  = 0x4
+       PACKET_QDISC_BYPASS              = 0x14
        PACKET_RECV_OUTPUT               = 0x3
        PACKET_RESERVE                   = 0xc
+       PACKET_ROLLOVER_STATS            = 0x15
        PACKET_RX_RING                   = 0x5
        PACKET_STATISTICS                = 0x6
        PACKET_TIMESTAMP                 = 0x11
        PACKET_TX_HAS_OFF                = 0x13
        PACKET_TX_RING                   = 0xd
        PACKET_TX_TIMESTAMP              = 0x10
+       PACKET_USER                      = 0x6
        PACKET_VERSION                   = 0xa
        PACKET_VNET_HDR                  = 0xf
        PARENB                           = 0x1000
@@ -972,6 +1025,11 @@ const (
        PROT_WRITE                       = 0x2
        PR_CAPBSET_DROP                  = 0x18
        PR_CAPBSET_READ                  = 0x17
+       PR_CAP_AMBIENT                   = 0x2f
+       PR_CAP_AMBIENT_CLEAR_ALL         = 0x4
+       PR_CAP_AMBIENT_IS_SET            = 0x1
+       PR_CAP_AMBIENT_LOWER             = 0x3
+       PR_CAP_AMBIENT_RAISE             = 0x2
        PR_ENDIAN_BIG                    = 0x0
        PR_ENDIAN_LITTLE                 = 0x1
        PR_ENDIAN_PPC_LITTLE             = 0x2
@@ -987,17 +1045,21 @@ const (
        PR_FP_EXC_RES                    = 0x80000
        PR_FP_EXC_SW_ENABLE              = 0x80
        PR_FP_EXC_UND                    = 0x40000
+       PR_FP_MODE_FR                    = 0x1
+       PR_FP_MODE_FRE                   = 0x2
        PR_GET_CHILD_SUBREAPER           = 0x25
        PR_GET_DUMPABLE                  = 0x3
        PR_GET_ENDIAN                    = 0x13
        PR_GET_FPEMU                     = 0x9
        PR_GET_FPEXC                     = 0xb
+       PR_GET_FP_MODE                   = 0x2e
        PR_GET_KEEPCAPS                  = 0x7
        PR_GET_NAME                      = 0x10
        PR_GET_NO_NEW_PRIVS              = 0x27
        PR_GET_PDEATHSIG                 = 0x2
        PR_GET_SECCOMP                   = 0x15
        PR_GET_SECUREBITS                = 0x1b
+       PR_GET_THP_DISABLE               = 0x2a
        PR_GET_TID_ADDRESS               = 0x28
        PR_GET_TIMERSLACK                = 0x1e
        PR_GET_TIMING                    = 0xd
@@ -1010,11 +1072,14 @@ const (
        PR_MCE_KILL_GET                  = 0x22
        PR_MCE_KILL_LATE                 = 0x0
        PR_MCE_KILL_SET                  = 0x1
+       PR_MPX_DISABLE_MANAGEMENT        = 0x2c
+       PR_MPX_ENABLE_MANAGEMENT         = 0x2b
        PR_SET_CHILD_SUBREAPER           = 0x24
        PR_SET_DUMPABLE                  = 0x4
        PR_SET_ENDIAN                    = 0x14
        PR_SET_FPEMU                     = 0xa
        PR_SET_FPEXC                     = 0xc
+       PR_SET_FP_MODE                   = 0x2d
        PR_SET_KEEPCAPS                  = 0x8
        PR_SET_MM                        = 0x23
        PR_SET_MM_ARG_END                = 0x9
@@ -1026,6 +1091,8 @@ const (
        PR_SET_MM_ENV_END                = 0xb
        PR_SET_MM_ENV_START              = 0xa
        PR_SET_MM_EXE_FILE               = 0xd
+       PR_SET_MM_MAP                    = 0xe
+       PR_SET_MM_MAP_SIZE               = 0xf
        PR_SET_MM_START_BRK              = 0x6
        PR_SET_MM_START_CODE             = 0x1
        PR_SET_MM_START_DATA             = 0x3
@@ -1037,6 +1104,7 @@ const (
        PR_SET_PTRACER_ANY               = -0x1
        PR_SET_SECCOMP                   = 0x16
        PR_SET_SECUREBITS                = 0x1c
+       PR_SET_THP_DISABLE               = 0x29
        PR_SET_TIMERSLACK                = 0x1d
        PR_SET_TIMING                    = 0xe
        PR_SET_TSC                       = 0x1a
@@ -1075,7 +1143,8 @@ const (
        PTRACE_KILL                      = 0x8
        PTRACE_LISTEN                    = 0x4208
        PTRACE_O_EXITKILL                = 0x100000
-       PTRACE_O_MASK                    = 0x1000ff
+       PTRACE_O_MASK                    = 0x3000ff
+       PTRACE_O_SUSPEND_SECCOMP         = 0x200000
        PTRACE_O_TRACECLONE              = 0x8
        PTRACE_O_TRACEEXEC               = 0x10
        PTRACE_O_TRACEEXIT               = 0x40
@@ -1092,6 +1161,7 @@ const (
        PTRACE_POKEDATA                  = 0x5
        PTRACE_POKETEXT                  = 0x4
        PTRACE_POKEUSR                   = 0x6
+       PTRACE_SECCOMP_GET_FILTER        = 0x420c
        PTRACE_SEIZE                     = 0x4206
        PTRACE_SETEVRREGS                = 0x15
        PTRACE_SETFPREGS                 = 0xf
@@ -1170,17 +1240,19 @@ const (
        RLIMIT_STACK                     = 0x3
        RLIM_INFINITY                    = -0x1
        RTAX_ADVMSS                      = 0x8
+       RTAX_CC_ALGO                     = 0x10
        RTAX_CWND                        = 0x7
        RTAX_FEATURES                    = 0xc
        RTAX_FEATURE_ALLFRAG             = 0x8
        RTAX_FEATURE_ECN                 = 0x1
+       RTAX_FEATURE_MASK                = 0xf
        RTAX_FEATURE_SACK                = 0x2
        RTAX_FEATURE_TIMESTAMP           = 0x4
        RTAX_HOPLIMIT                    = 0xa
        RTAX_INITCWND                    = 0xb
        RTAX_INITRWND                    = 0xe
        RTAX_LOCK                        = 0x1
-       RTAX_MAX                         = 0xf
+       RTAX_MAX                         = 0x10
        RTAX_MTU                         = 0x2
        RTAX_QUICKACK                    = 0xf
        RTAX_REORDERING                  = 0x9
@@ -1191,7 +1263,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x11
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1235,6 +1307,7 @@ const (
        RTM_DELLINK                      = 0x11
        RTM_DELMDB                       = 0x55
        RTM_DELNEIGH                     = 0x1d
+       RTM_DELNSID                      = 0x59
        RTM_DELQDISC                     = 0x25
        RTM_DELROUTE                     = 0x19
        RTM_DELRULE                      = 0x21
@@ -1242,6 +1315,7 @@ const (
        RTM_DELTFILTER                   = 0x2d
        RTM_F_CLONED                     = 0x200
        RTM_F_EQUALIZE                   = 0x400
+       RTM_F_LOOKUP_TABLE               = 0x1000
        RTM_F_NOTIFY                     = 0x100
        RTM_F_PREFIX                     = 0x800
        RTM_GETACTION                    = 0x32
@@ -1255,12 +1329,14 @@ const (
        RTM_GETNEIGH                     = 0x1e
        RTM_GETNEIGHTBL                  = 0x42
        RTM_GETNETCONF                   = 0x52
+       RTM_GETNSID                      = 0x5a
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x57
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
@@ -1270,22 +1346,28 @@ const (
        RTM_NEWNEIGH                     = 0x1c
        RTM_NEWNEIGHTBL                  = 0x40
        RTM_NEWNETCONF                   = 0x50
+       RTM_NEWNSID                      = 0x58
        RTM_NEWPREFIX                    = 0x34
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x12
-       RTM_NR_MSGTYPES                  = 0x48
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
+       RTNH_F_LINKDOWN                  = 0x10
+       RTNH_F_OFFLOAD                   = 0x8
        RTNH_F_ONLINK                    = 0x4
        RTNH_F_PERVASIVE                 = 0x2
        RTN_MAX                          = 0xb
+       RTPROT_BABEL                     = 0x2a
        RTPROT_BIRD                      = 0xc
        RTPROT_BOOT                      = 0x3
        RTPROT_DHCP                      = 0x10
@@ -1313,6 +1395,7 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
        SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
@@ -1386,31 +1469,52 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x1
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
+       SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0x1
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1e
+       SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
+       SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x6
        SO_BSDCOMPAT                     = 0xe
        SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
+       SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
        SO_DOMAIN                        = 0x27
        SO_DONTROUTE                     = 0x5
        SO_ERROR                         = 0x4
        SO_GET_FILTER                    = 0x1a
+       SO_INCOMING_CPU                  = 0x31
        SO_KEEPALIVE                     = 0x9
        SO_LINGER                        = 0xd
        SO_LOCK_FILTER                   = 0x2c
@@ -1446,6 +1550,13 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x3
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
        SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
@@ -1493,6 +1604,7 @@ const (
        TCOFLUSH                         = 0x1
        TCOOFF                           = 0x0
        TCOON                            = 0x1
+       TCP_CC_INFO                      = 0x1a
        TCP_CONGESTION                   = 0xd
        TCP_COOKIE_IN_ALWAYS             = 0x1
        TCP_COOKIE_MAX                   = 0x10
@@ -1517,11 +1629,15 @@ const (
        TCP_MSS_DEFAULT                  = 0x218
        TCP_MSS_DESIRED                  = 0x4c4
        TCP_NODELAY                      = 0x1
+       TCP_NOTSENT_LOWAT                = 0x19
        TCP_QUEUE_SEQ                    = 0x15
        TCP_QUICKACK                     = 0xc
        TCP_REPAIR                       = 0x13
        TCP_REPAIR_OPTIONS               = 0x16
        TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
+       TCP_SAVED_SYN                    = 0x1c
+       TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
        TCP_S_DATA_IN                    = 0x4
        TCP_S_DATA_OUT                   = 0x8
@@ -1627,7 +1743,9 @@ const (
        TUNGETFILTER                     = 0x401054db
        TUNGETIFF                        = 0x400454d2
        TUNGETSNDBUF                     = 0x400454d3
+       TUNGETVNETBE                     = 0x400454df
        TUNGETVNETHDRSZ                  = 0x400454d7
+       TUNGETVNETLE                     = 0x400454dd
        TUNSETDEBUG                      = 0x800454c9
        TUNSETGROUP                      = 0x800454ce
        TUNSETIFF                        = 0x800454ca
@@ -1640,7 +1758,9 @@ const (
        TUNSETQUEUE                      = 0x800454d9
        TUNSETSNDBUF                     = 0x800454d4
        TUNSETTXFILTER                   = 0x800454d1
+       TUNSETVNETBE                     = 0x800454de
        TUNSETVNETHDRSZ                  = 0x800454d8
+       TUNSETVNETLE                     = 0x800454dc
        VDISCARD                         = 0x10
        VEOF                             = 0x4
        VEOL                             = 0x6
@@ -1649,7 +1769,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x5
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xb
        VSTART                           = 0xd
index 509c100..f8b0eb7 100644 (file)
@@ -1,10 +1,10 @@
-// mkerrors.sh -m64
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build s390x,linux
 
 // Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- -m64 _const.go
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go
 
 package unix
 
@@ -32,10 +32,11 @@ const (
        AF_IRDA                          = 0x17
        AF_ISDN                          = 0x22
        AF_IUCV                          = 0x20
+       AF_KCM                           = 0x29
        AF_KEY                           = 0xf
        AF_LLC                           = 0x1a
        AF_LOCAL                         = 0x1
-       AF_MAX                           = 0x29
+       AF_MAX                           = 0x2b
        AF_MPLS                          = 0x1c
        AF_NETBEUI                       = 0xd
        AF_NETLINK                       = 0x10
@@ -44,6 +45,7 @@ const (
        AF_PACKET                        = 0x11
        AF_PHONET                        = 0x23
        AF_PPPOX                         = 0x18
+       AF_QIPCRTR                       = 0x2a
        AF_RDS                           = 0x15
        AF_ROSE                          = 0xb
        AF_ROUTE                         = 0x10
@@ -166,6 +168,7 @@ const (
        BLKFRASET                        = 0x1264
        BLKGETSIZE                       = 0x1260
        BLKGETSIZE64                     = 0x80081272
+       BLKPBSZGET                       = 0x127b
        BLKRAGET                         = 0x1263
        BLKRASET                         = 0x1262
        BLKROGET                         = 0x125e
@@ -237,6 +240,7 @@ const (
        CAN_MTU                          = 0x10
        CAN_NPROTO                       = 0x7
        CAN_RAW                          = 0x1
+       CAN_RAW_FILTER_MAX               = 0x200
        CAN_RTR_FLAG                     = 0x40000000
        CAN_SFF_ID_BITS                  = 0xb
        CAN_SFF_MASK                     = 0x7ff
@@ -329,6 +333,7 @@ const (
        ENCODING_NRZI                    = 0x2
        EPOLLERR                         = 0x8
        EPOLLET                          = 0x80000000
+       EPOLLEXCLUSIVE                   = 0x10000000
        EPOLLHUP                         = 0x10
        EPOLLIN                          = 0x1
        EPOLLMSG                         = 0x400
@@ -383,6 +388,7 @@ const (
        ETH_P_FCOE                       = 0x8906
        ETH_P_FIP                        = 0x8914
        ETH_P_HDLC                       = 0x19
+       ETH_P_HSR                        = 0x892f
        ETH_P_IEEE802154                 = 0xf6
        ETH_P_IEEEPUP                    = 0xa00
        ETH_P_IEEEPUPAT                  = 0xa01
@@ -395,10 +401,12 @@ const (
        ETH_P_LOCALTALK                  = 0x9
        ETH_P_LOOP                       = 0x60
        ETH_P_LOOPBACK                   = 0x9000
+       ETH_P_MACSEC                     = 0x88e5
        ETH_P_MOBITEX                    = 0x15
        ETH_P_MPLS_MC                    = 0x8848
        ETH_P_MPLS_UC                    = 0x8847
        ETH_P_MVRP                       = 0x88f5
+       ETH_P_NCSI                       = 0x88f8
        ETH_P_PAE                        = 0x888e
        ETH_P_PAUSE                      = 0x8808
        ETH_P_PHONET                     = 0xf5
@@ -434,6 +442,7 @@ const (
        FALLOC_FL_KEEP_SIZE              = 0x1
        FALLOC_FL_NO_HIDE_STALE          = 0x4
        FALLOC_FL_PUNCH_HOLE             = 0x2
+       FALLOC_FL_UNSHARE_RANGE          = 0x40
        FALLOC_FL_ZERO_RANGE             = 0x10
        FD_CLOEXEC                       = 0x1
        FD_SETSIZE                       = 0x400
@@ -441,6 +450,24 @@ const (
        FF1                              = 0x8000
        FFDLY                            = 0x8000
        FLUSHO                           = 0x1000
+       FS_ENCRYPTION_MODE_AES_256_CBC   = 0x3
+       FS_ENCRYPTION_MODE_AES_256_CTS   = 0x4
+       FS_ENCRYPTION_MODE_AES_256_GCM   = 0x2
+       FS_ENCRYPTION_MODE_AES_256_XTS   = 0x1
+       FS_ENCRYPTION_MODE_INVALID       = 0x0
+       FS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615
+       FS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614
+       FS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613
+       FS_KEY_DESCRIPTOR_SIZE           = 0x8
+       FS_KEY_DESC_PREFIX               = "fscrypt:"
+       FS_KEY_DESC_PREFIX_SIZE          = 0x8
+       FS_MAX_KEY_SIZE                  = 0x40
+       FS_POLICY_FLAGS_PAD_16           = 0x2
+       FS_POLICY_FLAGS_PAD_32           = 0x3
+       FS_POLICY_FLAGS_PAD_4            = 0x0
+       FS_POLICY_FLAGS_PAD_8            = 0x1
+       FS_POLICY_FLAGS_PAD_MASK         = 0x3
+       FS_POLICY_FLAGS_VALID            = 0x3
        F_DUPFD                          = 0x0
        F_DUPFD_CLOEXEC                  = 0x406
        F_EXLCK                          = 0x4
@@ -620,6 +647,7 @@ const (
        IPV6_DONTFRAG                    = 0x3e
        IPV6_DROP_MEMBERSHIP             = 0x15
        IPV6_DSTOPTS                     = 0x3b
+       IPV6_HDRINCL                     = 0x24
        IPV6_HOPLIMIT                    = 0x34
        IPV6_HOPOPTS                     = 0x36
        IPV6_IPSEC_POLICY                = 0x22
@@ -741,6 +769,7 @@ const (
        MADV_DONTDUMP                    = 0x10
        MADV_DONTFORK                    = 0xa
        MADV_DONTNEED                    = 0x4
+       MADV_FREE                        = 0x8
        MADV_HUGEPAGE                    = 0xe
        MADV_HWPOISON                    = 0x64
        MADV_MERGEABLE                   = 0xc
@@ -775,6 +804,7 @@ const (
        MNT_DETACH                       = 0x2
        MNT_EXPIRE                       = 0x4
        MNT_FORCE                        = 0x1
+       MSG_BATCH                        = 0x40000
        MSG_CMSG_CLOEXEC                 = 0x40000000
        MSG_CONFIRM                      = 0x800
        MSG_CTRUNC                       = 0x8
@@ -798,6 +828,7 @@ const (
        MS_ACTIVE                        = 0x40000000
        MS_ASYNC                         = 0x1
        MS_BIND                          = 0x1000
+       MS_BORN                          = 0x20000000
        MS_DIRSYNC                       = 0x80
        MS_INVALIDATE                    = 0x2
        MS_I_VERSION                     = 0x800000
@@ -811,6 +842,8 @@ const (
        MS_NODEV                         = 0x4
        MS_NODIRATIME                    = 0x800
        MS_NOEXEC                        = 0x8
+       MS_NOREMOTELOCK                  = 0x8000000
+       MS_NOSEC                         = 0x10000000
        MS_NOSUID                        = 0x2
        MS_NOUSER                        = -0x80000000
        MS_POSIXACL                      = 0x10000
@@ -827,6 +860,7 @@ const (
        MS_SYNC                          = 0x4
        MS_SYNCHRONOUS                   = 0x10
        MS_UNBINDABLE                    = 0x20000
+       MS_VERBOSE                       = 0x8000
        NAME_MAX                         = 0xff
        NETLINK_ADD_MEMBERSHIP           = 0x1
        NETLINK_AUDIT                    = 0x9
@@ -1233,7 +1267,7 @@ const (
        RTAX_UNSPEC                      = 0x0
        RTAX_WINDOW                      = 0x3
        RTA_ALIGNTO                      = 0x4
-       RTA_MAX                          = 0x16
+       RTA_MAX                          = 0x19
        RTCF_DIRECTSRC                   = 0x4000000
        RTCF_DOREDIRECT                  = 0x1000000
        RTCF_LOG                         = 0x2000000
@@ -1303,9 +1337,10 @@ const (
        RTM_GETQDISC                     = 0x26
        RTM_GETROUTE                     = 0x1a
        RTM_GETRULE                      = 0x22
+       RTM_GETSTATS                     = 0x5e
        RTM_GETTCLASS                    = 0x2a
        RTM_GETTFILTER                   = 0x2e
-       RTM_MAX                          = 0x5b
+       RTM_MAX                          = 0x5f
        RTM_NEWACTION                    = 0x30
        RTM_NEWADDR                      = 0x14
        RTM_NEWADDRLABEL                 = 0x48
@@ -1320,15 +1355,16 @@ const (
        RTM_NEWQDISC                     = 0x24
        RTM_NEWROUTE                     = 0x18
        RTM_NEWRULE                      = 0x20
+       RTM_NEWSTATS                     = 0x5c
        RTM_NEWTCLASS                    = 0x28
        RTM_NEWTFILTER                   = 0x2c
-       RTM_NR_FAMILIES                  = 0x13
-       RTM_NR_MSGTYPES                  = 0x4c
+       RTM_NR_FAMILIES                  = 0x14
+       RTM_NR_MSGTYPES                  = 0x50
        RTM_SETDCB                       = 0x4f
        RTM_SETLINK                      = 0x13
        RTM_SETNEIGHTBL                  = 0x43
        RTNH_ALIGNTO                     = 0x4
-       RTNH_COMPARE_MASK                = 0x11
+       RTNH_COMPARE_MASK                = 0x19
        RTNH_F_DEAD                      = 0x1
        RTNH_F_LINKDOWN                  = 0x10
        RTNH_F_OFFLOAD                   = 0x8
@@ -1363,6 +1399,7 @@ const (
        SCM_RIGHTS                       = 0x1
        SCM_TIMESTAMP                    = 0x1d
        SCM_TIMESTAMPING                 = 0x25
+       SCM_TIMESTAMPING_OPT_STATS       = 0x36
        SCM_TIMESTAMPNS                  = 0x23
        SCM_WIFI_STATUS                  = 0x29
        SHUT_RD                          = 0x0
@@ -1436,27 +1473,44 @@ const (
        SOCK_SEQPACKET                   = 0x5
        SOCK_STREAM                      = 0x1
        SOL_AAL                          = 0x109
+       SOL_ALG                          = 0x117
        SOL_ATM                          = 0x108
+       SOL_CAIF                         = 0x116
+       SOL_CAN_BASE                     = 0x64
+       SOL_DCCP                         = 0x10d
        SOL_DECNET                       = 0x105
        SOL_ICMPV6                       = 0x3a
        SOL_IP                           = 0x0
        SOL_IPV6                         = 0x29
        SOL_IRDA                         = 0x10a
+       SOL_IUCV                         = 0x115
+       SOL_KCM                          = 0x119
+       SOL_LLC                          = 0x10c
+       SOL_NETBEUI                      = 0x10b
        SOL_NETLINK                      = 0x10e
+       SOL_NFC                          = 0x118
        SOL_PACKET                       = 0x107
+       SOL_PNPIPE                       = 0x113
+       SOL_PPPOL2TP                     = 0x111
        SOL_RAW                          = 0xff
+       SOL_RDS                          = 0x114
+       SOL_RXRPC                        = 0x110
        SOL_SOCKET                       = 0x1
        SOL_TCP                          = 0x6
+       SOL_TIPC                         = 0x10f
        SOL_X25                          = 0x106
        SOMAXCONN                        = 0x80
        SO_ACCEPTCONN                    = 0x1e
        SO_ATTACH_BPF                    = 0x32
        SO_ATTACH_FILTER                 = 0x1a
+       SO_ATTACH_REUSEPORT_CBPF         = 0x33
+       SO_ATTACH_REUSEPORT_EBPF         = 0x34
        SO_BINDTODEVICE                  = 0x19
        SO_BPF_EXTENSIONS                = 0x30
        SO_BROADCAST                     = 0x6
        SO_BSDCOMPAT                     = 0xe
        SO_BUSY_POLL                     = 0x2e
+       SO_CNX_ADVICE                    = 0x35
        SO_DEBUG                         = 0x1
        SO_DETACH_BPF                    = 0x1b
        SO_DETACH_FILTER                 = 0x1b
@@ -1500,6 +1554,13 @@ const (
        SO_TIMESTAMPING                  = 0x25
        SO_TIMESTAMPNS                   = 0x23
        SO_TYPE                          = 0x3
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
        SO_WIFI_STATUS                   = 0x29
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
@@ -1580,6 +1641,7 @@ const (
        TCP_REPAIR                       = 0x13
        TCP_REPAIR_OPTIONS               = 0x16
        TCP_REPAIR_QUEUE                 = 0x14
+       TCP_REPAIR_WINDOW                = 0x1d
        TCP_SAVED_SYN                    = 0x1c
        TCP_SAVE_SYN                     = 0x1b
        TCP_SYNCNT                       = 0x7
@@ -1707,7 +1769,13 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x6
+       VM_SOCKETS_INVALID_VERSION       = 0xffffffff
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
        VSTART                           = 0x8
index 4fe2476..95de199 100644 (file)
@@ -1540,6 +1540,13 @@ const (
        SO_TIMESTAMPING                  = 0x23
        SO_TIMESTAMPNS                   = 0x21
        SO_TYPE                          = 0x1008
+       SO_VM_SOCKETS_BUFFER_MAX_SIZE    = 0x2
+       SO_VM_SOCKETS_BUFFER_MIN_SIZE    = 0x1
+       SO_VM_SOCKETS_BUFFER_SIZE        = 0x0
+       SO_VM_SOCKETS_CONNECT_TIMEOUT    = 0x6
+       SO_VM_SOCKETS_NONBLOCK_TXRX      = 0x7
+       SO_VM_SOCKETS_PEER_HOST_VM_ID    = 0x3
+       SO_VM_SOCKETS_TRUSTED            = 0x5
        SO_WIFI_STATUS                   = 0x25
        SPLICE_F_GIFT                    = 0x8
        SPLICE_F_MORE                    = 0x4
@@ -1749,6 +1756,11 @@ const (
        VINTR                            = 0x0
        VKILL                            = 0x3
        VLNEXT                           = 0xf
+       VMADDR_CID_ANY                   = 0xffffffff
+       VMADDR_CID_HOST                  = 0x2
+       VMADDR_CID_HYPERVISOR            = 0x0
+       VMADDR_CID_RESERVED              = 0x1
+       VMADDR_PORT_ANY                  = 0xffffffff
        VMIN                             = 0x4
        VQUIT                            = 0x1
        VREPRINT                         = 0xc
index 3e9d82a..eafceb8 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build dragonfly,amd64
 
@@ -1380,3 +1380,14 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
        }
        return
 }
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
+       r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
+       nfd = int(r0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
index d4ec806..41693a9 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,386
 
index 8b2e87d..f10621d 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,amd64
 
index 82d36a4..fae666f 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,arm
 
index f6cc320..a4dca39 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,arm64
 
index f91afb4..b56db72 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,mips
 
index 657d11e..ca2359d 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,mips64
 
index 31ff177..e574940 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,mips64le
 
index 797e633..31836d4 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,mipsle
 
index 307dbb5..4a76755 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,ppc64
 
index f458a63..5fb3428 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,ppc64le
 
index b1d5a9b..79d285c 100644 (file)
@@ -1,5 +1,5 @@
 // mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go
-// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build linux,s390x
 
index d6038fa..b2c9ef8 100644 (file)
@@ -1,5 +1,5 @@
 // mksysnum_dragonfly.pl
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build amd64,dragonfly
 
@@ -42,7 +42,7 @@ const (
        SYS_SYNC          = 36  // { int sync(void); }
        SYS_KILL          = 37  // { int kill(int pid, int signum); }
        SYS_GETPPID       = 39  // { pid_t getppid(void); }
-       SYS_DUP           = 41  // { int dup(u_int fd); }
+       SYS_DUP           = 41  // { int dup(int fd); }
        SYS_PIPE          = 42  // { int pipe(void); }
        SYS_GETEGID       = 43  // { gid_t getegid(void); }
        SYS_PROFIL        = 44  // { int profil(caddr_t samples, size_t size, \
@@ -76,7 +76,7 @@ const (
        SYS_SWAPON        = 85  // { int swapon(char *name); }
        SYS_GETITIMER     = 86  // { int getitimer(u_int which, struct itimerval *itv); }
        SYS_GETDTABLESIZE = 89  // { int getdtablesize(void); }
-       SYS_DUP2          = 90  // { int dup2(u_int from, u_int to); }
+       SYS_DUP2          = 90  // { int dup2(int from, int to); }
        SYS_FCNTL         = 92  // { int fcntl(int fd, int cmd, long arg); }
        SYS_SELECT        = 93  // { int select(int nd, fd_set *in, fd_set *ou, \
        SYS_FSYNC         = 95  // { int fsync(int fd); }
@@ -144,7 +144,7 @@ const (
        SYS_SEMOP                  = 222 // { int semop(int semid, struct sembuf *sops, \
        SYS_MSGCTL                 = 224 // { int msgctl(int msqid, int cmd, \
        SYS_MSGGET                 = 225 // { int msgget(key_t key, int msgflg); }
-       SYS_MSGSND                 = 226 // { int msgsnd(int msqid, void *msgp, size_t msgsz, \
+       SYS_MSGSND                 = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, \
        SYS_MSGRCV                 = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, \
        SYS_SHMAT                  = 228 // { caddr_t shmat(int shmid, const void *shmaddr, \
        SYS_SHMCTL                 = 229 // { int shmctl(int shmid, int cmd, \
@@ -224,7 +224,7 @@ const (
        SYS_GETRESGID              = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
        SYS_KQUEUE                 = 362 // { int kqueue(void); }
        SYS_KEVENT                 = 363 // { int kevent(int fd, \
-       SYS_SCTP_PEELOFF           = 364 // { int sctp_peeloff(int sd, caddr_t name ); }
+       SYS_KENV                   = 390 // { int kenv(int what, const char *name, char *value, int len); }
        SYS_LCHFLAGS               = 391 // { int lchflags(char *path, int flags); }
        SYS_UUIDGEN                = 392 // { int uuidgen(struct uuid *store, int count); }
        SYS_SENDFILE               = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, \
@@ -301,4 +301,15 @@ const (
        SYS_LPATHCONF              = 533 // { int lpathconf(char *path, int name); }
        SYS_VMM_GUEST_CTL          = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); }
        SYS_VMM_GUEST_SYNC_ADDR    = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); }
+       SYS_PROCCTL                = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); }
+       SYS_CHFLAGSAT              = 537 // { int chflagsat(int fd, const char *path, int flags, int atflags);}
+       SYS_PIPE2                  = 538 // { int pipe2(int *fildes, int flags); }
+       SYS_UTIMENSAT              = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); }
+       SYS_FUTIMENS               = 540 // { int futimens(int fd, const struct timespec *ts); }
+       SYS_ACCEPT4                = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); }
+       SYS_LWP_SETNAME            = 542 // { int lwp_setname(lwpid_t tid, const char *name); }
+       SYS_PPOLL                  = 543 // { int ppoll(struct pollfd *fds, u_int nfds, \
+       SYS_LWP_SETAFFINITY        = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); }
+       SYS_LWP_GETAFFINITY        = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); }
+       SYS_LWP_CREATE2            = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); }
 )
index 206b3c2..cef4fed 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m32 -D__i386__ linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build 386,linux
 
index 9042317..49bfa12 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m64 linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build amd64,linux
 
index e3e6745..97b182e 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m32 -D__ARM_EABI__ linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build arm,linux
 
index 90e43d0..6407843 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m64 linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build arm64,linux
 
index 77ff644..939567c 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m32 -D_MIPS_SIM=_MIPS_SIM_ABI32 -D__MIPSEB__ linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build mips,linux
 
index fc86fcd..09db959 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m64 -D_MIPS_SIM=_MIPS_SIM_ABI64 -D__MIPSEB__ linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build mips64,linux
 
index 993873c..d1b872a 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m64 -D_MIPS_SIM=_MIPS_SIM_ABI64 -D__MIPSEL__ linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build mips64le,linux
 
index f0155ba..82ba20f 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m32 -D_MIPS_SIM=_MIPS_SIM_ABI32 -D__MIPSEL__ linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build mipsle,linux
 
index 0deec82..8944448 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__powerpc64__ linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build ppc64,linux
 
index 3f701be..90a039b 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__powerpc64__ linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build ppc64le,linux
 
index 8b35997..aab0cdb 100644 (file)
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__s390x__ linux/usr/include/asm/unistd.h
-// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
+// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build s390x,linux
 
index 8a6f4e1..e585c89 100644 (file)
@@ -1,5 +1,5 @@
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_dragonfly.go
+// cgo -godefs types_dragonfly.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
 
 // +build amd64,dragonfly
 
@@ -324,7 +324,7 @@ type IfData struct {
        Iqdrops    uint64
        Noproto    uint64
        Hwassist   uint64
-       Unused     uint64
+       Oqdrops    uint64
        Lastchange Timeval
 }
 
index 29b9bf3..7333755 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build 386,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go
 
 package unix
 
@@ -151,6 +152,20 @@ type Flock_t struct {
        Pid    int32
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -218,6 +233,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
@@ -267,10 +290,9 @@ type Msghdr struct {
 }
 
 type Cmsghdr struct {
-       Len          uint32
-       Level        int32
-       Type         int32
-       X__cmsg_data [0]uint8
+       Len   uint32
+       Level int32
+       Type  int32
 }
 
 type Inet4Pktinfo struct {
@@ -343,6 +365,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -387,7 +410,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x1d
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -537,7 +560,6 @@ type InotifyEvent struct {
        Mask   uint32
        Cookie uint32
        Len    uint32
-       Name   [0]int8
 }
 
 const SizeofInotifyEvent = 0x10
@@ -629,9 +651,11 @@ const (
 )
 
 type Sigset_t struct {
-       X__val [16]uint64
+       X__val [32]uint32
 }
 
+const _SC_PAGESIZE = 0x1e
+
 type Termios struct {
        Iflag  uint32
        Oflag  uint32
index b72cf8e..5807e17 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build amd64,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go
 
 package unix
 
@@ -98,21 +99,21 @@ type Rlimit struct {
 type _Gid_t uint32
 
 type Stat_t struct {
-       Dev       uint64
-       Ino       uint64
-       Nlink     uint64
-       Mode      uint32
-       Uid       uint32
-       Gid       uint32
-       X__pad0   int32
-       Rdev      uint64
-       Size      int64
-       Blksize   int64
-       Blocks    int64
-       Atim      Timespec
-       Mtim      Timespec
-       Ctim      Timespec
-       X__unused [3]int64
+       Dev     uint64
+       Ino     uint64
+       Nlink   uint64
+       Mode    uint32
+       Uid     uint32
+       Gid     uint32
+       X__pad0 int32
+       Rdev    uint64
+       Size    int64
+       Blksize int64
+       Blocks  int64
+       Atim    Timespec
+       Mtim    Timespec
+       Ctim    Timespec
+       _       [3]int64
 }
 
 type Statfs_t struct {
@@ -153,6 +154,20 @@ type Flock_t struct {
        Pad_cgo_1 [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -220,6 +235,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
@@ -271,10 +294,9 @@ type Msghdr struct {
 }
 
 type Cmsghdr struct {
-       Len          uint64
-       Level        int32
-       Type         int32
-       X__cmsg_data [0]uint8
+       Len   uint64
+       Level int32
+       Type  int32
 }
 
 type Inet4Pktinfo struct {
@@ -347,6 +369,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -391,7 +414,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x1d
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -541,7 +564,6 @@ type InotifyEvent struct {
        Mask   uint32
        Cookie uint32
        Len    uint32
-       Name   [0]int8
 }
 
 const SizeofInotifyEvent = 0x10
@@ -650,6 +672,8 @@ type Sigset_t struct {
        X__val [16]uint64
 }
 
+const _SC_PAGESIZE = 0x1e
+
 type Termios struct {
        Iflag  uint32
        Oflag  uint32
index d5c8bb6..db7c8bf 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build arm,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go | go run mkpost.go
 
 package unix
 
@@ -155,6 +156,20 @@ type Flock_t struct {
        Pad_cgo_1 [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -222,6 +237,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]uint8
@@ -271,10 +294,9 @@ type Msghdr struct {
 }
 
 type Cmsghdr struct {
-       Len          uint32
-       Level        int32
-       Type         int32
-       X__cmsg_data [0]uint8
+       Len   uint32
+       Level int32
+       Type  int32
 }
 
 type Inet4Pktinfo struct {
@@ -347,6 +369,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -391,7 +414,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x1d
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -541,7 +564,6 @@ type InotifyEvent struct {
        Mask   uint32
        Cookie uint32
        Len    uint32
-       Name   [0]uint8
 }
 
 const SizeofInotifyEvent = 0x10
@@ -618,9 +640,11 @@ const (
 )
 
 type Sigset_t struct {
-       X__val [16]uint64
+       X__val [32]uint32
 }
 
+const _SC_PAGESIZE = 0x1e
+
 type Termios struct {
        Iflag  uint32
        Oflag  uint32
index 24bd089..19cca4f 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build arm64,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- -fsigned-char types_linux.go
 
 package unix
 
@@ -98,22 +99,22 @@ type Rlimit struct {
 type _Gid_t uint32
 
 type Stat_t struct {
-       Dev               uint64
-       Ino               uint64
-       Mode              uint32
-       Nlink             uint32
-       Uid               uint32
-       Gid               uint32
-       Rdev              uint64
-       X__pad1           uint64
-       Size              int64
-       Blksize           int32
-       X__pad2           int32
-       Blocks            int64
-       Atim              Timespec
-       Mtim              Timespec
-       Ctim              Timespec
-       X__glibc_reserved [2]int32
+       Dev     uint64
+       Ino     uint64
+       Mode    uint32
+       Nlink   uint32
+       Uid     uint32
+       Gid     uint32
+       Rdev    uint64
+       X__pad1 uint64
+       Size    int64
+       Blksize int32
+       X__pad2 int32
+       Blocks  int64
+       Atim    Timespec
+       Mtim    Timespec
+       Ctim    Timespec
+       _       [2]int32
 }
 
 type Statfs_t struct {
@@ -154,6 +155,20 @@ type Flock_t struct {
        Pad_cgo_1 [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -221,6 +236,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
@@ -272,10 +295,9 @@ type Msghdr struct {
 }
 
 type Cmsghdr struct {
-       Len          uint64
-       Level        int32
-       Type         int32
-       X__cmsg_data [0]uint8
+       Len   uint64
+       Level int32
+       Type  int32
 }
 
 type Inet4Pktinfo struct {
@@ -348,6 +370,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -392,7 +415,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x22
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -542,7 +565,6 @@ type InotifyEvent struct {
        Mask   uint32
        Cookie uint32
        Len    uint32
-       Name   [0]int8
 }
 
 const SizeofInotifyEvent = 0x10
@@ -629,6 +651,8 @@ type Sigset_t struct {
        X__val [16]uint64
 }
 
+const _SC_PAGESIZE = 0x1e
+
 type Termios struct {
        Iflag  uint32
        Oflag  uint32
index c5a41ab..d04ca4c 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build mips,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go | go run mkpost.go
 
 package unix
 
@@ -154,6 +155,20 @@ type Flock_t struct {
        Pad_cgo_1 [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -221,6 +236,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
@@ -345,6 +368,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -389,7 +413,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x1d
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -557,15 +581,6 @@ type PtraceRegs struct {
        U_comm      [32]int8
 }
 
-type ptracePsw struct {
-}
-
-type ptraceFpregs struct {
-}
-
-type ptracePer struct {
-}
-
 type FdSet struct {
        Bits [32]int32
 }
index 3947c44..60b83a1 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build mips64,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go
 
 package unix
 
@@ -99,7 +100,7 @@ type _Gid_t uint32
 
 type Stat_t struct {
        Dev     uint32
-       Pad1    [3]int32
+       Pad1    [3]uint32
        Ino     uint64
        Mode    uint32
        Nlink   uint32
@@ -154,6 +155,20 @@ type Flock_t struct {
        Pad_cgo_1 [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -221,6 +236,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
@@ -347,6 +370,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -391,7 +415,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x27
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -633,12 +657,15 @@ type Sigset_t struct {
        X__val [16]uint64
 }
 
+const _SC_PAGESIZE = 0x1e
+
 type Termios struct {
-       Iflag     uint32
-       Oflag     uint32
-       Cflag     uint32
-       Lflag     uint32
-       Line      uint8
-       Cc        [32]uint8
-       Pad_cgo_0 [3]byte
+       Iflag  uint32
+       Oflag  uint32
+       Cflag  uint32
+       Lflag  uint32
+       Line   uint8
+       Cc     [23]uint8
+       Ispeed uint32
+       Ospeed uint32
 }
index de8f9c4..9e9c680 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build mips64le,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go
 
 package unix
 
@@ -99,7 +100,7 @@ type _Gid_t uint32
 
 type Stat_t struct {
        Dev     uint32
-       Pad1    [3]int32
+       Pad1    [3]uint32
        Ino     uint64
        Mode    uint32
        Nlink   uint32
@@ -154,6 +155,20 @@ type Flock_t struct {
        Pad_cgo_1 [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -221,6 +236,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
@@ -347,6 +370,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -391,7 +415,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x27
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -633,12 +657,15 @@ type Sigset_t struct {
        X__val [16]uint64
 }
 
+const _SC_PAGESIZE = 0x1e
+
 type Termios struct {
-       Iflag     uint32
-       Oflag     uint32
-       Cflag     uint32
-       Lflag     uint32
-       Line      uint8
-       Cc        [32]uint8
-       Pad_cgo_0 [3]byte
+       Iflag  uint32
+       Oflag  uint32
+       Cflag  uint32
+       Lflag  uint32
+       Line   uint8
+       Cc     [23]uint8
+       Ispeed uint32
+       Ospeed uint32
 }
index 5a8957f..482b48f 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build mipsle,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go | go run mkpost.go
 
 package unix
 
@@ -154,6 +155,20 @@ type Flock_t struct {
        Pad_cgo_1 [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -221,6 +236,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
@@ -345,6 +368,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -389,7 +413,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x2a
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -557,15 +581,6 @@ type PtraceRegs struct {
        U_comm      [32]int8
 }
 
-type ptracePsw struct {
-}
-
-type ptraceFpregs struct {
-}
-
-type ptracePer struct {
-}
-
 type FdSet struct {
        Bits [32]int32
 }
index 4b87529..4410abb 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build ppc64,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go
 
 package unix
 
@@ -98,23 +99,23 @@ type Rlimit struct {
 type _Gid_t uint32
 
 type Stat_t struct {
-       Dev                uint64
-       Ino                uint64
-       Nlink              uint64
-       Mode               uint32
-       Uid                uint32
-       Gid                uint32
-       X__pad2            int32
-       Rdev               uint64
-       Size               int64
-       Blksize            int64
-       Blocks             int64
-       Atim               Timespec
-       Mtim               Timespec
-       Ctim               Timespec
-       X__glibc_reserved4 uint64
-       X__glibc_reserved5 uint64
-       X__glibc_reserved6 uint64
+       Dev     uint64
+       Ino     uint64
+       Nlink   uint64
+       Mode    uint32
+       Uid     uint32
+       Gid     uint32
+       X__pad2 int32
+       Rdev    uint64
+       Size    int64
+       Blksize int64
+       Blocks  int64
+       Atim    Timespec
+       Mtim    Timespec
+       Ctim    Timespec
+       _       uint64
+       _       uint64
+       _       uint64
 }
 
 type Statfs_t struct {
@@ -155,6 +156,20 @@ type Flock_t struct {
        Pad_cgo_1 [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -222,6 +237,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]uint8
@@ -273,10 +296,9 @@ type Msghdr struct {
 }
 
 type Cmsghdr struct {
-       Len          uint64
-       Level        int32
-       Type         int32
-       X__cmsg_data [0]uint8
+       Len   uint64
+       Level int32
+       Type  int32
 }
 
 type Inet4Pktinfo struct {
@@ -349,6 +371,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -393,7 +416,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x23
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -543,7 +566,6 @@ type InotifyEvent struct {
        Mask   uint32
        Cookie uint32
        Len    uint32
-       Name   [0]uint8
 }
 
 const SizeofInotifyEvent = 0x10
@@ -639,6 +661,8 @@ type Sigset_t struct {
        X__val [16]uint64
 }
 
+const _SC_PAGESIZE = 0x1e
+
 type Termios struct {
        Iflag  uint32
        Oflag  uint32
index 40d51d9..10947c3 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build ppc64le,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go
 
 package unix
 
@@ -98,23 +99,23 @@ type Rlimit struct {
 type _Gid_t uint32
 
 type Stat_t struct {
-       Dev                uint64
-       Ino                uint64
-       Nlink              uint64
-       Mode               uint32
-       Uid                uint32
-       Gid                uint32
-       X__pad2            int32
-       Rdev               uint64
-       Size               int64
-       Blksize            int64
-       Blocks             int64
-       Atim               Timespec
-       Mtim               Timespec
-       Ctim               Timespec
-       X__glibc_reserved4 uint64
-       X__glibc_reserved5 uint64
-       X__glibc_reserved6 uint64
+       Dev     uint64
+       Ino     uint64
+       Nlink   uint64
+       Mode    uint32
+       Uid     uint32
+       Gid     uint32
+       X__pad2 int32
+       Rdev    uint64
+       Size    int64
+       Blksize int64
+       Blocks  int64
+       Atim    Timespec
+       Mtim    Timespec
+       Ctim    Timespec
+       _       uint64
+       _       uint64
+       _       uint64
 }
 
 type Statfs_t struct {
@@ -155,6 +156,20 @@ type Flock_t struct {
        Pad_cgo_1 [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -222,6 +237,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]uint8
@@ -273,10 +296,9 @@ type Msghdr struct {
 }
 
 type Cmsghdr struct {
-       Len          uint64
-       Level        int32
-       Type         int32
-       X__cmsg_data [0]uint8
+       Len   uint64
+       Level int32
+       Type  int32
 }
 
 type Inet4Pktinfo struct {
@@ -349,6 +371,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -393,7 +416,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x22
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -543,7 +566,6 @@ type InotifyEvent struct {
        Mask   uint32
        Cookie uint32
        Len    uint32
-       Name   [0]uint8
 }
 
 const SizeofInotifyEvent = 0x10
@@ -639,6 +661,8 @@ type Sigset_t struct {
        X__val [16]uint64
 }
 
+const _SC_PAGESIZE = 0x1e
+
 type Termios struct {
        Iflag  uint32
        Oflag  uint32
index 13f6ea0..57dbb36 100644 (file)
@@ -1,6 +1,7 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
 // +build s390x,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- -fsigned-char types_linux.go
 
 package unix
 
@@ -154,6 +155,20 @@ type Flock_t struct {
        _      [4]byte
 }
 
+type FscryptPolicy struct {
+       Version                   uint8
+       Contents_encryption_mode  uint8
+       Filenames_encryption_mode uint8
+       Flags                     uint8
+       Master_key_descriptor     [8]uint8
+}
+
+type FscryptKey struct {
+       Mode uint32
+       Raw  [64]uint8
+       Size uint32
+}
+
 const (
        FADV_NORMAL     = 0x0
        FADV_RANDOM     = 0x1
@@ -207,10 +222,10 @@ type RawSockaddrHCI struct {
 }
 
 type RawSockaddrCAN struct {
-       Family    uint16
-       Pad_cgo_0 [2]byte
-       Ifindex   int32
-       Addr      [8]byte
+       Family  uint16
+       _       [2]byte
+       Ifindex int32
+       Addr    [8]byte
 }
 
 type RawSockaddrALG struct {
@@ -221,6 +236,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
@@ -347,6 +370,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
@@ -391,7 +415,7 @@ const (
        IFLA_LINKINFO       = 0x12
        IFLA_NET_NS_PID     = 0x13
        IFLA_IFALIAS        = 0x14
-       IFLA_MAX            = 0x27
+       IFLA_MAX            = 0x2b
        RT_SCOPE_UNIVERSE   = 0x0
        RT_SCOPE_SITE       = 0xc8
        RT_SCOPE_LINK       = 0xfd
@@ -651,9 +675,11 @@ const (
 )
 
 type Sigset_t struct {
-       X__val [16]uint64
+       _ [16]uint64
 }
 
+const _SC_PAGESIZE = 0x1e
+
 type Termios struct {
        Iflag  uint32
        Oflag  uint32
index 31a97b3..22bdab9 100644 (file)
@@ -226,6 +226,14 @@ type RawSockaddrALG struct {
        Name   [64]uint8
 }
 
+type RawSockaddrVM struct {
+       Family    uint16
+       Reserved1 uint16
+       Port      uint32
+       Cid       uint32
+       Zero      [4]uint8
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
@@ -352,6 +360,7 @@ const (
        SizeofSockaddrHCI       = 0x6
        SizeofSockaddrCAN       = 0x10
        SizeofSockaddrALG       = 0x58
+       SizeofSockaddrVM        = 0x10
        SizeofLinger            = 0x8
        SizeofIPMreq            = 0x8
        SizeofIPMreqn           = 0xc
index 592d73e..99b11fe 100644 (file)
@@ -93,7 +93,8 @@ func NewCallbackCDecl(fn interface{}) uintptr
 //sys  WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error)
 //sys  SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff]
 //sys  CloseHandle(handle Handle) (err error)
-//sys  GetStdHandle(stdhandle int) (handle Handle, err error) [failretval==InvalidHandle]
+//sys  GetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle]
+//sys  SetStdHandle(stdhandle uint32, handle Handle) (err error)
 //sys  findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstFileW
 //sys  findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW
 //sys  FindClose(handle Handle) (err error)
@@ -109,6 +110,7 @@ func NewCallbackCDecl(fn interface{}) uintptr
 //sys  GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW
 //sys  SetEndOfFile(handle Handle) (err error)
 //sys  GetSystemTimeAsFileTime(time *Filetime)
+//sys  GetSystemTimePreciseAsFileTime(time *Filetime)
 //sys  GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff]
 //sys  CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, threadcnt uint32) (handle Handle, err error)
 //sys  GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (err error)
@@ -311,8 +313,8 @@ var (
        Stderr = getStdHandle(STD_ERROR_HANDLE)
 )
 
-func getStdHandle(h int) (fd Handle) {
-       r, _ := GetStdHandle(h)
+func getStdHandle(stdhandle uint32) (fd Handle) {
+       r, _ := GetStdHandle(stdhandle)
        CloseOnExec(r)
        return r
 }
index f10ebbf..f7bc8d6 100644 (file)
@@ -78,6 +78,7 @@ var (
        procSetFilePointer                     = modkernel32.NewProc("SetFilePointer")
        procCloseHandle                        = modkernel32.NewProc("CloseHandle")
        procGetStdHandle                       = modkernel32.NewProc("GetStdHandle")
+       procSetStdHandle                       = modkernel32.NewProc("SetStdHandle")
        procFindFirstFileW                     = modkernel32.NewProc("FindFirstFileW")
        procFindNextFileW                      = modkernel32.NewProc("FindNextFileW")
        procFindClose                          = modkernel32.NewProc("FindClose")
@@ -93,6 +94,7 @@ var (
        procGetComputerNameExW                 = modkernel32.NewProc("GetComputerNameExW")
        procSetEndOfFile                       = modkernel32.NewProc("SetEndOfFile")
        procGetSystemTimeAsFileTime            = modkernel32.NewProc("GetSystemTimeAsFileTime")
+       procGetSystemTimePreciseAsFileTime     = modkernel32.NewProc("GetSystemTimePreciseAsFileTime")
        procGetTimeZoneInformation             = modkernel32.NewProc("GetTimeZoneInformation")
        procCreateIoCompletionPort             = modkernel32.NewProc("CreateIoCompletionPort")
        procGetQueuedCompletionStatus          = modkernel32.NewProc("GetQueuedCompletionStatus")
@@ -619,7 +621,7 @@ func CloseHandle(handle Handle) (err error) {
        return
 }
 
-func GetStdHandle(stdhandle int) (handle Handle, err error) {
+func GetStdHandle(stdhandle uint32) (handle Handle, err error) {
        r0, _, e1 := syscall.Syscall(procGetStdHandle.Addr(), 1, uintptr(stdhandle), 0, 0)
        handle = Handle(r0)
        if handle == InvalidHandle {
@@ -632,6 +634,18 @@ func GetStdHandle(stdhandle int) (handle Handle, err error) {
        return
 }
 
+func SetStdHandle(stdhandle uint32, handle Handle) (err error) {
+       r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0)
+       if r1 == 0 {
+               if e1 != 0 {
+                       err = errnoErr(e1)
+               } else {
+                       err = syscall.EINVAL
+               }
+       }
+       return
+}
+
 func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) {
        r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0)
        handle = Handle(r0)
@@ -807,6 +821,11 @@ func GetSystemTimeAsFileTime(time *Filetime) {
        return
 }
 
+func GetSystemTimePreciseAsFileTime(time *Filetime) {
+       syscall.Syscall(procGetSystemTimePreciseAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0)
+       return
+}
+
 func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) {
        r0, _, e1 := syscall.Syscall(procGetTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(tzi)), 0, 0)
        rc = uint32(r0)
index 1fe19d1..a907ff2 100644 (file)
@@ -122,9 +122,9 @@ const (
        DUPLICATE_CLOSE_SOURCE = 0x00000001
        DUPLICATE_SAME_ACCESS  = 0x00000002
 
-       STD_INPUT_HANDLE  = -10
-       STD_OUTPUT_HANDLE = -11
-       STD_ERROR_HANDLE  = -12
+       STD_INPUT_HANDLE  = -10 & (1<<32 - 1)
+       STD_OUTPUT_HANDLE = -11 & (1<<32 - 1)
+       STD_ERROR_HANDLE  = -12 & (1<<32 - 1)
 
        FILE_BEGIN   = 0
        FILE_CURRENT = 1
index 8dada3e..866d74a 100644 (file)
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
+Copyright 2011-2016 Canonical Ltd.
 
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
 
-   1. Definitions.
+    http://www.apache.org/licenses/LICENSE-2.0
 
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
index 7a512d6..1884de6 100644 (file)
@@ -48,8 +48,6 @@ The yaml package is licensed under the Apache License 2.0. Please see the LICENS
 Example
 -------
 
-Some more examples can be found in the "examples" folder.
-
 ```Go
 package main
 
index db1f5f2..052ecfc 100644 (file)
@@ -190,7 +190,6 @@ type decoder struct {
        aliases map[string]bool
        mapType reflect.Type
        terrors []string
-       strict  bool
 }
 
 var (
@@ -200,8 +199,8 @@ var (
        ifaceType      = defaultMapType.Elem()
 )
 
-func newDecoder(strict bool) *decoder {
-       d := &decoder{mapType: defaultMapType, strict: strict}
+func newDecoder() *decoder {
+       d := &decoder{mapType: defaultMapType}
        d.aliases = make(map[string]bool)
        return d
 }
@@ -640,8 +639,6 @@ func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {
                        value := reflect.New(elemType).Elem()
                        d.unmarshal(n.children[i+1], value)
                        inlineMap.SetMapIndex(name, value)
-               } else if d.strict {
-                       d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in struct %s", n.line+1, name.String(), out.Type()))
                }
        }
        return true
index 713b1ee..a6fea0f 100644 (file)
@@ -405,12 +405,6 @@ var unmarshalTests = []struct {
                map[string]interface{}{"v": 1},
        },
 
-       // Non-specific tag (Issue #75)
-       {
-               "v: ! test",
-               map[string]interface{}{"v": "test"},
-       },
-
        // Anchors and aliases.
        {
                "a: &x 1\nb: &y 2\nc: *x\nd: *y\n",
@@ -610,8 +604,7 @@ type inlineC struct {
 }
 
 func (s *S) TestUnmarshal(c *C) {
-       for i, item := range unmarshalTests {
-               c.Logf("test %d: %q", i, item.data)
+       for _, item := range unmarshalTests {
                t := reflect.ValueOf(item.value).Type()
                var value interface{}
                switch t.Kind() {
@@ -655,7 +648,6 @@ var unmarshalErrorTests = []struct {
        {"a: !!binary ==", "yaml: !!binary value contains invalid base64 data"},
        {"{[.]}", `yaml: invalid map key: \[\]interface \{\}\{"\."\}`},
        {"{{.}}", `yaml: invalid map key: map\[interface\ \{\}\]interface \{\}\{".":interface \{\}\(nil\)\}`},
-       {"%TAG !%79! tag:yaml.org,2002:\n---\nv: !%79!int '1'", "yaml: did not find expected whitespace"},
 }
 
 func (s *S) TestUnmarshalErrors(c *C) {
@@ -976,17 +968,6 @@ func (s *S) TestUnmarshalSliceOnPreset(c *C) {
        c.Assert(v.A, DeepEquals, []int{2})
 }
 
-func (s *S) TestUnmarshalStrict(c *C) {
-       v := struct{ A, B int }{}
-
-       err := yaml.UnmarshalStrict([]byte("a: 1\nb: 2"), &v)
-       c.Check(err, IsNil)
-       err = yaml.Unmarshal([]byte("a: 1\nb: 2\nc: 3"), &v)
-       c.Check(err, IsNil)
-       err = yaml.UnmarshalStrict([]byte("a: 1\nb: 2\nc: 3"), &v)
-       c.Check(err, ErrorMatches, "yaml: unmarshal errors:\n  line 1: field c not found in struct struct { A int; B int }")
-}
-
 //var data []byte
 //func init() {
 //     var err error
index 41de8b8..6ecdcb3 100644 (file)
@@ -994,7 +994,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
                break_space    = false
                space_break    = false
 
-               preceded_by_whitespace = false
+               preceeded_by_whitespace = false
                followed_by_whitespace  = false
                previous_space          = false
                previous_break          = false
@@ -1016,7 +1016,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
                flow_indicators = true
        }
 
-       preceded_by_whitespace = true
+       preceeded_by_whitespace = true
        for i, w := 0, 0; i < len(value); i += w {
                w = width(value[i])
                followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w)
@@ -1047,7 +1047,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
                                        block_indicators = true
                                }
                        case '#':
-                               if preceded_by_whitespace {
+                               if preceeded_by_whitespace {
                                        flow_indicators = true
                                        block_indicators = true
                                }
@@ -1088,7 +1088,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
                }
 
                // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition.
-               preceded_by_whitespace = is_blankz(value, i)
+               preceeded_by_whitespace = is_blankz(value, i)
        }
 
        emitter.scalar_data.multiline = line_breaks
diff --git a/vendor/gopkg.in/yaml.v2/example_embedded_test.go b/vendor/gopkg.in/yaml.v2/example_embedded_test.go
deleted file mode 100644 (file)
index c8b241d..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package yaml_test
-
-import (
-       "fmt"
-       "log"
-
-        "gopkg.in/yaml.v2"
-)
-
-// An example showing how to unmarshal embedded
-// structs from YAML.
-
-type StructA struct {
-       A string `yaml:"a"`
-}
-
-type StructB struct {
-       // Embedded structs are not treated as embedded in YAML by default. To do that,
-       // add the ",inline" annotation below
-       StructA   `yaml:",inline"`
-       B string `yaml:"b"`
-}
-
-var data = `
-a: a string from struct A
-b: a string from struct B
-`
-
-func ExampleUnmarshal_embedded() {
-       var b StructB
-
-       err := yaml.Unmarshal([]byte(data), &b)
-       if err != nil {
-               log.Fatal("cannot unmarshal data: %v", err)
-       }
-        fmt.Println(b.A)
-        fmt.Println(b.B)
-        // Output:
-        // a string from struct A
-        // a string from struct B
-}
index 0744844..2c9d511 100644 (file)
@@ -611,7 +611,7 @@ func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, co
        if directive {
                context = "while parsing a %TAG directive"
        }
-       return yaml_parser_set_scanner_error(parser, context, context_mark, problem)
+       return yaml_parser_set_scanner_error(parser, context, context_mark, "did not find URI escaped octet")
 }
 
 func trace(args ...interface{}) func() {
@@ -1944,7 +1944,7 @@ func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_ma
        } else {
                // It's either the '!' tag or not really a tag handle.  If it's a %TAG
                // directive, it's an error.  If it's a tag token, it must be a part of URI.
-               if directive && string(s) != "!" {
+               if directive && !(s[0] == '!' && s[1] == 0) {
                        yaml_parser_set_scanner_tag_error(parser, directive,
                                start_mark, "did not find expected '!'")
                        return false
@@ -1959,7 +1959,6 @@ func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_ma
 func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool {
        //size_t length = head ? strlen((char *)head) : 0
        var s []byte
-       hasTag := len(head) > 0
 
        // Copy the head if needed.
        //
@@ -2001,10 +2000,10 @@ func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte
                if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
                        return false
                }
-               hasTag = true
        }
 
-       if !hasTag {
+       // Check if the tag is non-empty.
+       if len(s) == 0 {
                yaml_parser_set_scanner_tag_error(parser, directive,
                        start_mark, "did not find expected tag URI")
                return false
index bf18884..36d6b88 100644 (file)
@@ -77,19 +77,8 @@ type Marshaler interface {
 // supported tag options.
 //
 func Unmarshal(in []byte, out interface{}) (err error) {
-       return unmarshal(in, out, false)
-}
-
-// UnmarshalStrict is like Unmarshal except that any fields that are found
-// in the data that do not have corresponding struct members will result in
-// an error.
-func UnmarshalStrict(in []byte, out interface{}) (err error) {
-       return unmarshal(in, out, true)
-}
-
-func unmarshal(in []byte, out interface{}, strict bool) (err error) {
        defer handleErr(&err)
-       d := newDecoder(strict)
+       d := newDecoder()
        p := newParser(in)
        defer p.destroy()
        node := p.parse()
index 3caeca0..d60a6b6 100644 (file)
@@ -508,7 +508,7 @@ type yaml_parser_t struct {
 
        problem string // Error description.
 
-       // The byte about which the problem occurred.
+       // The byte about which the problem occured.
        problem_offset int
        problem_value  int
        problem_mark   yaml_mark_t