summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Golden <xdg@xdg.me>2019-03-26 11:33:15 -0400
committerDavid Golden <xdg@xdg.me>2019-03-26 16:36:08 -0400
commit79be33d4f24e8a38a42546b4f4e61885a8a3ce6d (patch)
tree08841fc337486a8f0f4ab6872c3f4cea42d6f5f7
parentd803265a34cc40a374f2409381a1ecc75dfa0a02 (diff)
downloadmongo-79be33d4f24e8a38a42546b4f4e61885a8a3ce6d.tar.gz
Import tools: 5db0b4a18cc1366ebd368eed8e7c4d426d851f13 from branch v4.0
ref: ecd6b33eda..5db0b4a18c for: 4.0.8 TOOLS-1163 mongodump/restore mongoexport/import and slashes in collection names TOOLS-2211 Migrate from Evergreen v2 toolchain to v3 toolchain TOOLS-2229 Mongofiles deletes chunks of existing file when failing to put_id with existing _id TOOLS-2233 mongo-tools fails to build with go-1.12
-rw-r--r--jstests/tool/dumpfilename1.js5
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/Godeps2
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/prelude.go10
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/util/file.go9
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/import.data2
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/mongodump_test.go6
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/prepare.go14
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongoexport/mongoexport.go2
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongofiles/mongofiles.go24
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/filepath.go64
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/mongorestore.go6
-rwxr-xr-xsrc/mongo/gotools/src/github.com/mongodb/mongo-tools/set_goenv.sh8
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.gitignore1
-rwxr-xr-xsrc/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.gofmt.sh7
-rwxr-xr-xsrc/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.golint.sh28
-rwxr-xr-xsrc/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.govet.sh10
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.yml9
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/AUTHORS7
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/CHANGELOG1
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/CONTRIBUTING.md174
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/README.md (renamed from src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/README.mkd)2
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/afpacket.go268
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/header.go66
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/options.go35
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go58
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/base.go56
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/benchmark_test.go6
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go21
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/decode.go23
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/defrag/lcmdefrag/lcmdefrag.go144
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/defrag/lcmdefrag/lcmdefrag_test.go105
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/doc.go15
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go8
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/afpacket/afpacket.go188
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go8
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/bidirectional/main.go4
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/pcapdump/main.go20
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/pcaplay/main.go163
-rwxr-xr-xsrc/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh103
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/reassemblydump/main.go661
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/synscan/main.go9
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/flows.go24
-rwxr-xr-xsrc/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/gc17
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag.go113
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go167
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layerclass.go3
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/.lint_blacklist39
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/arp.go8
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/base_test.go40
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/bfd.go481
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/bfd_test.go289
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/cdp.go13
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ctp.go1
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/decode_test.go163
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcp_test.go181
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv4.go585
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6.go341
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6_options.go621
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6_test.go93
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dns.go384
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dns_test.go870
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11.go959
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11_test.go71
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot1q.go2
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot1q_test.go62
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/eapol.go251
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/eapol_test.go123
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/endpoints.go32
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/endpoints_test.go37
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/enums.go208
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/enums_generated.go434
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ethernet.go1
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gen2.go104
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gen_linted.sh3
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/geneve.go110
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/geneve_test.go157
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre.go114
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre_test.go289
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gtp.go181
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gtp_test.go158
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/iana_ports.go254
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp4.go303
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6.go131
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6NDflags_test.go129
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6_test.go11
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6hopbyhop_test.go85
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6msg.go578
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6msg_test.go73
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/igmp.go324
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/igmp_test.go171
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4.go79
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4_test.go169
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6.go218
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6_test.go8
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/layertypes.go263
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lcm.go213
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lcm_test.go156
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/linux_sll.go2
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/llc.go160
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lldp.go71
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/loopback.go45
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv1.go182
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv1_test.go140
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv2.go619
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv2_test.go137
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/modbustcp.go150
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mpls_test.go96
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ntp.go416
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ntp_test.go258
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ospf.go680
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ospf_test.go1014
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ports.go68
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ppp.go32
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/radiotap.go205
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sctp.go218
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow.go1124
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow_test.go965
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sip.go536
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sip_test.go158
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/stp.go27
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcp.go145
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcp_test.go60
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip.go6
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip_test.go6
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls.go208
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_alert.go165
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_appdata.go34
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_cipherspec.go64
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_handshake.go28
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_test.go339
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/udp.go13
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/usb.go21
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vrrp.go156
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vrrp_test.go55
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vxlan.go98
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vxlan_test.go108
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layertype.go16
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go37
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go11224
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/packet.go93
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/packet_test.go62
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/parser.go11
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/bpf_test.go70
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/defs_windows_386.go74
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/defs_windows_amd64.go76
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/doc.go14
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/generate_defs.go157
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap.go732
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_test.go192
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_tester.go13
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_unix.go709
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_windows.go810
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcapnggo_test.go60
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/test_ethernet.pcapbin7672 -> 1310 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/capture.go53
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/capture_test.go40
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/doc.go63
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngread.go606
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngread_test.go1931
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngwrite.go397
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngwrite_test.go239
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/pcapng.go187
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read.go130
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read_test.go122
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/README.md1
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test001.pcapngbin0 -> 1596 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test002.pcapngbin0 -> 96 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test003.pcapngbin0 -> 148 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test004.pcapngbin0 -> 736 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test005.pcapngbin0 -> 736 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test006.pcapngbin0 -> 872 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test007.pcapngbin0 -> 368 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test008.pcapngbin0 -> 1424 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test009.pcapngbin0 -> 1156 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test010.pcapngbin0 -> 1512 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test011.pcapngbin0 -> 1544 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test012.pcapngbin0 -> 1488 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test013.pcapngbin0 -> 212 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test014.pcapngbin0 -> 428 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test015.pcapngbin0 -> 260 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test016.pcapngbin0 -> 1860 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test017.pcapngbin0 -> 312 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test018.pcapngbin0 -> 1760 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test100.pcapngbin0 -> 2392 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test101.pcapngbin0 -> 1144 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test102.pcapngbin0 -> 2312 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test200.pcapngbin0 -> 388 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test201.pcapngbin0 -> 1452 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test202.pcapngbin0 -> 2908 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test901.pcapngbin0 -> 1468 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test902.pcapngbin0 -> 480 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test001.pcapngbin0 -> 1596 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test002.pcapngbin0 -> 96 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test003.pcapngbin0 -> 148 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test004.pcapngbin0 -> 736 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test005.pcapngbin0 -> 736 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test006.pcapngbin0 -> 872 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test007.pcapngbin0 -> 368 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test008.pcapngbin0 -> 1424 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test009.pcapngbin0 -> 1156 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test010.pcapngbin0 -> 1512 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test011.pcapngbin0 -> 1544 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test012.pcapngbin0 -> 1488 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test013.pcapngbin0 -> 212 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test014.pcapngbin0 -> 428 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test015.pcapngbin0 -> 260 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test016.pcapngbin0 -> 1860 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test017.pcapngbin0 -> 312 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test018.pcapngbin0 -> 1760 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test100.pcapngbin0 -> 2392 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test101.pcapngbin0 -> 1144 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test102.pcapngbin0 -> 2312 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test200.pcapngbin0 -> 388 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test201.pcapngbin0 -> 1452 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test202.pcapngbin0 -> 2908 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test901.pcapngbin0 -> 1468 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test902.pcapngbin0 -> 480 bytes
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/test901.lua43
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/test902.lua30
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write.go17
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write_test.go20
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/doc.go2
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/pfring.go186
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/pfring_test.go70
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/cap2test.go105
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/memory.go254
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpassembly.go1331
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go1817
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpcheck.go246
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go417
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/routing/routing.go64
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly.go62
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go8
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go5
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/time.go72
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/time_test.go73
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/writer.go40
237 files changed, 40231 insertions, 4805 deletions
diff --git a/jstests/tool/dumpfilename1.js b/jstests/tool/dumpfilename1.js
index 3e826952c4c..ad34a75784b 100644
--- a/jstests/tool/dumpfilename1.js
+++ b/jstests/tool/dumpfilename1.js
@@ -1,6 +1,7 @@
// dumpfilename1.js
-// Test designed to make sure error that dumping a collection with "/" fails
+// Test designed to make sure error that dumping a collection with "/" succeeds.
+// TOOLS-1163 adds support for this by percent encoding filenames.
t = new ToolTest("dumpfilename1");
@@ -8,5 +9,5 @@ t.startDB("foo");
c = t.db;
assert.writeOK(c.getCollection("df/").insert({a: 3}));
-assert(t.runTool("dump", "--out", t.ext) != 0, "dump should fail with non-zero return code");
+assert(t.runTool("dump", "--out", t.ext) == 0, "dump should fail with non-zero return code");
t.stop();
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/Godeps b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/Godeps
index 476edad0318..b0d89303819 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/Godeps
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/Godeps
@@ -13,7 +13,7 @@ github.com/nsf/termbox-go 0723e7c3d0a317dea811f0fbe4d6edd81908c971
github.com/mattn/go-runewidth d6bea18f789704b5f83375793155289da36a3c7f
golang.org/x/crypto 1f22c0103821b9390939b6776727195525381532 github.com/golang/crypto
github.com/10gen/llmgo afcced55e92d9b6b93ccf32508238c08cfbaddb8
-github.com/google/gopacket 1b0b78901cdd351ecfc68bf1a2adafcd2ff30220
+github.com/google/gopacket 7edef24d642a09d18efcf1e00a9dc2d4c6342c82
github.com/patrickmn/go-cache 1881a9bccb818787f68c52bfba648c6cf34c34fa
github.com/10gen/escaper 17fe61c658dcbdcbf246c783f4f7dc97efde3a8b
github.com/golang/snappy d9eb7a3d35ec988b8585d4a0068e462c27d28380
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/prelude.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/prelude.go
index 29ea968dba8..2d50bc66dce 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/prelude.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/prelude.go
@@ -17,6 +17,7 @@ import (
"github.com/mongodb/mongo-tools/common/intents"
"github.com/mongodb/mongo-tools/common/log"
"github.com/mongodb/mongo-tools/common/options"
+ "github.com/mongodb/mongo-tools/common/util"
"gopkg.in/mgo.v2/bson"
)
@@ -196,6 +197,11 @@ func (hpc *preludeParserConsumer) BodyBSON(data []byte) error {
if err != nil {
return err
}
+ cm.Collection, err = util.UnescapeCollectionName(cm.Collection)
+ if err != nil {
+ return err
+ }
+
hpc.prelude.AddMetadata(cm)
return nil
}
@@ -228,9 +234,9 @@ func (pe *PreludeExplorer) Name() string {
return pe.database
}
if pe.isMetadata {
- return pe.collection + ".metadata.json"
+ return util.EscapeCollectionName(pe.collection) + ".metadata.json"
}
- return pe.collection + ".bson"
+ return util.EscapeCollectionName(pe.collection) + ".bson"
}
// Path is part of the DirLike interface. It creates the full path for the "location" in the prelude.
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/util/file.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/util/file.go
index 29d4b09b693..05c10f85c85 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/util/file.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/util/file.go
@@ -9,6 +9,7 @@ package util
import (
"bufio"
"io"
+ "net/url"
"os"
"path/filepath"
)
@@ -40,6 +41,14 @@ func ToUniversalPath(path string) string {
return filepath.FromSlash(path)
}
+func EscapeCollectionName(collName string) string {
+ return url.PathEscape(collName)
+}
+
+func UnescapeCollectionName(escapedCollName string) (string, error) {
+ return url.PathUnescape(escapedCollName)
+}
+
type WrappedReadCloser struct {
io.ReadCloser
Inner io.ReadCloser
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/import.data b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/import.data
index 2d7b15cd98a..ae0244c3c08 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/import.data
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/import.data
@@ -1,5 +1,5 @@
{
- "commit": "ecd6b33eda1ac4a59210cc41e1dc6b1b1bbd39b1",
+ "commit": "5db0b4a18cc1366ebd368eed8e7c4d426d851f13",
"github": "mongodb/mongo-tools.git",
"vendor": "tools",
"branch": "v4.0"
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/mongodump_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/mongodump_test.go
index f077f59e8da..40214c0474d 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/mongodump_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/mongodump_test.go
@@ -189,7 +189,11 @@ func readBSONIntoDatabase(dir, restoreDBName string) error {
continue
}
- collectionName := fileName[:strings.LastIndex(fileName, ".bson")]
+ collectionName, err := util.UnescapeCollectionName(fileName[:strings.LastIndex(fileName, ".bson")])
+ if err != nil {
+ return err
+ }
+
collection := session.DB(restoreDBName).C(collectionName)
file, err := os.Open(fmt.Sprintf("%s/%s", dir, fileName))
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/prepare.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/prepare.go
index 8f9b12e9bbf..cee7ec20377 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/prepare.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongodump/prepare.go
@@ -18,6 +18,7 @@ import (
"github.com/mongodb/mongo-tools/common/db"
"github.com/mongodb/mongo-tools/common/intents"
"github.com/mongodb/mongo-tools/common/log"
+ "github.com/mongodb/mongo-tools/common/util"
)
type NilPos struct{}
@@ -191,10 +192,8 @@ func (dump *MongoDump) outputPath(dbName, colName string) string {
} else {
root = dump.OutputOptions.Out
}
- if dbName == "" {
- return filepath.Join(root, colName)
- }
- return filepath.Join(root, dbName, colName)
+
+ return filepath.Join(root, dbName, util.EscapeCollectionName(colName))
}
func checkStringForPathSeparator(s string, c *rune) bool {
@@ -311,10 +310,11 @@ func (dump *MongoDump) NewIntentFromOptions(dbName string, ci *db.CollectionInfo
// otherwise, if it's either not a view or we're treating views as collections
// then create a standard filesystem path for this collection.
var c rune
- if checkStringForPathSeparator(ci.Name, &c) || checkStringForPathSeparator(dbName, &c) {
- return nil, fmt.Errorf(`"%v.%v" contains a path separator '%c' `+
- `and can't be dumped to the filesystem`, dbName, ci.Name, c)
+ if checkStringForPathSeparator(dbName, &c) {
+ return nil, fmt.Errorf(`database "%v" contains a path separator '%c' `+
+ `and can't be dumped to the filesystem`, dbName, c)
}
+
path := nameGz(dump.OutputOptions.Gzip, dump.outputPath(dbName, ci.Name)+".bson")
intent.BSONFile = &realBSONFile{path: path, intent: intent}
} else {
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongoexport/mongoexport.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongoexport/mongoexport.go
index 34fba65d101..6cca0805beb 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongoexport/mongoexport.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongoexport/mongoexport.go
@@ -356,7 +356,7 @@ func (exp *MongoExport) exportInternal(out io.Writer) (int64, error) {
return docsCount, err
}
docsCount++
- if docsCount%watchProgressorUpdateFrequency == 0 {
+ if docsCount % watchProgressorUpdateFrequency == 0 {
watchProgressor.Set(docsCount)
}
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongofiles/mongofiles.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongofiles/mongofiles.go
index f7353a5c853..9ed353a08b2 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongofiles/mongofiles.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongofiles/mongofiles.go
@@ -280,6 +280,24 @@ func (mf *MongoFiles) handlePut(gfs *mgo.GridFS, hasID bool) (err error) {
log.Logvf(log.DebugLow, "creating GridFS file '%v' from local file '%v'", mf.FileName, localFileName)
}
+ var id interface{}
+ if hasID {
+ id, err = mf.parseID()
+ if err != nil {
+ return err
+ }
+
+ query := gfs.Find(bson.M{"_id": id})
+
+ n, err := query.Count()
+ if err != nil {
+ return fmt.Errorf("error while checking if file with _id already exists: %v", err)
+ }
+ if n != 0 {
+ return fmt.Errorf("file with _id %v already exists", id)
+ }
+ }
+
gridFile, err := gfs.Create(mf.FileName)
if err != nil {
return fmt.Errorf("error while creating '%v' in GridFS: %v\n", mf.FileName, err)
@@ -294,11 +312,7 @@ func (mf *MongoFiles) handlePut(gfs *mgo.GridFS, hasID bool) (err error) {
}
}()
- if hasID {
- id, err := mf.parseID()
- if err != nil {
- return err
- }
+ if id != nil {
gridFile.SetId(id)
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/filepath.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/filepath.go
index 1db7186b3d8..778db139b2a 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/filepath.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/filepath.go
@@ -206,34 +206,40 @@ func (f *stdinFile) Close() error {
}
// getInfoFromFilename pulls the base collection name and FileType from a given file.
-func (restore *MongoRestore) getInfoFromFilename(filename string) (string, FileType) {
+func (restore *MongoRestore) getInfoFromFilename(filename string) (string, FileType, error) {
baseFileName := filepath.Base(filename)
+
+ baseName := ""
+ fileType := UnknownFileType
+
// .bin supported for legacy reasons
if strings.HasSuffix(baseFileName, ".bin") {
- baseName := strings.TrimSuffix(baseFileName, ".bin")
- return baseName, BSONFileType
- }
- // Gzip indicates that files in a dump directory should have a .gz suffix
- // but it does not indicate that the "files" provided by the archive should,
- // compressed or otherwise.
- if restore.InputOptions.Gzip && restore.InputOptions.Archive == "" {
+ baseName = strings.TrimSuffix(baseFileName, ".bin")
+ fileType = BSONFileType
+ } else if restore.InputOptions.Gzip && restore.InputOptions.Archive == "" {
+ // Gzip indicates that files in a dump directory should have a .gz suffix
+ // but it does not indicate that the "files" provided by the archive should,
+ // compressed or otherwise.
if strings.HasSuffix(baseFileName, ".metadata.json.gz") {
- baseName := strings.TrimSuffix(baseFileName, ".metadata.json.gz")
- return baseName, MetadataFileType
+ baseName = strings.TrimSuffix(baseFileName, ".metadata.json.gz")
+ fileType = MetadataFileType
} else if strings.HasSuffix(baseFileName, ".bson.gz") {
- baseName := strings.TrimSuffix(baseFileName, ".bson.gz")
- return baseName, BSONFileType
+ baseName = strings.TrimSuffix(baseFileName, ".bson.gz")
+ fileType = BSONFileType
}
- return "", UnknownFileType
- }
- if strings.HasSuffix(baseFileName, ".metadata.json") {
- baseName := strings.TrimSuffix(baseFileName, ".metadata.json")
- return baseName, MetadataFileType
+ } else if strings.HasSuffix(baseFileName, ".metadata.json") {
+ baseName = strings.TrimSuffix(baseFileName, ".metadata.json")
+ fileType = MetadataFileType
} else if strings.HasSuffix(baseFileName, ".bson") {
- baseName := strings.TrimSuffix(baseFileName, ".bson")
- return baseName, BSONFileType
+ baseName = strings.TrimSuffix(baseFileName, ".bson")
+ fileType = BSONFileType
}
- return "", UnknownFileType
+
+ unescaped, err := util.UnescapeCollectionName(baseName)
+ if err != nil {
+ return "", UnknownFileType, fmt.Errorf("error parsing collection name from filename \"%v\": %v", baseName, err)
+ }
+ return unescaped, fileType, nil
}
// CreateAllIntents drills down into a dump folder, creating intents for all of
@@ -342,7 +348,11 @@ func (restore *MongoRestore) CreateIntentsForDB(db string, dir archive.DirLike)
log.Logvf(log.Always, `don't know what to do with subdirectory "%v", skipping...`,
filepath.Join(dir.Name(), entry.Name()))
} else {
- collection, fileType := restore.getInfoFromFilename(entry.Name())
+ collection, fileType, err := restore.getInfoFromFilename(entry.Name())
+ if err != nil {
+ return err
+ }
+
sourceNS := db + "." + collection
switch fileType {
case BSONFileType:
@@ -496,7 +506,11 @@ func (restore *MongoRestore) CreateIntentForCollection(db string, collection str
return fmt.Errorf("file %v is a directory, not a bson file", dir.Path())
}
- baseName, fileType := restore.getInfoFromFilename(dir.Name())
+ baseName, fileType, err := restore.getInfoFromFilename(dir.Name())
+ if err != nil {
+ return err
+ }
+
if fileType != BSONFileType {
return fmt.Errorf("file %v does not have .bson extension", dir.Path())
}
@@ -564,7 +578,11 @@ func (restore *MongoRestore) handleBSONInsteadOfDirectory(path string) error {
// like a bson file and infer as much as we can
if restore.NSOptions.Collection == "" {
// if the user did not set -c, use the file name for the collection
- newCollectionName, fileType := restore.getInfoFromFilename(path)
+ newCollectionName, fileType, err := restore.getInfoFromFilename(path)
+ if err != nil {
+ return err
+ }
+
if fileType != BSONFileType {
return fmt.Errorf("file %v does not have .bson extension", path)
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/mongorestore.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/mongorestore.go
index bab85e31277..f2e82494ffa 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/mongorestore.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/mongorestore/mongorestore.go
@@ -155,7 +155,11 @@ func (restore *MongoRestore) ParseAndValidateOptions() error {
// deprecations with --nsInclude --nsExclude
if restore.NSOptions.DB != "" || restore.NSOptions.Collection != "" {
// these are only okay if restoring from a bson file
- _, fileType := restore.getInfoFromFilename(restore.TargetDirectory)
+ _, fileType, err := restore.getInfoFromFilename(restore.TargetDirectory)
+ if err != nil {
+ return err
+ }
+
if fileType != BSONFileType {
log.Logvf(log.Always, "the --db and --collection args should only be used when "+
"restoring from a BSON file. Other uses are deprecated and will not exist "+
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/set_goenv.sh b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/set_goenv.sh
index 4e3b5b6641f..c2c8ed99183 100755
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/set_goenv.sh
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/set_goenv.sh
@@ -17,7 +17,7 @@ set_goenv() {
*)
PREF_GOROOT="/opt/golang/go1.11"
# XXX might not need mongodbtoolchain anymore
- PREF_PATH="$PREF_GOROOT/bin:/opt/mongodbtoolchain/v2/bin/:$PATH"
+ PREF_PATH="$PREF_GOROOT/bin:/opt/mongodbtoolchain/v3/bin/:$PATH"
;;
esac
@@ -40,13 +40,13 @@ set_goenv() {
UNAME_M=$(PATH="/usr/bin:/bin" uname -m)
case $UNAME_M in
aarch64)
- export CC=/opt/mongodbtoolchain/v2/bin/aarch64-mongodb-linux-gcc
+ export CC=/opt/mongodbtoolchain/v3/bin/aarch64-mongodb-linux-gcc
;;
ppc64le)
- export CC=/opt/mongodbtoolchain/v2/bin/ppc64le-mongodb-linux-gcc
+ export CC=/opt/mongodbtoolchain/v3/bin/ppc64le-mongodb-linux-gcc
;;
s390x)
- export CC=/opt/mongodbtoolchain/v2/bin/s390x-mongodb-linux-gcc
+ export CC=/opt/mongodbtoolchain/v3/bin/s390x-mongodb-linux-gcc
;;
*)
# Not needed for other architectures
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.gitignore b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.gitignore
index 7386e2bb493..149266fdb65 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.gitignore
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.gitignore
@@ -32,6 +32,7 @@ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.gofmt.sh b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.gofmt.sh
new file mode 100755
index 00000000000..e341a1cb78f
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.gofmt.sh
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.golint.sh b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.golint.sh
new file mode 100755
index 00000000000..0e267f5216a
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.golint.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+cd "$(dirname $0)"
+
+go get golang.org/x/lint/golint
+DIRS=". tcpassembly tcpassembly/tcpreader ip4defrag reassembly macs pcapgo pcap afpacket pfring routing defrag/lcmdefrag"
+# 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 *.go; do
+ if cat .lint_blacklist | grep -q $file; then
+ echo "Skipping lint of $file due to .lint_blacklist"
+ elif golint $file | grep .; then
+ echo "Lint error in file $file"
+ exit 1
+ fi
+done
+popd
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.govet.sh b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.govet.sh
new file mode 100755
index 00000000000..a5c13544ca2
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.govet.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+cd "$(dirname $0)"
+DIRS=". layers pcap pcapgo tcpassembly tcpassembly/tcpreader routing ip4defrag bytediff macs defrag/lcmdefrag"
+set -e
+for subdir in $DIRS; do
+ pushd $subdir
+ go vet
+ popd
+done
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.yml b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.yml
index a2feecbf9d5..ceb1c7e60ee 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.yml
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/.travis.yml
@@ -1,9 +1,18 @@
language: go
+before_install:
+ - sudo apt-get install libpcap-dev
install:
- go get github.com/google/gopacket
- go get github.com/google/gopacket/layers
+ - go get github.com/google/gopacket/pcapgo
- 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/pcapgo
- 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/AUTHORS b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/AUTHORS
index 9b3f6bf203f..339d6f6c98e 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/AUTHORS
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/AUTHORS
@@ -13,6 +13,9 @@ Hiroaki Kawai <Hiroaki.Kawai@gmail.com>
Lukas Lueg <lukas.lueg@gmail.com>
Laurent Hausermann <laurent.hausermann@gmail.com>
Bill Green <bgreen@newrelic.com>
+Christian Mäder <christian.maeder@nine.ch>
+Gernot Vormayr <gvormayr@gmail.com>
+Vitor Garcia Graveto <victor.graveto@gmail.com>
CONTRIBUTORS:
Attila Oláh <attila@attilaolah.eu>
@@ -24,6 +27,10 @@ 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>
+Jose Selvi <jselvi@pentester.es>
+Yerden Zhumabekov <yerden.zhumabekov@gmail.com>
-----------------------------------------------
FORKED FROM github.com/akrennmair/gopcap
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/CHANGELOG b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/CHANGELOG
deleted file mode 100644
index 6d771b85da9..00000000000
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/CHANGELOG
+++ /dev/null
@@ -1 +0,0 @@
-See https://code.google.com/p/gopacket/wiki/ChangeLog
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/CONTRIBUTING.md b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/CONTRIBUTING.md
index d3cc6a0e3b2..99ab7a2e4fb 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/CONTRIBUTING.md
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/CONTRIBUTING.md
@@ -26,37 +26,22 @@ so the code can make it into the master branch as quickly as possible.
How To Submit Code
------------------
-gopacket uses the code.google.com Git version control system. If you want to
-make a new change, you'll first have to get our code:
-
- go get code.google.com/p/gopacket
- cd $GOROOT/src/pkg/code.google.com/p/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
- ... code code code ...
- ./gc --benchmark # Run this whenever your commit could affect performance
-
-Nw that you're in the gopacket code directory, you can start making your initial
-change. PLEASE make sure you're using a new branch to develop whatever feature
-you're working on.
-
-Once you've got your code to a place where you're ready to have us look at it,
-send an email to gopacket@googlegroups.com, detailing your change. We'll add
-you as a committer, and you can upload your feature branch to code.google.com.
-From there, the other folks working on gopacket can give you code reviews with
-the code.google.com code review functionality.
-
-The code review will generally be either emails or line-by-line reviews via
-code.google.com. One or more folks might review your code. The review should
-be considered "complete" when at least one of the project Owners (see
-https://code.google.com/p/gopacket/people/list) gives you permission to merge to
-master. At that point, you can merge to master yourself, or you can have one of
-the other committers/owners do it for you.
-
-When doing the final merge, please try to capture any interesting comments or
-discussions that came up in code review. This will help future contributors be
-able to find and reference those discussions later on.
+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:
@@ -64,28 +49,19 @@ To sum up:
+ 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.
- + Send an email asking us to make you a committer (if you're new).
- + Push your new feature branch up to code.google.com.
+ + 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.
- + Get approval from a project Owner to merge to master.
- + Merge yourself, or have another Committer/Owner do it for you.
+ Put interesting comments and discussions into commit comments.
* DON'T
- + Push directly to master.
+ Push to someone else's branch without their permission.
- + Merge your own code to master without sign-off from others on the project.
- + Rebase (please merge)
-* OPTIONAL
- + Review others' code as it comes in (politely :)
- + Keep contributing!
Coding Style
------------
-* Go code must be run through 'go fmt'.
+* 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.
@@ -111,26 +87,28 @@ 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:
- 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.
- }
+```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.
@@ -176,45 +154,49 @@ features. In general, this means:
majority of workloads. A prime example of this is pre-allocating certain
structs within a larger one:
- 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
- }
+```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.
- 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
- }
+```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
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/README.mkd b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/README.md
index f71854c4502..fe76f7a2291 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/README.mkd
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/README.md
@@ -6,5 +6,7 @@ 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)
+Minimum Go version required is 1.5.
+
Originally forked from the gopcap project written by Andreas
Krennmair <ak@synflood.at> (http://github.com/akrennmair/gopcap).
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/afpacket.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/afpacket.go
index 0bc30882f3e..a426fee3ed1 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/afpacket.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/afpacket.go
@@ -16,12 +16,18 @@ package afpacket
import (
"errors"
"fmt"
- "github.com/google/gopacket"
"net"
"runtime"
"sync"
+ "sync/atomic"
+ "syscall"
"time"
"unsafe"
+
+ "golang.org/x/net/bpf"
+ "golang.org/x/sys/unix"
+
+ "github.com/google/gopacket"
)
/*
@@ -35,13 +41,26 @@ import (
*/
import "C"
-var pageSize = int(C.getpagesize())
+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))
}
+// AncillaryVLAN structures are used to pass the captured VLAN
+// as ancillary data via CaptureInfo.
+type AncillaryVLAN struct {
+ // The VLAN VID provided by the kernel.
+ VLAN int
+}
+
// 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.
@@ -52,11 +71,47 @@ type Stats struct {
Polls int64
}
+// SocketStats is a struct where socket stats are stored
+type SocketStats C.struct_tpacket_stats
+
+// Packets returns the number of packets seen by this socket.
+func (s *SocketStats) Packets() uint {
+ return uint(s.tp_packets)
+}
+
+// Drops returns the number of packets dropped on this socket.
+func (s *SocketStats) Drops() uint {
+ return uint(s.tp_drops)
+}
+
+// SocketStatsV3 is a struct where socket stats for TPacketV3 are stored
+type SocketStatsV3 C.struct_tpacket_stats_v3
+
+// Packets returns the number of packets seen by this socket.
+func (s *SocketStatsV3) Packets() uint {
+ return uint(s.tp_packets)
+}
+
+// Drops returns the number of packets dropped on this socket.
+func (s *SocketStatsV3) Drops() uint {
+ return uint(s.tp_drops)
+}
+
+// QueueFreezes returns the number of queue freezes on this socket.
+func (s *SocketStatsV3) QueueFreezes() uint {
+ return uint(s.tp_freeze_q_cnt)
+}
+
+// TPacket implements packet receiving for Linux AF_PACKET versions 1, 2, and 3.
type TPacket struct {
+ // stats is simple statistics on TPacket's run. This MUST be the first entry to ensure alignment for sync.atomic
+ stats Stats
// fd is the C file descriptor.
- fd C.int
+ fd int
// ring points to the memory space of the ring buffer shared by tpacket and the kernel.
- ring unsafe.Pointer
+ 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
@@ -64,41 +119,47 @@ type TPacket struct {
offset int
// current is the current header.
current header
- // pollset is used by TPacket for its poll() call.
- pollset C.struct_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
- // stats is simple statistics on TPacket's run.
- stats Stats
+ // 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
+ // 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 {
- iface, err := net.InterfaceByName(ifaceName)
- if err != nil {
- return fmt.Errorf("InterfaceByName: %v", err)
+ 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
}
- var ll C.struct_sockaddr_ll
- ll.sll_family = C.AF_PACKET
- ll.sll_protocol = C.__be16(C.htons(C.ETH_P_ALL))
- ll.sll_ifindex = C.int(iface.Index)
- if _, err := C.bind(h.fd, (*C.struct_sockaddr)(unsafe.Pointer(&ll)), C.socklen_t(unsafe.Sizeof(ll))); err != nil {
- return fmt.Errorf("bindToInterface: %v", err)
+ s := &unix.SockaddrLinklayer{
+ Protocol: htons(uint16(unix.ETH_P_ALL)),
+ Ifindex: ifIndex,
}
- return nil
+ 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 {
- val := C.int(version)
- _, err := C.setsockopt(h.fd, C.SOL_PACKET, C.PACKET_VERSION, unsafe.Pointer(&val), C.socklen_t(unsafe.Sizeof(val)))
- if err != nil {
+ 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
@@ -121,7 +182,7 @@ func (h *TPacket) setRequestedTPacketVersion() error {
// setUpRing sets up the shared-memory ring buffer between the user process and the kernel.
func (h *TPacket) setUpRing() (err error) {
- totalSize := C.uint(h.opts.framesPerBlock * h.opts.numBlocks * h.opts.frameSize)
+ totalSize := int(h.opts.framesPerBlock * h.opts.numBlocks * h.opts.frameSize)
switch h.tpVersion {
case TPacketVersion1, TPacketVersion2:
var tp C.struct_tpacket_req
@@ -129,7 +190,7 @@ func (h *TPacket) setUpRing() (err error) {
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 := C.setsockopt(h.fd, C.SOL_PACKET, C.PACKET_RX_RING, unsafe.Pointer(&tp), C.socklen_t(unsafe.Sizeof(tp))); err != nil {
+ 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:
@@ -139,18 +200,20 @@ func (h *TPacket) setUpRing() (err error) {
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 := C.setsockopt(h.fd, C.SOL_PACKET, C.PACKET_RX_RING, unsafe.Pointer(&tp), C.socklen_t(unsafe.Sizeof(tp))); err != nil {
+ 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")
}
- if h.ring, err = C.mmap(nil, C.size_t(totalSize), C.PROT_READ|C.PROT_WRITE, C.MAP_SHARED, C.int(h.fd), 0); err != nil {
- return
+ 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
}
@@ -160,10 +223,10 @@ func (h *TPacket) Close() {
return // already closed.
}
if h.ring != nil {
- C.munmap(h.ring, C.size_t(h.opts.blockSize*h.opts.numBlocks))
+ unix.Munmap(h.ring)
}
h.ring = nil
- C.close(h.fd)
+ unix.Close(h.fd)
h.fd = -1
runtime.SetFinalizer(h, nil)
}
@@ -178,15 +241,13 @@ func NewTPacket(opts ...interface{}) (h *TPacket, err error) {
if h.opts, err = parseOptions(opts...); err != nil {
return nil, err
}
- fd, err := C.socket(C.AF_PACKET, C.int(h.opts.socktype), C.int(C.htons(C.ETH_P_ALL)))
+ 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 h.opts.iface != "" {
- if err = h.bindToInterface(h.opts.iface); err != nil {
- goto errlbl
- }
+ if err = h.bindToInterface(h.opts.iface); err != nil {
+ goto errlbl
}
if err = h.setRequestedTPacketVersion(); err != nil {
goto errlbl
@@ -194,6 +255,10 @@ func NewTPacket(opts ...interface{}) (h *TPacket, err error) {
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:
@@ -201,6 +266,18 @@ errlbl:
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++
@@ -213,7 +290,7 @@ func (h *TPacket) releaseCurrentPacket() error {
// 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 ReadPacketDataData, which copies
+// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies
// the bytes into a new buffer for you.
// tp, _ := NewTPacket(...)
// data1, _, _ := tp.ZeroCopyReadPacketData()
@@ -221,30 +298,104 @@ func (h *TPacket) releaseCurrentPacket() error {
// data2, _, _ := tp.ZeroCopyReadPacketData() // invalidates bytes in data1
func (h *TPacket) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
h.mu.Lock()
- if h.current == nil || !h.current.next() {
+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()
+ data = h.current.getData(&h.opts)
ci.Timestamp = h.current.getTime()
ci.CaptureLength = len(data)
ci.Length = h.current.getLength()
- h.stats.Packets++
+ ci.InterfaceIndex = h.current.getIfaceIndex()
+ vlan := h.current.getVLAN()
+ if vlan >= 0 {
+ ci.AncillaryData = append(ci.AncillaryData, AncillaryVLAN{vlan})
+ }
+ 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) {
- h.mu.Lock()
- defer h.mu.Unlock()
- return h.stats, nil
+ 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.
@@ -282,20 +433,20 @@ func (h *TPacket) getTPacketHeader() header {
if h.offset >= h.opts.framesPerBlock*h.opts.numBlocks {
h.offset = 0
}
- position := uintptr(h.ring) + uintptr(h.opts.frameSize*h.offset)
+ 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.ring) + uintptr(h.opts.frameSize*h.offset)
+ 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.ring) + uintptr(h.opts.frameSize*h.offset*h.opts.framesPerBlock)
+ position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset*h.opts.framesPerBlock)
h.v3 = initV3Wrapper(unsafe.Pointer(position))
return &h.v3
}
@@ -303,16 +454,31 @@ func (h *TPacket) getTPacketHeader() header {
}
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 = h.fd
- h.pollset.events = C.POLLIN
- h.pollset.revents = 0
- _, err := C.poll(&h.pollset, 1, -1)
- h.stats.Polls++
+ pollset := [1]unix.PollFd{
+ {
+ Fd: int32(h.fd),
+ Events: unix.POLLIN,
+ },
+ }
+ n, err := unix.Poll(pollset[:], tm)
+ if n == 0 {
+ return ErrTimeout
+ }
+
+ atomic.AddInt64(&h.stats.Polls, 1)
+ if pollset[0].Revents&unix.POLLERR > 0 {
+ return ErrPoll
+ }
+ if err == syscall.EINTR {
+ continue
+ }
if err != nil {
return err
}
}
+
h.shouldReleasePacket = true
return nil
}
@@ -320,6 +486,7 @@ func (h *TPacket) pollForFirstPacket(hdr header) error {
// 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:
@@ -340,12 +507,11 @@ func (h *TPacket) SetFanout(t FanoutType, id uint16) error {
defer h.mu.Unlock()
arg := C.int(t) << 16
arg |= C.int(id)
- _, err := C.setsockopt(h.fd, C.SOL_PACKET, C.PACKET_FANOUT, unsafe.Pointer(&arg), C.socklen_t(unsafe.Sizeof(arg)))
- return err
+ 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 := C.write(h.fd, unsafe.Pointer(&pkt[0]), C.size_t(len(pkt)))
+ _, err := unix.Write(h.fd, pkt)
return err
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/header.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/header.go
index c650836d1c2..fa223a77ad1 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/header.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/header.go
@@ -15,6 +15,8 @@ import (
)
// #include <linux/if_packet.h>
+// #include <linux/if_ether.h>
+// #define VLAN_HLEN 4
import "C"
// Our model of handling all TPacket versions is a little hacky, to say the
@@ -35,9 +37,14 @@ type header interface {
// the header.
getTime() time.Time
// getData returns the packet data pointed to by the current header.
- getData() []byte
+ getData(opts *options) []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
+ // getVLAN returns the VLAN of a packet if it was provided out-of-band
+ getVLAN() 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
@@ -45,6 +52,10 @@ type header interface {
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
@@ -56,6 +67,19 @@ func makeSlice(start uintptr, length int) (data []byte) {
return
}
+func insertVlanHeader(data []byte, vlanTCI int, opts *options) []byte {
+ if vlanTCI == 0 || !opts.addVLANHeader {
+ return data
+ }
+ eth := make([]byte, 0, len(data)+C.VLAN_HLEN)
+ eth = append(eth, data[0:C.ETH_ALEN*2]...)
+ eth = append(eth, []byte{0x81, 0, byte((vlanTCI >> 8) & 0xff), byte(vlanTCI & 0xff)}...)
+ return append(eth, data[C.ETH_ALEN*2:]...)
+}
+
+func (h *v1header) getVLAN() int {
+ return -1
+}
func (h *v1header) getStatus() int {
return int(h.tp_status)
}
@@ -65,15 +89,23 @@ func (h *v1header) clearStatus() {
func (h *v1header) getTime() time.Time {
return time.Unix(int64(h.tp_sec), int64(h.tp_usec)*1000)
}
-func (h *v1header) getData() []byte {
+func (h *v1header) getData(opts *options) []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) getVLAN() int {
+ return -1
+}
func (h *v2header) getStatus() int {
return int(h.tp_status)
}
@@ -83,12 +115,17 @@ func (h *v2header) clearStatus() {
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) getData(opts *options) []byte {
+ data := makeSlice(uintptr(unsafe.Pointer(h))+uintptr(h.tp_mac), int(h.tp_snaplen))
+ return insertVlanHeader(data, int(h.tp_vlan_tci), opts)
}
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
}
@@ -106,6 +143,15 @@ func initV3Wrapper(block unsafe.Pointer) (w v3wrapper) {
w.packet = (*C.struct_tpacket3_hdr)(unsafe.Pointer(uintptr(block) + uintptr(w.blockhdr.offset_to_first_pkt)))
return
}
+
+func (w *v3wrapper) getVLAN() int {
+ if w.packet.tp_status&C.TP_STATUS_VLAN_VALID != 0 {
+ hv1 := (*C.struct_tpacket_hdr_variant1)(unsafe.Pointer(&w.packet.anon0[0]))
+ return int(hv1.tp_vlan_tci & 0xfff)
+ }
+ return -1
+}
+
func (w *v3wrapper) getStatus() int {
return int(w.blockhdr.block_status)
}
@@ -115,17 +161,25 @@ func (w *v3wrapper) clearStatus() {
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) getData(opts *options) []byte {
+ data := makeSlice(uintptr(unsafe.Pointer(w.packet))+uintptr(w.packet.tp_mac), int(w.packet.tp_snaplen))
+
+ hv1 := (*C.struct_tpacket_hdr_variant1)(unsafe.Pointer(&w.packet.anon0[0]))
+ return insertVlanHeader(data, int(hv1.tp_vlan_tci), opts)
}
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)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/options.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/options.go
index bab99502f21..be70b835428 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/options.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/options.go
@@ -9,6 +9,7 @@
package afpacket
import (
+ "errors"
"fmt"
"time"
)
@@ -36,7 +37,7 @@ func (t OptTPacketVersion) String() string {
return "InvalidVersion"
}
-// OptSockType is the socket type used to open the TPacket socket.
+// OptSocketType is the socket type used to open the TPacket socket.
type OptSocketType int
func (t OptSocketType) String() string {
@@ -49,6 +50,7 @@ func (t OptSocketType) String() string {
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.
@@ -86,11 +88,33 @@ type OptNumBlocks int
// 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
+
+// OptAddVLANHeader modifies the packet data that comes back from the
+// kernel by adding in the VLAN header that the NIC stripped. AF_PACKET by
+// default uses VLAN offloading, in which the NIC strips the VLAN header off of
+// the packet before handing it to the kernel. This means that, even if a
+// packet has an 802.1q header on the wire, it'll show up without one by the
+// time it goes through AF_PACKET. If this option is true, the VLAN header is
+// added back in before the packet is returned. Note that this potentially has
+// a large performance hit, especially in otherwise zero-copy operation.
+//
+// Note that if you do not need to have a "real" VLAN layer, it may be
+// preferable to use the VLAN ID provided by the AncillaryVLAN struct
+// in CaptureInfo.AncillaryData, which is populated out-of-band and has
+// negligible performance impact. Such ancillary data will automatically
+// be provided if available.
+type OptAddVLANHeader bool
+
+// 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 {
@@ -98,7 +122,9 @@ type options struct {
framesPerBlock int
blockSize int
numBlocks int
+ addVLANHeader bool
blockTimeout time.Duration
+ pollTimeout time.Duration
version OptTPacketVersion
socktype OptSocketType
iface string
@@ -109,6 +135,7 @@ var defaultOpts = options{
blockSize: DefaultBlockSize,
numBlocks: DefaultNumBlocks,
blockTimeout: DefaultBlockTimeout,
+ pollTimeout: DefaultPollTimeout,
version: TPacketVersionHighestAvailable,
socktype: SocketRaw,
}
@@ -125,14 +152,18 @@ func parseOptions(opts ...interface{}) (ret options, err error) {
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
+ case OptAddVLANHeader:
+ ret.addVLANHeader = bool(v)
default:
- err = fmt.Errorf("unknown type in options")
+ err = errors.New("unknown type in options")
return
}
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
new file mode 100644
index 00000000000..c53e1cceb48
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/base.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/base.go
index 462ca9720e0..797b55fbefe 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/base.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/base.go
@@ -33,14 +33,30 @@ type Layer interface {
type Payload []byte
// LayerType returns LayerTypePayload
-func (p Payload) LayerType() LayerType { return LayerTypePayload }
-func (p Payload) LayerContents() []byte { return []byte(p) }
-func (p Payload) LayerPayload() []byte { return nil }
-func (p Payload) Payload() []byte { return []byte(p) }
-func (p Payload) String() string { return fmt.Sprintf("%d byte(s)", len(p)) }
-func (p Payload) GoString() string { return LongBytesGoString([]byte(p)) }
-func (p Payload) CanDecode() LayerClass { return 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
@@ -74,13 +90,27 @@ func decodePayload(data []byte, p PacketBuilder) error {
type Fragment []byte
// LayerType returns LayerTypeFragment
-func (p *Fragment) LayerType() LayerType { return LayerTypeFragment }
-func (p *Fragment) LayerContents() []byte { return []byte(*p) }
-func (p *Fragment) LayerPayload() []byte { return nil }
-func (p *Fragment) Payload() []byte { return []byte(*p) }
-func (p *Fragment) String() string { return fmt.Sprintf("%d byte(s)", len(*p)) }
-func (p *Fragment) CanDecode() LayerClass { return 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
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/benchmark_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/benchmark_test.go
index 74a1d28dfe4..4bc20373c07 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/benchmark_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/benchmark_test.go
@@ -129,7 +129,7 @@ func BenchmarkUnbufferedChannel(b *testing.B) {
defer close(ca)
go func() {
defer close(cb)
- for _ = range ca {
+ for range ca {
cb <- true
}
}()
@@ -144,7 +144,7 @@ func BenchmarkSmallBufferedChannel(b *testing.B) {
defer close(ca)
go func() {
defer close(cb)
- for _ = range ca {
+ for range ca {
cb <- true
}
}()
@@ -159,7 +159,7 @@ func BenchmarkLargeBufferedChannel(b *testing.B) {
defer close(ca)
go func() {
defer close(cb)
- for _ = range ca {
+ for range ca {
cb <- true
}
}()
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go
index 01e82d76a1e..3e1da0b9107 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go
@@ -9,13 +9,14 @@
package bsdbpf
import (
- "github.com/google/gopacket"
- "golang.org/x/sys/unix"
-
+ "errors"
"fmt"
"syscall"
"time"
"unsafe"
+
+ "github.com/google/gopacket"
+ "golang.org/x/sys/unix"
)
const wordSize = int(unsafe.Sizeof(uintptr(0)))
@@ -164,13 +165,15 @@ func (b *BPFSniffer) Close() error {
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 {
- break
+ return
}
}
+ panic("failed to acquire a BPF device for read-write access")
}
func (b *BPFSniffer) ReadPacketData() ([]byte, gopacket.CaptureInfo, error) {
@@ -187,6 +190,16 @@ func (b *BPFSniffer) ReadPacketData() ([]byte, gopacket.CaptureInfo, error) {
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),
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/decode.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/decode.go
index dc390d6fc8b..2633f848ede 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/decode.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/decode.go
@@ -63,6 +63,8 @@ type PacketBuilder interface {
// 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
@@ -79,6 +81,7 @@ type Decoder interface {
// 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)
@@ -99,18 +102,18 @@ 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 LayerType = RegisterLayerType(0, LayerTypeMetadata{"Unknown", DecodeUnknown})
+var LayerTypeZero = RegisterLayerType(0, LayerTypeMetadata{Name: "Unknown", Decoder: DecodeUnknown})
// LayerTypeDecodeFailure is the layer type for the default error layer.
-var LayerTypeDecodeFailure LayerType = RegisterLayerType(1, LayerTypeMetadata{"DecodeFailure", DecodeUnknown})
+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 LayerType = RegisterLayerType(2, LayerTypeMetadata{"Payload", DecodePayload})
+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 LayerType = RegisterLayerType(3, LayerTypeMetadata{"Fragment", DecodeFragment})
+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
@@ -123,12 +126,20 @@ type DecodeFailure struct {
}
// Error returns the error encountered during decoding.
-func (d *DecodeFailure) Error() error { return d.err }
+func (d *DecodeFailure) Error() error { return d.err }
+
+// LayerContents implements Layer.
func (d *DecodeFailure) LayerContents() []byte { return d.data }
-func (d *DecodeFailure) LayerPayload() []byte { return nil }
+
+// 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)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/defrag/lcmdefrag/lcmdefrag.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/defrag/lcmdefrag/lcmdefrag.go
new file mode 100644
index 00000000000..a4cf8770103
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/defrag/lcmdefrag/lcmdefrag.go
@@ -0,0 +1,144 @@
+// Copyright 2018 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 lcmdefrag contains a defragmenter for LCM messages.
+package lcmdefrag
+
+import (
+ "fmt"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+const (
+ // Packages are cleaned up/removed after no input was received for this
+ // amount of seconds.
+ timeout time.Duration = 3 * time.Second
+)
+
+type lcmPacket struct {
+ lastPacket time.Time
+ done bool
+ recFrags uint16
+ totalFrags uint16
+ frags map[uint16]*layers.LCM
+}
+
+// LCMDefragmenter supports defragmentation of LCM messages.
+//
+// References
+// https://lcm-proj.github.io/
+// https://github.com/lcm-proj/lcm
+type LCMDefragmenter struct {
+ packets map[uint32]*lcmPacket
+}
+
+func newLCMPacket(totalFrags uint16) *lcmPacket {
+ return &lcmPacket{
+ done: false,
+ recFrags: 0,
+ totalFrags: totalFrags,
+ frags: make(map[uint16]*layers.LCM),
+ }
+}
+
+// NewLCMDefragmenter returns a new LCMDefragmenter.
+func NewLCMDefragmenter() *LCMDefragmenter {
+ return &LCMDefragmenter{
+ packets: make(map[uint32]*lcmPacket),
+ }
+}
+
+func (lp *lcmPacket) append(in *layers.LCM) {
+ lp.frags[in.FragmentNumber] = in
+ lp.recFrags++
+ lp.lastPacket = time.Now()
+}
+
+func (lp *lcmPacket) assemble() (out *layers.LCM, err error) {
+ var blob []byte
+
+ //Extract packets
+ for i := uint16(0); i < lp.totalFrags; i++ {
+ fragment, ok := lp.frags[i]
+ if !ok {
+ err = fmt.Errorf("Tried to defragment incomplete packet. Waiting "+
+ "for more potential (unordered) packets... %d", i)
+ return
+ }
+
+ // For the very first packet, we also want the header.
+ if i == 0 {
+ blob = append(blob, fragment.LayerContents()...)
+ }
+
+ // Append the data for each packet.
+ blob = append(blob, fragment.Payload()...)
+ }
+
+ packet := gopacket.NewPacket(blob, layers.LayerTypeLCM, gopacket.NoCopy)
+ lcmHdrLayer := packet.Layer(layers.LayerTypeLCM)
+ out, ok := lcmHdrLayer.(*layers.LCM)
+ if !ok {
+ err = fmt.Errorf("Error while decoding the defragmented packet. " +
+ "Erasing/dropping packet.")
+ }
+
+ lp.done = true
+
+ return
+}
+
+func (ld *LCMDefragmenter) cleanUp() {
+ for key, packet := range ld.packets {
+ if packet.done || time.Now().Sub(packet.lastPacket) > timeout {
+ delete(ld.packets, key)
+ }
+ }
+}
+
+// Defrag takes a reference to an LCM packet and processes it.
+// In case the packet does not need to be defragmented, it immediately returns
+// the as in passed reference. In case in was the last missing fragment, out
+// will be the defragmented packet. If in was a fragment, but we are awaiting
+// more, out will be set to nil.
+// In the case that in was nil, we will just run the internal cleanup of the
+// defragmenter that times out packages.
+// If an error was encountered during defragmentation, out will also be nil,
+// while err will contain further information on the failure.
+func (ld *LCMDefragmenter) Defrag(in *layers.LCM) (out *layers.LCM, err error) {
+ // Timeout old packages and erase error prone ones.
+ ld.cleanUp()
+
+ // For running cleanup only
+ if in == nil {
+ return
+ }
+
+ // Quick check if this is acutally a single packet. In that case, just
+ // return it quickly.
+ if !in.Fragmented {
+ out = in
+ return
+ }
+
+ // Do we need to start a new fragments obj?
+ if _, ok := ld.packets[in.SequenceNumber]; !ok {
+ ld.packets[in.SequenceNumber] = newLCMPacket(in.TotalFragments)
+ }
+
+ // Append the packet
+ ld.packets[in.SequenceNumber].append(in)
+
+ // Check if this is the last package of that series
+ if ld.packets[in.SequenceNumber].recFrags == in.TotalFragments {
+ out, err = ld.packets[in.SequenceNumber].assemble()
+ }
+
+ return
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/defrag/lcmdefrag/lcmdefrag_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/defrag/lcmdefrag/lcmdefrag_test.go
new file mode 100644
index 00000000000..3d54191b4f5
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/defrag/lcmdefrag/lcmdefrag_test.go
@@ -0,0 +1,105 @@
+// Copyright 2018 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 lcmdefrag
+
+import (
+ "testing"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+var (
+ fragmentOne = []byte{
+ 0x4c, 0x43, 0x30, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d,
+ 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x02, 0x4c, 0x43, 0x4d, 0x5f,
+ 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,
+ 0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,
+ }
+
+ fragmentTwo = []byte{
+ 0x4c, 0x43, 0x30, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d,
+ 0x00, 0x00, 0x00, 0x2d, 0x00, 0x01, 0x00, 0x02, 0x6c, 0x63, 0x6d, 0x20,
+ 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,
+ }
+
+ completePacket = []byte{
+ 0x4c, 0x43, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x43, 0x4d, 0x5f,
+ 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,
+ 0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,
+ }
+)
+
+func TestOrderedLCMDefrag(t *testing.T) {
+ defragmenter := NewLCMDefragmenter()
+ var err error
+
+ packet := gopacket.NewPacket(fragmentOne, layers.LayerTypeLCM, gopacket.NoCopy)
+ lcm := packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
+
+ lcm, err = defragmenter.Defrag(lcm)
+ if lcm != nil {
+ t.Fatal("Returned incomplete LCM message.")
+ }
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ packet = gopacket.NewPacket(fragmentTwo, layers.LayerTypeLCM, gopacket.NoCopy)
+ lcm = packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
+
+ lcm, err = defragmenter.Defrag(lcm)
+ if lcm == nil {
+ t.Fatal("Did not receive defragmented LCM message.")
+ }
+ if err != nil {
+ t.Fatal(err)
+ }
+}
+
+func TestUnorderedLCMDefrag(t *testing.T) {
+ defragmenter := NewLCMDefragmenter()
+ var err error
+
+ packet := gopacket.NewPacket(fragmentTwo, layers.LayerTypeLCM, gopacket.NoCopy)
+ lcm := packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
+
+ lcm, err = defragmenter.Defrag(lcm)
+ if lcm != nil {
+ t.Fatal("Returned incomplete LCM message.")
+ }
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ packet = gopacket.NewPacket(fragmentOne, layers.LayerTypeLCM, gopacket.NoCopy)
+ lcm = packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
+
+ lcm, err = defragmenter.Defrag(lcm)
+ if lcm == nil {
+ t.Fatal("Did not receive defragmented LCM message.")
+ }
+ if err != nil {
+ t.Fatal(err)
+ }
+}
+
+func TestNonLCMDefrag(t *testing.T) {
+ defragmenter := NewLCMDefragmenter()
+ var err error
+
+ packet := gopacket.NewPacket(completePacket, layers.LayerTypeLCM, gopacket.NoCopy)
+ lcm := packet.Layer(layers.LayerTypeLCM).(*layers.LCM)
+
+ lcm, err = defragmenter.Defrag(lcm)
+ if lcm == nil {
+ t.Fatal("Did not receive complete LCM message.")
+ }
+ if err != nil {
+ t.Fatal(err)
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/doc.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/doc.go
index 257d9daa34d..ac57e59a3a4 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/doc.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/doc.go
@@ -22,6 +22,8 @@ useful, including:
Also, if you're looking to dive right into code, see the examples subdirectory
for numerous simple binaries built using gopacket libraries.
+Minimum go version required is 1.5.
+
Basic Usage
gopacket takes in packet data as a []byte and decodes it into a packet with
@@ -212,7 +214,7 @@ based on endpoint criteria:
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 symetric: A->B will have the same
+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
@@ -238,14 +240,14 @@ 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, "MyLayerType", gopacket.DecodeFunc(decodeMyLayer))
+ 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() LayerType { return MyLayerType }
+ func (m MyLayer) LayerType() gopacket.LayerType { return MyLayerType }
func (m MyLayer) LayerContents() []byte { return m.StrangeHeader }
func (m MyLayer) LayerPayload() []byte { return m.payload }
@@ -288,7 +290,10 @@ the packet's information. A quick example:
parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &ip6, &tcp)
decoded := []gopacket.LayerType{}
for packetData := range somehowGetPacketData() {
- err := parser.DecodeLayers(packetDat, &decoded)
+ if err := parser.DecodeLayers(packetData, &decoded); err != nil {
+ fmt.Fprintf(os.Stderr, "Could not decode layers: %v\n", err)
+ continue
+ }
for _, layerType := range decoded {
switch layerType {
case layers.LayerTypeIPv6:
@@ -329,7 +334,7 @@ the following manner:
}
buf := gopacket.NewSerializeBuffer()
opts := gopacket.SerializeOptions{} // See SerializeOptions for more details.
- err := ip.SerializeTo(&buf, opts)
+ err := ip.SerializeTo(buf, opts)
if err != nil { panic(err) }
fmt.Println(buf.Bytes()) // prints out a byte slice containing the serialized IPv4 layer.
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go
index 65c74e1be13..2d35722066f 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go
@@ -12,12 +12,13 @@ package dumpcommand
import (
"flag"
"fmt"
- "github.com/google/gopacket"
- "github.com/google/gopacket/ip4defrag"
- "github.com/google/gopacket/layers" // pulls in all layers decoders
"log"
"os"
"time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/ip4defrag"
+ "github.com/google/gopacket/layers" // pulls in all layers decoders
)
var (
@@ -43,6 +44,7 @@ func Run(src gopacket.PacketDataSource) {
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)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/afpacket/afpacket.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/afpacket/afpacket.go
new file mode 100644
index 00000000000..cec49de55a0
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/afpacket/afpacket.go
@@ -0,0 +1,188 @@
+// Copyright 2018 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.
+
+// afpacket provides a simple example of using afpacket with zero-copy to read
+// packet data.
+package main
+
+import (
+ "flag"
+ "fmt"
+ "log"
+ "os"
+ "runtime/pprof"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/afpacket"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcap"
+ "golang.org/x/net/bpf"
+
+ _ "github.com/google/gopacket/layers"
+)
+
+var (
+ iface = flag.String("i", "any", "Interface to read from")
+ cpuprofile = flag.String("cpuprofile", "", "If non-empty, write CPU profile here")
+ snaplen = flag.Int("s", 0, "Snaplen, if <= 0, use 65535")
+ bufferSize = flag.Int("b", 8, "Interface buffersize (MB)")
+ filter = flag.String("f", "port not 22", "BPF filter")
+ count = flag.Int64("c", -1, "If >= 0, # of packets to capture before returning")
+ verbose = flag.Int64("log_every", 1, "Write a log every X packets")
+ addVLAN = flag.Bool("add_vlan", false, "If true, add VLAN header")
+)
+
+type afpacketHandle struct {
+ TPacket *afpacket.TPacket
+}
+
+func newAfpacketHandle(device string, snaplen int, block_size int, num_blocks int,
+ useVLAN bool, timeout time.Duration) (*afpacketHandle, error) {
+
+ h := &afpacketHandle{}
+ var err error
+
+ if device == "any" {
+ h.TPacket, err = afpacket.NewTPacket(
+ afpacket.OptFrameSize(snaplen),
+ afpacket.OptBlockSize(block_size),
+ afpacket.OptNumBlocks(num_blocks),
+ afpacket.OptAddVLANHeader(useVLAN),
+ afpacket.OptPollTimeout(timeout),
+ afpacket.SocketRaw,
+ afpacket.TPacketVersion3)
+ } else {
+ h.TPacket, err = afpacket.NewTPacket(
+ afpacket.OptInterface(device),
+ afpacket.OptFrameSize(snaplen),
+ afpacket.OptBlockSize(block_size),
+ afpacket.OptNumBlocks(num_blocks),
+ afpacket.OptAddVLANHeader(useVLAN),
+ afpacket.OptPollTimeout(timeout),
+ afpacket.SocketRaw,
+ afpacket.TPacketVersion3)
+ }
+ return h, err
+}
+
+// ZeroCopyReadPacketData satisfies ZeroCopyPacketDataSource interface
+func (h *afpacketHandle) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ return h.TPacket.ZeroCopyReadPacketData()
+}
+
+// SetBPFFilter translates a BPF filter string into BPF RawInstruction and applies them.
+func (h *afpacketHandle) SetBPFFilter(filter string, snaplen int) (err error) {
+ pcapBPF, err := pcap.CompileBPFFilter(layers.LinkTypeEthernet, snaplen, filter)
+ if err != nil {
+ return err
+ }
+ bpfIns := []bpf.RawInstruction{}
+ for _, ins := range pcapBPF {
+ bpfIns2 := bpf.RawInstruction{
+ Op: ins.Code,
+ Jt: ins.Jt,
+ Jf: ins.Jf,
+ K: ins.K,
+ }
+ bpfIns = append(bpfIns, bpfIns2)
+ }
+ if h.TPacket.SetBPF(bpfIns); err != nil {
+ return err
+ }
+ return h.TPacket.SetBPF(bpfIns)
+}
+
+// LinkType returns ethernet link type.
+func (h *afpacketHandle) LinkType() layers.LinkType {
+ return layers.LinkTypeEthernet
+}
+
+// Close will close afpacket source.
+func (h *afpacketHandle) Close() {
+ h.TPacket.Close()
+}
+
+// SocketStats prints received, dropped, queue-freeze packet stats.
+func (h *afpacketHandle) SocketStats() (as afpacket.SocketStats, asv afpacket.SocketStatsV3, err error) {
+ return h.TPacket.SocketStats()
+}
+
+// afpacketComputeSize computes the block_size and the num_blocks in such a way that the
+// allocated mmap buffer is close to but smaller than target_size_mb.
+// The restriction is that the block_size must be divisible by both the
+// frame size and page size.
+func afpacketComputeSize(targetSizeMb int, snaplen int, pageSize int) (
+ frameSize int, blockSize int, numBlocks int, err error) {
+
+ if snaplen < pageSize {
+ frameSize = pageSize / (pageSize / snaplen)
+ } else {
+ frameSize = (snaplen/pageSize + 1) * pageSize
+ }
+
+ // 128 is the default from the gopacket library so just use that
+ blockSize = frameSize * 128
+ numBlocks = (targetSizeMb * 1024 * 1024) / blockSize
+
+ if numBlocks == 0 {
+ return 0, 0, 0, fmt.Errorf("Interface buffersize is too small")
+ }
+
+ return frameSize, blockSize, numBlocks, nil
+}
+
+func main() {
+ flag.Parse()
+ if *cpuprofile != "" {
+ log.Printf("Writing CPU profile to %q", *cpuprofile)
+ f, err := os.Create(*cpuprofile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ if err := pprof.StartCPUProfile(f); err != nil {
+ log.Fatal(err)
+ }
+ defer pprof.StopCPUProfile()
+ }
+ log.Printf("Starting on interface %q", *iface)
+ if *snaplen <= 0 {
+ *snaplen = 65535
+ }
+ szFrame, szBlock, numBlocks, err := afpacketComputeSize(*bufferSize, *snaplen, os.Getpagesize())
+ if err != nil {
+ log.Fatal(err)
+ }
+ afpacketHandle, err := newAfpacketHandle(*iface, szFrame, szBlock, numBlocks, *addVLAN, pcap.BlockForever)
+ if err != nil {
+ log.Fatal(err)
+ }
+ err = afpacketHandle.SetBPFFilter(*filter, *snaplen)
+ if err != nil {
+ log.Fatal(err)
+ }
+ source := gopacket.ZeroCopyPacketDataSource(afpacketHandle)
+ defer afpacketHandle.Close()
+
+ bytes := uint64(0)
+ packets := uint64(0)
+ for ; *count != 0; *count-- {
+ data, _, err := source.ZeroCopyReadPacketData()
+ if err != nil {
+ log.Fatal(err)
+ }
+ bytes += uint64(len(data))
+ packets++
+ if *count%*verbose == 0 {
+ _, afpacketStats, err := afpacketHandle.SocketStats()
+ if err != nil {
+ log.Println(err)
+ }
+ log.Printf("Read in %d bytes in %d packets", bytes, packets)
+ log.Printf("Stats {received dropped queue-freeze}: %d", afpacketStats)
+ }
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go
index 01965299522..1a0e33e5d7f 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go
@@ -14,7 +14,7 @@ package main
import (
"bytes"
"encoding/binary"
- "fmt"
+ "errors"
"log"
"net"
"sync"
@@ -73,11 +73,11 @@ func scan(iface *net.Interface) error {
}
// Sanity-check that the interface has a good address.
if addr == nil {
- return fmt.Errorf("no good IP network found")
+ return errors.New("no good IP network found")
} else if addr.IP[0] == 127 {
- return fmt.Errorf("skipping localhost")
+ return errors.New("skipping localhost")
} else if addr.Mask[0] != 0xff || addr.Mask[1] != 0xff {
- return fmt.Errorf("mask means network is too large")
+ return errors.New("mask means network is too large")
}
log.Printf("Using network range %v for interface %v", addr, iface.Name)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/bidirectional/main.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/bidirectional/main.go
index 4b0b240db0b..1d533e69ed6 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/bidirectional/main.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/bidirectional/main.go
@@ -163,6 +163,10 @@ func main() {
streamFactory := &myFactory{bidiMap: make(map[key]*bidi)}
streamPool := tcpassembly.NewStreamPool(streamFactory)
assembler := tcpassembly.NewAssembler(streamPool)
+ // Limit memory usage by auto-flushing connection state if we get over 100K
+ // packets in memory, or over 1000 for a single stream.
+ assembler.MaxBufferedPagesTotal = 100000
+ assembler.MaxBufferedPagesPerConnection = 1000
log.Println("reading in packets")
// Read in packets, pass to assembler.
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/pcapdump/main.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/pcapdump/main.go
index 94457235b79..373dee29a8a 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/pcapdump/main.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/pcapdump/main.go
@@ -40,15 +40,15 @@ func main() {
// 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)
+ log.Fatalf("could not create: %v", err)
}
defer inactive.CleanUp()
if err = inactive.SetSnapLen(*snaplen); err != nil {
- log.Fatal("could not set snap length: %v", err)
+ log.Fatalf("could not set snap length: %v", err)
} else if err = inactive.SetPromisc(*promisc); err != nil {
- log.Fatal("could not set promisc mode: %v", err)
+ log.Fatalf("could not set promisc mode: %v", err)
} else if err = inactive.SetTimeout(time.Second); err != nil {
- log.Fatal("could not set timeout: %v", err)
+ log.Fatalf("could not set timeout: %v", err)
}
if *tstype != "" {
if t, err := pcap.TimestampSourceFromString(*tstype); err != nil {
@@ -61,12 +61,12 @@ func main() {
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)
- }
+ }
+ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/pcaplay/main.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/pcaplay/main.go
new file mode 100644
index 00000000000..d36d860dd32
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/pcaplay/main.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh
new file mode 100755
index 00000000000..671d29f4845
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/reassemblydump/main.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/reassemblydump/main.go
new file mode 100644
index 00000000000..827901185a9
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/reassemblydump/main.go
@@ -0,0 +1,661 @@
+// 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 errorsMapMutex sync.Mutex
+var errors uint
+
+// Too bad for perf that a... is evaluated
+func Error(t string, s string, a ...interface{}) {
+ errorsMapMutex.Lock()
+ errors++
+ nb, _ := errorsMap[t]
+ errorsMap[t] = nb + 1
+ errorsMapMutex.Unlock()
+ 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.Lock()
+ h.parent.urls = append(h.parent.urls, req.URL.String())
+ h.parent.Unlock()
+ } else {
+ res, err := http.ReadResponse(b, nil)
+ var req string
+ h.parent.Lock()
+ 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:]
+ }
+ h.parent.Unlock()
+ 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
+ sync.Mutex
+}
+
+func (t *tcpStream) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir reassembly.TCPFlowDirection, nextSeq 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, nextSeq, 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 {
+ errorsMapMutex.Lock()
+ errorMapLen := len(errorsMap)
+ errorsMapMutex.Unlock()
+ fmt.Fprintf(os.Stderr, "Processed %v packets (%v bytes) in %v (errors: %v, errTypes:%v)\n", count, bytes, time.Since(start), errors, errorMapLen)
+ }
+ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/synscan/main.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/synscan/main.go
index bfbc631552b..7a2345f833e 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/synscan/main.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/examples/synscan/main.go
@@ -18,9 +18,8 @@
package main
import (
- "bytes"
+ "errors"
"flag"
- "fmt"
"log"
"net"
"time"
@@ -36,7 +35,7 @@ import (
type scanner struct {
// iface is the interface to send packets on.
iface *net.Interface
- // destination, gateway (if applicable), and soruce IP addresses to use.
+ // destination, gateway (if applicable), and source IP addresses to use.
dst, gw, src net.IP
handle *pcap.Handle
@@ -119,7 +118,7 @@ func (s *scanner) getHwAddr() (net.HardwareAddr, error) {
// Wait 3 seconds for an ARP reply.
for {
if time.Since(start) > time.Second*3 {
- return nil, fmt.Errorf("timeout getting ARP reply")
+ return nil, errors.New("timeout getting ARP reply")
}
data, _, err := s.handle.ReadPacketData()
if err == pcap.NextErrorTimeoutExpired {
@@ -130,7 +129,7 @@ func (s *scanner) getHwAddr() (net.HardwareAddr, error) {
packet := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy)
if arpLayer := packet.Layer(layers.LayerTypeARP); arpLayer != nil {
arp := arpLayer.(*layers.ARP)
- if bytes.Equal(arp.SourceProtAddress, arpDst) {
+ if net.IP(arp.SourceProtAddress).Equal(net.IP(arpDst)) {
return net.HardwareAddr(arp.SourceHwAddress), nil
}
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/flows.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/flows.go
index 4622a0d8f1e..7203ead0f69 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/flows.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/flows.go
@@ -36,11 +36,11 @@ type Endpoint struct {
}
// EndpointType returns the endpoint type associated with this endpoint.
-func (e Endpoint) EndpointType() EndpointType { return e.typ }
+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 (e Endpoint) Raw() []byte { return e.raw[:e.len] }
+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
@@ -130,11 +130,11 @@ func (e EndpointType) String() string {
return strconv.Itoa(int(e))
}
-func (e Endpoint) String() string {
- if t, ok := endpointTypes[e.typ]; ok && t.Formatter != nil {
- return t.Formatter(e.raw[:e.len])
+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", e.typ, e.raw)
+ 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.
@@ -164,11 +164,11 @@ func FlowFromEndpoints(src, dst Endpoint) (_ Flow, err error) {
//
// 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 Flow) FastHash() (h uint64) {
+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(a.src[:a.slen]) + fnvHash(a.dst[:a.dlen])
- h ^= uint64(a.typ)
+ h = fnvHash(f.src[:f.slen]) + fnvHash(f.dst[:f.dlen])
+ h ^= uint64(f.typ)
h *= fnvPrime
return
}
@@ -225,12 +225,12 @@ func NewFlow(t EndpointType, src, dst []byte) (f Flow) {
// EndpointInvalid is an endpoint type used for invalid endpoints, IE endpoints
// that are specified incorrectly during creation.
-var EndpointInvalid EndpointType = RegisterEndpointType(0, EndpointTypeMetadata{"invalid", func(b []byte) string {
+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 Endpoint = NewEndpoint(EndpointInvalid, nil)
+var InvalidEndpoint = NewEndpoint(EndpointInvalid, nil)
// InvalidFlow is a singleton Flow of type EndpointInvalid.
-var InvalidFlow Flow = NewFlow(EndpointInvalid, nil, nil)
+var InvalidFlow = NewFlow(EndpointInvalid, nil, nil)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/gc b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/gc
index 6ef9f31fc5b..b1d8d2e1f67 100755
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/gc
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/gc
@@ -106,6 +106,7 @@ if [ ! -z "$GEN" ]; then
popd
pushd layers
go run gen.go | gofmt > iana_ports.go
+ go run gen2.go | gofmt > enums_generated.go
popd
fi
@@ -126,6 +127,9 @@ if [ -f /usr/include/pcap.h ]; then
Root pcap_tester --mode=filtered
Root pcap_tester --mode=timestamp || echo "You might not support timestamp sources"
popd
+ pushd examples/afpacket
+ go build
+ popd
pushd examples/pcapdump
go build
popd
@@ -153,6 +157,9 @@ popd
pushd tcpassembly
go test ./...
popd
+pushd reassembly
+go test ./...
+popd
pushd layers
gofmt -w gen.go
go build gen.go
@@ -179,6 +186,16 @@ if [ -f /usr/include/pfring.h ]; then
go build
popd
fi
+pushd ip4defrag
+go test ./...
+popd
+pushd defrag
+go test ./...
+popd
+
+for travis_script in `ls .travis.*.sh`; do
+ ./$travis_script
+done
# Run our initial commit
git commit "$@"
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag.go
index 6c117957db0..2fdac78cb1b 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag.go
@@ -1,10 +1,15 @@
// 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"
@@ -16,7 +21,7 @@ import (
// Quick and Easy to use debug code to trace
// how defrag works.
-var debug debugging = false // or flip to false
+var debug debugging = false // or flip to true
type debugging bool
func (d debugging) Printf(format string, args ...interface{}) {
@@ -25,11 +30,13 @@ func (d debugging) Printf(format string, args ...interface{}) {
}
}
+// Constants determining how to handle fragments.
+// Reference RFC 791, page 25
const (
- IPv4MinimumFragmentSize = 576
- IPv4MaximumSize = 65535
- IPv4MaximumFragmentOffset = 8189
- IPv4MaximumFragmentListLen = 8
+ IPv4MinimumFragmentSize = 8 // Minimum size of a single fragment
+ IPv4MaximumSize = 65535 // Maximum size of a fragment (2^16)
+ IPv4MaximumFragmentOffset = 8183 // Maximum offset of a fragment
+ IPv4MaximumFragmentListLen = 8192 // Back out if we get more than this many fragments
)
// DefragIPv4 takes in an IPv4 packet with a fragment payload.
@@ -67,50 +74,61 @@ const (
//}
//
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 {
+ if err := d.securityChecks(in); err != nil {
+ debug.Printf("defrag: alert security check")
return nil, err
}
// ok, got a fragment
- debug.Printf("defrag: got in.Id=%d in.FragOffset=%d in.Flags=%d\n",
+ debug.Printf("defrag: got a new fragment in.Id=%d in.FragOffset=%d in.Flags=%d\n",
in.Id, in.FragOffset*8, in.Flags)
- // do we already has seen a flow between src/dst with that Id
+ // 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: creating a new flow\n")
+ 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)
+ 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.Lock()
- fl = new(fragmentList)
- d.ipFlows[ipf] = fl
- d.Unlock()
+ d.flush(ipf)
return nil, fmt.Errorf("defrag: Fragment List hits its maximum"+
- "size(%d), without sucess. Flushing the list",
+ "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
@@ -132,6 +150,13 @@ func (d *IPv4Defragmenter) DiscardOlderThan(t time.Time) int {
return nb
}
+// flush the fragment list for a particular flow
+func (d *IPv4Defragmenter) flush(ipf ipv4) {
+ d.Lock()
+ delete(d.ipFlows, ipf)
+ d.Unlock()
+}
+
// dontDefrag returns true if the IPv4 packet do not need
// any defragmentation
func (d *IPv4Defragmenter) dontDefrag(ip *layers.IPv4) bool {
@@ -147,21 +172,29 @@ func (d *IPv4Defragmenter) dontDefrag(ip *layers.IPv4) bool {
}
// securityChecks performs the needed security checks
-func (d *IPv4Defragmenter) securityChecks(ip *layers.IPv4) (bool, error) {
+func (d *IPv4Defragmenter) securityChecks(ip *layers.IPv4) error {
+ fragSize := ip.Length - uint16(ip.IHL)*4
+
+ // don't allow small fragments outside of specification
+ if fragSize < IPv4MinimumFragmentSize {
+ return fmt.Errorf("defrag: fragment too small "+
+ "(handcrafted? %d < %d)", fragSize, IPv4MinimumFragmentSize)
+ }
+
// don't allow too big fragment offset
if ip.FragOffset > IPv4MaximumFragmentOffset {
- return false, fmt.Errorf("defrag: fragment offset too big "+
+ return 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 fmt.Errorf("defrag: fragment will overrun "+
+ "(handcrafted? %d > %d)", fragOffset+ip.Length, IPv4MaximumSize)
}
- return true, nil
+ return nil
}
// fragmentList holds a container/list used to contains IP
@@ -180,26 +213,42 @@ type fragmentList struct {
// 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) (*layers.IPv4, error) {
+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) ?
+ // 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 {
- debug.Printf("defrag: inserting frag %d before existing frag %d \n",
+ 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
}
}
}
- // packet.Metadata().Timestamp should have been better, but
- // we don't have this info there...
- f.LastSeen = time.Now()
+
+ f.LastSeen = t
fragLength := in.Length - 20
// After inserting the Fragment, we update the counters
@@ -228,7 +277,7 @@ func (f *fragmentList) insert(in *layers.IPv4) (*layers.IPv4, error) {
// See Insert for more details.
func (f *fragmentList) build(in *layers.IPv4) (*layers.IPv4, error) {
var final []byte
- var currentOffset uint16 = 0
+ var currentOffset uint16
debug.Printf("defrag: building the datagram \n")
for e := f.List.Front(); e != nil; e = e.Next() {
@@ -243,7 +292,7 @@ func (f *fragmentList) build(in *layers.IPv4) (*layers.IPv4, error) {
debug.Printf("defrag: building - overlapping, starting at %d\n",
startAt)
if startAt > frag.Length-20 {
- return nil, fmt.Errorf("defrag: building - invalid fragment")
+ return nil, errors.New("defrag: building - invalid fragment")
}
final = append(final, frag.Payload[startAt:]...)
currentOffset = currentOffset + frag.FragOffset*8
@@ -251,7 +300,7 @@ func (f *fragmentList) build(in *layers.IPv4) (*layers.IPv4, error) {
// Houston - we have an hole !
debug.Printf("defrag: hole found while building, " +
"stopping the defrag process\n")
- return nil, fmt.Errorf("defrag: building - hole found")
+ return nil, errors.New("defrag: building - hole found")
}
debug.Printf("defrag: building - next is %d\n", currentOffset)
}
@@ -262,7 +311,7 @@ func (f *fragmentList) build(in *layers.IPv4) (*layers.IPv4, error) {
IHL: in.IHL,
TOS: in.TOS,
Length: f.Highest,
- Id: 0,
+ Id: in.Id,
Flags: 0,
FragOffset: 0,
TTL: in.TTL,
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go
index e121a44fede..f42c45bd886 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go
@@ -1,11 +1,18 @@
// 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"
+ "encoding/binary"
"fmt"
"net"
"testing"
+ "time"
"github.com/google/gopacket"
"github.com/google/gopacket/bytediff"
@@ -28,10 +35,41 @@ func TestNotFrag(t *testing.T) {
}
}
+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")
+ }
+
+ discarded := defrag.DiscardOlderThan(time.Now())
+ if 0 != discarded {
+ t.Errorf("defrag: discarded more fragments then expected: %d", discarded)
+ }
+}
+
func TestDefragPing1(t *testing.T) {
defrag := NewIPv4Defragmenter()
- // We inject the 4 fragment and test the DefragIPv4 interface
+ // 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")
@@ -50,6 +88,19 @@ func TestDefragPing1(t *testing.T) {
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) {
@@ -99,27 +150,113 @@ func TestDefragPing1and2(t *testing.T) {
debug = false
}
-func TestDefragPingTooMuch(t *testing.T) {
+func TestDefragTooSmall(t *testing.T) {
+ defrag := NewIPv4Defragmenter()
+
+ ip1 := layers.IPv4{
+ Version: 4,
+ IHL: 5,
+ TTL: 15,
+ SrcIP: net.IPv4(1, 1, 1, 1),
+ DstIP: net.IPv4(2, 2, 2, 2),
+ Id: 0xcc,
+ FragOffset: 0,
+ Length: 27, // Minimum fragment size -1 + header (20)
+ Flags: layers.IPv4MoreFragments,
+ }
+ if _, err := defrag.DefragIPv4(&ip1); err == nil {
+ t.Fatal("defrag: Minimum fragment size is supposed to be 8")
+ }
+
+ ip1.Length++
+ if _, err := defrag.DefragIPv4(&ip1); err != nil {
+ t.Fatalf("defrag: Minimum fragment size is supposed to be 8, %s", err)
+ }
+}
+
+func TestDefragFragmentOffset(t *testing.T) {
+ defrag := NewIPv4Defragmenter()
+
+ ip1 := layers.IPv4{
+ Version: 4,
+ IHL: 5,
+ TTL: 15,
+ SrcIP: net.IPv4(1, 1, 1, 1),
+ DstIP: net.IPv4(2, 2, 2, 2),
+ Id: 0xcc,
+ FragOffset: 0,
+ Length: 512,
+ Flags: layers.IPv4MoreFragments,
+ }
+ if _, err := defrag.DefragIPv4(&ip1); err != nil {
+ t.Fatal(err)
+ }
+
+ ip2 := ip1
+ ip2.FragOffset = 8184
+
+ _, err := defrag.DefragIPv4(&ip2)
+ if err == nil {
+ t.Fatalf("defrag: Maximum fragment offset is supposed to be 8183")
+ }
+}
+
+func TestDefragDiscard(t *testing.T) {
defrag := NewIPv4Defragmenter()
- // We inject the 7 fragments, and expect to hit an error at the
- // 8th fragment
- gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
- gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
- gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
+ gentestDefrag(t, defrag, testPing2Frag1, false, "Ping2Frag1")
+
+ discarded := defrag.DiscardOlderThan(time.Now())
+ if 2 != discarded {
+ t.Errorf("defrag: discarded more fragments then expected: %d", discarded)
+ }
+}
+
+func TestDefragMaxSize(t *testing.T) {
+ defrag := NewIPv4Defragmenter()
+
+ ip1 := layers.IPv4{
+ Version: 4,
+ IHL: 5,
+ TTL: 15,
+ SrcIP: net.IPv4(1, 1, 1, 1),
+ DstIP: net.IPv4(2, 2, 2, 2),
+ Id: 0xcc,
+ FragOffset: 0,
+ Length: 65535,
+ Flags: layers.IPv4MoreFragments,
+ }
+ if _, err := defrag.DefragIPv4(&ip1); err != nil {
+ t.Fatal(err)
+ }
+
+ ip2 := ip1
+ ip2.Length = 28
+ ip2.FragOffset = 1
+
+ _, err := defrag.DefragIPv4(&ip2)
+ if err != nil {
+ t.Fatal(err)
+ t.Fatalf("defrag: Maximum length is supposed to be 65535")
+ }
+}
+
+func TestDefragIDField(t *testing.T) {
+ defrag := NewIPv4Defragmenter()
+
+ expectedID := binary.BigEndian.Uint16(testPing1Frag1[18:])
+
gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
+ gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3")
gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2")
- gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1")
-
- p := gopacket.NewPacket(testPing1Frag1, layers.LinkTypeEthernet,
- gopacket.Default)
- ip, _ := p.Layer(layers.LayerTypeIPv4).(*layers.IPv4)
+ ipFragmented := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4")
- _, err := defrag.DefragIPv4(ip)
- if err == nil {
- t.Fatalf("defrag: Maximum number of fragments are supposed to be 8")
+ if ipFragmented.Id != expectedID {
+ t.Fatalf("defrag: expecting a fragmented packet with ID %d, got %d",
+ expectedID, ipFragmented.Id)
}
+
}
func gentestDefrag(t *testing.T, defrag *IPv4Defragmenter, buf []byte, expect bool, label string) *layers.IPv4 {
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layerclass.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layerclass.go
index 7e76f9c5aa8..775cd098770 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layerclass.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layerclass.go
@@ -18,11 +18,12 @@ type LayerClass interface {
LayerTypes() []LayerType
}
-// Make LayerType itself be a LayerClass.
+// Contains implements LayerClass.
func (l LayerType) Contains(a LayerType) bool {
return l == a
}
+// LayerTypes implements LayerClass.
func (l LayerType) LayerTypes() []LayerType {
return []LayerType{l}
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/.lint_blacklist b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/.lint_blacklist
new file mode 100644
index 00000000000..fded4f6650f
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/.lint_blacklist
@@ -0,0 +1,39 @@
+dot11.go
+eap.go
+endpoints.go
+enums_generated.go
+enums.go
+ethernet.go
+geneve.go
+icmp4.go
+icmp6.go
+igmp.go
+ip4.go
+ip6.go
+layertypes.go
+linux_sll.go
+llc.go
+lldp.go
+mpls.go
+ndp.go
+ntp.go
+ospf.go
+pflog.go
+pppoe.go
+prism.go
+radiotap.go
+rudp.go
+sctp.go
+sflow.go
+tcp.go
+tcpip.go
+tls.go
+tls_alert.go
+tls_appdata.go
+tls_cipherspec.go
+tls_hanshake.go
+tls_test.go
+udp.go
+udplite.go
+usb.go
+vrrp.go
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/arp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/arp.go
index 60701b97695..49e05ac9a39 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/arp.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/arp.go
@@ -9,10 +9,12 @@ package layers
import (
"encoding/binary"
- "fmt"
+ "errors"
+
"github.com/google/gopacket"
)
+// Potential values for ARP.Operation.
const (
ARPRequest = 1
ARPReply = 2
@@ -64,11 +66,11 @@ func (arp *ARP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeO
}
if opts.FixLengths {
if len(arp.SourceHwAddress) != len(arp.DstHwAddress) {
- return fmt.Errorf("mismatched hardware address sizes")
+ return errors.New("mismatched hardware address sizes")
}
arp.HwAddressSize = uint8(len(arp.SourceHwAddress))
if len(arp.SourceProtAddress) != len(arp.DstProtAddress) {
- return fmt.Errorf("mismatched prot address sizes")
+ return errors.New("mismatched prot address sizes")
}
arp.ProtAddressSize = uint8(len(arp.SourceProtAddress))
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/base_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/base_test.go
index 4be7480bc24..bed5d4fcee9 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/base_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/base_test.go
@@ -9,8 +9,9 @@
package layers
import (
- "github.com/google/gopacket"
"testing"
+
+ "github.com/google/gopacket"
)
func min(a, b int) int {
@@ -28,15 +29,42 @@ func checkLayers(p gopacket.Packet, want []gopacket.LayerType, t *testing.T) {
len(l.LayerContents()), len(l.LayerPayload()))
}
t.Log(p)
- if len(layers) != len(want) {
+ 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])
+ for i, l := range want {
+ if l == gopacket.LayerTypePayload {
+ // done matching layers
+ return
}
+
+ if layers[i].LayerType() != l {
+ t.Errorf(" Layer %d mismatch: got %v want %v", i,
+ layers[i].LayerType(), l)
+ }
+ }
+}
+
+// Checks that when a serialized version of p is decoded, p and the serialized version of p are the same.
+// Does not work for packets where the order of options can change, like icmpv6 router advertisements, dhcpv6, etc.
+func checkSerialization(p gopacket.Packet, t *testing.T) {
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{
+ ComputeChecksums: false,
+ FixLengths: false,
+ }
+ if err := gopacket.SerializePacket(buf, opts, p); err != nil {
+ t.Error("Failed to encode packet:", err)
+ }
+
+ p2 := gopacket.NewPacket(buf.Bytes(), LinkTypeEthernet, gopacket.Default)
+ if p2.ErrorLayer() != nil {
+ t.Error("Failed to decode the re-encoded packet:", p2.ErrorLayer().Error())
+ }
+
+ if p2.Dump() != p.Dump() {
+ t.Errorf("The decoded and the re-encoded packet are different!\nDecoded:\n%s\n Re-Encoded:\n%s", p.Dump(), p2.Dump())
}
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/bfd.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/bfd.go
new file mode 100644
index 00000000000..43030fb6a55
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/bfd.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/bfd_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/bfd_test.go
new file mode 100644
index 00000000000..1ac84cb5f93
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/bfd_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/cdp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/cdp.go
index b6a53df6560..d67203eb28a 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/cdp.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/cdp.go
@@ -14,13 +14,15 @@ package layers
import (
"encoding/binary"
"fmt"
- "github.com/google/gopacket"
"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
@@ -68,8 +70,10 @@ type CiscoDiscovery struct {
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
@@ -95,6 +99,7 @@ type CDPCapabilities struct {
RemotelyManaged bool
}
+// CDP Power-over-Ethernet values.
const (
CDPPoEFourWire byte = 0x01
CDPPoEPDArch byte = 0x02
@@ -102,6 +107,7 @@ const (
CDPPoEPSE byte = 0x08
)
+// CDPSparePairPoE provides information on PoE.
type CDPSparePairPoE struct {
PSEFourWire bool // Supported / Not supported
PDArchShared bool // Shared / Independent
@@ -122,6 +128,7 @@ type CDPPowerDialogue struct {
Values []uint32
}
+// CDPLocation provides location information for a CDP device.
type CDPLocation struct {
Type uint8 // Undocumented
Location string
@@ -143,8 +150,10 @@ type CDPHello struct {
ManagementVLAN uint16
}
+// CDPEnergyWiseSubtype is used within CDP to define TLV values.
type CDPEnergyWiseSubtype uint32
+// CDPEnergyWiseSubtype values.
const (
CDPEnergyWiseRole CDPEnergyWiseSubtype = 0x00000007
CDPEnergyWiseDomain CDPEnergyWiseSubtype = 0x00000008
@@ -152,6 +161,7 @@ const (
CDPEnergyWiseReplyTo CDPEnergyWiseSubtype = 0x00000017
)
+// CDPEnergyWise is used by CDP to monitor and control power usage.
type CDPEnergyWise struct {
EncryptedData []byte
Unknown1 uint32
@@ -473,6 +483,7 @@ const (
CDPProtocolType802_2 byte = 2
)
+// CDPAddressType is used to define TLV values within CDP addresses.
type CDPAddressType uint64
// CDP Address types.
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ctp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ctp.go
index abe6b3e206c..82875845a72 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ctp.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ctp.go
@@ -16,6 +16,7 @@ import (
// EthernetCTP layer.
type EthernetCTPFunction uint16
+// EthernetCTPFunction values.
const (
EthernetCTPFunctionReply EthernetCTPFunction = 1
EthernetCTPFunctionForwardData EthernetCTPFunction = 2
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/decode_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/decode_test.go
index 396e08d9610..b4ac3b3161b 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/decode_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/decode_test.go
@@ -11,15 +11,16 @@ import (
"bytes"
"encoding/hex"
"fmt"
- "github.com/google/gopacket"
- "github.com/google/gopacket/bytediff"
"net"
"reflect"
"strings"
"testing"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/bytediff"
)
-var testSimpleTCPPacket []byte = []byte{
+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,
@@ -176,7 +177,7 @@ func BenchmarkLazyNoCopy(b *testing.B) {
func BenchmarkKnownStack(b *testing.B) {
stack := []gopacket.DecodingLayer{&Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{}}
- var nf gopacket.DecodeFeedback = gopacket.NilDecodeFeedback
+ nf := gopacket.NilDecodeFeedback
for i := 0; i < b.N; i++ {
data := testSimpleTCPPacket[:]
for _, d := range stack {
@@ -290,7 +291,7 @@ func BenchmarkFmtVerboseString(b *testing.B) {
p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
b.StartTimer()
for i := 0; i < b.N; i++ {
- fmt.Sprintf("%#v", p)
+ _ = fmt.Sprintf("%#v", p)
}
}
@@ -299,7 +300,7 @@ func BenchmarkPacketString(b *testing.B) {
p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
b.StartTimer()
for i := 0; i < b.N; i++ {
- p.String()
+ _ = p.String()
}
}
@@ -308,7 +309,7 @@ func BenchmarkPacketDumpString(b *testing.B) {
p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions)
b.StartTimer()
for i := 0; i < b.N; i++ {
- p.String()
+ _ = p.String()
}
}
@@ -593,9 +594,9 @@ func TestDecodeSCTPPackets(t *testing.T) {
wantLayers := [][]gopacket.LayerType{
[]gopacket.LayerType{LayerTypeSCTPInit},
[]gopacket.LayerType{LayerTypeSCTPInitAck},
- []gopacket.LayerType{LayerTypeSCTPCookieEcho, LayerTypeSCTPData},
+ []gopacket.LayerType{LayerTypeSCTPCookieEcho, LayerTypeSCTPData, gopacket.LayerTypePayload},
[]gopacket.LayerType{LayerTypeSCTPCookieAck, LayerTypeSCTPSack},
- []gopacket.LayerType{LayerTypeSCTPData},
+ []gopacket.LayerType{LayerTypeSCTPData, gopacket.LayerTypePayload},
[]gopacket.LayerType{LayerTypeSCTPSack},
[]gopacket.LayerType{LayerTypeSCTPShutdown},
[]gopacket.LayerType{LayerTypeSCTPShutdownAck},
@@ -1073,7 +1074,56 @@ func BenchmarkDecodeMPLS(b *testing.B) {
}
}
-// testPPPoE_ICMPv6 is the packet:
+// testPPPGREIPv4IPv6VLAN is the packet from http://packetlife.net/captures/gre_and_4over6.cap
+//04:35:03.821897 IP6 2402:f000:1:8e01::5555 > 2607:fcd0:100:2300::b108:2a6b: IP 16.0.0.200 > 192.52.166.154: GREv1, call 6016, seq 430001, ack 539254, length 119: IP 172.16.44.3.40768 > 8.8.8.8.53: 42540+ AAAA? xqt-detect-mode2-97712e88-167a-45b9-93ee-913140e76678. (71)
+// 0x0000: 6000 0000 008b 04f6 2402 f000 0001 8e01 `.......$.......
+// 0x0010: 0000 0000 0000 5555 2607 fcd0 0100 2300 ......UU&.....#.
+// 0x0020: 0000 0000 b108 2a6b 4500 008b 8caf 0000 ......*kE.......
+// 0x0030: 402f 75fe 1000 00c8 c034 a69a 3081 880b @/u......4..0...
+// 0x0040: 0067 1780 0006 8fb1 0008 3a76 ff03 0021 .g........:v...!
+// 0x0050: 4500 0063 0000 4000 3c11 5667 ac10 2c03 E..c..@.<.Vg..,.
+// 0x0060: 0808 0808 9f40 0035 004f 2d23 a62c 0100 .....@.5.O-#.,..
+// 0x0070: 0001 0000 0000 0000 3578 7174 2d64 6574 ........5xqt-det
+// 0x0080: 6563 742d 6d6f 6465 322d 3937 3731 3265 ect-mode2-97712e
+// 0x0090: 3838 2d31 3637 612d 3435 6239 2d39 3365 88-167a-45b9-93e
+// 0x00a0: 652d 3931 3331 3430 6537 3636 3738 0000 e-913140e76678..
+// 0x00b0: 1c00 01
+var testPPPGREIPv4IPv6VLAN = []byte{
+ 0xc5, 0x00, 0x00, 0x00, 0x82, 0xc4, 0x00, 0x12, 0x1e, 0xf2, 0x61, 0x3d, 0x81, 0x00, 0x00, 0x64,
+ 0x86, 0xdd, 0x60, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x04, 0xf6, 0x24, 0x02, 0xf0, 0x00, 0x00, 0x01,
+ 0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x26, 0x07, 0xfc, 0xd0, 0x01, 0x00,
+ 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x08, 0x2a, 0x6b, 0x45, 0x00, 0x00, 0x8b, 0x8c, 0xaf,
+ 0x00, 0x00, 0x40, 0x2f, 0x75, 0xfe, 0x10, 0x00, 0x00, 0xc8, 0xc0, 0x34, 0xa6, 0x9a, 0x30, 0x81,
+ 0x88, 0x0b, 0x00, 0x67, 0x17, 0x80, 0x00, 0x06, 0x8f, 0xb1, 0x00, 0x08, 0x3a, 0x76, 0xff, 0x03,
+ 0x00, 0x21, 0x45, 0x00, 0x00, 0x63, 0x00, 0x00, 0x40, 0x00, 0x3c, 0x11, 0x56, 0x67, 0xac, 0x10,
+ 0x2c, 0x03, 0x08, 0x08, 0x08, 0x08, 0x9f, 0x40, 0x00, 0x35, 0x00, 0x4f, 0xfb, 0x9f, 0xa6, 0x2c,
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x78, 0x71, 0x74, 0x2d, 0x64,
+ 0x65, 0x74, 0x65, 0x63, 0x74, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x32, 0x2d, 0x39, 0x37, 0x37, 0x31,
+ 0x32, 0x65, 0x38, 0x38, 0x2d, 0x31, 0x36, 0x37, 0x61, 0x2d, 0x34, 0x35, 0x62, 0x39, 0x2d, 0x39,
+ 0x33, 0x65, 0x65, 0x2d, 0x39, 0x31, 0x33, 0x31, 0x34, 0x30, 0x65, 0x37, 0x36, 0x36, 0x37, 0x38,
+ 0x00, 0x00, 0x1c, 0x00, 0x01,
+}
+
+func TestPPPGREIPv4IPv6VLAN(t *testing.T) {
+ p := gopacket.NewPacket(testPPPGREIPv4IPv6VLAN, LinkTypeEthernet, testDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypeEthernet,
+ LayerTypeDot1Q,
+ LayerTypeIPv6,
+ LayerTypeIPv4,
+ LayerTypeGRE,
+ LayerTypePPP,
+ LayerTypeIPv4,
+ LayerTypeUDP,
+ LayerTypeDNS,
+ }, t)
+ testSerialization(t, p, testPPPGREIPv4IPv6VLAN)
+}
+
+// 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.....:...
@@ -1081,7 +1131,7 @@ func BenchmarkDecodeMPLS(b *testing.B) {
// 0x0030: 0000 0000 0000 0000 0000 0000 0001 8800 ................
// 0x0040: 5083 8000 0000 fe80 0000 0000 0000 c801 P...............
// 0x0050: 0eff fe88 0008 ......
-var testPPPoE_ICMPv6 = []byte{
+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,
@@ -1090,8 +1140,8 @@ var testPPPoE_ICMPv6 = []byte{
0x0e, 0xff, 0xfe, 0x88, 0x00, 0x08,
}
-func TestPPPoE_ICMPv6(t *testing.T) {
- p := gopacket.NewPacket(testPPPoE_ICMPv6, LinkTypeEthernet, testDecodeOptions)
+func TestPPPoEICMPv6(t *testing.T) {
+ p := gopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, testDecodeOptions)
if p.ErrorLayer() != nil {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
@@ -1103,15 +1153,15 @@ func TestPPPoE_ICMPv6(t *testing.T) {
LayerTypeICMPv6,
gopacket.LayerTypePayload,
}, t)
- testSerialization(t, p, testPPPoE_ICMPv6)
+ testSerialization(t, p, testPPPoEICMPv6)
}
-func BenchmarkDecodePPPoE_ICMPv6(b *testing.B) {
+func BenchmarkDecodePPPoEICMPv6(b *testing.B) {
for i := 0; i < b.N; i++ {
- gopacket.NewPacket(testPPPoE_ICMPv6, LinkTypeEthernet, gopacket.NoCopy)
+ gopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, gopacket.NoCopy)
}
}
-var testPFLog_UDP = []byte{
+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,
@@ -1121,8 +1171,8 @@ var testPFLog_UDP = []byte{
0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}
-func TestPFLog_UDP(t *testing.T) {
- p := gopacket.NewPacket(testPFLog_UDP, LinkTypePFLog, testDecodeOptions)
+func TestPFLogUDP(t *testing.T) {
+ p := gopacket.NewPacket(testPFLogUDP, LinkTypePFLog, testDecodeOptions)
if p.ErrorLayer() != nil {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
@@ -1208,65 +1258,26 @@ func TestPacketIPv4Fragmented(t *testing.T) {
testSerializationWithOpts(t, p, testPacketIPv4Fragmented, gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true})
}
-// 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)
- }
-}
+// 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")
-// 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,
+ // this panic'd previously due to a zero length chunk getting
+ // repeatedly read
+ gopacket.NewPacket(data, LinkTypeEthernet, gopacket.Default)
}
-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)
+// 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcp_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcp_test.go
new file mode 100644
index 00000000000..c9b32b8c5bf
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcp_test.go
@@ -0,0 +1,181 @@
+// 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 TestDHCPv4DecodeOption(t *testing.T) {
+ var tests = []struct {
+ msg string
+ buf []byte
+ err error
+ }{
+ {
+ msg: "DHCPOptPad",
+ buf: []byte{0},
+ err: nil,
+ },
+ {
+ msg: "Option with zero length",
+ buf: []byte{119, 0},
+ err: nil,
+ },
+ {
+ msg: "Option with maximum length",
+ buf: bytes.Join([][]byte{
+ {119, 255},
+ bytes.Repeat([]byte{0}, 255),
+ }, nil),
+ err: nil,
+ },
+ {
+ msg: "Too short option",
+ buf: []byte{},
+ err: DecOptionNotEnoughData,
+ },
+ {
+ msg: "Too short option when option is not 0 or 255",
+ buf: []byte{119},
+ err: DecOptionNotEnoughData,
+ },
+ {
+ msg: "Malformed option",
+ buf: []byte{119, 1},
+ err: DecOptionMalformed,
+ },
+ }
+
+ for i := range tests {
+ var (
+ opt = new(DHCPOption)
+ err = opt.decode(tests[i].buf)
+ )
+ if want, got := tests[i].err, err; want != got {
+ t.Errorf("[#%v %v] Unexpected error want: %v, got: %v\n", i, tests[i].msg, want, err)
+ }
+ }
+}
+
+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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv4.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv4.go
new file mode 100644
index 00000000000..3bbd036e3fd
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv4.go
@@ -0,0 +1,585 @@
+// 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"
+ "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.Options = d.Options[:0]
+ 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 InvalidMagicCookie
+ }
+
+ 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:
+ 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 DecOptionNotEnoughData
+ }
+ o.Type = DHCPOpt(data[0])
+ switch o.Type {
+ case DHCPOptPad, DHCPOptEnd:
+ o.Data = nil
+ default:
+ if len(data) < 2 {
+ return DecOptionNotEnoughData
+ }
+ o.Length = data[1]
+ if int(o.Length) > len(data[2:]) {
+ return DecOptionMalformed
+ }
+ o.Data = data[2 : 2+int(o.Length)]
+ }
+ return nil
+}
+
+// DHCPv4Error is used for constant errors for DHCPv4. It is needed for test asserts.
+type DHCPv4Error string
+
+// DHCPv4Error implements error interface.
+func (d DHCPv4Error) Error() string {
+ return string(d)
+}
+
+const (
+ // DecOptionNotEnoughData is returned when there is not enough data during option's decode process
+ DecOptionNotEnoughData = DHCPv4Error("Not enough data to decode")
+ // DecOptionMalformed is returned when the option is malformed
+ DecOptionMalformed = DHCPv4Error("Option is malformed")
+ // InvalidMagicCookie is returned when Magic cookie is missing into BOOTP header
+ InvalidMagicCookie = DHCPv4Error("Bad DHCP header")
+)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6.go
new file mode 100644
index 00000000000..052b3943bfb
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6.go
@@ -0,0 +1,341 @@
+// Copyright 2018 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"
+)
+
+// DHCPv6MsgType represents a DHCPv6 operation
+type DHCPv6MsgType byte
+
+// Constants that represent DHCP operations
+const (
+ DHCPv6MsgTypeUnspecified DHCPv6MsgType = iota
+ DHCPv6MsgTypeSolicit
+ DHCPv6MsgTypeAdverstise
+ DHCPv6MsgTypeRequest
+ DHCPv6MsgTypeConfirm
+ DHCPv6MsgTypeRenew
+ DHCPv6MsgTypeRebind
+ DHCPv6MsgTypeReply
+ DHCPv6MsgTypeRelease
+ DHCPv6MsgTypeDecline
+ DHCPv6MsgTypeReconfigure
+ DHCPv6MsgTypeInformationRequest
+ DHCPv6MsgTypeRelayForward
+ DHCPv6MsgTypeRelayReply
+)
+
+// String returns a string version of a DHCPv6MsgType.
+func (o DHCPv6MsgType) String() string {
+ switch o {
+ case DHCPv6MsgTypeUnspecified:
+ return "Unspecified"
+ case DHCPv6MsgTypeSolicit:
+ return "Solicit"
+ case DHCPv6MsgTypeAdverstise:
+ return "Adverstise"
+ case DHCPv6MsgTypeRequest:
+ return "Request"
+ case DHCPv6MsgTypeConfirm:
+ return "Confirm"
+ case DHCPv6MsgTypeRenew:
+ return "Renew"
+ case DHCPv6MsgTypeRebind:
+ return "Rebind"
+ case DHCPv6MsgTypeReply:
+ return "Reply"
+ case DHCPv6MsgTypeRelease:
+ return "Release"
+ case DHCPv6MsgTypeDecline:
+ return "Decline"
+ case DHCPv6MsgTypeReconfigure:
+ return "Reconfigure"
+ case DHCPv6MsgTypeInformationRequest:
+ return "InformationRequest"
+ case DHCPv6MsgTypeRelayForward:
+ return "RelayForward"
+ case DHCPv6MsgTypeRelayReply:
+ return "RelayReply"
+ default:
+ return "Unknown"
+ }
+}
+
+// DHCPv6 contains data for a single DHCP packet.
+type DHCPv6 struct {
+ BaseLayer
+ MsgType DHCPv6MsgType
+ HopCount uint8
+ LinkAddr net.IP
+ PeerAddr net.IP
+ TransactionID []byte
+ Options DHCPv6Options
+}
+
+// LayerType returns gopacket.LayerTypeDHCPv6
+func (d *DHCPv6) LayerType() gopacket.LayerType { return LayerTypeDHCPv6 }
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (d *DHCPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ d.BaseLayer = BaseLayer{Contents: data}
+ d.Options = d.Options[:0]
+ d.MsgType = DHCPv6MsgType(data[0])
+
+ offset := 0
+ if d.MsgType == DHCPv6MsgTypeRelayForward || d.MsgType == DHCPv6MsgTypeRelayReply {
+ d.HopCount = data[1]
+ d.LinkAddr = net.IP(data[2:18])
+ d.PeerAddr = net.IP(data[18:34])
+ offset = 34
+ } else {
+ d.TransactionID = data[1:4]
+ offset = 4
+ }
+
+ stop := len(data)
+ for offset < stop {
+ o := DHCPv6Option{}
+ if err := o.decode(data[offset:]); err != nil {
+ return err
+ }
+ d.Options = append(d.Options, o)
+ offset += int(o.Length) + 4 // 2 from option code, 2 from option length
+ }
+
+ return nil
+}
+
+// Len returns the length of a DHCPv6 packet.
+func (d *DHCPv6) Len() int {
+ n := 1
+ if d.MsgType == DHCPv6MsgTypeRelayForward || d.MsgType == DHCPv6MsgTypeRelayReply {
+ n += 33
+ } else {
+ n += 3
+ }
+
+ for _, o := range d.Options {
+ n += int(o.Length) + 4 // 2 from option code, 2 from option length
+ }
+
+ 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 *DHCPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ plen := int(d.Len())
+
+ data, err := b.PrependBytes(plen)
+ if err != nil {
+ return err
+ }
+
+ offset := 0
+ data[0] = byte(d.MsgType)
+ if d.MsgType == DHCPv6MsgTypeRelayForward || d.MsgType == DHCPv6MsgTypeRelayReply {
+ data[1] = byte(d.HopCount)
+ copy(data[2:18], d.LinkAddr.To16())
+ copy(data[18:34], d.PeerAddr.To16())
+ offset = 34
+ } else {
+ copy(data[1:4], d.TransactionID)
+ offset = 4
+ }
+
+ if len(d.Options) > 0 {
+ for _, o := range d.Options {
+ if err := o.encode(data[offset:], opts); err != nil {
+ return err
+ }
+ offset += int(o.Length) + 4 // 2 from option code, 2 from option length
+ }
+ }
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (d *DHCPv6) CanDecode() gopacket.LayerClass {
+ return LayerTypeDHCPv6
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (d *DHCPv6) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+func decodeDHCPv6(data []byte, p gopacket.PacketBuilder) error {
+ dhcp := &DHCPv6{}
+ err := dhcp.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(dhcp)
+ return p.NextDecoder(gopacket.LayerTypePayload)
+}
+
+// DHCPv6StatusCode represents a DHCP status code - RFC-3315
+type DHCPv6StatusCode uint16
+
+// Constants for the DHCPv6StatusCode.
+const (
+ DHCPv6StatusCodeSuccess DHCPv6StatusCode = iota
+ DHCPv6StatusCodeUnspecFail
+ DHCPv6StatusCodeNoAddrsAvail
+ DHCPv6StatusCodeNoBinding
+ DHCPv6StatusCodeNotOnLink
+ DHCPv6StatusCodeUseMulticast
+)
+
+// String returns a string version of a DHCPv6StatusCode.
+func (o DHCPv6StatusCode) String() string {
+ switch o {
+ case DHCPv6StatusCodeSuccess:
+ return "Success"
+ case DHCPv6StatusCodeUnspecFail:
+ return "UnspecifiedFailure"
+ case DHCPv6StatusCodeNoAddrsAvail:
+ return "NoAddressAvailable"
+ case DHCPv6StatusCodeNoBinding:
+ return "NoBinding"
+ case DHCPv6StatusCodeNotOnLink:
+ return "NotOnLink"
+ case DHCPv6StatusCodeUseMulticast:
+ return "UseMulticast"
+ default:
+ return "Unknown"
+ }
+}
+
+// DHCPv6DUIDType represents a DHCP DUID - RFC-3315
+type DHCPv6DUIDType uint16
+
+// Constants for the DHCPv6DUIDType.
+const (
+ DHCPv6DUIDTypeLLT DHCPv6DUIDType = iota + 1
+ DHCPv6DUIDTypeEN
+ DHCPv6DUIDTypeLL
+)
+
+// String returns a string version of a DHCPv6DUIDType.
+func (o DHCPv6DUIDType) String() string {
+ switch o {
+ case DHCPv6DUIDTypeLLT:
+ return "LLT"
+ case DHCPv6DUIDTypeEN:
+ return "EN"
+ case DHCPv6DUIDTypeLL:
+ return "LL"
+ default:
+ return "Unknown"
+ }
+}
+
+// DHCPv6DUID means DHCP Unique Identifier as stated in RFC 3315, section 9 (https://tools.ietf.org/html/rfc3315#page-19)
+type DHCPv6DUID struct {
+ Type DHCPv6DUIDType
+ // LLT, LL
+ HardwareType []byte
+ // EN
+ EnterpriseNumber []byte
+ // LLT
+ Time []byte
+ // LLT, LL
+ LinkLayerAddress net.HardwareAddr
+ // EN
+ Identifier []byte
+}
+
+// DecodeFromBytes decodes the given bytes into a DHCPv6DUID
+func (d *DHCPv6DUID) DecodeFromBytes(data []byte) error {
+ if len(data) < 2 {
+ return errors.New("Not enough bytes to decode: " + string(len(data)))
+ }
+
+ d.Type = DHCPv6DUIDType(binary.BigEndian.Uint16(data[:2]))
+ if d.Type == DHCPv6DUIDTypeLLT || d.Type == DHCPv6DUIDTypeLL {
+ d.HardwareType = data[2:4]
+ }
+
+ if d.Type == DHCPv6DUIDTypeLLT {
+ d.Time = data[4:8]
+ d.LinkLayerAddress = net.HardwareAddr(data[8:])
+ } else if d.Type == DHCPv6DUIDTypeEN {
+ d.EnterpriseNumber = data[2:6]
+ d.Identifier = data[6:]
+ } else { // DHCPv6DUIDTypeLL
+ d.LinkLayerAddress = net.HardwareAddr(data[4:])
+ }
+
+ return nil
+}
+
+// Encode encodes the DHCPv6DUID in a slice of bytes
+func (d *DHCPv6DUID) Encode() []byte {
+ length := d.Len()
+ data := make([]byte, length)
+ binary.BigEndian.PutUint16(data[0:2], uint16(d.Type))
+
+ if d.Type == DHCPv6DUIDTypeLLT || d.Type == DHCPv6DUIDTypeLL {
+ copy(data[2:4], d.HardwareType)
+ }
+
+ if d.Type == DHCPv6DUIDTypeLLT {
+ copy(data[4:8], d.Time)
+ copy(data[8:], d.LinkLayerAddress)
+ } else if d.Type == DHCPv6DUIDTypeEN {
+ copy(data[2:6], d.EnterpriseNumber)
+ copy(data[6:], d.Identifier)
+ } else {
+ copy(data[4:], d.LinkLayerAddress)
+ }
+
+ return data
+}
+
+// Len returns the length of the DHCPv6DUID, respecting the type
+func (d *DHCPv6DUID) Len() int {
+ length := 2 // d.Type
+ if d.Type == DHCPv6DUIDTypeLLT {
+ length += 2 /*HardwareType*/ + 4 /*d.Time*/ + len(d.LinkLayerAddress)
+ } else if d.Type == DHCPv6DUIDTypeEN {
+ length += 4 /*d.EnterpriseNumber*/ + len(d.Identifier)
+ } else { // LL
+ length += 2 /*d.HardwareType*/ + len(d.LinkLayerAddress)
+ }
+
+ return length
+}
+
+func (d *DHCPv6DUID) String() string {
+ duid := "Type: " + d.Type.String() + ", "
+ if d.Type == DHCPv6DUIDTypeLLT {
+ duid += fmt.Sprintf("HardwareType: %v, Time: %v, LinkLayerAddress: %v", d.HardwareType, d.Time, d.LinkLayerAddress)
+ } else if d.Type == DHCPv6DUIDTypeEN {
+ duid += fmt.Sprintf("EnterpriseNumber: %v, Identifier: %v", d.EnterpriseNumber, d.Identifier)
+ } else { // DHCPv6DUIDTypeLL
+ duid += fmt.Sprintf("HardwareType: %v, LinkLayerAddress: %v", d.HardwareType, d.LinkLayerAddress)
+ }
+ return duid
+}
+
+func decodeDHCPv6DUID(data []byte) (*DHCPv6DUID, error) {
+ duid := &DHCPv6DUID{}
+ err := duid.DecodeFromBytes(data)
+ if err != nil {
+ return nil, err
+ }
+ return duid, nil
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6_options.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6_options.go
new file mode 100644
index 00000000000..0c05e35f955
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6_options.go
@@ -0,0 +1,621 @@
+// Copyright 2018 The GoPacket Authors. 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"
+ "github.com/google/gopacket"
+)
+
+// DHCPv6Opt represents a DHCP option or parameter from RFC-3315
+type DHCPv6Opt uint16
+
+// Constants for the DHCPv6Opt options.
+const (
+ DHCPv6OptClientID DHCPv6Opt = 1
+ DHCPv6OptServerID DHCPv6Opt = 2
+ DHCPv6OptIANA DHCPv6Opt = 3
+ DHCPv6OptIATA DHCPv6Opt = 4
+ DHCPv6OptIAAddr DHCPv6Opt = 5
+ DHCPv6OptOro DHCPv6Opt = 6
+ DHCPv6OptPreference DHCPv6Opt = 7
+ DHCPv6OptElapsedTime DHCPv6Opt = 8
+ DHCPv6OptRelayMessage DHCPv6Opt = 9
+ DHCPv6OptAuth DHCPv6Opt = 11
+ DHCPv6OptUnicast DHCPv6Opt = 12
+ DHCPv6OptStatusCode DHCPv6Opt = 13
+ DHCPv6OptRapidCommit DHCPv6Opt = 14
+ DHCPv6OptUserClass DHCPv6Opt = 15
+ DHCPv6OptVendorClass DHCPv6Opt = 16
+ DHCPv6OptVendorOpts DHCPv6Opt = 17
+ DHCPv6OptInterfaceID DHCPv6Opt = 18
+ DHCPv6OptReconfigureMessage DHCPv6Opt = 19
+ DHCPv6OptReconfigureAccept DHCPv6Opt = 20
+
+ // RFC 3319 Session Initiation Protocol (SIP)
+ DHCPv6OptSIPServersDomainList DHCPv6Opt = 21
+ DHCPv6OptSIPServersAddressList DHCPv6Opt = 22
+
+ // RFC 3646 DNS Configuration
+ DHCPv6OptDNSServers DHCPv6Opt = 23
+ DHCPv6OptDomainList DHCPv6Opt = 24
+
+ // RFC 3633 Prefix Delegation
+ DHCPv6OptIAPD DHCPv6Opt = 25
+ DHCPv6OptIAPrefix DHCPv6Opt = 26
+
+ // RFC 3898 Network Information Service (NIS)
+ DHCPv6OptNISServers DHCPv6Opt = 27
+ DHCPv6OptNISPServers DHCPv6Opt = 28
+ DHCPv6OptNISDomainName DHCPv6Opt = 29
+ DHCPv6OptNISPDomainName DHCPv6Opt = 30
+
+ // RFC 4075 Simple Network Time Protocol (SNTP)
+ DHCPv6OptSNTPServers DHCPv6Opt = 31
+
+ // RFC 4242 Information Refresh Time Option
+ DHCPv6OptInformationRefreshTime DHCPv6Opt = 32
+
+ // RFC 4280 Broadcast and Multicast Control Servers
+ DHCPv6OptBCMCSServerDomainNameList DHCPv6Opt = 33
+ DHCPv6OptBCMCSServerAddressList DHCPv6Opt = 34
+
+ // RFC 4776 Civic Address ConfigurationOption
+ DHCPv6OptGeoconfCivic DHCPv6Opt = 36
+
+ // RFC 4649 Relay Agent Remote-ID
+ DHCPv6OptRemoteID DHCPv6Opt = 37
+
+ // RFC 4580 Relay Agent Subscriber-ID
+ DHCPv6OptSubscriberID DHCPv6Opt = 38
+
+ // RFC 4704 Client Full Qualified Domain Name (FQDN)
+ DHCPv6OptClientFQDN DHCPv6Opt = 39
+
+ // RFC 5192 Protocol for Carrying Authentication for Network Access (PANA)
+ DHCPv6OptPanaAgent DHCPv6Opt = 40
+
+ // RFC 4833 Timezone Options
+ DHCPv6OptNewPOSIXTimezone DHCPv6Opt = 41
+ DHCPv6OptNewTZDBTimezone DHCPv6Opt = 42
+
+ // RFC 4994 Relay Agent Echo Request
+ DHCPv6OptEchoRequestOption DHCPv6Opt = 43
+
+ // RFC 5007 Leasequery
+ DHCPv6OptLQQuery DHCPv6Opt = 44
+ DHCPv6OptCLTTime DHCPv6Opt = 45
+ DHCPv6OptClientData DHCPv6Opt = 46
+ DHCPv6OptLQRelayData DHCPv6Opt = 47
+ DHCPv6OptLQClientLink DHCPv6Opt = 48
+
+ // RFC 6610 Home Information Discovery in Mobile IPv6 (MIPv6)
+ DHCPv6OptMIP6HNIDF DHCPv6Opt = 49
+ DHCPv6OptMIP6VDINF DHCPv6Opt = 50
+ DHCPv6OptMIP6IDINF DHCPv6Opt = 69
+ DHCPv6OptMIP6UDINF DHCPv6Opt = 70
+ DHCPv6OptMIP6HNP DHCPv6Opt = 71
+ DHCPv6OptMIP6HAA DHCPv6Opt = 72
+ DHCPv6OptMIP6HAF DHCPv6Opt = 73
+
+ // RFC 5223 Discovering Location-to-Service Translation (LoST) Servers
+ DHCPv6OptV6LOST DHCPv6Opt = 51
+
+ // RFC 5417 Control And Provisioning of Wireless Access Points (CAPWAP)
+ DHCPv6OptCAPWAPACV6 DHCPv6Opt = 52
+
+ // RFC 5460 Bulk Leasequery
+ DHCPv6OptRelayID DHCPv6Opt = 53
+
+ // RFC 5678 IEEE 802.21 Mobility Services (MoS) Discovery
+ DHCPv6OptIPv6AddressMoS DHCPv6Opt = 54
+ DHCPv6OptIPv6FQDNMoS DHCPv6Opt = 55
+
+ // RFC 5908 NTP Server Option
+ DHCPv6OptNTPServer DHCPv6Opt = 56
+
+ // RFC 5986 Discovering the Local Location Information Server (LIS)
+ DHCPv6OptV6AccessDomain DHCPv6Opt = 57
+
+ // RFC 5986 SIP User Agent
+ DHCPv6OptSIPUACSList DHCPv6Opt = 58
+
+ // RFC 5970 Options for Network Boot
+ DHCPv6OptBootFileURL DHCPv6Opt = 59
+ DHCPv6OptBootFileParam DHCPv6Opt = 60
+ DHCPv6OptClientArchType DHCPv6Opt = 61
+ DHCPv6OptNII DHCPv6Opt = 62
+
+ // RFC 6225 Coordinate-Based Location Configuration Information
+ DHCPv6OptGeolocation DHCPv6Opt = 63
+
+ // RFC 6334 Dual-Stack Lite
+ DHCPv6OptAFTRName DHCPv6Opt = 64
+
+ // RFC 6440 EAP Re-authentication Protocol (ERP)
+ DHCPv6OptERPLocalDomainName DHCPv6Opt = 65
+
+ // RFC 6422 Relay-Supplied DHCP Options
+ DHCPv6OptRSOO DHCPv6Opt = 66
+
+ // RFC 6603 Prefix Exclude Option for DHCPv6-based Prefix Delegation
+ DHCPv6OptPDExclude DHCPv6Opt = 67
+
+ // RFC 6607 Virtual Subnet Selection
+ DHCPv6OptVSS DHCPv6Opt = 68
+
+ // RFC 6731 Improved Recursive DNS Server Selection for Multi-Interfaced Nodes
+ DHCPv6OptRDNSSSelection DHCPv6Opt = 74
+
+ // RFC 6784 Kerberos Options for DHCPv6
+ DHCPv6OptKRBPrincipalName DHCPv6Opt = 75
+ DHCPv6OptKRBRealmName DHCPv6Opt = 76
+ DHCPv6OptKRBKDC DHCPv6Opt = 77
+
+ // RFC 6939 Client Link-Layer Address Option
+ DHCPv6OptClientLinkLayerAddress DHCPv6Opt = 79
+
+ // RFC 6977 Triggering DHCPv6 Reconfiguration from Relay Agents
+ DHCPv6OptLinkAddress DHCPv6Opt = 80
+
+ // RFC 7037 RADIUS Option for the DHCPv6 Relay Agent
+ DHCPv6OptRADIUS DHCPv6Opt = 81
+
+ // RFC 7083 Modification to Default Values of SOL_MAX_RT and INF_MAX_RT
+ DHCPv6OptSolMaxRt DHCPv6Opt = 82
+ DHCPv6OptInfMaxRt DHCPv6Opt = 83
+
+ // RFC 7078 Distributing Address Selection Policy
+ DHCPv6OptAddrSel DHCPv6Opt = 84
+ DHCPv6OptAddrSelTable DHCPv6Opt = 85
+
+ // RFC 7291 DHCP Options for the Port Control Protocol (PCP)
+ DHCPv6OptV6PCPServer DHCPv6Opt = 86
+
+ // RFC 7341 DHCPv4-over-DHCPv6 (DHCP 4o6) Transport
+ DHCPv6OptDHCPv4Message DHCPv6Opt = 87
+ DHCPv6OptDHCPv4OverDHCPv6Server DHCPv6Opt = 88
+
+ // RFC 7598 Configuration of Softwire Address and Port-Mapped Clients
+ DHCPv6OptS46Rule DHCPv6Opt = 89
+ DHCPv6OptS46BR DHCPv6Opt = 90
+ DHCPv6OptS46DMR DHCPv6Opt = 91
+ DHCPv6OptS46V4V4Bind DHCPv6Opt = 92
+ DHCPv6OptS46PortParameters DHCPv6Opt = 93
+ DHCPv6OptS46ContMAPE DHCPv6Opt = 94
+ DHCPv6OptS46ContMAPT DHCPv6Opt = 95
+ DHCPv6OptS46ContLW DHCPv6Opt = 96
+
+ // RFC 7600 IPv4 Residual Deployment via IPv6
+ DHCPv6Opt4RD DHCPv6Opt = 97
+ DHCPv6Opt4RDMapRule DHCPv6Opt = 98
+ DHCPv6Opt4RDNonMapRule DHCPv6Opt = 99
+
+ // RFC 7653 Active Leasequery
+ DHCPv6OptLQBaseTime DHCPv6Opt = 100
+ DHCPv6OptLQStartTime DHCPv6Opt = 101
+ DHCPv6OptLQEndTime DHCPv6Opt = 102
+
+ // RFC 7710 Captive-Portal Identification
+ DHCPv6OptCaptivePortal DHCPv6Opt = 103
+
+ // RFC 7774 Multicast Protocol for Low-Power and Lossy Networks (MPL) Parameter Configuration
+ DHCPv6OptMPLParameters DHCPv6Opt = 104
+
+ // RFC 7839 Access-Network-Identifier (ANI)
+ DHCPv6OptANIATT DHCPv6Opt = 105
+ DHCPv6OptANINetworkName DHCPv6Opt = 106
+ DHCPv6OptANIAPName DHCPv6Opt = 107
+ DHCPv6OptANIAPBSSID DHCPv6Opt = 108
+ DHCPv6OptANIOperatorID DHCPv6Opt = 109
+ DHCPv6OptANIOperatorRealm DHCPv6Opt = 110
+
+ // RFC 8026 Unified IPv4-in-IPv6 Softwire Customer Premises Equipment (CPE)
+ DHCPv6OptS46Priority DHCPv6Opt = 111
+
+ // draft-ietf-opsawg-mud-25 Manufacturer Usage Description (MUD)
+ DHCPv6OptMUDURLV6 DHCPv6Opt = 112
+
+ // RFC 8115 IPv4-Embedded Multicast and Unicast IPv6 Prefixes
+ DHCPv6OptV6Prefix64 DHCPv6Opt = 113
+
+ // RFC 8156 DHCPv6 Failover Protocol
+ DHCPv6OptFBindingStatus DHCPv6Opt = 114
+ DHCPv6OptFConnectFlags DHCPv6Opt = 115
+ DHCPv6OptFDNSRemovalInfo DHCPv6Opt = 116
+ DHCPv6OptFDNSHostName DHCPv6Opt = 117
+ DHCPv6OptFDNSZoneName DHCPv6Opt = 118
+ DHCPv6OptFDNSFlags DHCPv6Opt = 119
+ DHCPv6OptFExpirationTime DHCPv6Opt = 120
+ DHCPv6OptFMaxUnacknowledgedBNDUPD DHCPv6Opt = 121
+ DHCPv6OptFMCLT DHCPv6Opt = 122
+ DHCPv6OptFPartnerLifetime DHCPv6Opt = 123
+ DHCPv6OptFPartnerLifetimeSent DHCPv6Opt = 124
+ DHCPv6OptFPartnerDownTime DHCPv6Opt = 125
+ DHCPv6OptFPartnerRawCltTime DHCPv6Opt = 126
+ DHCPv6OptFProtocolVersion DHCPv6Opt = 127
+ DHCPv6OptFKeepaliveTime DHCPv6Opt = 128
+ DHCPv6OptFReconfigureData DHCPv6Opt = 129
+ DHCPv6OptFRelationshipName DHCPv6Opt = 130
+ DHCPv6OptFServerFlags DHCPv6Opt = 131
+ DHCPv6OptFServerState DHCPv6Opt = 132
+ DHCPv6OptFStartTimeOfState DHCPv6Opt = 133
+ DHCPv6OptFStateExpirationTime DHCPv6Opt = 134
+
+ // RFC 8357 Generalized UDP Source Port for DHCP Relay
+ DHCPv6OptRelayPort DHCPv6Opt = 135
+
+ // draft-ietf-netconf-zerotouch-25 Zero Touch Provisioning for Networking Devices
+ DHCPv6OptV6ZeroTouchRedirect DHCPv6Opt = 136
+
+ // RFC 6153 Access Network Discovery and Selection Function (ANDSF) Discovery
+ DHCPv6OptIPV6AddressANDSF DHCPv6Opt = 143
+)
+
+// String returns a string version of a DHCPv6Opt.
+func (o DHCPv6Opt) String() string {
+ switch o {
+ case DHCPv6OptClientID:
+ return "ClientID"
+ case DHCPv6OptServerID:
+ return "ServerID"
+ case DHCPv6OptIANA:
+ return "IA_NA"
+ case DHCPv6OptIATA:
+ return "IA_TA"
+ case DHCPv6OptIAAddr:
+ return "IAAddr"
+ case DHCPv6OptOro:
+ return "Oro"
+ case DHCPv6OptPreference:
+ return "Preference"
+ case DHCPv6OptElapsedTime:
+ return "ElapsedTime"
+ case DHCPv6OptRelayMessage:
+ return "RelayMessage"
+ case DHCPv6OptAuth:
+ return "Auth"
+ case DHCPv6OptUnicast:
+ return "Unicast"
+ case DHCPv6OptStatusCode:
+ return "StatusCode"
+ case DHCPv6OptRapidCommit:
+ return "RapidCommit"
+ case DHCPv6OptUserClass:
+ return "UserClass"
+ case DHCPv6OptVendorClass:
+ return "VendorClass"
+ case DHCPv6OptVendorOpts:
+ return "VendorOpts"
+ case DHCPv6OptInterfaceID:
+ return "InterfaceID"
+ case DHCPv6OptReconfigureMessage:
+ return "ReconfigureMessage"
+ case DHCPv6OptReconfigureAccept:
+ return "ReconfigureAccept"
+ case DHCPv6OptSIPServersDomainList:
+ return "SIPServersDomainList"
+ case DHCPv6OptSIPServersAddressList:
+ return "SIPServersAddressList"
+ case DHCPv6OptDNSServers:
+ return "DNSRecursiveNameServer"
+ case DHCPv6OptDomainList:
+ return "DomainSearchList"
+ case DHCPv6OptIAPD:
+ return "IdentityAssociationPrefixDelegation"
+ case DHCPv6OptIAPrefix:
+ return "IAPDPrefix"
+ case DHCPv6OptNISServers:
+ return "NISServers"
+ case DHCPv6OptNISPServers:
+ return "NISv2Servers"
+ case DHCPv6OptNISDomainName:
+ return "NISDomainName"
+ case DHCPv6OptNISPDomainName:
+ return "NISv2DomainName"
+ case DHCPv6OptSNTPServers:
+ return "SNTPServers"
+ case DHCPv6OptInformationRefreshTime:
+ return "InformationRefreshTime"
+ case DHCPv6OptBCMCSServerDomainNameList:
+ return "BCMCSControlServersDomainNameList"
+ case DHCPv6OptBCMCSServerAddressList:
+ return "BCMCSControlServersAddressList"
+ case DHCPv6OptGeoconfCivic:
+ return "CivicAddress"
+ case DHCPv6OptRemoteID:
+ return "RelayAgentRemoteID"
+ case DHCPv6OptSubscriberID:
+ return "RelayAgentSubscriberID"
+ case DHCPv6OptClientFQDN:
+ return "ClientFQDN"
+ case DHCPv6OptPanaAgent:
+ return "PANAAuthenticationAgent"
+ case DHCPv6OptNewPOSIXTimezone:
+ return "NewPOSIXTimezone"
+ case DHCPv6OptNewTZDBTimezone:
+ return "NewTZDBTimezone"
+ case DHCPv6OptEchoRequestOption:
+ return "EchoRequest"
+ case DHCPv6OptLQQuery:
+ return "LeasequeryQuery"
+ case DHCPv6OptClientData:
+ return "LeasequeryClientData"
+ case DHCPv6OptCLTTime:
+ return "LeasequeryClientLastTransactionTime"
+ case DHCPv6OptLQRelayData:
+ return "LeasequeryRelayData"
+ case DHCPv6OptLQClientLink:
+ return "LeasequeryClientLink"
+ case DHCPv6OptMIP6HNIDF:
+ return "MIPv6HomeNetworkIDFQDN"
+ case DHCPv6OptMIP6VDINF:
+ return "MIPv6VisitedHomeNetworkInformation"
+ case DHCPv6OptMIP6IDINF:
+ return "MIPv6IdentifiedHomeNetworkInformation"
+ case DHCPv6OptMIP6UDINF:
+ return "MIPv6UnrestrictedHomeNetworkInformation"
+ case DHCPv6OptMIP6HNP:
+ return "MIPv6HomeNetworkPrefix"
+ case DHCPv6OptMIP6HAA:
+ return "MIPv6HomeAgentAddress"
+ case DHCPv6OptMIP6HAF:
+ return "MIPv6HomeAgentFQDN"
+ case DHCPv6OptV6LOST:
+ return "LoST Server"
+ case DHCPv6OptCAPWAPACV6:
+ return "CAPWAPAccessControllerV6"
+ case DHCPv6OptRelayID:
+ return "LeasequeryRelayID"
+ case DHCPv6OptIPv6AddressMoS:
+ return "MoSIPv6Address"
+ case DHCPv6OptIPv6FQDNMoS:
+ return "MoSDomainNameList"
+ case DHCPv6OptNTPServer:
+ return "NTPServer"
+ case DHCPv6OptV6AccessDomain:
+ return "AccessNetworkDomainName"
+ case DHCPv6OptSIPUACSList:
+ return "SIPUserAgentConfigurationServiceDomains"
+ case DHCPv6OptBootFileURL:
+ return "BootFileURL"
+ case DHCPv6OptBootFileParam:
+ return "BootFileParameters"
+ case DHCPv6OptClientArchType:
+ return "ClientSystemArchitectureType"
+ case DHCPv6OptNII:
+ return "ClientNetworkInterfaceIdentifier"
+ case DHCPv6OptGeolocation:
+ return "Geolocation"
+ case DHCPv6OptAFTRName:
+ return "AFTRName"
+ case DHCPv6OptERPLocalDomainName:
+ return "AFTRName"
+ case DHCPv6OptRSOO:
+ return "RSOOption"
+ case DHCPv6OptPDExclude:
+ return "PrefixExclude"
+ case DHCPv6OptVSS:
+ return "VirtualSubnetSelection"
+ case DHCPv6OptRDNSSSelection:
+ return "RDNSSSelection"
+ case DHCPv6OptKRBPrincipalName:
+ return "KerberosPrincipalName"
+ case DHCPv6OptKRBRealmName:
+ return "KerberosRealmName"
+ case DHCPv6OptKRBKDC:
+ return "KerberosKDC"
+ case DHCPv6OptClientLinkLayerAddress:
+ return "ClientLinkLayerAddress"
+ case DHCPv6OptLinkAddress:
+ return "LinkAddress"
+ case DHCPv6OptRADIUS:
+ return "RADIUS"
+ case DHCPv6OptSolMaxRt:
+ return "SolMaxRt"
+ case DHCPv6OptInfMaxRt:
+ return "InfMaxRt"
+ case DHCPv6OptAddrSel:
+ return "AddressSelection"
+ case DHCPv6OptAddrSelTable:
+ return "AddressSelectionTable"
+ case DHCPv6OptV6PCPServer:
+ return "PCPServer"
+ case DHCPv6OptDHCPv4Message:
+ return "DHCPv4Message"
+ case DHCPv6OptDHCPv4OverDHCPv6Server:
+ return "DHCP4o6ServerAddress"
+ case DHCPv6OptS46Rule:
+ return "S46Rule"
+ case DHCPv6OptS46BR:
+ return "S46BR"
+ case DHCPv6OptS46DMR:
+ return "S46DMR"
+ case DHCPv6OptS46V4V4Bind:
+ return "S46IPv4IPv6AddressBinding"
+ case DHCPv6OptS46PortParameters:
+ return "S46PortParameters"
+ case DHCPv6OptS46ContMAPE:
+ return "S46MAPEContainer"
+ case DHCPv6OptS46ContMAPT:
+ return "S46MAPTContainer"
+ case DHCPv6OptS46ContLW:
+ return "S46Lightweight4Over6Container"
+ case DHCPv6Opt4RD:
+ return "4RD"
+ case DHCPv6Opt4RDMapRule:
+ return "4RDMapRule"
+ case DHCPv6Opt4RDNonMapRule:
+ return "4RDNonMapRule"
+ case DHCPv6OptLQBaseTime:
+ return "LQBaseTime"
+ case DHCPv6OptLQStartTime:
+ return "LQStartTime"
+ case DHCPv6OptLQEndTime:
+ return "LQEndTime"
+ case DHCPv6OptCaptivePortal:
+ return "CaptivePortal"
+ case DHCPv6OptMPLParameters:
+ return "MPLParameterConfiguration"
+ case DHCPv6OptANIATT:
+ return "ANIAccessTechnologyType"
+ case DHCPv6OptANINetworkName:
+ return "ANINetworkName"
+ case DHCPv6OptANIAPName:
+ return "ANIAccessPointName"
+ case DHCPv6OptANIAPBSSID:
+ return "ANIAccessPointBSSID"
+ case DHCPv6OptANIOperatorID:
+ return "ANIOperatorIdentifier"
+ case DHCPv6OptANIOperatorRealm:
+ return "ANIOperatorRealm"
+ case DHCPv6OptS46Priority:
+ return "S64Priority"
+ case DHCPv6OptMUDURLV6:
+ return "ManufacturerUsageDescriptionURL"
+ case DHCPv6OptV6Prefix64:
+ return "V6Prefix64"
+ case DHCPv6OptFBindingStatus:
+ return "FailoverBindingStatus"
+ case DHCPv6OptFConnectFlags:
+ return "FailoverConnectFlags"
+ case DHCPv6OptFDNSRemovalInfo:
+ return "FailoverDNSRemovalInfo"
+ case DHCPv6OptFDNSHostName:
+ return "FailoverDNSHostName"
+ case DHCPv6OptFDNSZoneName:
+ return "FailoverDNSZoneName"
+ case DHCPv6OptFDNSFlags:
+ return "FailoverDNSFlags"
+ case DHCPv6OptFExpirationTime:
+ return "FailoverExpirationTime"
+ case DHCPv6OptFMaxUnacknowledgedBNDUPD:
+ return "FailoverMaxUnacknowledgedBNDUPDMessages"
+ case DHCPv6OptFMCLT:
+ return "FailoverMaximumClientLeadTime"
+ case DHCPv6OptFPartnerLifetime:
+ return "FailoverPartnerLifetime"
+ case DHCPv6OptFPartnerLifetimeSent:
+ return "FailoverPartnerLifetimeSent"
+ case DHCPv6OptFPartnerDownTime:
+ return "FailoverPartnerDownTime"
+ case DHCPv6OptFPartnerRawCltTime:
+ return "FailoverPartnerRawClientLeadTime"
+ case DHCPv6OptFProtocolVersion:
+ return "FailoverProtocolVersion"
+ case DHCPv6OptFKeepaliveTime:
+ return "FailoverKeepaliveTime"
+ case DHCPv6OptFReconfigureData:
+ return "FailoverReconfigureData"
+ case DHCPv6OptFRelationshipName:
+ return "FailoverRelationshipName"
+ case DHCPv6OptFServerFlags:
+ return "FailoverServerFlags"
+ case DHCPv6OptFServerState:
+ return "FailoverServerState"
+ case DHCPv6OptFStartTimeOfState:
+ return "FailoverStartTimeOfState"
+ case DHCPv6OptFStateExpirationTime:
+ return "FailoverStateExpirationTime"
+ case DHCPv6OptRelayPort:
+ return "RelayPort"
+ case DHCPv6OptV6ZeroTouchRedirect:
+ return "ZeroTouch"
+ case DHCPv6OptIPV6AddressANDSF:
+ return "ANDSFIPv6Address"
+ default:
+ return fmt.Sprintf("Unknown(%d)", uint16(o))
+ }
+}
+
+// DHCPv6Options is used to get nicely printed option lists which would normally
+// be cut off after 5 options.
+type DHCPv6Options []DHCPv6Option
+
+// String returns a string version of the options list.
+func (o DHCPv6Options) 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()
+}
+
+// DHCPv6Option rerpresents a DHCP option.
+type DHCPv6Option struct {
+ Code DHCPv6Opt
+ Length uint16
+ Data []byte
+}
+
+// String returns a string version of a DHCP Option.
+func (o DHCPv6Option) String() string {
+ switch o.Code {
+ case DHCPv6OptClientID, DHCPv6OptServerID:
+ duid, err := decodeDHCPv6DUID(o.Data)
+ if err != nil {
+ return fmt.Sprintf("Option(%s:INVALID)", o.Code)
+ }
+ return fmt.Sprintf("Option(%s:[%s])", o.Code, duid.String())
+ case DHCPv6OptOro:
+ options := ""
+ for i := 0; i < int(o.Length); i += 2 {
+ if options != "" {
+ options += ","
+ }
+ option := DHCPv6Opt(binary.BigEndian.Uint16(o.Data[i : i+2]))
+ options += option.String()
+ }
+ return fmt.Sprintf("Option(%s:[%s])", o.Code, options)
+ default:
+ return fmt.Sprintf("Option(%s:%v)", o.Code, o.Data)
+ }
+}
+
+// NewDHCPv6Option constructs a new DHCPv6Option with a given type and data.
+func NewDHCPv6Option(code DHCPv6Opt, data []byte) DHCPv6Option {
+ o := DHCPv6Option{Code: code}
+ if data != nil {
+ o.Data = data
+ o.Length = uint16(len(data))
+ }
+
+ return o
+}
+
+func (o *DHCPv6Option) encode(b []byte, opts gopacket.SerializeOptions) error {
+ binary.BigEndian.PutUint16(b[0:2], uint16(o.Code))
+ if opts.FixLengths {
+ binary.BigEndian.PutUint16(b[2:4], uint16(len(o.Data)))
+ } else {
+ binary.BigEndian.PutUint16(b[2:4], o.Length)
+ }
+ copy(b[4:], o.Data)
+
+ return nil
+}
+
+func (o *DHCPv6Option) decode(data []byte) error {
+ if len(data) < 2 {
+ return errors.New("not enough data to decode")
+ }
+ o.Code = DHCPv6Opt(binary.BigEndian.Uint16(data[0:2]))
+ if len(data) < 3 {
+ return errors.New("not enough data to decode")
+ }
+ o.Length = binary.BigEndian.Uint16(data[2:4])
+ o.Data = data[4 : 4+o.Length]
+ return nil
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6_test.go
new file mode 100644
index 00000000000..58fb4452b87
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dhcpv6_test.go
@@ -0,0 +1,93 @@
+// Copyright 2018, 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"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+func TestDHCPv6EncodeRequest(t *testing.T) {
+ dhcpv6 := &DHCPv6{MsgType: DHCPv6MsgTypeRequest, HopCount: 0, TransactionID: []byte{87, 25, 88}}
+
+ client := &DHCPv6DUID{Type: DHCPv6DUIDTypeLLT, HardwareType: []byte{0, 1}, Time: []byte{28, 56, 38, 45}, LinkLayerAddress: []byte{8, 0, 39, 254, 143, 149}}
+ dhcpv6.Options = append(dhcpv6.Options, NewDHCPv6Option(DHCPv6OptClientID, client.Encode()))
+
+ server := &DHCPv6DUID{Type: DHCPv6DUIDTypeLLT, HardwareType: []byte{0, 1}, Time: []byte{28, 56, 37, 232}, LinkLayerAddress: []byte{8, 0, 39, 212, 16, 187}}
+ dhcpv6.Options = append(dhcpv6.Options, NewDHCPv6Option(DHCPv6OptServerID, server.Encode()))
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err := gopacket.SerializeLayers(buf, opts, dhcpv6)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv6, testDecodeOptions)
+ dhcpv62 := p2.Layer(LayerTypeDHCPv6).(*DHCPv6)
+ testDHCPv6Equal(t, dhcpv6, dhcpv62)
+}
+
+func TestDHCPv6EncodeReply(t *testing.T) {
+ dhcpv6 := &DHCPv6{MsgType: DHCPv6MsgTypeReply, HopCount: 0, TransactionID: []byte{87, 25, 88}}
+
+ client := &DHCPv6DUID{Type: DHCPv6DUIDTypeLLT, HardwareType: []byte{0, 1}, Time: []byte{28, 56, 38, 45}, LinkLayerAddress: []byte{8, 0, 39, 254, 143, 149}}
+ dhcpv6.Options = append(dhcpv6.Options, NewDHCPv6Option(DHCPv6OptClientID, client.Encode()))
+
+ server := &DHCPv6DUID{Type: DHCPv6DUIDTypeLLT, HardwareType: []byte{0, 1}, Time: []byte{28, 56, 37, 232}, LinkLayerAddress: []byte{8, 0, 39, 212, 16, 187}}
+ dhcpv6.Options = append(dhcpv6.Options, NewDHCPv6Option(DHCPv6OptServerID, server.Encode()))
+
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{FixLengths: true}
+ err := gopacket.SerializeLayers(buf, opts, dhcpv6)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv6, testDecodeOptions)
+ dhcpv62 := p2.Layer(LayerTypeDHCPv6).(*DHCPv6)
+ testDHCPv6Equal(t, dhcpv6, dhcpv62)
+}
+
+func testDHCPv6Equal(t *testing.T, d1, d2 *DHCPv6) {
+ if d1.MsgType != d2.MsgType {
+ t.Errorf("expected MsgType=%s, got %s", d1.MsgType, d2.MsgType)
+ }
+ if d1.HopCount != d2.HopCount {
+ t.Errorf("expected HopCount=%d, got %d", d1.HopCount, d2.HopCount)
+ }
+ if !d1.LinkAddr.Equal(d2.LinkAddr) {
+ t.Errorf("expected LinkAddr=%v, got %v", d1.LinkAddr, d2.LinkAddr)
+ }
+ if !d1.PeerAddr.Equal(d2.PeerAddr) {
+ t.Errorf("expected PeerAddr=%v, got %v", d1.PeerAddr, d2.PeerAddr)
+ }
+ if !bytes.Equal(d1.TransactionID, d2.TransactionID) {
+ t.Errorf("expected TransactionID=%v, got %v", d1.TransactionID, d2.TransactionID)
+ }
+ 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 {
+ testDHCPv6OptionEqual(t, i, o, d2.Options[i])
+ }
+}
+
+func testDHCPv6OptionEqual(t *testing.T, idx int, d1, d2 DHCPv6Option) {
+ if d1.Code != d2.Code {
+ t.Errorf("expection Options[%d].Code = %s, got %s", idx, d1.Code, d2.Code)
+ }
+ if d1.Length != d2.Length {
+ t.Errorf("expection Options[%d].Length = %d, got %d", idx, d1.Length, d2.Length)
+ }
+ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dns.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dns.go
index 0b9b812baf3..eae36dbbc4a 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dns.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dns.go
@@ -10,12 +10,16 @@ import (
"encoding/binary"
"errors"
"fmt"
- "github.com/google/gopacket"
"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)
@@ -24,8 +28,28 @@ const (
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
@@ -47,9 +71,55 @@ const (
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]
@@ -74,6 +144,8 @@ func (drc DNSResponseCode) String() string {
switch drc {
default:
return "Unknown"
+ case DNSResponseCodeNoErr:
+ return "No Error"
case DNSResponseCodeFormErr:
return "Format Error"
case DNSResponseCodeServFail:
@@ -111,8 +183,10 @@ func (drc DNSResponseCode) String() string {
}
}
+// 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]
@@ -121,6 +195,23 @@ const (
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 |
@@ -163,7 +254,7 @@ type DNS struct {
TC bool // Truncated
RD bool // Recursion desired
RA bool // Recursion available
- Z uint8 // Resrved for future use
+ Z uint8 // Reserved for future use
ResponseCode DNSResponseCode
QDCount uint16 // Number of questions to expect
@@ -205,7 +296,7 @@ func (d *DNS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
if len(data) < 12 {
df.SetTruncated()
- return fmt.Errorf("DNS packet too short")
+ return errDNSPacketTooShort
}
// since there are no further layers, the baselayer's content is
@@ -275,36 +366,153 @@ func (d *DNS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
}
if uint16(len(d.Questions)) != d.QDCount {
- return errors.New("Invalid query decoding, not the right number of questions")
+ return errDecodeQueryBadQDCount
} else if uint16(len(d.Answers)) != d.ANCount {
- return errors.New("Invalid query decoding, not the right number of answers")
+ return errDecodeQueryBadANCount
} else if uint16(len(d.Authorities)) != d.NSCount {
- return errors.New("Invalid query decoding, not the right number of authorities")
+ return errDecodeQueryBadNSCount
} else if uint16(len(d.Additionals)) != d.ARCount {
- return errors.New("Invalid query decoding, not the right number of additionals info")
+ return errDecodeQueryBadARCount
}
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
}
-var maxRecursion = errors.New("max DNS recursion level hit")
+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) + 12
+ 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
+}
const maxRecursionLevel = 255
func decodeName(data []byte, offset int, buffer *[]byte, level int) ([]byte, int, error) {
if level > maxRecursionLevel {
- return nil, 0, maxRecursion
+ return nil, 0, errMaxRecursion
+ } else if offset >= len(data) {
+ return nil, 0, errDNSNameOffsetTooHigh
+ } else if offset < 0 {
+ return nil, 0, errDNSNameOffsetNegative
}
start := len(*buffer)
index := offset
@@ -325,8 +533,9 @@ loop:
*/
index2 := index + int(data[index]) + 1
if index2-offset > 255 {
- return nil, 0,
- fmt.Errorf("dns name is too long")
+ return nil, 0, errDNSNameTooLong
+ } else if index2 < index+1 || index2 > len(data) {
+ return nil, 0, errDNSNameInvalidIndex
}
*buffer = append(*buffer, '.')
*buffer = append(*buffer, data[index+1:index2]...)
@@ -352,8 +561,13 @@ loop:
- a pointer
- a sequence of labels ending with a pointer
*/
-
+ if index+2 > len(data) {
+ return nil, 0, errDNSPointerOffsetTooHigh
+ }
offsetp := int(binary.BigEndian.Uint16(data[index:index+2]) & 0x3fff)
+ if offsetp > len(data) {
+ return nil, 0, errDNSPointerOffsetTooHigh
+ }
// 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
@@ -373,10 +587,17 @@ loop:
return nil, 0, fmt.Errorf("qname '0x80' unsupported yet (data=%x index=%d)",
data[index], index)
}
+ if index >= len(data) {
+ return nil, 0, errDNSIndexOutOfRange
+ }
+ }
+ if len(*buffer) <= start {
+ return nil, 0, errDNSNameHasNoData
}
return (*buffer)[start+1:], index + 1, nil
}
+// DNSQuestion wraps a single request (question) within a DNS query.
type DNSQuestion struct {
Name []byte
Type DNSType
@@ -396,6 +617,13 @@ func (q *DNSQuestion) decode(data []byte, offset int, df gopacket.DecodeFeedback
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
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
@@ -417,6 +645,8 @@ func (q *DNSQuestion) decode(data []byte, offset int, df gopacket.DecodeFeedback
// / /
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// DNSResourceRecord wraps the data from a single DNS resource within a
+// response.
type DNSResourceRecord struct {
// Header
Name []byte
@@ -452,7 +682,11 @@ func (rr *DNSResourceRecord) decode(data []byte, offset int, df gopacket.DecodeF
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])
- rr.Data = data[endq+10 : endq+10+int(rr.DataLength)]
+ end := endq + 10 + int(rr.DataLength)
+ if end > len(data) {
+ return 0, errDecodeRecordLength
+ }
+ rr.Data = data[endq+10 : end]
if err = rr.decodeRData(data, endq+10, buffer); err != nil {
return 0, err
@@ -461,11 +695,99 @@ func (rr *DNSResourceRecord) decode(data []byte, offset int, df gopacket.DecodeF
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) && ((rr.Type == DNSTypeA) || (rr.Type == DNSTypeAAAA)) {
- return net.IP(rr.Data).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 "..."
+
+ return fmt.Sprintf("<%v, %v>", rr.Class, rr.Type)
}
func decodeCharacterStrings(data []byte) ([][]byte, error) {
@@ -474,7 +796,7 @@ func decodeCharacterStrings(data []byte) ([][]byte, error) {
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>")
+ return nil, errCharStringMissData
}
strings = append(strings, data[index+1:index2])
}
@@ -548,17 +870,45 @@ func (rr *DNSResourceRecord) decodeRData(data []byte, offset int, buffer *[]byte
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
}
+
+var (
+ errMaxRecursion = errors.New("max DNS recursion level hit")
+
+ errDNSNameOffsetTooHigh = errors.New("dns name offset too high")
+ errDNSNameOffsetNegative = errors.New("dns name offset is negative")
+ errDNSPacketTooShort = errors.New("DNS packet too short")
+ errDNSNameTooLong = errors.New("dns name is too long")
+ errDNSNameInvalidIndex = errors.New("dns name uncomputable: invalid index")
+ errDNSPointerOffsetTooHigh = errors.New("dns offset pointer too high")
+ errDNSIndexOutOfRange = errors.New("dns index walked out of range")
+ errDNSNameHasNoData = errors.New("no dns data found for name")
+
+ errCharStringMissData = errors.New("Insufficient data for a <character-string>")
+
+ errDecodeRecordLength = errors.New("resource record length exceeds data")
+
+ errDecodeQueryBadQDCount = errors.New("Invalid query decoding, not the right number of questions")
+ errDecodeQueryBadANCount = errors.New("Invalid query decoding, not the right number of answers")
+ errDecodeQueryBadNSCount = errors.New("Invalid query decoding, not the right number of authorities")
+ errDecodeQueryBadARCount = errors.New("Invalid query decoding, not the right number of additionals info")
+)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dns_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dns_test.go
new file mode 100644
index 00000000000..f839195454d
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dns_test.go
@@ -0,0 +1,870 @@
+// 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)
+ }
+}
+
+func TestDNSPacketWriteAnswer(t *testing.T) {
+ dns := &DNS{ID: 0x1234, QR: true, OpCode: DNSOpCodeQuery, ResponseCode: DNSResponseCodeNoErr, Answers: []DNSResourceRecord{
+ DNSResourceRecord{
+ Name: []byte("www.example.com"),
+ Type: DNSTypeA,
+ Class: DNSClassIN,
+ IP: net.IPv4(127, 0, 0, 1),
+ },
+ DNSResourceRecord{
+ Name: []byte("www.example.com"),
+ Type: DNSTypeAAAA,
+ Class: DNSClassIN,
+ IP: net.IP{15: 1},
+ },
+ }}
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{ComputeChecksums: true, FixLengths: true}
+ if err := gopacket.SerializeLayers(buf, opts, dns); err != nil {
+ t.Fatal(err)
+ }
+ dns2 := &DNS{}
+ if err := dns2.DecodeFromBytes(buf.Bytes(), gopacket.NilDecodeFeedback); err != nil {
+ t.Fatalf("could not decode: %v", err)
+ }
+ if want, got := 2, len(dns2.Answers); want != got {
+ t.Fatalf("num answers, want %d got %d", want, got)
+ } else if got, want := string(dns2.Answers[0].Name), "www.example.com"; got != want {
+ t.Fatalf("unexpected first answer name %q, want %q", got, want)
+ } else if got, want := string(dns2.Answers[1].Name), "www.example.com"; got != want {
+ t.Fatalf("unexpected second answer name %q, want %q", got, want)
+ }
+ t.Log(gopacket.LayerString(dns2))
+ if want, got := 86, len(buf.Bytes()); want != got {
+ t.Fatalf("Encoded size, want %d got %d", want, got)
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11.go
index fdf949e101d..3843d70bd20 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11.go
@@ -13,9 +13,10 @@ import (
"bytes"
"encoding/binary"
"fmt"
- "github.com/google/gopacket"
"hash/crc32"
"net"
+
+ "github.com/google/gopacket"
)
// Dot11Flags contains the set of 8 flags in the IEEE 802.11 frame control
@@ -239,24 +240,178 @@ func (a Dot11Algorithm) String() string {
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
+ Dot11InformationElementIDSSID Dot11InformationElementID = 0
+ Dot11InformationElementIDRates Dot11InformationElementID = 1
+ Dot11InformationElementIDFHSet Dot11InformationElementID = 2
+ Dot11InformationElementIDDSSet Dot11InformationElementID = 3
+ Dot11InformationElementIDCFSet Dot11InformationElementID = 4
+ Dot11InformationElementIDTIM Dot11InformationElementID = 5
+ Dot11InformationElementIDIBSSSet Dot11InformationElementID = 6
+ Dot11InformationElementIDCountryInfo Dot11InformationElementID = 7
+ Dot11InformationElementIDHoppingPatternParam Dot11InformationElementID = 8
+ Dot11InformationElementIDHoppingPatternTable Dot11InformationElementID = 9
+ Dot11InformationElementIDRequest Dot11InformationElementID = 10
+ Dot11InformationElementIDQBSSLoadElem Dot11InformationElementID = 11
+ Dot11InformationElementIDEDCAParamSet Dot11InformationElementID = 12
+ Dot11InformationElementIDTrafficSpec Dot11InformationElementID = 13
+ Dot11InformationElementIDTrafficClass Dot11InformationElementID = 14
+ Dot11InformationElementIDSchedule Dot11InformationElementID = 15
+ Dot11InformationElementIDChallenge Dot11InformationElementID = 16
+ Dot11InformationElementIDPowerConst Dot11InformationElementID = 32
+ Dot11InformationElementIDPowerCapability Dot11InformationElementID = 33
+ Dot11InformationElementIDTPCRequest Dot11InformationElementID = 34
+ Dot11InformationElementIDTPCReport Dot11InformationElementID = 35
+ Dot11InformationElementIDSupportedChannels Dot11InformationElementID = 36
+ Dot11InformationElementIDSwitchChannelAnnounce Dot11InformationElementID = 37
+ Dot11InformationElementIDMeasureRequest Dot11InformationElementID = 38
+ Dot11InformationElementIDMeasureReport Dot11InformationElementID = 39
+ Dot11InformationElementIDQuiet Dot11InformationElementID = 40
+ Dot11InformationElementIDIBSSDFS Dot11InformationElementID = 41
+ Dot11InformationElementIDERPInfo Dot11InformationElementID = 42
+ Dot11InformationElementIDTSDelay Dot11InformationElementID = 43
+ Dot11InformationElementIDTCLASProcessing Dot11InformationElementID = 44
+ Dot11InformationElementIDHTCapabilities Dot11InformationElementID = 45
+ Dot11InformationElementIDQOSCapability Dot11InformationElementID = 46
+ Dot11InformationElementIDERPInfo2 Dot11InformationElementID = 47
+ Dot11InformationElementIDRSNInfo Dot11InformationElementID = 48
+ Dot11InformationElementIDESRates Dot11InformationElementID = 50
+ Dot11InformationElementIDAPChannelReport Dot11InformationElementID = 51
+ Dot11InformationElementIDNeighborReport Dot11InformationElementID = 52
+ Dot11InformationElementIDRCPI Dot11InformationElementID = 53
+ Dot11InformationElementIDMobilityDomain Dot11InformationElementID = 54
+ Dot11InformationElementIDFastBSSTrans Dot11InformationElementID = 55
+ Dot11InformationElementIDTimeoutInt Dot11InformationElementID = 56
+ Dot11InformationElementIDRICData Dot11InformationElementID = 57
+ Dot11InformationElementIDDSERegisteredLoc Dot11InformationElementID = 58
+ Dot11InformationElementIDSuppOperatingClass Dot11InformationElementID = 59
+ Dot11InformationElementIDExtChanSwitchAnnounce Dot11InformationElementID = 60
+ Dot11InformationElementIDHTInfo Dot11InformationElementID = 61
+ Dot11InformationElementIDSecChanOffset Dot11InformationElementID = 62
+ Dot11InformationElementIDBSSAverageAccessDelay Dot11InformationElementID = 63
+ Dot11InformationElementIDAntenna Dot11InformationElementID = 64
+ Dot11InformationElementIDRSNI Dot11InformationElementID = 65
+ Dot11InformationElementIDMeasurePilotTrans Dot11InformationElementID = 66
+ Dot11InformationElementIDBSSAvailAdmCapacity Dot11InformationElementID = 67
+ Dot11InformationElementIDBSSACAccDelayWAPIParam Dot11InformationElementID = 68
+ Dot11InformationElementIDTimeAdvertisement Dot11InformationElementID = 69
+ Dot11InformationElementIDRMEnabledCapabilities Dot11InformationElementID = 70
+ Dot11InformationElementIDMultipleBSSID Dot11InformationElementID = 71
+ Dot11InformationElementID2040BSSCoExist Dot11InformationElementID = 72
+ Dot11InformationElementID2040BSSIntChanReport Dot11InformationElementID = 73
+ Dot11InformationElementIDOverlapBSSScanParam Dot11InformationElementID = 74
+ Dot11InformationElementIDRICDescriptor Dot11InformationElementID = 75
+ Dot11InformationElementIDManagementMIC Dot11InformationElementID = 76
+ Dot11InformationElementIDEventRequest Dot11InformationElementID = 78
+ Dot11InformationElementIDEventReport Dot11InformationElementID = 79
+ Dot11InformationElementIDDiagnosticRequest Dot11InformationElementID = 80
+ Dot11InformationElementIDDiagnosticReport Dot11InformationElementID = 81
+ Dot11InformationElementIDLocationParam Dot11InformationElementID = 82
+ Dot11InformationElementIDNonTransBSSIDCapability Dot11InformationElementID = 83
+ Dot11InformationElementIDSSIDList Dot11InformationElementID = 84
+ Dot11InformationElementIDMultipleBSSIDIndex Dot11InformationElementID = 85
+ Dot11InformationElementIDFMSDescriptor Dot11InformationElementID = 86
+ Dot11InformationElementIDFMSRequest Dot11InformationElementID = 87
+ Dot11InformationElementIDFMSResponse Dot11InformationElementID = 88
+ Dot11InformationElementIDQOSTrafficCapability Dot11InformationElementID = 89
+ Dot11InformationElementIDBSSMaxIdlePeriod Dot11InformationElementID = 90
+ Dot11InformationElementIDTFSRequest Dot11InformationElementID = 91
+ Dot11InformationElementIDTFSResponse Dot11InformationElementID = 92
+ Dot11InformationElementIDWNMSleepMode Dot11InformationElementID = 93
+ Dot11InformationElementIDTIMBroadcastRequest Dot11InformationElementID = 94
+ Dot11InformationElementIDTIMBroadcastResponse Dot11InformationElementID = 95
+ Dot11InformationElementIDCollInterferenceReport Dot11InformationElementID = 96
+ Dot11InformationElementIDChannelUsage Dot11InformationElementID = 97
+ Dot11InformationElementIDTimeZone Dot11InformationElementID = 98
+ Dot11InformationElementIDDMSRequest Dot11InformationElementID = 99
+ Dot11InformationElementIDDMSResponse Dot11InformationElementID = 100
+ Dot11InformationElementIDLinkIdentifier Dot11InformationElementID = 101
+ Dot11InformationElementIDWakeupSchedule Dot11InformationElementID = 102
+ Dot11InformationElementIDChannelSwitchTiming Dot11InformationElementID = 104
+ Dot11InformationElementIDPTIControl Dot11InformationElementID = 105
+ Dot11InformationElementIDPUBufferStatus Dot11InformationElementID = 106
+ Dot11InformationElementIDInterworking Dot11InformationElementID = 107
+ Dot11InformationElementIDAdvertisementProtocol Dot11InformationElementID = 108
+ Dot11InformationElementIDExpBWRequest Dot11InformationElementID = 109
+ Dot11InformationElementIDQOSMapSet Dot11InformationElementID = 110
+ Dot11InformationElementIDRoamingConsortium Dot11InformationElementID = 111
+ Dot11InformationElementIDEmergencyAlertIdentifier Dot11InformationElementID = 112
+ Dot11InformationElementIDMeshConfiguration Dot11InformationElementID = 113
+ Dot11InformationElementIDMeshID Dot11InformationElementID = 114
+ Dot11InformationElementIDMeshLinkMetricReport Dot11InformationElementID = 115
+ Dot11InformationElementIDCongestionNotification Dot11InformationElementID = 116
+ Dot11InformationElementIDMeshPeeringManagement Dot11InformationElementID = 117
+ Dot11InformationElementIDMeshChannelSwitchParam Dot11InformationElementID = 118
+ Dot11InformationElementIDMeshAwakeWindows Dot11InformationElementID = 119
+ Dot11InformationElementIDBeaconTiming Dot11InformationElementID = 120
+ Dot11InformationElementIDMCCAOPSetupRequest Dot11InformationElementID = 121
+ Dot11InformationElementIDMCCAOPSetupReply Dot11InformationElementID = 122
+ Dot11InformationElementIDMCCAOPAdvertisement Dot11InformationElementID = 123
+ Dot11InformationElementIDMCCAOPTeardown Dot11InformationElementID = 124
+ Dot11InformationElementIDGateAnnouncement Dot11InformationElementID = 125
+ Dot11InformationElementIDRootAnnouncement Dot11InformationElementID = 126
+ Dot11InformationElementIDExtCapability Dot11InformationElementID = 127
+ Dot11InformationElementIDAgereProprietary Dot11InformationElementID = 128
+ Dot11InformationElementIDPathRequest Dot11InformationElementID = 130
+ Dot11InformationElementIDPathReply Dot11InformationElementID = 131
+ Dot11InformationElementIDPathError Dot11InformationElementID = 132
+ Dot11InformationElementIDCiscoCCX1CKIPDeviceName Dot11InformationElementID = 133
+ Dot11InformationElementIDCiscoCCX2 Dot11InformationElementID = 136
+ Dot11InformationElementIDProxyUpdate Dot11InformationElementID = 137
+ Dot11InformationElementIDProxyUpdateConfirmation Dot11InformationElementID = 138
+ Dot11InformationElementIDAuthMeshPerringExch Dot11InformationElementID = 139
+ Dot11InformationElementIDMIC Dot11InformationElementID = 140
+ Dot11InformationElementIDDestinationURI Dot11InformationElementID = 141
+ Dot11InformationElementIDUAPSDCoexistence Dot11InformationElementID = 142
+ Dot11InformationElementIDWakeupSchedule80211ad Dot11InformationElementID = 143
+ Dot11InformationElementIDExtendedSchedule Dot11InformationElementID = 144
+ Dot11InformationElementIDSTAAvailability Dot11InformationElementID = 145
+ Dot11InformationElementIDDMGTSPEC Dot11InformationElementID = 146
+ Dot11InformationElementIDNextDMGATI Dot11InformationElementID = 147
+ Dot11InformationElementIDDMSCapabilities Dot11InformationElementID = 148
+ Dot11InformationElementIDCiscoUnknown95 Dot11InformationElementID = 149
+ Dot11InformationElementIDVendor2 Dot11InformationElementID = 150
+ Dot11InformationElementIDDMGOperating Dot11InformationElementID = 151
+ Dot11InformationElementIDDMGBSSParamChange Dot11InformationElementID = 152
+ Dot11InformationElementIDDMGBeamRefinement Dot11InformationElementID = 153
+ Dot11InformationElementIDChannelMeasFeedback Dot11InformationElementID = 154
+ Dot11InformationElementIDAwakeWindow Dot11InformationElementID = 157
+ Dot11InformationElementIDMultiBand Dot11InformationElementID = 158
+ Dot11InformationElementIDADDBAExtension Dot11InformationElementID = 159
+ Dot11InformationElementIDNEXTPCPList Dot11InformationElementID = 160
+ Dot11InformationElementIDPCPHandover Dot11InformationElementID = 161
+ Dot11InformationElementIDDMGLinkMargin Dot11InformationElementID = 162
+ Dot11InformationElementIDSwitchingStream Dot11InformationElementID = 163
+ Dot11InformationElementIDSessionTransmission Dot11InformationElementID = 164
+ Dot11InformationElementIDDynamicTonePairReport Dot11InformationElementID = 165
+ Dot11InformationElementIDClusterReport Dot11InformationElementID = 166
+ Dot11InformationElementIDRelayCapabilities Dot11InformationElementID = 167
+ Dot11InformationElementIDRelayTransferParameter Dot11InformationElementID = 168
+ Dot11InformationElementIDBeamlinkMaintenance Dot11InformationElementID = 169
+ Dot11InformationElementIDMultipleMacSublayers Dot11InformationElementID = 170
+ Dot11InformationElementIDUPID Dot11InformationElementID = 171
+ Dot11InformationElementIDDMGLinkAdaptionAck Dot11InformationElementID = 172
+ Dot11InformationElementIDSymbolProprietary Dot11InformationElementID = 173
+ Dot11InformationElementIDMCCAOPAdvertOverview Dot11InformationElementID = 174
+ Dot11InformationElementIDQuietPeriodRequest Dot11InformationElementID = 175
+ Dot11InformationElementIDQuietPeriodResponse Dot11InformationElementID = 177
+ Dot11InformationElementIDECPACPolicy Dot11InformationElementID = 182
+ Dot11InformationElementIDClusterTimeOffset Dot11InformationElementID = 183
+ Dot11InformationElementIDAntennaSectorID Dot11InformationElementID = 190
+ Dot11InformationElementIDVHTCapabilities Dot11InformationElementID = 191
+ Dot11InformationElementIDVHTOperation Dot11InformationElementID = 192
+ Dot11InformationElementIDExtendedBSSLoad Dot11InformationElementID = 193
+ Dot11InformationElementIDWideBWChannelSwitch Dot11InformationElementID = 194
+ Dot11InformationElementIDVHTTxPowerEnvelope Dot11InformationElementID = 195
+ Dot11InformationElementIDChannelSwitchWrapper Dot11InformationElementID = 196
+ Dot11InformationElementIDOperatingModeNotification Dot11InformationElementID = 199
+ Dot11InformationElementIDUPSIM Dot11InformationElementID = 200
+ Dot11InformationElementIDReducedNeighborReport Dot11InformationElementID = 201
+ Dot11InformationElementIDTVHTOperation Dot11InformationElementID = 202
+ Dot11InformationElementIDDeviceLocation Dot11InformationElementID = 204
+ Dot11InformationElementIDWhiteSpaceMap Dot11InformationElementID = 205
+ Dot11InformationElementIDFineTuningMeasureParams Dot11InformationElementID = 206
+ Dot11InformationElementIDVendor Dot11InformationElementID = 221
)
// String provides a human readable string for Dot11InformationElementID.
@@ -266,35 +421,347 @@ const (
func (a Dot11InformationElementID) String() string {
switch a {
case Dot11InformationElementIDSSID:
- return "SSID"
+ return "SSID parameter set"
case Dot11InformationElementIDRates:
- return "Rates"
+ return "Supported Rates"
case Dot11InformationElementIDFHSet:
- return "FHset"
+ return "FH Parameter set"
case Dot11InformationElementIDDSSet:
- return "DSset"
+ return "DS Parameter set"
case Dot11InformationElementIDCFSet:
- return "CFset"
+ return "CF Parameter set"
case Dot11InformationElementIDTIM:
- return "TIM"
+ return "Traffic Indication Map (TIM)"
case Dot11InformationElementIDIBSSSet:
- return "IBSSset"
+ return "IBSS Parameter set"
+ case Dot11InformationElementIDCountryInfo:
+ return "Country Information"
+ case Dot11InformationElementIDHoppingPatternParam:
+ return "Hopping Pattern Parameters"
+ case Dot11InformationElementIDHoppingPatternTable:
+ return "Hopping Pattern Table"
+ case Dot11InformationElementIDRequest:
+ return "Request"
+ case Dot11InformationElementIDQBSSLoadElem:
+ return "QBSS Load Element"
+ case Dot11InformationElementIDEDCAParamSet:
+ return "EDCA Parameter Set"
+ case Dot11InformationElementIDTrafficSpec:
+ return "Traffic Specification"
+ case Dot11InformationElementIDTrafficClass:
+ return "Traffic Classification"
+ case Dot11InformationElementIDSchedule:
+ return "Schedule"
case Dot11InformationElementIDChallenge:
- return "Challenge"
+ return "Challenge text"
+ case Dot11InformationElementIDPowerConst:
+ return "Power Constraint"
+ case Dot11InformationElementIDPowerCapability:
+ return "Power Capability"
+ case Dot11InformationElementIDTPCRequest:
+ return "TPC Request"
+ case Dot11InformationElementIDTPCReport:
+ return "TPC Report"
+ case Dot11InformationElementIDSupportedChannels:
+ return "Supported Channels"
+ case Dot11InformationElementIDSwitchChannelAnnounce:
+ return "Channel Switch Announcement"
+ case Dot11InformationElementIDMeasureRequest:
+ return "Measurement Request"
+ case Dot11InformationElementIDMeasureReport:
+ return "Measurement Report"
+ case Dot11InformationElementIDQuiet:
+ return "Quiet"
+ case Dot11InformationElementIDIBSSDFS:
+ return "IBSS DFS"
case Dot11InformationElementIDERPInfo:
- return "ERPinfo"
+ return "ERP Information"
+ case Dot11InformationElementIDTSDelay:
+ return "TS Delay"
+ case Dot11InformationElementIDTCLASProcessing:
+ return "TCLAS Processing"
+ case Dot11InformationElementIDHTCapabilities:
+ return "HT Capabilities (802.11n D1.10)"
case Dot11InformationElementIDQOSCapability:
- return "QOS capability"
+ return "QOS Capability"
case Dot11InformationElementIDERPInfo2:
- return "ERPinfo2"
+ return "ERP Information-2"
case Dot11InformationElementIDRSNInfo:
- return "RSNinfo"
+ return "RSN Information"
case Dot11InformationElementIDESRates:
- return "ESrates"
+ return "Extended Supported Rates"
+ case Dot11InformationElementIDAPChannelReport:
+ return "AP Channel Report"
+ case Dot11InformationElementIDNeighborReport:
+ return "Neighbor Report"
+ case Dot11InformationElementIDRCPI:
+ return "RCPI"
+ case Dot11InformationElementIDMobilityDomain:
+ return "Mobility Domain"
+ case Dot11InformationElementIDFastBSSTrans:
+ return "Fast BSS Transition"
+ case Dot11InformationElementIDTimeoutInt:
+ return "Timeout Interval"
+ case Dot11InformationElementIDRICData:
+ return "RIC Data"
+ case Dot11InformationElementIDDSERegisteredLoc:
+ return "DSE Registered Location"
+ case Dot11InformationElementIDSuppOperatingClass:
+ return "Supported Operating Classes"
+ case Dot11InformationElementIDExtChanSwitchAnnounce:
+ return "Extended Channel Switch Announcement"
+ case Dot11InformationElementIDHTInfo:
+ return "HT Information (802.11n D1.10)"
+ case Dot11InformationElementIDSecChanOffset:
+ return "Secondary Channel Offset (802.11n D1.10)"
+ case Dot11InformationElementIDBSSAverageAccessDelay:
+ return "BSS Average Access Delay"
+ case Dot11InformationElementIDAntenna:
+ return "Antenna"
+ case Dot11InformationElementIDRSNI:
+ return "RSNI"
+ case Dot11InformationElementIDMeasurePilotTrans:
+ return "Measurement Pilot Transmission"
+ case Dot11InformationElementIDBSSAvailAdmCapacity:
+ return "BSS Available Admission Capacity"
+ case Dot11InformationElementIDBSSACAccDelayWAPIParam:
+ return "BSS AC Access Delay/WAPI Parameter Set"
+ case Dot11InformationElementIDTimeAdvertisement:
+ return "Time Advertisement"
+ case Dot11InformationElementIDRMEnabledCapabilities:
+ return "RM Enabled Capabilities"
+ case Dot11InformationElementIDMultipleBSSID:
+ return "Multiple BSSID"
+ case Dot11InformationElementID2040BSSCoExist:
+ return "20/40 BSS Coexistence"
+ case Dot11InformationElementID2040BSSIntChanReport:
+ return "20/40 BSS Intolerant Channel Report"
+ case Dot11InformationElementIDOverlapBSSScanParam:
+ return "Overlapping BSS Scan Parameters"
+ case Dot11InformationElementIDRICDescriptor:
+ return "RIC Descriptor"
+ case Dot11InformationElementIDManagementMIC:
+ return "Management MIC"
+ case Dot11InformationElementIDEventRequest:
+ return "Event Request"
+ case Dot11InformationElementIDEventReport:
+ return "Event Report"
+ case Dot11InformationElementIDDiagnosticRequest:
+ return "Diagnostic Request"
+ case Dot11InformationElementIDDiagnosticReport:
+ return "Diagnostic Report"
+ case Dot11InformationElementIDLocationParam:
+ return "Location Parameters"
+ case Dot11InformationElementIDNonTransBSSIDCapability:
+ return "Non Transmitted BSSID Capability"
+ case Dot11InformationElementIDSSIDList:
+ return "SSID List"
+ case Dot11InformationElementIDMultipleBSSIDIndex:
+ return "Multiple BSSID Index"
+ case Dot11InformationElementIDFMSDescriptor:
+ return "FMS Descriptor"
+ case Dot11InformationElementIDFMSRequest:
+ return "FMS Request"
+ case Dot11InformationElementIDFMSResponse:
+ return "FMS Response"
+ case Dot11InformationElementIDQOSTrafficCapability:
+ return "QoS Traffic Capability"
+ case Dot11InformationElementIDBSSMaxIdlePeriod:
+ return "BSS Max Idle Period"
+ case Dot11InformationElementIDTFSRequest:
+ return "TFS Request"
+ case Dot11InformationElementIDTFSResponse:
+ return "TFS Response"
+ case Dot11InformationElementIDWNMSleepMode:
+ return "WNM-Sleep Mode"
+ case Dot11InformationElementIDTIMBroadcastRequest:
+ return "TIM Broadcast Request"
+ case Dot11InformationElementIDTIMBroadcastResponse:
+ return "TIM Broadcast Response"
+ case Dot11InformationElementIDCollInterferenceReport:
+ return "Collocated Interference Report"
+ case Dot11InformationElementIDChannelUsage:
+ return "Channel Usage"
+ case Dot11InformationElementIDTimeZone:
+ return "Time Zone"
+ case Dot11InformationElementIDDMSRequest:
+ return "DMS Request"
+ case Dot11InformationElementIDDMSResponse:
+ return "DMS Response"
+ case Dot11InformationElementIDLinkIdentifier:
+ return "Link Identifier"
+ case Dot11InformationElementIDWakeupSchedule:
+ return "Wakeup Schedule"
+ case Dot11InformationElementIDChannelSwitchTiming:
+ return "Channel Switch Timing"
+ case Dot11InformationElementIDPTIControl:
+ return "PTI Control"
+ case Dot11InformationElementIDPUBufferStatus:
+ return "PU Buffer Status"
+ case Dot11InformationElementIDInterworking:
+ return "Interworking"
+ case Dot11InformationElementIDAdvertisementProtocol:
+ return "Advertisement Protocol"
+ case Dot11InformationElementIDExpBWRequest:
+ return "Expedited Bandwidth Request"
+ case Dot11InformationElementIDQOSMapSet:
+ return "QoS Map Set"
+ case Dot11InformationElementIDRoamingConsortium:
+ return "Roaming Consortium"
+ case Dot11InformationElementIDEmergencyAlertIdentifier:
+ return "Emergency Alert Identifier"
+ case Dot11InformationElementIDMeshConfiguration:
+ return "Mesh Configuration"
+ case Dot11InformationElementIDMeshID:
+ return "Mesh ID"
+ case Dot11InformationElementIDMeshLinkMetricReport:
+ return "Mesh Link Metric Report"
+ case Dot11InformationElementIDCongestionNotification:
+ return "Congestion Notification"
+ case Dot11InformationElementIDMeshPeeringManagement:
+ return "Mesh Peering Management"
+ case Dot11InformationElementIDMeshChannelSwitchParam:
+ return "Mesh Channel Switch Parameters"
+ case Dot11InformationElementIDMeshAwakeWindows:
+ return "Mesh Awake Windows"
+ case Dot11InformationElementIDBeaconTiming:
+ return "Beacon Timing"
+ case Dot11InformationElementIDMCCAOPSetupRequest:
+ return "MCCAOP Setup Request"
+ case Dot11InformationElementIDMCCAOPSetupReply:
+ return "MCCAOP SETUP Reply"
+ case Dot11InformationElementIDMCCAOPAdvertisement:
+ return "MCCAOP Advertisement"
+ case Dot11InformationElementIDMCCAOPTeardown:
+ return "MCCAOP Teardown"
+ case Dot11InformationElementIDGateAnnouncement:
+ return "Gate Announcement"
+ case Dot11InformationElementIDRootAnnouncement:
+ return "Root Announcement"
+ case Dot11InformationElementIDExtCapability:
+ return "Extended Capabilities"
+ case Dot11InformationElementIDAgereProprietary:
+ return "Agere Proprietary"
+ case Dot11InformationElementIDPathRequest:
+ return "Path Request"
+ case Dot11InformationElementIDPathReply:
+ return "Path Reply"
+ case Dot11InformationElementIDPathError:
+ return "Path Error"
+ case Dot11InformationElementIDCiscoCCX1CKIPDeviceName:
+ return "Cisco CCX1 CKIP + Device Name"
+ case Dot11InformationElementIDCiscoCCX2:
+ return "Cisco CCX2"
+ case Dot11InformationElementIDProxyUpdate:
+ return "Proxy Update"
+ case Dot11InformationElementIDProxyUpdateConfirmation:
+ return "Proxy Update Confirmation"
+ case Dot11InformationElementIDAuthMeshPerringExch:
+ return "Auhenticated Mesh Perring Exchange"
+ case Dot11InformationElementIDMIC:
+ return "MIC (Message Integrity Code)"
+ case Dot11InformationElementIDDestinationURI:
+ return "Destination URI"
+ case Dot11InformationElementIDUAPSDCoexistence:
+ return "U-APSD Coexistence"
+ case Dot11InformationElementIDWakeupSchedule80211ad:
+ return "Wakeup Schedule 802.11ad"
+ case Dot11InformationElementIDExtendedSchedule:
+ return "Extended Schedule"
+ case Dot11InformationElementIDSTAAvailability:
+ return "STA Availability"
+ case Dot11InformationElementIDDMGTSPEC:
+ return "DMG TSPEC"
+ case Dot11InformationElementIDNextDMGATI:
+ return "Next DMG ATI"
+ case Dot11InformationElementIDDMSCapabilities:
+ return "DMG Capabilities"
+ case Dot11InformationElementIDCiscoUnknown95:
+ return "Cisco Unknown 95"
+ case Dot11InformationElementIDVendor2:
+ return "Vendor Specific"
+ case Dot11InformationElementIDDMGOperating:
+ return "DMG Operating"
+ case Dot11InformationElementIDDMGBSSParamChange:
+ return "DMG BSS Parameter Change"
+ case Dot11InformationElementIDDMGBeamRefinement:
+ return "DMG Beam Refinement"
+ case Dot11InformationElementIDChannelMeasFeedback:
+ return "Channel Measurement Feedback"
+ case Dot11InformationElementIDAwakeWindow:
+ return "Awake Window"
+ case Dot11InformationElementIDMultiBand:
+ return "Multi Band"
+ case Dot11InformationElementIDADDBAExtension:
+ return "ADDBA Extension"
+ case Dot11InformationElementIDNEXTPCPList:
+ return "NEXTPCP List"
+ case Dot11InformationElementIDPCPHandover:
+ return "PCP Handover"
+ case Dot11InformationElementIDDMGLinkMargin:
+ return "DMG Link Margin"
+ case Dot11InformationElementIDSwitchingStream:
+ return "Switching Stream"
+ case Dot11InformationElementIDSessionTransmission:
+ return "Session Transmission"
+ case Dot11InformationElementIDDynamicTonePairReport:
+ return "Dynamic Tone Pairing Report"
+ case Dot11InformationElementIDClusterReport:
+ return "Cluster Report"
+ case Dot11InformationElementIDRelayCapabilities:
+ return "Relay Capabilities"
+ case Dot11InformationElementIDRelayTransferParameter:
+ return "Relay Transfer Parameter"
+ case Dot11InformationElementIDBeamlinkMaintenance:
+ return "Beamlink Maintenance"
+ case Dot11InformationElementIDMultipleMacSublayers:
+ return "Multiple MAC Sublayers"
+ case Dot11InformationElementIDUPID:
+ return "U-PID"
+ case Dot11InformationElementIDDMGLinkAdaptionAck:
+ return "DMG Link Adaption Acknowledgment"
+ case Dot11InformationElementIDSymbolProprietary:
+ return "Symbol Proprietary"
+ case Dot11InformationElementIDMCCAOPAdvertOverview:
+ return "MCCAOP Advertisement Overview"
+ case Dot11InformationElementIDQuietPeriodRequest:
+ return "Quiet Period Request"
+ case Dot11InformationElementIDQuietPeriodResponse:
+ return "Quiet Period Response"
+ case Dot11InformationElementIDECPACPolicy:
+ return "ECPAC Policy"
+ case Dot11InformationElementIDClusterTimeOffset:
+ return "Cluster Time Offset"
+ case Dot11InformationElementIDAntennaSectorID:
+ return "Antenna Sector ID"
+ case Dot11InformationElementIDVHTCapabilities:
+ return "VHT Capabilities (IEEE Std 802.11ac/D3.1)"
+ case Dot11InformationElementIDVHTOperation:
+ return "VHT Operation (IEEE Std 802.11ac/D3.1)"
+ case Dot11InformationElementIDExtendedBSSLoad:
+ return "Extended BSS Load"
+ case Dot11InformationElementIDWideBWChannelSwitch:
+ return "Wide Bandwidth Channel Switch"
+ case Dot11InformationElementIDVHTTxPowerEnvelope:
+ return "VHT Tx Power Envelope (IEEE Std 802.11ac/D5.0)"
+ case Dot11InformationElementIDChannelSwitchWrapper:
+ return "Channel Switch Wrapper"
+ case Dot11InformationElementIDOperatingModeNotification:
+ return "Operating Mode Notification"
+ case Dot11InformationElementIDUPSIM:
+ return "UP SIM"
+ case Dot11InformationElementIDReducedNeighborReport:
+ return "Reduced Neighbor Report"
+ case Dot11InformationElementIDTVHTOperation:
+ return "TVHT Op"
+ case Dot11InformationElementIDDeviceLocation:
+ return "Device Location"
+ case Dot11InformationElementIDWhiteSpaceMap:
+ return "White Space Map"
+ case Dot11InformationElementIDFineTuningMeasureParams:
+ return "Fine Tuning Measure Parameters"
case Dot11InformationElementIDVendor:
return "Vendor"
- case Dot11InformationElementIDReserved:
- return "Reserved"
default:
return "Unknown information element id"
}
@@ -302,7 +769,7 @@ func (a Dot11InformationElementID) String() string {
// Dot11 provides an IEEE 802.11 base packet header.
// See http://standards.ieee.org/findstds/standard/802.11-2012.html
-// for excrutiating detail.
+// for excruciating detail.
type Dot11 struct {
BaseLayer
Type Dot11Type
@@ -316,23 +783,138 @@ type Dot11 struct {
SequenceNumber uint16
FragmentNumber uint16
Checksum uint32
+ QOS *Dot11QOS
+ HTControl *Dot11HTControl
+ DataLayer gopacket.Layer
+}
+
+type Dot11QOS struct {
+ TID uint8 /* Traffic IDentifier */
+ EOSP bool /* End of service period */
+ AckPolicy Dot11AckPolicy
+ TXOP uint8
+}
+
+type Dot11HTControl struct {
+ ACConstraint bool
+ RDGMorePPDU bool
+
+ VHT *Dot11HTControlVHT
+ HT *Dot11HTControlHT
+}
+
+type Dot11HTControlHT struct {
+ LinkAdapationControl *Dot11LinkAdapationControl
+ CalibrationPosition uint8
+ CalibrationSequence uint8
+ CSISteering uint8
+ NDPAnnouncement bool
+ DEI bool
+}
+
+type Dot11HTControlVHT struct {
+ MRQ bool
+ UnsolicitedMFB bool
+ MSI *uint8
+ MFB Dot11HTControlMFB
+ CompressedMSI *uint8
+ STBCIndication bool
+ MFSI *uint8
+ GID *uint8
+ CodingType *Dot11CodingType
+ FbTXBeamformed bool
+}
+
+type Dot11HTControlMFB struct {
+ NumSTS uint8
+ VHTMCS uint8
+ BW uint8
+ SNR int8
+}
+
+type Dot11LinkAdapationControl struct {
+ TRQ bool
+ MRQ bool
+ MSI uint8
+ MFSI uint8
+ ASEL *Dot11ASEL
+ MFB *uint8
+}
+
+type Dot11ASEL struct {
+ Command uint8
+ Data uint8
+}
+
+type Dot11CodingType uint8
+
+const (
+ Dot11CodingTypeBCC = 0
+ Dot11CodingTypeLDPC = 1
+)
+
+func (a Dot11CodingType) String() string {
+ switch a {
+ case Dot11CodingTypeBCC:
+ return "BCC"
+ case Dot11CodingTypeLDPC:
+ return "LDPC"
+ default:
+ return "Unknown coding type"
+ }
+}
+
+func (m *Dot11HTControlMFB) NoFeedBackPresent() bool {
+ return m.VHTMCS == 15 && m.NumSTS == 7
}
func decodeDot11(data []byte, p gopacket.PacketBuilder) error {
d := &Dot11{}
- return decodingLayerDecoder(d, data, p)
+ err := d.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(d)
+ if d.DataLayer != nil {
+ p.AddLayer(d.DataLayer)
+ }
+ return p.NextDecoder(d.NextLayerType())
}
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)
+ if m.DataLayer != nil {
+ if m.Flags.WEP() {
+ return LayerTypeDot11WEP
+ }
+ return m.DataLayer.(gopacket.DecodingLayer).NextLayerType()
}
-
return m.Type.LayerType()
}
+func createU8(x uint8) *uint8 {
+ return &x
+}
+
+var dataDecodeMap = map[Dot11Type]func() gopacket.DecodingLayer{
+ Dot11TypeData: func() gopacket.DecodingLayer { return &Dot11Data{} },
+ Dot11TypeDataCFAck: func() gopacket.DecodingLayer { return &Dot11DataCFAck{} },
+ Dot11TypeDataCFPoll: func() gopacket.DecodingLayer { return &Dot11DataCFPoll{} },
+ Dot11TypeDataCFAckPoll: func() gopacket.DecodingLayer { return &Dot11DataCFAckPoll{} },
+ Dot11TypeDataNull: func() gopacket.DecodingLayer { return &Dot11DataNull{} },
+ Dot11TypeDataCFAckNoData: func() gopacket.DecodingLayer { return &Dot11DataCFAckNoData{} },
+ Dot11TypeDataCFPollNoData: func() gopacket.DecodingLayer { return &Dot11DataCFPollNoData{} },
+ Dot11TypeDataCFAckPollNoData: func() gopacket.DecodingLayer { return &Dot11DataCFAckPollNoData{} },
+ Dot11TypeDataQOSData: func() gopacket.DecodingLayer { return &Dot11DataQOSData{} },
+ Dot11TypeDataQOSDataCFAck: func() gopacket.DecodingLayer { return &Dot11DataQOSDataCFAck{} },
+ Dot11TypeDataQOSDataCFPoll: func() gopacket.DecodingLayer { return &Dot11DataQOSDataCFPoll{} },
+ Dot11TypeDataQOSDataCFAckPoll: func() gopacket.DecodingLayer { return &Dot11DataQOSDataCFAckPoll{} },
+ Dot11TypeDataQOSNull: func() gopacket.DecodingLayer { return &Dot11DataQOSNull{} },
+ Dot11TypeDataQOSCFPollNoData: func() gopacket.DecodingLayer { return &Dot11DataQOSCFPollNoData{} },
+ Dot11TypeDataQOSCFAckPollNoData: func() gopacket.DecodingLayer { return &Dot11DataQOSCFAckPollNoData{} },
+}
+
func (m *Dot11) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
if len(data) < 10 {
df.SetTruncated()
@@ -384,7 +966,112 @@ func (m *Dot11) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
offset += 6
}
- m.BaseLayer = BaseLayer{Contents: data[0:offset], Payload: data[offset : len(data)-4]}
+ if m.Type.QOS() {
+ if len(data) < offset+2 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+6)
+ }
+ m.QOS = &Dot11QOS{
+ TID: (uint8(data[offset]) & 0x0F),
+ EOSP: (uint8(data[offset]) & 0x10) == 0x10,
+ AckPolicy: Dot11AckPolicy((uint8(data[offset]) & 0x60) >> 5),
+ TXOP: uint8(data[offset+1]),
+ }
+ offset += 2
+ }
+ if m.Flags.Order() && (m.Type.QOS() || mainType == Dot11TypeMgmt) {
+ if len(data) < offset+4 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+6)
+ }
+
+ htc := &Dot11HTControl{
+ ACConstraint: data[offset+3]&0x40 != 0,
+ RDGMorePPDU: data[offset+3]&0x80 != 0,
+ }
+ m.HTControl = htc
+
+ if data[offset]&0x1 != 0 { // VHT Variant
+ vht := &Dot11HTControlVHT{}
+ htc.VHT = vht
+ vht.MRQ = data[offset]&0x4 != 0
+ vht.UnsolicitedMFB = data[offset+3]&0x20 != 0
+ vht.MFB = Dot11HTControlMFB{
+ NumSTS: uint8(data[offset+1] >> 1 & 0x7),
+ VHTMCS: uint8(data[offset+1] >> 4 & 0xF),
+ BW: uint8(data[offset+2] & 0x3),
+ SNR: int8((-(data[offset+2] >> 2 & 0x20))+data[offset+2]>>2&0x1F) + 22,
+ }
+
+ if vht.UnsolicitedMFB {
+ if !vht.MFB.NoFeedBackPresent() {
+ vht.CompressedMSI = createU8(data[offset] >> 3 & 0x3)
+ vht.STBCIndication = data[offset]&0x20 != 0
+ vht.CodingType = (*Dot11CodingType)(createU8(data[offset+3] >> 3 & 0x1))
+ vht.FbTXBeamformed = data[offset+3]&0x10 != 0
+ vht.GID = createU8(
+ data[offset]>>6 +
+ (data[offset+1] & 0x1 << 2) +
+ data[offset+3]&0x7<<3)
+ }
+ } else {
+ if vht.MRQ {
+ vht.MSI = createU8((data[offset] >> 3) & 0x07)
+ }
+ vht.MFSI = createU8(data[offset]>>6 + (data[offset+1] & 0x1 << 2))
+ }
+
+ } else { // HT Variant
+ ht := &Dot11HTControlHT{}
+ htc.HT = ht
+
+ lac := &Dot11LinkAdapationControl{}
+ ht.LinkAdapationControl = lac
+ lac.TRQ = data[offset]&0x2 != 0
+ lac.MFSI = data[offset]>>6&0x3 + data[offset+1]&0x1<<3
+ if data[offset]&0x3C == 0x38 { // ASEL
+ lac.ASEL = &Dot11ASEL{
+ Command: data[offset+1] >> 1 & 0x7,
+ Data: data[offset+1] >> 4 & 0xF,
+ }
+ } else {
+ lac.MRQ = data[offset]&0x4 != 0
+ if lac.MRQ {
+ lac.MSI = data[offset] >> 3 & 0x7
+ }
+ lac.MFB = createU8(data[offset+1] >> 1)
+ }
+ ht.CalibrationPosition = data[offset+2] & 0x3
+ ht.CalibrationSequence = data[offset+2] >> 2 & 0x3
+ ht.CSISteering = data[offset+2] >> 6 & 0x3
+ ht.NDPAnnouncement = data[offset+3]&0x1 != 0
+ if mainType != Dot11TypeMgmt {
+ ht.DEI = data[offset+3]&0x20 != 0
+ }
+ }
+
+ offset += 4
+ }
+
+ if len(data) < offset+4 {
+ df.SetTruncated()
+ return fmt.Errorf("Dot11 length %v too short, %v required", len(data), offset+4)
+ }
+
+ m.BaseLayer = BaseLayer{
+ Contents: data[0:offset],
+ Payload: data[offset : len(data)-4],
+ }
+
+ if mainType == Dot11TypeData {
+ l := dataDecodeMap[m.Type]()
+ err := l.DecodeFromBytes(m.BaseLayer.Payload, df)
+ if err != nil {
+ return err
+ }
+ m.DataLayer = l.(gopacket.Layer)
+ }
+
m.Checksum = binary.LittleEndian.Uint32(data[len(data)-4 : len(data)])
return nil
}
@@ -397,6 +1084,47 @@ func (m *Dot11) ChecksumValid() bool {
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
@@ -432,7 +1160,7 @@ type Dot11WEP struct {
BaseLayer
}
-func (m *Dot11WEP) NextLayerType() gopacket.LayerType { return LayerTypeLLC }
+func (m *Dot11WEP) NextLayerType() gopacket.LayerType { return gopacket.LayerTypePayload }
func (m *Dot11WEP) LayerType() gopacket.LayerType { return LayerTypeDot11WEP }
func (m *Dot11WEP) CanDecode() gopacket.LayerClass { return LayerTypeDot11WEP }
@@ -451,7 +1179,9 @@ type Dot11Data struct {
BaseLayer
}
-func (m *Dot11Data) NextLayerType() gopacket.LayerType { return LayerTypeLLC }
+func (m *Dot11Data) NextLayerType() gopacket.LayerType {
+ return LayerTypeLLC
+}
func (m *Dot11Data) LayerType() gopacket.LayerType { return LayerTypeDot11Data }
func (m *Dot11Data) CanDecode() gopacket.LayerClass { return LayerTypeDot11Data }
@@ -576,23 +1306,10 @@ func (m *Dot11DataCFAckPollNoData) DecodeFromBytes(data []byte, df gopacket.Deco
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:]}
+ m.BaseLayer = BaseLayer{Payload: data}
return nil
}
@@ -760,7 +1477,7 @@ func (m *Dot11InformationElement) DecodeFromBytes(data []byte, df gopacket.Decod
func (d *Dot11InformationElement) String() string {
if d.ID == 0 {
- return fmt.Sprintf("802.11 Information Element (SSID: %v)", string(d.Info))
+ return fmt.Sprintf("802.11 Information Element (ID: %v, Length: %v, SSID: %v)", d.ID, d.Length, string(d.Info))
} else if d.ID == 1 {
rates := ""
for i := 0; i < len(d.Info); i++ {
@@ -770,9 +1487,9 @@ func (d *Dot11InformationElement) String() string {
rates += fmt.Sprintf("%.1f* ", float32(d.Info[i]&0x7F)*0.5)
}
}
- return fmt.Sprintf("802.11 Information Element (Rates: %s Mbit)", rates)
+ return fmt.Sprintf("802.11 Information Element (ID: %v, Length: %v, Rates: %s Mbit)", d.ID, d.Length, 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)
+ return fmt.Sprintf("802.11 Information Element (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)
}
@@ -971,6 +1688,19 @@ func (m *Dot11MgmtAssociationReq) DecodeFromBytes(data []byte, df gopacket.Decod
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
@@ -1004,6 +1734,20 @@ func (m *Dot11MgmtAssociationResp) DecodeFromBytes(data []byte, df gopacket.Deco
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
@@ -1037,6 +1781,21 @@ func (m *Dot11MgmtReassociationReq) DecodeFromBytes(data []byte, df gopacket.Dec
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
}
@@ -1073,6 +1832,9 @@ func (m *Dot11MgmtProbeReq) NextLayerType() gopacket.LayerType {
type Dot11MgmtProbeResp struct {
Dot11Mgmt
+ Timestamp uint64
+ Interval uint16
+ Flags uint16
}
func decodeDot11MgmtProbeResp(data []byte, p gopacket.PacketBuilder) error {
@@ -1082,10 +1844,39 @@ func decodeDot11MgmtProbeResp(data []byte, p gopacket.PacketBuilder) error {
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
}
@@ -1130,6 +1921,20 @@ func (m *Dot11MgmtBeacon) DecodeFromBytes(data []byte, df gopacket.DecodeFeedbac
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
}
@@ -1167,6 +1972,18 @@ func (m *Dot11MgmtDisassociation) DecodeFromBytes(data []byte, df gopacket.Decod
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
@@ -1200,6 +2017,20 @@ func (m *Dot11MgmtAuthentication) DecodeFromBytes(data []byte, df gopacket.Decod
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
@@ -1225,6 +2056,18 @@ func (m *Dot11MgmtDeauthentication) DecodeFromBytes(data []byte, df gopacket.Dec
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
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11_test.go
index d39ce6ab1eb..f734fbcf335 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot11_test.go
@@ -8,11 +8,11 @@ package layers
import (
"bytes"
- _ "fmt"
- "github.com/google/gopacket"
"net"
"reflect"
"testing"
+
+ "github.com/google/gopacket"
)
// Generator: python layers/test_creator.py --layerType=LayerTypeRadioTap --linkType=LinkTypeIEEE80211Radio --name=Dot11%s ~/Downloads/mesh.pcap
@@ -419,7 +419,7 @@ func TestPacketDot11DataIP(t *testing.T) {
if p.ErrorLayer() != nil {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
- checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeIPv4, LayerTypeUDP, gopacket.LayerTypePayload}, t)
+ 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++ {
@@ -464,7 +464,7 @@ func TestPacketP6196(t *testing.T) {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
- checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11WEP}, t)
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11DataQOSData, LayerTypeDot11WEP}, t)
}
func BenchmarkDecodePacketP6196(b *testing.B) {
@@ -473,6 +473,69 @@ func BenchmarkDecodePacketP6196(b *testing.B) {
}
}
+// testPacketDot11HTControl is the packet:
+// 0000 00 00 26 00 2b 48 20 00 bf 70 06 02 00 00 00 00 ..&.+H .¿p......
+// 0010 40 00 78 14 40 01 b8 00 00 00 44 00 00 01 73 00 @.x.@.¸...D...s.
+// 0020 00 00 00 00 00 00 88 c9 30 14 01 02 03 04 05 06 .......É0.ò.Jòs}
+// 0030 11 12 13 14 15 16 21 22 23 24 25 26 c0 bd 00 14 .öP.6:M 2.Á7À½..
+// 0040 0e 28 00 a8 06 01 00 04 e6 73 b3 4a 24 3e 19 ea .(.¨....æs³J$>.ê
+// 0050 2a b7 1f 3c c7 89 2b 22 e2 2b 28 6c 69 aa 0a ee *·.<Ç.+"â+(liª.î
+// 0060 1e bc 2d 2a 00 35 68 39 ad 6f 29 52 38 07 ae cf .¼-*.5h9.o)R8.®Ï
+// 0070 03 e7 0d 53 8b 3c 12 28 52 05 cc 70 be c7 68 5e .ç.S.<.(R.Ìp¾Çh^
+// 0080 5f b1 06 f4 73 22 63 ef 77 41 7b 86 _±.ôs"cïwA{.
+var testPacketDot11HTControl = []byte{
+ 0x00, 0x00, 0x26, 0x00, 0x2b, 0x48, 0x20, 0x00, 0xbf, 0x70, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x78, 0x14, 0x40, 0x01, 0xb8, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x73, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc9, 0x30, 0x14, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+ 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0xc0, 0xbd, 0x00, 0x14,
+ 0x0e, 0x28, 0x00, 0xa8, 0x06, 0x01, 0x00, 0x04, 0xe6, 0x73, 0xb3, 0x4a, 0x24, 0x3e, 0x19, 0xea,
+ 0x2a, 0xb7, 0x1f, 0x3c, 0xc7, 0x89, 0x2b, 0x22, 0xe2, 0x2b, 0x28, 0x6c, 0x69, 0xaa, 0x0a, 0xee,
+ 0x1e, 0xbc, 0x2d, 0x2a, 0x00, 0x35, 0x68, 0x39, 0xad, 0x6f, 0x29, 0x52, 0x38, 0x07, 0xae, 0xcf,
+ 0x03, 0xe7, 0x0d, 0x53, 0x8b, 0x3c, 0x12, 0x28, 0x52, 0x05, 0xcc, 0x70, 0xbe, 0xc7, 0x68, 0x5e,
+ 0x5f, 0xb1, 0x06, 0xf4, 0x73, 0x22, 0x63, 0xef, 0x77, 0x41, 0x7b, 0x86,
+}
+
+var mfb = uint8(20)
+
+var wantHTControl = Dot11HTControl{
+ ACConstraint: false,
+ RDGMorePPDU: true,
+ HT: &Dot11HTControlHT{
+ LinkAdapationControl: &Dot11LinkAdapationControl{
+ TRQ: true,
+ MRQ: true,
+ MSI: 1,
+ MFSI: 0,
+ ASEL: nil,
+ MFB: &mfb,
+ },
+ CalibrationPosition: 0,
+ CalibrationSequence: 0,
+ CSISteering: 0,
+ NDPAnnouncement: false,
+ DEI: true,
+ },
+}
+
+func TestPacketDot11HTControl(t *testing.T) {
+ p := gopacket.NewPacket(testPacketDot11HTControl, LinkTypeIEEE80211Radio, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+
+ checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11DataQOSData, LayerTypeDot11WEP}, t)
+
+ ld11 := p.Layer(LayerTypeDot11)
+ if dot11, ok := ld11.(*Dot11); ok {
+ if dot11.HTControl == nil {
+ t.Fatal("Packet didn't contain HTControl")
+ }
+ if !reflect.DeepEqual(*dot11.HTControl, wantHTControl) {
+ t.Errorf("Dot11 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", dot11.HTControl, wantHTControl)
+ }
+ }
+}
+
func TestInformationElement(t *testing.T) {
bin := []byte{
0, 0,
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot1q.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot1q.go
index d8d3154d40d..47f93d73eb2 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot1q.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot1q.go
@@ -63,7 +63,7 @@ func (d *Dot1Q) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeO
}
firstBytes := uint16(d.Priority)<<13 | d.VLANIdentifier
if d.DropEligible {
- firstBytes |= 0x10
+ firstBytes |= 0x1000
}
binary.BigEndian.PutUint16(bytes, firstBytes)
binary.BigEndian.PutUint16(bytes[2:], uint16(d.Type))
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot1q_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot1q_test.go
new file mode 100644
index 00000000000..4a409c7b1bf
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/dot1q_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/eapol.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/eapol.go
index 1200c7d0c7e..a2d47986f19 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/eapol.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/eapol.go
@@ -7,6 +7,8 @@
package layers
import (
+ "encoding/binary"
+ "fmt"
"github.com/google/gopacket"
)
@@ -15,6 +17,7 @@ type EAPOL struct {
BaseLayer
Version uint8
Type EAPOLType
+ Length uint16
}
// LayerType returns LayerTypeEAPOL.
@@ -24,7 +27,18 @@ func (e *EAPOL) LayerType() gopacket.LayerType { return LayerTypeEAPOL }
func (e *EAPOL) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
e.Version = data[0]
e.Type = EAPOLType(data[1])
- e.BaseLayer = BaseLayer{data[:2], data[2:]}
+ 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
}
@@ -42,3 +56,238 @@ func decodeEAPOL(data []byte, p gopacket.PacketBuilder) error {
e := &EAPOL{}
return decodingLayerDecoder(e, data, p)
}
+
+// EAPOLKeyDescriptorType is an enumeration of key descriptor types
+// as specified by 802.1x in the EAPOL-Key frame
+type EAPOLKeyDescriptorType uint8
+
+// Enumeration of EAPOLKeyDescriptorType
+const (
+ EAPOLKeyDescriptorTypeRC4 EAPOLKeyDescriptorType = 1
+ EAPOLKeyDescriptorTypeDot11 EAPOLKeyDescriptorType = 2
+ EAPOLKeyDescriptorTypeWPA EAPOLKeyDescriptorType = 254
+)
+
+func (kdt EAPOLKeyDescriptorType) String() string {
+ switch kdt {
+ case EAPOLKeyDescriptorTypeRC4:
+ return "RC4"
+ case EAPOLKeyDescriptorTypeDot11:
+ return "802.11"
+ case EAPOLKeyDescriptorTypeWPA:
+ return "WPA"
+ default:
+ return fmt.Sprintf("unknown descriptor type %d", kdt)
+ }
+}
+
+// EAPOLKeyDescriptorVersion is an enumeration of versions specifying the
+// encryption algorithm for the key data and the authentication for the
+// message integrity code (MIC)
+type EAPOLKeyDescriptorVersion uint8
+
+// Enumeration of EAPOLKeyDescriptorVersion
+const (
+ EAPOLKeyDescriptorVersionOther EAPOLKeyDescriptorVersion = 0
+ EAPOLKeyDescriptorVersionRC4HMACMD5 EAPOLKeyDescriptorVersion = 1
+ EAPOLKeyDescriptorVersionAESHMACSHA1 EAPOLKeyDescriptorVersion = 2
+ EAPOLKeyDescriptorVersionAES128CMAC EAPOLKeyDescriptorVersion = 3
+)
+
+func (v EAPOLKeyDescriptorVersion) String() string {
+ switch v {
+ case EAPOLKeyDescriptorVersionOther:
+ return "Other"
+ case EAPOLKeyDescriptorVersionRC4HMACMD5:
+ return "RC4-HMAC-MD5"
+ case EAPOLKeyDescriptorVersionAESHMACSHA1:
+ return "AES-HMAC-SHA1-128"
+ case EAPOLKeyDescriptorVersionAES128CMAC:
+ return "AES-128-CMAC"
+ default:
+ return fmt.Sprintf("unknown version %d", v)
+ }
+}
+
+// EAPOLKeyType is an enumeration of key derivation types describing
+// the purpose of the keys being derived.
+type EAPOLKeyType uint8
+
+// Enumeration of EAPOLKeyType
+const (
+ EAPOLKeyTypeGroupSMK EAPOLKeyType = 0
+ EAPOLKeyTypePairwise EAPOLKeyType = 1
+)
+
+func (kt EAPOLKeyType) String() string {
+ switch kt {
+ case EAPOLKeyTypeGroupSMK:
+ return "Group/SMK"
+ case EAPOLKeyTypePairwise:
+ return "Pairwise"
+ default:
+ return fmt.Sprintf("unknown key type %d", kt)
+ }
+}
+
+// EAPOLKey defines an EAPOL-Key frame for 802.1x authentication
+type EAPOLKey struct {
+ BaseLayer
+ KeyDescriptorType EAPOLKeyDescriptorType
+ KeyDescriptorVersion EAPOLKeyDescriptorVersion
+ KeyType EAPOLKeyType
+ KeyIndex uint8
+ Install bool
+ KeyACK bool
+ KeyMIC bool
+ Secure bool
+ MICError bool
+ Request bool
+ HasEncryptedKeyData bool
+ SMKMessage bool
+ KeyLength uint16
+ ReplayCounter uint64
+ Nonce []byte
+ IV []byte
+ RSC uint64
+ ID uint64
+ MIC []byte
+ KeyDataLength uint16
+ EncryptedKeyData []byte
+}
+
+// LayerType returns LayerTypeEAPOLKey.
+func (ek *EAPOLKey) LayerType() gopacket.LayerType {
+ return LayerTypeEAPOLKey
+}
+
+// NextLayerType returns layers.LayerTypeDot11InformationElement if the key
+// data exists and is unencrypted, otherwise it does not expect a next layer.
+func (ek *EAPOLKey) NextLayerType() gopacket.LayerType {
+ if !ek.HasEncryptedKeyData && ek.KeyDataLength > 0 {
+ return LayerTypeDot11InformationElement
+ }
+ return gopacket.LayerTypePayload
+}
+
+const eapolKeyFrameLen = 95
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (ek *EAPOLKey) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < eapolKeyFrameLen {
+ df.SetTruncated()
+ return fmt.Errorf("EAPOLKey length %v too short, %v required",
+ len(data), eapolKeyFrameLen)
+ }
+
+ ek.KeyDescriptorType = EAPOLKeyDescriptorType(data[0])
+
+ info := binary.BigEndian.Uint16(data[1:3])
+ ek.KeyDescriptorVersion = EAPOLKeyDescriptorVersion(info & 0x0007)
+ ek.KeyType = EAPOLKeyType((info & 0x0008) >> 3)
+ ek.KeyIndex = uint8((info & 0x0030) >> 4)
+ ek.Install = (info & 0x0040) != 0
+ ek.KeyACK = (info & 0x0080) != 0
+ ek.KeyMIC = (info & 0x0100) != 0
+ ek.Secure = (info & 0x0200) != 0
+ ek.MICError = (info & 0x0400) != 0
+ ek.Request = (info & 0x0800) != 0
+ ek.HasEncryptedKeyData = (info & 0x1000) != 0
+ ek.SMKMessage = (info & 0x2000) != 0
+
+ ek.KeyLength = binary.BigEndian.Uint16(data[3:5])
+ ek.ReplayCounter = binary.BigEndian.Uint64(data[5:13])
+
+ ek.Nonce = data[13:45]
+ ek.IV = data[45:61]
+ ek.RSC = binary.BigEndian.Uint64(data[61:69])
+ ek.ID = binary.BigEndian.Uint64(data[69:77])
+ ek.MIC = data[77:93]
+
+ ek.KeyDataLength = binary.BigEndian.Uint16(data[93:95])
+
+ totalLength := eapolKeyFrameLen + int(ek.KeyDataLength)
+ if len(data) < totalLength {
+ df.SetTruncated()
+ return fmt.Errorf("EAPOLKey data length %d too short, %d required",
+ len(data)-eapolKeyFrameLen, ek.KeyDataLength)
+ }
+
+ if ek.HasEncryptedKeyData {
+ ek.EncryptedKeyData = data[eapolKeyFrameLen:totalLength]
+ ek.BaseLayer = BaseLayer{
+ Contents: data[:totalLength],
+ Payload: data[totalLength:],
+ }
+ } else {
+ ek.BaseLayer = BaseLayer{
+ Contents: data[:eapolKeyFrameLen],
+ Payload: data[eapolKeyFrameLen:],
+ }
+ }
+
+ 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 (ek *EAPOLKey) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(eapolKeyFrameLen + len(ek.EncryptedKeyData))
+ if err != nil {
+ return err
+ }
+
+ buf[0] = byte(ek.KeyDescriptorType)
+
+ var info uint16
+ info |= uint16(ek.KeyDescriptorVersion)
+ info |= uint16(ek.KeyType) << 3
+ info |= uint16(ek.KeyIndex) << 4
+ if ek.Install {
+ info |= 0x0040
+ }
+ if ek.KeyACK {
+ info |= 0x0080
+ }
+ if ek.KeyMIC {
+ info |= 0x0100
+ }
+ if ek.Secure {
+ info |= 0x0200
+ }
+ if ek.MICError {
+ info |= 0x0400
+ }
+ if ek.Request {
+ info |= 0x0800
+ }
+ if ek.HasEncryptedKeyData {
+ info |= 0x1000
+ }
+ if ek.SMKMessage {
+ info |= 0x2000
+ }
+ binary.BigEndian.PutUint16(buf[1:3], info)
+
+ binary.BigEndian.PutUint16(buf[3:5], ek.KeyLength)
+ binary.BigEndian.PutUint64(buf[5:13], ek.ReplayCounter)
+
+ copy(buf[13:45], ek.Nonce)
+ copy(buf[45:61], ek.IV)
+ binary.BigEndian.PutUint64(buf[61:69], ek.RSC)
+ binary.BigEndian.PutUint64(buf[69:77], ek.ID)
+ copy(buf[77:93], ek.MIC)
+
+ binary.BigEndian.PutUint16(buf[93:95], ek.KeyDataLength)
+ if len(ek.EncryptedKeyData) > 0 {
+ copy(buf[95:95+len(ek.EncryptedKeyData)], ek.EncryptedKeyData)
+ }
+
+ return nil
+}
+
+func decodeEAPOLKey(data []byte, p gopacket.PacketBuilder) error {
+ ek := &EAPOLKey{}
+ return decodingLayerDecoder(ek, data, p)
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/eapol_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/eapol_test.go
new file mode 100644
index 00000000000..40b4a7fbb7d
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/eapol_test.go
@@ -0,0 +1,123 @@
+// Copyright placeholder
+//
+// 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"
+)
+
+const eapolErrFmt = "%s packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n"
+
+// testPacketEAPOLKey is frame 87 in the capture:
+// https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=wpa-Induction.pcap
+// It's the first EAPOL-Key frame in the WPA 4-way handshake:
+// 0x0000 02 03 00 75 02 00 8a 00 10 00 00 00 00 00 00 00 ...u............
+// 0x0010 00 3e 8e 96 7d ac d9 60 32 4c ac 5b 6a a7 21 23 .>..}..`2L.[j.!#
+// 0x0020 5b f5 7b 94 97 71 c8 67 98 9f 49 d0 4e d4 7c 69 [.{..q.g..I.N.|i
+// 0x0030 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3...............
+// 0x0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+// 0x0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+// 0x0060 00 00 16 dd 14 00 0f ac 04 59 2d a8 80 96 c4 61 .........Y-....a
+// 0x0070 da 24 6c 69 00 1e 87 7f 3d .$li....=
+
+var testPacketEAPOLKey = []byte{
+ 0x02, 0x03, 0x00, 0x75, 0x02, 0x00, 0x8a, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3e, 0x8e, 0x96, 0x7d, 0xac, 0xd9, 0x60,
+ 0x32, 0x4c, 0xac, 0x5b, 0x6a, 0xa7, 0x21, 0x23,
+ 0x5b, 0xf5, 0x7b, 0x94, 0x97, 0x71, 0xc8, 0x67,
+ 0x98, 0x9f, 0x49, 0xd0, 0x4e, 0xd4, 0x7c, 0x69,
+ 0x33, 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, 0x16, 0xdd, 0x14, 0x00, 0x0f, 0xac,
+ 0x04, 0x59, 0x2d, 0xa8, 0x80, 0x96, 0xc4, 0x61,
+ 0xda, 0x24, 0x6c, 0x69, 0x00, 0x1e, 0x87, 0x7f,
+ 0x3d,
+}
+
+func TestPacketEAPOLKey(t *testing.T) {
+ p := gopacket.NewPacket(testPacketEAPOLKey, LayerTypeEAPOL, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEAPOL, LayerTypeEAPOLKey,
+ LayerTypeDot11InformationElement}, t)
+
+ {
+ got := p.Layer(LayerTypeEAPOL).(*EAPOL)
+ want := &EAPOL{
+ BaseLayer: BaseLayer{
+ Contents: testPacketEAPOLKey[:4],
+ Payload: testPacketEAPOLKey[4:],
+ },
+ Version: 2,
+ Type: EAPOLTypeKey,
+ Length: 117,
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf(eapolErrFmt, "EAPOL", got, want)
+ }
+ }
+
+ {
+ got := p.Layer(LayerTypeEAPOLKey).(*EAPOLKey)
+ want := &EAPOLKey{
+ BaseLayer: BaseLayer{
+ Contents: testPacketEAPOLKey[4 : 4+eapolKeyFrameLen],
+ Payload: testPacketEAPOLKey[4+eapolKeyFrameLen:],
+ },
+ KeyDescriptorType: EAPOLKeyDescriptorTypeDot11,
+ KeyDescriptorVersion: EAPOLKeyDescriptorVersionAESHMACSHA1,
+ KeyType: EAPOLKeyTypePairwise,
+ KeyACK: true,
+ KeyLength: 16,
+ Nonce: []byte{
+ 0x3e, 0x8e, 0x96, 0x7d, 0xac, 0xd9, 0x60, 0x32,
+ 0x4c, 0xac, 0x5b, 0x6a, 0xa7, 0x21, 0x23, 0x5b,
+ 0xf5, 0x7b, 0x94, 0x97, 0x71, 0xc8, 0x67, 0x98,
+ 0x9f, 0x49, 0xd0, 0x4e, 0xd4, 0x7c, 0x69, 0x33,
+ },
+ IV: make([]byte, 16),
+ MIC: make([]byte, 16),
+ KeyDataLength: 22,
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf(eapolErrFmt, "EAPOLKey", got, want)
+ }
+ }
+ {
+ got := p.Layer(LayerTypeDot11InformationElement).(*Dot11InformationElement)
+ want := &Dot11InformationElement{
+ BaseLayer: BaseLayer{
+ Contents: testPacketEAPOLKey[4+eapolKeyFrameLen:],
+ Payload: []byte{},
+ },
+ ID: Dot11InformationElementIDVendor,
+ Length: 20,
+ OUI: []byte{0x00, 0x0f, 0xac, 0x04},
+ Info: []byte{
+ 0x59, 0x2d, 0xa8, 0x80, 0x96, 0xc4, 0x61, 0xda,
+ 0x24, 0x6c, 0x69, 0x00, 0x1e, 0x87, 0x7f, 0x3d,
+ },
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf(eapolErrFmt, "Dot11InformationElement", got, want)
+ }
+ }
+}
+
+func BenchmarkDecodePacketEAPOLKey(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketEAPOLKey, nil, gopacket.NoCopy)
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/endpoints.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/endpoints.go
index a0916e163f2..4c91cc33247 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/endpoints.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/endpoints.go
@@ -17,32 +17,32 @@ 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{"IPv4", func(b []byte) string {
+ EndpointIPv4 = gopacket.RegisterEndpointType(1, gopacket.EndpointTypeMetadata{Name: "IPv4", Formatter: func(b []byte) string {
return net.IP(b).String()
}})
- EndpointIPv6 = gopacket.RegisterEndpointType(2, gopacket.EndpointTypeMetadata{"IPv6", func(b []byte) 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{"MAC", func(b []byte) 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{"TCP", func(b []byte) 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{"UDP", func(b []byte) string {
+ 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{"SCTP", func(b []byte) string {
+ 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{"RUDP", func(b []byte) string {
+ 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{"UDPLite", func(b []byte) string {
+ 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{"PPP", func([]byte) string {
+ EndpointPPP = gopacket.RegisterEndpointType(9, gopacket.EndpointTypeMetadata{Name: "PPP", Formatter: func([]byte) string {
return "point"
}})
)
@@ -50,12 +50,16 @@ var (
// 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 {
- switch len(a) {
- case 4:
- return gopacket.NewEndpoint(EndpointIPv4, []byte(a))
- case 16:
- return gopacket.NewEndpoint(EndpointIPv6, []byte(a))
+ 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
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/endpoints_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/endpoints_test.go
new file mode 100644
index 00000000000..906762ac83e
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/endpoints_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/enums.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/enums.go
index 6bd43e3b439..fa443e63236 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/enums.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/enums.go
@@ -10,6 +10,7 @@ package layers
import (
"errors"
"fmt"
+ "runtime"
"github.com/google/gopacket"
)
@@ -49,6 +50,7 @@ const (
EthernetTypeNortelDiscovery EthernetType = 0x01a2
EthernetTypeTransparentEthernetBridging EthernetType = 0x6558
EthernetTypeDot1Q EthernetType = 0x8100
+ EthernetTypePPP EthernetType = 0x880b
EthernetTypePPPoEDiscovery EthernetType = 0x8863
EthernetTypePPPoESession EthernetType = 0x8864
EthernetTypeMPLSUnicast EthernetType = 0x8847
@@ -80,8 +82,10 @@ const (
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
@@ -92,33 +96,42 @@ const (
type LinkType uint8
const (
- // According to pcap-linktype(7).
+ // 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
- LinkTypeATM_RFC1483 LinkType = 100
- LinkTypeRaw LinkType = 101
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 = 104
+ 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
@@ -208,12 +221,17 @@ func (d Dot11Type) MainType() Dot11Type {
return d & dot11TypeMask
}
+func (d Dot11Type) QOS() bool {
+ return d&dot11QOSMask == Dot11TypeDataQOSData
+}
+
const (
Dot11TypeMgmt Dot11Type = 0x00
Dot11TypeCtrl Dot11Type = 0x01
Dot11TypeData Dot11Type = 0x02
Dot11TypeReserved Dot11Type = 0x03
dot11TypeMask = 0x03
+ dot11QOSMask = 0x23
// The following are type/subtype conglomerations.
@@ -261,107 +279,6 @@ const (
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 [265]EnumMetadata
- SCTPChunkTypeMetadata [265]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
@@ -374,58 +291,28 @@ func decodeIPv4or6(data []byte, p gopacket.PacketBuilder) error {
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),
- }
- }
+func initActualTypeData() {
+ // Each of the XXXTypeMetadata arrays contains mappings of how to handle enum
+ // values for various enum types in gopacket/layers.
+ // These arrays are actually created by gen2.go and stored in
+ // enums_generated.go.
+ //
+ // 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.
+ // Here we link up all enumerations with their respective names and decoders.
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[EthernetTypePPP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodePPP), Name: "PPP", LayerType: LayerTypePPP}
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}
@@ -453,12 +340,14 @@ func init() {
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"}
@@ -485,8 +374,17 @@ func init() {
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"}
+ // See https://github.com/the-tcpdump-group/libpcap/blob/170f717e6e818cdc4bcbbfd906b63088eaa88fa0/pcap/dlt.h#L85
+ // Or https://github.com/wireshark/wireshark/blob/854cfe53efe44080609c78053ecfb2342ad84a08/wiretap/pcap-common.c#L508
+ if runtime.GOOS == "openbsd" {
+ LinkTypeMetadata[14] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4or6), Name: "Raw"}
+ } else {
+ LinkTypeMetadata[12] = 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"}
@@ -496,6 +394,7 @@ func init() {
FDDIFrameControlMetadata[FDDIFrameControlLLC] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeLLC), Name: "LLC"}
EAPOLTypeMetadata[EAPOLTypeEAP] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEAP), Name: "EAP", LayerType: LayerTypeEAP}
+ EAPOLTypeMetadata[EAPOLTypeKey] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeEAPOLKey), Name: "EAPOLKey", LayerType: LayerTypeEAPOLKey}
ProtocolFamilyMetadata[ProtocolFamilyIPv4] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv4), Name: "IPv4", LayerType: LayerTypeIPv4}
ProtocolFamilyMetadata[ProtocolFamilyIPv6BSD] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeIPv6), Name: "IPv6", LayerType: LayerTypeIPv6}
@@ -517,6 +416,7 @@ func init() {
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}
@@ -542,7 +442,7 @@ func init() {
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}
+ USBTransportTypeMetadata[USBTransportTypeInterrupt] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBInterrupt), Name: "Interrupt", LayerType: LayerTypeUSBInterrupt}
+ USBTransportTypeMetadata[USBTransportTypeControl] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBControl), Name: "Control", LayerType: LayerTypeUSBControl}
+ USBTransportTypeMetadata[USBTransportTypeBulk] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(decodeUSBBulk), Name: "Bulk", LayerType: LayerTypeUSBBulk}
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/enums_generated.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/enums_generated.go
new file mode 100644
index 00000000000..bf77aac5013
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/enums_generated.go
@@ -0,0 +1,434 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+
+package layers
+
+// Created by gen2.go, don't edit manually
+// Generated at 2017-10-23 10:20:24.458771856 -0600 MDT m=+0.001159033
+
+import (
+ "fmt"
+
+ "github.com/google/gopacket"
+)
+
+func init() {
+ initUnknownTypesForLinkType()
+ initUnknownTypesForEthernetType()
+ initUnknownTypesForPPPType()
+ initUnknownTypesForIPProtocol()
+ initUnknownTypesForSCTPChunkType()
+ initUnknownTypesForPPPoECode()
+ initUnknownTypesForFDDIFrameControl()
+ initUnknownTypesForEAPOLType()
+ initUnknownTypesForProtocolFamily()
+ initUnknownTypesForDot11Type()
+ initUnknownTypesForUSBTransportType()
+ initActualTypeData()
+}
+
+// Decoder calls LinkTypeMetadata.DecodeWith's decoder.
+func (a LinkType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return LinkTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns LinkTypeMetadata.Name.
+func (a LinkType) String() string {
+ return LinkTypeMetadata[a].Name
+}
+
+// LayerType returns LinkTypeMetadata.LayerType.
+func (a LinkType) LayerType() gopacket.LayerType {
+ return LinkTypeMetadata[a].LayerType
+}
+
+type errorDecoderForLinkType int
+
+func (a *errorDecoderForLinkType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForLinkType) Error() string {
+ return fmt.Sprintf("Unable to decode LinkType %d", int(*a))
+}
+
+var errorDecodersForLinkType [256]errorDecoderForLinkType
+var LinkTypeMetadata [256]EnumMetadata
+
+func initUnknownTypesForLinkType() {
+ for i := 0; i < 256; i++ {
+ errorDecodersForLinkType[i] = errorDecoderForLinkType(i)
+ LinkTypeMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForLinkType[i],
+ Name: "UnknownLinkType",
+ }
+ }
+}
+
+// Decoder calls EthernetTypeMetadata.DecodeWith's decoder.
+func (a EthernetType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return EthernetTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns EthernetTypeMetadata.Name.
+func (a EthernetType) String() string {
+ return EthernetTypeMetadata[a].Name
+}
+
+// LayerType returns EthernetTypeMetadata.LayerType.
+func (a EthernetType) LayerType() gopacket.LayerType {
+ return EthernetTypeMetadata[a].LayerType
+}
+
+type errorDecoderForEthernetType int
+
+func (a *errorDecoderForEthernetType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForEthernetType) Error() string {
+ return fmt.Sprintf("Unable to decode EthernetType %d", int(*a))
+}
+
+var errorDecodersForEthernetType [65536]errorDecoderForEthernetType
+var EthernetTypeMetadata [65536]EnumMetadata
+
+func initUnknownTypesForEthernetType() {
+ for i := 0; i < 65536; i++ {
+ errorDecodersForEthernetType[i] = errorDecoderForEthernetType(i)
+ EthernetTypeMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForEthernetType[i],
+ Name: "UnknownEthernetType",
+ }
+ }
+}
+
+// Decoder calls PPPTypeMetadata.DecodeWith's decoder.
+func (a PPPType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return PPPTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns PPPTypeMetadata.Name.
+func (a PPPType) String() string {
+ return PPPTypeMetadata[a].Name
+}
+
+// LayerType returns PPPTypeMetadata.LayerType.
+func (a PPPType) LayerType() gopacket.LayerType {
+ return PPPTypeMetadata[a].LayerType
+}
+
+type errorDecoderForPPPType int
+
+func (a *errorDecoderForPPPType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForPPPType) Error() string {
+ return fmt.Sprintf("Unable to decode PPPType %d", int(*a))
+}
+
+var errorDecodersForPPPType [65536]errorDecoderForPPPType
+var PPPTypeMetadata [65536]EnumMetadata
+
+func initUnknownTypesForPPPType() {
+ for i := 0; i < 65536; i++ {
+ errorDecodersForPPPType[i] = errorDecoderForPPPType(i)
+ PPPTypeMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForPPPType[i],
+ Name: "UnknownPPPType",
+ }
+ }
+}
+
+// Decoder calls IPProtocolMetadata.DecodeWith's decoder.
+func (a IPProtocol) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return IPProtocolMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns IPProtocolMetadata.Name.
+func (a IPProtocol) String() string {
+ return IPProtocolMetadata[a].Name
+}
+
+// LayerType returns IPProtocolMetadata.LayerType.
+func (a IPProtocol) LayerType() gopacket.LayerType {
+ return IPProtocolMetadata[a].LayerType
+}
+
+type errorDecoderForIPProtocol int
+
+func (a *errorDecoderForIPProtocol) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForIPProtocol) Error() string {
+ return fmt.Sprintf("Unable to decode IPProtocol %d", int(*a))
+}
+
+var errorDecodersForIPProtocol [256]errorDecoderForIPProtocol
+var IPProtocolMetadata [256]EnumMetadata
+
+func initUnknownTypesForIPProtocol() {
+ for i := 0; i < 256; i++ {
+ errorDecodersForIPProtocol[i] = errorDecoderForIPProtocol(i)
+ IPProtocolMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForIPProtocol[i],
+ Name: "UnknownIPProtocol",
+ }
+ }
+}
+
+// Decoder calls SCTPChunkTypeMetadata.DecodeWith's decoder.
+func (a SCTPChunkType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return SCTPChunkTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns SCTPChunkTypeMetadata.Name.
+func (a SCTPChunkType) String() string {
+ return SCTPChunkTypeMetadata[a].Name
+}
+
+// LayerType returns SCTPChunkTypeMetadata.LayerType.
+func (a SCTPChunkType) LayerType() gopacket.LayerType {
+ return SCTPChunkTypeMetadata[a].LayerType
+}
+
+type errorDecoderForSCTPChunkType int
+
+func (a *errorDecoderForSCTPChunkType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForSCTPChunkType) Error() string {
+ return fmt.Sprintf("Unable to decode SCTPChunkType %d", int(*a))
+}
+
+var errorDecodersForSCTPChunkType [256]errorDecoderForSCTPChunkType
+var SCTPChunkTypeMetadata [256]EnumMetadata
+
+func initUnknownTypesForSCTPChunkType() {
+ for i := 0; i < 256; i++ {
+ errorDecodersForSCTPChunkType[i] = errorDecoderForSCTPChunkType(i)
+ SCTPChunkTypeMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForSCTPChunkType[i],
+ Name: "UnknownSCTPChunkType",
+ }
+ }
+}
+
+// Decoder calls PPPoECodeMetadata.DecodeWith's decoder.
+func (a PPPoECode) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return PPPoECodeMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns PPPoECodeMetadata.Name.
+func (a PPPoECode) String() string {
+ return PPPoECodeMetadata[a].Name
+}
+
+// LayerType returns PPPoECodeMetadata.LayerType.
+func (a PPPoECode) LayerType() gopacket.LayerType {
+ return PPPoECodeMetadata[a].LayerType
+}
+
+type errorDecoderForPPPoECode int
+
+func (a *errorDecoderForPPPoECode) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForPPPoECode) Error() string {
+ return fmt.Sprintf("Unable to decode PPPoECode %d", int(*a))
+}
+
+var errorDecodersForPPPoECode [256]errorDecoderForPPPoECode
+var PPPoECodeMetadata [256]EnumMetadata
+
+func initUnknownTypesForPPPoECode() {
+ for i := 0; i < 256; i++ {
+ errorDecodersForPPPoECode[i] = errorDecoderForPPPoECode(i)
+ PPPoECodeMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForPPPoECode[i],
+ Name: "UnknownPPPoECode",
+ }
+ }
+}
+
+// Decoder calls FDDIFrameControlMetadata.DecodeWith's decoder.
+func (a FDDIFrameControl) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return FDDIFrameControlMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns FDDIFrameControlMetadata.Name.
+func (a FDDIFrameControl) String() string {
+ return FDDIFrameControlMetadata[a].Name
+}
+
+// LayerType returns FDDIFrameControlMetadata.LayerType.
+func (a FDDIFrameControl) LayerType() gopacket.LayerType {
+ return FDDIFrameControlMetadata[a].LayerType
+}
+
+type errorDecoderForFDDIFrameControl int
+
+func (a *errorDecoderForFDDIFrameControl) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForFDDIFrameControl) Error() string {
+ return fmt.Sprintf("Unable to decode FDDIFrameControl %d", int(*a))
+}
+
+var errorDecodersForFDDIFrameControl [256]errorDecoderForFDDIFrameControl
+var FDDIFrameControlMetadata [256]EnumMetadata
+
+func initUnknownTypesForFDDIFrameControl() {
+ for i := 0; i < 256; i++ {
+ errorDecodersForFDDIFrameControl[i] = errorDecoderForFDDIFrameControl(i)
+ FDDIFrameControlMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForFDDIFrameControl[i],
+ Name: "UnknownFDDIFrameControl",
+ }
+ }
+}
+
+// Decoder calls EAPOLTypeMetadata.DecodeWith's decoder.
+func (a EAPOLType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return EAPOLTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns EAPOLTypeMetadata.Name.
+func (a EAPOLType) String() string {
+ return EAPOLTypeMetadata[a].Name
+}
+
+// LayerType returns EAPOLTypeMetadata.LayerType.
+func (a EAPOLType) LayerType() gopacket.LayerType {
+ return EAPOLTypeMetadata[a].LayerType
+}
+
+type errorDecoderForEAPOLType int
+
+func (a *errorDecoderForEAPOLType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForEAPOLType) Error() string {
+ return fmt.Sprintf("Unable to decode EAPOLType %d", int(*a))
+}
+
+var errorDecodersForEAPOLType [256]errorDecoderForEAPOLType
+var EAPOLTypeMetadata [256]EnumMetadata
+
+func initUnknownTypesForEAPOLType() {
+ for i := 0; i < 256; i++ {
+ errorDecodersForEAPOLType[i] = errorDecoderForEAPOLType(i)
+ EAPOLTypeMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForEAPOLType[i],
+ Name: "UnknownEAPOLType",
+ }
+ }
+}
+
+// Decoder calls ProtocolFamilyMetadata.DecodeWith's decoder.
+func (a ProtocolFamily) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return ProtocolFamilyMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns ProtocolFamilyMetadata.Name.
+func (a ProtocolFamily) String() string {
+ return ProtocolFamilyMetadata[a].Name
+}
+
+// LayerType returns ProtocolFamilyMetadata.LayerType.
+func (a ProtocolFamily) LayerType() gopacket.LayerType {
+ return ProtocolFamilyMetadata[a].LayerType
+}
+
+type errorDecoderForProtocolFamily int
+
+func (a *errorDecoderForProtocolFamily) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForProtocolFamily) Error() string {
+ return fmt.Sprintf("Unable to decode ProtocolFamily %d", int(*a))
+}
+
+var errorDecodersForProtocolFamily [256]errorDecoderForProtocolFamily
+var ProtocolFamilyMetadata [256]EnumMetadata
+
+func initUnknownTypesForProtocolFamily() {
+ for i := 0; i < 256; i++ {
+ errorDecodersForProtocolFamily[i] = errorDecoderForProtocolFamily(i)
+ ProtocolFamilyMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForProtocolFamily[i],
+ Name: "UnknownProtocolFamily",
+ }
+ }
+}
+
+// Decoder calls Dot11TypeMetadata.DecodeWith's decoder.
+func (a Dot11Type) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return Dot11TypeMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns Dot11TypeMetadata.Name.
+func (a Dot11Type) String() string {
+ return Dot11TypeMetadata[a].Name
+}
+
+// LayerType returns Dot11TypeMetadata.LayerType.
+func (a Dot11Type) LayerType() gopacket.LayerType {
+ return Dot11TypeMetadata[a].LayerType
+}
+
+type errorDecoderForDot11Type int
+
+func (a *errorDecoderForDot11Type) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForDot11Type) Error() string {
+ return fmt.Sprintf("Unable to decode Dot11Type %d", int(*a))
+}
+
+var errorDecodersForDot11Type [256]errorDecoderForDot11Type
+var Dot11TypeMetadata [256]EnumMetadata
+
+func initUnknownTypesForDot11Type() {
+ for i := 0; i < 256; i++ {
+ errorDecodersForDot11Type[i] = errorDecoderForDot11Type(i)
+ Dot11TypeMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForDot11Type[i],
+ Name: "UnknownDot11Type",
+ }
+ }
+}
+
+// Decoder calls USBTransportTypeMetadata.DecodeWith's decoder.
+func (a USBTransportType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return USBTransportTypeMetadata[a].DecodeWith.Decode(data, p)
+}
+
+// String returns USBTransportTypeMetadata.Name.
+func (a USBTransportType) String() string {
+ return USBTransportTypeMetadata[a].Name
+}
+
+// LayerType returns USBTransportTypeMetadata.LayerType.
+func (a USBTransportType) LayerType() gopacket.LayerType {
+ return USBTransportTypeMetadata[a].LayerType
+}
+
+type errorDecoderForUSBTransportType int
+
+func (a *errorDecoderForUSBTransportType) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderForUSBTransportType) Error() string {
+ return fmt.Sprintf("Unable to decode USBTransportType %d", int(*a))
+}
+
+var errorDecodersForUSBTransportType [256]errorDecoderForUSBTransportType
+var USBTransportTypeMetadata [256]EnumMetadata
+
+func initUnknownTypesForUSBTransportType() {
+ for i := 0; i < 256; i++ {
+ errorDecodersForUSBTransportType[i] = errorDecoderForUSBTransportType(i)
+ USBTransportTypeMetadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersForUSBTransportType[i],
+ Name: "UnknownUSBTransportType",
+ }
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ethernet.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ethernet.go
index 4eebf8c6148..b73748f2f7d 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ethernet.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ethernet.go
@@ -46,6 +46,7 @@ func (eth *Ethernet) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) er
eth.SrcMAC = net.HardwareAddr(data[6:12])
eth.EthernetType = EthernetType(binary.BigEndian.Uint16(data[12:14]))
eth.BaseLayer = BaseLayer{data[:14], data[14:]}
+ eth.Length = 0
if eth.EthernetType < 0x0600 {
eth.Length = uint16(eth.EthernetType)
eth.EthernetType = EthernetTypeLLC
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gen2.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gen2.go
new file mode 100644
index 00000000000..150cad77f8f
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gen2.go
@@ -0,0 +1,104 @@
+// 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 handles creating string constants and function templates for enums.
+//
+// go run gen.go | gofmt > enums_generated.go
+package main
+
+import (
+ "fmt"
+ "log"
+ "os"
+ "text/template"
+ "time"
+)
+
+const fmtString = `// Copyright 2012 Google, Inc. All rights reserved.
+
+package layers
+
+// Created by gen2.go, don't edit manually
+// Generated at %s
+
+import (
+ "fmt"
+
+ "github.com/google/gopacket"
+)
+
+`
+
+var funcsTmpl = template.Must(template.New("foo").Parse(`
+// Decoder calls {{.Name}}Metadata.DecodeWith's decoder.
+func (a {{.Name}}) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return {{.Name}}Metadata[a].DecodeWith.Decode(data, p)
+}
+// String returns {{.Name}}Metadata.Name.
+func (a {{.Name}}) String() string {
+ return {{.Name}}Metadata[a].Name
+}
+// LayerType returns {{.Name}}Metadata.LayerType.
+func (a {{.Name}}) LayerType() gopacket.LayerType {
+ return {{.Name}}Metadata[a].LayerType
+}
+
+type errorDecoderFor{{.Name}} int
+func (a *errorDecoderFor{{.Name}}) Decode(data []byte, p gopacket.PacketBuilder) error {
+ return a
+}
+func (a *errorDecoderFor{{.Name}}) Error() string {
+ return fmt.Sprintf("Unable to decode {{.Name}} %d", int(*a))
+}
+
+var errorDecodersFor{{.Name}} [{{.Num}}]errorDecoderFor{{.Name}}
+var {{.Name}}Metadata [{{.Num}}]EnumMetadata
+
+func initUnknownTypesFor{{.Name}}() {
+ for i := 0; i < {{.Num}}; i++ {
+ errorDecodersFor{{.Name}}[i] = errorDecoderFor{{.Name}}(i)
+ {{.Name}}Metadata[i] = EnumMetadata{
+ DecodeWith: &errorDecodersFor{{.Name}}[i],
+ Name: "Unknown{{.Name}}",
+ }
+ }
+}
+`))
+
+func main() {
+ fmt.Fprintf(os.Stderr, "Writing results to stdout\n")
+ fmt.Printf(fmtString, time.Now())
+ types := []struct {
+ Name string
+ Num int
+ }{
+ {"LinkType", 256},
+ {"EthernetType", 65536},
+ {"PPPType", 65536},
+ {"IPProtocol", 256},
+ {"SCTPChunkType", 256},
+ {"PPPoECode", 256},
+ {"FDDIFrameControl", 256},
+ {"EAPOLType", 256},
+ {"ProtocolFamily", 256},
+ {"Dot11Type", 256},
+ {"USBTransportType", 256},
+ }
+
+ fmt.Println("func init() {")
+ for _, t := range types {
+ fmt.Printf("initUnknownTypesFor%s()\n", t.Name)
+ }
+ fmt.Println("initActualTypeData()")
+ fmt.Println("}")
+ for _, t := range types {
+ if err := funcsTmpl.Execute(os.Stdout, t); err != nil {
+ log.Fatalf("Failed to execute template %s: %v", t.Name, err)
+ }
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gen_linted.sh b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gen_linted.sh
new file mode 100644
index 00000000000..75c701f4d5e
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gen_linted.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+for i in *.go; do golint $i | grep -q . || echo $i; done > .linted
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/geneve.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/geneve.go
new file mode 100644
index 00000000000..72fe7c779ca
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/geneve.go
@@ -0,0 +1,110 @@
+// 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"
+)
+
+// 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:2])
+ opt.Type = data[2]
+ opt.Flags = data[3] >> 4
+ opt.Length = (data[3]&0xf)*4 + 4
+
+ opt.Data = make([]byte, opt.Length-4)
+ copy(opt.Data, data[4:opt.Length])
+
+ return opt, opt.Length
+}
+
+func (gn *Geneve) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 7 {
+ df.SetTruncated()
+ return errors.New("geneve packet too short")
+ }
+
+ gn.Version = data[0] >> 7
+ gn.OptionsLength = (data[0] & 0x3f) * 4
+
+ 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), int32(gn.OptionsLength)
+ if len(data) < int(length+7) {
+ df.SetTruncated()
+ return errors.New("geneve packet too short")
+ }
+
+ for length > 0 {
+ opt, len := decodeGeneveOption(data[offset:], gn)
+ gn.Options = append(gn.Options, opt)
+
+ length -= int32(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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/geneve_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/geneve_test.go
new file mode 100644
index 00000000000..f1a420bc6a5
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/geneve_test.go
@@ -0,0 +1,157 @@
+// 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,
+}
+
+var testPacketGeneve3 = []byte{
+ 0x00, 0x1b, 0x21, 0x3c, 0xac, 0x30, 0x00, 0x1b, 0x21, 0x3c, 0xab, 0x64, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x8e, 0xdf, 0xad, 0x40, 0x00, 0x40, 0x11, 0x32, 0xaf, 0x14, 0x00, 0x00, 0x01, 0x14, 0x00,
+ 0x00, 0x02, 0x31, 0x4a, 0x17, 0xc1, 0x00, 0x7a, 0x00, 0x00, 0x02, 0x40, 0x65, 0x58, 0x00, 0x00,
+ 0x0a, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x0c, 0xfe, 0x71, 0xd8, 0x83, 0x72, 0x4f,
+ 0xb6, 0x9e, 0xd2, 0x49, 0x51, 0x48, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0xbd, 0xa2, 0x40, 0x00,
+ 0x40, 0x01, 0x41, 0x04, 0x1e, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x02, 0x08, 0x00, 0x2c, 0x54,
+ 0x29, 0x52, 0x00, 0x17, 0xf1, 0xa2, 0xce, 0x54, 0x00, 0x00, 0x00, 0x00, 0x17, 0x78, 0x0c, 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 TestDecodeGeneve3(t *testing.T) {
+ p := gopacket.NewPacket(testPacketGeneve3, 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: testPacketGeneve3[42:58],
+ Payload: testPacketGeneve3[58:156],
+ },
+ Version: 0x0,
+ OptionsLength: 0x8,
+ OAMPacket: false,
+ CriticalOption: true,
+ Protocol: EthernetTypeTransparentEthernetBridging,
+ VNI: 0xa,
+ Options: []*GeneveOption{
+ &GeneveOption{
+ Class: 0x0,
+ Type: 0x80,
+ Length: 8,
+ Data: []byte{0, 0, 0, 0xc},
+ },
+ },
+ }
+ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre.go
index 733ecde697e..9c5e7d246fa 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre.go
@@ -8,17 +8,18 @@ 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
+ ChecksumPresent, RoutingPresent, KeyPresent, SeqPresent, StrictSourceRoute, AckPresent bool
+ RecursionControl, Flags, Version uint8
+ Protocol EthernetType
+ Checksum, Offset uint16
+ Key, Seq, Ack uint32
*GRERouting
}
@@ -41,6 +42,7 @@ func (g *GRE) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
g.KeyPresent = data[0]&0x20 != 0
g.SeqPresent = data[0]&0x10 != 0
g.StrictSourceRoute = data[0]&0x08 != 0
+ g.AckPresent = data[1]&0x80 != 0
g.RecursionControl = data[0] & 0x7
g.Flags = data[1] >> 3
g.Version = data[1] & 0x7
@@ -76,10 +78,112 @@ func (g *GRE) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
tail = &sre.Next
}
}
+ if g.AckPresent {
+ g.Ack = binary.BigEndian.Uint32(data[offset : offset+4])
+ offset += 4
+ }
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
+ }
+ if g.AckPresent {
+ 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
+ }
+ if g.AckPresent {
+ buf[1] |= 0x80
+ }
+ 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.AckPresent {
+ binary.BigEndian.PutUint32(buf[offset:offset+4], g.Ack)
+ offset += 4
+ }
+ 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
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre_test.go
index c7c1ee12f50..af2e38e3e29 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gre_test.go
@@ -6,9 +6,12 @@
package layers
import (
- "github.com/google/gopacket"
+ "fmt"
+ "net"
"reflect"
"testing"
+
+ "github.com/google/gopacket"
)
// testPacketGRE is the packet:
@@ -55,6 +58,79 @@ func BenchmarkDecodePacketGRE(b *testing.B) {
}
}
+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.
@@ -100,3 +176,214 @@ func BenchmarkDecodePacketEthernetOverGRE(b *testing.B) {
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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gtp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gtp.go
new file mode 100644
index 00000000000..0ec8a6a0020
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gtp.go
@@ -0,0 +1,181 @@
+// 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"
+)
+
+const gtpMinimumSizeInBytes int = 8
+
+// GTPExtensionHeader is used to carry extra data and enable future extensions of the GTP without the need to use another version number.
+type GTPExtensionHeader struct {
+ Type uint8
+ Content []byte
+}
+
+// GTPv1U protocol is used to exchange user data over GTP tunnels across the Sx interfaces.
+// Defined in https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1595
+type GTPv1U struct {
+ BaseLayer
+ Version uint8
+ ProtocolType uint8
+ Reserved uint8
+ ExtensionHeaderFlag bool
+ SequenceNumberFlag bool
+ NPDUFlag bool
+ MessageType uint8
+ MessageLength uint16
+ TEID uint32
+ SequenceNumber uint16
+ NPDU uint8
+ GTPExtensionHeaders []GTPExtensionHeader
+}
+
+// LayerType returns LayerTypeGTPV1U
+func (g *GTPv1U) LayerType() gopacket.LayerType { return LayerTypeGTPv1U }
+
+// DecodeFromBytes analyses a byte slice and attempts to decode it as a GTPv1U packet
+func (g *GTPv1U) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ hLen := gtpMinimumSizeInBytes
+ dLen := len(data)
+ if dLen < hLen {
+ return fmt.Errorf("GTP packet too small: %d bytes", dLen)
+ }
+ g.Version = (data[0] >> 5) & 0x07
+ g.ProtocolType = (data[0] >> 4) & 0x01
+ g.Reserved = (data[0] >> 3) & 0x01
+ g.SequenceNumberFlag = ((data[0] >> 1) & 0x01) == 1
+ g.NPDUFlag = (data[0] & 0x01) == 1
+ g.ExtensionHeaderFlag = ((data[0] >> 2) & 0x01) == 1
+ g.MessageType = data[1]
+ g.MessageLength = binary.BigEndian.Uint16(data[2:4])
+ pLen := 8 + g.MessageLength
+ if uint16(dLen) < pLen {
+ return fmt.Errorf("GTP packet too small: %d bytes", dLen)
+ }
+ // Field used to multiplex different connections in the same GTP tunnel.
+ g.TEID = binary.BigEndian.Uint32(data[4:8])
+ cIndex := uint16(hLen)
+ if g.SequenceNumberFlag || g.NPDUFlag || g.ExtensionHeaderFlag {
+ hLen += 4
+ cIndex += 4
+ if dLen < hLen {
+ return fmt.Errorf("GTP packet too small: %d bytes", dLen)
+ }
+ if g.SequenceNumberFlag {
+ g.SequenceNumber = binary.BigEndian.Uint16(data[8:10])
+ }
+ if g.NPDUFlag {
+ g.NPDU = data[10]
+ }
+ if g.ExtensionHeaderFlag {
+ extensionFlag := true
+ for extensionFlag {
+ extensionType := uint8(data[cIndex-1])
+ extensionLength := uint(data[cIndex])
+ if extensionLength == 0 {
+ return fmt.Errorf("GTP packet with invalid extension header")
+ }
+ // extensionLength is in 4-octet units
+ lIndex := cIndex + (uint16(extensionLength) * 4)
+ if uint16(dLen) < lIndex {
+ fmt.Println(dLen, lIndex)
+ return fmt.Errorf("GTP packet with small extension header: %d bytes", dLen)
+ }
+ content := data[cIndex+1 : lIndex-1]
+ eh := GTPExtensionHeader{Type: extensionType, Content: content}
+ g.GTPExtensionHeaders = append(g.GTPExtensionHeaders, eh)
+ cIndex = lIndex
+ // Check if coming bytes are from an extension header
+ extensionFlag = data[cIndex-1] != 0
+
+ }
+ }
+ }
+ g.BaseLayer = BaseLayer{Contents: data[:cIndex], Payload: data[cIndex:]}
+ 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 *GTPv1U) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ data, err := b.PrependBytes(gtpMinimumSizeInBytes)
+ if err != nil {
+ return err
+ }
+ data[0] |= (g.Version << 5)
+ data[0] |= (1 << 4)
+ if len(g.GTPExtensionHeaders) > 0 {
+ data[0] |= 0x04
+ g.ExtensionHeaderFlag = true
+ }
+ if g.SequenceNumberFlag {
+ data[0] |= 0x02
+ }
+ if g.NPDUFlag {
+ data[0] |= 0x01
+ }
+ data[1] = g.MessageType
+ binary.BigEndian.PutUint16(data[2:4], g.MessageLength)
+ binary.BigEndian.PutUint32(data[4:8], g.TEID)
+ if g.ExtensionHeaderFlag || g.SequenceNumberFlag || g.NPDUFlag {
+ data, err := b.AppendBytes(4)
+ if err != nil {
+ return err
+ }
+ binary.BigEndian.PutUint16(data[:2], g.SequenceNumber)
+ data[2] = g.NPDU
+ for _, eh := range g.GTPExtensionHeaders {
+ data[len(data)-1] = eh.Type
+ lContent := len(eh.Content)
+ // extensionLength is in 4-octet units
+ extensionLength := (lContent + 2) / 4
+ // Get two extra byte for the next extension header type and length
+ data, err = b.AppendBytes(lContent + 2)
+ if err != nil {
+ return err
+ }
+ data[0] = byte(extensionLength)
+ copy(data[1:lContent+1], eh.Content)
+ }
+ }
+ return nil
+
+}
+
+// CanDecode returns a set of layers that GTP objects can decode.
+func (g *GTPv1U) CanDecode() gopacket.LayerClass {
+ return LayerTypeGTPv1U
+}
+
+// NextLayerType specifies the next layer that GoPacket should attempt to
+func (g *GTPv1U) NextLayerType() gopacket.LayerType {
+ version := uint8(g.LayerPayload()[0]) >> 4
+ if version == 4 {
+ return LayerTypeIPv4
+ } else if version == 6 {
+ return LayerTypeIPv6
+ } else {
+ return LayerTypePPP
+ }
+}
+
+func decodeGTPv1u(data []byte, p gopacket.PacketBuilder) error {
+ gtp := &GTPv1U{}
+ err := gtp.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(gtp)
+ return p.NextDecoder(gtp.NextLayerType())
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gtp_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gtp_test.go
new file mode 100644
index 00000000000..9f934ee598c
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/gtp_test.go
@@ -0,0 +1,158 @@
+// 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"
+)
+
+// testGTPPacket is the packet:
+//0000 00 0c 29 e3 c6 4d 00 0c 29 da d1 de 08 00 45 00 ..)..M.. ).....E.
+//0010 00 7c 00 00 40 00 40 11 67 bb c0 a8 28 b2 c0 a8 .|..@.@. g...(...
+//0020 28 b3 08 68 08 68 00 68 c1 c4 32 ff 00 58 00 00 (..h.h.h ..2..X..
+//0030 00 01 26 7b 00 00 45 00 00 54 06 76 00 00 40 01 ..&{..E. .T.v..@.
+//0040 98 2f c0 a8 28 b2 ca 0b 28 9e 00 00 39 e9 00 00 ./..(... (...9...
+//0050 28 7d 06 11 20 4b 7f 3a 0d 00 08 09 0a 0b 0c 0d (}.. K.: ........
+//0060 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d ........ ........
+//0070 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d .. !"#$% &'()*+,-
+//0080 2e 2f 30 31 32 33 34 35 36 37 ./012345 67
+
+var testGTPPacket = []byte{
+ 0x00, 0x0c, 0x29, 0xe3, 0xc6, 0x4d, 0x00, 0x0c,
+ 0x29, 0xda, 0xd1, 0xde, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x7c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
+ 0x67, 0xbb, 0xc0, 0xa8, 0x28, 0xb2, 0xc0, 0xa8,
+ 0x28, 0xb3, 0x08, 0x68, 0x08, 0x68, 0x00, 0x68,
+ 0xc1, 0xc4, 0x32, 0xff, 0x00, 0x58, 0x00, 0x00,
+ 0x00, 0x01, 0x26, 0x7b, 0x00, 0x00, 0x45, 0x00,
+ 0x00, 0x54, 0x06, 0x76, 0x00, 0x00, 0x40, 0x01,
+ 0x98, 0x2f, 0xc0, 0xa8, 0x28, 0xb2, 0xca, 0x0b,
+ 0x28, 0x9e, 0x00, 0x00, 0x39, 0xe9, 0x00, 0x00,
+ 0x28, 0x7d, 0x06, 0x11, 0x20, 0x4b, 0x7f, 0x3a,
+ 0x0d, 0x00, 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,
+ 0x36, 0x37,
+}
+
+func TestGTPPacket(t *testing.T) {
+ p := gopacket.NewPacket(testGTPPacket, LayerTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeGTPv1U, LayerTypeIPv4,
+ LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, ok := p.Layer(LayerTypeGTPv1U).(*GTPv1U); ok {
+ want := &GTPv1U{
+ Version: 1,
+ ProtocolType: 1,
+ Reserved: 0,
+ ExtensionHeaderFlag: false,
+ SequenceNumberFlag: true,
+ NPDUFlag: false,
+ MessageType: 255,
+ MessageLength: 88,
+ TEID: 1,
+ SequenceNumber: 9851,
+ }
+ want.BaseLayer = BaseLayer{testGTPPacket[42:54], testGTPPacket[54:]}
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("GTP packet mismatch:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+
+ }
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{}
+ err := got.SerializeTo(buf, opts)
+ if err != nil {
+ t.Error(err)
+ }
+ if !reflect.DeepEqual(got.Contents, buf.Bytes()) {
+ t.Errorf("GTP packet serialization failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", buf.Bytes(), got.Contents)
+ }
+ } else {
+ t.Error("Incorrect gtp packet")
+ }
+}
+
+// testGTPPacketWithEH is the packet
+//000000 00 0c 29 e3 c6 4d 00 0c 29 da d1 de 08 00 45 00 ..)..M..).....E.
+//000010 00 80 00 00 40 00 40 11 67 bb c0 a8 28 b2 c0 a8 ....@.@.g...(...
+//000020 28 b3 08 68 08 68 00 6c c1 95 36 ff 00 58 00 10 (..h.h.l..6..X..
+//000030 06 57 00 05 00 c0 01 09 04 00 45 00 00 54 06 a5 .W........E..T..
+//000040 00 00 40 01 98 00 c0 a8 28 b2 ca 0b 28 9e 00 00 ..@.....(...(...
+//000050 e3 b6 00 00 28 ac 35 11 20 4b a6 3d 0d 00 08 09 ....(.5. K.=....
+//000060 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 ................
+//000070 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 ...... !"#$%&'()
+//000080 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37
+
+var testGTPPacketWithEH = []byte{
+ 0x00, 0x0c, 0x29, 0xe3, 0xc6, 0x4d, 0x00, 0x0c,
+ 0x29, 0xda, 0xd1, 0xde, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
+ 0x67, 0xbb, 0xc0, 0xa8, 0x28, 0xb2, 0xc0, 0xa8,
+ 0x28, 0xb3, 0x08, 0x68, 0x08, 0x68, 0x00, 0x6c,
+ 0xc1, 0x95, 0x36, 0xff, 0x00, 0x58, 0x00, 0x10,
+ 0x06, 0x57, 0x00, 0x05, 0x00, 0xc0, 0x01, 0x09,
+ 0x04, 0x00, 0x45, 0x00, 0x00, 0x54, 0x06, 0xa5,
+ 0x00, 0x00, 0x40, 0x01, 0x98, 0x00, 0xc0, 0xa8,
+ 0x28, 0xb2, 0xca, 0x0b, 0x28, 0x9e, 0x00, 0x00,
+ 0xe3, 0xb6, 0x00, 0x00, 0x28, 0xac, 0x35, 0x11,
+ 0x20, 0x4b, 0xa6, 0x3d, 0x0d, 0x00, 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, 0x36, 0x37,
+}
+
+func TestGTPPacketWithEH(t *testing.T) {
+ p := gopacket.NewPacket(testGTPPacketWithEH, LayerTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeGTPv1U, LayerTypeIPv4,
+ LayerTypeICMPv4, gopacket.LayerTypePayload}, t)
+ if got, ok := p.Layer(LayerTypeGTPv1U).(*GTPv1U); ok {
+ want := &GTPv1U{
+ Version: 1,
+ ProtocolType: 1,
+ Reserved: 0,
+ ExtensionHeaderFlag: true,
+ SequenceNumberFlag: true,
+ NPDUFlag: false,
+ MessageType: 255,
+ MessageLength: 88,
+ TEID: 1050199,
+ SequenceNumber: 5,
+ GTPExtensionHeaders: []GTPExtensionHeader{GTPExtensionHeader{Type: uint8(192), Content: []byte{0x9, 0x4}}},
+ }
+ want.BaseLayer = BaseLayer{testGTPPacketWithEH[42:58], testGTPPacketWithEH[58:]}
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("GTP packet mismatch:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
+
+ }
+ buf := gopacket.NewSerializeBuffer()
+ opts := gopacket.SerializeOptions{}
+ err := got.SerializeTo(buf, opts)
+ if err != nil {
+ t.Error(err)
+ }
+ if !reflect.DeepEqual(got.Contents, buf.Bytes()) {
+ t.Errorf("GTP packet serialization failed:\ngot :\n%#v\n\nbuf :\n%#v\n\n", got.Contents, buf.Bytes())
+ }
+ } else {
+ t.Errorf("Invalid GTP packet")
+ }
+
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/iana_ports.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/iana_ports.go
index fbf281ef306..ddcf3ecdb7d 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/iana_ports.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/iana_ports.go
@@ -3,7 +3,7 @@
package layers
// Created by gen.go, don't edit manually
-// Generated at 2014-09-09 10:09:28.309114133 -0600 MDT
+// Generated at 2017-10-23 09:57:28.214859163 -0600 MDT m=+1.011679290
// 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.
@@ -45,7 +45,6 @@ var tcpPortNames = map[TCPPort]string{
44: "mpm-flags",
45: "mpm",
46: "mpm-snd",
- 47: "ni-ftp",
48: "auditd",
49: "tacacs",
50: "re-mail-ck",
@@ -55,7 +54,6 @@ var tcpPortNames = map[TCPPort]string{
55: "isi-gl",
56: "xns-auth",
58: "xns-mail",
- 61: "ni-mail",
62: "acas",
63: "whoispp",
64: "covia",
@@ -672,6 +670,8 @@ var tcpPortNames = map[TCPPort]string{
833: "netconfsoapbeep",
847: "dhcp-failover2",
848: "gdoi",
+ 853: "domain-s",
+ 854: "dlep",
860: "iscsi",
861: "owamp-control",
862: "twamp-control",
@@ -687,6 +687,7 @@ var tcpPortNames = map[TCPPort]string{
911: "xact-backup",
912: "apex-mesh",
913: "apex-edge",
+ 953: "rndc",
989: "ftps-data",
990: "ftps",
991: "nas",
@@ -698,6 +699,7 @@ var tcpPortNames = map[TCPPort]string{
998: "busboy",
999: "garcon",
1000: "cadlock2",
+ 1001: "webpush",
1010: "surf",
1021: "exp1",
1022: "exp2",
@@ -1076,7 +1078,7 @@ var tcpPortNames = map[TCPPort]string{
1404: "igi-lm",
1405: "ibm-res",
1406: "netlabs-lm",
- 1407: "dbsa-lm",
+ 1407: "tibet-server",
1408: "sophia-lm",
1409: "here-lm",
1410: "hiq",
@@ -1549,7 +1551,7 @@ var tcpPortNames = map[TCPPort]string{
1880: "vsat-control",
1881: "ibm-mqseries2",
1882: "ecsqdmn",
- 1883: "ibm-mqisdp",
+ 1883: "mqtt",
1884: "idmaps",
1885: "vrtstrapserver",
1886: "leoip",
@@ -1883,7 +1885,7 @@ var tcpPortNames = map[TCPPort]string{
2218: "bounzza",
2219: "netiq-ncap",
2220: "netiq",
- 2221: "rockwell-csp1",
+ 2221: "ethernet-ip-s",
2222: "EtherNet-IP-1",
2223: "rockwell-csp2",
2224: "efi-mg",
@@ -2037,6 +2039,7 @@ var tcpPortNames = map[TCPPort]string{
2374: "hydra",
2375: "docker",
2376: "docker-s",
+ 2377: "swarm",
2379: "etcd-client",
2380: "etcd-server",
2381: "compaq-https",
@@ -2084,6 +2087,7 @@ var tcpPortNames = map[TCPPort]string{
2423: "rnrp",
2424: "kofax-svr",
2425: "fjitsuappmgr",
+ 2426: "vcmp",
2427: "mgcp-gateway",
2428: "ott",
2429: "ft-role",
@@ -2297,7 +2301,7 @@ var tcpPortNames = map[TCPPort]string{
2637: "imdocsvc",
2638: "sybaseanywhere",
2639: "aminet",
- 2640: "sai-sentlm",
+ 2640: "ami-control",
2641: "hdl-srv",
2642: "tragic",
2643: "gte-samp",
@@ -2722,7 +2726,7 @@ var tcpPortNames = map[TCPPort]string{
3068: "ls3bcast",
3069: "ls3",
3070: "mgxswitch",
- 3071: "csd-mgmt-port",
+ 3071: "xplat-replicate",
3072: "csd-monitor",
3073: "vcrp",
3074: "xbox",
@@ -2948,6 +2952,7 @@ var tcpPortNames = map[TCPPort]string{
3297: "cytel-lm",
3298: "deskview",
3299: "pdrncs",
+ 3300: "ceph",
3302: "mcs-fastmail",
3303: "opsession-clnt",
3304: "opsession-srvr",
@@ -3201,8 +3206,8 @@ var tcpPortNames = map[TCPPort]string{
3564: "esimport",
3565: "m2pa",
3566: "quest-data-hub",
- 3567: "enc-eps",
- 3568: "enc-tunnel-sec",
+ 3567: "dof-eps",
+ 3568: "dof-tunnel-sec",
3569: "mbg-ctrl",
3570: "mccwebsvr-port",
3571: "megardsvr-port",
@@ -3327,6 +3332,7 @@ var tcpPortNames = map[TCPPort]string{
3690: "svn",
3691: "magaya-network",
3692: "intelsync",
+ 3693: "easl",
3695: "bmc-data-coll",
3696: "telnetcpcd",
3697: "nw-license",
@@ -3747,6 +3753,7 @@ var tcpPortNames = map[TCPPort]string{
4117: "hillrserv",
4118: "netscript",
4119: "assuria-slm",
+ 4120: "minirem",
4121: "e-builder",
4122: "fprams",
4123: "z-wave",
@@ -3807,7 +3814,7 @@ var tcpPortNames = map[TCPPort]string{
4180: "httpx",
4181: "macbak",
4182: "pcptcpservice",
- 4183: "gmmp",
+ 4183: "cyborgnet",
4184: "universe-suite",
4185: "wcpp",
4186: "boxbackupstore",
@@ -3817,6 +3824,7 @@ var tcpPortNames = map[TCPPort]string{
4190: "sieve",
4192: "azeti",
4193: "pvxplusio",
+ 4197: "hctl",
4199: "eims-admin",
4300: "corelccam",
4301: "d-data",
@@ -3825,7 +3833,7 @@ var tcpPortNames = map[TCPPort]string{
4304: "owserver",
4305: "batman",
4306: "pinghgl",
- 4307: "visicron-vs",
+ 4307: "trueconf",
4308: "compx-lockview",
4309: "dserver",
4310: "mirrtex",
@@ -3838,7 +3846,6 @@ var tcpPortNames = map[TCPPort]string{
4321: "rwhois",
4322: "trim-event",
4323: "trim-ice",
- 4324: "balour",
4325: "geognosisman",
4326: "geognosis",
4327: "jaxer-web",
@@ -3847,6 +3854,9 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -3899,6 +3909,16 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -3954,6 +3974,7 @@ var tcpPortNames = map[TCPPort]string{
4568: "bmc-reporting",
4569: "iax",
4570: "deploymentmap",
+ 4573: "cardifftec-back",
4590: "rid",
4591: "l3t-at-an",
4593: "ipt-anri-anri",
@@ -3968,6 +3989,7 @@ var tcpPortNames = map[TCPPort]string{
4602: "mtsserver",
4603: "menandmice-upg",
4604: "irp",
+ 4605: "sixchat",
4658: "playsta2-app",
4659: "playsta2-lob",
4660: "smaclmgr",
@@ -4008,6 +4030,7 @@ var tcpPortNames = map[TCPPort]string{
4702: "netxms-sync",
4703: "npqes-test",
4704: "assuria-ins",
+ 4711: "trinity-dist",
4725: "truckstar",
4727: "fcis",
4728: "capmux",
@@ -4028,6 +4051,8 @@ var tcpPortNames = map[TCPPort]string{
4751: "spocp",
4752: "snap",
4753: "simon",
+ 4756: "RDCenter",
+ 4774: "converge",
4784: "bfd-multi-ctl",
4786: "smart-install",
4787: "sia-ctrl-plane",
@@ -4083,6 +4108,7 @@ var tcpPortNames = map[TCPPort]string{
4953: "dbsyncarbiter",
4969: "ccss-qmm",
4970: "ccss-qsm",
+ 4971: "burp",
4984: "webyast",
4985: "gerhcs",
4986: "mrip",
@@ -4119,6 +4145,8 @@ var tcpPortNames = map[TCPPort]string{
5029: "infobright",
5030: "surfpass",
5032: "signacert-agent",
+ 5033: "jtnetd-server",
+ 5034: "jtnetd-status",
5042: "asnaacceler8db",
5043: "swxadmin",
5044: "lxi-evntsvc",
@@ -4166,6 +4194,7 @@ var tcpPortNames = map[TCPPort]string{
5102: "oms-nonsecure",
5103: "actifio-c2c",
5106: "actifioudsagent",
+ 5107: "actifioreplic",
5111: "taep-as-svc",
5112: "pm-cmdsvr",
5114: "ev-services",
@@ -4202,6 +4231,7 @@ var tcpPortNames = map[TCPPort]string{
5194: "cpscomm",
5195: "ampl-lic",
5196: "ampl-tableproxy",
+ 5197: "tunstall-lwp",
5200: "targus-getdata",
5201: "targus-getdata1",
5202: "targus-getdata2",
@@ -4232,6 +4262,7 @@ var tcpPortNames = map[TCPPort]string{
5251: "caevms",
5252: "movaz-ssc",
5253: "kpdp",
+ 5254: "logcabin",
5264: "3com-njack-1",
5265: "3com-njack-2",
5269: "xmpp-server",
@@ -4319,6 +4350,7 @@ var tcpPortNames = map[TCPPort]string{
5435: "sceanics",
5443: "spss",
5445: "smbdirect",
+ 5450: "tiepie",
5453: "surebox",
5454: "apc-5454",
5455: "apc-5455",
@@ -4328,6 +4360,11 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -4335,13 +4372,16 @@ var tcpPortNames = map[TCPPort]string{
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: "enc-eps-mc-sec",
+ 5567: "dof-dps-mc-sec",
5568: "sdt",
5569: "rdmnet-ctrl",
5573: "sdmmp",
@@ -4379,6 +4419,7 @@ var tcpPortNames = map[TCPPort]string{
5638: "flcrs",
5639: "ics",
5646: "vfmobile",
+ 5666: "nrpe",
5670: "filemq",
5671: "amqps",
5672: "amqp",
@@ -4395,6 +4436,8 @@ var tcpPortNames = map[TCPPort]string{
5689: "qmvideo",
5693: "rbsystem",
5696: "kmip",
+ 5700: "supportassist",
+ 5705: "storageos",
5713: "proshareaudio",
5714: "prosharevideo",
5715: "prosharedata",
@@ -4462,6 +4505,7 @@ var tcpPortNames = map[TCPPort]string{
5990: "wbem-exp-https",
5991: "nuxsl",
5992: "consul-insight",
+ 5993: "cim-rs",
5999: "cvsup",
6064: "ndl-ahp-svc",
6065: "winpharaoh",
@@ -4522,6 +4566,7 @@ var tcpPortNames = map[TCPPort]string{
6162: "patrol-coll",
6163: "pscribe",
6200: "lm-x",
+ 6209: "qmtps",
6222: "radmind",
6241: "jeol-nsdtp-1",
6242: "jeol-nsdtp-2",
@@ -4553,6 +4598,7 @@ var tcpPortNames = map[TCPPort]string{
6355: "pmcs",
6360: "metaedit-mu",
6370: "metaedit-se",
+ 6379: "redis",
6382: "metatude-mds",
6389: "clariion-evr01",
6390: "metaedit-ws",
@@ -4569,6 +4615,7 @@ var tcpPortNames = map[TCPPort]string{
6446: "mysql-proxy",
6455: "skip-cert-recv",
6456: "skip-cert-send",
+ 6464: "ieee11073-20701",
6471: "lvision-lm",
6480: "sun-sr-http",
6481: "servicetags",
@@ -4621,6 +4668,7 @@ var tcpPortNames = map[TCPPort]string{
6626: "wago-service",
6627: "nexgen",
6628: "afesc-mc",
+ 6629: "nexgen-aux",
6632: "mxodbc-connect",
6640: "ovsdb",
6653: "openflow",
@@ -4635,13 +4683,14 @@ var tcpPortNames = map[TCPPort]string{
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: "printercare-cc",
+ 6716: "princity-agent",
6767: "bmc-perf-agent",
6768: "bmc-perf-mgrd",
6769: "adi-gxp-srvprt",
@@ -4653,7 +4702,7 @@ var tcpPortNames = map[TCPPort]string{
6786: "smc-jmx",
6787: "smc-admin",
6788: "smc-http",
- 6789: "smc-https",
+ 6789: "radg",
6790: "hnmp",
6791: "hnm",
6801: "acnet",
@@ -4664,6 +4713,7 @@ var tcpPortNames = map[TCPPort]string{
6850: "iccrushmore",
6868: "acctopus-cc",
6888: "muse",
+ 6900: "rtimeviewer",
6901: "jetstream",
6935: "ethoscan",
6936: "xsmsvc",
@@ -4676,6 +4726,7 @@ var tcpPortNames = map[TCPPort]string{
6965: "swistrap",
6966: "swispol",
6969: "acmsoda",
+ 6970: "conductor",
6997: "MobilitySrv",
6998: "iatp-highpri",
6999: "iatp-normalpri",
@@ -4695,6 +4746,8 @@ var tcpPortNames = map[TCPPort]string{
7013: "microtalon-dis",
7014: "microtalon-com",
7015: "talon-webserver",
+ 7016: "spg",
+ 7017: "grasp",
7018: "fisa-svc",
7019: "doceri-ctl",
7020: "dpserve",
@@ -4712,6 +4765,7 @@ var tcpPortNames = map[TCPPort]string{
7099: "lazy-ptop",
7100: "font-service",
7101: "elcn",
+ 7117: "rothaga",
7121: "virprot-lm",
7128: "scenidm",
7129: "scenccs",
@@ -4731,11 +4785,15 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -4773,6 +4831,7 @@ var tcpPortNames = map[TCPPort]string{
7471: "sttunnel",
7473: "rise",
7474: "neo4j",
+ 7478: "openit",
7491: "telops-lmd",
7500: "silhouette",
7501: "ovbus",
@@ -4788,6 +4847,7 @@ var tcpPortNames = map[TCPPort]string{
7547: "cwmp",
7548: "tidp",
7549: "nls-tl",
+ 7551: "controlone-con",
7560: "sncp",
7563: "cfw",
7566: "vsi-omega",
@@ -4795,6 +4855,7 @@ var tcpPortNames = map[TCPPort]string{
7570: "aries-kfinder",
7574: "coherence",
7588: "sun-lm",
+ 7606: "mipi-debug",
7624: "indi",
7626: "simco",
7627: "soap-http",
@@ -4811,6 +4872,8 @@ var tcpPortNames = map[TCPPort]string{
7676: "imqbrokerd",
7677: "sun-user-https",
7680: "pando-pub",
+ 7683: "dmt",
+ 7687: "bolt",
7689: "collaber",
7697: "klio",
7700: "em7-secom",
@@ -4821,6 +4884,7 @@ var tcpPortNames = map[TCPPort]string{
7725: "nitrogen",
7726: "freezexservice",
7727: "trident-data",
+ 7728: "osvr",
7734: "smip",
7738: "aiagent",
7741: "scriptview",
@@ -4828,6 +4892,7 @@ var tcpPortNames = map[TCPPort]string{
7743: "sstp-1",
7744: "raqmon-pdu",
7747: "prgp",
+ 7775: "inetfs",
7777: "cbt",
7778: "interwise",
7779: "vstat",
@@ -4871,6 +4936,8 @@ var tcpPortNames = map[TCPPort]string{
8002: "teradataordbms",
8003: "mcreport",
8005: "mxi",
+ 8006: "wpl-analytics",
+ 8007: "warppipe",
8008: "http-alt",
8019: "qbdb",
8020: "intu-ec-svcdisc",
@@ -4882,6 +4949,7 @@ var tcpPortNames = map[TCPPort]string{
8033: "mindprint",
8034: "vantronix-mgmt",
8040: "ampify",
+ 8041: "enguity-xccetp",
8042: "fs-agent",
8043: "fs-server",
8044: "fs-mgmt",
@@ -4895,7 +4963,10 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -4903,6 +4974,7 @@ var tcpPortNames = map[TCPPort]string{
8086: "d-s-n",
8087: "simplifymedia",
8088: "radan-http",
+ 8090: "opsmessaging",
8091: "jamlink",
8097: "sac",
8100: "xprint-server",
@@ -4919,6 +4991,7 @@ var tcpPortNames = map[TCPPort]string{
8130: "indigo-vrmi",
8131: "indigo-vbcp",
8132: "dbabble",
+ 8140: "puppet",
8148: "isdd",
8153: "quantastor",
8160: "patrol",
@@ -4928,6 +5001,7 @@ var tcpPortNames = map[TCPPort]string{
8182: "vmware-fdm",
8183: "proremote",
8184: "itach",
+ 8190: "gcp-rphy",
8191: "limnerpressure",
8192: "spytechphone",
8194: "blp1",
@@ -4942,8 +5016,10 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -4952,6 +5028,7 @@ var tcpPortNames = map[TCPPort]string{
8313: "hub-open-net",
8320: "tnp-discover",
8321: "tnp",
+ 8322: "garmin-marine",
8351: "server-find",
8376: "cruise-enum",
8377: "cruise-swroute",
@@ -4968,6 +5045,7 @@ var tcpPortNames = map[TCPPort]string{
8415: "dlpx-sp",
8416: "espeech",
8417: "espeech-rtp",
+ 8423: "aritts",
8442: "cybro-a-bus",
8443: "pcsync-https",
8444: "pcsync-http",
@@ -4984,7 +5062,7 @@ var tcpPortNames = map[TCPPort]string{
8502: "ftnmtp",
8554: "rtsp-alt",
8555: "d-fence",
- 8567: "enc-tunnel",
+ 8567: "dof-tunnel",
8600: "asterix",
8610: "canon-mfnp",
8611: "canon-bjnp1",
@@ -5033,14 +5111,17 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -5053,6 +5134,7 @@ var tcpPortNames = map[TCPPort]string{
9026: "swa-4",
9050: "versiera",
9051: "fio-cmgmt",
+ 9060: "CardWeb-IO",
9080: "glrpc",
9083: "emc-pp-mgmtsvc",
9084: "aurora",
@@ -5123,6 +5205,7 @@ var tcpPortNames = map[TCPPort]string{
9321: "guibase",
9343: "mpidcmgr",
9344: "mphlpdmc",
+ 9345: "rancher",
9346: "ctechlicensing",
9374: "fjdmimgr",
9380: "boxp",
@@ -5193,6 +5276,8 @@ var tcpPortNames = map[TCPPort]string{
9955: "alljoyn-stm",
9966: "odnsp",
9978: "xybrid-rt",
+ 9979: "visweather",
+ 9981: "pumpkindb",
9987: "dsm-scm-target",
9988: "nsesrvr",
9990: "osm-appsrvr",
@@ -5216,6 +5301,7 @@ var tcpPortNames = map[TCPPort]string{
10008: "octopus",
10009: "swdtp-sv",
10010: "rxapi",
+ 10020: "abb-hw",
10050: "zabbix-agent",
10051: "zabbix-trapper",
10055: "qptlmd",
@@ -5233,6 +5319,7 @@ var tcpPortNames = map[TCPPort]string{
10115: "netiq-endpt",
10116: "netiq-voipa",
10117: "iqrm",
+ 10125: "cimple",
10128: "bmc-perf-sd",
10129: "bmc-gms",
10160: "qb-db-server",
@@ -5242,6 +5329,7 @@ var tcpPortNames = map[TCPPort]string{
10201: "rsms",
10252: "apollo-relay",
10260: "axis-wimp-port",
+ 10261: "tile-ml",
10288: "blocks",
10321: "cosir",
10540: "MOS-lower",
@@ -5249,12 +5337,14 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -5347,12 +5437,14 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -5378,7 +5470,10 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -5392,6 +5487,8 @@ var tcpPortNames = map[TCPPort]string{
17219: "chipper",
17220: "avtp",
17221: "avdecc",
+ 17223: "isa100-gci",
+ 17225: "trdp-md",
17234: "integrius-stp",
17235: "ssh-mgmt",
17500: "db-lsp",
@@ -5418,6 +5515,7 @@ var tcpPortNames = map[TCPPort]string{
18463: "ac-cluster",
18634: "rds-ib",
18635: "rds-ip",
+ 18668: "vdmmesh",
18769: "ique",
18881: "infotos",
18888: "apc-necmp",
@@ -5426,6 +5524,7 @@ var tcpPortNames = map[TCPPort]string{
19020: "j-link",
19191: "opsec-uaa",
19194: "ua-secureagent",
+ 19220: "cora",
19283: "keysrvr",
19315: "keyshadow",
19398: "mtrgtrans",
@@ -5448,6 +5547,7 @@ var tcpPortNames = map[TCPPort]string{
20046: "tmophl7mts",
20048: "mountd",
20049: "nfsrdma",
+ 20057: "avesterra",
20167: "tolfab",
20202: "ipdtp-port",
20222: "ipulse-ics",
@@ -5456,6 +5556,7 @@ var tcpPortNames = map[TCPPort]string{
20999: "athand-mmp",
21000: "irtrans",
21010: "notezilla-lan",
+ 21221: "aigairserver",
21553: "rdm-tfs",
21554: "dfserver",
21590: "vofr-gateway",
@@ -5476,6 +5577,7 @@ var tcpPortNames = map[TCPPort]string{
22222: "easyengine",
22273: "wnn6",
22305: "cis",
+ 22335: "shrewd-control",
22343: "cis-secure",
22347: "wibukey",
22350: "codemeter",
@@ -5492,6 +5594,7 @@ var tcpPortNames = map[TCPPort]string{
23004: "inovaport5",
23005: "inovaport6",
23053: "gntp",
+ 23294: "5afe-dir",
23333: "elxmgmt",
23400: "novar-dbase",
23401: "novar-alarm",
@@ -5513,6 +5616,7 @@ var tcpPortNames = map[TCPPort]string{
24465: "tonidods",
24554: "binkp",
24577: "bilobit",
+ 24666: "sdtvwcam",
24676: "canditv",
24677: "flashfiler",
24678: "proactivate",
@@ -5539,6 +5643,7 @@ var tcpPortNames = map[TCPPort]string{
26000: "quake",
26133: "scscp",
26208: "wnn6-ds",
+ 26257: "cockroach",
26260: "ezproxy",
26261: "ezmeeting",
26262: "k3software-svr",
@@ -5556,14 +5661,18 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -5575,6 +5684,7 @@ var tcpPortNames = map[TCPPort]string{
31949: "iceedcp-rx",
32034: "iracinghelper",
32249: "t1distproc60",
+ 32400: "plex",
32483: "apm-link",
32635: "sec-ntb-clnt",
32636: "DMExpress",
@@ -5592,6 +5702,7 @@ var tcpPortNames = map[TCPPort]string{
32801: "mlsn",
32811: "retp",
32896: "idmgratm",
+ 33060: "mysqlx",
33123: "aurora-balaena",
33331: "diamondport",
33333: "dgi-serv",
@@ -5613,6 +5724,7 @@ var tcpPortNames = map[TCPPort]string{
35004: "rt-classmanager",
35005: "rt-labtracker",
35006: "rt-helper",
+ 35100: "axio-disc",
35354: "kitim",
35355: "altova-lm",
35356: "guttersnex",
@@ -5620,12 +5732,15 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -5639,6 +5754,7 @@ var tcpPortNames = map[TCPPort]string{
40843: "csccfirewall",
41111: "fs-qos",
41121: "tentacle",
+ 41230: "z-wave-s",
41794: "crestron-cip",
41795: "crestron-ctp",
41796: "crestron-cips",
@@ -5655,7 +5771,7 @@ var tcpPortNames = map[TCPPort]string{
43439: "eq3-update",
43440: "ew-mgmt",
43441: "ciscocsdb",
- 44123: "z-wave-s",
+ 44123: "z-wave-tunnel",
44321: "pmcd",
44322: "pmcdproxy",
44323: "pmwebapi",
@@ -5665,12 +5781,15 @@ var tcpPortNames = map[TCPPort]string{
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",
@@ -5693,6 +5812,7 @@ var tcpPortNames = map[TCPPort]string{
48619: "iqobject",
48653: "robotraconteur",
49000: "matahari",
+ 49001: "nusrp",
}
var udpPortNames = map[UDPPort]string{
1: "tcpmux",
@@ -5724,7 +5844,6 @@ var udpPortNames = map[UDPPort]string{
44: "mpm-flags",
45: "mpm",
46: "mpm-snd",
- 47: "ni-ftp",
48: "auditd",
49: "tacacs",
50: "re-mail-ck",
@@ -5734,7 +5853,6 @@ var udpPortNames = map[UDPPort]string{
55: "isi-gl",
56: "xns-auth",
58: "xns-mail",
- 61: "ni-mail",
62: "acas",
63: "whoispp",
64: "covia",
@@ -6350,6 +6468,8 @@ var udpPortNames = map[UDPPort]string{
833: "netconfsoapbeep",
847: "dhcp-failover2",
848: "gdoi",
+ 853: "domain-s",
+ 854: "dlep",
860: "iscsi",
861: "owamp-control",
862: "twamp-control",
@@ -6755,7 +6875,6 @@ var udpPortNames = map[UDPPort]string{
1404: "igi-lm",
1405: "ibm-res",
1406: "netlabs-lm",
- 1407: "dbsa-lm",
1408: "sophia-lm",
1409: "here-lm",
1410: "hiq",
@@ -6875,6 +6994,7 @@ var udpPortNames = map[UDPPort]string{
1525: "orasrv",
1526: "pdap-np",
1527: "tlisrv",
+ 1528: "ngr-t",
1529: "coauthor",
1530: "rap-service",
1531: "rap-listen",
@@ -7226,7 +7346,7 @@ var udpPortNames = map[UDPPort]string{
1880: "vsat-control",
1881: "ibm-mqseries2",
1882: "ecsqdmn",
- 1883: "ibm-mqisdp",
+ 1883: "mqtt",
1884: "idmaps",
1885: "vrtstrapserver",
1886: "leoip",
@@ -7558,7 +7678,7 @@ var udpPortNames = map[UDPPort]string{
2218: "bounzza",
2219: "netiq-ncap",
2220: "netiq",
- 2221: "rockwell-csp1",
+ 2221: "ethernet-ip-s",
2222: "EtherNet-IP-1",
2223: "rockwell-csp2",
2224: "efi-mg",
@@ -7750,6 +7870,7 @@ var udpPortNames = map[UDPPort]string{
2423: "rnrp",
2424: "kofax-svr",
2425: "fjitsuappmgr",
+ 2426: "vcmp",
2427: "mgcp-gateway",
2428: "ott",
2429: "ft-role",
@@ -7963,7 +8084,7 @@ var udpPortNames = map[UDPPort]string{
2637: "imdocsvc",
2638: "sybaseanywhere",
2639: "aminet",
- 2640: "sai-sentlm",
+ 2640: "ami-control",
2641: "hdl-srv",
2642: "tragic",
2643: "gte-samp",
@@ -8385,7 +8506,6 @@ var udpPortNames = map[UDPPort]string{
3068: "ls3bcast",
3069: "ls3",
3070: "mgxswitch",
- 3071: "csd-mgmt-port",
3072: "csd-monitor",
3073: "vcrp",
3074: "xbox",
@@ -8861,8 +8981,8 @@ var udpPortNames = map[UDPPort]string{
3562: "sdbproxy",
3563: "watcomdebug",
3564: "esimport",
- 3567: "enc-eps",
- 3568: "enc-tunnel-sec",
+ 3567: "dof-eps",
+ 3568: "dof-tunnel-sec",
3569: "mbg-ctrl",
3570: "mccwebsvr-port",
3571: "megardsvr-port",
@@ -9458,12 +9578,13 @@ var udpPortNames = map[UDPPort]string{
4180: "httpx",
4181: "macbak",
4182: "pcptcpservice",
- 4183: "gmmp",
+ 4183: "cyborgnet",
4184: "universe-suite",
4185: "wcpp",
4188: "vatata",
4191: "dsmipv6",
4192: "azeti-bd",
+ 4197: "hctl",
4199: "eims-admin",
4300: "corelccam",
4301: "d-data",
@@ -9472,7 +9593,7 @@ var udpPortNames = map[UDPPort]string{
4304: "owserver",
4305: "batman",
4306: "pinghgl",
- 4307: "visicron-vs",
+ 4307: "trueconf",
4308: "compx-lockview",
4309: "dserver",
4310: "mirrtex",
@@ -9480,7 +9601,6 @@ var udpPortNames = map[UDPPort]string{
4321: "rwhois",
4322: "trim-event",
4323: "trim-ice",
- 4324: "balour",
4325: "geognosisman",
4326: "geognosis",
4327: "jaxer-web",
@@ -9508,6 +9628,7 @@ var udpPortNames = map[UDPPort]string{
4359: "omabcastltkm",
4361: "nacnl",
4362: "afore-vdp-disc",
+ 4366: "shadowstream",
4368: "wxbrief",
4369: "epmd",
4370: "elpro-tunnel",
@@ -9530,6 +9651,11 @@ var udpPortNames = map[UDPPort]string{
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",
@@ -9590,6 +9716,7 @@ var udpPortNames = map[UDPPort]string{
4599: "a17-an-an",
4600: "piranha1",
4601: "piranha2",
+ 4621: "ventoso",
4658: "playsta2-app",
4659: "playsta2-lob",
4660: "smaclmgr",
@@ -9628,6 +9755,7 @@ var udpPortNames = map[UDPPort]string{
4700: "netxms-agent",
4701: "netxms-mgmt",
4702: "netxms-sync",
+ 4711: "trinity-dist",
4725: "truckstar",
4726: "a26-fap-fgw",
4727: "fcis-disc",
@@ -9644,16 +9772,20 @@ var udpPortNames = map[UDPPort]string{
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",
@@ -9702,6 +9834,7 @@ var udpPortNames = map[UDPPort]string{
4952: "sagxtsds",
4969: "ccss-qmm",
4970: "ccss-qsm",
+ 4980: "ctxs-vpp",
4986: "mrip",
4987: "smar-se-port1",
4988: "smar-se-port2",
@@ -9906,6 +10039,7 @@ var udpPortNames = map[UDPPort]string{
5436: "pmip6-cntl",
5437: "pmip6-data",
5443: "spss",
+ 5450: "tiepie-disc",
5453: "surebox",
5454: "apc-5454",
5455: "apc-5455",
@@ -9915,6 +10049,7 @@ var udpPortNames = map[UDPPort]string{
5463: "ttlpriceproxy",
5464: "quailnet",
5465: "netops-broker",
+ 5474: "apsolab-rpc",
5500: "fcp-addr-srvr1",
5501: "fcp-addr-srvr2",
5502: "fcp-srvr-inst1",
@@ -9926,7 +10061,7 @@ var udpPortNames = map[UDPPort]string{
5554: "sgi-esphttp",
5555: "personal-agent",
5556: "freeciv",
- 5567: "enc-eps-mc-sec",
+ 5567: "dof-dps-mc-sec",
5568: "sdt",
5569: "rdmnet-device",
5573: "sdmmp",
@@ -10044,6 +10179,7 @@ var udpPortNames = map[UDPPort]string{
6072: "diagnose-proc",
6073: "directplay8",
6074: "max",
+ 6080: "gue",
6081: "geneve",
6082: "p25cai",
6083: "miami-bcast",
@@ -10085,6 +10221,7 @@ var udpPortNames = map[UDPPort]string{
6163: "pscribe",
6200: "lm-x",
6201: "thermo-calc",
+ 6209: "qmtps",
6222: "radmind",
6241: "jeol-nsddp-1",
6242: "jeol-nsddp-2",
@@ -10117,6 +10254,7 @@ var udpPortNames = map[UDPPort]string{
6389: "clariion-evr01",
6390: "metaedit-ws",
6417: "faxcomservice",
+ 6419: "svdrp-disc",
6420: "nim-vdrshell",
6421: "nim-wan",
6443: "sun-sr-https",
@@ -10125,6 +10263,7 @@ var udpPortNames = map[UDPPort]string{
6446: "mysql-proxy",
6455: "skip-cert-recv",
6456: "skip-cert-send",
+ 6464: "ieee11073-20701",
6471: "lvision-lm",
6480: "sun-sr-http",
6481: "servicetags",
@@ -10172,8 +10311,11 @@ var udpPortNames = map[UDPPort]string{
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",
@@ -10199,7 +10341,6 @@ var udpPortNames = map[UDPPort]string{
6786: "smc-jmx",
6787: "smc-admin",
6788: "smc-http",
- 6789: "smc-https",
6790: "hnmp",
6791: "hnm",
6801: "acnet",
@@ -10239,6 +10380,8 @@ var udpPortNames = map[UDPPort]string{
7013: "microtalon-dis",
7014: "microtalon-com",
7015: "talon-webserver",
+ 7016: "spg",
+ 7017: "grasp",
7019: "doceri-view",
7020: "dpserve",
7021: "dpserveadmin",
@@ -10251,6 +10394,7 @@ var udpPortNames = map[UDPPort]string{
7070: "arcp",
7071: "iwg1",
7080: "empowerid",
+ 7088: "zixi-transport",
7095: "jdp-disc",
7099: "lazy-ptop",
7100: "font-service",
@@ -10274,6 +10418,7 @@ var udpPortNames = map[UDPPort]string{
7201: "dlip",
7227: "ramp",
7235: "aspcoordination",
+ 7244: "frc-hicp-disc",
7262: "cnap",
7272: "watchme-7272",
7273: "oma-rlp",
@@ -10327,6 +10472,7 @@ var udpPortNames = map[UDPPort]string{
7570: "aries-kfinder",
7574: "coherence-disc",
7588: "sun-lm",
+ 7606: "mipi-debug",
7624: "indi",
7627: "soap-http",
7628: "zen-pawn",
@@ -10347,6 +10493,7 @@ var udpPortNames = map[UDPPort]string{
7725: "nitrogen",
7726: "freezexservice",
7727: "trident-data",
+ 7728: "osvr",
7734: "smip",
7738: "aiagent",
7741: "scriptview",
@@ -10357,6 +10504,7 @@ var udpPortNames = map[UDPPort]string{
7778: "interwise",
7779: "vstat",
7781: "accu-lmgr",
+ 7784: "s-bfd",
7786: "minivend",
7787: "popup-reminders",
7789: "office-tools",
@@ -10392,6 +10540,8 @@ var udpPortNames = map[UDPPort]string{
8002: "teradataordbms",
8003: "mcreport",
8005: "mxi",
+ 8006: "wpl-disc",
+ 8007: "warppipe",
8008: "http-alt",
8019: "qbdb",
8020: "intu-ec-svcdisc",
@@ -10403,6 +10553,7 @@ var udpPortNames = map[UDPPort]string{
8033: "mindprint",
8034: "vantronix-mgmt",
8040: "ampify",
+ 8041: "enguity-xccetp",
8052: "senomix01",
8053: "senomix02",
8054: "senomix03",
@@ -10451,15 +10602,19 @@ var udpPortNames = map[UDPPort]string{
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",
@@ -10467,6 +10622,7 @@ var udpPortNames = map[UDPPort]string{
8379: "cruise-diags",
8380: "cruise-update",
8383: "m2mservices",
+ 8384: "marathontp",
8400: "cvd",
8401: "sabarsd",
8402: "abarsd",
@@ -10483,9 +10639,10 @@ var udpPortNames = map[UDPPort]string{
8474: "noteshare",
8500: "fmtp",
8501: "cmtp-av",
+ 8503: "lsp-self-ping",
8554: "rtsp-alt",
8555: "d-fence",
- 8567: "enc-tunnel",
+ 8567: "dof-tunnel",
8600: "asterix",
8609: "canon-cpp-disc",
8610: "canon-mfnp",
@@ -10507,6 +10664,8 @@ var udpPortNames = map[UDPPort]string{
8793: "acd-pm",
8800: "sunwebadmin",
8804: "truecm",
+ 8805: "pfcp",
+ 8808: "ssports-bcast",
8873: "dxspider",
8880: "cddbp-alt",
8883: "secure-mqtt",
@@ -10525,6 +10684,8 @@ var udpPortNames = map[UDPPort]string{
8912: "wcbackup",
8913: "dragonfly",
8954: "cumulus-admin",
+ 8980: "nod-provider",
+ 8981: "nod-client",
8989: "sunwebadmins",
8990: "http-wmap",
8991: "https-wmap",
@@ -10541,6 +10702,7 @@ var udpPortNames = map[UDPPort]string{
9024: "swa-2",
9025: "swa-3",
9026: "swa-4",
+ 9060: "CardWeb-RT",
9080: "glrpc",
9084: "aurora",
9085: "ibm-rsyscon",
@@ -10709,6 +10871,7 @@ var udpPortNames = map[UDPPort]string{
10200: "trisoap",
10201: "rscs",
10252: "apollo-relay",
+ 10253: "eapol-relay",
10260: "axis-wimp-port",
10288: "blocks",
10439: "bngsync",
@@ -10844,6 +11007,8 @@ var udpPortNames = map[UDPPort]string{
17220: "avtp",
17221: "avdecc",
17222: "cpsp",
+ 17224: "trdp-pd",
+ 17225: "trdp-md",
17234: "integrius-stp",
17235: "ssh-mgmt",
17500: "db-lsp-disc",
@@ -10864,6 +11029,7 @@ var udpPortNames = map[UDPPort]string{
18463: "ac-cluster",
18634: "rds-ib",
18635: "rds-ip",
+ 18668: "vdmmesh-disc",
18769: "ique",
18881: "infotos",
18888: "apc-necmp",
@@ -10871,6 +11037,7 @@ var udpPortNames = map[UDPPort]string{
19007: "scintilla",
19191: "opsec-uaa",
19194: "ua-secureagent",
+ 19220: "cora-disc",
19283: "keysrvr",
19315: "keyshadow",
19398: "mtrgtrans",
@@ -10916,6 +11083,7 @@ var udpPortNames = map[UDPPort]string{
22005: "optohost004",
22273: "wnn6",
22305: "cis",
+ 22335: "shrewd-stream",
22343: "cis-secure",
22347: "wibukey",
22350: "codemeter",
@@ -10930,6 +11098,7 @@ var udpPortNames = map[UDPPort]string{
23004: "inovaport5",
23005: "inovaport6",
23272: "s102",
+ 23294: "5afe-disc",
23333: "elxmgmt",
23400: "novar-dbase",
23401: "novar-alarm",
@@ -10999,6 +11168,7 @@ var udpPortNames = map[UDPPort]string{
30260: "kingdomsonline",
30832: "samsung-disc",
30999: "ovobs",
+ 31016: "ka-kdp",
31029: "yawn",
31416: "xqosd",
31457: "tetrinet",
@@ -11032,27 +11202,33 @@ var udpPortNames = map[UDPPort]string{
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",
@@ -11075,6 +11251,7 @@ var udpPortNames = map[UDPPort]string{
44900: "m3da-disc",
45000: "asmp-mon",
45054: "invision-ag",
+ 45514: "cloudcheck-ping",
45678: "eba",
45825: "qdb2service",
45966: "ssr-servermgr",
@@ -11095,6 +11272,7 @@ var udpPortNames = map[UDPPort]string{
48556: "com-bardac-dw",
48619: "iqobject",
48653: "robotraconteur",
+ 49001: "nusdp-disc",
}
var sctpPortNames = map[SCTPPort]string{
9: "discard",
@@ -11121,6 +11299,7 @@ var sctpPortNames = map[SCTPPort]string{
3868: "diameter",
4333: "ahsp",
4502: "a25-fap-fgw",
+ 4711: "trinity-dist",
4739: "ipfix",
4740: "ipfixs",
5060: "sip",
@@ -11141,6 +11320,8 @@ var sctpPortNames = map[SCTPPort]string{
6706: "frc-lp",
6970: "conductor-mpx",
7626: "simco",
+ 7701: "nfapi",
+ 7728: "osvr",
8471: "pim-port",
9082: "lcs-ap",
9084: "aurora",
@@ -11156,8 +11337,15 @@ var sctpPortNames = map[SCTPPort]string{
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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp4.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp4.go
index e103e211709..bd3f03f00c2 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp4.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp4.go
@@ -9,13 +9,13 @@ package layers
import (
"encoding/binary"
+ "errors"
"fmt"
+ "reflect"
+
"github.com/google/gopacket"
- "strconv"
)
-type ICMPv4TypeCode uint16
-
const (
ICMPv4TypeEchoReply = 0
ICMPv4TypeDestinationUnreachable = 3
@@ -34,6 +34,177 @@ const (
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
@@ -43,27 +214,16 @@ type ICMPv4 struct {
Seq uint16
}
-// LayerType returns gopacket.LayerTypeICMPv4
+// LayerType returns LayerTypeICMPv4.
func (i *ICMPv4) LayerType() gopacket.LayerType { return LayerTypeICMPv4 }
-func decodeICMPv4(data []byte, p gopacket.PacketBuilder) error {
- i := &ICMPv4{}
- err := i.DecodeFromBytes(data, p)
- if err != nil {
- return err
- }
- p.AddLayer(i)
- return p.NextDecoder(gopacket.LayerTypePayload)
-}
-
-var tooShort error = fmt.Errorf("icmp layer less than 8 bytes")
-
+// 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 tooShort
+ return errors.New("ICMP layer less then 8 bytes for ICMPv4 packet")
}
- i.TypeCode = ICMPv4TypeCode(binary.BigEndian.Uint16(data[:2]))
+ 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])
@@ -79,7 +239,7 @@ func (i *ICMPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.Serialize
if err != nil {
return err
}
- binary.BigEndian.PutUint16(bytes, uint16(i.TypeCode))
+ i.TypeCode.SerializeTo(bytes)
binary.BigEndian.PutUint16(bytes[4:], i.Id)
binary.BigEndian.PutUint16(bytes[6:], i.Seq)
if opts.ComputeChecksums {
@@ -91,112 +251,17 @@ func (i *ICMPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.Serialize
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 (a ICMPv4TypeCode) String() string {
- typ := uint8(a >> 8)
- code := uint8(a)
- var typeStr, codeStr string
- switch typ {
- case ICMPv4TypeDestinationUnreachable:
- typeStr = "DestinationUnreachable"
- switch code {
- case 0:
- codeStr = "Net"
- case 1:
- codeStr = "Host"
- case 2:
- codeStr = "Protocol"
- case 3:
- codeStr = "Port"
- case 4:
- codeStr = "FragmentationNeeded"
- case 5:
- codeStr = "SourceRoutingFailed"
- case 6:
- codeStr = "NetUnknown"
- case 7:
- codeStr = "HostUnknown"
- case 8:
- codeStr = "SourceIsolated"
- case 9:
- codeStr = "NetAdminProhibited"
- case 10:
- codeStr = "HostAdminProhibited"
- case 11:
- codeStr = "NetTOS"
- case 12:
- codeStr = "HostTOS"
- case 13:
- codeStr = "CommAdminProhibited"
- case 14:
- codeStr = "HostPrecedence"
- case 15:
- codeStr = "PrecedenceCutoff"
- }
- case ICMPv4TypeTimeExceeded:
- typeStr = "TimeExceeded"
- switch code {
- case 0:
- codeStr = "TTLExceeded"
- case 1:
- codeStr = "FragmentReassemblyTimeExceeded"
- }
- case ICMPv4TypeParameterProblem:
- typeStr = "ParameterProblem"
- switch code {
- case 0:
- codeStr = "PointerIndicatesError"
- case 1:
- codeStr = "MissingOption"
- case 2:
- codeStr = "BadLength"
- }
- case ICMPv4TypeSourceQuench:
- typeStr = "SourceQuench"
- case ICMPv4TypeRedirect:
- typeStr = "Redirect"
- switch code {
- case 0:
- codeStr = "Network"
- case 1:
- codeStr = "Host"
- case 2:
- codeStr = "TOS+Network"
- case 3:
- codeStr = "TOS+Host"
- }
- case ICMPv4TypeEchoRequest:
- typeStr = "EchoRequest"
- case ICMPv4TypeEchoReply:
- typeStr = "EchoReply"
- case ICMPv4TypeTimestampRequest:
- typeStr = "TimestampRequest"
- case ICMPv4TypeTimestampReply:
- typeStr = "TimestampReply"
- case ICMPv4TypeInfoRequest:
- typeStr = "InfoRequest"
- case ICMPv4TypeInfoReply:
- typeStr = "InfoReply"
- case ICMPv4TypeRouterSolicitation:
- typeStr = "RouterSolicitation"
- case ICMPv4TypeRouterAdvertisement:
- typeStr = "RouterAdvertisement"
- case ICMPv4TypeAddressMaskRequest:
- typeStr = "AddressMaskRequest"
- case ICMPv4TypeAddressMaskReply:
- typeStr = "AddressMaskReply"
- default:
- typeStr = strconv.Itoa(int(typ))
- }
- if codeStr == "" {
- codeStr = strconv.Itoa(int(code))
- }
- return fmt.Sprintf("%s(%s)", typeStr, codeStr)
+func decodeICMPv4(data []byte, p gopacket.PacketBuilder) error {
+ i := &ICMPv4{}
+ return decodingLayerDecoder(i, data, p)
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6.go
index 0462e621e53..09afd11a609 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6.go
@@ -9,9 +9,11 @@ package layers
import (
"encoding/binary"
+ "errors"
"fmt"
- "github.com/google/gopacket"
"reflect"
+
+ "github.com/google/gopacket"
)
const (
@@ -22,12 +24,41 @@ const (
ICMPv6TypeParameterProblem = 4
ICMPv6TypeEchoRequest = 128
ICMPv6TypeEchoReply = 129
+
// The following are from RFC 4861
ICMPv6TypeRouterSolicitation = 133
ICMPv6TypeRouterAdvertisement = 134
ICMPv6TypeNeighborSolicitation = 135
ICMPv6TypeNeighborAdvertisement = 136
ICMPv6TypeRedirect = 137
+
+ // The following are from RFC 2710
+ ICMPv6TypeMLDv1MulticastListenerQueryMessage = 130
+ ICMPv6TypeMLDv1MulticastListenerReportMessage = 131
+ ICMPv6TypeMLDv1MulticastListenerDoneMessage = 132
+
+ // The following are from RFC 3810
+ ICMPv6TypeMLDv2MulticastListenerReportMessageV2 = 143
+)
+
+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 {
@@ -37,52 +68,52 @@ type icmpv6TypeCodeInfoStruct struct {
var (
icmpv6TypeCodeInfo = map[uint8]icmpv6TypeCodeInfoStruct{
- 1: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeDestinationUnreachable: icmpv6TypeCodeInfoStruct{
"DestinationUnreachable", &map[uint8]string{
- 0: "NoRouteToDst",
- 1: "AdminProhibited",
- 2: "BeyondScopeOfSrc",
- 3: "AddressUnreachable",
- 4: "PortUnreachable",
- 5: "SrcAddressFailedPolicy",
- 6: "RejectRouteToDst",
+ ICMPv6CodeNoRouteToDst: "NoRouteToDst",
+ ICMPv6CodeAdminProhibited: "AdminProhibited",
+ ICMPv6CodeBeyondScopeOfSrc: "BeyondScopeOfSrc",
+ ICMPv6CodeAddressUnreachable: "AddressUnreachable",
+ ICMPv6CodePortUnreachable: "PortUnreachable",
+ ICMPv6CodeSrcAddressFailedPolicy: "SrcAddressFailedPolicy",
+ ICMPv6CodeRejectRouteToDst: "RejectRouteToDst",
},
},
- 2: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypePacketTooBig: icmpv6TypeCodeInfoStruct{
"PacketTooBig", nil,
},
- 3: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeTimeExceeded: icmpv6TypeCodeInfoStruct{
"TimeExceeded", &map[uint8]string{
- 0: "HopLimitExceeded",
- 1: "FragmentReassemblyTimeExceeded",
+ ICMPv6CodeHopLimitExceeded: "HopLimitExceeded",
+ ICMPv6CodeFragmentReassemblyTimeExceeded: "FragmentReassemblyTimeExceeded",
},
},
- 4: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeParameterProblem: icmpv6TypeCodeInfoStruct{
"ParameterProblem", &map[uint8]string{
- 0: "ErroneousHeaderField",
- 1: "UnrecognizedNextHeader",
- 2: "UnrecognizedNextHeader",
+ ICMPv6CodeErroneousHeaderField: "ErroneousHeaderField",
+ ICMPv6CodeUnrecognizedNextHeader: "UnrecognizedNextHeader",
+ ICMPv6CodeUnrecognizedIPv6Option: "UnrecognizedIPv6Option",
},
},
- 128: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeEchoRequest: icmpv6TypeCodeInfoStruct{
"EchoRequest", nil,
},
- 129: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeEchoReply: icmpv6TypeCodeInfoStruct{
"EchoReply", nil,
},
- 133: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeRouterSolicitation: icmpv6TypeCodeInfoStruct{
"RouterSolicitation", nil,
},
- 134: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeRouterAdvertisement: icmpv6TypeCodeInfoStruct{
"RouterAdvertisement", nil,
},
- 135: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeNeighborSolicitation: icmpv6TypeCodeInfoStruct{
"NeighborSolicitation", nil,
},
- 136: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeNeighborAdvertisement: icmpv6TypeCodeInfoStruct{
"NeighborAdvertisement", nil,
},
- 137: icmpv6TypeCodeInfoStruct{
+ ICMPv6TypeRedirect: icmpv6TypeCodeInfoStruct{
"Redirect", nil,
},
}
@@ -143,8 +174,10 @@ func CreateICMPv6TypeCode(typ uint8, code uint8) ICMPv6TypeCode {
// ICMPv6 is the layer for IPv6 ICMP packet data
type ICMPv6 struct {
BaseLayer
- TypeCode ICMPv6TypeCode
- Checksum uint16
+ TypeCode ICMPv6TypeCode
+ Checksum uint16
+ // TypeBytes is deprecated and always nil. See the different ICMPv6 message types
+ // instead (e.g. ICMPv6TypeRouterSolicitation).
TypeBytes []byte
tcpipchecksum
}
@@ -154,10 +187,13 @@ 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) < 4 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 4 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:]}
+ i.BaseLayer = BaseLayer{data[:4], data[4:]}
return nil
}
@@ -165,17 +201,12 @@ func (i *ICMPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error
// 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)
+ bytes, err := b.PrependBytes(4)
if err != nil {
return err
}
i.TypeCode.SerializeTo(bytes)
- copy(bytes[4:8], i.TypeBytes)
+
if opts.ComputeChecksums {
bytes[2] = 0
bytes[3] = 0
@@ -186,6 +217,7 @@ func (i *ICMPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.Serialize
i.Checksum = csum
}
binary.BigEndian.PutUint16(bytes[2:], i.Checksum)
+
return nil
}
@@ -196,6 +228,35 @@ func (i *ICMPv6) CanDecode() gopacket.LayerClass {
// NextLayerType returns the layer type contained by this DecodingLayer.
func (i *ICMPv6) NextLayerType() gopacket.LayerType {
+ switch i.TypeCode.Type() {
+ case ICMPv6TypeEchoRequest:
+ return LayerTypeICMPv6Echo
+ case ICMPv6TypeEchoReply:
+ return LayerTypeICMPv6Echo
+ case ICMPv6TypeRouterSolicitation:
+ return LayerTypeICMPv6RouterSolicitation
+ case ICMPv6TypeRouterAdvertisement:
+ return LayerTypeICMPv6RouterAdvertisement
+ case ICMPv6TypeNeighborSolicitation:
+ return LayerTypeICMPv6NeighborSolicitation
+ case ICMPv6TypeNeighborAdvertisement:
+ return LayerTypeICMPv6NeighborAdvertisement
+ case ICMPv6TypeRedirect:
+ return LayerTypeICMPv6Redirect
+ case ICMPv6TypeMLDv1MulticastListenerQueryMessage: // Same Code for MLDv1 Query and MLDv2 Query
+ if len(i.Payload) > 20 { // Only payload size differs
+ return LayerTypeMLDv2MulticastListenerQuery
+ } else {
+ return LayerTypeMLDv1MulticastListenerQuery
+ }
+ case ICMPv6TypeMLDv1MulticastListenerDoneMessage:
+ return LayerTypeMLDv1MulticastListenerDone
+ case ICMPv6TypeMLDv1MulticastListenerReportMessage:
+ return LayerTypeMLDv1MulticastListenerReport
+ case ICMPv6TypeMLDv2MulticastListenerReportMessageV2:
+ return LayerTypeMLDv2MulticastListenerReport
+ }
+
return gopacket.LayerTypePayload
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6NDflags_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6NDflags_test.go
new file mode 100644
index 00000000000..cfb281f264e
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6NDflags_test.go
@@ -0,0 +1,129 @@
+// 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"
+ "testing"
+)
+
+var icmp6NeighborAnnouncementData = []byte{
+ // Ethernet layer
+ 0x00, 0x1F, 0xCA, 0xB3, 0x76, 0x40, // destination
+ 0x24, 0xBE, 0x05, 0x27, 0x0B, 0x17, // source
+ 0x86, 0xDD, // type IPv6
+
+ // IPv6 layer
+ 0x60, 0x00, 0x00, 0x00, // version; traffic class; flow label
+ 0x00, 0x18, // payload length?
+ 0x3A, // Next Header - IPv6-ICMP
+ 0xFF, // Hop Limit
+ 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xBE, 0x05, 0xFF, 0xFE, 0x27, 0x0B, 0x17, // source
+ 0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1F, 0xCA, 0xFF, 0xFE, 0xB3, 0x76, 0x40, // destination
+
+ // ICMPv6 layer
+ 0x88, 0x00, // ICMP type 136, code 0
+
+ 0x1E, 0xD6, // checksum
+ 0x40, 0x00, 0x00, 0x00, // flags & reserved
+ 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xBE, 0x05, 0xFF, 0xFE, 0x27, 0x0B, 0x17, // target address
+}
+
+var icmp6RouterAdvertisementData = []byte{
+ // Ethernet layer
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x01, // destination,
+ 0xde, 0x42, 0x72, 0xb0, 0x1e, 0xf4, // source
+ 0x86, 0xdd,
+
+ // IPv6 layer
+ 0x60, 0x00, 0x00, 0x00, // version; traffic class; flow label
+ 0x00, 0x20, // payload length?
+ 0x3a, // Next Header - IPv6-ICMP
+ 0xff, // Hop Limit
+ 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x42, 0x72, 0xff, 0xfe, 0xb0, 0x1e, 0xf4, // source,
+ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // destination
+
+ // ICMPv6 layer
+ 0x86, 0x00, // ICMP type 134, code 0
+
+ 0x4c, 0x6b, // checksum
+ 0x40, // current hop limit
+ 0x00, // flags & reserves
+ 0x07, 0x08, // router lifetime
+ 0x00, 0x00, 0x00, 0x00, // reachable time
+ 0x00, 0x00, 0x00, 0x00, //retrans time
+ 0x01, 0x01, 0xde, 0x42, 0x72, 0xb0, 0x1e, 0xf4, // source link layer address
+ 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0xdc, // MTU option
+}
+
+func TestPacketICMPv6NeighborAnnouncementFlags(t *testing.T) {
+ var ethLayer Ethernet
+ var ipV6Layer IPv6
+ var icmpLayer ICMPv6
+
+ var icmpNeighAdvLayer ICMPv6NeighborAdvertisement
+
+ parser := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &ethLayer, &ipV6Layer, &icmpLayer)
+ parser.IgnoreUnsupported = true
+
+ respLayers := make([]gopacket.LayerType, 0)
+ err := parser.DecodeLayers(icmp6NeighborAnnouncementData, &respLayers)
+
+ if err != nil {
+ t.Errorf("error decoding layers %s", err)
+ return
+ }
+
+ err = icmpNeighAdvLayer.DecodeFromBytes(icmpLayer.LayerPayload(), gopacket.NilDecodeFeedback)
+ if err != nil {
+ t.Errorf("Error while Decodeing From Bytes: %s", err)
+ return
+ }
+
+ if icmpNeighAdvLayer.Router() {
+ t.Errorf("This Neighbor Advertisement message's Router flag should not be set")
+ }
+ if !icmpNeighAdvLayer.Solicited() {
+ t.Errorf("This Neighbor Advertisement message's Solicited flag should be set")
+ }
+ if icmpNeighAdvLayer.Override() {
+ t.Errorf("This Neighbor Advertisement message's Override bit should not be set")
+ }
+}
+
+func TestPacketICMPv6RouterAnnouncementFlags(t *testing.T) {
+ var ethLayer Ethernet
+ var ipV6Layer IPv6
+ var icmpLayer ICMPv6
+
+ var icmpRouterAdvLayer ICMPv6RouterAdvertisement
+
+ parser := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &ethLayer, &ipV6Layer, &icmpLayer)
+ parser.IgnoreUnsupported = true
+
+ respLayers := make([]gopacket.LayerType, 0)
+ err := parser.DecodeLayers(icmp6RouterAdvertisementData, &respLayers)
+
+ if err != nil {
+ t.Errorf("error decoding layers %s", err)
+ return
+ }
+
+ err = icmpRouterAdvLayer.DecodeFromBytes(icmpLayer.LayerPayload(), gopacket.NilDecodeFeedback)
+ if err != nil {
+ t.Errorf("Error while Decodeing From Bytes: %s", err)
+ return
+ }
+
+ if icmpRouterAdvLayer.ManagedAddressConfig() {
+ t.Errorf("This Router Advertisement message's ManagedAddressConfig flag should not be set")
+ }
+ if icmpRouterAdvLayer.OtherConfig() {
+ t.Errorf("This Router Advertisement message's OtherConfig flag should not be set")
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6_test.go
index 4a6d248fca5..ceadf53a371 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6_test.go
@@ -35,6 +35,8 @@ func TestPacketICMPv6(t *testing.T) {
t.Error("Failed to decode packet:", p.ErrorLayer().Error())
}
checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, gopacket.LayerTypePayload}, t)
+ checkSerialization(p, t)
+
if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok {
want := &IPv6{
BaseLayer: BaseLayer{
@@ -64,13 +66,12 @@ func TestPacketICMPv6(t *testing.T) {
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,
+ Contents: []byte{0x88, 0x0, 0x1e, 0xd6},
+ Payload: []byte{0x40, 0x0, 0x0, 0x0, 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},
+ TypeCode: 0x8800,
+ Checksum: 0x1ed6,
}
if !reflect.DeepEqual(got, want) {
t.Errorf("ICMPv6 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6hopbyhop_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6hopbyhop_test.go
new file mode 100644
index 00000000000..19e43aeec80
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6hopbyhop_test.go
@@ -0,0 +1,85 @@
+// 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"
+ "testing"
+)
+
+var icmp6HopByHopData = []byte{
+ // Ethernet layer
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x16, // destination
+ 0x1e, 0xc3, 0xe3, 0xb7, 0xc4, 0xd5, // source
+ 0x86, 0xdd, // type IPv6
+
+ // IPv6 layer
+ 0x60, 0x00, 0x00, 0x00, // version; traffic class; flow label
+ 0x00, 0x88, // payload length?
+ 0x00, // Next Header
+ 0x01, // Hop Limit
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // source
+ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, // destination
+
+ // IPv6 Hop-by-hop option
+ 0x3a, // Next Header - IPv6-ICMP
+ 0x00, // Hdr Ext Len
+ 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, // Options and Padding
+
+ // ICMPv6 layer
+ 0x8f, 0x00, // ICMP type 143, code 0
+
+ 0x9e, 0xed, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00,
+ 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xb7,
+ 0xc4, 0xd5, 0x03, 0x00, 0x00, 0x00, 0xff, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x11,
+ 0x00, 0x79, 0x04, 0x00, 0x00, 0x00, 0xff, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xff, 0x00, 0x00, 0x01, 0x04, 0x00,
+ 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0xff, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+}
+
+func TestPacketICMPv6WithHopByHop(t *testing.T) {
+ var ethLayerResp Ethernet
+ var ipV6LayerResp IPv6
+ var icmpLayerResp ICMPv6
+ var payload gopacket.Payload
+
+ parser := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &ethLayerResp, &ipV6LayerResp, &icmpLayerResp, &payload)
+ parser.IgnoreUnsupported = true // avoid `No decoder for layer type ICMPv6RouterAdvertisement` error
+
+ respLayers := make([]gopacket.LayerType, 0)
+ err := parser.DecodeLayers(icmp6HopByHopData, &respLayers)
+
+ if err != nil {
+ t.Errorf("error decoding layers %s", err)
+ return
+ }
+
+ expectedType := uint8(icmp6HopByHopData[62])
+ actualType := uint8(icmpLayerResp.TypeCode.Type())
+ if expectedType != actualType {
+ t.Errorf("expected ICMP layer's TypeCode to be %d but was %d", expectedType, actualType)
+ }
+
+ p := gopacket.NewPacket(icmp6HopByHopData, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeICMPv6}, t)
+ // See https://github.com/google/gopacket/issues/517
+ // checkSerialization(p, t)
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6msg.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6msg.go
new file mode 100644
index 00000000000..d9268db0563
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6msg.go
@@ -0,0 +1,578 @@
+// 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"
+ "net"
+ "time"
+
+ "github.com/google/gopacket"
+)
+
+// Based on RFC 4861
+
+// ICMPv6Opt indicate how to decode the data associated with each ICMPv6Option.
+type ICMPv6Opt uint8
+
+const (
+ _ ICMPv6Opt = iota
+
+ // ICMPv6OptSourceAddress contains the link-layer address of the sender of
+ // the packet. It is used in the Neighbor Solicitation, Router
+ // Solicitation, and Router Advertisement packets. Must be ignored for other
+ // Neighbor discovery messages.
+ ICMPv6OptSourceAddress
+
+ // ICMPv6OptTargetAddress contains the link-layer address of the target. It
+ // is used in Neighbor Advertisement and Redirect packets. Must be ignored
+ // for other Neighbor discovery messages.
+ ICMPv6OptTargetAddress
+
+ // ICMPv6OptPrefixInfo provides hosts with on-link prefixes and prefixes
+ // for Address Autoconfiguration. The Prefix Information option appears in
+ // Router Advertisement packets and MUST be silently ignored for other
+ // messages.
+ ICMPv6OptPrefixInfo
+
+ // ICMPv6OptRedirectedHeader is used in Redirect messages and contains all
+ // or part of the packet that is being redirected.
+ ICMPv6OptRedirectedHeader
+
+ // ICMPv6OptMTU is used in Router Advertisement messages to ensure that all
+ // nodes on a link use the same MTU value in those cases where the link MTU
+ // is not well known. This option MUST be silently ignored for other
+ // Neighbor Discovery messages.
+ ICMPv6OptMTU
+)
+
+// ICMPv6Echo represents the structure of a ping.
+type ICMPv6Echo struct {
+ BaseLayer
+ Identifier uint16
+ SeqNumber uint16
+}
+
+// ICMPv6RouterSolicitation is sent by hosts to find routers.
+type ICMPv6RouterSolicitation struct {
+ BaseLayer
+ Options ICMPv6Options
+}
+
+// ICMPv6RouterAdvertisement is sent by routers in response to Solicitation.
+type ICMPv6RouterAdvertisement struct {
+ BaseLayer
+ HopLimit uint8
+ Flags uint8
+ RouterLifetime uint16
+ ReachableTime uint32
+ RetransTimer uint32
+ Options ICMPv6Options
+}
+
+// ICMPv6NeighborSolicitation is sent to request the link-layer address of a
+// target node.
+type ICMPv6NeighborSolicitation struct {
+ BaseLayer
+ TargetAddress net.IP
+ Options ICMPv6Options
+}
+
+// ICMPv6NeighborAdvertisement is sent by nodes in response to Solicitation.
+type ICMPv6NeighborAdvertisement struct {
+ BaseLayer
+ Flags uint8
+ TargetAddress net.IP
+ Options ICMPv6Options
+}
+
+// ICMPv6Redirect is sent by routers to inform hosts of a better first-hop node
+// on the path to a destination.
+type ICMPv6Redirect struct {
+ BaseLayer
+ TargetAddress net.IP
+ DestinationAddress net.IP
+ Options ICMPv6Options
+}
+
+// ICMPv6Option contains the type and data for a single option.
+type ICMPv6Option struct {
+ Type ICMPv6Opt
+ Data []byte
+}
+
+// ICMPv6Options is a slice of ICMPv6Option.
+type ICMPv6Options []ICMPv6Option
+
+func (i ICMPv6Opt) String() string {
+ switch i {
+ case ICMPv6OptSourceAddress:
+ return "SourceAddress"
+ case ICMPv6OptTargetAddress:
+ return "TargetAddress"
+ case ICMPv6OptPrefixInfo:
+ return "PrefixInfo"
+ case ICMPv6OptRedirectedHeader:
+ return "RedirectedHeader"
+ case ICMPv6OptMTU:
+ return "MTU"
+ default:
+ return fmt.Sprintf("Unknown(%d)", i)
+ }
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv6Echo) CanDecode() gopacket.LayerClass {
+ return LayerTypeICMPv6Echo
+}
+
+// LayerType returns LayerTypeICMPv6Echo.
+func (i *ICMPv6Echo) LayerType() gopacket.LayerType {
+ return LayerTypeICMPv6Echo
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv6Echo) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv6Echo) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 4 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 4 bytes for ICMPv6 Echo")
+ }
+ i.Identifier = binary.BigEndian.Uint16(data[0:2])
+ i.SeqNumber = binary.BigEndian.Uint16(data[2:4])
+
+ 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 *ICMPv6Echo) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(4)
+ if err != nil {
+ return err
+ }
+
+ binary.BigEndian.PutUint16(buf, i.Identifier)
+ binary.BigEndian.PutUint16(buf[2:], i.SeqNumber)
+ return nil
+}
+
+// LayerType returns LayerTypeICMPv6.
+func (i *ICMPv6RouterSolicitation) LayerType() gopacket.LayerType {
+ return LayerTypeICMPv6RouterSolicitation
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv6RouterSolicitation) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv6RouterSolicitation) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ // first 4 bytes are reserved followed by options
+ if len(data) < 4 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 4 bytes for ICMPv6 router solicitation")
+ }
+
+ // truncate old options
+ i.Options = i.Options[:0]
+
+ return i.Options.DecodeFromBytes(data[4:], df)
+}
+
+// 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 *ICMPv6RouterSolicitation) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if err := i.Options.SerializeTo(b, opts); err != nil {
+ return err
+ }
+
+ buf, err := b.PrependBytes(4)
+ if err != nil {
+ return err
+ }
+
+ copy(buf, lotsOfZeros[:4])
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv6RouterSolicitation) CanDecode() gopacket.LayerClass {
+ return LayerTypeICMPv6RouterSolicitation
+}
+
+// LayerType returns LayerTypeICMPv6RouterAdvertisement.
+func (i *ICMPv6RouterAdvertisement) LayerType() gopacket.LayerType {
+ return LayerTypeICMPv6RouterAdvertisement
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv6RouterAdvertisement) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv6RouterAdvertisement) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 12 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 12 bytes for ICMPv6 router advertisement")
+ }
+
+ i.HopLimit = uint8(data[0])
+ // M, O bit followed by 6 reserved bits
+ i.Flags = uint8(data[1])
+ i.RouterLifetime = binary.BigEndian.Uint16(data[2:4])
+ i.ReachableTime = binary.BigEndian.Uint32(data[4:8])
+ i.RetransTimer = binary.BigEndian.Uint32(data[8:12])
+ i.BaseLayer = BaseLayer{data, nil} // assume no payload
+
+ // truncate old options
+ i.Options = i.Options[:0]
+
+ return i.Options.DecodeFromBytes(data[12:], df)
+}
+
+// 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 *ICMPv6RouterAdvertisement) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if err := i.Options.SerializeTo(b, opts); err != nil {
+ return err
+ }
+
+ buf, err := b.PrependBytes(12)
+ if err != nil {
+ return err
+ }
+
+ buf[0] = byte(i.HopLimit)
+ buf[1] = byte(i.Flags)
+ binary.BigEndian.PutUint16(buf[2:], i.RouterLifetime)
+ binary.BigEndian.PutUint32(buf[4:], i.ReachableTime)
+ binary.BigEndian.PutUint32(buf[8:], i.RetransTimer)
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv6RouterAdvertisement) CanDecode() gopacket.LayerClass {
+ return LayerTypeICMPv6RouterAdvertisement
+}
+
+// ManagedAddressConfig is true when addresses are available via DHCPv6. If
+// set, the OtherConfig flag is redundant.
+func (i *ICMPv6RouterAdvertisement) ManagedAddressConfig() bool {
+ return i.Flags&0x80 != 0
+}
+
+// OtherConfig is true when there is other configuration information available
+// via DHCPv6. For example, DNS-related information.
+func (i *ICMPv6RouterAdvertisement) OtherConfig() bool {
+ return i.Flags&0x40 != 0
+}
+
+// LayerType returns LayerTypeICMPv6NeighborSolicitation.
+func (i *ICMPv6NeighborSolicitation) LayerType() gopacket.LayerType {
+ return LayerTypeICMPv6NeighborSolicitation
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv6NeighborSolicitation) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv6NeighborSolicitation) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 20 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 20 bytes for ICMPv6 neighbor solicitation")
+ }
+
+ i.TargetAddress = net.IP(data[4:20])
+ i.BaseLayer = BaseLayer{data, nil} // assume no payload
+
+ // truncate old options
+ i.Options = i.Options[:0]
+
+ return i.Options.DecodeFromBytes(data[20:], df)
+}
+
+// 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 *ICMPv6NeighborSolicitation) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if err := i.Options.SerializeTo(b, opts); err != nil {
+ return err
+ }
+
+ buf, err := b.PrependBytes(20)
+ if err != nil {
+ return err
+ }
+
+ copy(buf, lotsOfZeros[:4])
+ copy(buf[4:], i.TargetAddress)
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv6NeighborSolicitation) CanDecode() gopacket.LayerClass {
+ return LayerTypeICMPv6NeighborSolicitation
+}
+
+// LayerType returns LayerTypeICMPv6NeighborAdvertisement.
+func (i *ICMPv6NeighborAdvertisement) LayerType() gopacket.LayerType {
+ return LayerTypeICMPv6NeighborAdvertisement
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv6NeighborAdvertisement) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv6NeighborAdvertisement) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 20 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 20 bytes for ICMPv6 neighbor advertisement")
+ }
+
+ i.Flags = uint8(data[0])
+ i.TargetAddress = net.IP(data[4:20])
+ i.BaseLayer = BaseLayer{data, nil} // assume no payload
+
+ // truncate old options
+ i.Options = i.Options[:0]
+
+ return i.Options.DecodeFromBytes(data[20:], df)
+}
+
+// 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 *ICMPv6NeighborAdvertisement) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if err := i.Options.SerializeTo(b, opts); err != nil {
+ return err
+ }
+
+ buf, err := b.PrependBytes(20)
+ if err != nil {
+ return err
+ }
+
+ buf[0] = byte(i.Flags)
+ copy(buf[1:], lotsOfZeros[:3])
+ copy(buf[4:], i.TargetAddress)
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv6NeighborAdvertisement) CanDecode() gopacket.LayerClass {
+ return LayerTypeICMPv6NeighborAdvertisement
+}
+
+// Router indicates whether the sender is a router or not.
+func (i *ICMPv6NeighborAdvertisement) Router() bool {
+ return i.Flags&0x80 != 0
+}
+
+// Solicited indicates whether the advertisement was solicited or not.
+func (i *ICMPv6NeighborAdvertisement) Solicited() bool {
+ return i.Flags&0x40 != 0
+}
+
+// Override indicates whether the advertisement should Override an existing
+// cache entry.
+func (i *ICMPv6NeighborAdvertisement) Override() bool {
+ return i.Flags&0x20 != 0
+}
+
+// LayerType returns LayerTypeICMPv6Redirect.
+func (i *ICMPv6Redirect) LayerType() gopacket.LayerType {
+ return LayerTypeICMPv6Redirect
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (i *ICMPv6Redirect) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv6Redirect) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 36 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 36 bytes for ICMPv6 redirect")
+ }
+
+ i.TargetAddress = net.IP(data[4:20])
+ i.DestinationAddress = net.IP(data[20:36])
+ i.BaseLayer = BaseLayer{data, nil} // assume no payload
+
+ // truncate old options
+ i.Options = i.Options[:0]
+
+ return i.Options.DecodeFromBytes(data[36:], df)
+}
+
+// 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 *ICMPv6Redirect) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if err := i.Options.SerializeTo(b, opts); err != nil {
+ return err
+ }
+
+ buf, err := b.PrependBytes(36)
+ if err != nil {
+ return err
+ }
+
+ copy(buf, lotsOfZeros[:4])
+ copy(buf[4:], i.TargetAddress)
+ copy(buf[20:], i.DestinationAddress)
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (i *ICMPv6Redirect) CanDecode() gopacket.LayerClass {
+ return LayerTypeICMPv6Redirect
+}
+
+func (i ICMPv6Option) String() string {
+ hd := hex.EncodeToString(i.Data)
+ if len(hd) > 0 {
+ hd = " 0x" + hd
+ }
+
+ switch i.Type {
+ case ICMPv6OptSourceAddress, ICMPv6OptTargetAddress:
+ return fmt.Sprintf("ICMPv6Option(%s:%v)",
+ i.Type,
+ net.HardwareAddr(i.Data))
+ case ICMPv6OptPrefixInfo:
+ if len(i.Data) == 30 {
+ prefixLen := uint8(i.Data[0])
+ onLink := (i.Data[1]&0x80 != 0)
+ autonomous := (i.Data[1]&0x40 != 0)
+ validLifetime := time.Duration(binary.BigEndian.Uint32(i.Data[2:6])) * time.Second
+ preferredLifetime := time.Duration(binary.BigEndian.Uint32(i.Data[6:10])) * time.Second
+
+ prefix := net.IP(i.Data[14:])
+
+ return fmt.Sprintf("ICMPv6Option(%s:%v/%v:%t:%t:%v:%v)",
+ i.Type,
+ prefix, prefixLen,
+ onLink, autonomous,
+ validLifetime, preferredLifetime)
+ }
+ case ICMPv6OptRedirectedHeader:
+ // could invoke IP decoder on data... probably best not to
+ break
+ case ICMPv6OptMTU:
+ if len(i.Data) == 6 {
+ return fmt.Sprintf("ICMPv6Option(%s:%v)",
+ i.Type,
+ binary.BigEndian.Uint32(i.Data[2:]))
+ }
+
+ }
+ return fmt.Sprintf("ICMPv6Option(%s:%s)", i.Type, hd)
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (i *ICMPv6Options) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ for len(data) > 0 {
+ if len(data) < 2 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less then 2 bytes for ICMPv6 message option")
+ }
+
+ // unit is 8 octets, convert to bytes
+ length := int(data[1]) * 8
+
+ if length == 0 {
+ df.SetTruncated()
+ return errors.New("ICMPv6 message option with length 0")
+ }
+
+ if len(data) < length {
+ df.SetTruncated()
+ return fmt.Errorf("ICMP layer only %v bytes for ICMPv6 message option with length %v", len(data), length)
+ }
+
+ o := ICMPv6Option{
+ Type: ICMPv6Opt(data[0]),
+ Data: data[2:length],
+ }
+
+ // chop off option we just consumed
+ data = data[length:]
+
+ *i = append(*i, o)
+ }
+
+ 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 *ICMPv6Options) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ for _, opt := range []ICMPv6Option(*i) {
+ length := len(opt.Data) + 2
+ buf, err := b.PrependBytes(length)
+ if err != nil {
+ return err
+ }
+
+ buf[0] = byte(opt.Type)
+ buf[1] = byte(length / 8)
+ copy(buf[2:], opt.Data)
+ }
+
+ return nil
+}
+
+func decodeICMPv6Echo(data []byte, p gopacket.PacketBuilder) error {
+ i := &ICMPv6Echo{}
+ return decodingLayerDecoder(i, data, p)
+}
+
+func decodeICMPv6RouterSolicitation(data []byte, p gopacket.PacketBuilder) error {
+ i := &ICMPv6RouterSolicitation{}
+ return decodingLayerDecoder(i, data, p)
+}
+
+func decodeICMPv6RouterAdvertisement(data []byte, p gopacket.PacketBuilder) error {
+ i := &ICMPv6RouterAdvertisement{}
+ return decodingLayerDecoder(i, data, p)
+}
+
+func decodeICMPv6NeighborSolicitation(data []byte, p gopacket.PacketBuilder) error {
+ i := &ICMPv6NeighborSolicitation{}
+ return decodingLayerDecoder(i, data, p)
+}
+
+func decodeICMPv6NeighborAdvertisement(data []byte, p gopacket.PacketBuilder) error {
+ i := &ICMPv6NeighborAdvertisement{}
+ return decodingLayerDecoder(i, data, p)
+}
+
+func decodeICMPv6Redirect(data []byte, p gopacket.PacketBuilder) error {
+ i := &ICMPv6Redirect{}
+ return decodingLayerDecoder(i, data, p)
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6msg_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6msg_test.go
new file mode 100644
index 00000000000..5bc44d0bdd5
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/icmp6msg_test.go
@@ -0,0 +1,73 @@
+// 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"
+ "testing"
+)
+
+// testPacketICMPv6RouterAdvertisement is the packet:
+// 23:34:40.014307 IP6 (class 0xe0, hlim 255, next-header ICMPv6 (58) payload length: 64) fe80::c000:54ff:fef5:0 > ip6-allnodes: [icmp6 sum ok] ICMP6, router advertisement, length 64
+// hop limit 64, Flags [none], pref medium, router lifetime 1800s, reachable time 0s, retrans time 0s
+// source link-address option (1), length 8 (1): c2:00:54:f5:00:00
+// 0x0000: c200 54f5 0000
+// mtu option (5), length 8 (1): 1500
+// 0x0000: 0000 0000 05dc
+// prefix info option (3), length 32 (4): 2001:db8:0:1::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
+// 0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 2001
+// 0x0010: 0db8 0000 0001 0000 0000 0000 0000
+// 0x0000: 3333 0000 0001 c200 54f5 0000 86dd 6e00 33......T.....n.
+// 0x0010: 0000 0040 3aff fe80 0000 0000 0000 c000 ...@:...........
+// 0x0020: 54ff fef5 0000 ff02 0000 0000 0000 0000 T...............
+// 0x0030: 0000 0000 0001 8600 c4fe 4000 0708 0000 ..........@.....
+// 0x0040: 0000 0000 0000 0101 c200 54f5 0000 0501 ..........T.....
+// 0x0050: 0000 0000 05dc 0304 40c0 0027 8d00 0009 ........@..'....
+// 0x0060: 3a80 0000 0000 2001 0db8 0000 0001 0000 :...............
+// 0x0070: 0000 0000 0000
+var testPacketICMPv6RouterAdvertisement = []byte{
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xc2, 0x00, 0x54, 0xf5, 0x00, 0x00, 0x86, 0xdd, 0x6e, 0x00,
+ 0x00, 0x00, 0x00, 0x40, 0x3a, 0xff, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+ 0x54, 0xff, 0xfe, 0xf5, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x00, 0xc4, 0xfe, 0x40, 0x00, 0x07, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0xc2, 0x00, 0x54, 0xf5, 0x00, 0x00, 0x05, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0xdc, 0x03, 0x04, 0x40, 0xc0, 0x00, 0x27, 0x8d, 0x00, 0x00, 0x09,
+ 0x3a, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketICMPv6RouterAdvertisement(t *testing.T) {
+ p := gopacket.NewPacket(testPacketICMPv6RouterAdvertisement, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, LayerTypeICMPv6RouterAdvertisement}, t)
+}
+
+// testPacketICMPv6NeighborSolicitation is the packet:
+// 23:34:39.647300 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ff0e:4c67: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has fe80::20c:29ff:fe0e:4c67
+// 0x0000: 3333 ff0e 4c67 000c 290e 4c67 86dd 6000 33..Lg..).Lg..`.
+// 0x0010: 0000 0018 3aff 0000 0000 0000 0000 0000 ....:...........
+// 0x0020: 0000 0000 0000 ff02 0000 0000 0000 0000 ................
+// 0x0030: 0001 ff0e 4c67 8700 b930 0000 0000 fe80 ....Lg...0......
+// 0x0040: 0000 0000 0000 020c 29ff fe0e 4c67 ........)...Lg
+var testPacketICMPv6NeighborSolicitation = []byte{
+ 0x33, 0x33, 0xff, 0x0e, 0x4c, 0x67, 0x00, 0x0c, 0x29, 0x0e, 0x4c, 0x67, 0x86, 0xdd, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xff, 0x0e, 0x4c, 0x67, 0x87, 0x00, 0xb9, 0x30, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0c, 0x29, 0xff, 0xfe, 0x0e, 0x4c, 0x67,
+}
+
+func TestPacketICMPv6NeighborSolicitation(t *testing.T) {
+ p := gopacket.NewPacket(testPacketICMPv6NeighborSolicitation, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, LayerTypeICMPv6NeighborSolicitation}, t)
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/igmp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/igmp.go
index c6ab9062552..d00841535bb 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/igmp.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/igmp.go
@@ -9,29 +9,241 @@ package layers
import (
"encoding/binary"
- "github.com/google/gopacket"
+ "errors"
"net"
"time"
+
+ "github.com/google/gopacket"
)
type IGMPType uint8
-// IGMP is the packet structure for IGMP messages.
+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
- // The following are used only by IGMPv3
+ 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
}
-// LayerType returns LayerTypeIGMP
-func (i *IGMP) LayerType() gopacket.LayerType { return LayerTypeIGMP }
+// 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.
@@ -44,26 +256,49 @@ func igmpTimeDecode(t uint8) time.Duration {
return time.Millisecond * 100 * time.Duration((mant|0x10)<<(exp+3))
}
-// DecodeFromBytes decodes the given bytes into this layer.
-func (i *IGMP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+// 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])
- if i.Type == 0x11 && len(data) > 8 {
- i.SupressRouterProcessing = data[8]&0x8 != 0
- i.RobustnessValue = data[8] & 0x7
- i.IntervalTime = igmpTimeDecode(data[9])
- numSources := int(binary.BigEndian.Uint16(data[10:12]))
- for j := 0; j < numSources; j++ {
- i.SourceAddresses = append(i.SourceAddresses, net.IP(data[12+j*4:16+j*4]))
- }
- } else {
- i.SupressRouterProcessing = false
- i.RobustnessValue = 0
- i.IntervalTime = 0
- i.SourceAddresses = nil
+
+ 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
}
@@ -77,7 +312,44 @@ 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 {
- i := &IGMP{}
- return decodingLayerDecoder(i, data, p)
+ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/igmp_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/igmp_test.go
new file mode 100644
index 00000000000..923356da22c
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/igmp_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4.go
index a1c9ac1321e..2b3c0c6bff9 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4.go
@@ -9,10 +9,12 @@ package layers
import (
"encoding/binary"
+ "errors"
"fmt"
- "github.com/google/gopacket"
"net"
"strings"
+
+ "github.com/google/gopacket"
)
type IPv4Flag uint8
@@ -139,7 +141,7 @@ func (ip *IPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeO
// sanity checking to protect us from buffer overrun
if len(opt.OptionData) > int(opt.OptionLength-2) {
- fmt.Errorf("option length is smaller than length of option data")
+ 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)
@@ -147,21 +149,35 @@ func (ip *IPv4) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeO
}
if opts.ComputeChecksums {
- // 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])
- }
- ip.Checksum = ^uint16((csum >> 16) + csum)
+ 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
@@ -170,6 +186,10 @@ func (ip *IPv4) flagsfrags() (ff uint16) {
// DecodeFromBytes decodes the given bytes into this layer.
func (ip *IPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 20 {
+ df.SetTruncated()
+ return fmt.Errorf("Invalid ip4 header. Length %d less than 20", len(data))
+ }
flagsfrags := binary.BigEndian.Uint16(data[6:8])
ip.Version = uint8(data[0]) >> 4
@@ -184,9 +204,19 @@ func (ip *IPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
ip.Checksum = binary.BigEndian.Uint16(data[10:12])
ip.SrcIP = data[12:16]
ip.DstIP = data[16:20]
+ ip.Options = ip.Options[:0]
+ ip.Padding = nil
// 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 {
@@ -199,7 +229,7 @@ func (ip *IPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
} else if cmp < 0 {
df.SetTruncated()
if int(ip.IHL)*4 > len(data) {
- return fmt.Errorf("Not all IP header bytes available")
+ return errors.New("Not all IP header bytes available")
}
}
ip.Contents = data[:ip.IHL*4]
@@ -218,19 +248,28 @@ func (ip *IPv4) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
opt.OptionLength = 1
ip.Options = append(ip.Options, opt)
ip.Padding = data[1:]
- break
+ return nil
case 1: // 1 byte padding
opt.OptionLength = 1
+ data = data[1:]
+ ip.Options = append(ip.Options, opt)
default:
+ if len(data) < 2 {
+ df.SetTruncated()
+ return fmt.Errorf("Invalid ip4 option length. Length %d less than 2", len(data))
+ }
opt.OptionLength = data[1]
+ if len(data) < int(opt.OptionLength) {
+ df.SetTruncated()
+ return fmt.Errorf("IP option length exceeds remaining IP header size, option type %v length %v", opt.OptionType, opt.OptionLength)
+ }
+ if opt.OptionLength <= 2 {
+ return fmt.Errorf("Invalid IP option type %v length %d. Must be greater than 2", opt.OptionType, opt.OptionLength)
+ }
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)
}
- ip.Options = append(ip.Options, opt)
}
return nil
}
@@ -262,7 +301,7 @@ func checkIPv4Address(addr net.IP) (net.IP, error) {
return c, nil
}
if len(addr) == net.IPv6len {
- return nil, fmt.Errorf("address is IPv6")
+ return nil, errors.New("address is IPv6")
}
return nil, fmt.Errorf("wrong length of %d bytes instead of %d", len(addr), net.IPv4len)
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4_test.go
index 5f326679c6c..374778d8b39 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip4_test.go
@@ -9,7 +9,14 @@
package layers
import (
+ "bytes"
+ "encoding/binary"
+ "encoding/hex"
+ "net"
+ "reflect"
"testing"
+
+ "github.com/google/gopacket"
)
// Test the function getIPv4OptionSize when the ipv4 has no options
@@ -53,3 +60,165 @@ func TestGetIPOptLengthOptionEndOfList(t *testing.T) {
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)
+ }
+ }
+}
+
+func TestIPv4InvalidOptionLength(t *testing.T) {
+ // ip4 Packet with option 136 length set to zero
+ b, err := hex.DecodeString("460000705f5b0000ff114e02af2db00295ab7e0f88001234")
+ if err != nil {
+ t.Fatalf("Failed to Decode header: %v", err)
+ }
+ var ip4 IPv4
+ err = ip4.DecodeFromBytes(b, gopacket.NilDecodeFeedback)
+ if err == nil {
+ t.Fatal("Expected 'invalid IP option length' error, but got none.")
+ }
+}
+
+func TestIPv4Options(t *testing.T) {
+ var ip4 IPv4 // reuse ip4 to test reset
+ for _, test := range []struct {
+ packet string
+ options []IPv4Option
+ padding []byte
+ }{
+ {
+ packet: "4800002803040000fe01c1e0af2db00095ab7e0b820b00000000000000000000",
+ options: []IPv4Option{
+ {
+ OptionType: 130,
+ OptionData: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0},
+ OptionLength: 11,
+ },
+ {
+ OptionType: 0,
+ OptionLength: 1,
+ },
+ },
+ },
+ {
+ packet: "4900002803040000fe01c1e0af2db00095ab7e0b01820b00000000000000000000010203",
+ options: []IPv4Option{
+ {
+ OptionType: 1,
+ OptionLength: 1,
+ },
+ {
+ OptionType: 130,
+ OptionData: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0},
+ OptionLength: 11,
+ },
+ {
+ OptionType: 0,
+ OptionLength: 1,
+ },
+ },
+ padding: []byte{1, 2, 3},
+ },
+ {
+ packet: "4800002803040000fe01c1e0af2db00095ab7e0b820c00000000000000000000",
+ options: []IPv4Option{
+ {
+ OptionType: 130,
+ OptionData: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ OptionLength: 12,
+ },
+ },
+ },
+ {
+ packet: "4900002803040000fe01c1e0af2db00095ab7e0b00820b00000000000000000000010203",
+ options: []IPv4Option{
+ {
+ OptionType: 0,
+ OptionLength: 1,
+ },
+ },
+ padding: []byte{0x82, 0x0b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3},
+ },
+ } {
+ b, err := hex.DecodeString(test.packet)
+ if err != nil {
+ t.Fatalf("Failed to Decode header: %v", err)
+ }
+ err = ip4.DecodeFromBytes(b, gopacket.NilDecodeFeedback)
+ if err != nil {
+ t.Fatal("Unexpected error during decoding:", err)
+ }
+ if !reflect.DeepEqual(ip4.Options, test.options) {
+ t.Fatalf("Options mismatch.\nGot:\n%#v\nExpected:\n%#v\n", ip4.Options, test.options)
+ }
+ if !bytes.Equal(ip4.Padding, test.padding) {
+ t.Fatalf("Padding mismatch.\nGot:\n%#v\nExpected:\n%#v\n", ip4.Padding, test.padding)
+ }
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6.go
index 45eb0a214da..70e9c8d558a 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6.go
@@ -9,13 +9,16 @@ package layers
import (
"encoding/binary"
+ "errors"
"fmt"
- "github.com/google/gopacket"
"net"
+
+ "github.com/google/gopacket"
)
const (
- IPv6HopByHopOptionJumbogram = 0xC2 // RFC 2675
+ // IPv6HopByHopOptionJumbogram code as defined in RFC 2675
+ IPv6HopByHopOptionJumbogram = 0xC2
)
const (
@@ -40,10 +43,11 @@ type IPv6 struct {
}
// LayerType returns LayerTypeIPv6
-func (i *IPv6) LayerType() gopacket.LayerType { return LayerTypeIPv6 }
+func (ipv6 *IPv6) LayerType() gopacket.LayerType { return LayerTypeIPv6 }
-func (i *IPv6) NetworkFlow() gopacket.Flow {
- return gopacket.NewFlow(EndpointIPv6, i.SrcIP, i.DstIP)
+// NetworkFlow returns this new Flow (EndpointIPv6, SrcIP, DstIP)
+func (ipv6 *IPv6) NetworkFlow() gopacket.Flow {
+ return gopacket.NewFlow(EndpointIPv6, ipv6.SrcIP, ipv6.DstIP)
}
// Search for Jumbo Payload TLV in IPv6HopByHop and return (length, true) if found
@@ -61,7 +65,7 @@ func getIPv6HopByHopJumboLength(hopopts *IPv6HopByHop) (uint32, bool, error) {
return 0, false, nil
}
if len(tlv.OptionData) != 4 {
- return 0, false, fmt.Errorf("Jumbo length TLV data must have length 4")
+ return 0, false, errors.New("Jumbo length TLV data must have length 4")
}
l := binary.BigEndian.Uint32(tlv.OptionData)
if l <= ipv6MaxPayloadLength {
@@ -113,7 +117,7 @@ func setIPv6PayloadJumboLength(hbh []byte) error {
opt := hbh[offset]
if opt == 0 {
//Pad1
- offset += 1
+ offset++
continue
}
optLen := int(hbh[offset+1])
@@ -126,13 +130,13 @@ func setIPv6PayloadJumboLength(hbh []byte) error {
}
offset += 2 + optLen
}
- return fmt.Errorf("Jumbo TLV not found")
+ 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 {
+func (ipv6 *IPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
var jumbo bool
var err error
@@ -143,25 +147,35 @@ func (ip6 *IPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.Serialize
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 {
+ addIPv6JumboOption(ipv6)
+ } else if ipv6.HopByHop == nil {
return fmt.Errorf("Cannot fit payload length of %d into IPv6 packet", pLen)
} else {
- _, ok, err := getIPv6HopByHopJumboLength(ip6.HopByHop)
+ _, ok, err := getIPv6HopByHopJumboLength(ipv6.HopByHop)
if err != nil {
return err
}
if !ok {
- return fmt.Errorf("Missing jumbo length hop-by-hop option")
+ return errors.New("Missing jumbo length hop-by-hop option")
}
}
}
- if ip6.HopByHop != nil {
- if ip6.NextHeader != IPProtocolIPv6HopByHop {
+
+ hbhAlreadySerialized := false
+ if ipv6.HopByHop != nil {
+ for _, l := range b.Layers() {
+ if l == LayerTypeIPv6HopByHop {
+ hbhAlreadySerialized = true
+ break
+ }
+ }
+ }
+ if ipv6.HopByHop != nil && !hbhAlreadySerialized {
+ if ipv6.NextHeader != IPProtocolIPv6HopByHop {
// Just fix it instead of throwing an error
- ip6.NextHeader = IPProtocolIPv6HopByHop
+ ipv6.NextHeader = IPProtocolIPv6HopByHop
}
- err = ip6.HopByHop.SerializeTo(b, opts)
+ err = ipv6.HopByHop.SerializeTo(b, opts)
if err != nil {
return err
}
@@ -174,95 +188,106 @@ func (ip6 *IPv6) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.Serialize
}
}
}
+
if !jumbo && pLen > ipv6MaxPayloadLength {
- return fmt.Errorf("Cannot fit payload into IPv6 header")
+ 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))
+ bytes[0] = (ipv6.Version << 4) | (ipv6.TrafficClass >> 4)
+ bytes[1] = (ipv6.TrafficClass << 4) | uint8(ipv6.FlowLabel>>16)
+ binary.BigEndian.PutUint16(bytes[2:], uint16(ipv6.FlowLabel))
if opts.FixLengths {
if jumbo {
- ip6.Length = 0
+ ipv6.Length = 0
} else {
- ip6.Length = uint16(pLen)
+ ipv6.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 {
+ binary.BigEndian.PutUint16(bytes[4:], ipv6.Length)
+ bytes[6] = byte(ipv6.NextHeader)
+ bytes[7] = byte(ipv6.HopLimit)
+ if err := ipv6.AddressTo16(); err != nil {
return err
}
- copy(bytes[8:], ip6.SrcIP)
- copy(bytes[24:], ip6.DstIP)
+ copy(bytes[8:], ipv6.SrcIP)
+ copy(bytes[24:], ipv6.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:]}
+// DecodeFromBytes implementation according to gopacket.DecodingLayer
+func (ipv6 *IPv6) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 40 {
+ df.SetTruncated()
+ return fmt.Errorf("Invalid ip6 header. Length %d less than 40", len(data))
+ }
+ ipv6.Version = uint8(data[0]) >> 4
+ ipv6.TrafficClass = uint8((binary.BigEndian.Uint16(data[0:2]) >> 4) & 0x00FF)
+ ipv6.FlowLabel = binary.BigEndian.Uint32(data[0:4]) & 0x000FFFFF
+ ipv6.Length = binary.BigEndian.Uint16(data[4:6])
+ ipv6.NextHeader = IPProtocol(data[6])
+ ipv6.HopLimit = data[7]
+ ipv6.SrcIP = data[8:24]
+ ipv6.DstIP = data[24:40]
+ ipv6.HopByHop = nil
+ ipv6.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 ipv6.NextHeader == IPProtocolIPv6HopByHop {
+ err := ipv6.hbh.DecodeFromBytes(ipv6.Payload, df)
if err != nil {
return err
}
- ip6.HopByHop = &ip6.hbh
- pEnd, jumbo, err := getIPv6HopByHopJumboLength(ip6.HopByHop)
+ ipv6.HopByHop = &ipv6.hbh
+ pEnd, jumbo, err := getIPv6HopByHopJumboLength(ipv6.HopByHop)
if err != nil {
return err
}
- if jumbo && ip6.Length == 0 {
+ if jumbo && ipv6.Length == 0 {
pEnd := int(pEnd)
- if pEnd > len(ip6.Payload) {
+ if pEnd > len(ipv6.Payload) {
df.SetTruncated()
- pEnd = len(ip6.Payload)
+ pEnd = len(ipv6.Payload)
}
- ip6.Payload = ip6.Payload[:pEnd]
+ ipv6.Payload = ipv6.Payload[:pEnd]
return nil
- } else if jumbo && ip6.Length != 0 {
- return fmt.Errorf("IPv6 has jumbo length and IPv6 length is not 0")
- } else if !jumbo && ip6.Length == 0 {
- return fmt.Errorf("IPv6 length 0, but HopByHop header does not have jumbogram option")
+ } else if jumbo && ipv6.Length != 0 {
+ return errors.New("IPv6 has jumbo length and IPv6 length is not 0")
+ } else if !jumbo && ipv6.Length == 0 {
+ return errors.New("IPv6 length 0, but HopByHop header does not have jumbogram option")
+ } else {
+ ipv6.Payload = ipv6.Payload[ipv6.hbh.ActualLength:]
}
}
- 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]
+ if ipv6.Length == 0 {
+ return fmt.Errorf("IPv6 length 0, but next header is %v, not HopByHop", ipv6.NextHeader)
+ }
+
+ pEnd := int(ipv6.Length)
+ if pEnd > len(ipv6.Payload) {
+ df.SetTruncated()
+ pEnd = len(ipv6.Payload)
}
+ ipv6.Payload = ipv6.Payload[:pEnd]
+
return nil
}
-func (i *IPv6) CanDecode() gopacket.LayerClass {
+// CanDecode implementation according to gopacket.DecodingLayer
+func (ipv6 *IPv6) CanDecode() gopacket.LayerClass {
return LayerTypeIPv6
}
-func (i *IPv6) NextLayerType() gopacket.LayerType {
- if i.HopByHop != nil {
- return i.HopByHop.NextHeader.LayerType()
+// NextLayerType implementation according to gopacket.DecodingLayer
+func (ipv6 *IPv6) NextLayerType() gopacket.LayerType {
+ if ipv6.HopByHop != nil {
+ return ipv6.HopByHop.NextHeader.LayerType()
}
- return i.NextHeader.LayerType()
+ return ipv6.NextHeader.LayerType()
}
func decodeIPv6(data []byte, p gopacket.PacketBuilder) error {
@@ -276,10 +301,7 @@ func decodeIPv6(data []byte, p gopacket.PacketBuilder) error {
if err != nil {
return err
}
- if ip6.HopByHop != nil {
- return p.NextDecoder(ip6.HopByHop.NextHeader)
- }
- return p.NextDecoder(ip6.NextHeader)
+ return p.NextDecoder(ip6.NextLayerType())
}
type ipv6HeaderTLVOption struct {
@@ -385,10 +407,17 @@ type ipv6ExtensionBase struct {
ActualLength int
}
-func decodeIPv6ExtensionBase(data []byte) (i ipv6ExtensionBase) {
+func decodeIPv6ExtensionBase(data []byte, df gopacket.DecodeFeedback) (i ipv6ExtensionBase, returnedErr error) {
+ if len(data) < 2 {
+ df.SetTruncated()
+ return ipv6ExtensionBase{}, fmt.Errorf("Invalid ip6-extension header. Length %d less than 2", len(data))
+ }
i.NextHeader = IPProtocol(data[0])
i.HeaderLength = data[1]
i.ActualLength = int(i.HeaderLength)*8 + 8
+ if len(data) < i.ActualLength {
+ return ipv6ExtensionBase{}, fmt.Errorf("Invalid ip6-extension header. Length %d less than specified length %d", len(data), i.ActualLength)
+ }
i.Contents = data[:i.ActualLength]
i.Payload = data[i.ActualLength:]
return
@@ -402,17 +431,23 @@ type IPv6ExtensionSkipper struct {
BaseLayer
}
+// DecodeFromBytes implementation according to gopacket.DecodingLayer
func (i *IPv6ExtensionSkipper) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
- extension := decodeIPv6ExtensionBase(data)
+ extension, err := decodeIPv6ExtensionBase(data, df)
+ if err != nil {
+ return err
+ }
i.BaseLayer = BaseLayer{data[:extension.ActualLength], data[extension.ActualLength:]}
i.NextHeader = extension.NextHeader
return nil
}
+// CanDecode implementation according to gopacket.DecodingLayer
func (i *IPv6ExtensionSkipper) CanDecode() gopacket.LayerClass {
return LayerClassIPv6Extension
}
+// NextLayerType implementation according to gopacket.DecodingLayer
func (i *IPv6ExtensionSkipper) NextLayerType() gopacket.LayerType {
return i.NextHeader.LayerType()
}
@@ -429,6 +464,7 @@ type IPv6HopByHop struct {
// LayerType returns LayerTypeIPv6HopByHop.
func (i *IPv6HopByHop) LayerType() gopacket.LayerType { return LayerTypeIPv6HopByHop }
+// SerializeTo implementation according to gopacket.SerializableLayer
func (i *IPv6HopByHop) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
var bytes []byte
var err error
@@ -447,7 +483,7 @@ func (i *IPv6HopByHop) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.Ser
length := len(bytes) + 2
if length%8 != 0 {
- return fmt.Errorf("IPv6HopByHop actual length must be multiple of 8")
+ return errors.New("IPv6HopByHop actual length must be multiple of 8")
}
bytes, err = b.PrependBytes(2)
if err != nil {
@@ -461,8 +497,13 @@ func (i *IPv6HopByHop) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.Ser
return nil
}
+// DecodeFromBytes implementation according to gopacket.DecodingLayer
func (i *IPv6HopByHop) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
- i.ipv6ExtensionBase = decodeIPv6ExtensionBase(data)
+ var err error
+ i.ipv6ExtensionBase, err = decodeIPv6ExtensionBase(data, df)
+ if err != nil {
+ return err
+ }
offset := 2
for offset < i.ActualLength {
opt := decodeIPv6HeaderTLVOption(data[offset:])
@@ -482,6 +523,7 @@ func decodeIPv6HopByHop(data []byte, p gopacket.PacketBuilder) error {
return p.NextDecoder(i.NextHeader)
}
+// SetJumboLength adds the IPv6HopByHopOptionJumbogram with the given length
func (o *IPv6HopByHopOption) SetJumboLength(len uint32) {
o.OptionType = IPv6HopByHopOptionJumbogram
o.OptionLength = 4
@@ -510,8 +552,12 @@ type IPv6Routing struct {
func (i *IPv6Routing) LayerType() gopacket.LayerType { return LayerTypeIPv6Routing }
func decodeIPv6Routing(data []byte, p gopacket.PacketBuilder) error {
+ base, err := decodeIPv6ExtensionBase(data, p)
+ if err != nil {
+ return err
+ }
i := &IPv6Routing{
- ipv6ExtensionBase: decodeIPv6ExtensionBase(data),
+ ipv6ExtensionBase: base,
RoutingType: data[2],
SegmentsLeft: data[3],
Reserved: data[4:8],
@@ -549,6 +595,10 @@ type IPv6Fragment struct {
func (i *IPv6Fragment) LayerType() gopacket.LayerType { return LayerTypeIPv6Fragment }
func decodeIPv6Fragment(data []byte, p gopacket.PacketBuilder) error {
+ if len(data) < 8 {
+ p.SetTruncated()
+ return fmt.Errorf("Invalid ip6-fragment header. Length %d less than 8", len(data))
+ }
i := &IPv6Fragment{
BaseLayer: BaseLayer{data[:8], data[8:]},
NextHeader: IPProtocol(data[0]),
@@ -574,8 +624,13 @@ type IPv6Destination struct {
// LayerType returns LayerTypeIPv6Destination.
func (i *IPv6Destination) LayerType() gopacket.LayerType { return LayerTypeIPv6Destination }
+// DecodeFromBytes implementation according to gopacket.DecodingLayer
func (i *IPv6Destination) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
- i.ipv6ExtensionBase = decodeIPv6ExtensionBase(data)
+ var err error
+ i.ipv6ExtensionBase, err = decodeIPv6ExtensionBase(data, df)
+ if err != nil {
+ return err
+ }
offset := 2
for offset < i.ActualLength {
opt := decodeIPv6HeaderTLVOption(data[offset:])
@@ -616,7 +671,7 @@ func (i *IPv6Destination) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.
length := len(bytes) + 2
if length%8 != 0 {
- return fmt.Errorf("IPv6Destination actual length must be multiple of 8")
+ return errors.New("IPv6Destination actual length must be multiple of 8")
}
bytes, err = b.PrependBytes(2)
if err != nil {
@@ -635,16 +690,17 @@ func checkIPv6Address(addr net.IP) error {
return nil
}
if len(addr) == net.IPv4len {
- return fmt.Errorf("address is IPv4")
+ 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 {
+// AddressTo16 ensures IPv6.SrcIP and IPv6.DstIP are actually IPv6 addresses (i.e. 16 byte addresses)
+func (ipv6 *IPv6) AddressTo16() error {
+ if err := checkIPv6Address(ipv6.SrcIP); err != nil {
return fmt.Errorf("Invalid source IPv6 address (%s)", err)
}
- if err := checkIPv6Address(ip.DstIP); err != nil {
+ if err := checkIPv6Address(ipv6.DstIP); err != nil {
return fmt.Errorf("Invalid destination IPv6 address (%s)", err)
}
return nil
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6_test.go
index ab22f1784ce..0c2531ae6c8 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ip6_test.go
@@ -99,7 +99,7 @@ var testPacketIPv6HopByHop0 = []byte{
}
func TestPacketIPv6HopByHop0Serialize(t *testing.T) {
- var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+ var serialize = make([]gopacket.SerializableLayer, 0, 2)
var err error
ip6 := &IPv6{}
@@ -140,7 +140,7 @@ func TestPacketIPv6HopByHop0Decode(t *testing.T) {
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},
+ Payload: []byte{},
},
Version: 6,
TrafficClass: 0,
@@ -208,7 +208,7 @@ var testPacketIPv6Destination0 = []byte{
}
func TestPacketIPv6Destination0Serialize(t *testing.T) {
- var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+ var serialize = make([]gopacket.SerializableLayer, 0, 2)
var err error
ip6 := &IPv6{}
@@ -308,7 +308,7 @@ var testPacketIPv6JumbogramHeader = []byte{
}
func TestIPv6JumbogramSerialize(t *testing.T) {
- var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+ var serialize = make([]gopacket.SerializableLayer, 0, 2)
var err error
ip6 := &IPv6{}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/layertypes.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/layertypes.go
index 5bb14211152..56fdb5a50cc 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/layertypes.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/layertypes.go
@@ -1,4 +1,4 @@
-// Copyright 2012 Google, gopacket.LayerTypeMetadata{Inc. All rights reserved}.
+// 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
@@ -11,112 +11,138 @@ import (
)
var (
- LayerTypeARP = gopacket.RegisterLayerType(10, gopacket.LayerTypeMetadata{"ARP", gopacket.DecodeFunc(decodeARP)})
- LayerTypeCiscoDiscovery = gopacket.RegisterLayerType(11, gopacket.LayerTypeMetadata{"CiscoDiscovery", gopacket.DecodeFunc(decodeCiscoDiscovery)})
- LayerTypeEthernetCTP = gopacket.RegisterLayerType(12, gopacket.LayerTypeMetadata{"EthernetCTP", gopacket.DecodeFunc(decodeEthernetCTP)})
- LayerTypeEthernetCTPForwardData = gopacket.RegisterLayerType(13, gopacket.LayerTypeMetadata{"EthernetCTPForwardData", nil})
- LayerTypeEthernetCTPReply = gopacket.RegisterLayerType(14, gopacket.LayerTypeMetadata{"EthernetCTPReply", nil})
- LayerTypeDot1Q = gopacket.RegisterLayerType(15, gopacket.LayerTypeMetadata{"Dot1Q", gopacket.DecodeFunc(decodeDot1Q)})
- LayerTypeEtherIP = gopacket.RegisterLayerType(16, gopacket.LayerTypeMetadata{"EtherIP", gopacket.DecodeFunc(decodeEtherIP)})
- LayerTypeEthernet = gopacket.RegisterLayerType(17, gopacket.LayerTypeMetadata{"Ethernet", gopacket.DecodeFunc(decodeEthernet)})
- LayerTypeGRE = gopacket.RegisterLayerType(18, gopacket.LayerTypeMetadata{"GRE", gopacket.DecodeFunc(decodeGRE)})
- LayerTypeICMPv4 = gopacket.RegisterLayerType(19, gopacket.LayerTypeMetadata{"ICMPv4", gopacket.DecodeFunc(decodeICMPv4)})
- LayerTypeIPv4 = gopacket.RegisterLayerType(20, gopacket.LayerTypeMetadata{"IPv4", gopacket.DecodeFunc(decodeIPv4)})
- LayerTypeIPv6 = gopacket.RegisterLayerType(21, gopacket.LayerTypeMetadata{"IPv6", gopacket.DecodeFunc(decodeIPv6)})
- LayerTypeLLC = gopacket.RegisterLayerType(22, gopacket.LayerTypeMetadata{"LLC", gopacket.DecodeFunc(decodeLLC)})
- LayerTypeSNAP = gopacket.RegisterLayerType(23, gopacket.LayerTypeMetadata{"SNAP", gopacket.DecodeFunc(decodeSNAP)})
- LayerTypeMPLS = gopacket.RegisterLayerType(24, gopacket.LayerTypeMetadata{"MPLS", gopacket.DecodeFunc(decodeMPLS)})
- LayerTypePPP = gopacket.RegisterLayerType(25, gopacket.LayerTypeMetadata{"PPP", gopacket.DecodeFunc(decodePPP)})
- LayerTypePPPoE = gopacket.RegisterLayerType(26, gopacket.LayerTypeMetadata{"PPPoE", gopacket.DecodeFunc(decodePPPoE)})
- LayerTypeRUDP = gopacket.RegisterLayerType(27, gopacket.LayerTypeMetadata{"RUDP", gopacket.DecodeFunc(decodeRUDP)})
- LayerTypeSCTP = gopacket.RegisterLayerType(28, gopacket.LayerTypeMetadata{"SCTP", gopacket.DecodeFunc(decodeSCTP)})
- LayerTypeSCTPUnknownChunkType = gopacket.RegisterLayerType(29, gopacket.LayerTypeMetadata{"SCTPUnknownChunkType", nil})
- LayerTypeSCTPData = gopacket.RegisterLayerType(30, gopacket.LayerTypeMetadata{"SCTPData", nil})
- LayerTypeSCTPInit = gopacket.RegisterLayerType(31, gopacket.LayerTypeMetadata{"SCTPInit", nil})
- LayerTypeSCTPSack = gopacket.RegisterLayerType(32, gopacket.LayerTypeMetadata{"SCTPSack", nil})
- LayerTypeSCTPHeartbeat = gopacket.RegisterLayerType(33, gopacket.LayerTypeMetadata{"SCTPHeartbeat", nil})
- LayerTypeSCTPError = gopacket.RegisterLayerType(34, gopacket.LayerTypeMetadata{"SCTPError", nil})
- LayerTypeSCTPShutdown = gopacket.RegisterLayerType(35, gopacket.LayerTypeMetadata{"SCTPShutdown", nil})
- LayerTypeSCTPShutdownAck = gopacket.RegisterLayerType(36, gopacket.LayerTypeMetadata{"SCTPShutdownAck", nil})
- LayerTypeSCTPCookieEcho = gopacket.RegisterLayerType(37, gopacket.LayerTypeMetadata{"SCTPCookieEcho", nil})
- LayerTypeSCTPEmptyLayer = gopacket.RegisterLayerType(38, gopacket.LayerTypeMetadata{"SCTPEmptyLayer", nil})
- LayerTypeSCTPInitAck = gopacket.RegisterLayerType(39, gopacket.LayerTypeMetadata{"SCTPInitAck", nil})
- LayerTypeSCTPHeartbeatAck = gopacket.RegisterLayerType(40, gopacket.LayerTypeMetadata{"SCTPHeartbeatAck", nil})
- LayerTypeSCTPAbort = gopacket.RegisterLayerType(41, gopacket.LayerTypeMetadata{"SCTPAbort", nil})
- LayerTypeSCTPShutdownComplete = gopacket.RegisterLayerType(42, gopacket.LayerTypeMetadata{"SCTPShutdownComplete", nil})
- LayerTypeSCTPCookieAck = gopacket.RegisterLayerType(43, gopacket.LayerTypeMetadata{"SCTPCookieAck", nil})
- LayerTypeTCP = gopacket.RegisterLayerType(44, gopacket.LayerTypeMetadata{"TCP", gopacket.DecodeFunc(decodeTCP)})
- LayerTypeUDP = gopacket.RegisterLayerType(45, gopacket.LayerTypeMetadata{"UDP", gopacket.DecodeFunc(decodeUDP)})
- LayerTypeIPv6HopByHop = gopacket.RegisterLayerType(46, gopacket.LayerTypeMetadata{"IPv6HopByHop", gopacket.DecodeFunc(decodeIPv6HopByHop)})
- LayerTypeIPv6Routing = gopacket.RegisterLayerType(47, gopacket.LayerTypeMetadata{"IPv6Routing", gopacket.DecodeFunc(decodeIPv6Routing)})
- LayerTypeIPv6Fragment = gopacket.RegisterLayerType(48, gopacket.LayerTypeMetadata{"IPv6Fragment", gopacket.DecodeFunc(decodeIPv6Fragment)})
- LayerTypeIPv6Destination = gopacket.RegisterLayerType(49, gopacket.LayerTypeMetadata{"IPv6Destination", gopacket.DecodeFunc(decodeIPv6Destination)})
- LayerTypeIPSecAH = gopacket.RegisterLayerType(50, gopacket.LayerTypeMetadata{"IPSecAH", gopacket.DecodeFunc(decodeIPSecAH)})
- LayerTypeIPSecESP = gopacket.RegisterLayerType(51, gopacket.LayerTypeMetadata{"IPSecESP", gopacket.DecodeFunc(decodeIPSecESP)})
- LayerTypeUDPLite = gopacket.RegisterLayerType(52, gopacket.LayerTypeMetadata{"UDPLite", gopacket.DecodeFunc(decodeUDPLite)})
- LayerTypeFDDI = gopacket.RegisterLayerType(53, gopacket.LayerTypeMetadata{"FDDI", gopacket.DecodeFunc(decodeFDDI)})
- LayerTypeLoopback = gopacket.RegisterLayerType(54, gopacket.LayerTypeMetadata{"Loopback", gopacket.DecodeFunc(decodeLoopback)})
- LayerTypeEAP = gopacket.RegisterLayerType(55, gopacket.LayerTypeMetadata{"EAP", gopacket.DecodeFunc(decodeEAP)})
- LayerTypeEAPOL = gopacket.RegisterLayerType(56, gopacket.LayerTypeMetadata{"EAPOL", gopacket.DecodeFunc(decodeEAPOL)})
- LayerTypeICMPv6 = gopacket.RegisterLayerType(57, gopacket.LayerTypeMetadata{"ICMPv6", gopacket.DecodeFunc(decodeICMPv6)})
- LayerTypeLinkLayerDiscovery = gopacket.RegisterLayerType(58, gopacket.LayerTypeMetadata{"LinkLayerDiscovery", gopacket.DecodeFunc(decodeLinkLayerDiscovery)})
- LayerTypeCiscoDiscoveryInfo = gopacket.RegisterLayerType(59, gopacket.LayerTypeMetadata{"CiscoDiscoveryInfo", gopacket.DecodeFunc(decodeCiscoDiscoveryInfo)})
- LayerTypeLinkLayerDiscoveryInfo = gopacket.RegisterLayerType(60, gopacket.LayerTypeMetadata{"LinkLayerDiscoveryInfo", nil})
- LayerTypeNortelDiscovery = gopacket.RegisterLayerType(61, gopacket.LayerTypeMetadata{"NortelDiscovery", gopacket.DecodeFunc(decodeNortelDiscovery)})
- LayerTypeIGMP = gopacket.RegisterLayerType(62, gopacket.LayerTypeMetadata{"IGMP", gopacket.DecodeFunc(decodeIGMP)})
- LayerTypePFLog = gopacket.RegisterLayerType(63, gopacket.LayerTypeMetadata{"PFLog", gopacket.DecodeFunc(decodePFLog)})
- LayerTypeRadioTap = gopacket.RegisterLayerType(64, gopacket.LayerTypeMetadata{"RadioTap", gopacket.DecodeFunc(decodeRadioTap)})
- LayerTypeDot11 = gopacket.RegisterLayerType(65, gopacket.LayerTypeMetadata{"Dot11", gopacket.DecodeFunc(decodeDot11)})
- LayerTypeDot11Ctrl = gopacket.RegisterLayerType(66, gopacket.LayerTypeMetadata{"Dot11Ctrl", gopacket.DecodeFunc(decodeDot11Ctrl)})
- LayerTypeDot11Data = gopacket.RegisterLayerType(67, gopacket.LayerTypeMetadata{"Dot11Data", gopacket.DecodeFunc(decodeDot11Data)})
- LayerTypeDot11DataCFAck = gopacket.RegisterLayerType(68, gopacket.LayerTypeMetadata{"Dot11DataCFAck", gopacket.DecodeFunc(decodeDot11DataCFAck)})
- LayerTypeDot11DataCFPoll = gopacket.RegisterLayerType(69, gopacket.LayerTypeMetadata{"Dot11DataCFPoll", gopacket.DecodeFunc(decodeDot11DataCFPoll)})
- LayerTypeDot11DataCFAckPoll = gopacket.RegisterLayerType(70, gopacket.LayerTypeMetadata{"Dot11DataCFAckPoll", gopacket.DecodeFunc(decodeDot11DataCFAckPoll)})
- LayerTypeDot11DataNull = gopacket.RegisterLayerType(71, gopacket.LayerTypeMetadata{"Dot11DataNull", gopacket.DecodeFunc(decodeDot11DataNull)})
- LayerTypeDot11DataCFAckNoData = gopacket.RegisterLayerType(72, gopacket.LayerTypeMetadata{"Dot11DataCFAck", gopacket.DecodeFunc(decodeDot11DataCFAck)})
- LayerTypeDot11DataCFPollNoData = gopacket.RegisterLayerType(73, gopacket.LayerTypeMetadata{"Dot11DataCFPoll", gopacket.DecodeFunc(decodeDot11DataCFPoll)})
- LayerTypeDot11DataCFAckPollNoData = gopacket.RegisterLayerType(74, gopacket.LayerTypeMetadata{"Dot11DataCFAckPoll", gopacket.DecodeFunc(decodeDot11DataCFAckPoll)})
- LayerTypeDot11DataQOSData = gopacket.RegisterLayerType(75, gopacket.LayerTypeMetadata{"Dot11DataQOSData", gopacket.DecodeFunc(decodeDot11DataQOSData)})
- LayerTypeDot11DataQOSDataCFAck = gopacket.RegisterLayerType(76, gopacket.LayerTypeMetadata{"Dot11DataQOSDataCFAck", gopacket.DecodeFunc(decodeDot11DataQOSDataCFAck)})
- LayerTypeDot11DataQOSDataCFPoll = gopacket.RegisterLayerType(77, gopacket.LayerTypeMetadata{"Dot11DataQOSDataCFPoll", gopacket.DecodeFunc(decodeDot11DataQOSDataCFPoll)})
- LayerTypeDot11DataQOSDataCFAckPoll = gopacket.RegisterLayerType(78, gopacket.LayerTypeMetadata{"Dot11DataQOSDataCFAckPoll", gopacket.DecodeFunc(decodeDot11DataQOSDataCFAckPoll)})
- LayerTypeDot11DataQOSNull = gopacket.RegisterLayerType(79, gopacket.LayerTypeMetadata{"Dot11DataQOSNull", gopacket.DecodeFunc(decodeDot11DataQOSNull)})
- LayerTypeDot11DataQOSCFPollNoData = gopacket.RegisterLayerType(80, gopacket.LayerTypeMetadata{"Dot11DataQOSCFPoll", gopacket.DecodeFunc(decodeDot11DataQOSCFPollNoData)})
- LayerTypeDot11DataQOSCFAckPollNoData = gopacket.RegisterLayerType(81, gopacket.LayerTypeMetadata{"Dot11DataQOSCFAckPoll", gopacket.DecodeFunc(decodeDot11DataQOSCFAckPollNoData)})
- LayerTypeDot11InformationElement = gopacket.RegisterLayerType(82, gopacket.LayerTypeMetadata{"Dot11InformationElement", gopacket.DecodeFunc(decodeDot11InformationElement)})
- LayerTypeDot11CtrlCTS = gopacket.RegisterLayerType(83, gopacket.LayerTypeMetadata{"Dot11CtrlCTS", gopacket.DecodeFunc(decodeDot11CtrlCTS)})
- LayerTypeDot11CtrlRTS = gopacket.RegisterLayerType(84, gopacket.LayerTypeMetadata{"Dot11CtrlRTS", gopacket.DecodeFunc(decodeDot11CtrlRTS)})
- LayerTypeDot11CtrlBlockAckReq = gopacket.RegisterLayerType(85, gopacket.LayerTypeMetadata{"Dot11CtrlBlockAckReq", gopacket.DecodeFunc(decodeDot11CtrlBlockAckReq)})
- LayerTypeDot11CtrlBlockAck = gopacket.RegisterLayerType(86, gopacket.LayerTypeMetadata{"Dot11CtrlBlockAck", gopacket.DecodeFunc(decodeDot11CtrlBlockAck)})
- LayerTypeDot11CtrlPowersavePoll = gopacket.RegisterLayerType(87, gopacket.LayerTypeMetadata{"Dot11CtrlPowersavePoll", gopacket.DecodeFunc(decodeDot11CtrlPowersavePoll)})
- LayerTypeDot11CtrlAck = gopacket.RegisterLayerType(88, gopacket.LayerTypeMetadata{"Dot11CtrlAck", gopacket.DecodeFunc(decodeDot11CtrlAck)})
- LayerTypeDot11CtrlCFEnd = gopacket.RegisterLayerType(89, gopacket.LayerTypeMetadata{"Dot11CtrlCFEnd", gopacket.DecodeFunc(decodeDot11CtrlCFEnd)})
- LayerTypeDot11CtrlCFEndAck = gopacket.RegisterLayerType(90, gopacket.LayerTypeMetadata{"Dot11CtrlCFEndAck", gopacket.DecodeFunc(decodeDot11CtrlCFEndAck)})
- LayerTypeDot11MgmtAssociationReq = gopacket.RegisterLayerType(91, gopacket.LayerTypeMetadata{"Dot11MgmtAssociationReq", gopacket.DecodeFunc(decodeDot11MgmtAssociationReq)})
- LayerTypeDot11MgmtAssociationResp = gopacket.RegisterLayerType(92, gopacket.LayerTypeMetadata{"Dot11MgmtAssociationResp", gopacket.DecodeFunc(decodeDot11MgmtAssociationResp)})
- LayerTypeDot11MgmtReassociationReq = gopacket.RegisterLayerType(93, gopacket.LayerTypeMetadata{"Dot11MgmtReassociationReq", gopacket.DecodeFunc(decodeDot11MgmtReassociationReq)})
- LayerTypeDot11MgmtReassociationResp = gopacket.RegisterLayerType(94, gopacket.LayerTypeMetadata{"Dot11MgmtReassociationResp", gopacket.DecodeFunc(decodeDot11MgmtReassociationResp)})
- LayerTypeDot11MgmtProbeReq = gopacket.RegisterLayerType(95, gopacket.LayerTypeMetadata{"Dot11MgmtProbeReq", gopacket.DecodeFunc(decodeDot11MgmtProbeReq)})
- LayerTypeDot11MgmtProbeResp = gopacket.RegisterLayerType(96, gopacket.LayerTypeMetadata{"Dot11MgmtProbeResp", gopacket.DecodeFunc(decodeDot11MgmtProbeResp)})
- LayerTypeDot11MgmtMeasurementPilot = gopacket.RegisterLayerType(97, gopacket.LayerTypeMetadata{"Dot11MgmtMeasurementPilot", gopacket.DecodeFunc(decodeDot11MgmtMeasurementPilot)})
- LayerTypeDot11MgmtBeacon = gopacket.RegisterLayerType(98, gopacket.LayerTypeMetadata{"Dot11MgmtBeacon", gopacket.DecodeFunc(decodeDot11MgmtBeacon)})
- LayerTypeDot11MgmtATIM = gopacket.RegisterLayerType(99, gopacket.LayerTypeMetadata{"Dot11MgmtATIM", gopacket.DecodeFunc(decodeDot11MgmtATIM)})
- LayerTypeDot11MgmtDisassociation = gopacket.RegisterLayerType(100, gopacket.LayerTypeMetadata{"Dot11MgmtDisassociation", gopacket.DecodeFunc(decodeDot11MgmtDisassociation)})
- LayerTypeDot11MgmtAuthentication = gopacket.RegisterLayerType(101, gopacket.LayerTypeMetadata{"Dot11MgmtAuthentication", gopacket.DecodeFunc(decodeDot11MgmtAuthentication)})
- LayerTypeDot11MgmtDeauthentication = gopacket.RegisterLayerType(102, gopacket.LayerTypeMetadata{"Dot11MgmtDeauthentication", gopacket.DecodeFunc(decodeDot11MgmtDeauthentication)})
- LayerTypeDot11MgmtAction = gopacket.RegisterLayerType(103, gopacket.LayerTypeMetadata{"Dot11MgmtAction", gopacket.DecodeFunc(decodeDot11MgmtAction)})
- LayerTypeDot11MgmtActionNoAck = gopacket.RegisterLayerType(104, gopacket.LayerTypeMetadata{"Dot11MgmtActionNoAck", gopacket.DecodeFunc(decodeDot11MgmtActionNoAck)})
- LayerTypeDot11MgmtArubaWLAN = gopacket.RegisterLayerType(105, gopacket.LayerTypeMetadata{"Dot11MgmtArubaWLAN", gopacket.DecodeFunc(decodeDot11MgmtArubaWLAN)})
- LayerTypeDot11WEP = gopacket.RegisterLayerType(106, gopacket.LayerTypeMetadata{"Dot11WEP", gopacket.DecodeFunc(decodeDot11WEP)})
- LayerTypeDNS = gopacket.RegisterLayerType(107, gopacket.LayerTypeMetadata{"DNS", gopacket.DecodeFunc(decodeDNS)})
- LayerTypeUSB = gopacket.RegisterLayerType(108, gopacket.LayerTypeMetadata{"USB", gopacket.DecodeFunc(decodeUSB)})
- LayerTypeUSBRequestBlockSetup = gopacket.RegisterLayerType(109, gopacket.LayerTypeMetadata{"USBRequestBlockSetup", gopacket.DecodeFunc(decodeUSBRequestBlockSetup)})
- LayerTypeUSBControl = gopacket.RegisterLayerType(110, gopacket.LayerTypeMetadata{"USBControl", gopacket.DecodeFunc(decodeUSBControl)})
- LayerTypeUSBInterrupt = gopacket.RegisterLayerType(111, gopacket.LayerTypeMetadata{"USBInterrupt", gopacket.DecodeFunc(decodeUSBInterrupt)})
- LayerTypeUSBBulk = gopacket.RegisterLayerType(112, gopacket.LayerTypeMetadata{"USBBulk", gopacket.DecodeFunc(decodeUSBBulk)})
- LayerTypeLinuxSLL = gopacket.RegisterLayerType(113, gopacket.LayerTypeMetadata{"Linux SLL", gopacket.DecodeFunc(decodeLinuxSLL)})
- LayerTypeSFlow = gopacket.RegisterLayerType(114, gopacket.LayerTypeMetadata{"SFlow", gopacket.DecodeFunc(decodeSFlow)})
- LayerTypePrismHeader = gopacket.RegisterLayerType(115, gopacket.LayerTypeMetadata{"Prism monitor mode header", gopacket.DecodeFunc(decodePrismHeader)})
+ 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)})
+ LayerTypeICMPv6RouterSolicitation = gopacket.RegisterLayerType(124, gopacket.LayerTypeMetadata{Name: "ICMPv6RouterSolicitation", Decoder: gopacket.DecodeFunc(decodeICMPv6RouterSolicitation)})
+ LayerTypeICMPv6RouterAdvertisement = gopacket.RegisterLayerType(125, gopacket.LayerTypeMetadata{Name: "ICMPv6RouterAdvertisement", Decoder: gopacket.DecodeFunc(decodeICMPv6RouterAdvertisement)})
+ LayerTypeICMPv6NeighborSolicitation = gopacket.RegisterLayerType(126, gopacket.LayerTypeMetadata{Name: "ICMPv6NeighborSolicitation", Decoder: gopacket.DecodeFunc(decodeICMPv6NeighborSolicitation)})
+ LayerTypeICMPv6NeighborAdvertisement = gopacket.RegisterLayerType(127, gopacket.LayerTypeMetadata{Name: "ICMPv6NeighborAdvertisement", Decoder: gopacket.DecodeFunc(decodeICMPv6NeighborAdvertisement)})
+ LayerTypeICMPv6Redirect = gopacket.RegisterLayerType(128, gopacket.LayerTypeMetadata{Name: "ICMPv6Redirect", Decoder: gopacket.DecodeFunc(decodeICMPv6Redirect)})
+ LayerTypeGTPv1U = gopacket.RegisterLayerType(129, gopacket.LayerTypeMetadata{Name: "GTPv1U", Decoder: gopacket.DecodeFunc(decodeGTPv1u)})
+ LayerTypeEAPOLKey = gopacket.RegisterLayerType(130, gopacket.LayerTypeMetadata{Name: "EAPOLKey", Decoder: gopacket.DecodeFunc(decodeEAPOLKey)})
+ LayerTypeLCM = gopacket.RegisterLayerType(131, gopacket.LayerTypeMetadata{Name: "LCM", Decoder: gopacket.DecodeFunc(decodeLCM)})
+ LayerTypeICMPv6Echo = gopacket.RegisterLayerType(132, gopacket.LayerTypeMetadata{Name: "ICMPv6Echo", Decoder: gopacket.DecodeFunc(decodeICMPv6Echo)})
+ LayerTypeSIP = gopacket.RegisterLayerType(133, gopacket.LayerTypeMetadata{Name: "SIP", Decoder: gopacket.DecodeFunc(decodeSIP)})
+ LayerTypeDHCPv6 = gopacket.RegisterLayerType(134, gopacket.LayerTypeMetadata{Name: "DHCPv6", Decoder: gopacket.DecodeFunc(decodeDHCPv6)})
+ LayerTypeMLDv1MulticastListenerReport = gopacket.RegisterLayerType(135, gopacket.LayerTypeMetadata{Name: "MLDv1MulticastListenerReport", Decoder: gopacket.DecodeFunc(decodeMLDv1MulticastListenerReport)})
+ LayerTypeMLDv1MulticastListenerDone = gopacket.RegisterLayerType(136, gopacket.LayerTypeMetadata{Name: "MLDv1MulticastListenerDone", Decoder: gopacket.DecodeFunc(decodeMLDv1MulticastListenerDone)})
+ LayerTypeMLDv1MulticastListenerQuery = gopacket.RegisterLayerType(137, gopacket.LayerTypeMetadata{Name: "MLDv1MulticastListenerQuery", Decoder: gopacket.DecodeFunc(decodeMLDv1MulticastListenerQuery)})
+ LayerTypeMLDv2MulticastListenerReport = gopacket.RegisterLayerType(138, gopacket.LayerTypeMetadata{Name: "MLDv2MulticastListenerReport", Decoder: gopacket.DecodeFunc(decodeMLDv2MulticastListenerReport)})
+ LayerTypeMLDv2MulticastListenerQuery = gopacket.RegisterLayerType(139, gopacket.LayerTypeMetadata{Name: "MLDv2MulticastListenerQuery", Decoder: gopacket.DecodeFunc(decodeMLDv2MulticastListenerQuery)})
+ LayerTypeTLS = gopacket.RegisterLayerType(140, gopacket.LayerTypeMetadata{Name: "TLS", Decoder: gopacket.DecodeFunc(decodeTLS)})
+ LayerTypeModbusTCP = gopacket.RegisterLayerType(141, gopacket.LayerTypeMetadata{Name: "ModbusTCP", Decoder: gopacket.DecodeFunc(decodeModbusTCP)})
)
var (
@@ -166,4 +192,27 @@ var (
LayerTypeIPSecAH,
LayerTypeIPSecESP,
})
+ // LayerClassICMPv6NDP contains ICMPv6 neighbor discovery protocol
+ // messages.
+ LayerClassICMPv6NDP = gopacket.NewLayerClass([]gopacket.LayerType{
+ LayerTypeICMPv6RouterSolicitation,
+ LayerTypeICMPv6RouterAdvertisement,
+ LayerTypeICMPv6NeighborSolicitation,
+ LayerTypeICMPv6NeighborAdvertisement,
+ LayerTypeICMPv6Redirect,
+ })
+ // LayerClassMLDv1 contains multicast listener discovery protocol
+ LayerClassMLDv1 = gopacket.NewLayerClass([]gopacket.LayerType{
+ LayerTypeMLDv1MulticastListenerQuery,
+ LayerTypeMLDv1MulticastListenerReport,
+ LayerTypeMLDv1MulticastListenerDone,
+ })
+ // LayerClassMLDv2 contains multicast listener discovery protocol v2
+ LayerClassMLDv2 = gopacket.NewLayerClass([]gopacket.LayerType{
+ LayerTypeMLDv1MulticastListenerReport,
+ LayerTypeMLDv1MulticastListenerDone,
+ LayerTypeMLDv2MulticastListenerReport,
+ LayerTypeMLDv1MulticastListenerQuery,
+ LayerTypeMLDv2MulticastListenerQuery,
+ })
)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lcm.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lcm.go
new file mode 100644
index 00000000000..5fe9fa54409
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lcm.go
@@ -0,0 +1,213 @@
+// Copyright 2018 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"
+)
+
+const (
+ // LCMShortHeaderMagic is the LCM small message header magic number
+ LCMShortHeaderMagic uint32 = 0x4c433032
+ // LCMFragmentedHeaderMagic is the LCM fragmented message header magic number
+ LCMFragmentedHeaderMagic uint32 = 0x4c433033
+)
+
+// LCM (Lightweight Communications and Marshalling) is a set of libraries and
+// tools for message passing and data marshalling, targeted at real-time systems
+// where high-bandwidth and low latency are critical. It provides a
+// publish/subscribe message passing model and automatic
+// marshalling/unmarshalling code generation with bindings for applications in a
+// variety of programming languages.
+//
+// References
+// https://lcm-proj.github.io/
+// https://github.com/lcm-proj/lcm
+type LCM struct {
+ // Common (short & fragmented header) fields
+ Magic uint32
+ SequenceNumber uint32
+ // Fragmented header only fields
+ PayloadSize uint32
+ FragmentOffset uint32
+ FragmentNumber uint16
+ TotalFragments uint16
+ // Common field
+ ChannelName string
+ // Gopacket helper fields
+ Fragmented bool
+ fingerprint LCMFingerprint
+ contents []byte
+ payload []byte
+}
+
+// LCMFingerprint is the type of a LCM fingerprint.
+type LCMFingerprint uint64
+
+var (
+ // lcmLayerTypes contains a map of all LCM fingerprints that we support and
+ // their LayerType
+ lcmLayerTypes = map[LCMFingerprint]gopacket.LayerType{}
+ layerTypeIndex = 1001
+)
+
+// RegisterLCMLayerType allows users to register decoders for the underlying
+// LCM payload. This is done based on the fingerprint that every LCM message
+// contains and which identifies it uniquely. If num is not the zero value it
+// will be used when registering with RegisterLayerType towards gopacket,
+// otherwise an incremental value starting from 1001 will be used.
+func RegisterLCMLayerType(num int, name string, fingerprint LCMFingerprint,
+ decoder gopacket.Decoder) gopacket.LayerType {
+ metadata := gopacket.LayerTypeMetadata{Name: name, Decoder: decoder}
+
+ if num == 0 {
+ num = layerTypeIndex
+ layerTypeIndex++
+ }
+
+ lcmLayerTypes[fingerprint] = gopacket.RegisterLayerType(num, metadata)
+
+ return lcmLayerTypes[fingerprint]
+}
+
+// SupportedLCMFingerprints returns a slice of all LCM fingerprints that has
+// been registered so far.
+func SupportedLCMFingerprints() []LCMFingerprint {
+ fingerprints := make([]LCMFingerprint, 0, len(lcmLayerTypes))
+ for fp := range lcmLayerTypes {
+ fingerprints = append(fingerprints, fp)
+ }
+ return fingerprints
+}
+
+// GetLCMLayerType returns the underlying LCM message's LayerType.
+// This LayerType has to be registered by using RegisterLCMLayerType.
+func GetLCMLayerType(fingerprint LCMFingerprint) gopacket.LayerType {
+ layerType, ok := lcmLayerTypes[fingerprint]
+ if !ok {
+ return gopacket.LayerTypePayload
+ }
+
+ return layerType
+}
+
+func decodeLCM(data []byte, p gopacket.PacketBuilder) error {
+ lcm := &LCM{}
+
+ err := lcm.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+
+ p.AddLayer(lcm)
+ p.SetApplicationLayer(lcm)
+
+ return p.NextDecoder(lcm.NextLayerType())
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (lcm *LCM) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ offset := 0
+
+ lcm.Magic = binary.BigEndian.Uint32(data[offset:4])
+ offset += 4
+
+ if lcm.Magic != LCMShortHeaderMagic && lcm.Magic != LCMFragmentedHeaderMagic {
+ return fmt.Errorf("Received LCM header magic %v does not match know "+
+ "LCM magic numbers. Dropping packet.", lcm.Magic)
+ }
+
+ lcm.SequenceNumber = binary.BigEndian.Uint32(data[offset:8])
+ offset += 4
+
+ if lcm.Magic == LCMFragmentedHeaderMagic {
+ lcm.Fragmented = true
+
+ lcm.PayloadSize = binary.BigEndian.Uint32(data[offset : offset+4])
+ offset += 4
+
+ lcm.FragmentOffset = binary.BigEndian.Uint32(data[offset : offset+4])
+ offset += 4
+
+ lcm.FragmentNumber = binary.BigEndian.Uint16(data[offset : offset+2])
+ offset += 2
+
+ lcm.TotalFragments = binary.BigEndian.Uint16(data[offset : offset+2])
+ offset += 2
+ } else {
+ lcm.Fragmented = false
+ }
+
+ if !lcm.Fragmented || (lcm.Fragmented && lcm.FragmentNumber == 0) {
+ buffer := make([]byte, 0)
+ for _, b := range data[offset:] {
+ offset++
+
+ if b == 0 {
+ break
+ }
+
+ buffer = append(buffer, b)
+ }
+
+ lcm.ChannelName = string(buffer)
+ }
+
+ lcm.fingerprint = LCMFingerprint(
+ binary.BigEndian.Uint64(data[offset : offset+8]))
+
+ lcm.contents = data[:offset]
+ lcm.payload = data[offset:]
+
+ return nil
+}
+
+// CanDecode returns a set of layers that LCM objects can decode.
+// As LCM objects can only decode the LCM layer, we just return that layer.
+func (lcm LCM) CanDecode() gopacket.LayerClass {
+ return LayerTypeLCM
+}
+
+// NextLayerType specifies the LCM payload layer type following this header.
+// As LCM packets are serialized structs with uniq fingerprints for each uniq
+// combination of data types, lookup of correct layer type is based on that
+// fingerprint.
+func (lcm LCM) NextLayerType() gopacket.LayerType {
+ if !lcm.Fragmented || (lcm.Fragmented && lcm.FragmentNumber == 0) {
+ return GetLCMLayerType(lcm.fingerprint)
+ }
+
+ return gopacket.LayerTypeFragment
+}
+
+// LayerType returns LayerTypeLCM
+func (lcm LCM) LayerType() gopacket.LayerType {
+ return LayerTypeLCM
+}
+
+// LayerContents returns the contents of the LCM header.
+func (lcm LCM) LayerContents() []byte {
+ return lcm.contents
+}
+
+// LayerPayload returns the payload following this LCM header.
+func (lcm LCM) LayerPayload() []byte {
+ return lcm.payload
+}
+
+// Payload returns the payload following this LCM header.
+func (lcm LCM) Payload() []byte {
+ return lcm.LayerPayload()
+}
+
+// Fingerprint returns the LCM fingerprint of the underlying message.
+func (lcm LCM) Fingerprint() LCMFingerprint {
+ return lcm.fingerprint
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lcm_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lcm_test.go
new file mode 100644
index 00000000000..fe2975b547b
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lcm_test.go
@@ -0,0 +1,156 @@
+// Copyright 2018 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/hex"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+var (
+ fingerprint uint64 = 0x6c636d2073656c66
+
+ shortPacket = []byte{
+ 0x4c, 0x43, 0x30, 0x32, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x43, 0x4d, 0x5f,
+ 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,
+ 0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,
+ }
+
+ fragmentedPacket = []byte{
+ 0x4c, 0x43, 0x30, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d,
+ 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x02, 0x4c, 0x43, 0x4d, 0x5f,
+ 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x00, 0x6c, 0x63,
+ 0x6d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x74, 0x65, 0x73, 0x74,
+ }
+
+ invalidPacket = []byte{
+ 0x4c, 0x43, 0x30, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }
+
+ expectedChannel = "LCM_SELF_TEST"
+)
+
+func TestLCMDecode(t *testing.T) {
+ testShortLCM(t)
+ testFragmentedLCM(t)
+ testInvalidLCM(t)
+}
+
+func testShortLCM(t *testing.T) {
+ lcm := &LCM{}
+
+ err := lcm.DecodeFromBytes(shortPacket, gopacket.NilDecodeFeedback)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if lcm.Magic != LCMShortHeaderMagic {
+ t.Errorf("Expected LCM Magic %x, but decoded %x.\n",
+ LCMShortHeaderMagic, lcm.Magic)
+ }
+
+ if lcm.SequenceNumber != 0x00 {
+ t.Errorf("Expected an LCM Sequence Number of %x, but decoded %x.\n",
+ 0x00, lcm.SequenceNumber)
+ }
+
+ if lcm.ChannelName != expectedChannel {
+ t.Errorf("Expected channel name %s but received %s\n",
+ expectedChannel, lcm.ChannelName)
+ }
+
+ if lcm.Fragmented {
+ t.Errorf("Misinterpreted non-fragmented packet as fragmented.")
+ }
+
+ for i, val := range lcm.LayerContents() {
+ if val != shortPacket[i] {
+ t.Errorf("\nLCM Payload: expected\n%sbut received\n%s",
+ hex.Dump(shortPacket[:22]), hex.Dump(lcm.Payload()))
+ }
+ }
+
+ for i, val := range lcm.Payload() {
+ if val != shortPacket[i+22] {
+ t.Errorf("\nLCM Payload: expected\n%sbut received\n%s",
+ hex.Dump(shortPacket[22:]), hex.Dump(lcm.Payload()))
+ }
+ }
+}
+
+func testFragmentedLCM(t *testing.T) {
+ lcm := LCM{}
+
+ err := lcm.DecodeFromBytes(fragmentedPacket, gopacket.NilDecodeFeedback)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if lcm.Magic != LCMFragmentedHeaderMagic {
+ t.Errorf("Expected LCM Magic %x, but decoded %x.\n",
+ LCMFragmentedHeaderMagic, lcm.Magic)
+ }
+
+ if lcm.SequenceNumber != 0x01 {
+ t.Errorf("Expected an LCM Sequence Number of %x, but decoded %x.\n",
+ 0x01, lcm.SequenceNumber)
+ }
+
+ if lcm.PayloadSize != 0x0d {
+ t.Errorf("Expected an LCM Payload Size of %x, but decoded %x.\n", 0x0d,
+ lcm.PayloadSize)
+ }
+
+ if lcm.FragmentOffset != 0x2d {
+ t.Errorf("Expected an LCM Fragment Offset of %x, but decoded %x.\n",
+ 0x2d, lcm.FragmentOffset)
+ }
+
+ if lcm.FragmentNumber != 0x00 {
+ t.Errorf("Expected the first LCM fragment (%x), but decoded %x.\n",
+ 0x00, lcm.FragmentNumber)
+ }
+
+ if lcm.TotalFragments != 0x02 {
+ t.Errorf("Expected two LCM fragments (%x), but decoded %x.\n", 0x02,
+ lcm.TotalFragments)
+ }
+
+ if lcm.ChannelName != expectedChannel {
+ t.Errorf("Expected LCM Channel Name %s but decoded %s\n",
+ expectedChannel, lcm.ChannelName)
+ }
+
+ if !lcm.Fragmented {
+ t.Errorf("Misinterpreted fragmented packet as non-fragmented.")
+ }
+
+ for i, val := range lcm.LayerContents() {
+ if val != fragmentedPacket[i] {
+ t.Errorf("\nLCM Payload: expected\n%sbut received\n%s",
+ hex.Dump(fragmentedPacket[:22]), hex.Dump(lcm.Payload()))
+ }
+ }
+
+ for i, val := range lcm.Payload() {
+ if val != fragmentedPacket[i+34] {
+ t.Errorf("\nLCM Payload: expected\n%sbut received\n%s",
+ hex.Dump(fragmentedPacket[34:]), hex.Dump(lcm.Payload()))
+ }
+ }
+}
+
+func testInvalidLCM(t *testing.T) {
+ lcm := LCM{}
+
+ err := lcm.DecodeFromBytes(invalidPacket, gopacket.NilDecodeFeedback)
+ if err == nil {
+ t.Fatal("Did not detect LCM decode error.")
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/linux_sll.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/linux_sll.go
index b1860536a95..85a4f8bdd0a 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/linux_sll.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/linux_sll.go
@@ -54,6 +54,7 @@ type LinuxSLL struct {
AddrLen uint16
Addr net.HardwareAddr
EthernetType EthernetType
+ AddrType uint16
}
// LayerType returns LayerTypeLinuxSLL.
@@ -76,6 +77,7 @@ func (sll *LinuxSLL) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) er
return errors.New("Linux SLL packet too small")
}
sll.PacketType = LinuxSLLPacketType(binary.BigEndian.Uint16(data[0:2]))
+ sll.AddrType = binary.BigEndian.Uint16(data[2:4])
sll.AddrLen = binary.BigEndian.Uint16(data[4:6])
sll.Addr = net.HardwareAddr(data[6 : sll.AddrLen+6])
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/llc.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/llc.go
index 0e15c878a9b..2f2e4a52d01 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/llc.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/llc.go
@@ -8,6 +8,8 @@ package layers
import (
"encoding/binary"
+ "errors"
+
"github.com/google/gopacket"
)
@@ -25,6 +27,47 @@ type LLC struct {
// LayerType returns gopacket.LayerTypeLLC.
func (l *LLC) LayerType() gopacket.LayerType { return LayerTypeLLC }
+// DecodeFromBytes decodes the given bytes into this layer.
+func (l *LLC) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 3 {
+ return errors.New("LLC header too small")
+ }
+ l.DSAP = data[0] & 0xFE
+ l.IG = data[0]&0x1 != 0
+ l.SSAP = data[1] & 0xFE
+ l.CR = data[1]&0x1 != 0
+ l.Control = uint16(data[2])
+
+ if l.Control&0x1 == 0 || l.Control&0x3 == 0x1 {
+ if len(data) < 4 {
+ return errors.New("LLC header too small")
+ }
+ 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:]
+ }
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (l *LLC) CanDecode() gopacket.LayerClass {
+ return LayerTypeLLC
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (l *LLC) NextLayerType() gopacket.LayerType {
+ switch {
+ case l.DSAP == 0xAA && l.SSAP == 0xAA:
+ return LayerTypeSNAP
+ case l.DSAP == 0x42 && l.SSAP == 0x42:
+ return LayerTypeSTP
+ }
+ return gopacket.LayerTypeZero // Not implemented
+}
+
// SNAP is used inside LLC. See
// http://standards.ieee.org/getieee802/download/802-2001.pdf.
// From http://en.wikipedia.org/wiki/Subnetwork_Access_Protocol:
@@ -40,34 +83,43 @@ type SNAP struct {
// 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]),
+// DecodeFromBytes decodes the given bytes into this layer.
+func (s *SNAP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 5 {
+ return errors.New("SNAP header too small")
}
- 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:]
+ s.OrganizationalCode = data[:3]
+ s.Type = EthernetType(binary.BigEndian.Uint16(data[3:5]))
+ s.BaseLayer = BaseLayer{data[:5], data[5:]}
+ return nil
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (s *SNAP) CanDecode() gopacket.LayerClass {
+ return LayerTypeLLC
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (s *SNAP) NextLayerType() gopacket.LayerType {
+ // See BUG(gconnel) in decodeSNAP
+ return s.Type.LayerType()
+}
+
+func decodeLLC(data []byte, p gopacket.PacketBuilder) error {
+ l := &LLC{}
+ err := l.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
}
p.AddLayer(l)
- if l.DSAP == 0xAA && l.SSAP == 0xAA {
- return p.NextDecoder(LayerTypeSNAP)
- }
- return p.NextDecoder(gopacket.DecodeUnknown)
+ return p.NextDecoder(l.NextLayerType())
}
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:]},
+ s := &SNAP{}
+ err := s.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
}
p.AddLayer(s)
// BUG(gconnell): When decoding SNAP, we treat the SNAP type as an Ethernet
@@ -75,3 +127,67 @@ func decodeSNAP(data []byte, p gopacket.PacketBuilder) error {
// 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 igFlag, crFlag 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 {
+ igFlag = 0
+ if l.IG {
+ igFlag = 0x1
+ }
+
+ crFlag = 0
+ if l.CR {
+ crFlag = 0x1
+ }
+
+ buf[0] = l.DSAP + igFlag
+ buf[1] = l.SSAP + crFlag
+
+ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lldp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lldp.go
index cc64b44ee47..e12826032ff 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lldp.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/lldp.go
@@ -8,7 +8,9 @@ package layers
import (
"encoding/binary"
+ "errors"
"fmt"
+
"github.com/google/gopacket"
)
@@ -35,6 +37,10 @@ type LinkLayerDiscoveryValue struct {
Value []byte
}
+func (c *LinkLayerDiscoveryValue) len() int {
+ return 0
+}
+
// LLDPChassisIDSubType specifies the value type for a single LLDPChassisID.ID
type LLDPChassisIDSubType byte
@@ -55,6 +61,20 @@ type LLDPChassisID struct {
ID []byte
}
+func (c *LLDPChassisID) serialize() []byte {
+
+ var buf = make([]byte, c.serializedLen())
+ idLen := uint16(LLDPTLVChassisID)<<9 | uint16(len(c.ID)+1) //id should take 7 bits, length should take 9 bits, +1 for subtype
+ binary.BigEndian.PutUint16(buf[0:2], idLen)
+ buf[2] = byte(c.Subtype)
+ copy(buf[3:], c.ID)
+ return buf
+}
+
+func (c *LLDPChassisID) serializedLen() int {
+ return len(c.ID) + 3 // +2 for id and length, +1 for subtype
+}
+
// LLDPPortIDSubType specifies the value type for a single LLDPPortID.ID
type LLDPPortIDSubType byte
@@ -75,6 +95,20 @@ type LLDPPortID struct {
ID []byte
}
+func (c *LLDPPortID) serialize() []byte {
+
+ var buf = make([]byte, c.serializedLen())
+ idLen := uint16(LLDPTLVPortID)<<9 | uint16(len(c.ID)+1) //id should take 7 bits, length should take 9 bits, +1 for subtype
+ binary.BigEndian.PutUint16(buf[0:2], idLen)
+ buf[2] = byte(c.Subtype)
+ copy(buf[3:], c.ID)
+ return buf
+}
+
+func (c *LLDPPortID) serializedLen() int {
+ return len(c.ID) + 3 // +2 for id and length, +1 for subtype
+}
+
// 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
@@ -731,13 +765,36 @@ func (c *LinkLayerDiscovery) LayerType() gopacket.LayerType {
return LayerTypeLinkLayerDiscovery
}
+// SerializeTo serializes LLDP packet to bytes and writes on SerializeBuffer.
+func (c *LinkLayerDiscovery) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ chassIDLen := c.ChassisID.serializedLen()
+ portIDLen := c.PortID.serializedLen()
+ vb, err := b.AppendBytes(chassIDLen + portIDLen + 4) // +4 for TTL
+ if err != nil {
+ return err
+ }
+ copy(vb[:chassIDLen], c.ChassisID.serialize())
+ copy(vb[chassIDLen:], c.PortID.serialize())
+ ttlIDLen := uint16(LLDPTLVTTL)<<9 | uint16(2)
+ binary.BigEndian.PutUint16(vb[chassIDLen+portIDLen:], ttlIDLen)
+ binary.BigEndian.PutUint16(vb[chassIDLen+portIDLen+2:], c.TTL)
+
+ vb, err = b.AppendBytes(2) // End Tlv, 2 bytes
+ if err != nil {
+ return err
+ }
+ binary.BigEndian.PutUint16(vb[len(vb)-2:], uint16(0)) //End tlv, 2 bytes, all zero
+ return nil
+
+}
+
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 + vData[1])}
+ val := LinkLayerDiscoveryValue{Type: t, Length: uint16(nbit)<<8 + uint16(vData[1])}
if val.Length > 0 {
val.Value = vData[2 : val.Length+2]
}
@@ -746,12 +803,12 @@ func decodeLinkLayerDiscovery(data []byte, p gopacket.PacketBuilder) error {
break
}
if len(vData) < int(2+val.Length) {
- return fmt.Errorf("Malformed LinkLayerDiscovery Header")
+ return errors.New("Malformed LinkLayerDiscovery Header")
}
vData = vData[2+val.Length:]
}
if len(vals) < 4 {
- return fmt.Errorf("Missing mandatory LinkLayerDiscovery TLV")
+ return errors.New("Missing mandatory LinkLayerDiscovery TLV")
}
c := &LinkLayerDiscovery{}
gotEnd := false
@@ -761,19 +818,19 @@ func decodeLinkLayerDiscovery(data []byte, p gopacket.PacketBuilder) error {
gotEnd = true
case LLDPTLVChassisID:
if len(v.Value) < 2 {
- return fmt.Errorf("Malformed LinkLayerDiscovery ChassisID TLV")
+ 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 fmt.Errorf("Malformed LinkLayerDiscovery PortID TLV")
+ 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 fmt.Errorf("Malformed LinkLayerDiscovery TTL TLV")
+ return errors.New("Malformed LinkLayerDiscovery TTL TLV")
}
c.TTL = binary.BigEndian.Uint16(v.Value[0:2])
default:
@@ -781,7 +838,7 @@ func decodeLinkLayerDiscovery(data []byte, p gopacket.PacketBuilder) error {
}
}
if c.ChassisID.Subtype == 0 || c.PortID.Subtype == 0 || !gotEnd {
- return fmt.Errorf("Missing mandatory LinkLayerDiscovery TLV")
+ return errors.New("Missing mandatory LinkLayerDiscovery TLV")
}
c.Contents = data
p.AddLayer(c)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/loopback.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/loopback.go
index 284f34bbc8c..839f760739b 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/loopback.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/loopback.go
@@ -8,7 +8,9 @@ package layers
import (
"encoding/binary"
+ "errors"
"fmt"
+
"github.com/google/gopacket"
)
@@ -23,7 +25,12 @@ type Loopback struct {
// LayerType returns LayerTypeLoopback.
func (l *Loopback) LayerType() gopacket.LayerType { return LayerTypeLoopback }
-func decodeLoopback(data []byte, p gopacket.PacketBuilder) error {
+// 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.
@@ -36,10 +43,38 @@ func decodeLoopback(data []byte, p gopacket.PacketBuilder) error {
if prot > 0xFF {
return fmt.Errorf("Invalid loopback protocol %q", data[:4])
}
- l := &Loopback{
- BaseLayer: BaseLayer{data[:4], data[4:]},
- Family: ProtocolFamily(prot),
+
+ 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)
+ p.AddLayer(&l)
return p.NextDecoder(l.Family)
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv1.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv1.go
new file mode 100644
index 00000000000..e1bb1dc00fe
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv1.go
@@ -0,0 +1,182 @@
+// Copyright 2018 GoPacket Authors. 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"
+ "math"
+ "net"
+ "time"
+
+ "github.com/google/gopacket"
+)
+
+// MLDv1Message represents the common structure of all MLDv1 messages
+type MLDv1Message struct {
+ BaseLayer
+ // 3.4. Maximum Response Delay
+ MaximumResponseDelay time.Duration
+ // 3.6. Multicast Address
+ // Zero in general query
+ // Specific IPv6 multicast address otherwise
+ MulticastAddress net.IP
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (m *MLDv1Message) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 20 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less than 20 bytes for Multicast Listener Query Message V1")
+ }
+
+ m.MaximumResponseDelay = time.Duration(binary.BigEndian.Uint16(data[0:2])) * time.Millisecond
+ // data[2:4] is reserved and not used in mldv1
+ m.MulticastAddress = data[4:20]
+
+ return nil
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (*MLDv1Message) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+// 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 *MLDv1Message) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ buf, err := b.PrependBytes(20)
+ if err != nil {
+ return err
+ }
+
+ if m.MaximumResponseDelay < 0 {
+ return errors.New("maximum response delay must not be negative")
+ }
+ dms := m.MaximumResponseDelay / time.Millisecond
+ if dms > math.MaxUint16 {
+ return fmt.Errorf("maximum response delay %dms is more than the allowed 65535ms", dms)
+ }
+ binary.BigEndian.PutUint16(buf[0:2], uint16(dms))
+
+ copy(buf[2:4], []byte{0x0, 0x0})
+
+ ma16 := m.MulticastAddress.To16()
+ if ma16 == nil {
+ return fmt.Errorf("invalid multicast address '%s'", m.MulticastAddress)
+ }
+ copy(buf[4:20], ma16)
+
+ return nil
+}
+
+// Sums this layer up nicely formatted
+func (m *MLDv1Message) String() string {
+ return fmt.Sprintf(
+ "Maximum Response Delay: %dms, Multicast Address: %s",
+ m.MaximumResponseDelay/time.Millisecond,
+ m.MulticastAddress)
+}
+
+// MLDv1MulticastListenerQueryMessage are sent by the router to determine
+// whether there are multicast listeners on the link.
+// https://tools.ietf.org/html/rfc2710 Page 5
+type MLDv1MulticastListenerQueryMessage struct {
+ MLDv1Message
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (m *MLDv1MulticastListenerQueryMessage) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ err := m.MLDv1Message.DecodeFromBytes(data, df)
+ if err != nil {
+ return err
+ }
+
+ if len(data) > 20 {
+ m.Payload = data[20:]
+ }
+
+ return nil
+}
+
+// LayerType returns LayerTypeMLDv1MulticastListenerQuery.
+func (*MLDv1MulticastListenerQueryMessage) LayerType() gopacket.LayerType {
+ return LayerTypeMLDv1MulticastListenerQuery
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (*MLDv1MulticastListenerQueryMessage) CanDecode() gopacket.LayerClass {
+ return LayerTypeMLDv1MulticastListenerQuery
+}
+
+// IsGeneralQuery is true when this is a general query.
+// In a Query message, the Multicast Address field is set to zero when
+// sending a General Query.
+// https://tools.ietf.org/html/rfc2710#section-3.6
+func (m *MLDv1MulticastListenerQueryMessage) IsGeneralQuery() bool {
+ return net.IPv6zero.Equal(m.MulticastAddress)
+}
+
+// IsSpecificQuery is true when this is not a general query.
+// In a Query message, the Multicast Address field is set to a specific
+// IPv6 multicast address when sending a Multicast-Address-Specific Query.
+// https://tools.ietf.org/html/rfc2710#section-3.6
+func (m *MLDv1MulticastListenerQueryMessage) IsSpecificQuery() bool {
+ return !m.IsGeneralQuery()
+}
+
+// MLDv1MulticastListenerReportMessage is sent by a client listening on
+// a specific multicast address to indicate that it is (still) listening
+// on the specific multicast address.
+// https://tools.ietf.org/html/rfc2710 Page 6
+type MLDv1MulticastListenerReportMessage struct {
+ MLDv1Message
+}
+
+// LayerType returns LayerTypeMLDv1MulticastListenerReport.
+func (*MLDv1MulticastListenerReportMessage) LayerType() gopacket.LayerType {
+ return LayerTypeMLDv1MulticastListenerReport
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (*MLDv1MulticastListenerReportMessage) CanDecode() gopacket.LayerClass {
+ return LayerTypeMLDv1MulticastListenerReport
+}
+
+// MLDv1MulticastListenerDoneMessage should be sent by a client when it ceases
+// to listen to a multicast address on an interface.
+// https://tools.ietf.org/html/rfc2710 Page 7
+type MLDv1MulticastListenerDoneMessage struct {
+ MLDv1Message
+}
+
+// LayerType returns LayerTypeMLDv1MulticastListenerDone.
+func (*MLDv1MulticastListenerDoneMessage) LayerType() gopacket.LayerType {
+ return LayerTypeMLDv1MulticastListenerDone
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (*MLDv1MulticastListenerDoneMessage) CanDecode() gopacket.LayerClass {
+ return LayerTypeMLDv1MulticastListenerDone
+}
+
+func decodeMLDv1MulticastListenerReport(data []byte, p gopacket.PacketBuilder) error {
+ m := &MLDv1MulticastListenerReportMessage{}
+ return decodingLayerDecoder(m, data, p)
+}
+
+func decodeMLDv1MulticastListenerQuery(data []byte, p gopacket.PacketBuilder) error {
+ m := &MLDv1MulticastListenerQueryMessage{}
+ return decodingLayerDecoder(m, data, p)
+}
+
+func decodeMLDv1MulticastListenerDone(data []byte, p gopacket.PacketBuilder) error {
+ m := &MLDv1MulticastListenerDoneMessage{}
+ return decodingLayerDecoder(m, data, p)
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv1_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv1_test.go
new file mode 100644
index 00000000000..438e3aa7739
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv1_test.go
@@ -0,0 +1,140 @@
+// Copyright 2018 GoPacket Authors. 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"
+)
+
+// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap
+// BSD licensed content
+//
+// Frame 3: 90 bytes on wire (720 bits), 90 bytes captured (720 bits)
+// Ethernet II, Src: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8), Dst: IPv6mcast_01 (33:33:00:00:00:01)
+// Internet Protocol Version 6, Src: fe80::b2a8:6eff:fe0c:d4e8, Dst: ff02::1
+// 0110 .... = Version: 6
+// .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
+// .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
+// Payload Length: 36
+// Next Header: IPv6 Hop-by-Hop Option (0)
+// Hop Limit: 1
+// Source: fe80::b2a8:6eff:fe0c:d4e8
+// Destination: ff02::1
+// [Source SA MAC: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8)]
+// IPv6 Hop-by-Hop Option
+// Internet Control Message Protocol v6
+// Type: Multicast Listener Query (130)
+// Code: 0
+// Checksum: 0x623a [correct]
+// [Checksum Status: Good]
+// Maximum Response Code: 10000
+// Reserved: 0000
+// Multicast Address: ::
+var testPacketMulticastListenerQueryMessageV1 = []byte{
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xb0, 0xa8, 0x6e, 0x0c, 0xd4, 0xe8, 0x86, 0xdd, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xa8,
+ 0x6e, 0xff, 0xfe, 0x0c, 0xd4, 0xe8, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x82, 0x00,
+ 0x62, 0x3a, 0x27, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketMulticastListenerQueryMessageV1(t *testing.T) {
+ p := gopacket.NewPacket(testPacketMulticastListenerQueryMessageV1, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeICMPv6, LayerTypeMLDv1MulticastListenerQuery}, t)
+ // See https://github.com/google/gopacket/issues/517
+ // checkSerialization(p, t)
+}
+
+// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap
+// BSD licensed content
+//
+// Ethernet II, Src: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8), Dst: IPv6mcast_01 (33:33:00:00:00:01)
+// Internet Protocol Version 6, Src: fe80::b2a8:6eff:fe0c:d4e8, Dst: ff02::1
+// 0110 .... = Version: 6
+// .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
+// .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
+// Payload Length: 36
+// Next Header: IPv6 Hop-by-Hop Option (0)
+// Hop Limit: 1
+// Source: fe80::b2a8:6eff:fe0c:d4e8
+// Destination: ff02::1
+// [Source SA MAC: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8)]
+// IPv6 Hop-by-Hop Option
+// Internet Control Message Protocol v6
+// Type: Multicast Listener Report (131)
+// Code: 0
+// Checksum: 0x623a [incorrect]
+// [Checksum Status: Invalid]
+// Maximum Response Code: 10000
+// Reserved: 0000
+// Multicast Address: ff02::db8:1122:3344
+var testPacketMulticastListenerReportMessageV1 = []byte{
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xb0, 0xa8, 0x6e, 0x0c, 0xd4, 0xe8, 0x86, 0xdd, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xa8,
+ 0x6e, 0xff, 0xfe, 0x0c, 0xd4, 0xe8, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x83, 0x00,
+ 0x62, 0x3a, 0x27, 0x10, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0d, 0xb8, 0x11, 0x22, 0x33, 0x44,
+}
+
+func TestPacketMulticastListenerReportMessageV1(t *testing.T) {
+ p := gopacket.NewPacket(testPacketMulticastListenerReportMessageV1, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeICMPv6, LayerTypeMLDv1MulticastListenerReport}, t)
+ // See https://github.com/google/gopacket/issues/517
+ // checkSerialization(p, t)
+}
+
+// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap
+// BSD licensed content
+//
+// Ethernet II, Src: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8), Dst: IPv6mcast_01 (33:33:00:00:00:01)
+// Internet Protocol Version 6, Src: fe80::b2a8:6eff:fe0c:d4e8, Dst: ff02::1
+// 0110 .... = Version: 6
+// .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
+// .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
+// Payload Length: 36
+// Next Header: IPv6 Hop-by-Hop Option (0)
+// Hop Limit: 1
+// Source: fe80::b2a8:6eff:fe0c:d4e8
+// Destination: ff02::1
+// [Source SA MAC: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8)]
+// IPv6 Hop-by-Hop Option
+// Internet Control Message Protocol v6
+// Type: Multicast Listener Done (132)
+// Code: 0
+// Checksum: 0x623a [incorrect]
+// [Checksum Status: Invalid]
+// Maximum Response Code: 10000
+// Reserved: 0000
+// Multicast Address: ff02::db8:1122:3344
+var testPacketMulticastListenerDoneMessageV1 = []byte{
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xb0, 0xa8, 0x6e, 0x0c, 0xd4, 0xe8, 0x86, 0xdd, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xa8,
+ 0x6e, 0xff, 0xfe, 0x0c, 0xd4, 0xe8, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x84, 0x00,
+ 0x62, 0x3a, 0x27, 0x10, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0d, 0xb8, 0x11, 0x22, 0x33, 0x44,
+}
+
+func TestPacketMulticastListenerDoneMessageV1(t *testing.T) {
+ p := gopacket.NewPacket(testPacketMulticastListenerDoneMessageV1, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeICMPv6, LayerTypeMLDv1MulticastListenerDone}, t)
+ // See https://github.com/google/gopacket/issues/517
+ // checkSerialization(p, t)
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv2.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv2.go
new file mode 100644
index 00000000000..248cf749efb
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv2.go
@@ -0,0 +1,619 @@
+// Copyright 2018 GoPacket Authors. 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"
+ "math"
+ "net"
+ "time"
+
+ "github.com/google/gopacket"
+)
+
+const (
+ // S Flag bit is 1
+ mldv2STrue uint8 = 0x8
+
+ // S Flag value mask
+ // mldv2STrue & mldv2SMask == mldv2STrue // true
+ // 0x1 & mldv2SMask == mldv2STrue // true
+ // 0x0 & mldv2SMask == mldv2STrue // false
+ mldv2SMask uint8 = 0x8
+
+ // QRV value mask
+ mldv2QRVMask uint8 = 0x7
+)
+
+// MLDv2MulticastListenerQueryMessage are sent by multicast routers to query the
+// multicast listening state of neighboring interfaces.
+// https://tools.ietf.org/html/rfc3810#section-5.1
+//
+// Some information, like Maximum Response Code and Multicast Address are in the
+// previous layer LayerTypeMLDv1MulticastListenerQuery
+type MLDv2MulticastListenerQueryMessage struct {
+ BaseLayer
+ // 5.1.3. Maximum Response Delay COde
+ MaximumResponseCode uint16
+ // 5.1.5. Multicast Address
+ // Zero in general query
+ // Specific IPv6 multicast address otherwise
+ MulticastAddress net.IP
+ // 5.1.7. S Flag (Suppress Router-Side Processing)
+ SuppressRoutersideProcessing bool
+ // 5.1.8. QRV (Querier's Robustness Variable)
+ QueriersRobustnessVariable uint8
+ // 5.1.9. QQIC (Querier's Query Interval Code)
+ QueriersQueryIntervalCode uint8
+ // 5.1.10. Number of Sources (N)
+ NumberOfSources uint16
+ // 5.1.11 Source Address [i]
+ SourceAddresses []net.IP
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (m *MLDv2MulticastListenerQueryMessage) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 24 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less than 24 bytes for Multicast Listener Query Message V2")
+ }
+
+ m.MaximumResponseCode = binary.BigEndian.Uint16(data[0:2])
+ // ignore data[2:4] as per https://tools.ietf.org/html/rfc3810#section-5.1.4
+ m.MulticastAddress = data[4:20]
+ m.SuppressRoutersideProcessing = (data[20] & mldv2SMask) == mldv2STrue
+ m.QueriersRobustnessVariable = data[20] & mldv2QRVMask
+ m.QueriersQueryIntervalCode = data[21]
+
+ m.NumberOfSources = binary.BigEndian.Uint16(data[22:24])
+
+ var end int
+ for i := uint16(0); i < m.NumberOfSources; i++ {
+ begin := 24 + (int(i) * 16)
+ end = begin + 16
+
+ if end > len(data) {
+ df.SetTruncated()
+ return fmt.Errorf("ICMP layer less than %d bytes for Multicast Listener Query Message V2", end)
+ }
+
+ m.SourceAddresses = append(m.SourceAddresses, data[begin:end])
+ }
+
+ return nil
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (*MLDv2MulticastListenerQueryMessage) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+// 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 *MLDv2MulticastListenerQueryMessage) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if err := m.serializeSourceAddressesTo(b, opts); err != nil {
+ return err
+ }
+
+ buf, err := b.PrependBytes(24)
+ if err != nil {
+ return err
+ }
+
+ binary.BigEndian.PutUint16(buf[0:2], m.MaximumResponseCode)
+ copy(buf[2:4], []byte{0x00, 0x00}) // set reserved bytes to zero
+
+ ma16 := m.MulticastAddress.To16()
+ if ma16 == nil {
+ return fmt.Errorf("invalid MulticastAddress '%s'", m.MulticastAddress)
+ }
+ copy(buf[4:20], ma16)
+
+ byte20 := m.QueriersRobustnessVariable & mldv2QRVMask
+ if m.SuppressRoutersideProcessing {
+ byte20 |= mldv2STrue
+ } else {
+ byte20 &= ^mldv2STrue // the complement of mldv2STrue
+ }
+ byte20 &= 0x0F // set reserved bits to zero
+ buf[20] = byte20
+
+ binary.BigEndian.PutUint16(buf[22:24], m.NumberOfSources)
+ buf[21] = m.QueriersQueryIntervalCode
+
+ return nil
+}
+
+// writes each source address to the buffer preserving the order
+func (m *MLDv2MulticastListenerQueryMessage) serializeSourceAddressesTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ numberOfSourceAddresses := len(m.SourceAddresses)
+ if numberOfSourceAddresses > math.MaxUint16 {
+ return fmt.Errorf(
+ "there are more than %d source addresses, but 65535 is the maximum number of supported addresses",
+ numberOfSourceAddresses)
+ }
+
+ if opts.FixLengths {
+ m.NumberOfSources = uint16(numberOfSourceAddresses)
+ }
+
+ lastSAIdx := numberOfSourceAddresses - 1
+ for k := range m.SourceAddresses {
+ i := lastSAIdx - k // reverse order
+
+ buf, err := b.PrependBytes(16)
+ if err != nil {
+ return err
+ }
+
+ sa16 := m.SourceAddresses[i].To16()
+ if sa16 == nil {
+ return fmt.Errorf("invalid source address [%d] '%s'", i, m.SourceAddresses[i])
+ }
+ copy(buf[0:16], sa16)
+ }
+
+ return nil
+}
+
+// String sums this layer up nicely formatted
+func (m *MLDv2MulticastListenerQueryMessage) String() string {
+ return fmt.Sprintf(
+ "Maximum Response Code: %#x (%dms), Multicast Address: %s, Suppress Routerside Processing: %t, QRV: %#x, QQIC: %#x (%ds), Number of Source Address: %d (actual: %d), Source Addresses: %s",
+ m.MaximumResponseCode,
+ m.MaximumResponseDelay(),
+ m.MulticastAddress,
+ m.SuppressRoutersideProcessing,
+ m.QueriersRobustnessVariable,
+ m.QueriersQueryIntervalCode,
+ m.QQI()/time.Second,
+ m.NumberOfSources,
+ len(m.SourceAddresses),
+ m.SourceAddresses)
+}
+
+// LayerType returns LayerTypeMLDv2MulticastListenerQuery.
+func (*MLDv2MulticastListenerQueryMessage) LayerType() gopacket.LayerType {
+ return LayerTypeMLDv2MulticastListenerQuery
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (*MLDv2MulticastListenerQueryMessage) CanDecode() gopacket.LayerClass {
+ return LayerTypeMLDv2MulticastListenerQuery
+}
+
+// QQI calculates the Querier's Query Interval based on the QQIC
+// according to https://tools.ietf.org/html/rfc3810#section-5.1.9
+func (m *MLDv2MulticastListenerQueryMessage) QQI() time.Duration {
+ data := m.QueriersQueryIntervalCode
+ if data < 128 {
+ return time.Second * time.Duration(data)
+ }
+
+ exp := uint16(data) & 0x70 >> 4
+ mant := uint16(data) & 0x0F
+ return time.Second * time.Duration(mant|0x1000<<(exp+3))
+}
+
+// SetQQI calculates and updates the Querier's Query Interval Code (QQIC)
+// according to https://tools.ietf.org/html/rfc3810#section-5.1.9
+func (m *MLDv2MulticastListenerQueryMessage) SetQQI(d time.Duration) error {
+ if d < 0 {
+ m.QueriersQueryIntervalCode = 0
+ return errors.New("QQI duration is negative")
+ }
+
+ if d == 0 {
+ m.QueriersQueryIntervalCode = 0
+ return nil
+ }
+
+ dms := d / time.Second
+ if dms < 128 {
+ m.QueriersQueryIntervalCode = uint8(dms)
+ }
+
+ if dms > 31744 { // mant=0xF, exp=0x7
+ m.QueriersQueryIntervalCode = 0xFF
+ return fmt.Errorf("QQI duration %ds is, maximum allowed is 31744s", dms)
+ }
+
+ value := uint16(dms) // ok, because 31744 < math.MaxUint16
+ exp := uint8(7)
+ for mask := uint16(0x4000); exp > 0; exp-- {
+ if mask&value != 0 {
+ break
+ }
+
+ mask >>= 1
+ }
+
+ mant := uint8(0x000F & (value >> (exp + 3)))
+ sig := uint8(0x10)
+ m.QueriersQueryIntervalCode = sig | exp<<4 | mant
+
+ return nil
+}
+
+// MaximumResponseDelay returns the Maximum Response Delay based on the
+// Maximum Response Code according to
+// https://tools.ietf.org/html/rfc3810#section-5.1.3
+func (m *MLDv2MulticastListenerQueryMessage) MaximumResponseDelay() time.Duration {
+ if m.MaximumResponseCode < 0x8000 {
+ return time.Duration(m.MaximumResponseCode)
+ }
+
+ exp := m.MaximumResponseCode & 0x7000 >> 12
+ mant := m.MaximumResponseCode & 0x0FFF
+
+ return time.Millisecond * time.Duration(mant|0x1000<<(exp+3))
+}
+
+// SetMLDv2MaximumResponseDelay updates the Maximum Response Code according to
+// https://tools.ietf.org/html/rfc3810#section-5.1.3
+func (m *MLDv2MulticastListenerQueryMessage) SetMLDv2MaximumResponseDelay(d time.Duration) error {
+ if d == 0 {
+ m.MaximumResponseCode = 0
+ return nil
+ }
+
+ if d < 0 {
+ return errors.New("maximum response delay must not be negative")
+ }
+
+ dms := d / time.Millisecond
+
+ if dms < 32768 {
+ m.MaximumResponseCode = uint16(dms)
+ }
+
+ if dms > 4193280 { // mant=0xFFF, exp=0x7
+ return fmt.Errorf("maximum response delay %dms is bigger the than maximum of 4193280ms", dms)
+ }
+
+ value := uint32(dms) // ok, because 4193280 < math.MaxUint32
+ exp := uint8(7)
+ for mask := uint32(0x40000000); exp > 0; exp-- {
+ if mask&value != 0 {
+ break
+ }
+
+ mask >>= 1
+ }
+
+ mant := uint16(0x00000FFF & (value >> (exp + 3)))
+ sig := uint16(0x1000)
+ m.MaximumResponseCode = sig | uint16(exp)<<12 | mant
+ return nil
+}
+
+// MLDv2MulticastListenerReportMessage is sent by an IP node to report the
+// current multicast listening state, or changes therein.
+// https://tools.ietf.org/html/rfc3810#section-5.2
+type MLDv2MulticastListenerReportMessage struct {
+ BaseLayer
+ // 5.2.3. Nr of Mcast Address Records
+ NumberOfMulticastAddressRecords uint16
+ // 5.2.4. Multicast Address Record [i]
+ MulticastAddressRecords []MLDv2MulticastAddressRecord
+}
+
+// DecodeFromBytes decodes the given bytes into this layer.
+func (m *MLDv2MulticastListenerReportMessage) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 4 {
+ df.SetTruncated()
+ return errors.New("ICMP layer less than 4 bytes for Multicast Listener Report Message V2")
+ }
+
+ // ignore data[0:2] as per RFC
+ // https://tools.ietf.org/html/rfc3810#section-5.2.1
+ m.NumberOfMulticastAddressRecords = binary.BigEndian.Uint16(data[2:4])
+
+ begin := 4
+ for i := uint16(0); i < m.NumberOfMulticastAddressRecords; i++ {
+ mar := MLDv2MulticastAddressRecord{}
+ read, err := mar.decode(data[begin:], df)
+ if err != nil {
+ return err
+ }
+
+ m.MulticastAddressRecords = append(m.MulticastAddressRecords, mar)
+
+ begin += read
+ }
+
+ 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 (m *MLDv2MulticastListenerReportMessage) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ lastItemIdx := len(m.MulticastAddressRecords) - 1
+ for k := range m.MulticastAddressRecords {
+ i := lastItemIdx - k // reverse order
+
+ err := m.MulticastAddressRecords[i].serializeTo(b, opts)
+ if err != nil {
+ return err
+ }
+ }
+
+ if opts.FixLengths {
+ numberOfMAR := len(m.MulticastAddressRecords)
+ if numberOfMAR > math.MaxUint16 {
+ return fmt.Errorf(
+ "%d multicast address records added, but the maximum is 65535",
+ numberOfMAR)
+ }
+
+ m.NumberOfMulticastAddressRecords = uint16(numberOfMAR)
+ }
+
+ buf, err := b.PrependBytes(4)
+ if err != nil {
+ return err
+ }
+
+ copy(buf[0:2], []byte{0x0, 0x0})
+ binary.BigEndian.PutUint16(buf[2:4], m.NumberOfMulticastAddressRecords)
+ return nil
+}
+
+// Sums this layer up nicely formatted
+func (m *MLDv2MulticastListenerReportMessage) String() string {
+ return fmt.Sprintf(
+ "Number of Mcast Addr Records: %d (actual %d), Multicast Address Records: %+v",
+ m.NumberOfMulticastAddressRecords,
+ len(m.MulticastAddressRecords),
+ m.MulticastAddressRecords)
+}
+
+// LayerType returns LayerTypeMLDv2MulticastListenerQuery.
+func (*MLDv2MulticastListenerReportMessage) LayerType() gopacket.LayerType {
+ return LayerTypeMLDv2MulticastListenerReport
+}
+
+// CanDecode returns the set of layer types that this DecodingLayer can decode.
+func (*MLDv2MulticastListenerReportMessage) CanDecode() gopacket.LayerClass {
+ return LayerTypeMLDv2MulticastListenerReport
+}
+
+// NextLayerType returns the layer type contained by this DecodingLayer.
+func (*MLDv2MulticastListenerReportMessage) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+// MLDv2MulticastAddressRecordType holds the type of a
+// Multicast Address Record, according to
+// https://tools.ietf.org/html/rfc3810#section-5.2.5 and
+// https://tools.ietf.org/html/rfc3810#section-5.2.12
+type MLDv2MulticastAddressRecordType uint8
+
+const (
+ // MLDv2MulticastAddressRecordTypeModeIsIncluded stands for
+ // MODE_IS_INCLUDE - indicates that the interface has a filter
+ // mode of INCLUDE for the specified multicast address.
+ MLDv2MulticastAddressRecordTypeModeIsIncluded MLDv2MulticastAddressRecordType = 1
+ // MLDv2MulticastAddressRecordTypeModeIsExcluded stands for
+ // MODE_IS_EXCLUDE - indicates that the interface has a filter
+ // mode of EXCLUDE for the specified multicast address.
+ MLDv2MulticastAddressRecordTypeModeIsExcluded MLDv2MulticastAddressRecordType = 2
+ // MLDv2MulticastAddressRecordTypeChangeToIncludeMode stands for
+ // CHANGE_TO_INCLUDE_MODE - indicates that the interface has
+ // changed to INCLUDE filter mode for the specified multicast
+ // address.
+ MLDv2MulticastAddressRecordTypeChangeToIncludeMode MLDv2MulticastAddressRecordType = 3
+ // MLDv2MulticastAddressRecordTypeChangeToExcludeMode stands for
+ // CHANGE_TO_EXCLUDE_MODE - indicates that the interface has
+ // changed to EXCLUDE filter mode for the specified multicast
+ // address
+ MLDv2MulticastAddressRecordTypeChangeToExcludeMode MLDv2MulticastAddressRecordType = 4
+ // MLDv2MulticastAddressRecordTypeAllowNewSources stands for
+ // ALLOW_NEW_SOURCES - indicates that the Source Address [i]
+ // fields in this Multicast Address Record contain a list of
+ // the additional sources that the node wishes to listen to,
+ // for packets sent to the specified multicast address.
+ MLDv2MulticastAddressRecordTypeAllowNewSources MLDv2MulticastAddressRecordType = 5
+ // MLDv2MulticastAddressRecordTypeBlockOldSources stands for
+ // BLOCK_OLD_SOURCES - indicates that the Source Address [i]
+ // fields in this Multicast Address Record contain a list of
+ // the sources that the node no longer wishes to listen to,
+ // for packets sent to the specified multicast address.
+ MLDv2MulticastAddressRecordTypeBlockOldSources MLDv2MulticastAddressRecordType = 6
+)
+
+// Human readable record types
+// Naming follows https://tools.ietf.org/html/rfc3810#section-5.2.12
+func (m MLDv2MulticastAddressRecordType) String() string {
+ switch m {
+ case MLDv2MulticastAddressRecordTypeModeIsIncluded:
+ return "MODE_IS_INCLUDE"
+ case MLDv2MulticastAddressRecordTypeModeIsExcluded:
+ return "MODE_IS_EXCLUDE"
+ case MLDv2MulticastAddressRecordTypeChangeToIncludeMode:
+ return "CHANGE_TO_INCLUDE_MODE"
+ case MLDv2MulticastAddressRecordTypeChangeToExcludeMode:
+ return "CHANGE_TO_EXCLUDE_MODE"
+ case MLDv2MulticastAddressRecordTypeAllowNewSources:
+ return "ALLOW_NEW_SOURCES"
+ case MLDv2MulticastAddressRecordTypeBlockOldSources:
+ return "BLOCK_OLD_SOURCES"
+ default:
+ return fmt.Sprintf("UNKNOWN(%d)", m)
+ }
+}
+
+// MLDv2MulticastAddressRecord contains information on the sender listening to a
+// single multicast address on the interface the report is sent.
+// https://tools.ietf.org/html/rfc3810#section-5.2.4
+type MLDv2MulticastAddressRecord struct {
+ // 5.2.5. Record Type
+ RecordType MLDv2MulticastAddressRecordType
+ // 5.2.6. Auxiliary Data Length (number of 32-bit words)
+ AuxDataLen uint8
+ // 5.2.7. Number Of Sources (N)
+ N uint16
+ // 5.2.8. Multicast Address
+ MulticastAddress net.IP
+ // 5.2.9 Source Address [i]
+ SourceAddresses []net.IP
+ // 5.2.10 Auxiliary Data
+ AuxiliaryData []byte
+}
+
+// decodes a multicast address record from bytes
+func (m *MLDv2MulticastAddressRecord) decode(data []byte, df gopacket.DecodeFeedback) (int, error) {
+ if len(data) < 4 {
+ df.SetTruncated()
+ return 0, errors.New(
+ "Multicast Listener Report Message V2 layer less than 4 bytes for Multicast Address Record")
+ }
+
+ m.RecordType = MLDv2MulticastAddressRecordType(data[0])
+ m.AuxDataLen = data[1]
+ m.N = binary.BigEndian.Uint16(data[2:4])
+ m.MulticastAddress = data[4:20]
+
+ for i := uint16(0); i < m.N; i++ {
+ begin := 20 + (int(i) * 16)
+ end := begin + 16
+
+ if len(data) < end {
+ df.SetTruncated()
+ return begin, fmt.Errorf(
+ "Multicast Listener Report Message V2 layer less than %d bytes for Multicast Address Record", end)
+ }
+
+ m.SourceAddresses = append(m.SourceAddresses, data[begin:end])
+ }
+
+ expectedLengthWithouAuxData := 20 + (int(m.N) * 16)
+ expectedTotalLength := (int(m.AuxDataLen) * 4) + expectedLengthWithouAuxData // *4 because AuxDataLen are 32bit words
+ if len(data) < expectedTotalLength {
+ return expectedLengthWithouAuxData, fmt.Errorf(
+ "Multicast Listener Report Message V2 layer less than %d bytes for Multicast Address Record",
+ expectedLengthWithouAuxData)
+ }
+
+ m.AuxiliaryData = data[expectedLengthWithouAuxData:expectedTotalLength]
+
+ return expectedTotalLength, nil
+}
+
+// String sums this layer up nicely formatted
+func (m *MLDv2MulticastAddressRecord) String() string {
+ return fmt.Sprintf(
+ "RecordType: %d (%s), AuxDataLen: %d [32-bit words], N: %d, Multicast Address: %s, SourceAddresses: %s, Auxiliary Data: %#x",
+ m.RecordType,
+ m.RecordType.String(),
+ m.AuxDataLen,
+ m.N,
+ m.MulticastAddress.To16(),
+ m.SourceAddresses,
+ m.AuxiliaryData)
+}
+
+// serializes a multicast address record
+func (m *MLDv2MulticastAddressRecord) serializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if err := m.serializeAuxiliaryDataTo(b, opts); err != nil {
+ return err
+ }
+
+ if err := m.serializeSourceAddressesTo(b, opts); err != nil {
+ return err
+ }
+
+ buf, err := b.PrependBytes(20)
+ if err != nil {
+ return err
+ }
+
+ buf[0] = uint8(m.RecordType)
+ buf[1] = m.AuxDataLen
+ binary.BigEndian.PutUint16(buf[2:4], m.N)
+
+ ma16 := m.MulticastAddress.To16()
+ if ma16 == nil {
+ return fmt.Errorf("invalid multicast address '%s'", m.MulticastAddress)
+ }
+ copy(buf[4:20], ma16)
+
+ return nil
+}
+
+// serializes the auxiliary data of a multicast address record
+func (m *MLDv2MulticastAddressRecord) serializeAuxiliaryDataTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if remainder := len(m.AuxiliaryData) % 4; remainder != 0 {
+ zeroWord := []byte{0x0, 0x0, 0x0, 0x0}
+ m.AuxiliaryData = append(m.AuxiliaryData, zeroWord[:remainder]...)
+ }
+
+ if opts.FixLengths {
+ auxDataLen := len(m.AuxiliaryData) / 4
+
+ if auxDataLen > math.MaxUint8 {
+ return fmt.Errorf("auxilary data is %d 32-bit words, but the maximum is 255 32-bit words", auxDataLen)
+ }
+
+ m.AuxDataLen = uint8(auxDataLen)
+ }
+
+ buf, err := b.PrependBytes(len(m.AuxiliaryData))
+ if err != nil {
+ return err
+ }
+
+ copy(buf, m.AuxiliaryData)
+ return nil
+}
+
+// serializes the source addresses of a multicast address record preserving the order
+func (m *MLDv2MulticastAddressRecord) serializeSourceAddressesTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
+ if opts.FixLengths {
+ numberOfSourceAddresses := len(m.SourceAddresses)
+
+ if numberOfSourceAddresses > math.MaxUint16 {
+ return fmt.Errorf(
+ "%d source addresses added, but the maximum is 65535",
+ numberOfSourceAddresses)
+ }
+
+ m.N = uint16(numberOfSourceAddresses)
+ }
+
+ lastItemIdx := len(m.SourceAddresses) - 1
+ for k := range m.SourceAddresses {
+ i := lastItemIdx - k // reverse order
+
+ buf, err := b.PrependBytes(16)
+ if err != nil {
+ return err
+ }
+
+ sa16 := m.SourceAddresses[i].To16()
+ if sa16 == nil {
+ return fmt.Errorf("invalid source address [%d] '%s'", i, m.SourceAddresses[i])
+ }
+ copy(buf, sa16)
+ }
+
+ return nil
+}
+
+func decodeMLDv2MulticastListenerReport(data []byte, p gopacket.PacketBuilder) error {
+ m := &MLDv2MulticastListenerReportMessage{}
+ return decodingLayerDecoder(m, data, p)
+}
+
+func decodeMLDv2MulticastListenerQuery(data []byte, p gopacket.PacketBuilder) error {
+ m := &MLDv2MulticastListenerQueryMessage{}
+ return decodingLayerDecoder(m, data, p)
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv2_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv2_test.go
new file mode 100644
index 00000000000..8aeec457386
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mldv2_test.go
@@ -0,0 +1,137 @@
+// Copyright 2018 GoPacket Authors. 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"
+)
+
+// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap
+// BSD licensed content
+//
+// Ethernet II, Src: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8), Dst: IPv6mcast_01 (33:33:00:00:00:01)
+// Internet Protocol Version 6, Src: fe80::b2a8:6eff:fe0c:d4e8, Dst: ff02::1
+// 0110 .... = Version: 6
+// .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
+// .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
+// Payload Length: 36
+// Next Header: IPv6 Hop-by-Hop Option (0)
+// Hop Limit: 1
+// Source: fe80::b2a8:6eff:fe0c:d4e8
+// Destination: ff02::1
+// [Source SA MAC: JuniperN_0c:d4:e8 (b0:a8:6e:0c:d4:e8)]
+// IPv6 Hop-by-Hop Option
+// Internet Control Message Protocol v6
+// Type: Multicast Listener Query (130)
+// Code: 0
+// Checksum: 0x623a [correct]
+// [Checksum Status: Good]
+// Maximum Response Code: 10000
+// Reserved: 0000
+// Multicast Address: ::
+// Flags: 0x02
+// .... 0... = Suppress Router-Side Processing: False
+// .... .010 = QRV (Querier's Robustness Variable): 2
+// 0000 .... = Reserved: 0
+// QQIC (Querier's Query Interval Code): 60
+// Number of Sources: 0
+var testPacketMulticastListenerQueryMessageV2 = []byte{
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0xb0, 0xa8, 0x6e, 0x0c, 0xd4, 0xe8, 0x86, 0xdd, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xa8,
+ 0x6e, 0xff, 0xfe, 0x0c, 0xd4, 0xe8, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x82, 0x00,
+ 0x62, 0x3a, 0x27, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00,
+}
+
+func TestPacketMulticastListenerQueryMessageV2(t *testing.T) {
+ p := gopacket.NewPacket(testPacketMulticastListenerQueryMessageV2, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypeEthernet,
+ LayerTypeIPv6,
+ LayerTypeIPv6HopByHop,
+ LayerTypeICMPv6,
+ LayerTypeMLDv2MulticastListenerQuery}, t)
+ // See https://github.com/google/gopacket/issues/517
+ // checkSerialization(p, t)
+}
+
+// Adapted from https://github.com/the-tcpdump-group/tcpdump/blob/master/tests/icmpv6.pcap
+// BSD licensed content
+//
+// Frame 4: 150 bytes on wire (1200 bits), 150 bytes captured (1200 bits)
+// Ethernet II, Src: IntelCor_cc:e5:46 (00:15:17:cc:e5:46), Dst: IPv6mcast_16 (33:33:00:00:00:16)
+// Internet Protocol Version 6, Src: fe80::215:17ff:fecc:e546, Dst: ff02::16
+// 0110 .... = Version: 6
+// .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
+// .... .... .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
+// Payload Length: 96
+// Next Header: IPv6 Hop-by-Hop Option (0)
+// Hop Limit: 1
+// Source: fe80::215:17ff:fecc:e546
+// Destination: ff02::16
+// [Source SA MAC: IntelCor_cc:e5:46 (00:15:17:cc:e5:46)]
+// IPv6 Hop-by-Hop Option
+// Internet Control Message Protocol v6
+// Type: Multicast Listener Report Message v2 (143)
+// Code: 0
+// Checksum: 0x2a0e [correct]
+// [Checksum Status: Good]
+// Reserved: 0000
+// Number of Multicast Address Records: 4
+// Multicast Address Record Exclude: ff02::db8:1122:3344
+// Record Type: Exclude (2)
+// Aux Data Len: 0
+// Number of Sources: 0
+// Multicast Address: ff02::db8:1122:3344
+// Multicast Address Record Exclude: ff02::1:ffcc:e546
+// Record Type: Exclude (2)
+// Aux Data Len: 0
+// Number of Sources: 0
+// Multicast Address: ff02::1:ffcc:e546
+// Multicast Address Record Exclude: ff02::1:ffa7:10ad
+// Record Type: Exclude (2)
+// Aux Data Len: 0
+// Number of Sources: 0
+// Multicast Address: ff02::1:ffa7:10ad
+// Multicast Address Record Exclude: ff02::1:ff00:2
+// Record Type: Exclude (2)
+// Aux Data Len: 0
+// Number of Sources: 0
+// Multicast Address: ff02::1:ff00:2
+var testPacketMulticastListenerReportMessageV2 = []byte{
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x16, 0x00, 0x15, 0x17, 0xcc, 0xe5, 0x46, 0x86, 0xdd, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x15,
+ 0x17, 0xff, 0xfe, 0xcc, 0xe5, 0x46, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x3a, 0x00, 0x05, 0x02, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00,
+ 0x2a, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0d, 0xb8, 0x11, 0x22, 0x33, 0x44, 0x02, 0x00, 0x00, 0x00, 0xff, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xcc, 0xe5, 0x46, 0x02, 0x00,
+ 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xa7,
+ 0x10, 0xad, 0x02, 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xff, 0x00, 0x00, 0x02,
+}
+
+func TestPacketMulticastListenerReportMessageV2(t *testing.T) {
+ p := gopacket.NewPacket(testPacketMulticastListenerReportMessageV2, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{
+ LayerTypeEthernet,
+ LayerTypeIPv6,
+ LayerTypeIPv6HopByHop,
+ LayerTypeICMPv6,
+ LayerTypeMLDv2MulticastListenerReport}, t)
+ // See https://github.com/google/gopacket/issues/517
+ // checkSerialization(p, t)
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/modbustcp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/modbustcp.go
new file mode 100644
index 00000000000..bafbd7436cd
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/modbustcp.go
@@ -0,0 +1,150 @@
+// Copyright 2018, The GoPacket Authors, 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"
+)
+
+//******************************************************************************
+//
+// ModbusTCP Decoding Layer
+// ------------------------------------------
+// This file provides a GoPacket decoding layer for ModbusTCP.
+//
+//******************************************************************************
+
+const mbapRecordSizeInBytes int = 7
+const modbusPDUMinimumRecordSizeInBytes int = 2
+const modbusPDUMaximumRecordSizeInBytes int = 253
+
+// ModbusProtocol type
+type ModbusProtocol uint16
+
+// ModbusProtocol known values.
+const (
+ ModbusProtocolModbus ModbusProtocol = 0
+)
+
+func (mp ModbusProtocol) String() string {
+ switch mp {
+ default:
+ return "Unknown"
+ case ModbusProtocolModbus:
+ return "Modbus"
+ }
+}
+
+//******************************************************************************
+
+// ModbusTCP Type
+// --------
+// Type ModbusTCP implements the DecodingLayer interface. Each ModbusTCP object
+// represents in a structured form the MODBUS Application Protocol header (MBAP) record present as the TCP
+// payload in an ModbusTCP TCP packet.
+//
+type ModbusTCP struct {
+ BaseLayer // Stores the packet bytes and payload (Modbus PDU) bytes .
+
+ TransactionIdentifier uint16 // Identification of a MODBUS Request/Response transaction
+ ProtocolIdentifier ModbusProtocol // It is used for intra-system multiplexing
+ Length uint16 // Number of following bytes (includes 1 byte for UnitIdentifier + Modbus data length
+ UnitIdentifier uint8 // Identification of a remote slave connected on a serial line or on other buses
+}
+
+//******************************************************************************
+
+// LayerType returns the layer type of the ModbusTCP object, which is LayerTypeModbusTCP.
+func (d *ModbusTCP) LayerType() gopacket.LayerType {
+ return LayerTypeModbusTCP
+}
+
+//******************************************************************************
+
+// decodeModbusTCP analyses a byte slice and attempts to decode it as an ModbusTCP
+// record of a TCP 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 ModbusTCP layer.
+func decodeModbusTCP(data []byte, p gopacket.PacketBuilder) error {
+
+ // Attempt to decode the byte slice.
+ d := &ModbusTCP{}
+ 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 p.NextDecoder(d.NextLayerType())
+
+}
+
+//******************************************************************************
+
+// DecodeFromBytes analyses a byte slice and attempts to decode it as an ModbusTCP
+// record of a TCP packet.
+//
+// Upon succeeds, it loads the ModbusTCP object with information about the packet
+// and returns nil.
+// Upon failure, it returns an error (non nil).
+func (d *ModbusTCP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+ // If the data block is too short to be a MBAP record, then return an error.
+ if len(data) < mbapRecordSizeInBytes+modbusPDUMinimumRecordSizeInBytes {
+ df.SetTruncated()
+ return errors.New("ModbusTCP packet too short")
+ }
+
+ if len(data) > mbapRecordSizeInBytes+modbusPDUMaximumRecordSizeInBytes {
+ df.SetTruncated()
+ return errors.New("ModbusTCP packet too long")
+ }
+
+ // ModbusTCP type embeds type BaseLayer which contains two fields:
+ // Contents is supposed to contain the bytes of the data at this level (MPBA).
+ // Payload is supposed to contain the payload of this level (PDU).
+ d.BaseLayer = BaseLayer{Contents: data[:mbapRecordSizeInBytes], Payload: data[mbapRecordSizeInBytes:len(data)]}
+
+ // Extract the fields from the block of bytes.
+ // The fields can just be copied in big endian order.
+ d.TransactionIdentifier = binary.BigEndian.Uint16(data[:2])
+ d.ProtocolIdentifier = ModbusProtocol(binary.BigEndian.Uint16(data[2:4]))
+ d.Length = binary.BigEndian.Uint16(data[4:6])
+
+ // Length should have the size of the payload plus one byte (size of UnitIdentifier)
+ if d.Length != uint16(len(d.BaseLayer.Payload)+1) {
+ df.SetTruncated()
+ return errors.New("ModbusTCP packet with wrong field value (Length)")
+ }
+ d.UnitIdentifier = uint8(data[6])
+
+ return nil
+}
+
+//******************************************************************************
+
+// NextLayerType returns the layer type of the ModbusTCP payload, which is LayerTypePayload.
+func (d *ModbusTCP) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypePayload
+}
+
+//******************************************************************************
+
+// Payload returns Modbus Protocol Data Unit (PDU) composed by Function Code and Data, it is carried within ModbusTCP packets
+func (d *ModbusTCP) Payload() []byte {
+ return d.BaseLayer.Payload
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mpls_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mpls_test.go
new file mode 100644
index 00000000000..e0a2b95ecb2
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/mpls_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ntp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ntp.go
new file mode 100644
index 00000000000..33c15b3b39f
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ntp.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ntp_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ntp_test.go
new file mode 100644
index 00000000000..b5222169dc8
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ntp_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ospf.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ospf.go
new file mode 100644
index 00000000000..f3f2ca9adb1
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ospf.go
@@ -0,0 +1,680 @@
+// 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 (
+ RouterLSAtypeV2 = 0x1
+ RouterLSAtype = 0x2001
+ NetworkLSAtypeV2 = 0x2
+ NetworkLSAtype = 0x2002
+ SummaryLSANetworktypeV2 = 0x3
+ InterAreaPrefixLSAtype = 0x2003
+ SummaryLSAASBRtypeV2 = 0x4
+ InterAreaRouterLSAtype = 0x2004
+ ASExternalLSAtypeV2 = 0x5
+ 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
+}
+
+// ASExternalLSAV2 is the struct from RFC 2328 A.4.5.
+type ASExternalLSAV2 struct {
+ NetworkMask uint32
+ ExternalBit uint8
+ Metric uint32
+ ForwardingAddress uint32
+ ExternalRouteTag uint32
+}
+
+// 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
+}
+
+// RouterV2 extends RouterLSAV2
+type RouterV2 struct {
+ Type uint8
+ LinkID uint32
+ LinkData uint32
+ Metric uint16
+}
+
+// RouterLSAV2 is the struct from RFC 2328 A.4.2.
+type RouterLSAV2 struct {
+ Flags uint8
+ Links uint16
+ Routers []RouterV2
+}
+
+// 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 and RFC 2328 A.4.1.
+type LSAheader struct {
+ LSAge uint16
+ LSType uint16
+ LinkStateID uint32
+ AdvRouter uint32
+ LSSeqNumber uint32
+ LSChecksum uint16
+ Length uint16
+ LSOptions uint8
+}
+
+// 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 uint32
+ 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
+}
+
+// getLSAsv2 parses the LSA information from the packet for OSPFv2
+func getLSAsv2(num uint32, data []byte) ([]LSA, error) {
+ var lsas []LSA
+ var i uint32 = 0
+ var offset uint32 = 0
+ for ; i < num; i++ {
+ lstype := uint16(data[offset+3])
+ lsalength := binary.BigEndian.Uint16(data[offset+18 : offset+20])
+ content, err := extractLSAInformation(lstype, lsalength, data[offset:])
+ if err != nil {
+ return nil, fmt.Errorf("Could not extract Link State type.")
+ }
+ lsa := LSA{
+ LSAheader: LSAheader{
+ LSAge: binary.BigEndian.Uint16(data[offset : offset+2]),
+ LSOptions: data[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
+}
+
+// extractLSAInformation extracts all the LSA information
+func extractLSAInformation(lstype, lsalength uint16, data []byte) (interface{}, error) {
+ if lsalength < 20 {
+ return nil, fmt.Errorf("Link State header length %v too short, %v required", lsalength, 20)
+ }
+ if len(data) < int(lsalength) {
+ return nil, fmt.Errorf("Link State header length %v too short, %v required", len(data), lsalength)
+ }
+ var content interface{}
+ switch lstype {
+ case RouterLSAtypeV2:
+ var routers []RouterV2
+ links := binary.BigEndian.Uint16(data[22:24])
+ content = RouterLSAV2{
+ Flags: data[20],
+ Links: links,
+ Routers: routers,
+ }
+ case ASExternalLSAtypeV2:
+ content = ASExternalLSAV2{
+ NetworkMask: binary.BigEndian.Uint32(data[20:24]),
+ ExternalBit: data[24] & 0x80,
+ Metric: binary.BigEndian.Uint32(data[24:28]) & 0x00FFFFFF,
+ ForwardingAddress: binary.BigEndian.Uint32(data[28:32]),
+ ExternalRouteTag: binary.BigEndian.Uint32(data[32:36]),
+ }
+ case RouterLSAtype:
+ var routers []Router
+ var j uint32
+ for j = 24; j < uint32(lsalength); j += 16 {
+ router := Router{
+ Type: uint8(data[j]),
+ Metric: binary.BigEndian.Uint16(data[j+2 : j+4]),
+ InterfaceID: binary.BigEndian.Uint32(data[j+4 : j+8]),
+ NeighborInterfaceID: binary.BigEndian.Uint32(data[j+8 : j+12]),
+ NeighborRouterID: binary.BigEndian.Uint32(data[j+12 : j+16]),
+ }
+ routers = append(routers, router)
+ }
+ content = RouterLSA{
+ Flags: uint8(data[20]),
+ Options: binary.BigEndian.Uint32(data[20: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[j:j+4]))
+ }
+ content = NetworkLSA{
+ Options: binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,
+ AttachedRouter: routers,
+ }
+ case InterAreaPrefixLSAtype:
+ content = InterAreaPrefixLSA{
+ Metric: binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,
+ PrefixLength: uint8(data[24]),
+ PrefixOptions: uint8(data[25]),
+ AddressPrefix: data[28:uint32(lsalength)],
+ }
+ case InterAreaRouterLSAtype:
+ content = InterAreaRouterLSA{
+ Options: binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,
+ Metric: binary.BigEndian.Uint32(data[24:28]) & 0x00FFFFFF,
+ DestinationRouterID: binary.BigEndian.Uint32(data[28:32]),
+ }
+ case ASExternalLSAtype:
+ fallthrough
+ case NSSALSAtype:
+
+ flags := uint8(data[20])
+ prefixLen := uint8(data[24]) / 8
+ var forwardingAddress []byte
+ if (flags & 0x02) == 0x02 {
+ forwardingAddress = data[28+uint32(prefixLen) : 28+uint32(prefixLen)+16]
+ }
+ content = ASExternalLSA{
+ Flags: flags,
+ Metric: binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,
+ PrefixLength: prefixLen,
+ PrefixOptions: uint8(data[25]),
+ RefLSType: binary.BigEndian.Uint16(data[26:28]),
+ AddressPrefix: data[28 : 28+uint32(prefixLen)],
+ ForwardingAddress: forwardingAddress,
+ }
+ case LinkLSAtype:
+ var prefixes []Prefix
+ var prefixOffset uint32 = 44
+ var j uint32
+ numOfPrefixes := binary.BigEndian.Uint32(data[40: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[20]),
+ Options: binary.BigEndian.Uint32(data[20:24]) & 0x00FFFFFF,
+ LinkLocalAddress: data[24:40],
+ NumOfPrefixes: numOfPrefixes,
+ Prefixes: prefixes,
+ }
+ case IntraAreaPrefixLSAtype:
+ var prefixes []Prefix
+ var prefixOffset uint32 = 32
+ var j uint16
+ numOfPrefixes := binary.BigEndian.Uint16(data[20: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[22:24]),
+ RefLinkStateID: binary.BigEndian.Uint32(data[24:28]),
+ RefAdvRouter: binary.BigEndian.Uint32(data[28:32]),
+ Prefixes: prefixes,
+ }
+ default:
+ return nil, fmt.Errorf("Unknown Link State type.")
+ }
+ return content, nil
+}
+
+// getLSAs parses the LSA information from the packet for OSPFv3
+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])
+
+ content, err := extractLSAInformation(lstype, lsalength, data[offset:])
+ if err != nil {
+ return nil, fmt.Errorf("Could not extract 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])
+
+ switch ospf.Type {
+ case OSPFHello:
+ var neighbors []uint32
+ for i := 44; uint16(i+4) <= ospf.PacketLength; i += 4 {
+ neighbors = append(neighbors, binary.BigEndian.Uint32(data[i:i+4]))
+ }
+ ospf.Content = HelloPkgV2{
+ NetworkMask: binary.BigEndian.Uint32(data[24:28]),
+ HelloPkg: HelloPkg{
+ HelloInterval: binary.BigEndian.Uint16(data[28:30]),
+ Options: uint32(data[30]),
+ RtrPriority: uint8(data[31]),
+ RouterDeadInterval: binary.BigEndian.Uint32(data[32:36]),
+ DesignatedRouterID: binary.BigEndian.Uint32(data[36:40]),
+ BackupDesignatedRouterID: binary.BigEndian.Uint32(data[40:44]),
+ NeighborID: neighbors,
+ },
+ }
+ case OSPFDatabaseDescription:
+ var lsas []LSAheader
+ for i := 32; 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{
+ InterfaceMTU: binary.BigEndian.Uint16(data[24:26]),
+ Options: uint32(data[26]),
+ Flags: uint16(data[27]),
+ DDSeqNumber: binary.BigEndian.Uint32(data[28:32]),
+ LSAinfo: lsas,
+ }
+ case OSPFLinkStateRequest:
+ var lsrs []LSReq
+ for i := 24; 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[24:28])
+
+ lsas, err := getLSAsv2(num, data[28:])
+ 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 := 24; uint16(i+20) <= ospf.PacketLength; i += 20 {
+ lsa := LSAheader{
+ LSAge: binary.BigEndian.Uint16(data[i : i+2]),
+ LSOptions: data[i+2],
+ LSType: uint16(data[i+3]),
+ 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
+ }
+ 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: uint32(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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ospf_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ospf_test.go
new file mode 100644
index 00000000000..766f62ef201
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ospf_test.go
@@ -0,0 +1,1014 @@
+// 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 (
+ "reflect"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// testPacketOSPF2Hello is the packet:
+// 13:19:20.008765 IP 192.168.170.8 > 224.0.0.5: OSPFv2, Hello, length 44
+// 0x0000: 0100 5e00 0005 00e0 18b1 0cad 0800 45c0 ..^...........E.
+// 0x0010: 0040 0812 0000 0159 65dd c0a8 aa08 e000 .@.....Ye.......
+// 0x0020: 0005 0201 002c c0a8 aa08 0000 0001 273b .....,........';
+// 0x0030: 0000 0000 0000 0000 0000 ffff ff00 000a ................
+// 0x0040: 0201 0000 0028 c0a8 aa08 0000 0000 .....(........
+var testPacketOSPF2Hello = []byte{
+ 0x01, 0x00, 0x5e, 0x00, 0x00, 0x05, 0x00, 0xe0, 0x18, 0xb1, 0x0c, 0xad, 0x08, 0x00, 0x45, 0xc0,
+ 0x00, 0x40, 0x08, 0x12, 0x00, 0x00, 0x01, 0x59, 0x65, 0xdd, 0xc0, 0xa8, 0xaa, 0x08, 0xe0, 0x00,
+ 0x00, 0x05, 0x02, 0x01, 0x00, 0x2c, 0xc0, 0xa8, 0xaa, 0x08, 0x00, 0x00, 0x00, 0x01, 0x27, 0x3b,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0a,
+ 0x02, 0x01, 0x00, 0x00, 0x00, 0x28, 0xc0, 0xa8, 0xaa, 0x08, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketOSPF2Hello(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF2Hello, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)
+
+ ospf := p.Layer(LayerTypeOSPF).(*OSPFv2)
+ if ospf.Version != 2 {
+ t.Fatal("Invalid OSPF version")
+ }
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {
+ want := &OSPFv2{
+ OSPF: OSPF{
+ Version: 2,
+ Type: OSPFHello,
+ PacketLength: 44,
+ RouterID: 0xc0a8aa08,
+ AreaID: 1,
+ Checksum: 0x273b,
+ Content: HelloPkgV2{
+ NetworkMask: 0xffffff00,
+ HelloPkg: HelloPkg{
+ RtrPriority: 0x1,
+ Options: 0x2,
+ HelloInterval: 0xa,
+ RouterDeadInterval: 0x28,
+ DesignatedRouterID: 0xc0a8aa08,
+ BackupDesignatedRouterID: 0x0,
+ },
+ },
+ },
+ }
+ 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 BenchmarkDecodePacketPacket5(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF2Hello, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+// 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)
+ }
+}
+
+// testPacketOSPF2DBDesc is the packet:
+// 13:20:14.414477 IP 192.168.170.8 > 192.168.170.2: OSPFv2, Database Description, length 32
+// 0x0000: 0060 0881 7a70 00e0 18b1 0cad 0800 45c0 .`..zp........E.
+// 0x0010: 0034 2be5 0000 0159 b770 c0a8 aa08 c0a8 .4+....Y.p......
+// 0x0020: aa02 0202 0020 c0a8 aa08 0000 0001 a052 ...............R
+// 0x0030: 0000 0000 0000 0000 0000 05dc 0207 4177 ..............Aw
+// 0x0040: a97e .~
+var testPacketOSPF2DBDesc = []byte{
+ 0x00, 0x60, 0x08, 0x81, 0x7a, 0x70, 0x00, 0xe0, 0x18, 0xb1, 0x0c, 0xad, 0x08, 0x00, 0x45, 0xc0,
+ 0x00, 0x34, 0x2b, 0xe5, 0x00, 0x00, 0x01, 0x59, 0xb7, 0x70, 0xc0, 0xa8, 0xaa, 0x08, 0xc0, 0xa8,
+ 0xaa, 0x02, 0x02, 0x02, 0x00, 0x20, 0xc0, 0xa8, 0xaa, 0x08, 0x00, 0x00, 0x00, 0x01, 0xa0, 0x52,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xdc, 0x02, 0x07, 0x41, 0x77,
+ 0xa9, 0x7e,
+}
+
+func TestPacketOSPF2DBDesc(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF2DBDesc, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {
+ want := &OSPFv2{
+ OSPF: OSPF{
+ Version: 2,
+ Type: OSPFDatabaseDescription,
+ PacketLength: 32,
+ RouterID: 0xc0a8aa08,
+ AreaID: 1,
+ Checksum: 0xa052,
+ Content: DbDescPkg{
+ Options: 0x02,
+ InterfaceMTU: 1500,
+ Flags: 0x7,
+ DDSeqNumber: 1098361214,
+ },
+ },
+ }
+ 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 BenchmarkDecodePacketPacket6(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF2DBDesc, 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)
+ }
+}
+
+// testPacketOSPF2LSRequest is the packet:
+// 13:20:14.418003 IP 192.168.170.2 > 192.168.170.8: OSPFv2, LS-Request, length 36
+// 0x0000: 00e0 18b1 0cad 0060 0881 7a70 0800 45c0 .......`..zp..E.
+// 0x0010: 0038 88c6 0000 0159 5a8b c0a8 aa02 c0a8 .8.....YZ.......
+// 0x0020: aa08 0203 0024 c0a8 aa03 0000 0001 bdc7 .....$..........
+// 0x0030: 0000 0000 0000 0000 0000 0000 0001 c0a8 ................
+// 0x0040: aa08 c0a8 aa08 ......
+var testPacketOSPF2LSRequest = []byte{
+ 0x00, 0xe0, 0x18, 0xb1, 0x0c, 0xad, 0x00, 0x60, 0x08, 0x81, 0x7a, 0x70, 0x08, 0x00, 0x45, 0xc0,
+ 0x00, 0x38, 0x88, 0xc6, 0x00, 0x00, 0x01, 0x59, 0x5a, 0x8b, 0xc0, 0xa8, 0xaa, 0x02, 0xc0, 0xa8,
+ 0xaa, 0x08, 0x02, 0x03, 0x00, 0x24, 0xc0, 0xa8, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x01, 0xbd, 0xc7,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0xa8,
+ 0xaa, 0x08, 0xc0, 0xa8, 0xaa, 0x08,
+}
+
+func TestPacketOSPF2LSRequest(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF2LSRequest, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {
+ want := &OSPFv2{
+ OSPF: OSPF{
+ Version: 2,
+ Type: OSPFLinkStateRequest,
+ PacketLength: 36,
+ RouterID: 0xc0a8aa03,
+ AreaID: 1,
+ Checksum: 0xbdc7,
+ Content: []LSReq{
+ LSReq{
+ LSType: 0x1,
+ LSID: 0xc0a8aa08,
+ AdvRouter: 0xc0a8aa08,
+ },
+ },
+ },
+ }
+ 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 BenchmarkDecodePacketPacket7(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF2LSRequest, 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)
+ }
+}
+
+// testPacketOSPF2LSUpdate is the packet:
+// 13:20:14.420459 IP 192.168.170.2 > 224.0.0.6: OSPFv2, LS-Update, length 292
+// 0x0000: 0100 5e00 0006 0060 0881 7a70 0800 45c0 ..^....`..zp..E.
+// 0x0010: 0138 3025 0000 0159 3cd7 c0a8 aa02 e000 .80%...Y<.......
+// 0x0020: 0006 0204 0124 c0a8 aa03 0000 0001 366b .....$........6k
+// 0x0030: 0000 0000 0000 0000 0000 0000 0007 0002 ................
+// 0x0040: 0201 c0a8 aa03 c0a8 aa03 8000 0001 3a9c ..............:.
+// 0x0050: 0030 0200 0002 c0a8 aa00 ffff ff00 0300 .0..............
+// 0x0060: 000a c0a8 aa00 ffff ff00 0300 000a 0003 ................
+// 0x0070: 0205 50d4 1000 c0a8 aa02 8000 0001 2a49 ..P...........*I
+// 0x0080: 0024 ffff ffff 8000 0014 0000 0000 0000 .$..............
+// 0x0090: 0000 0003 0205 9479 ab00 c0a8 aa02 8000 .......y........
+// 0x00a0: 0001 34a5 0024 ffff ff00 8000 0014 c0a8 ..4..$..........
+// 0x00b0: aa01 0000 0000 0003 0205 c082 7800 c0a8 ............x...
+// 0x00c0: aa02 8000 0001 d319 0024 ffff ff00 8000 .........$......
+// 0x00d0: 0014 0000 0000 0000 0000 0003 0205 c0a8 ................
+// 0x00e0: 0000 c0a8 aa02 8000 0001 3708 0024 ffff ..........7..$..
+// 0x00f0: ff00 8000 0014 0000 0000 0000 0000 0003 ................
+// 0x0100: 0205 c0a8 0100 c0a8 aa02 8000 0001 2c12 ..............,.
+// 0x0110: 0024 ffff ff00 8000 0014 0000 0000 0000 .$..............
+// 0x0120: 0000 0003 0205 c0a8 ac00 c0a8 aa02 8000 ................
+// 0x0130: 0001 3341 0024 ffff ff00 8000 0014 c0a8 ..3A.$..........
+// 0x0140: aa0a 0000 0000 ......
+var testPacketOSPF2LSUpdate = []byte{
+ 0x01, 0x00, 0x5e, 0x00, 0x00, 0x06, 0x00, 0x60, 0x08, 0x81, 0x7a, 0x70, 0x08, 0x00, 0x45, 0xc0,
+ 0x01, 0x38, 0x30, 0x25, 0x00, 0x00, 0x01, 0x59, 0x3c, 0xd7, 0xc0, 0xa8, 0xaa, 0x02, 0xe0, 0x00,
+ 0x00, 0x06, 0x02, 0x04, 0x01, 0x24, 0xc0, 0xa8, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x01, 0x36, 0x6b,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x02,
+ 0x02, 0x01, 0xc0, 0xa8, 0xaa, 0x03, 0xc0, 0xa8, 0xaa, 0x03, 0x80, 0x00, 0x00, 0x01, 0x3a, 0x9c,
+ 0x00, 0x30, 0x02, 0x00, 0x00, 0x02, 0xc0, 0xa8, 0xaa, 0x00, 0xff, 0xff, 0xff, 0x00, 0x03, 0x00,
+ 0x00, 0x0a, 0xc0, 0xa8, 0xaa, 0x00, 0xff, 0xff, 0xff, 0x00, 0x03, 0x00, 0x00, 0x0a, 0x00, 0x03,
+ 0x02, 0x05, 0x50, 0xd4, 0x10, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0x2a, 0x49,
+ 0x00, 0x24, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x94, 0x79, 0xab, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00,
+ 0x00, 0x01, 0x34, 0xa5, 0x00, 0x24, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x14, 0xc0, 0xa8,
+ 0xaa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0xc0, 0x82, 0x78, 0x00, 0xc0, 0xa8,
+ 0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0xd3, 0x19, 0x00, 0x24, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00,
+ 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0xc0, 0xa8,
+ 0x00, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0x37, 0x08, 0x00, 0x24, 0xff, 0xff,
+ 0xff, 0x00, 0x80, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x05, 0xc0, 0xa8, 0x01, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0x2c, 0x12,
+ 0x00, 0x24, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0xc0, 0xa8, 0xac, 0x00, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00,
+ 0x00, 0x01, 0x33, 0x41, 0x00, 0x24, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x14, 0xc0, 0xa8,
+ 0xaa, 0x0a, 0x00, 0x00, 0x00, 0x00,
+}
+
+func TestPacketOSPF2LSUpdate(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF2LSUpdate, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {
+ want := &OSPFv2{
+ OSPF: OSPF{
+ Version: 2,
+ Type: OSPFLinkStateUpdate,
+ PacketLength: 292,
+ RouterID: 0xc0a8aa03,
+ AreaID: 1,
+ Checksum: 0x366b,
+ Content: LSUpdate{
+ NumOfLSAs: 7,
+ LSAs: []LSA{
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 0x2,
+ LSType: 0x1,
+ LinkStateID: 0xc0a8aa03,
+ AdvRouter: 0xc0a8aa03,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x3a9c,
+ Length: 0x30,
+ LSOptions: 0x2,
+ },
+ Content: RouterLSAV2{
+ Flags: 0x2,
+ Links: 0x2,
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 0x3,
+ LSType: 0x5,
+ LinkStateID: 0x50d41000,
+ AdvRouter: 0xc0a8aa02,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x2a49,
+ Length: 0x24,
+ LSOptions: 0x2,
+ },
+ Content: ASExternalLSAV2{
+ NetworkMask: 0xffffffff,
+ ExternalBit: 0x80,
+ Metric: 0x14,
+ ForwardingAddress: 0x0,
+ ExternalRouteTag: 0x0,
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 0x3,
+ LSType: 0x5,
+ LinkStateID: 0x9479ab00,
+ AdvRouter: 0xc0a8aa02,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x34a5,
+ Length: 0x24,
+ LSOptions: 0x2,
+ },
+ Content: ASExternalLSAV2{
+ NetworkMask: 0xffffff00,
+ ExternalBit: 0x80,
+ Metric: 0x14,
+ ForwardingAddress: 0xc0a8aa01,
+ ExternalRouteTag: 0x0,
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 0x3,
+ LSType: 0x5,
+ LinkStateID: 0xc0827800,
+ AdvRouter: 0xc0a8aa02,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0xd319,
+ Length: 0x24,
+ LSOptions: 0x2,
+ },
+ Content: ASExternalLSAV2{
+ NetworkMask: 0xffffff00,
+ ExternalBit: 0x80,
+ Metric: 0x14,
+ ForwardingAddress: 0x0,
+ ExternalRouteTag: 0x0,
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 0x3,
+ LSType: 0x5,
+ LinkStateID: 0xc0a80000,
+ AdvRouter: 0xc0a8aa02,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x3708,
+ Length: 0x24,
+ LSOptions: 0x2,
+ },
+ Content: ASExternalLSAV2{
+ NetworkMask: 0xffffff00,
+ ExternalBit: 0x80,
+ Metric: 0x14,
+ ForwardingAddress: 0x0,
+ ExternalRouteTag: 0x0,
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 0x3,
+ LSType: 0x5,
+ LinkStateID: 0xc0a80100,
+ AdvRouter: 0xc0a8aa02,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x2c12,
+ Length: 0x24,
+ LSOptions: 0x2,
+ },
+ Content: ASExternalLSAV2{
+ NetworkMask: 0xffffff00,
+ ExternalBit: 0x80,
+ Metric: 0x14,
+ ForwardingAddress: 0x0,
+ ExternalRouteTag: 0x0,
+ },
+ },
+ LSA{
+ LSAheader: LSAheader{
+ LSAge: 0x3,
+ LSType: 0x5,
+ LinkStateID: 0xc0a8ac00,
+ AdvRouter: 0xc0a8aa02,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x3341,
+ Length: 0x24,
+ LSOptions: 0x2,
+ },
+ Content: ASExternalLSAV2{
+ NetworkMask: 0xffffff00,
+ ExternalBit: 0x80,
+ Metric: 0x14,
+ ForwardingAddress: 0xc0a8aa0a,
+ ExternalRouteTag: 0x0,
+ },
+ },
+ },
+ },
+ },
+ }
+ 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 BenchmarkDecodePacketPacket8(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF2LSUpdate, 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)
+ }
+}
+
+// testPacketOSPF2LSAck is the packet:
+// 13:20:20.858322 IP 192.168.170.8 > 192.168.170.2: OSPFv2, LS-Ack, length 44
+// 0x0000: 0060 0881 7a70 00e0 18b1 0cad 0800 45c0 .`..zp........E.
+// 0x0010: 0040 2bea 0000 0159 b75f c0a8 aa08 c0a8 .@+....Y._......
+// 0x0020: aa02 0205 002c c0a8 aa08 0000 0001 e2f4 .....,..........
+// 0x0030: 0000 0000 0000 0000 0000 0e10 0201 c0a8 ................
+// 0x0040: aa02 c0a8 aa02 8000 0001 4a8e 0030 ..........J..0
+var testPacketOSPF2LSAck = []byte{
+ 0x00, 0x60, 0x08, 0x81, 0x7a, 0x70, 0x00, 0xe0, 0x18, 0xb1, 0x0c, 0xad, 0x08, 0x00, 0x45, 0xc0,
+ 0x00, 0x40, 0x2b, 0xea, 0x00, 0x00, 0x01, 0x59, 0xb7, 0x5f, 0xc0, 0xa8, 0xaa, 0x08, 0xc0, 0xa8,
+ 0xaa, 0x02, 0x02, 0x05, 0x00, 0x2c, 0xc0, 0xa8, 0xaa, 0x08, 0x00, 0x00, 0x00, 0x01, 0xe2, 0xf4,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x02, 0x01, 0xc0, 0xa8,
+ 0xaa, 0x02, 0xc0, 0xa8, 0xaa, 0x02, 0x80, 0x00, 0x00, 0x01, 0x4a, 0x8e, 0x00, 0x30,
+}
+
+func TestPacketOSPF2LSAck(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPF2LSAck, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeOSPF}, t)
+ if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv2); ok {
+ want := &OSPFv2{
+ OSPF: OSPF{
+ Version: 2,
+ Type: OSPFLinkStateAcknowledgment,
+ PacketLength: 44,
+ RouterID: 0xc0a8aa08,
+ AreaID: 1,
+ Checksum: 0xe2f4,
+ Content: []LSAheader{
+ LSAheader{
+ LSAge: 0xe10,
+ LSType: 0x1,
+ LinkStateID: 0xc0a8aa02,
+ AdvRouter: 0xc0a8aa02,
+ LSSeqNumber: 0x80000001,
+ LSChecksum: 0x4a8e,
+ Length: 0x30,
+ LSOptions: 0x2,
+ },
+ },
+ },
+ }
+ 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 BenchmarkDecodePacketPacket9(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF3LSAck, 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")
+ }
+}
+
+var testPacketOSPFInvalidLSA = []byte{
+ 0x5c, 0xfa, 0x00, 0x00, 0xfa, 0x6c, 0xbd, 0xe4, 0x19, 0x72, 0x1d, 0x1f,
+ 0x08, 0x00, 0x45, 0x00, 0x00, 0xad, 0x00, 0x00, 0x40, 0x00, 0x40, 0x59,
+ 0x6e, 0xef, 0x6b, 0x96, 0x61, 0x11, 0xb4, 0x96, 0xc0, 0xa8, 0x02, 0x04,
+ 0x00, 0xa2, 0x80, 0x00, 0x01, 0x1f, 0x08, 0x00, 0x45, 0x00, 0x6f, 0x76,
+ 0x65, 0x72, 0x66, 0x6c, 0x7f, 0xff, 0x12, 0x12, 0x00, 0x5a, 0xf6, 0x73,
+ 0xa2, 0xba, 0x81, 0x90, 0x00, 0x01, 0x40, 0x6f, 0x77, 0x20, 0x6f, 0x6e,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x00, 0x00, 0x00, 0x01,
+ 0x96, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x00, 0x6e, 0x00, 0x6f,
+ 0x77,
+}
+
+func TestPacketOSPFInvalidLSA(t *testing.T) {
+ p := gopacket.NewPacket(testPacketOSPFInvalidLSA, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() == nil {
+ t.Error("Bad packet decoded successfully")
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, gopacket.LayerTypeDecodeFailure}, t)
+}
+
+func BenchmarkDecodePacketPacket4(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ports.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ports.go
index 6b06ec66e9d..705fd1dbaf8 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ports.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ports.go
@@ -46,6 +46,39 @@ func (a TCPPort) String() string {
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,
+ 443: LayerTypeTLS, // https
+ 502: LayerTypeModbusTCP, // modbustcp
+ 636: LayerTypeTLS, // ldaps
+ 989: LayerTypeTLS, // ftps-data
+ 990: LayerTypeTLS, // ftps
+ 992: LayerTypeTLS, // telnets
+ 993: LayerTypeTLS, // imaps
+ 994: LayerTypeTLS, // ircs
+ 995: LayerTypeTLS, // pop3s
+ 5061: LayerTypeTLS, // ips
+}
+
+// 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.
@@ -57,18 +90,37 @@ func (a UDPPort) String() string {
}
// LayerType returns a LayerType that would be able to decode the
-// application payload. It use some well-known port such as 53 for DNS.
+// 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 {
- switch a {
- case 53:
- return LayerTypeDNS
- case 6343:
- return LayerTypeSFlow
- default:
- return gopacket.LayerTypePayload
+ 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,
+ 546: LayerTypeDHCPv6,
+ 547: LayerTypeDHCPv6,
+ 5060: LayerTypeSIP,
+ 6343: LayerTypeSFlow,
+ 6081: LayerTypeGeneve,
+ 3784: LayerTypeBFD,
+ 2152: LayerTypeGTPv1U,
+}
+
+// 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,
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ppp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ppp.go
index 1d2e7b8c432..e534d698cb2 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ppp.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/ppp.go
@@ -15,7 +15,8 @@ import (
// PPP is the layer for PPP encapsulation headers.
type PPP struct {
BaseLayer
- PPPType PPPType
+ PPPType PPPType
+ HasPPTPHeader bool
}
// PPPEndpoint is a singleton endpoint for PPP. Since there is no actual
@@ -36,17 +37,22 @@ 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 {
+ offset := 0
+ if data[0] == 0xff && data[1] == 0x03 {
+ offset = 2
+ ppp.HasPPTPHeader = true
+ }
+ if data[offset]&0x1 == 0 {
+ if data[offset+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:]
+ ppp.PPPType = PPPType(binary.BigEndian.Uint16(data[offset : offset+2]))
+ ppp.Contents = data[offset : offset+2]
+ ppp.Payload = data[offset+2:]
} else {
- ppp.PPPType = PPPType(data[0])
- ppp.Contents = data[:1]
- ppp.Payload = data[1:]
+ ppp.PPPType = PPPType(data[offset])
+ ppp.Contents = data[offset : offset+1]
+ ppp.Payload = data[offset+1:]
}
p.AddLayer(ppp)
p.SetLinkLayer(ppp)
@@ -70,5 +76,13 @@ func (p *PPP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOpt
}
bytes[0] = uint8(p.PPPType)
}
+ if p.HasPPTPHeader {
+ bytes, err := b.PrependBytes(2)
+ if err != nil {
+ return err
+ }
+ bytes[0] = 0xff
+ bytes[1] = 0x03
+ }
return nil
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/radiotap.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/radiotap.go
index b6daf482785..17c61335e66 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/radiotap.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/radiotap.go
@@ -10,9 +10,10 @@ import (
"bytes"
"encoding/binary"
"fmt"
- "github.com/google/gopacket"
"hash/crc32"
"strings"
+
+ "github.com/google/gopacket"
)
// align calculates the number of bytes needed to align with the width
@@ -858,17 +859,211 @@ func (m *RadioTap) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) erro
}
payload := data[m.Length:]
- if !m.Flags.FCS() { // Dot11.DecodeFromBytes() expects FCS present
- fcs := make([]byte, 4)
+
+ // Remove non standard padding used by some Wi-Fi drivers
+ if m.Flags.Datapad() &&
+ payload[0]&0xC == 0x8 { //&& // Data frame
+ headlen := 24
+ if payload[0]&0x8C == 0x88 { // QoS
+ headlen += 2
+ }
+ if payload[1]&0x3 == 0x3 { // 4 addresses
+ headlen += 2
+ }
+ if headlen%4 == 2 {
+ payload = append(payload[:headlen], payload[headlen+2:len(payload)]...)
+ }
+ }
+
+ if !m.Flags.FCS() {
+ // Dot11.DecodeFromBytes() expects FCS present and performs a hard chop on the checksum
+ // If a user is handing in subslices or packets from a buffered stream, the capacity of the slice
+ // may extend beyond the len, rather than expecting callers to enforce cap==len on every packet
+ // we take the hit in this one case and do a reallocation. If the user DOES enforce cap==len
+ // then the reallocation will happen anyway on the append. This is requried because the append
+ // write to the memory directly after the payload if there is sufficient capacity, which callers
+ // may not expect.
+ reallocPayload := make([]byte, len(payload)+4)
+ copy(reallocPayload[0:len(payload)], payload)
h := crc32.NewIEEE()
h.Write(payload)
- binary.LittleEndian.PutUint32(fcs, h.Sum32())
- payload = append(payload, fcs...)
+ binary.LittleEndian.PutUint32(reallocPayload[len(payload):], h.Sum32())
+ payload = reallocPayload
}
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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sctp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sctp.go
index 37675499a1d..511176e560f 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sctp.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sctp.go
@@ -8,9 +8,11 @@ package layers
import (
"encoding/binary"
+ "errors"
"fmt"
- "github.com/google/gopacket"
"hash/crc32"
+
+ "github.com/google/gopacket"
)
// SCTP contains information on the top level of an SCTP packet.
@@ -26,17 +28,13 @@ type SCTP struct {
func (s *SCTP) LayerType() gopacket.LayerType { return LayerTypeSCTP }
func decodeSCTP(data []byte, p gopacket.PacketBuilder) error {
- sctp := &SCTP{
- SrcPort: SCTPPort(binary.BigEndian.Uint16(data[:2])),
- sPort: data[:2],
- DstPort: SCTPPort(binary.BigEndian.Uint16(data[2:4])),
- dPort: data[2:4],
- VerificationTag: binary.BigEndian.Uint32(data[4:8]),
- Checksum: binary.BigEndian.Uint32(data[8:12]),
- BaseLayer: BaseLayer{data[:12], data[12:]},
- }
+ sctp := &SCTP{}
+ err := sctp.DecodeFromBytes(data, p)
p.AddLayer(sctp)
p.SetTransportLayer(sctp)
+ if err != nil {
+ return err
+ }
return p.NextDecoder(sctpChunkTypePrefixDecoder)
}
@@ -70,6 +68,29 @@ func (s SCTP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOpt
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
@@ -91,16 +112,28 @@ func roundUpToNearest4(i int) int {
return i + 4 - (i % 4)
}
-func decodeSCTPChunk(data []byte) SCTPChunk {
+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: SCTPChunkType(data[0]),
+ Type: ct,
Flags: data[1],
Length: length,
ActualLength: actual,
- BaseLayer: BaseLayer{data[:actual], data[actual:]},
- }
+ BaseLayer: BaseLayer{data[:actual], data[actual : len(data)-delta]},
+ }, nil
}
// SCTPParameter is a TLV parameter inside a SCTPChunk.
@@ -140,7 +173,11 @@ type SCTPUnknownChunkType struct {
}
func decodeSCTPChunkTypeUnknown(data []byte, p gopacket.PacketBuilder) error {
- sc := &SCTPUnknownChunkType{SCTPChunk: decodeSCTPChunk(data)}
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
+ sc := &SCTPUnknownChunkType{SCTPChunk: chunk}
sc.bytes = data[:sc.ActualLength]
p.AddLayer(sc)
p.SetErrorLayer(sc)
@@ -176,40 +213,111 @@ type SCTPData struct {
TSN uint32
StreamId uint16
StreamSequence uint16
- PayloadProtocol uint32
- PayloadData []byte
+ PayloadProtocol SCTPPayloadProtocol
}
// LayerType returns gopacket.LayerTypeSCTPData.
func (s *SCTPData) LayerType() gopacket.LayerType { return LayerTypeSCTPData }
-// Payload returns the data payload of the SCTP data chunk.
-func (s *SCTPData) Payload() []byte {
- return s.PayloadData
+// 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: decodeSCTPChunk(data),
+ 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: binary.BigEndian.Uint32(data[12:16]),
+ PayloadProtocol: SCTPPayloadProtocol(binary.BigEndian.Uint32(data[12:16])),
}
// Length is the length in bytes of the data, INCLUDING the 16-byte header.
- sc.PayloadData = data[16:sc.Length]
p.AddLayer(sc)
- p.SetApplicationLayer(sc)
- return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
+ return p.NextDecoder(gopacket.LayerTypePayload)
}
// SerializeTo is for gopacket.SerializableLayer.
func (sc SCTPData) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
- length := 16 + len(sc.PayloadData)
- bytes, err := b.PrependBytes(roundUpToNearest4(length))
+ 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
}
@@ -225,12 +333,11 @@ func (sc SCTPData) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.Seriali
flags |= 0x1
}
bytes[1] = flags
- binary.BigEndian.PutUint16(bytes[2:4], uint16(length))
+ 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], sc.PayloadProtocol)
- copy(bytes[16:], sc.PayloadData)
+ binary.BigEndian.PutUint32(bytes[12:16], uint32(sc.PayloadProtocol))
return nil
}
@@ -258,8 +365,12 @@ func (sc *SCTPInit) LayerType() gopacket.LayerType {
}
func decodeSCTPInit(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
sc := &SCTPInit{
- SCTPChunk: decodeSCTPChunk(data),
+ SCTPChunk: chunk,
InitiateTag: binary.BigEndian.Uint32(data[4:8]),
AdvertisedReceiverWindowCredit: binary.BigEndian.Uint32(data[8:12]),
OutboundStreams: binary.BigEndian.Uint16(data[12:14]),
@@ -283,7 +394,6 @@ func (sc SCTPInit) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.Seriali
payload = append(payload, SCTPParameter(param).Bytes()...)
}
length := 20 + len(payload)
-
bytes, err := b.PrependBytes(roundUpToNearest4(length))
if err != nil {
return err
@@ -316,8 +426,12 @@ func (sc *SCTPSack) LayerType() gopacket.LayerType {
}
func decodeSCTPSack(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
sc := &SCTPSack{
- SCTPChunk: decodeSCTPChunk(data),
+ SCTPChunk: chunk,
CumulativeTSNAck: binary.BigEndian.Uint32(data[4:8]),
AdvertisedReceiverWindowCredit: binary.BigEndian.Uint32(data[8:12]),
NumGapACKs: binary.BigEndian.Uint16(data[12:14]),
@@ -396,8 +510,12 @@ func (sc *SCTPHeartbeat) LayerType() gopacket.LayerType {
}
func decodeSCTPHeartbeat(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
sc := &SCTPHeartbeat{
- SCTPChunk: decodeSCTPChunk(data),
+ SCTPChunk: chunk,
}
paramData := data[4:sc.Length]
for len(paramData) > 0 {
@@ -447,9 +565,13 @@ func (sc *SCTPError) LayerType() gopacket.LayerType {
}
func decodeSCTPError(data []byte, p gopacket.PacketBuilder) error {
- // remarkably similarot decodeSCTPHeartbeat ;)
+ // remarkably similar to decodeSCTPHeartbeat ;)
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
sc := &SCTPError{
- SCTPChunk: decodeSCTPChunk(data),
+ SCTPChunk: chunk,
}
paramData := data[4:sc.Length]
for len(paramData) > 0 {
@@ -490,8 +612,12 @@ type SCTPShutdown struct {
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: decodeSCTPChunk(data),
+ SCTPChunk: chunk,
CumulativeTSNAck: binary.BigEndian.Uint32(data[4:8]),
}
p.AddLayer(sc)
@@ -520,8 +646,12 @@ type SCTPShutdownAck struct {
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: decodeSCTPChunk(data),
+ SCTPChunk: chunk,
}
p.AddLayer(sc)
return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
@@ -549,8 +679,12 @@ type SCTPCookieEcho struct {
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: decodeSCTPChunk(data),
+ SCTPChunk: chunk,
}
sc.Cookie = data[4:sc.Length]
p.AddLayer(sc)
@@ -588,8 +722,12 @@ func (sc *SCTPEmptyLayer) LayerType() gopacket.LayerType {
}
func decodeSCTPEmptyLayer(data []byte, p gopacket.PacketBuilder) error {
+ chunk, err := decodeSCTPChunk(data)
+ if err != nil {
+ return err
+ }
sc := &SCTPEmptyLayer{
- SCTPChunk: decodeSCTPChunk(data),
+ SCTPChunk: chunk,
}
p.AddLayer(sc)
return p.NextDecoder(gopacket.DecodeFunc(decodeWithSCTPChunkTypePrefix))
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow.go
index 9da4bacb787..9484a8efec9 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow.go
@@ -73,9 +73,11 @@ package layers
import (
"encoding/binary"
+ "errors"
"fmt"
- "github.com/google/gopacket"
"net"
+
+ "github.com/google/gopacket"
)
// SFlowRecord holds both flow sample records and counter sample records.
@@ -96,6 +98,17 @@ func (sdc SFlowDataSource) decode() (SFlowSourceFormat, SFlowSourceValue) {
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
@@ -176,7 +189,7 @@ type SFlowDataFormat uint32
func (sdf SFlowDataFormat) decode() (SFlowEnterpriseID, SFlowSampleType) {
leftField := sdf >> 12
- rightField := uint32(0xFFFFF) & uint32(sdf)
+ rightField := uint32(0xFFF) & uint32(sdf)
return SFlowEnterpriseID(leftField), SFlowSampleType(rightField)
}
@@ -303,23 +316,30 @@ func (s *SFlowDatagram) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback)
_, sampleType := sdf.decode()
switch sampleType {
case SFlowTypeFlowSample:
- if flowSample, err := decodeFlowSample(&data); err == nil {
+ if flowSample, err := decodeFlowSample(&data, false); err == nil {
s.FlowSamples = append(s.FlowSamples, flowSample)
} else {
return err
}
case SFlowTypeCounterSample:
- if counterSample, err := decodeCounterSample(&data); err == nil {
+ if counterSample, err := decodeCounterSample(&data, false); err == nil {
s.CounterSamples = append(s.CounterSamples, counterSample)
} else {
return err
}
case SFlowTypeExpandedFlowSample:
- // TODO
- return fmt.Errorf("Unsupported SFlow sample type TypeExpandedFlowSample")
+ if flowSample, err := decodeFlowSample(&data, true); err == nil {
+ s.FlowSamples = append(s.FlowSamples, flowSample)
+ } else {
+ return err
+ }
case SFlowTypeExpandedCounterSample:
- // TODO
- return fmt.Errorf("Unsupported SFlow sample type TypeExpandedCounterSample")
+ 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)
}
@@ -330,24 +350,26 @@ func (s *SFlowDatagram) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback)
// 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
- InputInterface uint32
- OutputInterface uint32
- RecordCount uint32
- Records []SFlowRecord
+ 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:
+// Flow record format: type 1
// 0 15 31
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
@@ -375,11 +397,46 @@ type SFlowFlowSample struct {
// / /
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// 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(0xFFFFF) & uint32(fdf)
+ rightField := uint32(0xFFF) & uint32(fdf)
return SFlowEnterpriseID(leftField), SFlowFlowRecordType(rightField)
}
@@ -396,7 +453,7 @@ func skipRecord(data *[]byte) {
*data = (*data)[(recordLength+((4-recordLength)%4))+8:]
}
-func decodeFlowSample(data *[]byte) (SFlowFlowSample, error) {
+func decodeFlowSample(data *[]byte, expanded bool) (SFlowFlowSample, error) {
s := SFlowFlowSample{}
var sdf SFlowDataFormat
*data, sdf = (*data)[4:], SFlowDataFormat(binary.BigEndian.Uint32((*data)[:4]))
@@ -405,98 +462,172 @@ func decodeFlowSample(data *[]byte) (SFlowFlowSample, error) {
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])
- *data, sdc = (*data)[4:], SFlowDataSource(binary.BigEndian.Uint32((*data)[:4]))
- s.SourceIDClass, s.SourceIDIndex = sdc.decode()
+ 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])
- *data, s.InputInterface = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
- *data, s.OutputInterface = (*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
+ enterpriseID, flowRecordType := rdf.decode()
+
+ // Try to decode when EnterpriseID is 0 signaling
+ // default sflow structs are used according specification
+ // Unexpected behavior detected for e.g. with pmacct
+ if enterpriseID == 0 {
+ 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:
+ if record, err := decodeEthernetFrameFlowRecord(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ 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)
}
- 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, fmt.Errorf("skipping TypeEthernetFrameFlow")
- case SFlowTypeIpv4Flow:
- // TODO
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeIpv4Flow")
- case SFlowTypeIpv6Flow:
- // TODO
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeIpv6Flow")
- case SFlowTypeExtendedMlpsFlow:
- // TODO
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeExtendedMlpsFlow")
- case SFlowTypeExtendedNatFlow:
- // TODO
+ } else {
skipRecord(data)
- return s, fmt.Errorf("skipping TypeExtendedNatFlow")
- case SFlowTypeExtendedMlpsTunnelFlow:
- // TODO
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeExtendedMlpsTunnelFlow")
- case SFlowTypeExtendedMlpsVcFlow:
- // TODO
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeExtendedMlpsVcFlow")
- case SFlowTypeExtendedMlpsFecFlow:
- // TODO
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeExtendedMlpsFecFlow")
- case SFlowTypeExtendedMlpsLvpFecFlow:
- // TODO
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeExtendedMlpsLvpFecFlow")
- case SFlowTypeExtendedVlanFlow:
- // TODO
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeExtendedVlanFlow")
- default:
- return s, fmt.Errorf("Unsupported flow record type: %d", flowRecordType)
}
}
return s, nil
@@ -537,7 +668,7 @@ type SFlowCounterDataFormat uint32
func (cdf SFlowCounterDataFormat) decode() (SFlowEnterpriseID, SFlowCounterRecordType) {
leftField := cdf >> 12
- rightField := uint32(0xFFFFF) & uint32(cdf)
+ rightField := uint32(0xFFF) & uint32(cdf)
return SFlowEnterpriseID(leftField), SFlowCounterRecordType(rightField)
}
@@ -562,7 +693,12 @@ const (
SFlowTypeTokenRingInterfaceCounters SFlowCounterRecordType = 3
SFlowType100BaseVGInterfaceCounters SFlowCounterRecordType = 4
SFlowTypeVLANCounters SFlowCounterRecordType = 5
+ SFlowTypeLACPCounters SFlowCounterRecordType = 7
SFlowTypeProcessorCounters SFlowCounterRecordType = 1001
+ SFlowTypeOpenflowPortCounters SFlowCounterRecordType = 1004
+ SFlowTypePORTNAMECounters SFlowCounterRecordType = 1005
+ SFLowTypeAPPRESOURCESCounters SFlowCounterRecordType = 2203
+ SFlowTypeOVSDPCounters SFlowCounterRecordType = 2207
)
func (cr SFlowCounterRecordType) String() string {
@@ -577,25 +713,41 @@ func (cr SFlowCounterRecordType) String() string {
return "100BaseVG Interface Counters"
case SFlowTypeVLANCounters:
return "VLAN Counters"
+ case SFlowTypeLACPCounters:
+ return "LACP Counters"
case SFlowTypeProcessorCounters:
return "Processor Counters"
+ case SFlowTypeOpenflowPortCounters:
+ return "Openflow Port Counters"
+ case SFlowTypePORTNAMECounters:
+ return "PORT NAME Counters"
+ case SFLowTypeAPPRESOURCESCounters:
+ return "App Resources Counters"
+ case SFlowTypeOVSDPCounters:
+ return "OVSDP Counters"
default:
return ""
}
}
-func decodeCounterSample(data *[]byte) (SFlowCounterSample, error) {
+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])
- *data, sdc = (*data)[4:], SFlowDataSource(binary.BigEndian.Uint32((*data)[:4]))
- s.SourceIDClass, s.SourceIDIndex = sdc.decode()
+ 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++ {
@@ -616,16 +768,52 @@ func decodeCounterSample(data *[]byte) (SFlowCounterSample, error) {
}
case SFlowTypeTokenRingInterfaceCounters:
skipRecord(data)
- return s, fmt.Errorf("skipping TypeTokenRingInterfaceCounters")
+ return s, errors.New("skipping TypeTokenRingInterfaceCounters")
case SFlowType100BaseVGInterfaceCounters:
skipRecord(data)
- return s, fmt.Errorf("skipping Type100BaseVGInterfaceCounters")
+ return s, errors.New("skipping Type100BaseVGInterfaceCounters")
case SFlowTypeVLANCounters:
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeVLANCounters")
+ if record, err := decodeVLANCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeLACPCounters:
+ if record, err := decodeLACPCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
case SFlowTypeProcessorCounters:
- skipRecord(data)
- return s, fmt.Errorf("skipping TypeProcessorCounters")
+ if record, err := decodeProcessorCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeOpenflowPortCounters:
+ if record, err := decodeOpenflowportCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypePORTNAMECounters:
+ if record, err := decodePortnameCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFLowTypeAPPRESOURCESCounters:
+ if record, err := decodeAppresourcesCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
+ case SFlowTypeOVSDPCounters:
+ if record, err := decodeOVSDPCounters(data); err == nil {
+ s.Records = append(s.Records, record)
+ } else {
+ return s, err
+ }
default:
return s, fmt.Errorf("Invalid counter record type: %d", counterRecordType)
}
@@ -650,22 +838,30 @@ func (bfr SFlowBaseFlowRecord) GetType() SFlowFlowRecordType {
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
+ 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 {
@@ -702,6 +898,22 @@ func (rt SFlowFlowRecordType) String() string {
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 ""
}
@@ -879,7 +1091,10 @@ type SFlowExtendedRouterFlowRecord struct {
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// | record length |
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-// | Next Hop |
+// | IP version of next hop router (1=v4|2=v6) |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Next Hop address (v4=4byte|v6=16byte) /
+// / /
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// | Next Hop Source Mask |
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
@@ -889,13 +1104,13 @@ type SFlowExtendedRouterFlowRecord struct {
func decodeExtendedRouterFlowRecord(data *[]byte) (SFlowExtendedRouterFlowRecord, error) {
er := SFlowExtendedRouterFlowRecord{}
var fdf SFlowFlowDataFormat
- var erat SFlowIPType
+ 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, erat = (*data)[4:], SFlowIPType(binary.BigEndian.Uint32((*data)[:4]))
- *data, er.NextHop = (*data)[erat.Length():], (*data)[:erat.Length()]
+ *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
@@ -907,7 +1122,7 @@ func decodeExtendedRouterFlowRecord(data *[]byte) (SFlowExtendedRouterFlowRecord
// This information is vital because it gives a picture of how much
// traffic is being sent from / received by various BGP peers.
-// Extended gatway records have the following structure:
+// Extended gateway records have the following structure:
// 0 15 31
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
@@ -915,7 +1130,10 @@ func decodeExtendedRouterFlowRecord(data *[]byte) (SFlowExtendedRouterFlowRecord
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// | record length |
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-// | Next Hop |
+// | IP version of next hop router (1=v4|2=v6) |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// / Next Hop address (v4=4byte|v6=16byte) /
+// / /
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
// | AS |
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
@@ -1430,6 +1648,354 @@ func decodeExtendedUserFlow(data *[]byte) (SFlowExtendedUserFlow, error) {
}
// **************************************************
+// 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
// **************************************************
@@ -1461,9 +2027,18 @@ func (bcr SFlowBaseCounterRecord) GetType() SFlowCounterRecordType {
return SFlowType100BaseVGInterfaceCounters
case SFlowTypeVLANCounters:
return SFlowTypeVLANCounters
+ case SFlowTypeLACPCounters:
+ return SFlowTypeLACPCounters
case SFlowTypeProcessorCounters:
return SFlowTypeProcessorCounters
-
+ case SFlowTypeOpenflowPortCounters:
+ return SFlowTypeOpenflowPortCounters
+ case SFlowTypePORTNAMECounters:
+ return SFlowTypePORTNAMECounters
+ case SFLowTypeAPPRESOURCESCounters:
+ return SFLowTypeAPPRESOURCESCounters
+ case SFlowTypeOVSDPCounters:
+ return SFlowTypeOVSDPCounters
}
unrecognized := fmt.Sprint("Unrecognized counter record type:", bcr.Format)
panic(unrecognized)
@@ -1625,3 +2200,272 @@ func decodeEthernetCounters(data *[]byte) (SFlowEthernetCounters, error) {
*data, ec.SymbolErrors = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
return ec, nil
}
+
+// VLAN Counter
+
+type SFlowVLANCounters struct {
+ SFlowBaseCounterRecord
+ VlanID uint32
+ Octets uint64
+ UcastPkts uint32
+ MulticastPkts uint32
+ BroadcastPkts uint32
+ Discards uint32
+}
+
+func decodeVLANCounters(data *[]byte) (SFlowVLANCounters, error) {
+ vc := SFlowVLANCounters{}
+ var cdf SFlowCounterDataFormat
+
+ *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ vc.EnterpriseID, vc.Format = cdf.decode()
+ vc.EnterpriseID, vc.Format = cdf.decode()
+ *data, vc.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, vc.VlanID = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, vc.Octets = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+ *data, vc.UcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, vc.MulticastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, vc.BroadcastPkts = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, vc.Discards = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ return vc, nil
+}
+
+//SFLLACPportState : SFlow LACP Port State (All(4) - 32 bit)
+type SFLLACPPortState struct {
+ PortStateAll uint32
+}
+
+//LACPcounters : LACP SFlow Counters ( 64 Bytes )
+type SFlowLACPCounters struct {
+ SFlowBaseCounterRecord
+ ActorSystemID net.HardwareAddr
+ PartnerSystemID net.HardwareAddr
+ AttachedAggID uint32
+ LacpPortState SFLLACPPortState
+ LACPDUsRx uint32
+ MarkerPDUsRx uint32
+ MarkerResponsePDUsRx uint32
+ UnknownRx uint32
+ IllegalRx uint32
+ LACPDUsTx uint32
+ MarkerPDUsTx uint32
+ MarkerResponsePDUsTx uint32
+}
+
+func decodeLACPCounters(data *[]byte) (SFlowLACPCounters, error) {
+ la := SFlowLACPCounters{}
+ var cdf SFlowCounterDataFormat
+
+ *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ la.EnterpriseID, la.Format = cdf.decode()
+ *data, la.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.ActorSystemID = (*data)[6:], (*data)[:6]
+ *data = (*data)[2:] // remove padding
+ *data, la.PartnerSystemID = (*data)[6:], (*data)[:6]
+ *data = (*data)[2:] //remove padding
+ *data, la.AttachedAggID = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.LacpPortState.PortStateAll = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.LACPDUsRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.MarkerPDUsRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.MarkerResponsePDUsRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.UnknownRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.IllegalRx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.LACPDUsTx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.MarkerPDUsTx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, la.MarkerResponsePDUsTx = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return la, 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
+}
+
+// SFlowEthernetFrameFlowRecord give additional information
+// about the sampled packet if it's available.
+// An agent may or may not provide this information.
+type SFlowEthernetFrameFlowRecord struct {
+ SFlowBaseFlowRecord
+ FrameLength uint32
+ SrcMac net.HardwareAddr
+ DstMac net.HardwareAddr
+ Type uint32
+}
+
+// Ethernet frame flow records have the following structure:
+
+// 0 15 31
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | 20 bit Interprise (0) |12 bit format |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | record length |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Source Mac Address |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Destination Mac Address |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+// | Ethernet Packet Type |
+// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+
+func decodeEthernetFrameFlowRecord(data *[]byte) (SFlowEthernetFrameFlowRecord, error) {
+ es := SFlowEthernetFrameFlowRecord{}
+ 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.FrameLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, es.SrcMac = (*data)[8:], net.HardwareAddr((*data)[:6])
+ *data, es.DstMac = (*data)[8:], net.HardwareAddr((*data)[:6])
+ *data, es.Type = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ return es, nil
+}
+
+//SFlowOpenflowPortCounters : OVS-Sflow OpenFlow Port Counter ( 20 Bytes )
+type SFlowOpenflowPortCounters struct {
+ SFlowBaseCounterRecord
+ DatapathID uint64
+ PortNo uint32
+}
+
+func decodeOpenflowportCounters(data *[]byte) (SFlowOpenflowPortCounters, error) {
+ ofp := SFlowOpenflowPortCounters{}
+ var cdf SFlowCounterDataFormat
+
+ *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ ofp.EnterpriseID, ofp.Format = cdf.decode()
+ *data, ofp.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, ofp.DatapathID = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+ *data, ofp.PortNo = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return ofp, nil
+}
+
+//SFlowAppresourcesCounters : OVS_Sflow App Resources Counter ( 48 Bytes )
+type SFlowAppresourcesCounters struct {
+ SFlowBaseCounterRecord
+ UserTime uint32
+ SystemTime uint32
+ MemUsed uint64
+ MemMax uint64
+ FdOpen uint32
+ FdMax uint32
+ ConnOpen uint32
+ ConnMax uint32
+}
+
+func decodeAppresourcesCounters(data *[]byte) (SFlowAppresourcesCounters, error) {
+ app := SFlowAppresourcesCounters{}
+ var cdf SFlowCounterDataFormat
+
+ *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ app.EnterpriseID, app.Format = cdf.decode()
+ *data, app.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, app.UserTime = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, app.SystemTime = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, app.MemUsed = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+ *data, app.MemMax = (*data)[8:], binary.BigEndian.Uint64((*data)[:8])
+ *data, app.FdOpen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, app.FdMax = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, app.ConnOpen = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, app.ConnMax = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return app, nil
+}
+
+//SFlowOVSDPCounters : OVS-Sflow DataPath Counter ( 32 Bytes )
+type SFlowOVSDPCounters struct {
+ SFlowBaseCounterRecord
+ NHit uint32
+ NMissed uint32
+ NLost uint32
+ NMaskHit uint32
+ NFlows uint32
+ NMasks uint32
+}
+
+func decodeOVSDPCounters(data *[]byte) (SFlowOVSDPCounters, error) {
+ dp := SFlowOVSDPCounters{}
+ var cdf SFlowCounterDataFormat
+
+ *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ dp.EnterpriseID, dp.Format = cdf.decode()
+ *data, dp.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, dp.NHit = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, dp.NMissed = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, dp.NLost = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, dp.NMaskHit = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, dp.NFlows = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, dp.NMasks = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+
+ return dp, nil
+}
+
+//SFlowPORTNAME : OVS-Sflow PORTNAME Counter Sampletype ( 20 Bytes )
+type SFlowPORTNAME struct {
+ SFlowBaseCounterRecord
+ Len uint32
+ Str string
+}
+
+func decodePortnameCounters(data *[]byte) (SFlowPORTNAME, error) {
+ pn := SFlowPORTNAME{}
+ var cdf SFlowCounterDataFormat
+
+ *data, cdf = (*data)[4:], SFlowCounterDataFormat(binary.BigEndian.Uint32((*data)[:4]))
+ pn.EnterpriseID, pn.Format = cdf.decode()
+ *data, pn.FlowDataLength = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, pn.Len = (*data)[4:], binary.BigEndian.Uint32((*data)[:4])
+ *data, pn.Str = (*data)[8:], string(binary.BigEndian.Uint64((*data)[:8]))
+
+ return pn, nil
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow_test.go
index a070465cbea..0e964522a54 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sflow_test.go
@@ -6,9 +6,11 @@
package layers
import (
- "github.com/google/gopacket"
+ "net"
"reflect"
"testing"
+
+ "github.com/google/gopacket"
)
// Test packet collected from live network. See the test below for contents
@@ -187,6 +189,196 @@ var SFlowTestPacket2 = []byte{
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,
+}
+
+//Counter Sample - OVS-SFlow Counter Sample Types: OpenFLow Port, PORT Name, APPResources, OVSDP Counter
+var SFlowTestPacket9 = []byte{
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+ 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0xe5, 0x05, 0xae, 0x16, 0x18,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x0d, 0x30,
+ 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x0c,
+ 0x00, 0x00, 0x7e, 0x60, 0x69, 0x73, 0x8f, 0x42,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xed,
+ 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08,
+ 0x00, 0x00, 0x7f, 0xff, 0x00, 0x7b, 0xcc, 0xe0,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5c,
+ 0x00, 0x00, 0x07, 0x0a, 0x02, 0x00, 0x03, 0xe8,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x9b,
+ 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0xa8, 0x65,
+ 0x00, 0x00, 0xc5, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x89, 0xe0, 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, 0x08, 0x9f,
+ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x94,
+ 0x00, 0x00, 0x02, 0xe8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x4f, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x02,
+}
+
+// Vlan counter samples
+var SFlowTestPacket10 = []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, 0x00, 0x05,
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0a,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x8c, 0x2c, 0xcc,
+ 0x00, 0x00, 0x96, 0x83, 0x00, 0x02, 0x90, 0x16,
+ 0x00, 0x01, 0xf6, 0x73, 0x00, 0x00, 0x00, 0x00,
+}
+
+//LACP counter samples
+var SFlowTestPacket11 = []byte{
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
+ 0x7f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0xe5, 0x05, 0xae, 0x16, 0x18,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x0d, 0x30,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38,
+ 0x7e, 0x60, 0x69, 0x73, 0x8f, 0x42, 0x00, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x05, 0x75, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x95,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+}
+
+// Test packet collected from live network. - contains ethernet frame flow record
+var SFlowEthernetFramePacket = []byte{
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0xb9, 0x78, 0x16, 0xf6, 0x00, 0x01, 0x86, 0xa0,
+ 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x32, 0x97, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8,
+ 0x00, 0x01, 0xe8, 0x48, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x00, 0x1d, 0xb5, 0xa2, 0x5f, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x7e,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x01, 0xec, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00,
+ 0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8,
+ 0x00, 0x01, 0xf0, 0x18, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x01, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00,
+ 0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8,
+ 0x00, 0x01, 0xf7, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x9e, 0x2b, 0xbb, 0x23, 0x50, 0xb5, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x82,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x01, 0xfb, 0xd0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x1d, 0xb5, 0xa2, 0x5f, 0xc0, 0x00, 0x00,
+ 0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xe8,
+ 0x00, 0x01, 0xff, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x25, 0x90, 0xa2, 0x53, 0x58, 0x00, 0x00, 0x9e, 0x2b, 0xbb, 0x23, 0x50, 0xb5, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03,
+}
+
func TestDecodeUDPSFlow(t *testing.T) {
p := gopacket.NewPacket(SFlowTestPacket1, LayerTypeEthernet, gopacket.Default)
if p.ErrorLayer() != nil {
@@ -793,6 +985,747 @@ func TestPacketPacket0(t *testing.T) {
}
}
+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 TestDecodeEthernetFrameFlow(t *testing.T) {
+ p := gopacket.NewPacket(SFlowEthernetFramePacket, 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: net.IP{0xb9, 0x78, 0x16, 0xf6},
+ SubAgentID: 0x186a0,
+ SequenceNumber: 0xb,
+ AgentUptime: 0x3297,
+ SampleCount: 0x7,
+ FlowSamples: []SFlowFlowSample{
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0x40,
+ SequenceNumber: 0x7d,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x3,
+ SamplingRate: 0x3e8,
+ SamplePool: 0x1e848,
+ Dropped: 0x0,
+ InputInterfaceFormat: 0x0,
+ InputInterface: 0x3fffffff,
+ OutputInterfaceFormat: 0x0,
+ OutputInterface: 0x3,
+ RecordCount: 0x1,
+ Records: []SFlowRecord{
+ SFlowEthernetFrameFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ 0x0,
+ 0x2,
+ 0x18,
+ },
+ FrameLength: 0x10,
+ SrcMac: net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},
+ DstMac: net.HardwareAddr{0x0, 0x1d, 0xb5, 0xa2, 0x5f, 0xc0},
+ Type: 0x3,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0x40,
+ SequenceNumber: 0x7e,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x3,
+ SamplingRate: 0x3e8,
+ SamplePool: 0x1ec30,
+ Dropped: 0x0,
+ InputInterfaceFormat: 0x0,
+ InputInterface: 0x3fffffff,
+ OutputInterfaceFormat: 0x0,
+ OutputInterface: 0x3,
+ RecordCount: 0x1,
+ Records: []SFlowRecord{
+ SFlowEthernetFrameFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x2,
+ FlowDataLength: 0x18,
+ }, FrameLength: 0x10,
+ SrcMac: net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},
+ DstMac: net.HardwareAddr{0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7},
+ Type: 0x3,
+ },
+ },
+ }, SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0x40,
+ SequenceNumber: 0x7f,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x3,
+ SamplingRate: 0x3e8,
+ SamplePool: 0x1f018,
+ Dropped: 0x0,
+ InputInterfaceFormat: 0x0,
+ InputInterface: 0x3fffffff,
+ OutputInterfaceFormat: 0x0,
+ OutputInterface: 0x3,
+ RecordCount: 0x1,
+ Records: []SFlowRecord{
+ SFlowEthernetFrameFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x2,
+ FlowDataLength: 0x18,
+ },
+ FrameLength: 0x10,
+ SrcMac: net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},
+ DstMac: net.HardwareAddr{0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7},
+ Type: 0x3,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0x40,
+ SequenceNumber: 0x80,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x3,
+ SamplingRate: 0x3e8,
+ SamplePool: 0x1f400,
+ Dropped: 0x0,
+ InputInterfaceFormat: 0x0,
+ InputInterface: 0x3fffffff,
+ OutputInterfaceFormat: 0x0,
+ OutputInterface: 0x3,
+ RecordCount: 0x1,
+ Records: []SFlowRecord{
+ SFlowEthernetFrameFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x2,
+ FlowDataLength: 0x18,
+ },
+ FrameLength: 0x10,
+ SrcMac: net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},
+ DstMac: net.HardwareAddr{0x7a, 0x7d, 0x48, 0x51, 0xaa, 0xc7},
+ Type: 0x3,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0x40,
+ SequenceNumber: 0x81,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x3,
+ SamplingRate: 0x3e8,
+ SamplePool: 0x1f7e8,
+ Dropped: 0x0,
+ InputInterfaceFormat: 0x0,
+ InputInterface: 0x3fffffff,
+ OutputInterfaceFormat: 0x0,
+ OutputInterface: 0x3,
+ RecordCount: 0x1,
+ Records: []SFlowRecord{
+ SFlowEthernetFrameFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x2,
+ FlowDataLength: 0x18,
+ },
+ FrameLength: 0x10,
+ SrcMac: net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},
+ DstMac: net.HardwareAddr{0x9e, 0x2b, 0xbb, 0x23, 0x50, 0xb5},
+ Type: 0x3,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0x40,
+ SequenceNumber: 0x82,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x3,
+ SamplingRate: 0x3e8,
+ SamplePool: 0x1fbd0,
+ Dropped: 0x0,
+ InputInterfaceFormat: 0x0,
+ InputInterface: 0x3,
+ OutputInterfaceFormat: 0x0,
+ OutputInterface: 0x3fffffff,
+ RecordCount: 0x1,
+ Records: []SFlowRecord{
+ SFlowEthernetFrameFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x2,
+ FlowDataLength: 0x18,
+ },
+ FrameLength: 0x10,
+ SrcMac: net.HardwareAddr{0x0, 0x1d, 0xb5, 0xa2, 0x5f, 0xc0},
+ DstMac: net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},
+ Type: 0x3,
+ },
+ },
+ },
+ SFlowFlowSample{
+ EnterpriseID: 0x0,
+ Format: 0x1,
+ SampleLength: 0x40,
+ SequenceNumber: 0x83,
+ SourceIDClass: 0x0,
+ SourceIDIndex: 0x3,
+ SamplingRate: 0x3e8,
+ SamplePool: 0x1ffb8,
+ Dropped: 0x0,
+ InputInterfaceFormat: 0x0,
+ InputInterface: 0x3fffffff,
+ OutputInterfaceFormat: 0x0,
+ OutputInterface: 0x3,
+ RecordCount: 0x1,
+ Records: []SFlowRecord{
+ SFlowEthernetFrameFlowRecord{
+ SFlowBaseFlowRecord: SFlowBaseFlowRecord{
+ EnterpriseID: 0x0,
+ Format: 0x2,
+ FlowDataLength: 0x18,
+ },
+ FrameLength: 0x10,
+ SrcMac: net.HardwareAddr{0x0, 0x25, 0x90, 0xa2, 0x53, 0x58},
+ DstMac: net.HardwareAddr{0x9e, 0x2b, 0xbb, 0x23, 0x50, 0xb5},
+ Type: 0x3,
+ },
+ },
+ },
+ },
+ CounterSamples: []SFlowCounterSample(nil),
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+}
+
+func TestDecodeOVSSFlowCounter(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket9, 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, 0x00, 0x00, 0x01},
+ SubAgentID: uint32(0x00),
+ SequenceNumber: uint32(14565), //38e5
+ AgentUptime: uint32(95295000), //5AE1618
+ SampleCount: uint32(2),
+ CounterSamples: []SFlowCounterSample{
+ SFlowCounterSample{
+ Format: SFlowTypeCounterSample,
+ SampleLength: 0x34, //52
+ SequenceNumber: 0x0d30,
+ SourceIDClass: 0x00,
+ SourceIDIndex: 0x4b,
+ RecordCount: 0x02,
+ Records: []SFlowRecord{
+ SFlowOpenflowPortCounters{
+ SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeOpenflowPortCounters,
+ FlowDataLength: 0x0c,
+ },
+ DatapathID: 0x7e6069738f42,
+ PortNo: 0x02,
+ },
+ SFlowPORTNAME{
+ SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypePORTNAMECounters,
+ FlowDataLength: 0x0c,
+ },
+ Len: 0x08,
+ Str: string(0x00007fff007bcce0), //assining a pointer to a char or string
+ },
+ },
+ },
+ SFlowCounterSample{
+ Format: SFlowTypeCounterSample,
+ SampleLength: 0x5c, //92
+ SequenceNumber: 0x070a, //1802
+ SourceIDClass: 0x00, //single interface
+ SourceIDIndex: 0x20003e8, //33555432, 20003E8
+ RecordCount: 0x02, //2
+ Records: []SFlowRecord{
+ SFlowAppresourcesCounters{
+ SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+ EnterpriseID: 0x0,
+ Format: SFLowTypeAPPRESOURCESCounters, //89B
+ FlowDataLength: 0x28, //40
+ },
+ UserTime: uint32(43109), //A865
+ SystemTime: uint32(50438), //C506
+ MemUsed: uint64(109699072), //689E000
+ MemMax: uint64(0),
+ FdOpen: uint32(0),
+ FdMax: uint32(0),
+ ConnOpen: uint32(0),
+ ConnMax: uint32(0),
+ },
+ SFlowOVSDPCounters{
+ SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeOVSDPCounters, //89F
+ FlowDataLength: 0x18, //24
+ },
+ NHit: uint32(2196),
+ NMissed: uint32(744),
+ NLost: uint32(0),
+ NMaskHit: uint32(3151),
+ NFlows: uint32(1),
+ NMasks: uint32(2),
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+}
+
+func TestDecodeVLANCounter(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket10, 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{
+ SFlowVLANCounters{
+ SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeVLANCounters,
+ FlowDataLength: 0x1c,
+ },
+ VlanID: 0x0a,
+ Octets: 0x018c2ccc,
+ UcastPkts: 0x9683,
+ MulticastPkts: 0x029016,
+ BroadcastPkts: 0x01f673,
+ Discards: 0x00,
+ },
+ },
+ },
+ },
+ }
+ if !reflect.DeepEqual(want, got) {
+ t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got)
+ }
+}
+
+func TestDecodeLACPCounter(t *testing.T) {
+ p := gopacket.NewPacket(SFlowTestPacket11, 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, 0x00, 0x00, 0x01},
+ SubAgentID: uint32(0x00),
+ SequenceNumber: uint32(14565), //38e5
+ AgentUptime: uint32(95295000), //5AE1618
+ SampleCount: uint32(1),
+ CounterSamples: []SFlowCounterSample{
+ SFlowCounterSample{
+ Format: SFlowTypeCounterSample,
+ SampleLength: 0x74,
+ SequenceNumber: 0x0d30,
+ SourceIDClass: 0x00,
+ SourceIDIndex: 0x1,
+ RecordCount: 0x01,
+ Records: []SFlowRecord{
+ SFlowLACPCounters{
+ SFlowBaseCounterRecord: SFlowBaseCounterRecord{
+ EnterpriseID: 0x0,
+ Format: SFlowTypeLACPCounters,
+ FlowDataLength: 0x38,
+ },
+ ActorSystemID: net.HardwareAddr{0x7e, 0x60, 0x69, 0x73, 0x8f, 0x42},
+ PartnerSystemID: net.HardwareAddr{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ AttachedAggID: uint32(1),
+ LacpPortState: SFLLACPPortState{PortStateAll: uint32(91553792)},
+ LACPDUsRx: uint32(0),
+ MarkerPDUsRx: uint32(4294967295),
+ MarkerResponsePDUsRx: uint32(4294967295),
+ UnknownRx: uint32(4294967295),
+ IllegalRx: uint32(0),
+ LACPDUsTx: uint32(1173),
+ MarkerPDUsTx: uint32(4294967295),
+ MarkerResponsePDUsTx: uint32(4294967295),
+ },
+ },
+ },
+ },
+ }
+ 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)
@@ -805,6 +1738,36 @@ func BenchmarkDecodeSFlowPacket2(b *testing.B) {
}
}
+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 BenchmarkDecodeSFlowPacket9(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(SFlowTestPacket9, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+func BenchmarkDecodeSFlowPacket10(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(SFlowTestPacket10, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
+func BenchmarkDecodeSFlowPacket11(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ gopacket.NewPacket(SFlowTestPacket11, LinkTypeEthernet, gopacket.NoCopy)
+ }
+}
+
func BenchmarkDecodeSFlowLayerPacket1(b *testing.B) {
var sflow SFlowDatagram
for i := 0; i < b.N; i++ {
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sip.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sip.go
new file mode 100644
index 00000000000..01ab7907841
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sip.go
@@ -0,0 +1,536 @@
+// 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 (
+ "bytes"
+ "fmt"
+ "io"
+ "strconv"
+ "strings"
+
+ "github.com/google/gopacket"
+)
+
+// SIPVersion defines the different versions of the SIP Protocol
+type SIPVersion uint8
+
+// Represents all the versions of SIP protocol
+const (
+ SIPVersion1 SIPVersion = 1
+ SIPVersion2 SIPVersion = 2
+)
+
+func (sv SIPVersion) String() string {
+ switch sv {
+ default:
+ // Defaulting to SIP/2.0
+ return "SIP/2.0"
+ case SIPVersion1:
+ return "SIP/1.0"
+ case SIPVersion2:
+ return "SIP/2.0"
+ }
+}
+
+// GetSIPVersion is used to get SIP version constant
+func GetSIPVersion(version string) (SIPVersion, error) {
+ switch strings.ToUpper(version) {
+ case "SIP/1.0":
+ return SIPVersion1, nil
+ case "SIP/2.0":
+ return SIPVersion2, nil
+ default:
+ return 0, fmt.Errorf("Unknown SIP version: '%s'", version)
+
+ }
+}
+
+// SIPMethod defines the different methods of the SIP Protocol
+// defined in the different RFC's
+type SIPMethod uint16
+
+// Here are all the SIP methods
+const (
+ SIPMethodInvite SIPMethod = 1 // INVITE [RFC3261]
+ SIPMethodAck SIPMethod = 2 // ACK [RFC3261]
+ SIPMethodBye SIPMethod = 3 // BYE [RFC3261]
+ SIPMethodCancel SIPMethod = 4 // CANCEL [RFC3261]
+ SIPMethodOptions SIPMethod = 5 // OPTIONS [RFC3261]
+ SIPMethodRegister SIPMethod = 6 // REGISTER [RFC3261]
+ SIPMethodPrack SIPMethod = 7 // PRACK [RFC3262]
+ SIPMethodSubscribe SIPMethod = 8 // SUBSCRIBE [RFC6665]
+ SIPMethodNotify SIPMethod = 9 // NOTIFY [RFC6665]
+ SIPMethodPublish SIPMethod = 10 // PUBLISH [RFC3903]
+ SIPMethodInfo SIPMethod = 11 // INFO [RFC6086]
+ SIPMethodRefer SIPMethod = 12 // REFER [RFC3515]
+ SIPMethodMessage SIPMethod = 13 // MESSAGE [RFC3428]
+ SIPMethodUpdate SIPMethod = 14 // UPDATE [RFC3311]
+ SIPMethodPing SIPMethod = 15 // PING [https://tools.ietf.org/html/draft-fwmiller-ping-03]
+)
+
+func (sm SIPMethod) String() string {
+ switch sm {
+ default:
+ return "Unknown method"
+ case SIPMethodInvite:
+ return "INVITE"
+ case SIPMethodAck:
+ return "ACK"
+ case SIPMethodBye:
+ return "BYE"
+ case SIPMethodCancel:
+ return "CANCEL"
+ case SIPMethodOptions:
+ return "OPTIONS"
+ case SIPMethodRegister:
+ return "REGISTER"
+ case SIPMethodPrack:
+ return "PRACK"
+ case SIPMethodSubscribe:
+ return "SUBSCRIBE"
+ case SIPMethodNotify:
+ return "NOTIFY"
+ case SIPMethodPublish:
+ return "PUBLISH"
+ case SIPMethodInfo:
+ return "INFO"
+ case SIPMethodRefer:
+ return "REFER"
+ case SIPMethodMessage:
+ return "MESSAGE"
+ case SIPMethodUpdate:
+ return "UPDATE"
+ case SIPMethodPing:
+ return "PING"
+ }
+}
+
+// GetSIPMethod returns the constant of a SIP method
+// from its string
+func GetSIPMethod(method string) (SIPMethod, error) {
+ switch strings.ToUpper(method) {
+ case "INVITE":
+ return SIPMethodInvite, nil
+ case "ACK":
+ return SIPMethodAck, nil
+ case "BYE":
+ return SIPMethodBye, nil
+ case "CANCEL":
+ return SIPMethodCancel, nil
+ case "OPTIONS":
+ return SIPMethodOptions, nil
+ case "REGISTER":
+ return SIPMethodRegister, nil
+ case "PRACK":
+ return SIPMethodPrack, nil
+ case "SUBSCRIBE":
+ return SIPMethodSubscribe, nil
+ case "NOTIFY":
+ return SIPMethodNotify, nil
+ case "PUBLISH":
+ return SIPMethodPublish, nil
+ case "INFO":
+ return SIPMethodInfo, nil
+ case "REFER":
+ return SIPMethodRefer, nil
+ case "MESSAGE":
+ return SIPMethodMessage, nil
+ case "UPDATE":
+ return SIPMethodUpdate, nil
+ case "PING":
+ return SIPMethodPing, nil
+ default:
+ return 0, fmt.Errorf("Unknown SIP method: '%s'", method)
+ }
+}
+
+// Here is a correspondance between long header names and short
+// as defined in rfc3261 in section 20
+var compactSipHeadersCorrespondance = map[string]string{
+ "accept-contact": "a",
+ "allow-events": "u",
+ "call-id": "i",
+ "contact": "m",
+ "content-encoding": "e",
+ "content-length": "l",
+ "content-type": "c",
+ "event": "o",
+ "from": "f",
+ "identity": "y",
+ "refer-to": "r",
+ "referred-by": "b",
+ "reject-contact": "j",
+ "request-disposition": "d",
+ "session-expires": "x",
+ "subject": "s",
+ "supported": "k",
+ "to": "t",
+ "via": "v",
+}
+
+// SIP object will contains information about decoded SIP packet.
+// -> The SIP Version
+// -> The SIP Headers (in a map[string][]string because of multiple headers with the same name
+// -> The SIP Method
+// -> The SIP Response code (if it's a response)
+// -> The SIP Status line (if it's a response)
+// You can easily know the type of the packet with the IsResponse boolean
+//
+type SIP struct {
+ BaseLayer
+
+ // Base information
+ Version SIPVersion
+ Method SIPMethod
+ Headers map[string][]string
+
+ // Request
+ RequestURI string
+
+ // Response
+ IsResponse bool
+ ResponseCode int
+ ResponseStatus string
+
+ // Private fields
+ cseq int64
+ contentLength int64
+ lastHeaderParsed string
+}
+
+// decodeSIP decodes the byte slice into a SIP type. It also
+// setups the application Layer in PacketBuilder.
+func decodeSIP(data []byte, p gopacket.PacketBuilder) error {
+ s := NewSIP()
+ err := s.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(s)
+ p.SetApplicationLayer(s)
+ return nil
+}
+
+// NewSIP instantiates a new empty SIP object
+func NewSIP() *SIP {
+ s := new(SIP)
+ s.Headers = make(map[string][]string)
+ return s
+}
+
+// LayerType returns gopacket.LayerTypeSIP.
+func (s *SIP) LayerType() gopacket.LayerType {
+ return LayerTypeSIP
+}
+
+// Payload returns the base layer payload
+func (s *SIP) Payload() []byte {
+ return s.BaseLayer.Payload
+}
+
+// DecodeFromBytes decodes the slice into the SIP struct.
+func (s *SIP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+
+ // Init some vars for parsing follow-up
+ var countLines int
+ var line []byte
+ var err error
+
+ // Clean leading new line
+ data = bytes.Trim(data, "\n")
+
+ // Iterate on all lines of the SIP Headers
+ // and stop when we reach the SDP (aka when the new line
+ // is at index 0 of the remaining packet)
+ buffer := bytes.NewBuffer(data)
+
+ for {
+
+ // Read next line
+ line, err = buffer.ReadBytes(byte('\n'))
+ if err != nil {
+ if err == io.EOF {
+ break
+ } else {
+ return err
+ }
+ }
+
+ // Trim the new line delimiters
+ line = bytes.Trim(line, "\r\n")
+
+ // Empty line, we hit Body
+ // Putting packet remain in Paypload
+ if len(line) == 0 {
+ s.BaseLayer.Payload = buffer.Bytes()
+ break
+ }
+
+ // First line is the SIP request/response line
+ // Other lines are headers
+ if countLines == 0 {
+ err = s.ParseFirstLine(line)
+ if err != nil {
+ return err
+ }
+
+ } else {
+ err = s.ParseHeader(line)
+ if err != nil {
+ return err
+ }
+ }
+
+ countLines++
+ }
+
+ return nil
+}
+
+// ParseFirstLine will compute the first line of a SIP packet.
+// The first line will tell us if it's a request or a response.
+//
+// Examples of first line of SIP Prococol :
+//
+// Request : INVITE bob@example.com SIP/2.0
+// Response : SIP/2.0 200 OK
+// Response : SIP/2.0 501 Not Implemented
+//
+func (s *SIP) ParseFirstLine(firstLine []byte) error {
+
+ var err error
+
+ // Splits line by space
+ splits := strings.SplitN(string(firstLine), " ", 3)
+
+ // We must have at least 3 parts
+ if len(splits) < 3 {
+ return fmt.Errorf("invalid first SIP line: '%s'", string(firstLine))
+ }
+
+ // Determine the SIP packet type
+ if strings.HasPrefix(splits[0], "SIP") {
+
+ // --> Response
+ s.IsResponse = true
+
+ // Validate SIP Version
+ s.Version, err = GetSIPVersion(splits[0])
+ if err != nil {
+ return err
+ }
+
+ // Compute code
+ s.ResponseCode, err = strconv.Atoi(splits[1])
+ if err != nil {
+ return err
+ }
+
+ // Compute status line
+ s.ResponseStatus = splits[2]
+
+ } else {
+
+ // --> Request
+
+ // Validate method
+ s.Method, err = GetSIPMethod(splits[0])
+ if err != nil {
+ return err
+ }
+
+ s.RequestURI = splits[1]
+
+ // Validate SIP Version
+ s.Version, err = GetSIPVersion(splits[2])
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// ParseHeader will parse a SIP Header
+// SIP Headers are quite simple, there are colon separated name and value
+// Headers can be spread over multiple lines
+//
+// Examples of header :
+//
+// CSeq: 1 REGISTER
+// Via: SIP/2.0/UDP there.com:5060
+// Authorization:Digest username="UserB",
+// realm="MCI WorldCom SIP",
+// nonce="1cec4341ae6cbe5a359ea9c8e88df84f", opaque="",
+// uri="sip:ss2.wcom.com", response="71ba27c64bd01de719686aa4590d5824"
+//
+func (s *SIP) ParseHeader(header []byte) (err error) {
+
+ // Ignore empty headers
+ if len(header) == 0 {
+ return
+ }
+
+ // Check if this is the following of last header
+ // RFC 3261 - 7.3.1 - Header Field Format specify that following lines of
+ // multiline headers must begin by SP or TAB
+ if header[0] == '\t' || header[0] == ' ' {
+
+ header = bytes.TrimSpace(header)
+ s.Headers[s.lastHeaderParsed][len(s.Headers[s.lastHeaderParsed])-1] += fmt.Sprintf(" %s", string(header))
+ return
+ }
+
+ // Find the ':' to separate header name and value
+ index := bytes.Index(header, []byte(":"))
+ if index >= 0 {
+
+ headerName := strings.ToLower(string(bytes.Trim(header[:index], " ")))
+ headerValue := string(bytes.Trim(header[index+1:], " "))
+
+ // Add header to object
+ s.Headers[headerName] = append(s.Headers[headerName], headerValue)
+ s.lastHeaderParsed = headerName
+
+ // Compute specific headers
+ err = s.ParseSpecificHeaders(headerName, headerValue)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// ParseSpecificHeaders will parse some specific key values from
+// specific headers like CSeq or Content-Length integer values
+func (s *SIP) ParseSpecificHeaders(headerName string, headerValue string) (err error) {
+
+ switch headerName {
+ case "cseq":
+
+ // CSeq header value is formatted like that :
+ // CSeq: 123 INVITE
+ // We split the value to parse Cseq integer value, and method
+ splits := strings.Split(headerValue, " ")
+ if len(splits) > 1 {
+
+ // Parse Cseq
+ s.cseq, err = strconv.ParseInt(splits[0], 10, 64)
+ if err != nil {
+ return err
+ }
+
+ // Validate method
+ if s.IsResponse {
+ s.Method, err = GetSIPMethod(splits[1])
+ if err != nil {
+ return err
+ }
+ }
+ }
+
+ case "content-length":
+
+ // Parse Content-Length
+ s.contentLength, err = strconv.ParseInt(headerValue, 10, 64)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// GetAllHeaders will return the full headers of the
+// current SIP packets in a map[string][]string
+func (s *SIP) GetAllHeaders() map[string][]string {
+ return s.Headers
+}
+
+// GetHeader will return all the headers with
+// the specified name.
+func (s *SIP) GetHeader(headerName string) []string {
+ headerName = strings.ToLower(headerName)
+ h := make([]string, 0)
+ if _, ok := s.Headers[headerName]; ok {
+ if len(s.Headers[headerName]) > 0 {
+ return s.Headers[headerName]
+ } else if len(s.Headers[compactSipHeadersCorrespondance[headerName]]) > 0 {
+ return s.Headers[compactSipHeadersCorrespondance[headerName]]
+ }
+ }
+ return h
+}
+
+// GetFirstHeader will return the first header with
+// the specified name. If the current SIP packet has multiple
+// headers with the same name, it returns the first.
+func (s *SIP) GetFirstHeader(headerName string) string {
+ headerName = strings.ToLower(headerName)
+ if _, ok := s.Headers[headerName]; ok {
+ if len(s.Headers[headerName]) > 0 {
+ return s.Headers[headerName][0]
+ } else if len(s.Headers[compactSipHeadersCorrespondance[headerName]]) > 0 {
+ return s.Headers[compactSipHeadersCorrespondance[headerName]][0]
+ }
+ }
+ return ""
+}
+
+//
+// Some handy getters for most used SIP headers
+//
+
+// GetAuthorization will return the Authorization
+// header of the current SIP packet
+func (s *SIP) GetAuthorization() string {
+ return s.GetFirstHeader("Authorization")
+}
+
+// GetFrom will return the From
+// header of the current SIP packet
+func (s *SIP) GetFrom() string {
+ return s.GetFirstHeader("From")
+}
+
+// GetTo will return the To
+// header of the current SIP packet
+func (s *SIP) GetTo() string {
+ return s.GetFirstHeader("To")
+}
+
+// GetContact will return the Contact
+// header of the current SIP packet
+func (s *SIP) GetContact() string {
+ return s.GetFirstHeader("Contact")
+}
+
+// GetCallID will return the Call-ID
+// header of the current SIP packet
+func (s *SIP) GetCallID() string {
+ return s.GetFirstHeader("Call-ID")
+}
+
+// GetUserAgent will return the User-Agent
+// header of the current SIP packet
+func (s *SIP) GetUserAgent() string {
+ return s.GetFirstHeader("User-Agent")
+}
+
+// GetContentLength will return the parsed integer
+// Content-Length header of the current SIP packet
+func (s *SIP) GetContentLength() int64 {
+ return s.contentLength
+}
+
+// GetCSeq will return the parsed integer CSeq header
+// header of the current SIP packet
+func (s *SIP) GetCSeq() int64 {
+ return s.cseq
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sip_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sip_test.go
new file mode 100644
index 00000000000..7c28d6bf0e7
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/sip_test.go
@@ -0,0 +1,158 @@
+// 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 (
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// First packet is a REGISTER Request
+//
+// REGISTER sip:sip.provider.com SIP/2.0
+// Via:SIP/2.0/UDP 172.16.254.66:5060;branch=z9hG4bK3e5380d454981e88702eb2269669462;rport
+// From:"Bob" <sip:bob@sip.provider.com>;tag=3718850509
+// To:"Alice" <sip:alice@sip.provider.com>
+// Call-ID:306366781@172_16_254_66
+// CSeq:3 REGISTER
+// Max-Forwards:70
+// Allow:INVITE,ACK,CANCEL,BYE,OPTIONS,INFO,SUBSCRIBE,NOTIFY,REFER,UPDATE
+// Contact: <sip:bob@172.16.254.66:5060>
+// Expires:1800
+// User-Agent:C530 IP/42.245.00.000.000
+// Content-Length:0
+//
+var testPacketSIPRequest = []byte{
+ 0x00, 0x07, 0x7d, 0x41, 0x2e, 0x40, 0x00, 0xd0, 0x03, 0x75, 0xe0, 0x00, 0x08, 0x00, 0x45, 0x00,
+ 0x01, 0xf4, 0x73, 0x74, 0x00, 0x00, 0x75, 0x11, 0xca, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
+ 0x02, 0x02, 0x13, 0xc4, 0x13, 0xc4, 0x01, 0xe0, 0x86, 0xa0, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54,
+ 0x45, 0x52, 0x20, 0x73, 0x69, 0x70, 0x3a, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69,
+ 0x64, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x53, 0x49, 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x0d,
+ 0x0a, 0x56, 0x69, 0x61, 0x3a, 0x53, 0x49, 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x2f, 0x55, 0x44, 0x50,
+ 0x20, 0x31, 0x37, 0x32, 0x2e, 0x31, 0x36, 0x2e, 0x32, 0x35, 0x34, 0x2e, 0x36, 0x36, 0x3a, 0x35,
+ 0x30, 0x36, 0x30, 0x3b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x3d, 0x7a, 0x39, 0x68, 0x47, 0x34,
+ 0x62, 0x4b, 0x33, 0x65, 0x35, 0x33, 0x38, 0x30, 0x64, 0x34, 0x35, 0x34, 0x39, 0x38, 0x31, 0x65,
+ 0x38, 0x38, 0x37, 0x30, 0x32, 0x65, 0x62, 0x32, 0x32, 0x36, 0x39, 0x36, 0x36, 0x39, 0x34, 0x36,
+ 0x32, 0x3b, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x0d, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x3a, 0x22, 0x42,
+ 0x6f, 0x62, 0x22, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x73, 0x69, 0x70,
+ 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x3b, 0x74,
+ 0x61, 0x67, 0x3d, 0x33, 0x37, 0x31, 0x38, 0x38, 0x35, 0x30, 0x35, 0x30, 0x39, 0x0d, 0x0a, 0x54,
+ 0x6f, 0x3a, 0x22, 0x41, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x61,
+ 0x6c, 0x69, 0x63, 0x65, 0x40, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x43, 0x61, 0x6c, 0x6c, 0x2d, 0x49, 0x44, 0x3a,
+ 0x33, 0x30, 0x36, 0x33, 0x36, 0x36, 0x37, 0x38, 0x31, 0x40, 0x31, 0x37, 0x32, 0x5f, 0x31, 0x36,
+ 0x5f, 0x32, 0x35, 0x34, 0x5f, 0x36, 0x36, 0x0d, 0x0a, 0x43, 0x53, 0x65, 0x71, 0x3a, 0x33, 0x20,
+ 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x0d, 0x0a, 0x4d, 0x61, 0x78, 0x2d, 0x46, 0x6f,
+ 0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x3a, 0x37, 0x30, 0x0d, 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x77,
+ 0x3a, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x2c, 0x41, 0x43, 0x4b, 0x2c, 0x43, 0x41, 0x4e, 0x43,
+ 0x45, 0x4c, 0x2c, 0x42, 0x59, 0x45, 0x2c, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x2c, 0x49,
+ 0x4e, 0x46, 0x4f, 0x2c, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x2c, 0x4e, 0x4f,
+ 0x54, 0x49, 0x46, 0x59, 0x2c, 0x52, 0x45, 0x46, 0x45, 0x52, 0x2c, 0x55, 0x50, 0x44, 0x41, 0x54,
+ 0x45, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x3a, 0x20, 0x3c, 0x73, 0x69, 0x70,
+ 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x31, 0x37, 0x32, 0x2e, 0x31, 0x36, 0x2e, 0x32, 0x35, 0x34, 0x2e,
+ 0x36, 0x36, 0x3a, 0x35, 0x30, 0x36, 0x30, 0x3e, 0x0d, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65,
+ 0x73, 0x3a, 0x31, 0x38, 0x30, 0x30, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65,
+ 0x6e, 0x74, 0x3a, 0x43, 0x35, 0x33, 0x30, 0x20, 0x49, 0x50, 0x2f, 0x34, 0x32, 0x2e, 0x32, 0x34,
+ 0x35, 0x2e, 0x30, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x0d, 0x0a, 0x43, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x30, 0x0d, 0x0a,
+ 0x0d, 0x0a,
+}
+
+// Second packet is a REGISTER Response
+//
+// SIP/2.0 200 OK
+// Via:SIP/2.0/UDP 172.16.254.66:5060;received=8.8.8.8;rport=5060;branch=z9hG4bK3e5380d454981e88702eb2269669462
+// From:"Bob" <sip:bob@sip.provider.com>;tag=3718850509
+// To:"Alice" <sip:alice@sip.provider.com>;tag=02-32748-1417c4ac-24835dbf3
+// Call-ID:306366781@172_16_254_66
+// CSeq:3 REGISTER
+// Contact: <sip:bob@172.16.254.66:5060>;expires=1800
+// P-Associated-URI: <sip:bob@sip.provider.com>
+// Content-Length:0
+//
+var testPacketSIPResponse = []byte{
+ 0x00, 0xd0, 0x00, 0x4a, 0x2c, 0x00, 0x00, 0x07, 0x7d, 0x41, 0x2e, 0x40, 0x08, 0x00, 0x45, 0x00,
+ 0x01, 0xc1, 0x00, 0x00, 0x40, 0x00, 0x3f, 0x11, 0x34, 0x27, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01,
+ 0x01, 0x01, 0x13, 0xc4, 0x13, 0xc4, 0x01, 0xad, 0x60, 0x36, 0x53, 0x49, 0x50, 0x2f, 0x32, 0x2e,
+ 0x30, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0x0d, 0x0a, 0x56, 0x69, 0x61, 0x3a, 0x53, 0x49,
+ 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x2f, 0x55, 0x44, 0x50, 0x20, 0x31, 0x37, 0x32, 0x2e, 0x31, 0x36,
+ 0x2e, 0x32, 0x35, 0x34, 0x2e, 0x36, 0x36, 0x3a, 0x35, 0x30, 0x36, 0x30, 0x3b, 0x72, 0x65, 0x63,
+ 0x65, 0x69, 0x76, 0x65, 0x64, 0x3d, 0x38, 0x2e, 0x38, 0x2e, 0x38, 0x2e, 0x38, 0x3b, 0x72, 0x70,
+ 0x6f, 0x72, 0x74, 0x3d, 0x35, 0x30, 0x36, 0x30, 0x3b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x3d,
+ 0x7a, 0x39, 0x68, 0x47, 0x34, 0x62, 0x4b, 0x33, 0x65, 0x35, 0x33, 0x38, 0x30, 0x64, 0x34, 0x35,
+ 0x34, 0x39, 0x38, 0x31, 0x65, 0x38, 0x38, 0x37, 0x30, 0x32, 0x65, 0x62, 0x32, 0x32, 0x36, 0x39,
+ 0x36, 0x36, 0x39, 0x34, 0x36, 0x32, 0x0d, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x3a, 0x22, 0x42, 0x6f,
+ 0x62, 0x22, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x73, 0x69, 0x70, 0x2e,
+ 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x3b, 0x74, 0x61,
+ 0x67, 0x3d, 0x33, 0x37, 0x31, 0x38, 0x38, 0x35, 0x30, 0x35, 0x30, 0x39, 0x0d, 0x0a, 0x54, 0x6f,
+ 0x3a, 0x22, 0x41, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x61, 0x6c,
+ 0x69, 0x63, 0x65, 0x40, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x3b, 0x74, 0x61, 0x67, 0x3d, 0x30, 0x32, 0x2d, 0x33, 0x32, 0x37,
+ 0x34, 0x38, 0x2d, 0x31, 0x34, 0x31, 0x37, 0x63, 0x34, 0x61, 0x63, 0x2d, 0x32, 0x34, 0x38, 0x33,
+ 0x35, 0x64, 0x62, 0x66, 0x33, 0x0d, 0x0a, 0x43, 0x61, 0x6c, 0x6c, 0x2d, 0x49, 0x44, 0x3a, 0x33,
+ 0x30, 0x36, 0x33, 0x36, 0x36, 0x37, 0x38, 0x31, 0x40, 0x31, 0x37, 0x32, 0x5f, 0x31, 0x36, 0x5f,
+ 0x32, 0x35, 0x34, 0x5f, 0x36, 0x36, 0x0d, 0x0a, 0x43, 0x53, 0x65, 0x71, 0x3a, 0x33, 0x20, 0x52,
+ 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74,
+ 0x3a, 0x20, 0x3c, 0x73, 0x69, 0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x31, 0x37, 0x32, 0x2e, 0x31,
+ 0x36, 0x2e, 0x32, 0x35, 0x34, 0x2e, 0x36, 0x36, 0x3a, 0x35, 0x30, 0x36, 0x30, 0x3e, 0x3b, 0x65,
+ 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x3d, 0x31, 0x38, 0x30, 0x30, 0x0d, 0x0a, 0x50, 0x2d, 0x41,
+ 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x2d, 0x55, 0x52, 0x49, 0x3a, 0x20, 0x3c,
+ 0x73, 0x69, 0x70, 0x3a, 0x62, 0x6f, 0x62, 0x40, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x76,
+ 0x69, 0x64, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x30, 0x0d, 0x0a, 0x0d, 0x0a,
+}
+
+func TestSIPMain(t *testing.T) {
+
+ expectedHeaders := map[string]string{"Call-ID": "306366781@172_16_254_66", "Contact": "<sip:bob@172.16.254.66:5060>"}
+ _TestPacketSIP(t, testPacketSIPRequest, SIPMethodRegister, false, 3, expectedHeaders, "sip:sip.provider.com")
+
+ expectedHeaders = map[string]string{"Call-ID": "306366781@172_16_254_66", "Contact": "<sip:bob@172.16.254.66:5060>;expires=1800"}
+ _TestPacketSIP(t, testPacketSIPResponse, SIPMethodRegister, true, 3, expectedHeaders, "")
+
+}
+
+func _TestPacketSIP(t *testing.T, packetData []byte, methodWanted SIPMethod, isResponse bool, wantedCseq int64, expectedHeaders map[string]string, expectedRequestURI string) {
+
+ p := gopacket.NewPacket(packetData, LinkTypeEthernet, gopacket.Default)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+
+ if got, ok := p.Layer(LayerTypeSIP).(*SIP); ok {
+
+ // Check method
+ if got.Method != methodWanted {
+ t.Errorf("SIP Packet should be a %s method, got : %s", methodWanted, got.Method)
+ }
+
+ // Check if it's right packet type
+ if got.IsResponse != isResponse {
+ t.Errorf("SIP packet type is not the same as expected")
+ }
+
+ // Check the RequestURI if it's a request
+ if !isResponse {
+ if got.RequestURI != expectedRequestURI {
+ t.Errorf("SIP packet type is not the same as expected")
+ }
+ }
+
+ // Check headers
+ for headerName, headerValue := range expectedHeaders {
+ if got.GetFirstHeader(headerName) != headerValue {
+ t.Errorf("Header %s shoud be %s, got : %s", headerName, headerValue, got.GetFirstHeader(headerName))
+ }
+ }
+
+ // Check CSeq
+ if got.GetCSeq() != wantedCseq {
+ t.Errorf("SIP Packet should be %d. Got : %d", wantedCseq, got.GetCSeq())
+ }
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/stp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/stp.go
new file mode 100644
index 00000000000..bde7d7c8ef9
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/stp.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcp.go
index 5f0fda1887f..6b37f56d0cd 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcp.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcp.go
@@ -9,8 +9,10 @@ package layers
import (
"encoding/binary"
+ "encoding/hex"
"errors"
"fmt"
+
"github.com/google/gopacket"
)
@@ -32,24 +34,95 @@ type TCP struct {
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 uint8
+ 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 1:
- return "NOP"
- case 8:
+ 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("TSOPT:%v/%v",
+ return fmt.Sprintf("TCPOption(%s:%v/%v%s)",
+ t.OptionType,
binary.BigEndian.Uint32(t.OptionData[:4]),
- binary.BigEndian.Uint32(t.OptionData[4:8]))
+ binary.BigEndian.Uint32(t.OptionData[4:8]),
+ hd)
}
}
- return fmt.Sprintf("TCPOption(%v:%v)", t.OptionType, t.OptionData)
+ return fmt.Sprintf("TCPOption(%s:%s)", t.OptionType, hd)
}
// LayerType returns gopacket.LayerTypeTCP
@@ -69,7 +142,9 @@ func (t *TCP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOpt
}
}
if opts.FixLengths {
- t.Padding = lotsOfZeros[:optionLength%4]
+ 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))
@@ -85,7 +160,7 @@ func (t *TCP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOpt
binary.BigEndian.PutUint16(bytes[18:], t.Urgent)
start := 20
for _, o := range t.Options {
- bytes[start] = o.OptionType
+ bytes[start] = byte(o.OptionType)
switch o.OptionType {
case 0, 1:
start++
@@ -95,7 +170,7 @@ func (t *TCP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOpt
}
bytes[start+1] = o.OptionLength
copy(bytes[start+2:start+len(o.OptionData)+2], o.OptionData)
- start += int(o.OptionLength)
+ start += len(o.OptionData) + 2
}
}
copy(bytes[start:], t.Padding)
@@ -113,6 +188,10 @@ func (t *TCP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOpt
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 {
@@ -146,6 +225,10 @@ func (t *TCP) flagsAndOffset() uint16 {
}
func (tcp *TCP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 20 {
+ df.SetTruncated()
+ return fmt.Errorf("Invalid TCP header. Length %d less than 20", len(data))
+ }
tcp.SrcPort = TCPPort(binary.BigEndian.Uint16(data[0:2]))
tcp.sPort = data[0:2]
tcp.DstPort = TCPPort(binary.BigEndian.Uint16(data[2:4]))
@@ -165,7 +248,12 @@ func (tcp *TCP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
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.Options == nil {
+ // Pre-allocate to avoid allocating a slice.
+ tcp.Options = tcp.opts[:0]
+ } else {
+ tcp.Options = tcp.Options[:0]
+ }
if tcp.DataOffset < 5 {
return fmt.Errorf("Invalid TCP data offset %d < 5", tcp.DataOffset)
}
@@ -181,24 +269,25 @@ func (tcp *TCP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
// 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: data[0]})
+ tcp.Options = append(tcp.Options, TCPOption{OptionType: TCPOptionKind(data[0])})
opt := &tcp.Options[len(tcp.Options)-1]
switch opt.OptionType {
- case 0: // End of options
+ case TCPOptionKindEndList: // End of options
opt.OptionLength = 1
tcp.Padding = data[1:]
break
- case 1: // 1 byte padding
+ case TCPOptionKindNop: // 1 byte padding
opt.OptionLength = 1
default:
+ if len(data) < 2 {
+ df.SetTruncated()
+ return fmt.Errorf("Invalid TCP option length. Length %d less than 2", len(data))
+ }
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) {
+ df.SetTruncated()
return fmt.Errorf("Invalid TCP option length %d exceeds remaining %d bytes", opt.OptionLength, len(data))
}
opt.OptionData = data[2:opt.OptionLength]
@@ -213,7 +302,11 @@ func (t *TCP) CanDecode() gopacket.LayerClass {
}
func (t *TCP) NextLayerType() gopacket.LayerType {
- return gopacket.LayerTypePayload
+ lt := t.DstPort.LayerType()
+ if lt == gopacket.LayerTypePayload {
+ lt = t.SrcPort.LayerType()
+ }
+ return lt
}
func decodeTCP(data []byte, p gopacket.PacketBuilder) error {
@@ -224,9 +317,21 @@ func decodeTCP(data []byte, p gopacket.PacketBuilder) error {
if err != nil {
return err
}
- return p.NextDecoder(gopacket.LayerTypePayload)
+ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcp_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcp_test.go
new file mode 100644
index 00000000000..56a6aaa8bb8
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcp_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip.go
index b5185d28323..64ba51cc75b 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip.go
@@ -8,7 +8,9 @@
package layers
import (
+ "errors"
"fmt"
+
"github.com/google/gopacket"
)
@@ -64,7 +66,7 @@ func tcpipChecksum(data []byte, csum uint32) uint16 {
for csum > 0xffff {
csum = (csum >> 16) + (csum & 0xffff)
}
- return ^uint16(csum + (csum >> 16))
+ return ^uint16(csum)
}
// computeChecksum computes a TCP or UDP checksum. headerAndPayload is the
@@ -72,7 +74,7 @@ func tcpipChecksum(data []byte, csum uint32) uint16 {
// 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, fmt.Errorf("TCP/IP layer 4 checksum cannot be computed without network layer... call SetNetworkLayerForChecksum to set which layer to use")
+ 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()
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip_test.go
index c002e8491ac..3193f5f6203 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tcpip_test.go
@@ -55,7 +55,7 @@ func createUDPChecksumTestLayer() (udp *UDP) {
}
func TestIPv4UDPChecksum(t *testing.T) {
- var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2)
+ var serialize = make([]gopacket.SerializableLayer, 0, 2)
var u *UDP
var err error
@@ -93,7 +93,7 @@ func TestIPv4UDPChecksum(t *testing.T) {
}
func TestIPv6UDPChecksumWithIPv6DstOpts(t *testing.T) {
- var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 3)
+ var serialize = make([]gopacket.SerializableLayer, 0, 3)
var u *UDP
var err error
@@ -135,7 +135,7 @@ func TestIPv6UDPChecksumWithIPv6DstOpts(t *testing.T) {
}
func TestIPv6JumbogramUDPChecksum(t *testing.T) {
- var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 4)
+ var serialize = make([]gopacket.SerializableLayer, 0, 4)
var u *UDP
var err error
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls.go
new file mode 100644
index 00000000000..ddb6ff9d290
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls.go
@@ -0,0 +1,208 @@
+// Copyright 2018 The GoPacket Authors. 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"
+)
+
+// TLSType defines the type of data after the TLS Record
+type TLSType uint8
+
+// TLSType known values.
+const (
+ TLSChangeCipherSpec TLSType = 20
+ TLSAlert TLSType = 21
+ TLSHandshake TLSType = 22
+ TLSApplicationData TLSType = 23
+ TLSUnknown TLSType = 255
+)
+
+// String shows the register type nicely formatted
+func (tt TLSType) String() string {
+ switch tt {
+ default:
+ return "Unknown"
+ case TLSChangeCipherSpec:
+ return "Change Cipher Spec"
+ case TLSAlert:
+ return "Alert"
+ case TLSHandshake:
+ return "Handshake"
+ case TLSApplicationData:
+ return "Application Data"
+ }
+}
+
+// TLSVersion represents the TLS version in numeric format
+type TLSVersion uint16
+
+// Strings shows the TLS version nicely formatted
+func (tv TLSVersion) String() string {
+ switch tv {
+ default:
+ return "Unknown"
+ case 0x0200:
+ return "SSL 2.0"
+ case 0x0300:
+ return "SSL 3.0"
+ case 0x0301:
+ return "TLS 1.0"
+ case 0x0302:
+ return "TLS 1.1"
+ case 0x0303:
+ return "TLS 1.2"
+ case 0x0304:
+ return "TLS 1.3"
+ }
+}
+
+// TLS is specified in RFC 5246
+//
+// TLS Record Protocol
+// 0 1 2 3 4 5 6 7 8
+// +--+--+--+--+--+--+--+--+
+// | Content Type |
+// +--+--+--+--+--+--+--+--+
+// | Version (major) |
+// +--+--+--+--+--+--+--+--+
+// | Version (minor) |
+// +--+--+--+--+--+--+--+--+
+// | Length |
+// +--+--+--+--+--+--+--+--+
+// | Length |
+// +--+--+--+--+--+--+--+--+
+
+// TLS is actually a slide of TLSrecord structures
+type TLS struct {
+ BaseLayer
+
+ // TLS Records
+ ChangeCipherSpec []TLSChangeCipherSpecRecord
+ Handshake []TLSHandshakeRecord
+ AppData []TLSAppDataRecord
+ Alert []TLSAlertRecord
+}
+
+// TLSRecordHeader contains all the information that each TLS Record types should have
+type TLSRecordHeader struct {
+ ContentType TLSType
+ Version TLSVersion
+ Length uint16
+}
+
+// LayerType returns gopacket.LayerTypeTLS.
+func (t *TLS) LayerType() gopacket.LayerType { return LayerTypeTLS }
+
+// decodeTLS decodes the byte slice into a TLS type. It also
+// setups the application Layer in PacketBuilder.
+func decodeTLS(data []byte, p gopacket.PacketBuilder) error {
+ t := &TLS{}
+ err := t.DecodeFromBytes(data, p)
+ if err != nil {
+ return err
+ }
+ p.AddLayer(t)
+ p.SetApplicationLayer(t)
+ return nil
+}
+
+// DecodeFromBytes decodes the slice into the TLS struct.
+func (t *TLS) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ t.BaseLayer.Contents = data
+ t.BaseLayer.Payload = nil
+
+ t.ChangeCipherSpec = t.ChangeCipherSpec[:0]
+ t.Handshake = t.Handshake[:0]
+ t.AppData = t.AppData[:0]
+ t.Alert = t.Alert[:0]
+
+ return t.decodeTLSRecords(data, df)
+}
+
+func (t *TLS) decodeTLSRecords(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 5 {
+ df.SetTruncated()
+ return errors.New("TLS record too short")
+ }
+
+ // since there are no further layers, the baselayer's content is
+ // pointing to this layer
+ t.BaseLayer = BaseLayer{Contents: data[:len(data)]}
+
+ var h TLSRecordHeader
+ h.ContentType = TLSType(data[0])
+ h.Version = TLSVersion(binary.BigEndian.Uint16(data[1:3]))
+ h.Length = binary.BigEndian.Uint16(data[3:5])
+
+ if h.ContentType.String() == "Unknown" {
+ return errors.New("Unknown TLS record type")
+ }
+
+ hl := 5 // header length
+ tl := hl + int(h.Length)
+ if len(data) < tl {
+ df.SetTruncated()
+ return errors.New("TLS packet length mismatch")
+ }
+
+ switch h.ContentType {
+ default:
+ return errors.New("Unknown TLS record type")
+ case TLSChangeCipherSpec:
+ var r TLSChangeCipherSpecRecord
+ e := r.decodeFromBytes(h, data[hl:tl], df)
+ if e != nil {
+ return e
+ }
+ t.ChangeCipherSpec = append(t.ChangeCipherSpec, r)
+ case TLSAlert:
+ var r TLSAlertRecord
+ e := r.decodeFromBytes(h, data[hl:tl], df)
+ if e != nil {
+ return e
+ }
+ t.Alert = append(t.Alert, r)
+ case TLSHandshake:
+ var r TLSHandshakeRecord
+ e := r.decodeFromBytes(h, data[hl:tl], df)
+ if e != nil {
+ return e
+ }
+ t.Handshake = append(t.Handshake, r)
+ case TLSApplicationData:
+ var r TLSAppDataRecord
+ e := r.decodeFromBytes(h, data[hl:tl], df)
+ if e != nil {
+ return e
+ }
+ t.AppData = append(t.AppData, r)
+ }
+
+ if len(data) == tl {
+ return nil
+ }
+ return t.decodeTLSRecords(data[tl:len(data)], df)
+}
+
+// CanDecode implements gopacket.DecodingLayer.
+func (t *TLS) CanDecode() gopacket.LayerClass {
+ return LayerTypeTLS
+}
+
+// NextLayerType implements gopacket.DecodingLayer.
+func (t *TLS) NextLayerType() gopacket.LayerType {
+ return gopacket.LayerTypeZero
+}
+
+// Payload returns nil, since TLS encrypted payload is inside TLSAppDataRecord
+func (t *TLS) Payload() []byte {
+ return nil
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_alert.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_alert.go
new file mode 100644
index 00000000000..0c5aee02180
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_alert.go
@@ -0,0 +1,165 @@
+// Copyright 2018 The GoPacket Authors. 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"
+)
+
+// TLSAlertLevel defines the alert level data type
+type TLSAlertLevel uint8
+
+// TLSAlertDescr defines the alert descrption data type
+type TLSAlertDescr uint8
+
+const (
+ TLSAlertWarning TLSAlertLevel = 1
+ TLSAlertFatal TLSAlertLevel = 2
+ TLSAlertUnknownLevel TLSAlertLevel = 255
+
+ TLSAlertCloseNotify TLSAlertDescr = 0
+ TLSAlertUnexpectedMessage TLSAlertDescr = 10
+ TLSAlertBadRecordMac TLSAlertDescr = 20
+ TLSAlertDecryptionFailedRESERVED TLSAlertDescr = 21
+ TLSAlertRecordOverflow TLSAlertDescr = 22
+ TLSAlertDecompressionFailure TLSAlertDescr = 30
+ TLSAlertHandshakeFailure TLSAlertDescr = 40
+ TLSAlertNoCertificateRESERVED TLSAlertDescr = 41
+ TLSAlertBadCertificate TLSAlertDescr = 42
+ TLSAlertUnsupportedCertificate TLSAlertDescr = 43
+ TLSAlertCertificateRevoked TLSAlertDescr = 44
+ TLSAlertCertificateExpired TLSAlertDescr = 45
+ TLSAlertCertificateUnknown TLSAlertDescr = 46
+ TLSAlertIllegalParameter TLSAlertDescr = 47
+ TLSAlertUnknownCa TLSAlertDescr = 48
+ TLSAlertAccessDenied TLSAlertDescr = 49
+ TLSAlertDecodeError TLSAlertDescr = 50
+ TLSAlertDecryptError TLSAlertDescr = 51
+ TLSAlertExportRestrictionRESERVED TLSAlertDescr = 60
+ TLSAlertProtocolVersion TLSAlertDescr = 70
+ TLSAlertInsufficientSecurity TLSAlertDescr = 71
+ TLSAlertInternalError TLSAlertDescr = 80
+ TLSAlertUserCanceled TLSAlertDescr = 90
+ TLSAlertNoRenegotiation TLSAlertDescr = 100
+ TLSAlertUnsupportedExtension TLSAlertDescr = 110
+ TLSAlertUnknownDescription TLSAlertDescr = 255
+)
+
+// TLS Alert
+// 0 1 2 3 4 5 6 7 8
+// +--+--+--+--+--+--+--+--+
+// | Level |
+// +--+--+--+--+--+--+--+--+
+// | Description |
+// +--+--+--+--+--+--+--+--+
+
+// TLSAlertRecord contains all the information that each Alert Record type should have
+type TLSAlertRecord struct {
+ TLSRecordHeader
+
+ Level TLSAlertLevel
+ Description TLSAlertDescr
+
+ EncryptedMsg []byte
+}
+
+// DecodeFromBytes decodes the slice into the TLS struct.
+func (t *TLSAlertRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error {
+ // TLS Record Header
+ t.ContentType = h.ContentType
+ t.Version = h.Version
+ t.Length = h.Length
+
+ if len(data) < 2 {
+ df.SetTruncated()
+ return errors.New("TLS Alert packet too short")
+ }
+
+ if t.Length == 2 {
+ t.Level = TLSAlertLevel(data[0])
+ t.Description = TLSAlertDescr(data[1])
+ } else {
+ t.Level = TLSAlertUnknownLevel
+ t.Description = TLSAlertUnknownDescription
+ t.EncryptedMsg = data
+ }
+
+ return nil
+}
+
+// Strings shows the TLS alert level nicely formatted
+func (al TLSAlertLevel) String() string {
+ switch al {
+ default:
+ return fmt.Sprintf("Unknown(%d)", al)
+ case TLSAlertWarning:
+ return "Warning"
+ case TLSAlertFatal:
+ return "Fatal"
+ }
+}
+
+// Strings shows the TLS alert description nicely formatted
+func (ad TLSAlertDescr) String() string {
+ switch ad {
+ default:
+ return "Unknown"
+ case TLSAlertCloseNotify:
+ return "close_notify"
+ case TLSAlertUnexpectedMessage:
+ return "unexpected_message"
+ case TLSAlertBadRecordMac:
+ return "bad_record_mac"
+ case TLSAlertDecryptionFailedRESERVED:
+ return "decryption_failed_RESERVED"
+ case TLSAlertRecordOverflow:
+ return "record_overflow"
+ case TLSAlertDecompressionFailure:
+ return "decompression_failure"
+ case TLSAlertHandshakeFailure:
+ return "handshake_failure"
+ case TLSAlertNoCertificateRESERVED:
+ return "no_certificate_RESERVED"
+ case TLSAlertBadCertificate:
+ return "bad_certificate"
+ case TLSAlertUnsupportedCertificate:
+ return "unsupported_certificate"
+ case TLSAlertCertificateRevoked:
+ return "certificate_revoked"
+ case TLSAlertCertificateExpired:
+ return "certificate_expired"
+ case TLSAlertCertificateUnknown:
+ return "certificate_unknown"
+ case TLSAlertIllegalParameter:
+ return "illegal_parameter"
+ case TLSAlertUnknownCa:
+ return "unknown_ca"
+ case TLSAlertAccessDenied:
+ return "access_denied"
+ case TLSAlertDecodeError:
+ return "decode_error"
+ case TLSAlertDecryptError:
+ return "decrypt_error"
+ case TLSAlertExportRestrictionRESERVED:
+ return "export_restriction_RESERVED"
+ case TLSAlertProtocolVersion:
+ return "protocol_version"
+ case TLSAlertInsufficientSecurity:
+ return "insufficient_security"
+ case TLSAlertInternalError:
+ return "internal_error"
+ case TLSAlertUserCanceled:
+ return "user_canceled"
+ case TLSAlertNoRenegotiation:
+ return "no_renegotiation"
+ case TLSAlertUnsupportedExtension:
+ return "unsupported_extension"
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_appdata.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_appdata.go
new file mode 100644
index 00000000000..dedd1d587b7
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_appdata.go
@@ -0,0 +1,34 @@
+// Copyright 2018 The GoPacket Authors. 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"
+
+ "github.com/google/gopacket"
+)
+
+// TLSAppDataRecord contains all the information that each AppData Record types should have
+type TLSAppDataRecord struct {
+ TLSRecordHeader
+ Payload []byte
+}
+
+// DecodeFromBytes decodes the slice into the TLS struct.
+func (t *TLSAppDataRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error {
+ // TLS Record Header
+ t.ContentType = h.ContentType
+ t.Version = h.Version
+ t.Length = h.Length
+
+ if len(data) != int(t.Length) {
+ return errors.New("TLS Application Data length mismatch")
+ }
+
+ t.Payload = data
+ return nil
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_cipherspec.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_cipherspec.go
new file mode 100644
index 00000000000..8f3dc62ba55
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_cipherspec.go
@@ -0,0 +1,64 @@
+// Copyright 2018 The GoPacket Authors. 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"
+
+ "github.com/google/gopacket"
+)
+
+// TLSchangeCipherSpec defines the message value inside ChangeCipherSpec Record
+type TLSchangeCipherSpec uint8
+
+const (
+ TLSChangecipherspecMessage TLSchangeCipherSpec = 1
+ TLSChangecipherspecUnknown TLSchangeCipherSpec = 255
+)
+
+// TLS Change Cipher Spec
+// 0 1 2 3 4 5 6 7 8
+// +--+--+--+--+--+--+--+--+
+// | Message |
+// +--+--+--+--+--+--+--+--+
+
+// TLSChangeCipherSpecRecord defines the type of data inside ChangeCipherSpec Record
+type TLSChangeCipherSpecRecord struct {
+ TLSRecordHeader
+
+ Message TLSchangeCipherSpec
+}
+
+// DecodeFromBytes decodes the slice into the TLS struct.
+func (t *TLSChangeCipherSpecRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error {
+ // TLS Record Header
+ t.ContentType = h.ContentType
+ t.Version = h.Version
+ t.Length = h.Length
+
+ if len(data) != 1 {
+ df.SetTruncated()
+ return errors.New("TLS Change Cipher Spec record incorrect length")
+ }
+
+ t.Message = TLSchangeCipherSpec(data[0])
+ if t.Message != TLSChangecipherspecMessage {
+ t.Message = TLSChangecipherspecUnknown
+ }
+
+ return nil
+}
+
+// String shows the message value nicely formatted
+func (ccs TLSchangeCipherSpec) String() string {
+ switch ccs {
+ default:
+ return "Unknown"
+ case TLSChangecipherspecMessage:
+ return "Change Cipher Spec Message"
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_handshake.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_handshake.go
new file mode 100644
index 00000000000..e45e2c7cbc5
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_handshake.go
@@ -0,0 +1,28 @@
+// Copyright 2018 The GoPacket Authors. 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"
+)
+
+// TLSHandshakeRecord defines the structure of a Handshare Record
+type TLSHandshakeRecord struct {
+ TLSRecordHeader
+}
+
+// DecodeFromBytes decodes the slice into the TLS struct.
+func (t *TLSHandshakeRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error {
+ // TLS Record Header
+ t.ContentType = h.ContentType
+ t.Version = h.Version
+ t.Length = h.Length
+
+ // TODO
+
+ return nil
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_test.go
new file mode 100644
index 00000000000..61d4c4eb395
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/tls_test.go
@@ -0,0 +1,339 @@
+package layers
+
+import (
+ "reflect"
+ "testing"
+
+ "github.com/google/gopacket"
+)
+
+// https://github.com/tintinweb/scapy-ssl_tls/blob/master/tests/files/RSA_WITH_AES_128_CBC_SHA.pcap
+// WARNING! Tests are specific for each packet. If you change a packet, please review their tests.
+
+// Packet 4 - Client Hello (full packet, from Ethernet to TLS layers)
+var testClientHello = []byte{
+ 0x00, 0x0c, 0x29, 0x1f, 0xab, 0x17, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x08, 0x08, 0x00, 0x45, 0x00,
+ 0x00, 0xfe, 0x71, 0x42, 0x40, 0x00, 0x80, 0x06, 0x4e, 0xe1, 0xc0, 0xa8, 0xdc, 0x01, 0xc0, 0xa8,
+ 0xdc, 0x83, 0x2f, 0x0e, 0x01, 0xbb, 0x25, 0x6c, 0xbd, 0x3d, 0xcc, 0xce, 0xe1, 0xf7, 0x50, 0x18,
+ 0xff, 0xff, 0x7c, 0xaf, 0x00, 0x00, 0x16, 0x03, 0x01, 0x00, 0xd1, 0x01, 0x00, 0x00, 0xcd, 0x03,
+ 0x01, 0xff, 0xa2, 0x88, 0x97, 0x7c, 0x41, 0xa1, 0x08, 0x34, 0x2c, 0x98, 0xc2, 0x70, 0x04, 0xa0,
+ 0x5d, 0x5f, 0x39, 0xef, 0xe0, 0x70, 0xd5, 0x12, 0xf1, 0x35, 0x17, 0xb6, 0x0d, 0xc4, 0xd3, 0x09,
+ 0x85, 0x00, 0x00, 0x5a, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x39, 0x00, 0x38, 0x00, 0x88, 0x00, 0x87,
+ 0xc0, 0x0f, 0xc0, 0x05, 0x00, 0x35, 0x00, 0x84, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0x33, 0x00, 0x32,
+ 0x00, 0x9a, 0x00, 0x99, 0x00, 0x45, 0x00, 0x44, 0xc0, 0x0e, 0xc0, 0x04, 0x00, 0x2f, 0x00, 0x96,
+ 0x00, 0x41, 0xc0, 0x11, 0xc0, 0x07, 0xc0, 0x0c, 0xc0, 0x02, 0x00, 0x05, 0x00, 0x04, 0xc0, 0x12,
+ 0xc0, 0x08, 0x00, 0x16, 0x00, 0x13, 0xc0, 0x0d, 0xc0, 0x03, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x12,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x11, 0x00, 0x08, 0x00, 0x06, 0x00, 0x03, 0x00, 0xff, 0x02, 0x01,
+ 0x00, 0x00, 0x49, 0x00, 0x0b, 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x00, 0x0a, 0x00, 0x34, 0x00,
+ 0x32, 0x00, 0x0e, 0x00, 0x0d, 0x00, 0x19, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x09, 0x00,
+ 0x0a, 0x00, 0x16, 0x00, 0x17, 0x00, 0x08, 0x00, 0x06, 0x00, 0x07, 0x00, 0x14, 0x00, 0x15, 0x00,
+ 0x04, 0x00, 0x05, 0x00, 0x12, 0x00, 0x13, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x0f, 0x00,
+ 0x10, 0x00, 0x11, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x01, 0x01,
+}
+var testClientHelloDecoded = &TLS{
+ BaseLayer: BaseLayer{
+ Contents: testClientHello[54:],
+ Payload: nil,
+ },
+ ChangeCipherSpec: nil,
+ Handshake: []TLSHandshakeRecord{
+ {
+ TLSRecordHeader{
+ ContentType: 22,
+ Version: 0x0301,
+ Length: 209,
+ },
+ },
+ },
+ AppData: nil,
+ Alert: nil,
+}
+
+// Packet 6 - Server Hello, Certificate, Server Hello Done
+var testServerHello = []byte{
+ 0x16, 0x03, 0x01, 0x00, 0x3a, 0x02, 0x00, 0x00, 0x36, 0x03, 0x01, 0x55, 0x5c, 0xd6, 0x97, 0xa3,
+ 0x97, 0xe9, 0xf4, 0x0c, 0xf4, 0x56, 0x14, 0x9f, 0xe4, 0x24, 0xf9, 0xeb, 0x49, 0xd4, 0xd1, 0x5f,
+ 0xfc, 0x12, 0xb4, 0xfd, 0x45, 0x4e, 0x3d, 0xeb, 0x6a, 0xad, 0xcf, 0x00, 0x00, 0x2f, 0x01, 0x00,
+ 0x0e, 0xff, 0x01, 0x00, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x01, 0x01, 0x16,
+ 0x03, 0x01, 0x01, 0x90, 0x0b, 0x00, 0x01, 0x8c, 0x00, 0x01, 0x89, 0x00, 0x01, 0x86, 0x30, 0x82,
+ 0x01, 0x82, 0x30, 0x82, 0x01, 0x2c, 0x02, 0x01, 0x04, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
+ 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x04, 0x05, 0x00, 0x30, 0x38, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
+ 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x08,
+ 0x13, 0x03, 0x51, 0x4c, 0x44, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x12,
+ 0x53, 0x53, 0x4c, 0x65, 0x61, 0x79, 0x2f, 0x72, 0x73, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20,
+ 0x43, 0x41, 0x30, 0x1e, 0x17, 0x0d, 0x39, 0x35, 0x31, 0x30, 0x30, 0x39, 0x32, 0x33, 0x33, 0x32,
+ 0x30, 0x35, 0x5a, 0x17, 0x0d, 0x39, 0x38, 0x30, 0x37, 0x30, 0x35, 0x32, 0x33, 0x33, 0x32, 0x30,
+ 0x35, 0x5a, 0x30, 0x60, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41,
+ 0x55, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x03, 0x51, 0x4c, 0x44, 0x31,
+ 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x10, 0x4d, 0x69, 0x6e, 0x63, 0x6f, 0x6d,
+ 0x20, 0x50, 0x74, 0x79, 0x2e, 0x20, 0x4c, 0x74, 0x64, 0x2e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
+ 0x55, 0x04, 0x0b, 0x13, 0x02, 0x43, 0x53, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03,
+ 0x13, 0x12, 0x53, 0x53, 0x4c, 0x65, 0x61, 0x79, 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x20, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x30, 0x5c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
+ 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x4b, 0x00, 0x30, 0x48, 0x02, 0x41, 0x00, 0xb7, 0x2c, 0x25,
+ 0xdc, 0x49, 0xc5, 0xae, 0x6b, 0x43, 0xc5, 0x2e, 0x41, 0xc1, 0x2e, 0x6d, 0x95, 0x7a, 0x3a, 0xa9,
+ 0x03, 0x51, 0x78, 0x45, 0x0f, 0x2a, 0xd1, 0x58, 0xd1, 0x88, 0xf6, 0x9f, 0x8f, 0x1f, 0xd9, 0xfd,
+ 0xa5, 0x87, 0xde, 0x2a, 0x5d, 0x31, 0x5b, 0xee, 0x24, 0x66, 0xbf, 0xc0, 0x55, 0xdb, 0xfe, 0x70,
+ 0xc5, 0x2c, 0x39, 0x5f, 0x5a, 0x9f, 0xa8, 0x08, 0xfc, 0x21, 0x06, 0xd5, 0x4f, 0x02, 0x03, 0x01,
+ 0x00, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x04, 0x05,
+ 0x00, 0x03, 0x41, 0x00, 0x2b, 0x34, 0x5b, 0x22, 0x85, 0x62, 0x23, 0x07, 0x36, 0xf4, 0x0c, 0x2b,
+ 0x14, 0xd0, 0x1b, 0xcb, 0xd9, 0xbb, 0xd2, 0xc0, 0x9a, 0xcf, 0x12, 0xa1, 0x65, 0x90, 0x3a, 0xb7,
+ 0x17, 0x83, 0x3a, 0x10, 0x6b, 0xad, 0x2f, 0xd6, 0xb1, 0x11, 0xc0, 0x0d, 0x5a, 0x06, 0xdb, 0x11,
+ 0xd0, 0x2f, 0x34, 0x90, 0xf5, 0x76, 0x61, 0x26, 0xa1, 0x69, 0xf2, 0xdb, 0xb3, 0xe7, 0x20, 0xcb,
+ 0x3a, 0x64, 0xe6, 0x41, 0x16, 0x03, 0x01, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00,
+}
+
+// Packet 7 - Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
+var testClientKeyExchange = []byte{
+ 0x16, 0x03, 0x01, 0x00, 0x46, 0x10, 0x00, 0x00, 0x42, 0x00, 0x40, 0x9e, 0x73, 0xdf, 0xe0, 0xf2,
+ 0xd0, 0x40, 0x32, 0x44, 0x9a, 0x34, 0x7f, 0x57, 0x86, 0x10, 0xea, 0x3d, 0xc5, 0xe2, 0xf9, 0xa5,
+ 0x69, 0x43, 0xc9, 0x0b, 0x00, 0x7e, 0x91, 0x31, 0x57, 0xfc, 0xc5, 0x65, 0x18, 0x0d, 0x44, 0xfd,
+ 0x51, 0xf8, 0xda, 0x8a, 0x7a, 0xab, 0x16, 0x03, 0xeb, 0xac, 0x23, 0x6e, 0x8d, 0xdd, 0xbb, 0xf4,
+ 0x75, 0xe7, 0xb7, 0xa3, 0xce, 0xdb, 0x67, 0x6b, 0x7d, 0x30, 0x2a, 0x14, 0x03, 0x01, 0x00, 0x01,
+ 0x01, 0x16, 0x03, 0x01, 0x00, 0x30, 0x15, 0xcb, 0x7a, 0x5b, 0x2d, 0xc0, 0x27, 0x09, 0x28, 0x62,
+ 0x95, 0x44, 0x9f, 0xa1, 0x1e, 0x4e, 0x6a, 0xfb, 0x49, 0x9d, 0x6a, 0x24, 0x44, 0xc6, 0x8e, 0x26,
+ 0xbc, 0xc1, 0x28, 0x8c, 0x27, 0xcc, 0xa2, 0xba, 0xec, 0x38, 0x63, 0x6e, 0x64, 0xd8, 0x52, 0x94,
+ 0x17, 0x96, 0x61, 0xfd, 0x9c, 0x54,
+}
+var testClientKeyExchangeDecoded = &TLS{
+ BaseLayer: BaseLayer{
+ Contents: testClientKeyExchange[81:],
+ Payload: nil,
+ },
+ ChangeCipherSpec: []TLSChangeCipherSpecRecord{
+ {
+ TLSRecordHeader{
+ ContentType: 20,
+ Version: 0x0301,
+ Length: 1,
+ },
+ 1,
+ },
+ },
+ Handshake: []TLSHandshakeRecord{
+ {
+ TLSRecordHeader{
+ ContentType: 22,
+ Version: 0x0301,
+ Length: 70,
+ },
+ },
+ {
+ TLSRecordHeader{
+ ContentType: 22,
+ Version: 0x0301,
+ Length: 48,
+ },
+ },
+ },
+ AppData: nil,
+ Alert: nil,
+}
+
+// Packet 9 - New Session Ticket, Change Cipher Spec, Encryption Handshake Message
+var testNewSessionTicket = []byte{
+ 0x16, 0x03, 0x01, 0x00, 0xaa, 0x04, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x1c, 0x20, 0x00, 0xa0, 0xd4,
+ 0xee, 0xb0, 0x9b, 0xb5, 0xa2, 0xd3, 0x00, 0x57, 0x84, 0x59, 0xec, 0x0d, 0xbf, 0x05, 0x0c, 0xd5,
+ 0xb9, 0xe2, 0xf8, 0x32, 0xb5, 0xec, 0xce, 0xe2, 0x9c, 0x25, 0x25, 0xd9, 0x3e, 0x4a, 0x94, 0x5b,
+ 0xca, 0x18, 0x2b, 0x0f, 0x5f, 0xf6, 0x73, 0x38, 0x62, 0xcd, 0xcc, 0xf1, 0x32, 0x39, 0xe4, 0x5e,
+ 0x30, 0xf3, 0x94, 0xf5, 0xc5, 0x94, 0x3a, 0x8c, 0x8e, 0xe5, 0x12, 0x4a, 0x1e, 0xd8, 0x31, 0xb5,
+ 0x17, 0x09, 0xa6, 0x4c, 0x69, 0xca, 0xae, 0xfb, 0x04, 0x17, 0x64, 0x54, 0x9e, 0xc2, 0xfa, 0xf3,
+ 0x6d, 0xe9, 0xa5, 0xed, 0xa6, 0x65, 0xfe, 0x2f, 0xf3, 0xc6, 0xce, 0x78, 0x40, 0xf7, 0x65, 0xe0,
+ 0x13, 0xd3, 0x77, 0xc7, 0xc5, 0x79, 0x16, 0x56, 0x4c, 0x30, 0x94, 0xcf, 0xb0, 0x3c, 0x00, 0x91,
+ 0xbd, 0x86, 0x08, 0x9f, 0x2f, 0x05, 0x67, 0x03, 0x6f, 0xa7, 0x3b, 0xb9, 0x36, 0xf2, 0x80, 0x4f,
+ 0x60, 0x5d, 0x4c, 0xc4, 0x42, 0x5d, 0x02, 0x44, 0xba, 0x31, 0x8f, 0x39, 0x8e, 0x0c, 0x1e, 0xa8,
+ 0x26, 0x4f, 0x3e, 0x01, 0x96, 0xb3, 0x6f, 0xc6, 0x25, 0xe4, 0x30, 0x03, 0xd6, 0x3a, 0x7d, 0x14,
+ 0x03, 0x01, 0x00, 0x01, 0x01, 0x16, 0x03, 0x01, 0x00, 0x30, 0x25, 0xb8, 0x58, 0xc1, 0xa6, 0x3f,
+ 0xf8, 0xbd, 0xe6, 0xae, 0xbd, 0x98, 0xd4, 0x75, 0xa5, 0x45, 0x1b, 0xd8, 0x6a, 0x70, 0x79, 0x86,
+ 0x29, 0x4e, 0x4f, 0x64, 0xba, 0xe7, 0x1f, 0xca, 0x4b, 0x96, 0x9b, 0xf7, 0x0b, 0x50, 0xf5, 0x4f,
+ 0xfd, 0xda, 0xda, 0xcd, 0xcd, 0x4b, 0x12, 0x2e, 0xdf, 0xd5,
+}
+
+// Packet 13 - Two Application Data Records
+var testDoubleAppData = []byte{
+ 0x17, 0x03, 0x01, 0x00, 0x20, 0x77, 0x3a, 0x94, 0x7d, 0xb4, 0x47, 0x4a, 0x1d, 0xd4, 0x6c, 0x5a,
+ 0x69, 0x74, 0x03, 0x93, 0x32, 0xca, 0x54, 0x5e, 0xa5, 0x81, 0x99, 0x6a, 0x73, 0x66, 0xbf, 0x06,
+ 0xa0, 0xdc, 0x6a, 0x9c, 0xb1, 0x17, 0x03, 0x01, 0x00, 0x20, 0x44, 0x64, 0xc8, 0xc2, 0x5a, 0xfc,
+ 0x4a, 0x82, 0xdd, 0x53, 0x6d, 0x30, 0x82, 0x4d, 0x35, 0x22, 0xf1, 0x5f, 0x3b, 0x96, 0x66, 0x79,
+ 0x61, 0x9f, 0x51, 0x93, 0x1b, 0xbf, 0x53, 0x3b, 0xf8, 0x26,
+}
+var testDoubleAppDataDecoded = &TLS{
+ BaseLayer: BaseLayer{
+ Contents: testDoubleAppData[37:],
+ Payload: nil,
+ },
+ ChangeCipherSpec: nil,
+ Handshake: nil,
+ AppData: []TLSAppDataRecord{
+ {
+ TLSRecordHeader{
+ ContentType: 23,
+ Version: 0x0301,
+ Length: 32,
+ },
+ testDoubleAppData[5 : 5+32],
+ },
+ {
+ TLSRecordHeader{
+ ContentType: 23,
+ Version: 0x0301,
+ Length: 32,
+ },
+ testDoubleAppData[42 : 42+32],
+ },
+ },
+ Alert: nil,
+}
+
+var testAlertEncrypted = []byte{
+ 0x15, 0x03, 0x03, 0x00, 0x20, 0x44, 0xb9, 0x9c, 0x2c, 0x6e, 0xab, 0xa3, 0xdf, 0xb1, 0x77, 0x04,
+ 0xa2, 0xa4, 0x3a, 0x9a, 0x08, 0x1d, 0xe6, 0x51, 0xac, 0xa0, 0x5f, 0xab, 0x74, 0xa7, 0x96, 0x24,
+ 0xfe, 0x62, 0xfe, 0xe8, 0x5e,
+}
+var testAlertEncryptedDecoded = &TLS{
+ BaseLayer: BaseLayer{
+ Contents: testAlertEncrypted,
+ Payload: nil,
+ },
+ ChangeCipherSpec: nil,
+ Handshake: nil,
+ AppData: nil,
+ Alert: []TLSAlertRecord{
+ {
+ TLSRecordHeader{
+ ContentType: 21,
+ Version: 0x0303,
+ Length: 32,
+ },
+ 0xFF,
+ 0xFF,
+ testAlertEncrypted[5:],
+ },
+ },
+}
+
+// Malformed TLS records
+var testMalformed = []byte{
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+}
+
+var testTLSDecodeOptions = gopacket.DecodeOptions{
+ SkipDecodeRecovery: true,
+ DecodeStreamsAsDatagrams: true,
+}
+
+func TestParseTLSClientHello(t *testing.T) {
+ p := gopacket.NewPacket(testClientHello, LinkTypeEthernet, testTLSDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeTCP, LayerTypeTLS}, t)
+
+ if got, ok := p.Layer(LayerTypeTLS).(*TLS); ok {
+ want := testClientHelloDecoded
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("TLS ClientHello packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No TLS layer type found in packet")
+ }
+}
+
+func testTLSClientHelloDecodeFromBytes(t *testing.T) {
+ var got TLS
+ want := testClientKeyExchangeDecoded
+
+ if err := got.DecodeFromBytes(testClientKeyExchange, gopacket.NilDecodeFeedback); err != nil {
+ t.Errorf("TLS DecodeFromBytes first decode failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("TLS DecodeFromBytes first decode doesn't match:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+
+ if err := got.DecodeFromBytes(testClientKeyExchange, gopacket.NilDecodeFeedback); err != nil {
+ t.Errorf("TLS DecodeFromBytes second decode failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("TLS DecodeFromBytes second decode doesn't match:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+}
+
+func TestParseTLSChangeCipherSpec(t *testing.T) {
+ p := gopacket.NewPacket(testClientKeyExchange, LayerTypeTLS, testTLSDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeTLS}, t)
+
+ if got, ok := p.Layer(LayerTypeTLS).(*TLS); ok {
+ want := testClientKeyExchangeDecoded
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("TLS ChangeCipherSpec packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No TLS layer type found in packet")
+ }
+}
+
+func TestParseTLSAppData(t *testing.T) {
+ p := gopacket.NewPacket(testDoubleAppData, LayerTypeTLS, testTLSDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeTLS}, t)
+
+ if got, ok := p.Layer(LayerTypeTLS).(*TLS); ok {
+ want := testDoubleAppDataDecoded
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("TLS TLSAppData packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No TLS layer type found in packet")
+ }
+}
+
+func TestParseTLSMalformed(t *testing.T) {
+ p := gopacket.NewPacket(testMalformed, LayerTypeTLS, testTLSDecodeOptions)
+ if p.ErrorLayer() == nil {
+ t.Error("No Decoding Error when parsing a malformed data")
+ }
+}
+
+func TestParseTLSTooShort(t *testing.T) {
+ p := gopacket.NewPacket(testMalformed[0:2], LayerTypeTLS, testTLSDecodeOptions)
+ if p.ErrorLayer() == nil {
+ t.Error("No Decoding Error when parsing a malformed data")
+ }
+}
+
+func TestParseTLSLengthMismatch(t *testing.T) {
+ var testLengthMismatch = make([]byte, len(testDoubleAppData))
+ copy(testLengthMismatch, testDoubleAppData)
+ testLengthMismatch[3] = 0xFF
+ testLengthMismatch[4] = 0xFF
+ p := gopacket.NewPacket(testLengthMismatch, LayerTypeTLS, testTLSDecodeOptions)
+ if p.ErrorLayer() == nil {
+ t.Error("No Decoding Error when parsing a malformed data")
+ }
+}
+
+func TestParseTLSAlertEncrypted(t *testing.T) {
+ p := gopacket.NewPacket(testAlertEncrypted, LayerTypeTLS, testTLSDecodeOptions)
+ if p.ErrorLayer() != nil {
+ t.Error("Failed to decode packet:", p.ErrorLayer().Error())
+ }
+ checkLayers(p, []gopacket.LayerType{LayerTypeTLS}, t)
+
+ if got, ok := p.Layer(LayerTypeTLS).(*TLS); ok {
+ want := testAlertEncryptedDecoded
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("TLS TLSAlert packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want)
+ }
+ } else {
+ t.Error("No TLS layer type found in packet")
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/udp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/udp.go
index 20f8c50f510..97e81c69fcc 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/udp.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/udp.go
@@ -10,6 +10,7 @@ package layers
import (
"encoding/binary"
"fmt"
+
"github.com/google/gopacket"
)
@@ -27,6 +28,10 @@ type UDP struct {
func (u *UDP) LayerType() gopacket.LayerType { return LayerTypeUDP }
func (udp *UDP) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
+ if len(data) < 8 {
+ df.SetTruncated()
+ return fmt.Errorf("Invalid UDP header. Length %d less than 8", len(data))
+ }
udp.SrcPort = UDPPort(binary.BigEndian.Uint16(data[0:2]))
udp.sPort = data[0:2]
udp.DstPort = UDPPort(binary.BigEndian.Uint16(data[2:4]))
@@ -118,3 +123,11 @@ func decodeUDP(data []byte, p gopacket.PacketBuilder) error {
func (u *UDP) TransportFlow() gopacket.Flow {
return gopacket.NewFlow(EndpointUDPPort, u.sPort, u.dPort)
}
+
+// For testing only
+func (u *UDP) SetInternalPortsForTesting() {
+ u.sPort = make([]byte, 2)
+ u.dPort = make([]byte, 2)
+ binary.BigEndian.PutUint16(u.sPort, uint16(u.SrcPort))
+ binary.BigEndian.PutUint16(u.dPort, uint16(u.DstPort))
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/usb.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/usb.go
index d4f483cf745..0b4d4af0941 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/usb.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/usb.go
@@ -81,27 +81,6 @@ const (
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 (
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vrrp.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vrrp.go
new file mode 100644
index 00000000000..ffaafe6a772
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vrrp.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vrrp_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vrrp_test.go
new file mode 100644
index 00000000000..bc6b7e472ec
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vrrp_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vxlan.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vxlan.go
new file mode 100644
index 00000000000..4f79ea4eae0
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vxlan.go
@@ -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"
+ "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
+ }
+
+ // PrependBytes does not guarantee that bytes are zeroed. Setting flags via OR requires that they start off at zero
+ bytes[0] = 0
+ bytes[1] = 0
+
+ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vxlan_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vxlan_test.go
new file mode 100644
index 00000000000..a02d9342c04
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layers/vxlan_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layertype.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layertype.go
index 31810c3980e..3abfee1e9ba 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layertype.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/layertype.go
@@ -55,14 +55,24 @@ func RegisterLayerType(num int, meta LayerTypeMetadata) LayerType {
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 {
- if ltMetaMap[LayerType(num)].inUse {
- panic("Layer type already exists")
- }
ltMetaMap[LayerType(num)] = layerTypeMetadata{
inUse: true,
LayerTypeMetadata: meta,
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go
index 97776e044dc..1fb685facc1 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go
@@ -15,6 +15,7 @@ package main
import (
"bufio"
+ "bytes"
"encoding/hex"
"flag"
"fmt"
@@ -22,6 +23,7 @@ import (
"net/http"
"os"
"regexp"
+ "sort"
"time"
)
@@ -40,13 +42,25 @@ package macs
// 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 map[[3]byte]string= validMACPrefixMap
+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")
+var url = flag.String("url", "http://standards-oui.ieee.org/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() {
+ flag.Parse()
fmt.Fprintf(os.Stderr, "Fetching MACs from %q\n", *url)
resp, err := http.Get(*url)
if err != nil {
@@ -54,9 +68,8 @@ func main() {
}
defer resp.Body.Close()
buffered := bufio.NewReader(resp.Body)
- finder := regexp.MustCompile(`^\s*([0-9A-F]{6})\s+\(base 16\)\s+(.*)`)
- fmt.Fprintln(os.Stderr, "Starting write to standard output")
- fmt.Printf(header, time.Now(), *url)
+ 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 {
@@ -65,14 +78,22 @@ func main() {
panic(err)
}
if matches := finder.FindStringSubmatch(line); matches != nil {
- bytes := make([]byte, 3)
- hex.Decode(bytes, []byte(matches[1]))
+ var prefix [3]byte
+ hex.Decode(prefix[:], []byte(matches[1]))
company := matches[2]
if company == "" {
company = "PRIVATE"
}
- fmt.Printf("\t[3]byte{%d, %d, %d}: %q,\n", bytes[0], bytes[1], bytes[2], company)
+ 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go
index 4afee40f4f1..19043aa8958 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go
@@ -7,13 +7,13 @@
package macs
// Created by gen.go, don't edit manually
-// Generated at 2014-09-09 10:01:58.097553511 -0600 MDT
-// Fetched from "http://standards.ieee.org/develop/regauth/oui/oui.txt"
+// Generated at 2018-09-13 15:43:56.426726842 +0200 CEST m=+27.853121393
+// Fetched from "http://standards-oui.ieee.org/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 map[[3]byte]string = validMACPrefixMap
+var ValidMACPrefixMap = validMACPrefixMap
var validMACPrefixMap = map[[3]byte]string{
[3]byte{0, 0, 0}: "XEROX CORPORATION",
[3]byte{0, 0, 1}: "XEROX CORPORATION",
@@ -27,7 +27,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -42,9 +42,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 27}: "Novell, Inc.",
[3]byte{0, 0, 28}: "BELL TECHNOLOGIES",
- [3]byte{0, 0, 29}: "CABLETRON SYSTEMS, INC.",
+ [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",
@@ -64,7 +64,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 PTY 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",
@@ -87,7 +87,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -99,23 +99,23 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Schnieder Electric",
+ [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, 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 IND., LTD.",
+ [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 Electric Corporation",
+ [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.",
@@ -123,9 +123,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 108}: "Private",
[3]byte{0, 0, 109}: "CRAY COMMUNICATIONS, LTD.",
- [3]byte{0, 0, 110}: "ARTISOFT, INC.",
+ [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.",
@@ -144,7 +144,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -166,7 +166,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "EMC Corporation",
+ [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",
@@ -177,25 +177,25 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 168}: "Stratus Technologies",
[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}: "NUCLEAR DATA INSTRUMENTATION",
+ [3]byte{0, 0, 175}: "Canberra Industries, Inc.",
[3]byte{0, 0, 176}: "RND-RAD NETWORK DEVICES",
- [3]byte{0, 0, 177}: "ALPHA MICROSYSTEMS INC.",
+ [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 COMPUTER COMPANY",
+ [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",
@@ -204,20 +204,20 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 189}: "Mitsubishi Cable Industries, Ltd. / Ryosei Systems",
[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, 195}: "Harris Corporation",
[3]byte{0, 0, 196}: "WATERS DIV. OF MILLIPORE",
- [3]byte{0, 0, 197}: "FARALLON COMPUTING/NETOPIA",
+ [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 International",
+ [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",
@@ -231,7 +231,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -246,7 +246,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -255,11 +255,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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",
@@ -269,12 +269,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 1}: "Private",
+ [3]byte{0, 1, 2}: "3COM",
+ [3]byte{0, 1, 3}: "3COM",
[3]byte{0, 1, 4}: "DVICO Co., Ltd.",
[3]byte{0, 1, 5}: "Beckhoff Automation GmbH",
[3]byte{0, 1, 6}: "Tews Datentechnik GmbH",
@@ -284,7 +284,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "CORECO, 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",
@@ -294,7 +294,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -304,9 +304,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 33}: "WatchGuard Technologies, Inc.",
[3]byte{0, 1, 34}: "Trend Communications, Ltd.",
- [3]byte{0, 1, 35}: "DIGITAL ELECTRONICS CORP.",
+ [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",
@@ -319,13 +319,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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",
@@ -337,20 +337,20 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "EMC Corporation",
+ [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, 73}: "TDT AG",
[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, 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.",
@@ -370,8 +370,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -421,8 +421,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -456,7 +456,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 185}: "SKF (U.K.) Limited",
[3]byte{0, 1, 186}: "IC-Net, Inc.",
[3]byte{0, 1, 187}: "Frequentis",
[3]byte{0, 1, 188}: "Brains Corporation",
@@ -470,10 +470,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 199}: "Cisco Systems, Inc",
[3]byte{0, 1, 200}: "CONRAD CORP.",
- [3]byte{0, 1, 201}: "CISCO SYSTEMS, INC.",
+ [3]byte{0, 1, 200}: "THOMAS 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.",
@@ -502,8 +502,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
- [3]byte{0, 1, 231}: "Hewlett-Packard Company",
+ [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.",
@@ -516,11 +516,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Networks",
+ [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, 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.",
@@ -542,7 +542,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -550,8 +550,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -589,9 +589,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -602,8 +602,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -648,19 +648,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 132}: "UK Grid Solutions Limited",
[3]byte{0, 2, 133}: "Riverstone Networks",
[3]byte{0, 2, 134}: "Occam Networks",
[3]byte{0, 2, 135}: "Adapcom",
@@ -693,7 +693,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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",
@@ -713,8 +713,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -727,9 +727,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 199}: "ALPS ELECTRIC CO.,LTD.",
[3]byte{0, 2, 200}: "Technocom Communications Technology (pte) Ltd",
- [3]byte{0, 2, 201}: "Mellanox Technologies",
+ [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",
@@ -780,8 +780,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -833,8 +833,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -872,7 +872,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -891,8 +891,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -921,7 +921,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -931,11 +931,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 151}: "FireBrick Limited",
[3]byte{0, 3, 152}: "WISI",
[3]byte{0, 3, 153}: "Dongju Informations & Communications Co., Ltd.",
[3]byte{0, 3, 154}: "SiConnect",
@@ -943,8 +943,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1005,14 +1005,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Corp.",
+ [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, 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.",
@@ -1037,8 +1037,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1051,15 +1051,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 11}: "3COM EUROPE LTD",
[3]byte{0, 4, 12}: "Kanno Works, Ltd.",
- [3]byte{0, 4, 13}: "Avaya, Inc.",
+ [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, 19}: "snom technology GmbH",
[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",
@@ -1071,16 +1071,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Computer Entertainment, Inc.",
+ [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}: "Gordon Kapes, Inc.",
+ [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, 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.",
@@ -1093,7 +1093,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Comptek International, 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",
@@ -1117,9 +1117,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Leukhardt Systemelektronik GmbH",
+ [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.",
@@ -1149,16 +1149,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 117}: "3COM",
+ [3]byte{0, 4, 118}: "3COM",
[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.",
@@ -1168,7 +1168,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1181,7 +1181,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Tone Commander Systems, 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",
@@ -1190,12 +1190,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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.",
@@ -1203,7 +1203,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1232,13 +1232,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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.",
@@ -1261,20 +1261,20 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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 Company",
+ [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.",
@@ -1292,13 +1292,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 252}: "Stratus Technologies",
[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",
+ [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.",
@@ -1314,7 +1314,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "MeshNetworks, Inc.",
+ [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.",
@@ -1322,7 +1322,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1345,8 +1345,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1356,7 +1356,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 60}: "XIRCOM",
[3]byte{0, 5, 61}: "Agere Systems",
[3]byte{0, 5, 62}: "KID Systeme GmbH",
[3]byte{0, 5, 63}: "VisionTek, Inc.",
@@ -1375,7 +1375,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "PRIVATE",
+ [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",
@@ -1389,9 +1389,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -1411,12 +1411,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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.",
@@ -1429,7 +1429,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1444,14 +1444,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "IXXAT Automation GmbH",
+ [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, 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",
@@ -1463,7 +1463,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1501,7 +1501,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Denon, Ltd.",
+ [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",
@@ -1516,8 +1516,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1534,7 +1534,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR",
+ [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.",
@@ -1592,16 +1592,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 40}: "Cisco Systems, Inc",
[3]byte{0, 6, 41}: "IBM Corp",
- [3]byte{0, 6, 42}: "CISCO SYSTEMS, INC.",
+ [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",
+ [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.",
@@ -1620,7 +1620,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 68}: "NextGen Business Solutions, 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.",
@@ -1634,8 +1634,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -1643,11 +1643,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Computer Corp.",
+ [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 - NGTS Ltd.",
+ [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.",
@@ -1672,11 +1672,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Marantz Brand Company",
+ [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, 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.",
@@ -1692,7 +1692,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 140}: "3COM",
[3]byte{0, 6, 141}: "SEPATON, Inc.",
[3]byte{0, 6, 142}: "HID Corporation",
[3]byte{0, 6, 143}: "Telemonitor, Inc.",
@@ -1745,7 +1745,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1766,8 +1766,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1797,9 +1797,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Co,. Ltd.",
- [3]byte{0, 6, 246}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 6, 247}: "ALPS Co,. Ltd.",
+ [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.",
@@ -1812,7 +1812,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Co,. Ltd.",
+ [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.",
@@ -1821,8 +1821,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -1836,7 +1836,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Fixed Wireless Services",
+ [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",
@@ -1846,7 +1846,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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., Ltd.",
+ [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",
@@ -1866,15 +1866,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 58}: "INVENTEL",
[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, 64}: "BUFFALO.INC",
[3]byte{0, 7, 65}: "Sierra Automated Systems",
- [3]byte{0, 7, 66}: "Current Technologies, LLC",
+ [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.",
@@ -1887,8 +1887,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -1905,7 +1905,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Logitech Europe SA",
+ [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.",
@@ -1922,7 +1922,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Shanghai Bell Co., Ltd.",
+ [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.",
@@ -1933,15 +1933,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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.",
@@ -1957,7 +1957,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 System Co. (ECS)",
+ [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",
@@ -1974,27 +1974,27 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Home Automation, Inc.",
+ [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, 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}: "N-TRON Corporation",
+ [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, 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, 186}: "UTStarcom Inc",
[3]byte{0, 7, 187}: "Candera Inc.",
[3]byte{0, 7, 188}: "Identix Inc.",
[3]byte{0, 7, 189}: "Radionet Ltd.",
@@ -2011,7 +2011,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 SA",
+ [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",
@@ -2024,7 +2024,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Systems Inc.",
+ [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.",
@@ -2043,8 +2043,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -2066,7 +2066,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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",
@@ -2096,8 +2096,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -2111,10 +2111,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -2153,7 +2153,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Computer Corp.",
+ [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",
@@ -2161,20 +2161,20 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Company",
+ [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, 137}: "Dish 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.",
@@ -2200,8 +2200,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2222,7 +2222,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "KAON MEDIA Co., Ltd.",
+ [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",
@@ -2231,14 +2231,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Company",
+ [3]byte{0, 8, 199}: "Hewlett Packard",
[3]byte{0, 8, 200}: "Soneticom, Inc.",
- [3]byte{0, 8, 201}: "TechniSat Digital GmbH",
+ [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.",
@@ -2263,8 +2263,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -2283,11 +2283,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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 System Solutions 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}: "Karl E.Brinkmann GmbH",
+ [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.",
@@ -2310,8 +2310,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2351,17 +2351,17 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Fiber Optics",
+ [3]byte{0, 9, 58}: "Molex CMS",
[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 K.K.",
+ [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, 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.",
@@ -2384,7 +2384,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, Inc.",
+ [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.",
@@ -2395,7 +2395,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Thales Navigation",
+ [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",
@@ -2416,8 +2416,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2475,13 +2475,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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}: "Digital Safety Technologies, 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.",
@@ -2516,7 +2516,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 223}: "Vestel Elektronik San ve Tic. A.Ş.",
[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.",
@@ -2525,8 +2525,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2556,7 +2556,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2587,7 +2587,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -2613,8 +2613,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2635,14 +2635,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company - Standards",
+ [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, 94}: "3COM",
[3]byte{0, 10, 95}: "almedio inc.",
[3]byte{0, 10, 96}: "Autostar Technology Pte Ltd",
[3]byte{0, 10, 97}: "Cellinx Systems Inc.",
@@ -2652,7 +2652,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -2686,8 +2686,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -2697,7 +2697,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -2731,8 +2731,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -2742,7 +2742,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "FiberHome Telecommunication Technologies CO.,LTD",
+ [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",
@@ -2765,9 +2765,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications AB",
+ [3]byte{0, 10, 217}: "Sony Mobile Communications Inc",
[3]byte{0, 10, 218}: "Vindicator Technologies",
- [3]byte{0, 10, 219}: "SkyPilot Network, Inc",
+ [3]byte{0, 10, 219}: "Trilliant",
[3]byte{0, 10, 220}: "RuggedCom Inc.",
[3]byte{0, 10, 221}: "Allworx Corp.",
[3]byte{0, 10, 222}: "Happy Communication Co., Ltd.",
@@ -2776,32 +2776,32 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Corp.",
+ [3]byte{0, 10, 228}: "Wistron Corporation",
[3]byte{0, 10, 229}: "ScottCare Corporation",
- [3]byte{0, 10, 230}: "Elitegroup Computer System Co. (ECS)",
+ [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}: "Shenzhen Tp-Link Technology Co; Ltd.",
+ [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 Systems GmbH & Co KG",
+ [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, 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 Corp.",
+ [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}: "Viking Electronic Services",
+ [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",
@@ -2828,7 +2828,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2839,7 +2839,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 35}: "Siemens Home & Office Comm. Devices",
[3]byte{0, 11, 36}: "AirLogic",
[3]byte{0, 11, 37}: "Aeluros",
[3]byte{0, 11, 38}: "Wetek Corporation",
@@ -2850,7 +2850,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 (Thailand) Public Company Limited Taipe",
+ [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",
@@ -2873,8 +2873,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2883,7 +2883,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2899,8 +2899,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -2910,8 +2910,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Incorporation",
- [3]byte{0, 11, 107}: "Wistron Neweb Corp.",
+ [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.",
@@ -2937,7 +2937,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -2965,9 +2965,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "SYSCOM Ltd.",
- [3]byte{0, 11, 162}: "Sumitomo Electric Networks, Inc",
- [3]byte{0, 11, 163}: "Siemens AG, I&S",
+ [3]byte{0, 11, 161}: "Fujikura Solutions Ltd.",
+ [3]byte{0, 11, 162}: "Sumitomo Electric Industries,Ltd",
+ [3]byte{0, 11, 163}: "Siemens AG",
[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.",
@@ -2994,8 +2994,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -3006,10 +3006,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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 International Corporation",
+ [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 Company",
+ [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.",
@@ -3023,7 +3023,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -3048,16 +3048,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 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",
@@ -3108,8 +3108,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -3125,7 +3125,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -3133,7 +3133,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 RTC Division A/S",
+ [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.",
@@ -3143,7 +3143,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -3170,7 +3170,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -3193,8 +3193,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -3231,7 +3231,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -3253,7 +3253,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Cooper Industries Inc.",
+ [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",
@@ -3266,8 +3266,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -3279,9 +3279,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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.",
@@ -3327,7 +3327,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -3356,11 +3356,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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}: "Patapsco Designs Ltd",
+ [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",
@@ -3391,7 +3391,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, LLC",
+ [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.",
@@ -3402,9 +3402,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 86}: "Dell Inc.",
[3]byte{0, 13, 87}: "Fujitsu I-Network Systems Limited.",
- [3]byte{0, 13, 88}: "PRIVATE",
+ [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",
@@ -3417,8 +3417,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -3430,7 +3430,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -3446,12 +3446,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 130}: "PHSNET SRLS",
[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 System Co. (ECS)",
+ [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.",
@@ -3462,18 +3462,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Communication Corporation",
- [3]byte{0, 13, 147}: "Apple",
+ [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}: "Tropos Networks, 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 Company",
+ [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.",
@@ -3483,7 +3483,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -3498,19 +3498,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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 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, 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, 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.",
@@ -3552,13 +3552,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 242}: "Private",
[3]byte{0, 13, 243}: "Asmax Solutions",
[3]byte{0, 13, 244}: "Watertek Co.",
[3]byte{0, 13, 245}: "Teletronics International Inc.",
@@ -3579,8 +3579,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications AB",
- [3]byte{0, 14, 8}: "Cisco Linksys LLC",
+ [3]byte{0, 14, 7}: "Sony Mobile Communications Inc",
+ [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.",
@@ -3595,7 +3595,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 23}: "Private",
[3]byte{0, 14, 24}: "MyA Technology",
[3]byte{0, 14, 25}: "LogicaCMG Pty Ltd",
[3]byte{0, 14, 26}: "JPS Communications",
@@ -3606,7 +3606,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -3614,22 +3614,22 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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 Corp",
+ [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, 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",
@@ -3661,7 +3661,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "SAGEM SA",
+ [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.",
@@ -3699,12 +3699,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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, 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",
@@ -3715,7 +3715,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 143}: "Sercomm Corporation.",
[3]byte{0, 14, 144}: "PONICO CORP.",
[3]byte{0, 14, 145}: "Navico Auckland Ltd",
[3]byte{0, 14, 146}: "Open Telecom",
@@ -3738,7 +3738,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -3751,7 +3751,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -3786,9 +3786,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Aktino, 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.",
@@ -3804,19 +3804,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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 Digital Technology Co.,Ltd",
+ [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",
@@ -3837,7 +3837,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -3849,7 +3849,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 21}: "Icotera 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",
@@ -3859,12 +3859,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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, 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.",
@@ -3880,8 +3880,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -3907,7 +3907,7 @@ var validMACPrefixMap = map[[3]byte]string{
[3]byte{0, 15, 76}: "Elextech INC",
[3]byte{0, 15, 77}: "TalkSwitch",
[3]byte{0, 15, 78}: "Cellink",
- [3]byte{0, 15, 79}: "Cadmus Technology Ltd",
+ [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",
@@ -3917,7 +3917,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Communications AG",
+ [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",
@@ -3925,12 +3925,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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",
+ [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",
@@ -3962,7 +3962,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Research In Motion Limited",
+ [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.",
@@ -3971,8 +3971,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -4004,14 +4004,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Inc",
+ [3]byte{0, 15, 181}: "NETGEAR",
[3]byte{0, 15, 182}: "Europlex Technologies",
- [3]byte{0, 15, 183}: "Cavium Networks",
+ [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",
@@ -4032,10 +4032,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Netopia, Inc.",
+ [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, 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.",
@@ -4047,14 +4047,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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 Ericsson Mobile Communications AB",
+ [3]byte{0, 15, 222}: "Sony Mobile Communications Inc",
[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., Ltd.",
+ [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",
@@ -4074,9 +4074,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Electronics Corp.",
- [3]byte{0, 15, 247}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 15, 248}: "CISCO SYSTEMS, INC.",
+ [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.",
@@ -4091,31 +4091,31 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 7}: "Cisco Systems, Inc",
[3]byte{0, 16, 8}: "VIENNA SYSTEMS CORPORATION",
- [3]byte{0, 16, 9}: "HORO QUARTZ",
+ [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, 11}: "Cisco Systems, Inc",
[3]byte{0, 16, 12}: "ITO CO., LTD.",
- [3]byte{0, 16, 13}: "CISCO SYSTEMS, INC.",
+ [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, 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, 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 CORPORATION",
+ [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, 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",
@@ -4125,19 +4125,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 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.",
@@ -4159,7 +4159,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 75}: "3COM",
[3]byte{0, 16, 76}: "Teledyne LeCroy, Inc",
[3]byte{0, 16, 77}: "SURTEC INDUSTRIES, INC.",
[3]byte{0, 16, 78}: "CEOLOGIC",
@@ -4168,13 +4168,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 90}: "3COM",
[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",
@@ -4199,15 +4199,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 121}: "Cisco Systems, Inc",
[3]byte{0, 16, 122}: "AmbiCom, Inc.",
- [3]byte{0, 16, 123}: "CISCO SYSTEMS, 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",
@@ -4215,16 +4215,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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 COMPANY",
+ [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, 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 TELECOMMUNICATIONS EUROPE, LTD.",
+ [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",
@@ -4250,7 +4250,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -4265,7 +4265,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 CORPORATION",
+ [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.",
@@ -4277,10 +4277,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 LINKS CO., LTD.",
+ [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",
@@ -4303,7 +4303,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, Inc.",
+ [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",
@@ -4311,11 +4311,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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",
+ [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",
@@ -4330,16 +4330,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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, 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.",
@@ -4350,7 +4350,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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.",
@@ -4367,16 +4367,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Canada",
+ [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, 30}: "ETHERNET Powerlink Standarization Group (EPSG)",
[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, 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",
+ [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",
@@ -4387,11 +4387,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 51}: "Siemens AG Austria",
[3]byte{0, 17, 52}: "MediaCell, Inc.",
[3]byte{0, 17, 53}: "Grandeye Ltd",
[3]byte{0, 17, 54}: "Goodrich Sensor Systems",
@@ -4407,7 +4407,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -4427,13 +4427,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "OF Networks Co., Ltd.",
+ [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 System Co. (ECS)",
- [3]byte{0, 17, 92}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 17, 93}: "CISCO SYSTEMS, INC.",
+ [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",
@@ -4441,7 +4441,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -4450,14 +4450,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ltd.",
+ [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}: "Wibhu Technologies, Inc.",
- [3]byte{0, 17, 117}: "PathScale, Inc.",
+ [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",
@@ -4466,28 +4466,28 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Progeny, A division of Midmark Corp",
+ [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 Company",
+ [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 Business Group",
+ [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, 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.",
@@ -4527,8 +4527,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -4556,7 +4556,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -4585,19 +4585,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Electric Gmbh & Co.KG",
+ [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, 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.",
@@ -4621,12 +4621,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Ahead Communication Systems Inc",
+ [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 S.A.",
+ [3]byte{0, 18, 28}: "PARROT SA",
[3]byte{0, 18, 29}: "Netfabric Corporation",
- [3]byte{0, 18, 30}: "Juniper Networks, Inc.",
+ [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",
@@ -4657,25 +4657,25 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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, 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}: "EMC Corporation (Kashya)",
+ [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, 79}: "nVent",
[3]byte{0, 18, 80}: "Tokyo Aircaft Instrument Co., Ltd.",
[3]byte{0, 18, 81}: "SILINK",
[3]byte{0, 18, 82}: "Citronix, LLC",
@@ -4704,7 +4704,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ltd.",
+ [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.",
@@ -4717,14 +4717,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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, 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",
@@ -4732,7 +4732,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -4761,7 +4761,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 165}: "Dolphin Interconnect Solutions AS",
[3]byte{0, 18, 166}: "Dolby Australia",
[3]byte{0, 18, 167}: "ISR TECHNOLOGIES Inc",
[3]byte{0, 18, 168}: "intec GmbH",
@@ -4803,9 +4803,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Corporation",
+ [3]byte{0, 18, 207}: "Accton Technology Corp",
[3]byte{0, 18, 208}: "Gossen-Metrawatt-GmbH",
- [3]byte{0, 18, 209}: "Texas Instruments Inc",
+ [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",
@@ -4813,8 +4813,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -4834,11 +4834,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications AB",
+ [3]byte{0, 18, 238}: "Sony Mobile Communications Inc",
[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, 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",
@@ -4847,7 +4847,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -4862,30 +4862,30 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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 International",
+ [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 Computer Entertainment 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 as",
+ [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, 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 Company",
+ [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",
@@ -4923,15 +4923,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "BlueTree Wireless Data Inc.",
+ [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, 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, 79}: "Rapidus Wireless Networks 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.",
@@ -4947,13 +4947,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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",
@@ -4966,12 +4966,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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.",
@@ -4979,23 +4979,23 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 138}: "Qingdao GoerTek Technology 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 Incorporation",
+ [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",
@@ -5009,13 +5009,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Marvell Hispana S.L.",
+ [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, 163}: "Siemens Home & Office Comm. Devices",
[3]byte{0, 19, 164}: "KeyEye Communications",
[3]byte{0, 19, 165}: "General Solutions, LTD.",
[3]byte{0, 19, 166}: "Extricom Ltd",
@@ -5047,8 +5047,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -5088,7 +5088,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Sunbay Software AG",
+ [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",
@@ -5121,41 +5121,41 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
- [3]byte{0, 20, 14}: "Nortel",
+ [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, 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, 27}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 28}: "Cisco Systems, Inc",
+ [3]byte{0, 20, 29}: "LTI-Motion 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, 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, 40}: "Vocollect Inc",
[3]byte{0, 20, 41}: "V Center Technologies Co., Ltd.",
- [3]byte{0, 20, 42}: "Elitegroup Computer System 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}: "WildPackets",
+ [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.",
@@ -5164,8 +5164,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
- [3]byte{0, 20, 57}: "Blonder Tongue Laboratories, Inc.",
+ [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.",
@@ -5189,7 +5189,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -5213,22 +5213,22 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 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, 114}: "China Broadband Wireless IP Standard group(ChinaBWIPS)",
[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}: "ShenZhen TP-LINK Technologies Co., Ltd.",
+ [3]byte{0, 20, 119}: "Trilliant",
+ [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.",
@@ -5248,7 +5248,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Fortress Technologies",
+ [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.",
@@ -5257,7 +5257,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -5272,12 +5272,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -5285,7 +5285,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Avitec AB",
+ [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",
@@ -5299,15 +5299,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Company",
+ [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",
+ [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",
@@ -5317,7 +5317,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -5349,12 +5349,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, Inc.",
+ [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",
@@ -5394,7 +5394,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 30}: "ETHERNET Powerlink Standarization 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",
@@ -5406,13 +5406,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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 GmbH",
- [3]byte{0, 21, 43}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 21, 44}: "CISCO SYSTEMS, INC.",
+ [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}: "EMC Corporation",
+ [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",
@@ -5421,14 +5421,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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",
@@ -5450,7 +5450,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "SAGEM COMMUNICATION",
+ [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.",
@@ -5460,10 +5460,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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, 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.",
@@ -5476,20 +5476,20 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Symbol TechnologiesWholly owned Subsidiary of Motorola",
+ [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",
+ [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 CO., LTD.",
+ [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",
@@ -5514,21 +5514,21 @@ var validMACPrefixMap = map[[3]byte]string{
[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 International",
+ [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, 153}: "Samsung Electronics Co.,Ltd",
[3]byte{0, 21, 154}: "ARRIS Group, Inc.",
- [3]byte{0, 21, 155}: "Nortel",
+ [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 International",
- [3]byte{0, 21, 163}: "ARRIS International",
- [3]byte{0, 21, 164}: "ARRIS International",
+ [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",
@@ -5539,7 +5539,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Technologies, Inc.",
+ [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.",
@@ -5549,7 +5549,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -5557,22 +5557,22 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Computer Entertainment inc,",
+ [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, 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 International",
- [3]byte{0, 21, 207}: "ARRIS International",
- [3]byte{0, 21, 208}: "ARRIS International",
+ [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.",
@@ -5596,10 +5596,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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",
@@ -5613,15 +5613,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, Inc.",
+ [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, 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",
@@ -5652,7 +5652,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications AB",
+ [3]byte{0, 22, 32}: "Sony Mobile Communications Inc",
[3]byte{0, 22, 33}: "Colorado Vnet",
[3]byte{0, 22, 34}: "BBH SYSTEMS GMBH",
[3]byte{0, 22, 35}: "Interval Media",
@@ -5660,7 +5660,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Ultra Electronics Manufacturing and Card Systems",
+ [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.",
@@ -5670,14 +5670,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Company",
- [3]byte{0, 22, 54}: "Quanta Computer 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, 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.",
@@ -5690,17 +5690,17 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 North America IP Division",
+ [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}: "Herley General Microwave Israel.",
+ [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",
@@ -5712,11 +5712,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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",
@@ -5727,9 +5727,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
- [3]byte{0, 22, 108}: "Samsung Electonics Digital Video System Division",
- [3]byte{0, 22, 109}: "Yulong Computer Telecommunication Scientific(shenzhen)Co.,Lt",
+ [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",
@@ -5742,7 +5742,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Dvelopment Ltd.",
+ [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.",
@@ -5763,7 +5763,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 as",
+ [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.",
@@ -5776,8 +5776,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -5800,12 +5800,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 180}: "Private",
[3]byte{0, 22, 181}: "ARRIS Group, Inc.",
- [3]byte{0, 22, 182}: "Cisco-Linksys",
+ [3]byte{0, 22, 182}: "Cisco-Linksys, LLC",
[3]byte{0, 22, 183}: "Seoul Commtech",
- [3]byte{0, 22, 184}: "Sony Ericsson Mobile Communications",
- [3]byte{0, 22, 185}: "ProCurve Networking",
+ [3]byte{0, 22, 184}: "Sony Mobile Communications Inc",
+ [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",
@@ -5819,15 +5819,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
- [3]byte{0, 22, 203}: "Apple",
+ [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, 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",
@@ -5839,7 +5839,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -5847,7 +5847,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -5856,9 +5856,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Digital Safety Technologies, Inc",
- [3]byte{0, 22, 238}: "RoyalDigital Inc.",
+ [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",
@@ -5871,10 +5871,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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.",
@@ -5882,16 +5882,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Techfaith Wireless Communication Technology Limited.",
+ [3]byte{0, 23, 6}: "Techfaithwireless Communication Technology Limited.",
[3]byte{0, 23, 7}: "InGrid, Inc",
- [3]byte{0, 23, 8}: "Hewlett-Packard Company",
+ [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, 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",
@@ -5901,7 +5901,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -5926,20 +5926,20 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 50}: "Science-Technical Center RISSA",
[3]byte{0, 23, 51}: "SFR",
[3]byte{0, 23, 52}: "ADC Telecommunications",
- [3]byte{0, 23, 53}: "PRIVATE",
+ [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}: "Reach Systems Inc.",
- [3]byte{0, 23, 59}: "Cisco Systems, Inc.",
+ [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 Corporation",
+ [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",
@@ -5965,19 +5965,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
+ [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",
@@ -6001,7 +6001,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 International 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.",
@@ -6024,14 +6024,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -6040,7 +6040,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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",
@@ -6058,7 +6058,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 182}: "Aquantia Corporation",
[3]byte{0, 23, 183}: "Tonze Technology Co.",
[3]byte{0, 23, 184}: "NOVATRON CO., LTD.",
[3]byte{0, 23, 185}: "Gambro Lundia AB",
@@ -6076,8 +6076,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Document Solutions Inc.",
- [3]byte{0, 23, 201}: "Samsung Electronics Co., Ltd.",
+ [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",
@@ -6085,11 +6085,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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.",
@@ -6099,8 +6099,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -6118,8 +6118,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
- [3]byte{0, 23, 243}: "Harris Corparation",
+ [3]byte{0, 23, 242}: "Apple, Inc.",
+ [3]byte{0, 23, 243}: "Harris Corporation",
[3]byte{0, 23, 244}: "ZERON ALLIANCE",
[3]byte{0, 23, 245}: "LIG NEOPTEK",
[3]byte{0, 23, 246}: "Pyramid Meriden Inc.",
@@ -6142,7 +6142,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Meraki, Inc.",
+ [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",
@@ -6151,13 +6151,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications",
+ [3]byte{0, 24, 19}: "Sony Mobile Communications Inc",
[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, 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",
@@ -6169,7 +6169,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -6178,7 +6178,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, LLC",
+ [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",
@@ -6189,13 +6189,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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",
@@ -6205,11 +6205,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 73}: "nVent, Schroff GmbH",
[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 Inc.",
+ [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",
@@ -6224,7 +6224,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "EDS Lab Pte Ltd",
+ [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.",
@@ -6236,7 +6236,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Scientific Atlanta, A Cisco Company",
+ [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.",
@@ -6245,10 +6245,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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, 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",
@@ -6257,12 +6257,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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 shanghai Co. Ltd",
+ [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, 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",
@@ -6271,7 +6271,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -6307,8 +6307,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -6317,8 +6317,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -6347,10 +6347,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Navigation Systems Inc.",
+ [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, 218}: "Würth Elektronik eiSos GmbH & Co. KG",
[3]byte{0, 24, 219}: "EPL Technology Ltd",
[3]byte{0, 24, 220}: "Prostar Co., Ltd.",
[3]byte{0, 24, 221}: "Silicondust Engineering Ltd",
@@ -6367,7 +6367,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "BroVis Wireless Networks",
+ [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.",
@@ -6380,13 +6380,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Company",
+ [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",
@@ -6394,8 +6394,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -6421,7 +6421,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 System Co.",
+ [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",
@@ -6435,8 +6435,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -6457,13 +6457,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Ten-Tec Inc.",
+ [3]byte{0, 25, 69}: "RF COncepts, LLC",
[3]byte{0, 25, 70}: "Cianet Industria e Comercio S/A",
- [3]byte{0, 25, 71}: "Scientific Atlanta, A Cisco Company",
+ [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}: "SAGEM COMMUNICATION",
+ [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)",
@@ -6473,8 +6473,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -6487,13 +6487,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications AB",
+ [3]byte{0, 25, 99}: "Sony Mobile Communications Inc",
[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",
+ [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",
@@ -6502,19 +6502,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 114}: "Plexus (Xiamen) Co.,ltd.",
[3]byte{0, 25, 115}: "Zeugma Systems",
- [3]byte{0, 25, 116}: "AboCom Systems, Inc.",
+ [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, 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, 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",
@@ -6523,7 +6523,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -6534,18 +6534,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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, 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.",
@@ -6557,8 +6557,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -6568,30 +6568,30 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "VideoCast Ltd.",
+ [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 Company",
+ [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, 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 Computer Entertainment inc,",
- [3]byte{0, 25, 198}: "ZTE Corporation",
+ [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, 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",
@@ -6612,15 +6612,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
- [3]byte{0, 25, 228}: "2Wire, Inc",
+ [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, 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",
@@ -6661,7 +6661,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -6677,7 +6677,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Indac B.V.",
+ [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",
@@ -6685,15 +6685,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, Inc",
+ [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, 47}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 48}: "Cisco Systems, Inc",
+ [3]byte{0, 26, 49}: "SCAN COIN 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.",
@@ -6713,13 +6713,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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 as",
+ [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 Company",
+ [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",
@@ -6752,8 +6752,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -6761,7 +6761,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications",
+ [3]byte{0, 26, 117}: "Sony Mobile Communications Inc",
[3]byte{0, 26, 118}: "SDT information Technology Co.,LTD.",
[3]byte{0, 26, 119}: "ARRIS Group, Inc.",
[3]byte{0, 26, 120}: "ubtos",
@@ -6771,7 +6771,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -6782,12 +6782,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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.",
@@ -6798,15 +6798,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -6840,8 +6840,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 196}: "2Wire Inc",
+ [3]byte{0, 26, 197}: "Keysight Technologies, 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)",
@@ -6870,21 +6870,21 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 GmbH and Co KG",
+ [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 K.K.",
+ [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 - IPD",
+ [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",
@@ -6912,8 +6912,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -6936,18 +6936,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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 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",
@@ -6979,19 +6979,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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 Ericsson Mobile Communications AB",
+ [3]byte{0, 27, 89}: "Sony Mobile Communications Inc",
[3]byte{0, 27, 90}: "Apollo Imaging Technologies, Inc.",
- [3]byte{0, 27, 91}: "2Wire, 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",
@@ -6999,7 +6999,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -7010,7 +7010,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 110}: "Keysight Technologies, Inc.",
[3]byte{0, 27, 111}: "Teletrak Ltd",
[3]byte{0, 27, 112}: "IRI Ubiteq, INC.",
[3]byte{0, 27, 113}: "Telular Corp.",
@@ -7020,7 +7020,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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",
@@ -7043,8 +7043,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -7052,13 +7052,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -7069,7 +7069,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -7077,21 +7077,21 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Corp.",
+ [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}: "ZF Electronics GmbH",
+ [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 System Co.",
- [3]byte{0, 27, 186}: "Nortel",
+ [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}: "SAGEM COMMUNICATION",
+ [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",
@@ -7111,13 +7111,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Corp. AVC Company",
- [3]byte{0, 27, 212}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 27, 213}: "CISCO SYSTEMS, 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}: "Scientific Atlanta, A Cisco Company",
- [3]byte{0, 27, 216}: "DVTel LTD",
- [3]byte{0, 27, 217}: "Edgewater Computer Systems",
+ [3]byte{0, 27, 215}: "Cisco SPVTG",
+ [3]byte{0, 27, 216}: "FLIR Systems Inc",
+ [3]byte{0, 27, 217}: "Edgewater Wireless Systems Inc",
[3]byte{0, 27, 218}: "UTStarcom Inc",
[3]byte{0, 27, 219}: "Valeo VECS",
[3]byte{0, 27, 220}: "Vencer Co., Ltd.",
@@ -7133,11 +7133,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Corporation",
+ [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, 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",
@@ -7151,7 +7151,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -7170,16 +7170,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 20}: "VMware, Inc.",
[3]byte{0, 28, 21}: "iPhotonix LLC",
[3]byte{0, 28, 22}: "ThyssenKrupp Elevator",
- [3]byte{0, 28, 23}: "Nortel",
+ [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",
@@ -7191,7 +7191,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -7236,15 +7236,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -7254,7 +7254,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Inc",
+ [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.",
@@ -7264,14 +7264,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Jabil Circuit (Guangzhou) Limited",
+ [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, Inc.",
+ [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",
@@ -7312,7 +7312,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -7320,7 +7320,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications",
+ [3]byte{0, 28, 164}: "Sony Mobile Communications Inc",
[3]byte{0, 28, 165}: "Zygo Corporation",
[3]byte{0, 28, 166}: "Win4NET",
[3]byte{0, 28, 167}: "International Quartz Limited",
@@ -7332,10 +7332,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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.",
@@ -7351,16 +7351,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Pace plc",
- [3]byte{0, 28, 196}: "Hewlett-Packard Company",
- [3]byte{0, 28, 197}: "3COM LTD",
+ [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}: "Research In Motion 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",
@@ -7391,25 +7391,25 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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, 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, 249}: "Cisco Systems, Inc",
[3]byte{0, 28, 250}: "Alarm.com",
[3]byte{0, 28, 251}: "ARRIS Group, Inc.",
- [3]byte{0, 28, 252}: "Suminet Communication Technologies (Shanghai) Co., Ltd.",
- [3]byte{0, 28, 253}: "Universal Electronics",
+ [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",
@@ -7420,14 +7420,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Computer Entertainment inc.",
+ [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, 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.",
@@ -7444,7 +7444,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 CO.",
+ [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",
@@ -7452,7 +7452,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications AB",
+ [3]byte{0, 29, 40}: "Sony Mobile Communications Inc",
[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",
@@ -7478,11 +7478,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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 Messtechnik GmbH",
- [3]byte{0, 29, 69}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 29, 70}: "CISCO SYSTEMS, INC.",
+ [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.",
@@ -7491,7 +7491,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -7502,7 +7502,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -7524,10 +7524,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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.",
@@ -7542,7 +7542,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 A/S (GN Netcom A/S)",
+ [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",
@@ -7573,8 +7573,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -7587,13 +7587,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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.",
@@ -7616,7 +7616,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Hetra Secure Solutions",
+ [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.",
@@ -7629,7 +7629,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -7641,8 +7641,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -7679,16 +7679,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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}: "ShenZhen Huawei Communication Technologies Co.,Ltd.",
+ [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, 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",
@@ -7699,18 +7699,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [3]byte{0, 30, 31}: "Nortel Networks",
[3]byte{0, 30, 32}: "Intertain Inc.",
- [3]byte{0, 30, 33}: "Qisda Co.",
+ [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 Inc",
+ [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 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",
@@ -7719,7 +7719,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 51}: "INVENTEC CORPORATION",
[3]byte{0, 30, 52}: "CryptoMetrics",
[3]byte{0, 30, 53}: "Nintendo Co., Ltd.",
[3]byte{0, 30, 54}: "IPTE",
@@ -7729,28 +7729,28 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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 Ericsson Mobile Communications AB",
+ [3]byte{0, 30, 69}: "Sony Mobile Communications Inc",
[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, 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, 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",
+ [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.",
@@ -7772,7 +7772,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -7783,20 +7783,20 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "SAGEM COMMUNICATION",
- [3]byte{0, 30, 117}: "LG Electronics",
+ [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, 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",
+ [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, 128}: "Icotera A/S",
[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)",
@@ -7812,7 +7812,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -7835,14 +7835,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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",
@@ -7857,21 +7857,21 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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, 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",
- [3]byte{0, 30, 203}: "\"RPC \"Energoautomatika\" 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",
@@ -7888,7 +7888,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ericsson Mobile Communications AB",
+ [3]byte{0, 30, 220}: "Sony Mobile Communications Inc",
[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",
@@ -7914,13 +7914,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -7933,9 +7933,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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 CO., LTD.",
- [3]byte{0, 31, 10}: "Nortel",
- [3]byte{0, 31, 11}: "Federal State Unitary Enterprise Industrial Union\"Electropribor\"",
+ [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",
@@ -7962,10 +7962,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Company",
+ [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",
@@ -7975,14 +7975,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Inc.",
+ [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, 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",
@@ -7994,10 +7994,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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}: "Eurosat Distribution Ltd",
+ [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",
@@ -8015,14 +8015,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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.",
@@ -8031,9 +8031,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
- [3]byte{0, 31, 108}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 31, 109}: "CISCO SYSTEMS, 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",
@@ -8049,12 +8049,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Co., Ltd",
+ [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",
@@ -8070,28 +8070,28 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "VideoIQ, Inc.",
+ [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}: "SAGEM COMMUNICATION",
+ [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, 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, 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.,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 Computer Entertainment Inc.",
+ [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.",
@@ -8103,14 +8103,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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. & Marketing, Inc.",
+ [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.",
@@ -8123,13 +8123,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Comunications Co., Ltd.",
+ [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, 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",
+ [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.",
@@ -8149,10 +8149,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
- [3]byte{0, 31, 228}: "Sony Ericsson Mobile Communications",
+ [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 Inc",
[3]byte{0, 31, 229}: "In-Circuit GmbH",
[3]byte{0, 31, 230}: "Alphion Corporation",
[3]byte{0, 31, 231}: "Simet",
@@ -8167,7 +8167,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -8194,8 +8194,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "TANBAC CO., LTD.",
+ [3]byte{0, 32, 14}: "NSSLGlobal Technologies AS",
+ [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",
@@ -8205,7 +8205,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -8235,13 +8235,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 61}: "Honeywell Environmental & Combustion Controls",
[3]byte{0, 32, 62}: "LogiCan Technologies, Inc.",
[3]byte{0, 32, 63}: "JUKI CORPORATION",
[3]byte{0, 32, 64}: "ARRIS Group, Inc.",
@@ -8283,7 +8283,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 103}: "Private",
[3]byte{0, 32, 104}: "ISDYNE",
[3]byte{0, 32, 105}: "ISDN SYSTEMS CORPORATION",
[3]byte{0, 32, 106}: "OSAKA COMPUTER CORP.",
@@ -8304,9 +8304,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 124}: "AUTEC GMBH",
[3]byte{0, 32, 125}: "ADVANCED COMPUTER APPLICATIONS",
- [3]byte{0, 32, 126}: "FINECOM Co., Ltd.",
+ [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",
@@ -8323,7 +8323,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -8355,7 +8355,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 175}: "3COM",
[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",
@@ -8392,19 +8392,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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 - ZEITTNET INC.",
+ [3]byte{0, 32, 212}: "Cabletron Systems, Inc.",
[3]byte{0, 32, 213}: "VIPA GMBH",
- [3]byte{0, 32, 214}: "BREEZECOM",
+ [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 North America ESD",
+ [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, 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",
@@ -8436,12 +8436,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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",
@@ -8461,10 +8461,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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.",
@@ -8475,7 +8475,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Technology 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",
@@ -8512,29 +8512,29 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 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 Company",
- [3]byte{0, 33, 91}: "Inotive",
+ [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",
+ [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.",
@@ -8548,7 +8548,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -8560,17 +8560,17 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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}: "VATECH HYDRO",
+ [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, 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.",
@@ -8587,17 +8587,17 @@ var validMACPrefixMap = map[[3]byte]string{
[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 SYSTEM",
+ [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, 155}: "Dell Inc.",
[3]byte{0, 33, 156}: "Honeywld Technology Corp.",
[3]byte{0, 33, 157}: "Adesys BV",
- [3]byte{0, 33, 158}: "Sony Ericsson Mobile Communications",
+ [3]byte{0, 33, 158}: "Sony Mobile Communications Inc",
[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, 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",
@@ -8626,7 +8626,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, Service Provider Video Technology Group",
+ [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",
@@ -8651,8 +8651,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -8662,14 +8662,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Creative Electronic GmbH",
+ [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",
+ [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",
@@ -8687,9 +8687,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [3]byte{0, 33, 251}: "LG Electronics (Mobile Communications)",
[3]byte{0, 33, 252}: "Nokia Danmark A/S",
- [3]byte{0, 33, 253}: "DSTA S.L.",
+ [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",
@@ -8704,8 +8704,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -8716,11 +8716,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 24}: "AKAMAI TECHNOLOGIES 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, 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.",
@@ -8750,16 +8750,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Scientific Atlanta, Cisco SPVT Group",
+ [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 Inc.",
+ [3]byte{0, 34, 63}: "NETGEAR",
[3]byte{0, 34, 64}: "Universal Telecom S/A",
- [3]byte{0, 34, 65}: "Apple",
+ [3]byte{0, 34, 65}: "Apple, Inc.",
[3]byte{0, 34, 66}: "Alacron Inc.",
- [3]byte{0, 34, 67}: "AzureWave Technologies, 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.",
@@ -8777,9 +8777,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -8792,12 +8792,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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, 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.",
@@ -8836,15 +8836,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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 Ericsson Mobile Communications",
+ [3]byte{0, 34, 152}: "Sony Mobile Communications Inc",
[3]byte{0, 34, 153}: "SeaMicro Inc.",
[3]byte{0, 34, 154}: "Lastar, Inc.",
[3]byte{0, 34, 155}: "AverLogic Technologies, Inc.",
@@ -8856,12 +8856,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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 Inc",
+ [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",
@@ -8869,7 +8869,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -8881,8 +8881,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -8898,8 +8898,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, Service Provider Video Technology Group",
- [3]byte{0, 34, 207}: "PLANEX Communications INC",
+ [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.",
@@ -8933,7 +8933,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 241}: "Private",
[3]byte{0, 34, 242}: "SunPower Corp",
[3]byte{0, 34, 243}: "SHARP Corporation",
[3]byte{0, 34, 244}: "AMPAK Technology, Inc.",
@@ -8946,15 +8946,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Microprocessor Designs Inc",
- [3]byte{0, 34, 255}: "iWDL Technologies",
+ [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, 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",
@@ -8966,7 +8966,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -8986,7 +8986,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -8998,38 +8998,38 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
- [3]byte{0, 35, 51}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 35, 52}: "CISCO SYSTEMS, INC.",
+ [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",
+ [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, 61}: "Laird Technologies",
+ [3]byte{0, 35, 62}: "Alcatel-Lucent IPD",
[3]byte{0, 35, 63}: "Purechoice Inc",
- [3]byte{0, 35, 64}: "MiX Telematics",
- [3]byte{0, 35, 65}: "Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR",
+ [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 Ericsson Mobile Communications",
+ [3]byte{0, 35, 69}: "Sony Mobile Communications Inc",
[3]byte{0, 35, 70}: "Vestac",
[3]byte{0, 35, 71}: "ProCurve Networking by HP",
- [3]byte{0, 35, 72}: "SAGEM COMMUNICATION",
+ [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, 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, 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",
+ [3]byte{0, 35, 80}: "RDC, Inc. dba 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.",
@@ -9038,25 +9038,25 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 99}: "Zhuhai Raysharp Technology Co.,Ltd",
[3]byte{0, 35, 100}: "Power Instruments Pte Ltd",
- [3]byte{0, 35, 101}: "ELKA-Elektronik GmbH",
+ [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}: "Motorola",
+ [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",
+ [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",
@@ -9073,24 +9073,24 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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, 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., Ltd.",
+ [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, 139}: "QUANTA COMPUTER INC.",
+ [3]byte{0, 35, 140}: "Private",
[3]byte{0, 35, 141}: "Techno Design Co., Ltd.",
- [3]byte{0, 35, 142}: "Pirelli Tyre S.p.A.",
+ [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",
@@ -9100,8 +9100,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Sky Control",
- [3]byte{0, 35, 153}: "VD Division, Samsung Electronics Co.",
+ [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",
@@ -9119,8 +9119,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -9133,7 +9133,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "EADS Deutschland GmbH",
+ [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",
@@ -9153,7 +9153,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -9162,8 +9162,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -9171,7 +9171,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -9182,21 +9182,21 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Ericsson Mobile Communications",
+ [3]byte{0, 35, 241}: "Sony Mobile Communications Inc",
[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, 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.",
@@ -9223,13 +9223,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -9240,26 +9240,26 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Axis Network Technology",
+ [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, 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, 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",
+ [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, 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",
@@ -9271,7 +9271,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "CommScope Canada Inc.",
+ [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",
@@ -9282,15 +9282,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 84}: "Samsung Electronics Co.,Ltd",
[3]byte{0, 36, 85}: "MuLogic BV",
- [3]byte{0, 36, 86}: "2Wire",
+ [3]byte{0, 36, 86}: "2Wire Inc",
[3]byte{0, 36, 88}: "PA Bastion CC",
- [3]byte{0, 36, 89}: "ABB STOTZ-KONTAKT GmbH",
+ [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.",
@@ -9309,14 +9309,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -9327,12 +9327,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 Company",
+ [3]byte{0, 36, 129}: "Hewlett Packard",
[3]byte{0, 36, 130}: "Ruckus Wireless",
- [3]byte{0, 36, 131}: "LG Electronics",
+ [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",
@@ -9342,18 +9342,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Computer Entertainment 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",
+ [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, 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.",
@@ -9366,7 +9366,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -9375,11 +9375,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [3]byte{0, 36, 174}: "IDEMIA",
+ [3]byte{0, 36, 175}: "Dish 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, 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",
@@ -9396,8 +9396,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -9411,9 +9411,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [3]byte{0, 36, 210}: "ASKEY COMPUTER CORP",
[3]byte{0, 36, 211}: "QUALICA Inc.",
- [3]byte{0, 36, 212}: "FREEBOX SA",
+ [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",
@@ -9434,31 +9434,31 @@ var validMACPrefixMap = map[[3]byte]string{
[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., Storage System Division",
+ [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 Ericsson Mobile Communications",
+ [3]byte{0, 36, 239}: "Sony Mobile Communications Inc",
[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 Technologies 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, 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, 249}: "Cisco Systems, Inc",
[3]byte{0, 36, 250}: "Hilger u. Kern GMBH",
- [3]byte{0, 36, 251}: "PRIVATE",
+ [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",
- [3]byte{0, 37, 1}: "JSC \"Supertel\"",
+ [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",
@@ -9469,13 +9469,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 12}: "Senet Inc",
[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 SYSTEM CO., LTD.",
- [3]byte{0, 37, 18}: "ZTE Corporation",
+ [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",
@@ -9516,7 +9516,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -9524,25 +9524,25 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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",
+ [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}: "Pirelli Tyre S.p.A.",
+ [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}: "Research In Motion",
+ [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.",
@@ -9558,12 +9558,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
- [3]byte{0, 37, 104}: "Shenzhen Huawei Communication Technologies Co., Ltd",
- [3]byte{0, 37, 105}: "SAGEM COMMUNICATION",
+ [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, 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",
@@ -9575,7 +9575,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -9586,15 +9586,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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 Ltd",
+ [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",
@@ -9612,8 +9612,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -9634,23 +9634,23 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
- [3]byte{0, 37, 180}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 37, 181}: "CISCO SYSTEMS, INC.",
+ [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",
+ [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}: "Nortel Networks",
+ [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",
@@ -9666,8 +9666,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Technologies, Inc",
- [3]byte{0, 37, 212}: "Fortress Technologies",
+ [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",
@@ -9675,18 +9675,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Networks, Inc",
+ [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, 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 Inc",
+ [3]byte{0, 37, 229}: "LG Electronics (Mobile Communications)",
[3]byte{0, 37, 230}: "Belgian Monitoring Systems bvba",
- [3]byte{0, 37, 231}: "Sony Ericsson Mobile Communications",
+ [3]byte{0, 37, 231}: "Sony Mobile Communications Inc",
[3]byte{0, 37, 232}: "Idaho Technology",
[3]byte{0, 37, 233}: "i-mate Development, Inc.",
[3]byte{0, 37, 234}: "Iphion BV",
@@ -9718,10 +9718,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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",
@@ -9765,7 +9765,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -9777,23 +9777,23 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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",
- [3]byte{0, 38, 81}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 38, 82}: "CISCO SYSTEMS, INC.",
+ [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 Company",
+ [3]byte{0, 38, 84}: "3COM",
+ [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",
@@ -9801,7 +9801,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -9816,7 +9816,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -9834,16 +9834,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 126}: "PARROT SA",
[3]byte{0, 38, 127}: "Zenterio AB",
- [3]byte{0, 38, 128}: "Lockie Innovation Pty Ltd",
+ [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, 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",
@@ -9853,21 +9853,21 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "SAGEM COMMUNICATION",
- [3]byte{0, 38, 146}: "Mitsubishi Electric Co.",
+ [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}: "Cheetah Technologies, L.P.",
- [3]byte{0, 38, 152}: "CISCO SYSTEMS, INC.",
- [3]byte{0, 38, 153}: "CISCO SYSTEMS, INC.",
+ [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, 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",
@@ -9879,25 +9879,25 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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",
+ [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, 185}: "Dell Inc.",
[3]byte{0, 38, 186}: "ARRIS Group, Inc.",
- [3]byte{0, 38, 187}: "Apple",
+ [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, 189}: "JTEC Card &amp; 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",
@@ -9910,8 +9910,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -9925,7 +9925,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Pace plc",
+ [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",
@@ -9934,9 +9934,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [3]byte{0, 38, 226}: "LG Electronics (Mobile Communications)",
[3]byte{0, 38, 227}: "DTI",
- [3]byte{0, 38, 228}: "CANAL OVERSEAS",
+ [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.",
@@ -9950,12 +9950,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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}: "Infosys Technologies Ltd.",
+ [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.",
@@ -9963,7 +9963,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Research In Motion",
+ [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",
@@ -9976,8 +9976,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -9989,7 +9989,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -9998,11 +9998,20 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 42, 106}: "CISCO 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, 47, 217}: "Fiberhome Telecommunication Technologies Co.,LTD",
[3]byte{0, 48, 0}: "ALLWELL TECHNOLOGY CORP.",
[3]byte{0, 48, 1}: "SMP",
[3]byte{0, 48, 2}: "Expand Networks",
@@ -10013,7 +10022,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -10028,18 +10037,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 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.",
@@ -10067,7 +10076,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -10075,7 +10084,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Supermicro Computer, Inc.",
+ [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.",
@@ -10104,39 +10113,39 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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, 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, 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, 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, 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, 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, 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",
@@ -10151,9 +10160,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 148}: "Cisco Systems, Inc",
[3]byte{0, 48, 149}: "Procomp Informatics, Ltd.",
- [3]byte{0, 48, 150}: "CISCO SYSTEMS, INC.",
+ [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",
@@ -10166,7 +10175,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -10185,7 +10194,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -10196,11 +10205,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
+ [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.",
@@ -10214,14 +10223,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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 CO.",
+ [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",
@@ -10244,8 +10253,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -10258,24 +10267,35 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 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, 16}: "Cisco Systems, Inc",
[3]byte{0, 60, 197}: "WONWOO Engineering Co., Ltd",
[3]byte{0, 61, 65}: "Hatteland Computer AS",
- [3]byte{0, 62, 225}: "Apple",
+ [3]byte{0, 61, 232}: "LG Electronics (Mobile Communications)",
+ [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",
@@ -10287,7 +10307,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -10308,17 +10328,17 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "TE Connectivity 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, 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",
+ [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",
@@ -10330,7 +10350,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "TRIBE COMPUTER WORKS, INC.",
+ [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.",
@@ -10378,7 +10398,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Hitachi Metals, Ltd.",
+ [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.",
@@ -10408,7 +10428,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 132}: "Honeywell International HPS",
[3]byte{0, 64, 133}: "SAAB INSTRUMENTS AB",
[3]byte{0, 64, 134}: "MICHELS & KLEBERHOFF COMPUTER",
[3]byte{0, 64, 135}: "UBITREX CORPORATION",
@@ -10426,14 +10446,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 157}: "DigiBoard",
[3]byte{0, 64, 158}: "CONCURRENT TECHNOLOGIES LTD.",
[3]byte{0, 64, 159}: "Telco Systems, Inc.",
[3]byte{0, 64, 160}: "GOLDSTAR CO., LTD.",
@@ -10446,7 +10466,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Metso Automation",
+ [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",
@@ -10527,45 +10547,52 @@ var validMACPrefixMap = map[[3]byte]string{
[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 CORP.",
+ [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, 66, 121}: "Sunitec Enterprise Co.,Ltd",
[3]byte{0, 67, 255}: "KETRON S.R.L.",
[3]byte{0, 69, 1}: "Versus Technology, Inc.",
+ [3]byte{0, 69, 29}: "Cisco Systems, 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, 4}: "3COM",
[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, 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, 15}: "Cisco Systems, Inc",
[3]byte{0, 80, 16}: "NovaNET Learning, Inc.",
[3]byte{0, 80, 18}: "CBL - GMBH",
- [3]byte{0, 80, 19}: "Chaparral Network Storage",
- [3]byte{0, 80, 20}: "CISCO SYSTEMS, INC.",
+ [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}: "SST/WOODHEAD INDUSTRIES",
+ [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}: "Miranda Technologies, 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.",
@@ -10576,7 +10603,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -10593,7 +10620,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -10602,7 +10629,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 71}: "Private",
[3]byte{0, 80, 72}: "INFOLIBRIA",
[3]byte{0, 80, 73}: "Arbor Networks Inc",
[3]byte{0, 80, 74}: "ELTECO A.S.",
@@ -10611,15 +10638,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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}: "VegaStream Group Limted",
+ [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.",
@@ -10644,20 +10671,20 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 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.",
@@ -10666,21 +10693,21 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Company",
+ [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 INDUSTRIAL CORPORATION",
+ [3]byte{0, 80, 146}: "Rigaku Corporation Osaka Plant",
[3]byte{0, 80, 147}: "BOEING",
- [3]byte{0, 80, 148}: "PACE plc",
+ [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, 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",
@@ -10689,12 +10716,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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.",
@@ -10708,33 +10735,34 @@ var validMACPrefixMap = map[[3]byte]string{
[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-BAUCHE",
+ [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",
+ [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, 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 - Please see IAB public listing for more information.",
+ [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}: "XYRATEX",
+ [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, 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 &",
@@ -10743,16 +10771,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 218}: "3COM",
[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, 226}: "Cisco Systems, Inc",
[3]byte{0, 80, 227}: "ARRIS Group, Inc.",
- [3]byte{0, 80, 228}: "Apple",
+ [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.",
@@ -10762,7 +10790,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -10773,16 +10801,33 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 81, 237}: "LG Innotek",
[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, 193}: "LG Electronics (Mobile Communications)",
+ [3]byte{0, 87, 210}: "Cisco Systems, Inc",
+ [3]byte{0, 88, 63}: "PC Aquarius",
[3]byte{0, 89, 7}: "LenovoEMC Products USA, LLC",
- [3]byte{0, 90, 57}: "SHENZHEN FAST TECHNOLOGIES CO., LTD.",
+ [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",
@@ -10791,14 +10836,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 8}: "3COM",
+ [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, 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",
@@ -10830,7 +10875,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -10845,21 +10890,21 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 62}: "Cisco Systems, Inc",
[3]byte{0, 96, 63}: "PATAPSCO DESIGNS",
[3]byte{0, 96, 64}: "NETRO CORP.",
- [3]byte{0, 96, 65}: "Yokogawa Electric Corporation",
+ [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}: "EMC CORPORATION",
+ [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}: "SAGEM COMMUNICATION",
+ [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",
@@ -10870,12 +10915,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -10895,17 +10940,17 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 AUDIO PRODUCTS",
+ [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, 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.",
@@ -10914,16 +10959,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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}: "WHITE MOUNTAIN DSP, INC.",
+ [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, 140}: "3COM",
[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.",
@@ -10934,11 +10979,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 151}: "3COM",
[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}: "ASTRO-MED, INC.",
+ [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",
@@ -10952,15 +10997,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 CO.",
- [3]byte{0, 96, 177}: "INPUT/OUTPUT, 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.",
@@ -10970,9 +11015,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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 - NETLINK, INC.",
+ [3]byte{0, 96, 187}: "Cabletron Systems, Inc.",
[3]byte{0, 96, 188}: "KeunYoung Electronics & Communication Co., Ltd.",
- [3]byte{0, 96, 189}: "HUBBELL-PULSECOM",
+ [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",
@@ -10996,14 +11041,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "MIYACHI TECHNOS CORP.",
- [3]byte{0, 96, 214}: "NovAtel Wireless Technologies 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}: "JBM ELECTRONICS CO.",
+ [3]byte{0, 96, 218}: "Red Lion Controls, LP",
[3]byte{0, 96, 219}: "NTP ELEKTRONIK A/S",
- [3]byte{0, 96, 220}: "Toyo Network Systems & System Integration Co. LTD",
+ [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.",
@@ -11039,23 +11084,43 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
- [3]byte{0, 100, 64}: "CISCO SYSTEMS, 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, 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, 158}: "Vizio, Inc",
[3]byte{0, 107, 160}: "SHENZHEN UNIVERSAL INTELLISYS PTE LTD",
- [3]byte{0, 109, 251}: "Vutrix (UK) 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, 71}: "Amazon Technologies Inc.",
+ [3]byte{0, 113, 194}: "PEGATRON CORPORATION",
[3]byte{0, 113, 204}: "Hon Hai Precision Ind. Co.,Ltd.",
- [3]byte{0, 115, 141}: "Tinno Mobile Technology Corp",
+ [3]byte{0, 114, 4}: "Samsung Electronics Co., Ltd. ARTIK",
+ [3]byte{0, 114, 99}: "Netcore Technology Inc.",
+ [3]byte{0, 114, 120}: "Cisco Systems, 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, 120, 158}: "SAGEMCOM",
+ [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, 124, 45}: "Samsung Electronics Co.,Ltd",
[3]byte{0, 125, 250}: "Volkswagen Group of America",
+ [3]byte{0, 126, 86}: "China Dragon Technology Limited",
+ [3]byte{0, 126, 149}: "Cisco Systems, Inc",
[3]byte{0, 127, 40}: "Actiontec Electronics, Inc",
[3]byte{0, 128, 0}: "MULTITECH SYSTEMS, INC.",
[3]byte{0, 128, 1}: "PERIPHONICS CORPORATION",
@@ -11094,7 +11159,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "STOLLMANN GMBH",
+ [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",
@@ -11143,16 +11208,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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 ELEKTRONIK GMBH",
+ [3]byte{0, 128, 86}: "SPHINX Electronics GmbH & Co KG",
[3]byte{0, 128, 87}: "ADSOFT, LTD.",
- [3]byte{0, 128, 88}: "PRINTER SYSTEMS CORPORATION",
+ [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 Company",
+ [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.",
@@ -11165,7 +11230,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "CEGELEC PROJECTS LTD",
+ [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.",
@@ -11176,7 +11241,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -11216,8 +11281,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "ALCATEL BUSINESS SYSTEMS",
- [3]byte{0, 128, 160}: "EDISA HEWLETT PACKARD S/A",
+ [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",
@@ -11239,9 +11304,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 182}: "Mercury Systems – Trusted Mission Solutions, Inc.",
[3]byte{0, 128, 183}: "STELLAR COMPUTER",
- [3]byte{0, 128, 184}: "B.U.G. MORISEIKI, INCORPORATED",
+ [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",
@@ -11251,7 +11316,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 COMMITTEE",
+ [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",
@@ -11282,13 +11347,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, Inc",
+ [3]byte{0, 128, 229}: "NetApp",
[3]byte{0, 128, 230}: "PEER NETWORKS, INC.",
- [3]byte{0, 128, 231}: "LYNWOOD SCIENTIFIC DEV. LTD.",
+ [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.",
@@ -11304,7 +11369,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -11313,28 +11378,37 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 134, 160}: "PRIVATE",
- [3]byte{0, 136, 101}: "Apple",
+ [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, 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, 242}: "NETGEAR INC.,",
+ [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, 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, 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, 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",
@@ -11355,17 +11429,17 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 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",
@@ -11397,12 +11471,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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 OY",
+ [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.",
@@ -11410,14 +11484,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Ltd., Command and Control Systems",
+ [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, 93}: "NETCOM SICHERHEITSTECHNIK GMBH",
[3]byte{0, 144, 94}: "RAULAND-BORG CORPORATION",
- [3]byte{0, 144, 95}: "CISCO SYSTEMS, INC.",
+ [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",
@@ -11427,13 +11501,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, INC.",
+ [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, 109}: "Cisco Systems, Inc",
[3]byte{0, 144, 110}: "PRAXON, INC.",
- [3]byte{0, 144, 111}: "CISCO SYSTEMS, 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",
@@ -11456,7 +11530,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -11468,11 +11542,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 146}: "Cisco Systems, Inc",
+ [3]byte{0, 144, 147}: "EIZO 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, 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.",
@@ -11484,22 +11558,22 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 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.",
+ [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, 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",
@@ -11513,7 +11587,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -11526,9 +11600,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 206}: "avateramedical Mechatronics GmbH",
[3]byte{0, 144, 207}: "NORTEL",
[3]byte{0, 144, 208}: "Thomson Telecom Belgium",
[3]byte{0, 144, 209}: "LEICHU ENTERPRISE CO., LTD.",
@@ -11536,10 +11610,10 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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",
@@ -11563,15 +11637,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "DOT HILL SYSTEMS CORPORATION",
- [3]byte{0, 144, 242}: "CISCO SYSTEMS, INC.",
+ [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}: "LEITCH",
+ [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",
@@ -11582,11 +11656,16 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 156, 2}: "Hewlett-Packard Company",
+ [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, 107}: "Murata Manufacturing Co., Ltd.",
[3]byte{0, 157, 142}: "CARDIAC RECORDERS, INC.",
- [3]byte{0, 158, 200}: "Beijing Xiaomi Electronic Products Co., Ltd.",
+ [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",
@@ -11601,7 +11680,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "VISUAL NETWORKS, INC.",
+ [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.",
@@ -11616,14 +11695,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "SIXNET",
+ [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, 33}: "General Dynamics Mission Systems",
[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, 36}: "3COM",
[3]byte{0, 160, 37}: "REDCOM LABS INC.",
[3]byte{0, 160, 38}: "TELDAT, S.A.",
[3]byte{0, 160, 39}: "FIREPOWER SYSTEMS, INC.",
@@ -11634,7 +11713,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "PIRELLI CAVI",
+ [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.",
@@ -11651,12 +11730,12 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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 GMBH & CO.",
+ [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.",
@@ -11671,7 +11750,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 84}: "Private",
[3]byte{0, 160, 85}: "Data Device Corporation",
[3]byte{0, 160, 86}: "MICROPROSS",
[3]byte{0, 160, 87}: "LANCOM Systems GmbH",
@@ -11698,7 +11777,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "THE APPCON GROUP, 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.",
@@ -11720,7 +11799,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -11737,7 +11816,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -11751,7 +11830,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "MICROS SYSTEMS, INC.",
+ [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",
@@ -11771,7 +11850,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "SYMBIOS LOGIC 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",
@@ -11784,11 +11863,11 @@ var validMACPrefixMap = map[[3]byte]string{
[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 COMMUNICATION",
- [3]byte{0, 160, 198}: "QUALCOMM INCORPORATED",
+ [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 - HF1-06",
+ [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.",
@@ -11800,8 +11879,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 213}: "Sierra Wireless",
+ [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",
@@ -11835,7 +11914,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "SYMBOL TECHNOLOGIES, INC.",
+ [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.",
@@ -11844,69 +11923,101 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 170, 0}: "INTEL CORPORATION",
- [3]byte{0, 170, 1}: "INTEL CORPORATION",
- [3]byte{0, 170, 2}: "INTEL CORPORATION",
+ [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, 165, 191}: "Cisco Systems, 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",
+ [3]byte{0, 170, 110}: "Cisco Systems, Inc",
+ [3]byte{0, 170, 112}: "LG Electronics (Mobile Communications)",
[3]byte{0, 172, 224}: "ARRIS Group, Inc.",
+ [3]byte{0, 173, 36}: "D-Link International",
+ [3]byte{0, 174, 205}: "Pensando Systems",
[3]byte{0, 174, 250}: "Murata Manufacturing Co., Ltd.",
- [3]byte{0, 176, 9}: "Grass Valley Group",
+ [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, 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, 74}: "Cisco Systems, Inc",
[3]byte{0, 176, 82}: "Atheros Communications",
- [3]byte{0, 176, 100}: "CISCO SYSTEMS, INC.",
+ [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, 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, 179}: "XSTREAMIS PLC",
+ [3]byte{0, 176, 194}: "Cisco Systems, Inc",
[3]byte{0, 176, 199}: "Tellabs Operations, Inc.",
- [3]byte{0, 176, 206}: "TECHNOLOGY RESCUE",
- [3]byte{0, 176, 208}: "Dell Computer Corp.",
+ [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, 177, 227}: "Cisco Systems, Inc",
+ [3]byte{0, 179, 56}: "Kontron Asia Pacific Design Sdn. Bhd",
[3]byte{0, 179, 66}: "MacroSAN Technologies Co., Ltd.",
+ [3]byte{0, 179, 98}: "Apple, Inc.",
+ [3]byte{0, 180, 245}: "DongGuan Siyoto Electronics Co., Ltd",
[3]byte{0, 181, 109}: "David Electronics Co., LTD.",
+ [3]byte{0, 181, 208}: "Samsung Electronics Co.,Ltd",
[3]byte{0, 181, 214}: "Omnibit Inc.",
+ [3]byte{0, 182, 112}: "Cisco Systems, Inc",
+ [3]byte{0, 182, 159}: "Latch",
+ [3]byte{0, 183, 113}: "Cisco Systems, Inc",
[3]byte{0, 183, 141}: "Nanjing Shining Electric Automation Co., Ltd",
+ [3]byte{0, 184, 179}: "Cisco Systems, Inc",
+ [3]byte{0, 184, 194}: "Heights Telecom T 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, 58}: "Amazon Technologies Inc.",
+ [3]byte{0, 187, 96}: "Intel Corporate",
[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, 188, 96}: "Cisco Systems, 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, 59}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{0, 190, 117}: "Cisco Systems, Inc",
+ [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, 191, 119}: "Cisco Systems, Inc",
[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, 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.",
@@ -11927,7 +12038,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Fluke Corporation",
+ [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",
@@ -11983,7 +12094,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 COMPUTER 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",
@@ -12004,7 +12115,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 IND. 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",
@@ -12053,7 +12164,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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.",
@@ -12063,7 +12174,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -12142,9 +12253,9 @@ var validMACPrefixMap = map[[3]byte]string{
[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 CORPORATION",
+ [3]byte{0, 192, 238}: "KYOCERA Display Corporation",
[3]byte{0, 192, 239}: "ABIT CORPORATION",
- [3]byte{0, 192, 240}: "KINGSTON TECHNOLOGY CORP.",
+ [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.",
@@ -12159,21 +12270,32 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "DOT HILL SYSTEMS CORPORATION",
+ [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, 195, 244}: "Samsung Electronics Co.,Ltd",
[3]byte{0, 197, 219}: "Datatech Sistemas Digitales Avanzados SL",
- [3]byte{0, 198, 16}: "Apple",
+ [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, 180}: "SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD",
[3]byte{0, 203, 189}: "Cambridge Broadband Networks Ltd.",
+ [3]byte{0, 204, 63}: "Universal Electronics, Inc.",
+ [3]byte{0, 204, 252}: "Cisco Systems, Inc",
[3]byte{0, 205, 144}: "MAS Elektronik AG",
- [3]byte{0, 207, 28}: "COMMUNICATION MACHINERY CORP.",
+ [3]byte{0, 205, 254}: "Apple, Inc.",
+ [3]byte{0, 207, 28}: "Communication Machinery Corporation",
+ [3]byte{0, 207, 192}: "China Mobile Group Device Co.,Ltd.",
[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, 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",
@@ -12198,7 +12320,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Security",
+ [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.",
@@ -12212,7 +12334,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 45}: "Resideo",
[3]byte{0, 208, 46}: "COMMUNICATION AUTOMATION CORP.",
[3]byte{0, 208, 47}: "VLSI TECHNOLOGY INC.",
[3]byte{0, 208, 48}: "Safetran Systems Corp",
@@ -12222,7 +12344,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Pace France",
+ [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.",
@@ -12255,18 +12377,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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}: "TECHNOTREND SYSTEMTECHNIK GMBH",
+ [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, 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.",
@@ -12288,7 +12410,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -12309,23 +12431,23 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "NVISION 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, 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}: "TIMELINE VISTA, INC.",
- [3]byte{0, 208, 149}: "Alcatel-Lucent, Enterprise Business Group",
- [3]byte{0, 208, 150}: "3COM EUROPE LTD.",
- [3]byte{0, 208, 151}: "CISCO SYSTEMS, INC.",
+ [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, 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",
@@ -12339,27 +12461,27 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "GRAYSON WIRELESS",
+ [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, 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, 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}: "Silicon Image GmbH",
+ [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, 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.",
@@ -12373,17 +12495,17 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 206}: "iSystem Labs",
[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, 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, 216}: "3COM",
[3]byte{0, 208, 217}: "DEDICATED MICROCOMPUTERS",
[3]byte{0, 208, 218}: "TAICOM DATA SYSTEMS CO., LTD.",
[3]byte{0, 208, 219}: "MCQUAY INTERNATIONAL",
@@ -12395,7 +12517,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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.",
@@ -12403,7 +12525,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 TELECOMMUNICATIONS, 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",
@@ -12413,7 +12535,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Alcatel Canada",
+ [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.",
@@ -12422,13 +12544,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 217, 209}: "Sony Computer Entertainment Inc.",
+ [3]byte{0, 214, 254}: "Cisco Systems, Inc",
+ [3]byte{0, 215, 143}: "Cisco Systems, Inc",
+ [3]byte{0, 216, 97}: "Micro-Star INTL CO., LTD.",
+ [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.",
@@ -12446,8 +12574,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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",
@@ -12456,32 +12584,32 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 9}: "Stratus Technologies",
[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",
+ [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, 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, 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, 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, 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, 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.",
@@ -12490,7 +12618,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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",
@@ -12499,13 +12627,13 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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",
@@ -12521,15 +12649,15 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "ENHANCED MESSAGING SYSTEMS, INC",
+ [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, 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, 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.",
@@ -12539,14 +12667,14 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "MATSUSHITA KOTOBUKI ELECTRONICS INDUSTRIES, LTD.",
+ [3]byte{0, 224, 92}: "PHC Corporation",
[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 - YAGO SYSTEMS, INC.",
+ [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.",
@@ -12555,7 +12683,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Limited (AEP Networks)",
+ [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.",
@@ -12586,31 +12714,31 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Corp.",
+ [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, 143}: "Cisco Systems, Inc",
[3]byte{0, 224, 144}: "BECKMAN LAB. AUTOMATION DIV.",
- [3]byte{0, 224, 145}: "LG ELECTRONICS, INC.",
+ [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 Systems, Inc.",
+ [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, 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, 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.",
@@ -12623,8 +12751,8 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Business Group",
+ [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.",
@@ -12654,7 +12782,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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 TECHNOLOGY, INC.",
+ [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.",
@@ -12665,19 +12793,19 @@ var validMACPrefixMap = map[[3]byte]string{
[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 North America ESD",
+ [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, 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, 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 DATACOM B.V.",
+ [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.",
@@ -12694,157 +12822,265 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 247}: "Cisco Systems, Inc",
[3]byte{0, 224, 248}: "DICNA CONTROL AB",
- [3]byte{0, 224, 249}: "CISCO SYSTEMS, INC.",
+ [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, 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, 254}: "Cisco Systems, Inc",
[3]byte{0, 224, 255}: "SECURITY DYNAMICS TECHNOLOGIES, Inc.",
- [3]byte{0, 225, 109}: "Cisco",
+ [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, 234, 189}: "Cisco Systems, Inc",
+ [3]byte{0, 235, 45}: "Sony Mobile Communications Inc",
+ [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 Elec Co.,Ltd",
- [3]byte{0, 244, 185}: "Apple",
- [3]byte{0, 247, 111}: "Apple",
+ [3]byte{0, 244, 111}: "Samsung Electronics Co.,Ltd",
+ [3]byte{0, 244, 141}: "Liteon Technology Corporation",
+ [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, 252, 186}: "Cisco Systems, 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, 96, 140}: "3COM",
[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, 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 CORP.",
- [3]byte{2, 230, 211}: "NIXDORF COMPUTER CORPORATION",
+ [3]byte{2, 192, 140}: "3COM",
+ [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, 2, 202}: "Shenzhen Vtsonic Co.,ltd",
+ [3]byte{4, 3, 214}: "Nintendo Co.,Ltd",
+ [3]byte{4, 4, 234}: "Valens Semiconductor Ltd.",
+ [3]byte{4, 9, 115}: "Hewlett Packard Enterprise",
+ [3]byte{4, 9, 165}: "HFR, Inc.",
[3]byte{4, 10, 131}: "Alcatel-Lucent",
[3]byte{4, 10, 224}: "XMIT AG COMPUTER NETWORKS",
- [3]byte{4, 12, 206}: "Apple",
+ [3]byte{4, 12, 206}: "Apple, Inc.",
[3]byte{4, 14, 194}: "ViewSonic Mobile China Limited",
- [3]byte{4, 21, 82}: "Apple",
+ [3]byte{4, 21, 82}: "Apple, Inc.",
+ [3]byte{4, 21, 217}: "Viwone",
[3]byte{4, 24, 15}: "Samsung Electronics Co.,Ltd",
- [3]byte{4, 24, 182}: "PRIVATE",
- [3]byte{4, 24, 214}: "Ubiquiti Networks",
+ [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",
- [3]byte{4, 32, 154}: "Panasonic AVC Networks Company",
+ [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",
+ [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, 133}: "Nanchang BlackShark Co.,Ltd.",
+ [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, 64, 169}: "New H3C Technologies 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",
+ [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, 78, 175}: "LG Innotek",
+ [3]byte{4, 79, 23}: "HUMAX Co., Ltd.",
+ [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, 84, 83}: "Apple",
+ [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, 107, 27}: "SYSDINE Co., Ltd.",
+ [3]byte{4, 107, 37}: "SICHUAN TIANYI COMHEART TELECOM CO.,LTD",
+ [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 Co,. Ltd.",
- [3]byte{4, 125, 123}: "Quanta Computer Inc.",
+ [3]byte{4, 118, 110}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{4, 120, 99}: "Shanghai MXCHIP Information Technology Co., Ltd.",
+ [3]byte{4, 121, 112}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{4, 121, 183}: "Texas Instruments",
+ [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 Technology Limited",
+ [3]byte{4, 138, 21}: "Avaya Inc",
+ [3]byte{4, 138, 225}: "FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.",
+ [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, 145, 98}: "Microchip Technology Inc.",
+ [3]byte{4, 146, 38}: "ASUSTek COMPUTER 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, 152, 243}: "ALPS Electric Co,. Ltd.",
+ [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, 161, 81}: "NETGEAR INC.,",
+ [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, 171, 24}: "ELECOM CO.,LTD.",
+ [3]byte{4, 172, 68}: "Holtek Semiconductor Inc.",
+ [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, 188, 135}: "Shenzhen JustLink Technology Co., LTD",
[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}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [3]byte{4, 192, 111}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{4, 192, 156}: "Tellabs Inc.",
- [3]byte{4, 193, 185}: "Fiberhome Telecommunication Tech.Co.,Ltd.",
- [3]byte{4, 197, 164}: "CISCO SYSTEMS, 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, 194, 65}: "Nokia",
+ [3]byte{4, 195, 230}: "IEEE Registration Authority",
+ [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}: "Dish Technologies Corp",
[3]byte{4, 203, 29}: "Traka plc",
[3]byte{4, 206, 20}: "Wilocity LTD.",
+ [3]byte{4, 206, 126}: "NXP France Semiconductors France",
[3]byte{4, 207, 37}: "MANYCOLORS, INC.",
+ [3]byte{4, 207, 140}: "XIAOMI Electronics,CO.,LTD",
+ [3]byte{4, 209, 58}: "Xiaomi Communications Co Ltd",
+ [3]byte{4, 211, 176}: "Intel Corporate",
+ [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",
+ [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, 41}: "Qingdao Haier Technology Co.,Ltd",
[3]byte{4, 226, 248}: "AEP Ticketing solutions srl",
[3]byte{4, 228, 81}: "Texas Instruments",
- [3]byte{4, 229, 54}: "Apple",
+ [3]byte{4, 229, 54}: "Apple, Inc.",
[3]byte{4, 229, 72}: "Cohda Wireless Pty Ltd",
+ [3]byte{4, 229, 152}: "Xiaomi Communications Co Ltd",
[3]byte{4, 230, 98}: "Acroname Inc.",
- [3]byte{4, 230, 118}: "AMPAK Technology Inc.",
+ [3]byte{4, 230, 118}: "AMPAK Technology, Inc.",
[3]byte{4, 233, 229}: "PJRC.COM, LLC",
+ [3]byte{4, 235, 64}: "Cisco Systems, Inc",
+ [3]byte{4, 236, 187}: "Fiberhome Telecommunication Technologies Co.,LTD",
[3]byte{4, 238, 145}: "x-fabric GmbH",
[3]byte{4, 240, 33}: "Compex Systems Pte Ltd",
- [3]byte{4, 241, 62}: "Apple",
+ [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",
+ [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, 249, 217}: "Speaker Electronic(Jiashan) Co.,Ltd",
+ [3]byte{4, 250, 63}: "Opticore Inc.",
+ [3]byte{4, 250, 131}: "Qingdao Haier Technology Co.,Ltd",
[3]byte{4, 254, 49}: "Samsung Electronics Co.,Ltd",
- [3]byte{4, 254, 127}: "CISCO SYSTEMS, INC.",
+ [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.",
@@ -12852,18 +13088,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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, 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, 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",
@@ -12871,7 +13107,7 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "EMC Corporation",
+ [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.",
@@ -12883,17 +13119,17 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "CADMUS COMPUTER SYSTEMS",
+ [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, 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}: "NETWORK RESEARCH CORPORATION",
[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",
@@ -12921,18 +13157,18 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 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, 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, 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",
@@ -12943,21 +13179,21 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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, 103}: "ComDesign",
[3]byte{8, 0, 104}: "RIDGE COMPUTERS",
[3]byte{8, 0, 105}: "SILICON GRAPHICS INC.",
- [3]byte{8, 0, 106}: "ATT BELL LABORATORIES",
+ [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 ELECTRIC CORP.",
+ [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.",
@@ -12979,21 +13215,25 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 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, 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",
+ [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.",
@@ -13002,184 +13242,321 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 22, 81}: "Shenzhen Sea Star Technology Co.,Ltd",
- [3]byte{8, 23, 53}: "CISCO SYSTEMS, INC.",
+ [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, 196}: "Thermo Fisher Scientific Messtechnik GmbH",
[3]byte{8, 29, 251}: "Shanghai Mexon Communication Technology Co.,Ltd",
[3]byte{8, 31, 63}: "WondaLink Inc.",
- [3]byte{8, 31, 243}: "CISCO SYSTEMS, 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, 37, 37}: "Xiaomi Communications Co Ltd",
[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, 27}: "Shenzhen Jialihua Electronic Technology Co., Ltd",
[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, 142}: "Hon Hai Precision Ind.Co.Ltd",
+ [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, 70, 86}: "VODALYS Ingénierie",
+ [3]byte{8, 64, 243}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{8, 70, 86}: "VEO-LABS",
+ [3]byte{8, 71, 208}: "Nokia Shanghai Bell Co. Ltd.)",
[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, 93, 221}: "Mercury Corporation",
+ [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, 99, 97}: "Huawei Technologies Co., Ltd",
+ [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, 107, 215}: "Silicon Laboratories",
+ [3]byte{8, 109, 65}: "Apple, Inc.",
[3]byte{8, 109, 242}: "Shenzhen MIMOWAVE Technology Co.,Ltd",
- [3]byte{8, 112, 69}: "Apple",
+ [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, 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, 134, 59}: "Belkin International, Inc.",
+ [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, 144, 186}: "Danlaw Inc",
+ [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, 52}: "Hewlett Packard Enterprise",
[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, 169, 90}: "Azurewave",
+ [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, 174, 214}: "Samsung Electronics Co.,Ltd",
[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, 186, 95}: "Qingdao Hisense Electronics Co.,Ltd.",
[3]byte{8, 187, 204}: "AK-NORD EDV VERTRIEBSGES. mbH",
- [3]byte{8, 189, 67}: "NETGEAR INC.,",
+ [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, 197, 225}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{8, 198, 179}: "QTECH LLC",
[3]byte{8, 202, 69}: "Toyou Feiji Electronics Co., Ltd.",
- [3]byte{8, 204, 104}: "Cisco",
+ [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, 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",
+ [3]byte{8, 212, 43}: "Samsung Electronics Co.,Ltd",
+ [3]byte{8, 212, 106}: "LG Electronics (Mobile Communications)",
+ [3]byte{8, 213, 157}: "Sagemcom Broadband SAS",
[3]byte{8, 213, 192}: "Seers Technology Co., Ltd",
- [3]byte{8, 216, 51}: "Shenzhen RF Technology Co,.Ltd",
+ [3]byte{8, 216, 51}: "Shenzhen RF Technology Co., Ltd",
[3]byte{8, 223, 31}: "Bose Corporation",
+ [3]byte{8, 223, 203}: "Systrome Networks",
[3]byte{8, 229, 218}: "NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD.",
[3]byte{8, 230, 114}: "JEBSEE ELECTRONICS CO.,LTD.",
+ [3]byte{8, 230, 137}: "Apple, Inc.",
[3]byte{8, 232, 79}: "HUAWEI TECHNOLOGIES CO.,LTD",
- [3]byte{8, 234, 68}: "Aerohive Networks, Inc.",
+ [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",
+ [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 Elec 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, 241, 234}: "Hewlett Packard Enterprise",
[3]byte{8, 242, 244}: "Net One Partners Co.,Ltd.",
+ [3]byte{8, 244, 171}: "Apple, Inc.",
+ [3]byte{8, 246, 156}: "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, 1, 219}: "Infinix mobility limited",
+ [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, 8, 180}: "HUMAX Co., Ltd.",
[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, 29, 175}: "Beijing Xiaomi communications co.,ltd",
+ [3]byte{12, 26, 16}: "Acoustic Stream",
+ [3]byte{12, 28, 25}: "LONGCONN ELECTRONICS(SHENZHEN) CO.,LTD",
+ [3]byte{12, 28, 32}: "Kakao Corp",
+ [3]byte{12, 28, 87}: "Texas Instruments",
+ [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, 39, 36}: "Cisco",
+ [3]byte{12, 33, 56}: "Hengstler GmbH",
+ [3]byte{12, 35, 105}: "Honeywell SPS",
+ [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, 134}: "Fiberhome Telecommunication Technologies Co.,LTD",
[3]byte{12, 42, 231}: "Beijing General Research Institute of Mining and Metallurgy",
+ [3]byte{12, 44, 84}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{12, 45, 137}: "QiiQ Communications Inc.",
- [3]byte{12, 48, 33}: "Apple",
- [3]byte{12, 55, 220}: "Huawei Technologies Co., Ltd",
+ [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, 62, 159}: "Apple, Inc",
+ [3]byte{12, 60, 205}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{12, 62, 159}: "Apple, Inc.",
+ [3]byte{12, 65, 1}: "Ruichi Auto Technology (Guangzhou) Co., Ltd.",
+ [3]byte{12, 65, 62}: "Microsoft Corporation",
+ [3]byte{12, 65, 233}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 76, 57}: "Mitrastar Technology",
- [3]byte{12, 77, 233}: "Apple",
+ [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, 83, 49}: "ETH Zurich",
+ [3]byte{12, 84, 21}: "Intel Corporate",
[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, 98, 166}: "Hui Zhou Gaoshengda Technology Co.,LTD",
[3]byte{12, 99, 252}: "Nanjing Signway Technology Co., Ltd",
- [3]byte{12, 104, 3}: "Cisco",
+ [3]byte{12, 104, 3}: "Cisco Systems, Inc",
+ [3]byte{12, 106, 188}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [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, 112, 74}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{12, 113, 93}: "Samsung Electronics Co.,Ltd",
[3]byte{12, 114, 44}: "TP-LINK TECHNOLOGIES CO.,LTD.",
- [3]byte{12, 116, 194}: "Apple",
+ [3]byte{12, 114, 217}: "zte corporation",
+ [3]byte{12, 115, 190}: "Dongguan Haimai Electronie Technology Co.,Ltd",
+ [3]byte{12, 115, 235}: "IEEE Registration Authority",
+ [3]byte{12, 116, 194}: "Apple, Inc.",
+ [3]byte{12, 117, 18}: "Shenzhen Kunlun TongTai Technology Co.,Ltd.",
[3]byte{12, 117, 35}: "BEIJING GEHUA CATV NETWORK CO.,LTD",
- [3]byte{12, 119, 26}: "Apple",
+ [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, 124, 40}: "Nokia",
[3]byte{12, 125, 124}: "Kexiang Information Technology Co, Ltd.",
- [3]byte{12, 129, 18}: "PRIVATE",
+ [3]byte{12, 128, 99}: "TP-LINK TECHNOLOGIES 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, 137, 16}: "Samsung Electronics 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, 211}: "ITEL MOBILE LIMITED",
[3]byte{12, 139, 253}: "Intel Corporate",
+ [3]byte{12, 140, 36}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
[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, 149, 65}: "CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.",
+ [3]byte{12, 150, 191}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{12, 150, 230}: "Cloud Network Technology (Samoa) Limited",
+ [3]byte{12, 152, 56}: "Xiaomi Communications Co Ltd",
+ [3]byte{12, 154, 66}: "FN-LINK TECHNOLOGY LIMITED",
[3]byte{12, 155, 19}: "Shanghai Magic Mobile Telecommunication Co.Ltd.",
[3]byte{12, 157, 86}: "Consort Controls Ltd",
+ [3]byte{12, 157, 146}: "ASUSTek COMPUTER INC.",
[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, 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, 168, 167}: "Samsung Electronics Co.,Ltd",
[3]byte{12, 172, 5}: "Unitend Technologies Inc.",
+ [3]byte{12, 174, 125}: "Texas Instruments",
[3]byte{12, 175, 90}: "GENUS POWER INFRASTRUCTURES LIMITED",
- [3]byte{12, 179, 25}: "Samsung Elec Co.,Ltd",
+ [3]byte{12, 178, 183}: "Texas Instruments",
+ [3]byte{12, 179, 25}: "Samsung Electronics Co.,Ltd",
+ [3]byte{12, 179, 79}: "Shenzhen Xiaoqi Intelligent Technology Co., Ltd.",
+ [3]byte{12, 180, 89}: "Marketech International Corp.",
+ [3]byte{12, 180, 164}: "Xintai Automobile Intelligent Network Technology",
[3]byte{12, 180, 239}: "Digience Co.,Ltd.",
- [3]byte{12, 189, 81}: "TCT Mobile Limited",
- [3]byte{12, 191, 21}: "Genetec",
+ [3]byte{12, 181, 39}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{12, 181, 222}: "Alcatel Lucent",
+ [3]byte{12, 182, 210}: "D-Link International",
+ [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, 191, 116}: "Morse Micro",
[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.",
@@ -13187,319 +13564,552 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 198, 204}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 133}: "Motorola Mobility LLC, a Lenovo Company",
[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, 208, 248}: "Cisco Systems, Inc",
[3]byte{12, 210, 146}: "Intel Corporate",
[3]byte{12, 210, 181}: "Binatone Telecommunication Pvt. Ltd",
- [3]byte{12, 213, 2}: "Westell",
+ [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, 217, 150}: "CISCO SYSTEMS, 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, 224, 220}: "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, 70}: "Xiaomi Communications Co 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{16, 0, 0}: "PRIVATE",
+ [3]byte{12, 253, 55}: "SUSE Linux GmbH",
+ [3]byte{12, 254, 69}: "Sony Interactive Entertainment Inc.",
+ [3]byte{12, 254, 93}: "IEEE Registration Authority",
+ [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, 5, 202}: "Cisco",
- [3]byte{16, 7, 35}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
+ [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 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, 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, 18, 180}: "SICHUAN TIANYI COMHEART TELECOM CO.,LTD",
+ [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",
- [3]byte{16, 29, 81}: "ON-Q LLC dba ON-Q Mesh Networks",
+ [3]byte{16, 28, 12}: "Apple, Inc.",
+ [3]byte{16, 29, 81}: "8Mesh Networks Limited",
[3]byte{16, 29, 192}: "Samsung Electronics Co.,Ltd",
- [3]byte{16, 31, 116}: "Hewlett-Packard Company",
+ [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, 107}: "AMPAK Technology, Inc.",
+ [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",
+ [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, 89, 23}: "Tonal",
+ [3]byte{16, 90, 247}: "ADB Italia",
+ [3]byte{16, 91, 173}: "Mega Well Limited",
[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, 229}: "Hewlett Packard",
+ [3]byte{16, 98, 235}: "D-Link International",
[3]byte{16, 100, 226}: "ADFweb.com s.r.l.",
+ [3]byte{16, 101, 48}: "Dell Inc.",
[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",
- [3]byte{16, 111, 63}: "Buffalo Inc.",
+ [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, 177}: "Samsung Electronics Co.,LTD",
+ [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 SYSTEM CO., LTD.",
+ [3]byte{16, 120, 210}: "Elitegroup Computer Systems Co.,Ltd.",
[3]byte{16, 122, 134}: "U&U ENGINEERING INC.",
- [3]byte{16, 123, 239}: "ZyXEL Communications Corp",
+ [3]byte{16, 123, 68}: "ASUSTek COMPUTER INC.",
+ [3]byte{16, 123, 164}: "Olive & Dove Co.,Ltd.",
+ [3]byte{16, 123, 239}: "Zyxel Communications Corporation",
+ [3]byte{16, 125, 26}: "Dell Inc.",
+ [3]byte{16, 129, 180}: "Hunan Greatwall Galaxy Science and Technology Co.,Ltd.",
[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 Tech.Co.,Ltd.",
+ [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, 140, 207}: "Cisco Systems, Inc",
+ [3]byte{16, 142, 224}: "Samsung Electronics Co.,Ltd",
[3]byte{16, 146, 102}: "Samsung Electronics Co.,Ltd",
- [3]byte{16, 147, 233}: "Apple",
+ [3]byte{16, 147, 233}: "Apple, Inc.",
+ [3]byte{16, 148, 187}: "Apple, Inc.",
+ [3]byte{16, 149, 75}: "Megabyte Ltd.",
+ [3]byte{16, 152, 54}: "Dell Inc.",
+ [3]byte{16, 152, 195}: "Murata Manufacturing Co., Ltd.",
[3]byte{16, 154, 185}: "Tosibox Oy",
- [3]byte{16, 154, 221}: "Apple",
+ [3]byte{16, 154, 221}: "Apple, Inc.",
+ [3]byte{16, 158, 58}: "Zhejiang Tmall Technology Co., Ltd.",
[3]byte{16, 159, 169}: "Actiontec Electronics, Inc",
[3]byte{16, 161, 59}: "FUJIKURA RUBBER LTD.",
- [3]byte{16, 165, 208}: "Murata Manufacturing Co.,Ltd.",
+ [3]byte{16, 162, 78}: "GOLD3LINK ELECTRONICS CO., LTD",
+ [3]byte{16, 164, 185}: "Baidu Online Network Technology (Beijing) Co., 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, 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, 179, 111}: "Bowei Technology Company Limited",
+ [3]byte{16, 183, 19}: "Private",
[3]byte{16, 183, 246}: "Plastoform Industries Ltd.",
+ [3]byte{16, 185, 247}: "Niko-Servodan",
[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, 191, 72}: "ASUSTEK COMPUTER INC.",
+ [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, 193, 114}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{16, 194, 47}: "China Entropy Co., Ltd.",
+ [3]byte{16, 194, 90}: "Technicolor CH USA Inc.",
[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, 31}: "Huawei Technologies Co., Ltd",
+ [3]byte{16, 197, 149}: "Lenovo",
+ [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, 199, 83}: "Qingdao Intelligent&Precise Electronics Co.,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, 110}: "FISYS",
+ [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, 221, 177}: "Apple",
+ [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, 223, 252}: "Siemens AG",
[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, 231, 198}: "Hewlett Packard",
+ [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, 243, 17}: "Cisco",
+ [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",
+ [3]byte{16, 249, 111}: "LG Electronics (Mobile Communications)",
+ [3]byte{16, 249, 235}: "Industria Fueguina de Relojería Electrónica s.a.",
[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, 254, 237}: "TP-LINK TECHNOLOGIES CO., LTD.",
- [3]byte{17, 0, 170}: "PRIVATE",
- [3]byte{20, 7, 8}: "PRIVATE",
+ [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, 9, 220}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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",
+ [3]byte{20, 16, 159}: "Apple, Inc.",
+ [3]byte{20, 17, 20}: "TECNO MOBILE LIMITED",
[3]byte{20, 19, 48}: "Anakreon UK LLP",
- [3]byte{20, 20, 75}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+ [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, 22, 158}: "Wingtech Group (HongKong)Limited",
+ [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, 186}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
+ [3]byte{20, 31, 120}: "Samsung Electronics Co.,Ltd",
+ [3]byte{20, 31, 186}: "IEEE Registration Authority",
+ [3]byte{20, 32, 94}: "Apple, Inc.",
+ [3]byte{20, 34, 51}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [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",
+ [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, 25}: "PT Prakarsa Visi Valutama",
[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}: "Alcatel-Lucent",
+ [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, 2}: "THE YEOLRIM Co.,Ltd.",
[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 co.,LTD.",
+ [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, 78, 52}: "Remote Solution",
+ [3]byte{20, 79, 138}: "Intel Corporate",
+ [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, 87, 159}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{20, 88, 208}: "Hewlett Packard",
- [3]byte{20, 90, 5}: "Apple",
+ [3]byte{20, 89, 192}: "NETGEAR",
+ [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, 105, 162}: "SICHUAN TIANYI COMHEART TELECOM CO.,LTD",
[3]byte{20, 106, 11}: "Cypress Electronics Limited",
- [3]byte{20, 110, 10}: "PRIVATE",
+ [3]byte{20, 107, 114}: "Shenzhen Fortune Ship Technology Co., Ltd.",
+ [3]byte{20, 107, 156}: "SHENZHEN BILIAN ELECTRONIC 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}: "Varex Imaging Deutschland AG",
+ [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, 253}: "Samsung Electronics",
+ [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, 198}: "Apple",
+ [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, 47}: "USYS CO.,LTD.",
[3]byte{20, 148, 72}: "BLU CASTLE S.A.",
- [3]byte{20, 153, 226}: "Apple, Inc",
+ [3]byte{20, 150, 229}: "Samsung Electronics Co.,Ltd",
+ [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, 155, 47}: "JiangSu ZhongXie Intelligent Technology co., LTD",
+ [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, 43}: "currentoptronics Pvt.Ltd",
+ [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, 185, 104}: "Huawei Technologies Co., Ltd",
+ [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, 19}: "Apple, Inc.",
[3]byte{20, 194, 29}: "Sabtech Industries",
- [3]byte{20, 204, 32}: "TP-LINK TECHNOLOGIES CO.,LTD",
- [3]byte{20, 207, 141}: "OHSUNG ELECTRONICS CO., LTD.",
- [3]byte{20, 207, 146}: "TP-LINK TECHNOLOGIES CO., LTD.",
+ [3]byte{20, 195, 194}: "K.A. Schmersal GmbH & Co. KG",
+ [3]byte{20, 198, 151}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{20, 201, 19}: "LG Electronics",
+ [3]byte{20, 202, 160}: "Hu&Co",
+ [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, 212, 254}: "Pace plc",
+ [3]byte{20, 208, 13}: "Apple, Inc.",
+ [3]byte{20, 209, 31}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{20, 209, 105}: "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, 230, 228}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{20, 231, 200}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{20, 233, 178}: "Fiberhome Telecommunication Technologies Co.,LTD",
[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, 239, 207}: "SCHREDER",
[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",
- [3]byte{20, 246, 90}: "Xiaomi inc.",
+ [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{20, 254, 181}: "Dell Inc.",
+ [3]byte{24, 0, 45}: "Sony Mobile Communications Inc",
[3]byte{24, 0, 219}: "Fitbit Inc.",
- [3]byte{24, 1, 227}: "Elektrobit Wireless Communications Ltd",
- [3]byte{24, 3, 115}: "Dell Inc",
+ [3]byte{24, 1, 125}: "Harbin Arteor technology co., LTD",
+ [3]byte{24, 1, 227}: "Bittium Wireless Ltd",
+ [3]byte{24, 1, 241}: "Xiaomi Communications Co 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, 4, 237}: "Texas Instruments",
+ [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, 15, 118}: "D-Link International",
[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",
+ [3]byte{24, 29, 234}: "Intel Corporate",
+ [3]byte{24, 30, 120}: "Sagemcom Broadband SAS",
+ [3]byte{24, 30, 149}: "AuVerte",
[3]byte{24, 30, 176}: "Samsung Electronics Co.,Ltd",
[3]byte{24, 32, 18}: "Aztech Associates Inc.",
- [3]byte{24, 32, 50}: "Apple",
+ [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, 68}: "HIROSE ELECTRONIC SYSTEM",
[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, 49, 191}: "ASUSTek COMPUTER INC.",
[3]byte{24, 50, 162}: "LAON TECHNOLOGY CO., LTD.",
- [3]byte{24, 51, 157}: "CISCO SYSTEMS, INC.",
- [3]byte{24, 52, 81}: "Apple",
+ [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, 56, 174}: "CONSPIN SOLUTION",
[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, 58, 72}: "VostroNet",
[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, 66, 29}: "PRIVATE",
+ [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, 70, 23}: "Samsung Electronics",
+ [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, 75, 13}: "Ruckus Wireless",
+ [3]byte{24, 75, 223}: "Caavo Inc",
+ [3]byte{24, 76, 8}: "Rockwell Automation",
[3]byte{24, 78, 148}: "MESSOA TECHNOLOGIES INC.",
+ [3]byte{24, 79, 50}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{24, 80, 42}: "SOARNEX",
+ [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, 86, 128}: "Intel Corporate",
[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, 98, 44}: "SAGEMCOM SAS",
+ [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, 98, 228}: "Texas Instruments",
[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, 199}: "Shenzhen Libre Technology Co., Ltd",
+ [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, 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, 105, 218}: "China Mobile Group Device 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, 129, 14}: "Apple, Inc.",
[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",
@@ -13508,383 +14118,717 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 160}: "Wuhan Funshion Online Technologies 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, 127}: "AMPAK Technology, Inc.",
+ [3]byte{24, 147, 215}: "Texas Instruments",
+ [3]byte{24, 148, 198}: "ShenZhen Chenyee Technology Co., Ltd.",
[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, 156, 93}: "Cisco",
- [3]byte{24, 158, 252}: "Apple",
- [3]byte{24, 169, 5}: "Hewlett-Packard Company",
+ [3]byte{24, 155, 165}: "IEEE Registration Authority",
+ [3]byte{24, 156, 39}: "ARRIS Group, Inc.",
+ [3]byte{24, 156, 93}: "Cisco Systems, Inc",
+ [3]byte{24, 158, 252}: "Apple, Inc.",
+ [3]byte{24, 162, 138}: "Essel-T Co., Ltd",
+ [3]byte{24, 163, 232}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{24, 166, 247}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{24, 167, 241}: "Qingdao Haier Technology 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, 169, 155}: "Dell Inc.",
[3]byte{24, 170, 69}: "Fon Technology",
- [3]byte{24, 171, 245}: "Ultra Electronics - Electrics",
+ [3]byte{24, 171, 245}: "Ultra Electronics Electrics",
+ [3]byte{24, 172, 158}: "ITEL MOBILE LIMITED",
[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",
+ [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, 192, 134}: "Broadcom Corporation",
+ [3]byte{24, 184, 31}: "ARRIS Group, Inc.",
+ [3]byte{24, 185, 5}: "Hong Kong Bouffalo Lab Limited",
+ [3]byte{24, 187, 38}: "FN-LINK TECHNOLOGY LIMITED",
+ [3]byte{24, 188, 90}: "Zhejiang Tmall Technology Co., Ltd.",
+ [3]byte{24, 189, 173}: "L-TECH CORPORATION",
+ [3]byte{24, 190, 146}: "Delta Networks, Inc.",
+ [3]byte{24, 192, 134}: "Broadcom",
+ [3]byte{24, 193, 157}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{24, 194, 191}: "BUFFALO.INC",
[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, 215, 23}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
[3]byte{24, 217, 73}: "Qvis Labs, LLC",
- [3]byte{24, 220, 86}: "Yulong Computer Telecommunication Scientific(shenzhen)Co.,Lt",
+ [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, 194}: "Samsung Electronics",
- [3]byte{24, 231, 40}: "Cisco",
- [3]byte{24, 231, 244}: "Apple",
+ [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, 41}: "Ubiquiti Networks Inc.",
[3]byte{24, 232, 221}: "MODULETEK",
- [3]byte{24, 239, 99}: "CISCO SYSTEMS, INC.",
+ [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, 241, 216}: "Apple, Inc.",
+ [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, 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, 0, 66}: "NARI 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, 97}: "Ciena Corporation",
[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, 23, 211}: "CISCO SYSTEMS, 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",
+ [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, 27, 181}: "Intel Corporate",
[3]byte{28, 28, 253}: "Dalian Hi-Think Computer Technology, Corp",
- [3]byte{28, 29, 103}: "Shenzhen Huawei Communication Technologies Co., Ltd",
- [3]byte{28, 29, 134}: "Cisco",
+ [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, 36, 205}: "Askey Computer Corp.",
+ [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, 66, 125}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
[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",
+ [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, 90, 62}: "Samsung Eletronics Co., Ltd (Visual Display Divison)",
+ [3]byte{28, 84, 158}: "Universal Electronics, Inc.",
+ [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, 89, 155}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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}: "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",
- [3]byte{28, 105, 165}: "Research In Motion",
- [3]byte{28, 106, 122}: "Cisco",
+ [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, 33}: "Sony Mobile Communications Inc",
+ [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 Electronics CO.,LTD",
+ [3]byte{28, 150, 90}: "WEIFANG GOERTEK ELECTRONICS CO.,LTD",
[3]byte{28, 151, 61}: "PRICOM Design",
- [3]byte{28, 153, 76}: "Murata Manufactuaring Co.,Ltd.",
+ [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, 184}: "Hon Hai Precision Ind. Co., Ltd.",
+ [3]byte{28, 160, 211}: "IEEE Registration Authority",
[3]byte{28, 162, 177}: "ruwido austria gmbh",
- [3]byte{28, 167, 112}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LT",
- [3]byte{28, 170, 7}: "CISCO SYSTEMS, INC.",
+ [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, 167}: "Apple",
+ [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 PTE LIMITED",
+ [3]byte{28, 175, 247}: "D-Link International",
+ [3]byte{28, 176, 68}: "ASKEY COMPUTER CORP",
[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, 187, 168}: "OJSC Ufimskiy Zavod Promsvyaz",
[3]byte{28, 189, 14}: "Amplified Engineering Pty Ltd",
- [3]byte{28, 189, 185}: "D-LINK INTERNATIONAL PTE LIMITED",
+ [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 Company",
+ [3]byte{28, 193, 222}: "Hewlett Packard",
[3]byte{28, 195, 22}: "MileSight Technology Co., Ltd.",
+ [3]byte{28, 195, 235}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,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, 222, 167}: "Cisco",
- [3]byte{28, 223, 15}: "CISCO SYSTEMS, INC.",
+ [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",
- [3]byte{28, 230, 199}: "Cisco",
+ [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, 242, 154}: "Google, Inc.",
+ [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, 253, 8}: "IEEE Registration Authority",
[3]byte{28, 254, 167}: "IDentytech Solutins Ltd.",
[3]byte{32, 1, 79}: "Linea Research Ltd",
- [3]byte{32, 2, 175}: "Murata Manufactuaring Co.,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, 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 INC.,",
+ [3]byte{32, 12, 200}: "NETGEAR",
[3]byte{32, 14, 149}: "IEC – TC9 WG43",
+ [3]byte{32, 15, 112}: "FOXTECH",
[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, 61}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{32, 22, 185}: "Intel Corporate",
[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 Inc",
+ [3]byte{32, 31, 49}: "Inteno Broadband Technology AB",
+ [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, 43, 193}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [3]byte{32, 40, 62}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 55, 6}: "CISCO SYSTEMS, INC.",
+ [3]byte{32, 45, 7}: "Samsung Electronics Co.,Ltd",
+ [3]byte{32, 45, 35}: "Collinear Networks Inc.",
+ [3]byte{32, 45, 248}: "Digital Media Cartridge Ltd.",
+ [3]byte{32, 49, 235}: "HDSN",
+ [3]byte{32, 50, 51}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD",
+ [3]byte{32, 54, 91}: "Megafone Limited",
+ [3]byte{32, 55, 6}: "Cisco Systems, Inc",
[3]byte{32, 55, 188}: "Kuipers Electronic Engineering BV",
- [3]byte{32, 58, 7}: "Cisco",
+ [3]byte{32, 57, 86}: "HMD Global Oy",
+ [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, 61, 189}: "LG Innotek",
[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, 218}: "Xiaomi Communications Co Ltd",
+ [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, 118}: "Sony Mobile Communications Inc",
+ [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, 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, 100, 50}: "SAMSUNG ELECTRO MECHANICS 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, 124}: "Hewlett Packard Enterprise",
[3]byte{32, 103, 177}: "Pluto inc.",
[3]byte{32, 104, 157}: "Liteon Technology Corporation",
- [3]byte{32, 106, 138}: "Wistron InfoComm Manufacturing(Kunshan)Co.,Ltd.",
+ [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, 121, 24}: "Intel Corporate",
[3]byte{32, 124, 143}: "Quanta Microsystems,Inc.",
- [3]byte{32, 125, 116}: "Apple",
+ [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, 132}: "COMPAL INFORMATION (KUNSHAN) CO., LTD",
+ [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, 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, 12}: "Xiaomi Communications Co 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 AG",
+ [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, 173, 86}: "Continental Automotive Systems Inc.",
+ [3]byte{32, 176, 1}: "Technicolor",
[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, 192}: "Cisco",
+ [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 Inc",
+ [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",
- [3]byte{32, 205, 57}: "Texas Instruments, Inc",
+ [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 Eletronics 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, 216, 11}: "Juniper Networks",
[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, 220, 230}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{32, 222, 136}: "IC Realtime LLC",
[3]byte{32, 223, 63}: "Nanjing SAC Power Grid Automation Co., Ltd.",
- [3]byte{32, 229, 42}: "NETGEAR INC.,",
+ [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, 232, 130}: "zte corporation",
[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, 243, 163}: "Huawei Technologies Co., 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, 247, 124}: "vivo Mobile Communication 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, 1, 199}: "Cisco",
+ [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, 136}: "Google, Inc.",
+ [3]byte{36, 5, 245}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
[3]byte{36, 9, 23}: "Devlin Electronics Limited",
- [3]byte{36, 10, 17}: "TCT Mobile Limited",
- [3]byte{36, 10, 100}: "AzureWaveTechnologies,Inc",
+ [3]byte{36, 9, 149}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 10, 17}: "TCT mobile ltd",
+ [3]byte{36, 10, 99}: "ARRIS Group, Inc.",
+ [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, 24, 29}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
[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, 27, 122}: "Apple, Inc.",
+ [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, 33, 171}: "Sony Ericsson Mobile Communications",
+ [3]byte{36, 31, 160}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 32, 199}: "Sagemcom Broadband SAS",
+ [3]byte{36, 33, 36}: "Nokia",
+ [3]byte{36, 33, 171}: "Sony Mobile Communications Inc",
+ [3]byte{36, 36, 14}: "Apple, Inc.",
[3]byte{36, 38, 66}: "SHARP Corporation.",
+ [3]byte{36, 41, 254}: "KYOCERA Corporation",
+ [3]byte{36, 46, 2}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 46, 144}: "PALIT MICROSYSTEMS, LTD",
[3]byte{36, 47, 250}: "Toshiba Global Commerce Solutions",
- [3]byte{36, 51, 108}: "PRIVATE",
+ [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, 58, 130}: "IRTS",
[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, 76, 227}: "Amazon Technologies Inc.",
+ [3]byte{36, 78, 123}: "IEEE Registration Authority",
[3]byte{36, 79, 29}: "iRule LLC",
- [3]byte{36, 95, 223}: "KYOCERA Corporation",
+ [3]byte{36, 83, 191}: "Enernet",
+ [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, 165}: "Huawei Technologies Co., Ltd",
+ [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, 125, 77}: "Texas Instruments",
+ [3]byte{36, 126, 18}: "Cisco Systems, Inc",
+ [3]byte{36, 126, 81}: "zte corporation",
+ [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, 132, 152}: "Beijing Jiaoda Microunion Tech.Co.,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, 162, 225}: "Apple, Inc",
+ [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, 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",
- [3]byte{36, 175, 74}: "Alcatel-Lucent-IPD",
+ [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, 182, 87}: "CISCO SYSTEMS, 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, 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, 190, 24}: "DADOUTEK COMPANY LIMITED",
+ [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, 72}: "mywerk Portal 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, 202, 203}: "Fiberhome Telecommunication Technologies Co.,LTD",
[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, 217, 33}: "Avaya, Inc",
+ [3]byte{36, 211, 242}: "zte corporation",
+ [3]byte{36, 213, 28}: "Zhongtian broadband technology co., LTD",
+ [3]byte{36, 215, 107}: "Syntronic AB",
+ [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}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [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, 226, 113}: "Qingdao Hisense Communications Co.,Ltd",
- [3]byte{36, 227, 20}: "Apple",
+ [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",
- [3]byte{36, 234, 64}: "Systeme Helmholz GmbH",
+ [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, 81}: "ADF Technologies Sdn Bhd",
+ [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, 241, 40}: "Telstra",
+ [3]byte{36, 242, 127}: "Hewlett Packard Enterprise",
[3]byte{36, 242, 221}: "Radiant Zemax LLC",
- [3]byte{36, 245, 170}: "Samsung Electronics Co.,LTD",
+ [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, 250, 243}: "Shanghai Flexem Technology Co.,Ltd.",
+ [3]byte{36, 251, 101}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{36, 252, 229}: "Samsung Electronics Co.,Ltd",
[3]byte{36, 253, 82}: "Liteon Technology Corporation",
+ [3]byte{36, 253, 91}: "SmartThings, Inc.",
+ [3]byte{40, 2, 69}: "Konze System Technology Co.,Ltd.",
+ [3]byte{40, 2, 216}: "Samsung Electronics Co.,Ltd",
[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, 11, 92}: "Apple",
+ [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 Computer Entertainment Inc.",
+ [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, 17, 165}: "Bose Corporation",
[3]byte{40, 20, 113}: "Lantis co., LTD.",
- [3]byte{40, 22, 46}: "2Wire",
+ [3]byte{40, 22, 46}: "2Wire Inc",
+ [3]byte{40, 22, 168}: "Microsoft Corporation",
+ [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, 40, 93}: "ZyXEL Communications Corporation",
+ [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, 2}: "IEEE Registration Authority",
[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, 49, 102}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{40, 50, 197}: "HUMAX Co., Ltd.",
[3]byte{40, 52, 16}: "Enigma Diagnostics Limited",
- [3]byte{40, 52, 162}: "Cisco",
- [3]byte{40, 55, 55}: "Apple",
+ [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, 92}: "FLEXTRONICS",
[3]byte{40, 56, 207}: "Gen2wave",
+ [3]byte{40, 57, 38}: "CyberTAN Technology Inc.",
+ [3]byte{40, 57, 94}: "Samsung Electronics Co.,Ltd",
[3]byte{40, 57, 231}: "Preceno Technology Pte.Ltd.",
+ [3]byte{40, 58, 77}: "Cloud Network Technology (Samoa) Limited",
+ [3]byte{40, 59, 130}: "D-Link International",
[3]byte{40, 59, 150}: "Cool Control LTD",
- [3]byte{40, 60, 228}: "Huawei Technologies Co., Ltd",
+ [3]byte{40, 60, 228}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{40, 62, 118}: "Common Networks",
+ [3]byte{40, 63, 105}: "Sony Mobile Communications Inc",
[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",
@@ -13895,217 +14839,395 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 87, 103}: "Echostar Technologies Corp",
- [3]byte{40, 95, 219}: "Shenzhen Huawei Communication Technologies 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}: "Dish 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, 99, 54}: "Siemens AG",
[3]byte{40, 101, 107}: "Keystone Microtech Corporation",
- [3]byte{40, 106, 184}: "Apple",
- [3]byte{40, 106, 186}: "Apple",
+ [3]byte{40, 102, 227}: "AzureWave Technology Inc.",
+ [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, 109, 205}: "Beijing Winner Microelectronics 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, 117, 216}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+ [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, 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, 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 Limited",
+ [3]byte{40, 154, 250}: "TCT mobile ltd",
+ [3]byte{40, 158, 151}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{40, 158, 223}: "Danfoss Turbocor Compressors, Inc",
+ [3]byte{40, 158, 252}: "Sagemcom Broadband SAS",
+ [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, 172, 158}: "Cisco Systems, Inc",
+ [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, 190, 155}: "Technicolor USA 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 INC.,",
+ [3]byte{40, 198, 142}: "NETGEAR",
[3]byte{40, 199, 24}: "Altierre",
- [3]byte{40, 199, 206}: "Cisco",
+ [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, 218}: "Apple",
- [3]byte{40, 207, 233}: "Apple",
+ [3]byte{40, 207, 8}: "ESSYS",
+ [3]byte{40, 207, 218}: "Apple, Inc.",
+ [3]byte{40, 207, 233}: "Apple, Inc.",
+ [3]byte{40, 208, 203}: "Cambridge Communication Systems Ltd",
[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",
+ [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 inc.",
+ [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",
+ [3]byte{40, 231, 207}: "Apple, Inc.",
+ [3]byte{40, 233, 142}: "Mitsubishi Electric Corporation",
+ [3]byte{40, 236, 154}: "Texas Instruments",
[3]byte{40, 237, 88}: "JAG Jakob AG",
+ [3]byte{40, 237, 106}: "Apple, Inc.",
+ [3]byte{40, 237, 224}: "AMPAK Technology, Inc.",
[3]byte{40, 238, 44}: "Frontline Test Equipment",
- [3]byte{40, 239, 1}: "PRIVATE",
+ [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, 254, 222}: "COMESTA, Inc.",
+ [3]byte{40, 255, 60}: "Apple, Inc.",
+ [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, 21, 225}: "Phicomm (Shanghai) Co., Ltd.",
+ [3]byte{44, 24, 117}: "Skyworth Digital Technology(Shenzhen) 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, 28, 246}: "Alien Green LLC",
+ [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, 215}: "Hewlett-Packard Company",
- [3]byte{44, 40, 45}: "BBK COMMUNICATIAO TECHNOLOGY CO.,LTD.",
+ [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, 40, 183}: "Hangzhou Ruiying technology co., 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, 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, 57, 150}: "SAGEMCOM",
+ [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",
- [3]byte{44, 63, 56}: "CISCO SYSTEMS, INC.",
+ [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, 65, 56}: "Hewlett-Packard Company",
+ [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, 71, 89}: "Beijing MEGA preponderance Science & Technology Co. Ltd",
+ [3]byte{44, 72, 53}: "IEEE Registration Authority",
+ [3]byte{44, 77, 84}: "ASUSTek COMPUTER INC.",
+ [3]byte{44, 77, 121}: "WEIFANG GOERTEK ELECTRONICS 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, 207}: "LG Electronics",
+ [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, 88, 79}: "ARRIS Group, Inc.",
+ [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, 97, 4}: "SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.",
+ [3]byte{44, 97, 246}: "Apple, 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, 107, 245}: "Juniper networks",
+ [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 Company",
+ [3]byte{44, 118, 138}: "Hewlett Packard",
+ [3]byte{44, 121, 215}: "Sagemcom Broadband SAS",
[3]byte{44, 123, 90}: "Milper Ltd",
[3]byte{44, 123, 132}: "OOO Petr Telegin",
+ [3]byte{44, 124, 228}: "Wuhan Tianyu Information Industry Co., Ltd.",
+ [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, 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, 105}: "ARRIS Group, Inc.",
[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, 154, 164}: "NGI SpA",
+ [3]byte{44, 151, 177}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 160, 47}: "Veroguard Systems Pty Ltd",
[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, 37}: "Shenzhen Gongjin Electronics Co.,Ltd",
+ [3]byte{44, 169, 240}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{44, 170, 142}: "Wyze Labs Inc",
+ [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, 180, 58}: "Apple",
+ [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, 190, 8}: "Apple",
+ [3]byte{44, 184, 237}: "SonicWall",
+ [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}: "Ravello Systems",
+ [3]byte{44, 194, 96}: "Oracle Corporation",
+ [3]byte{44, 197, 72}: "IAdea Corporation",
+ [3]byte{44, 197, 211}: "Ruckus Wireless",
+ [3]byte{44, 202, 12}: "WITHUS PLANET",
[3]byte{44, 204, 21}: "Nokia Corporation",
+ [3]byte{44, 204, 68}: "Sony Interactive Entertainment Inc.",
[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, 212, 68}: "FUJITSU LIMITED",
+ [3]byte{44, 217, 116}: "Hui Zhou Gaoshengda Technology Co.,LTD",
+ [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 SAS",
+ [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, 238}: "Apple",
+ [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, 244, 197}: "Avaya Inc",
[3]byte{44, 247, 241}: "Seeed Technology Inc.",
- [3]byte{44, 250, 162}: "Alcatel-Lucent",
+ [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, 9, 249}: "IEEE Registration Authority",
+ [3]byte{48, 10, 96}: "IEEE Registration Authority",
+ [3]byte{48, 10, 197}: "Ruio telecommunication technologies Co., Limited",
[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, 14, 213}: "Hon Hai Precision Ind.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, 19, 137}: "Siemens AG, Automations & Drives,",
[3]byte{48, 20, 45}: "Piciorgros GmbH",
- [3]byte{48, 20, 74}: "Wistron Neweb Corp.",
+ [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 Ericsson Mobile Communications AB",
+ [3]byte{48, 23, 200}: "Sony Mobile Communications Inc",
[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, 31, 154}: "IEEE Registration Authority",
[3]byte{48, 33, 91}: "Shenzhen Ostar Display Electronic Co.,Ltd",
+ [3]byte{48, 35, 3}: "Belkin International Inc.",
+ [3]byte{48, 36, 50}: "Intel Corporate",
+ [3]byte{48, 36, 120}: "Sagemcom Broadband SAS",
+ [3]byte{48, 41, 82}: "Hillstone Networks Inc",
+ [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, 55, 166}: "CISCO SYSTEMS, INC.",
+ [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 Ericsson Mobile Communications AB",
+ [3]byte{48, 57, 38}: "Sony Mobile Communications Inc",
[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",
@@ -14113,137 +15235,271 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 66, 161}: "ilumisys Inc. DBA Toggled",
[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, 69, 17}: "Texas Instruments",
+ [3]byte{48, 69, 150}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{48, 70, 154}: "NETGEAR",
[3]byte{48, 73, 59}: "Nanjing Z-Com Wireless Co.,Ltd",
+ [3]byte{48, 75, 7}: "Motorola Mobility LLC, a Lenovo Company",
[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, 93, 166}: "ADVALY SYSTEM Inc.",
[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, 106, 133}: "Samsung Electronics Co.,Ltd",
[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, 117, 18}: "Sony Mobile Communications AB",
- [3]byte{48, 118, 111}: "LG Electronics",
+ [3]byte{48, 116, 150}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{48, 117, 18}: "Sony Mobile Communications Inc",
+ [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, 120, 194}: "Innowireless / QUCELL Networks",
+ [3]byte{48, 123, 172}: "New H3C Technologies 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, 133, 169}: "Asustek Computer Inc",
- [3]byte{48, 135, 48}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [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, 136, 65}: "Sichuan\u00a0AI-Link\u00a0Technology\u00a0Co.,\u00a0Ltd.",
+ [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, 144, 171}: "Apple",
+ [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, 155, 173}: "BBK Electronics Corp., Ltd.,",
- [3]byte{48, 168, 219}: "Sony Mobile Communications AB",
+ [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, 161, 250}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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 Inc",
+ [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, 178, 22}: "Hytec Geraetebau GmbH",
+ [3]byte{48, 177, 100}: "Power Electronics International Inc.",
+ [3]byte{48, 178, 22}: "ABB AG - Power Grids - Grid Automation",
[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, 183, 212}: "Hitron Technologies. Inc",
+ [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-Next s.r.l.",
- [3]byte{48, 205, 167}: "Samsung Electronics ITS, Printer division",
+ [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, 107}: "Liteon Technology Corporation",
[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, 89}: "Merging Technologies SA",
[3]byte{48, 214, 201}: "Samsung Electronics Co.,Ltd",
+ [3]byte{48, 217, 217}: "Apple, Inc.",
[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, 227, 214}: "Spotify USA Inc.",
[3]byte{48, 228, 142}: "Vodafone UK",
- [3]byte{48, 228, 219}: "CISCO SYSTEMS, INC.",
+ [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, 235, 90}: "LANDIS + GYR",
[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, 247, 13}: "Cisco Systems",
- [3]byte{48, 247, 197}: "Apple",
+ [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, 253, 56}: "Google, 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, 3, 222}: "Texas Instruments",
+ [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, 10, 255}: "Qingdao Hisense Communications Co.,Ltd",
+ [3]byte{52, 8, 188}: "Apple, Inc.",
+ [3]byte{52, 10, 34}: "TOP-ACCESS ELECTRONICS CO LTD",
+ [3]byte{52, 10, 152}: "HUAWEI TECHNOLOGIES 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, 18, 249}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{52, 19, 168}: "Mediplan Limited",
[3]byte{52, 19, 232}: "Intel Corporate",
- [3]byte{52, 21, 158}: "Apple",
- [3]byte{52, 23, 235}: "Dell Inc",
+ [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 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, 39, 146}: "FREEBOX SAS",
[3]byte{52, 40, 240}: "ATN International Limited",
+ [3]byte{52, 41, 18}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 44, 196}: "Compal Broadband Networks, Inc.",
+ [3]byte{52, 45, 13}: "Samsung Electronics Co.,Ltd",
+ [3]byte{52, 46, 182}: "HUAWEI TECHNOLOGIES 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, 66, 98}: "Apple, Inc.",
[3]byte{52, 70, 111}: "HiTEM Engineering",
- [3]byte{52, 75, 61}: "Fiberhome Telecommunication Tech.Co.,Ltd.",
- [3]byte{52, 75, 80}: "ZTE Corporation",
+ [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",
+ [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",
+ [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, 90, 6}: "SHARP Corporation",
+ [3]byte{52, 90, 186}: "tcloud intelligence",
[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",
+ [3]byte{52, 98, 136}: "Cisco Systems, Inc",
[3]byte{52, 100, 169}: "Hewlett Packard",
+ [3]byte{52, 102, 234}: "VERTU INTERNATIONAL CORPORATION LIMITED",
[3]byte{52, 104, 74}: "Teraworks Co., Ltd.",
- [3]byte{52, 107, 211}: "Huawei Technologies 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, 70}: "Sagemcom Broadband SAS",
+ [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, 111, 144}: "Cisco",
+ [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, 117, 199}: "Avaya, Inc",
+ [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, 119}: "O-Net Communications (Shenzhen) Limited",
+ [3]byte{52, 120, 215}: "Gionee Communication Equipment Co.,Ltd.",
+ [3]byte{52, 121, 22}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{52, 122, 96}: "ARRIS Group, Inc.",
+ [3]byte{52, 124, 37}: "Apple, Inc.",
[3]byte{52, 126, 57}: "Nokia Danmark A/S",
+ [3]byte{52, 126, 92}: "Sonos, Inc.",
+ [3]byte{52, 126, 202}: "NEXTWILL",
+ [3]byte{52, 128, 13}: "Cavium Inc",
+ [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, 130, 222}: "Kayo Technology, Inc.",
+ [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, 174}: "SAGEMCOM SAS",
+ [3]byte{52, 138, 123}: "Samsung Electronics Co.,Ltd",
+ [3]byte{52, 138, 174}: "Sagemcom Broadband SAS",
+ [3]byte{52, 139, 117}: "LAVA INTERNATIONAL(H.K) LIMITED",
+ [3]byte{52, 143, 39}: "Ruckus Wireless",
+ [3]byte{52, 147, 66}: "TTE Corporation",
[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",
@@ -14251,590 +15507,1093 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [3]byte{52, 168, 78}: "Cisco Systems, Inc",
[3]byte{52, 170, 139}: "Samsung Electronics Co.,Ltd",
- [3]byte{52, 170, 153}: "Alcatel-Lucent",
+ [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}: "Everest Networks, Inc",
[3]byte{52, 186, 154}: "Asiatelco Technologies Co.",
- [3]byte{52, 187, 31}: "Research In Motion",
- [3]byte{52, 187, 38}: "Motorola Mobility LLC",
+ [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",
+ [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 Tech.Co.,Ltd.",
- [3]byte{52, 192, 89}: "Apple",
- [3]byte{52, 195, 172}: "Samsung Electronics",
+ [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 Co,. 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, 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, 18}: "Smartisan Digital Co., Ltd",
[3]byte{52, 215, 180}: "Tributary Systems, Inc.",
- [3]byte{52, 219, 253}: "Cisco",
+ [3]byte{52, 217, 84}: "WiBotic Inc.",
+ [3]byte{52, 218, 193}: "SAE Technologies Development(Dongguan) Co., Ltd.",
+ [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",
+ [3]byte{52, 225, 45}: "Intel Corporate",
+ [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, 229, 236}: "Palo Alto Networks",
[3]byte{52, 230, 173}: "Intel Corporate",
[3]byte{52, 230, 215}: "Dell Inc.",
- [3]byte{52, 239, 68}: "2Wire",
+ [3]byte{52, 231, 11}: "HAN Networks Co., Ltd",
+ [3]byte{52, 231, 28}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [3]byte{52, 232, 148}: "TP-LINK TECHNOLOGIES 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, 248, 231}: "Cisco Systems, Inc",
[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{56, 1, 151}: "Toshiba Samsung Storage Technolgoy Korea Corporation",
+ [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, 60}: "Texas Instruments",
[3]byte{56, 11, 64}: "Samsung Electronics Co.,Ltd",
- [3]byte{56, 13, 212}: "Primax Electronics 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",
+ [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",
+ [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, 34, 157}: "Pirelli Tyre S.p.A.",
- [3]byte{56, 34, 214}: "H3C Technologies Co., Limited",
+ [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, 48, 249}: "LG Electronics (Mobile Communications)",
[3]byte{56, 49, 172}: "WEG",
- [3]byte{56, 59, 200}: "2wire",
+ [3]byte{56, 53, 251}: "Sagemcom Broadband SAS",
+ [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",
+ [3]byte{56, 70, 8}: "zte corporation",
+ [3]byte{56, 72, 76}: "Apple, Inc.",
[3]byte{56, 75, 118}: "AIRTAME ApS",
- [3]byte{56, 79, 240}: "Azurewave Technologies, Inc.",
- [3]byte{56, 82, 26}: "Alcatel-Lucent 7705",
+ [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, 83, 156}: "Apple, Inc.",
+ [3]byte{56, 86, 16}: "CANDY HOUSE, Inc.",
+ [3]byte{56, 86, 181}: "Peerbridge Health Inc",
[3]byte{56, 88, 12}: "Panaccess Systems GmbH",
- [3]byte{56, 89, 248}: "MindMade sp. z o.o.",
+ [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, 104, 221}: "INVENTEC CORPORATION",
+ [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, 114, 192}: "COMTREND",
+ [3]byte{56, 110, 136}: "zte corporation",
+ [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, 120, 98}: "Sony Mobile Communications Inc",
[3]byte{56, 123, 71}: "AKELA, Inc.",
- [3]byte{56, 131, 69}: "TP-LINK TECHNOLOGIES CO., LTD.",
+ [3]byte{56, 128, 223}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{56, 129, 215}: "Texas Instruments",
+ [3]byte{56, 131, 69}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{56, 134, 2}: "Flexoptix GmbH",
+ [3]byte{56, 137, 44}: "Apple, Inc.",
[3]byte{56, 137, 220}: "Opticon Sensors Europe B.V.",
[3]byte{56, 138, 183}: "ITC Networks",
+ [3]byte{56, 139, 89}: "Google, Inc.",
+ [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 Elec Co.,Ltd",
+ [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, 165, 60}: "Veenstra Instruments",
+ [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",
+ [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, 41}: "Zhejiang Dahua Technology 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, 180, 211}: "BSH Hausgeraete GmbH",
+ [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, 186, 248}: "Intel Corporate",
[3]byte{56, 187, 35}: "OzVision America LLC",
- [3]byte{56, 187, 60}: "Avaya, Inc",
- [3]byte{56, 188, 26}: "Meizu technology co.,ltd",
+ [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, 222, 173}: "Intel Corporate",
[3]byte{56, 224, 142}: "Mitsubishi Electric Corporation",
- [3]byte{56, 229, 149}: "Shenzhen Gongjin Electronics Co.,Ltd",
+ [3]byte{56, 225, 170}: "zte 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, 230, 10}: "Xiaomi Communications Co Ltd",
[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",
+ [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, 84}: "HISENSE ELECTRIC CO.,LTD",
+ [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, 248, 137}: "Huawei Technologies Co., Ltd",
+ [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, 249, 211}: "Apple, 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, 1, 239}: "Sony Mobile Communications Inc",
[3]byte{60, 2, 177}: "Creation Technologies LP",
+ [3]byte{60, 4, 97}: "ARRIS Group, Inc.",
[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",
+ [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",
+ [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, 14, 35}: "Cisco",
+ [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, 21, 194}: "Apple",
+ [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, 21, 251}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{60, 23, 16}: "Sagemcom Broadband SAS",
[3]byte{60, 24, 159}: "Nokia Corporation",
- [3]byte{60, 24, 160}: "Luxshare Precision Industry Co.,Ltd.",
+ [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, 36, 240}: "IEEE Registration Authority",
[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, 40, 109}: "Google, Inc.",
+ [3]byte{60, 42, 244}: "Brother Industries, LTD.",
+ [3]byte{60, 44, 48}: "Dell Inc.",
+ [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, 54, 228}: "ARRIS Group, Inc.",
+ [3]byte{60, 55, 134}: "NETGEAR",
[3]byte{60, 56, 136}: "ConnectQuest, llc",
[3]byte{60, 57, 195}: "JW Electronics Co., Ltd.",
- [3]byte{60, 57, 231}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
- [3]byte{60, 58, 115}: "Avaya, Inc",
- [3]byte{60, 64, 79}: "Guangdong Pisen 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, 66, 126}: "IEEE Registration Authority",
[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, 71, 155}: "Theissen Training Systems, Inc.",
[3]byte{60, 73, 55}: "ASSMANN Electronic GmbH",
- [3]byte{60, 74, 146}: "Hewlett-Packard Company",
+ [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, 79}: "China Mobile Group Device Co.,Ltd.",
+ [3]byte{60, 87, 108}: "Samsung Electronics Co.,Ltd",
[3]byte{60, 87, 189}: "Kessler Crane Inc.",
[3]byte{60, 87, 213}: "FiveCo",
- [3]byte{60, 90, 55}: "Samsung Electronics",
- [3]byte{60, 90, 180}: "Google",
+ [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, 92, 196}: "Amazon Technologies Inc.",
+ [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, 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, 44}: "IEEE Registration Authority",
[3]byte{60, 106, 125}: "Niigata Power Systems Co., Ltd.",
+ [3]byte{60, 106, 157}: "Dexatek Technology LTD.",
+ [3]byte{60, 106, 167}: "Intel Corporate",
[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, 113, 191}: "Espressif Inc.",
[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, 129, 216}: "SAGEMCOM SAS",
+ [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, 148}: "BSkyB Ltd",
[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, 254}: "Samsung Electronics",
- [3]byte{60, 145, 87}: "Hangzhou Yulong Conmunication 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, 141, 32}: "Google, 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, 114}: "Sercomm Corporation.",
[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, 155, 214}: "Vizio, 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",
+ [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, 91}: "Avaya Inc",
[3]byte{60, 177, 127}: "Wattwatchers Pty Ld",
- [3]byte{60, 184, 122}: "PRIVATE",
+ [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, 93}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{60, 205, 147}: "LG ELECTRONICS INC",
- [3]byte{60, 206, 115}: "CISCO SYSTEMS, INC.",
- [3]byte{60, 208, 248}: "Apple",
+ [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 Company",
+ [3]byte{60, 217, 43}: "Hewlett Packard",
[3]byte{60, 217, 206}: "Eclipse WiFi",
- [3]byte{60, 223, 30}: "CISCO SYSTEMS, INC.",
- [3]byte{60, 223, 189}: "Huawei Technologies Co., Ltd",
- [3]byte{60, 224, 114}: "Apple",
- [3]byte{60, 229, 166}: "Hangzhou H3C Technologies Co., Ltd.",
+ [3]byte{60, 218, 42}: "zte corporation",
+ [3]byte{60, 220, 188}: "Samsung Electronics Co.,Ltd",
+ [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, 225, 161}: "Universal Global Scientific Industrial Co., Ltd.",
+ [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",
+ [3]byte{60, 232, 36}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{60, 234, 79}: "2Wire Inc",
+ [3]byte{60, 234, 249}: "JUBIXCOLTD",
[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, 244, 249}: "Moda-InnoChips",
[3]byte{60, 245, 44}: "DSPECIALISTS GmbH",
+ [3]byte{60, 245, 145}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{60, 245, 204}: "New H3C Technologies Co., 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, 92}: "Fiberhome Telecommunication 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, 6, 160}: "Texas Instruments",
[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 co.,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, 159}: "TP-LINK TECHNOLOGIES CO.,LTD.",
[3]byte{64, 22, 250}: "EKM Metering",
+ [3]byte{64, 23, 226}: "INTAI TECHNOLOGY CORP.",
[3]byte{64, 24, 177}: "Aerohive Networks Inc.",
- [3]byte{64, 24, 215}: "Wyle Telemetry and Data Systems",
+ [3]byte{64, 24, 215}: "Smartronix, Inc.",
+ [3]byte{64, 27, 95}: "WEIFANG GOERTEK ELECTRONICS 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, 38, 25}: "Apple, Inc.",
[3]byte{64, 39, 11}: "Mobileeco Co., Ltd",
- [3]byte{64, 43, 161}: "Sony Ericsson Mobile Communications AB",
+ [3]byte{64, 40, 20}: "RFI Engineering",
+ [3]byte{64, 43, 161}: "Sony Mobile Communications Inc",
[3]byte{64, 44, 244}: "Universal Global Scientific Industrial Co., Ltd.",
- [3]byte{64, 48, 4}: "Apple",
+ [3]byte{64, 46, 40}: "MiXTelematics",
+ [3]byte{64, 48, 4}: "Apple, Inc.",
[3]byte{64, 48, 103}: "Conlog (Pty) Ltd",
+ [3]byte{64, 49, 60}: "XIAOMI Electronics,CO.,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",
+ [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 Inc",
+ [3]byte{64, 66, 41}: "Layer3TV, Inc",
[3]byte{64, 69, 218}: "Spreadtrum Communications (Shanghai) Co., Ltd.",
- [3]byte{64, 74, 3}: "ZyXEL Communications Corporation",
+ [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, 77, 142}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [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, 181}: "Shenzhen New Species Technology 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, 85, 57}: "CISCO SYSTEMS, INC.",
+ [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, 86, 98}: "GuoTengShengHua Electronics 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, 49}: "GIFA",
+ [3]byte{64, 98, 182}: "Tele system communication",
+ [3]byte{64, 98, 234}: "China Mobile Group Device Co.,Ltd.",
+ [3]byte{64, 100, 164}: "THE FURUKAWA ELECTRIC CO., LTD",
+ [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",
- [3]byte{64, 111, 42}: "Research In Motion",
+ [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",
+ [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}: "Motorola",
+ [3]byte{64, 131, 29}: "Apple, Inc.",
+ [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, 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, 152, 173}: "Apple, Inc.",
+ [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, 161, 8}: "Motorola (Wuhan) Mobility Technologies Communication 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",
+ [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, 250}: "LG Electronics",
+ [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",
+ [3]byte{64, 179, 14}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [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, 186, 97}: "Arima Communications Corp.",
+ [3]byte{64, 184, 55}: "Sony Mobile Communications Inc",
+ [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, 96}: "Apple, Inc.",
[3]byte{64, 188, 115}: "Cronoplast S.L.",
[3]byte{64, 188, 139}: "itelio GmbH",
+ [3]byte{64, 189, 50}: "Texas Instruments",
[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, 195, 198}: "SnapRoute",
[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, 203, 168}: "Huawei Technologies Co., Ltd",
+ [3]byte{64, 200, 31}: "Shenzhen Xinguodu Technology Co., Ltd.",
+ [3]byte{64, 200, 203}: "AM Telecom co., Ltd.",
+ [3]byte{64, 203, 168}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{64, 203, 192}: "Apple, Inc.",
[3]byte{64, 205, 58}: "Z3 Technology",
- [3]byte{64, 211, 45}: "Apple",
+ [3]byte{64, 205, 122}: "Qingdao Hisense Communications Co.,Ltd.",
+ [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, 216, 85}: "IEEE REGISTRATION AUTHORITY",
- [3]byte{64, 226, 48}: "AzureWave Technologies, Inc.",
+ [3]byte{64, 214, 60}: "Equitech Industrial(DongGuan)Co.,Ltd",
+ [3]byte{64, 216, 85}: "IEEE Registration Authority",
+ [3]byte{64, 220, 157}: "HAJEN",
+ [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, 238, 221}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{64, 239, 76}: "Fihonest communication co.,Ltd",
[3]byte{64, 240, 47}: "Liteon Technology Corporation",
+ [3]byte{64, 240, 78}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
[3]byte{64, 241, 76}: "ISE Europe SPRL",
- [3]byte{64, 242, 1}: "SAGEMCOM",
+ [3]byte{64, 242, 1}: "Sagemcom Broadband SAS",
[3]byte{64, 242, 233}: "IBM",
- [3]byte{64, 243, 8}: "Murata Manufactuaring Co.,Ltd.",
+ [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, 236}: "CISCO SYSTEMS, INC.",
+ [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{68, 3, 167}: "Cisco",
+ [3]byte{64, 254, 13}: "MAXIO",
+ [3]byte{68, 0, 16}: "Apple, Inc.",
+ [3]byte{68, 0, 73}: "Amazon Technologies 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, 7, 11}: "Google, Inc.",
+ [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, 18}: "Technicolor CH USA Inc.",
+ [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 Company",
+ [3]byte{68, 30, 152}: "Ruckus Wireless",
+ [3]byte{68, 30, 161}: "Hewlett Packard",
+ [3]byte{68, 34, 241}: "S.FAC, INC",
[3]byte{68, 35, 170}: "Farmage Co., Ltd.",
[3]byte{68, 37, 187}: "Bamboo Entertainment Corporation",
+ [3]byte{68, 40, 163}: "Jiangsu fulian Communication Technology Co., Ltd.",
[3]byte{68, 41, 56}: "NietZsche enterprise Co.Ltd.",
- [3]byte{68, 42, 96}: "Apple",
+ [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, 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 USA Inc.",
+ [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, 52, 167}: "ARRIS Group, Inc.",
+ [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, 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, 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, 71, 204}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
[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, 76, 12}: "Apple",
+ [3]byte{68, 74, 176}: "Zhejiang Moorgen Intelligence Technology Co., Ltd",
+ [3]byte{68, 75, 93}: "GE Healthcare",
+ [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, 101, 127}: "Calix Inc.",
[3]byte{68, 102, 110}: "IP-LINE",
+ [3]byte{68, 102, 252}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
[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 Elec Co.,Ltd",
+ [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, 116, 108}: "Sony Mobile Communications AB",
+ [3]byte{68, 115, 214}: "Logitech",
+ [3]byte{68, 116, 108}: "Sony Mobile Communications Inc",
+ [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, 252}: "ELITEGROUP COMPUTER SYSTEM CO., LTD.",
+ [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 INC.,",
+ [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, 164, 45}: "TCT Mobile Limited",
+ [3]byte{68, 158, 249}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{68, 159, 127}: "DataCore Software Corporation",
+ [3]byte{68, 164, 45}: "TCT mobile ltd",
+ [3]byte{68, 164, 102}: "GROUPE LDLC",
[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, 173, 217}: "Cisco",
+ [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, 224}: "Sony Mobile Communications AB",
+ [3]byte{68, 211, 173}: "Shenzhen TINNO Mobile Technology Corp.",
+ [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 Inc",
+ [3]byte{68, 213, 165}: "AddOn Computer",
[3]byte{68, 214, 61}: "Talari Networks",
- [3]byte{68, 216, 50}: "Azurewave Technologies, Inc.",
- [3]byte{68, 216, 132}: "Apple",
+ [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, 228, 217}: "Cisco Systems, Inc",
+ [3]byte{68, 228, 238}: "Wistron Neweb Corporation",
+ [3]byte{68, 230, 110}: "Apple, 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, 236, 206}: "Juniper Networks",
[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, 244, 89}: "Samsung Electronics",
+ [3]byte{68, 239, 207}: "UGENE SOLUTION inc.",
+ [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",
+ [3]byte{68, 251, 66}: "Apple, Inc.",
+ [3]byte{68, 253, 163}: "Everysight LTD.",
+ [3]byte{68, 255, 186}: "zte corporation",
+ [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, 12, 73}: "NAKAYO TELECOMMUNICATIONS,INC",
+ [3]byte{72, 6, 106}: "Tempered Networks, Inc.",
+ [3]byte{72, 11, 178}: "IEEE Registration Authority",
+ [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, 243}: "BBK Electronics Corp., Ltd.",
+ [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, 24, 250}: "Nocsys",
[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, 40, 47}: "ZTE Corporation",
+ [3]byte{72, 39, 234}: "Samsung Electronics Co.,Ltd",
+ [3]byte{72, 40, 47}: "zte corporation",
+ [3]byte{72, 42, 227}: "Wistron InfoComm(Kunshan)Co.,Ltd.",
+ [3]byte{72, 44, 160}: "Xiaomi Communications Co Ltd",
[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, 53, 46}: "Shenzhen Wolck Network Product Co.,LTD",
+ [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, 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, 74, 233}: "Hewlett Packard Enterprise",
+ [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, 87, 221}: "Facebook",
- [3]byte{72, 89, 41}: "LG Electronics",
+ [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, 2}: "HUAWEI 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, 96}: "Azurewave Technologies, Inc.",
- [3]byte{72, 96, 188}: "Apple",
- [3]byte{72, 97, 163}: "Concern \"Axion\" JSC",
+ [3]byte{72, 93, 54}: "Verizon",
+ [3]byte{72, 93, 96}: "AzureWave Technology Inc.",
+ [3]byte{72, 95, 153}: "Cloud Network Technology (Samoa) Limited",
+ [3]byte{72, 96, 95}: "LG Electronics (Mobile Communications)",
+ [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, 107, 44}: "BBK Electronics Corp., Ltd.,",
+ [3]byte{72, 101, 238}: "IEEE Registration Authority",
+ [3]byte{72, 104, 52}: "Silicon Motion, Inc.",
+ [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",
- [3]byte{72, 118, 4}: "PRIVATE",
+ [3]byte{72, 116, 110}: "Apple, Inc.",
+ [3]byte{72, 117, 131}: "Intellion AG",
+ [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, 135, 45}: "SHEN ZHEN DA XIA LONG QUE TECHNOLOGY CO.,LTD",
+ [3]byte{72, 136, 3}: "ManTechnology Inc.",
+ [3]byte{72, 136, 30}: "EthoSwitch LLC",
+ [3]byte{72, 136, 202}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.",
+ [3]byte{72, 138, 210}: "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, 152, 202}: "Sichuan\u00a0AI-Link\u00a0Technology\u00a0Co.,\u00a0Ltd.",
+ [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}: "Research In Motion",
+ [3]byte{72, 157, 36}: "BlackBerry RTS",
+ [3]byte{72, 160, 248}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [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, 164, 114}: "Intel Corporate",
+ [3]byte{72, 164, 147}: "TAIYO YUDEN CO.,LTD",
+ [3]byte{72, 166, 184}: "Sonos, Inc.",
[3]byte{72, 166, 210}: "GJsun Optical Science and Tech Co.,Ltd.",
+ [3]byte{72, 167, 78}: "zte corporation",
+ [3]byte{72, 169, 28}: "Apple, Inc.",
+ [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, 189, 61}: "New H3C Technologies 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, 199, 150}: "Samsung Electronics Co.,Ltd",
[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, 215, 5}: "Apple",
+ [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, 221, 157}: "ITEL MOBILE LIMITED",
[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, 230, 149}: "Insigma Inc",
+ [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, 39}: "Chengdu newifi 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, 243, 23}: "Private",
[3]byte{72, 244, 125}: "TechVision Holding Internation Limited",
- [3]byte{72, 247, 241}: "Alcatel-Lucent",
+ [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}: "Alcatel Lucent WT",
+ [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",
+ [3]byte{76, 0, 130}: "Cisco Systems, Inc",
+ [3]byte{76, 1, 67}: "eero 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, 11, 58}: "TCT Mobile Limited",
+ [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, 15, 199}: "Earda Technologies co Ltd",
+ [3]byte{76, 17, 89}: "Vision Information & Communications",
+ [3]byte{76, 17, 191}: "Zhejiang Dahua Technology Co., Ltd.",
+ [3]byte{76, 18, 101}: "ARRIS Group, Inc.",
+ [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, 23, 235}: "SAGEMCOM",
+ [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, 27, 134}: "Arcadyan Corporation",
[3]byte{76, 31, 204}: "HUAWEI TECHNOLOGIES CO.,LTD",
- [3]byte{76, 33, 208}: "Sony Mobile Communications AB",
+ [3]byte{76, 33, 208}: "Sony Mobile Communications Inc",
[3]byte{76, 34, 88}: "cozybit, Inc.",
[3]byte{76, 37, 120}: "Nokia Corporation",
[3]byte{76, 38, 231}: "Welgate Co., Ltd.",
@@ -14843,19 +16602,31 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 54, 78}: "Panasonic Corporation Connected Solutions Company",
+ [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, 63, 211}: "Texas Instruments",
[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, 53}: "Cisco",
+ [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}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [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}: "ACKme Networks Pty Ltd",
+ [3]byte{76, 85, 204}: "Zentri Pty Ltd",
+ [3]byte{76, 86, 157}: "Apple, Inc.",
+ [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",
@@ -14864,294 +16635,554 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 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}: "Mundo Reader (bq)",
+ [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, 119, 109}: "Cisco Systems, Inc",
+ [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, 130, 207}: "Echostar Technologies",
+ [3]byte{76, 129, 32}: "Taicang T&W Electronics",
+ [3]byte{76, 130, 207}: "Dish 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",
+ [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 Corp",
+ [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, 171, 252}: "zte corporation",
+ [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",
+ [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, 192, 10}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{76, 194, 6}: "Somfy",
[3]byte{76, 196, 82}: "Shang Hai Tyd. Electon Technology Ltd.",
[3]byte{76, 198, 2}: "Radios, Inc.",
- [3]byte{76, 201, 79}: "Alcatel-Lucent",
+ [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, 208, 203}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{76, 209, 161}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{76, 214, 55}: "Qsono Electronics Co., Ltd",
[3]byte{76, 215, 182}: "Helmer Scientific",
+ [3]byte{76, 217, 143}: "Dell Inc.",
[3]byte{76, 217, 196}: "Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd",
+ [3]byte{76, 221, 49}: "Samsung Electronics 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, 229, 174}: "Tianjin Beebox Intelligent Technology Co.,Ltd.",
+ [3]byte{76, 230, 118}: "BUFFALO.INC",
[3]byte{76, 233, 51}: "RailComm, LLC",
[3]byte{76, 235, 66}: "Intel Corporate",
- [3]byte{76, 237, 222}: "Askey Computer Corp",
+ [3]byte{76, 236, 239}: "Soraa, Inc.",
+ [3]byte{76, 237, 222}: "ASKEY COMPUTER CORP",
+ [3]byte{76, 237, 251}: "ASUSTek COMPUTER INC.",
+ [3]byte{76, 238, 176}: "SHC Netzwerktechnik GmbH",
+ [3]byte{76, 239, 192}: "Amazon Technologies Inc.",
[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, 187}: "Samsung Electronics",
+ [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",
+ [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, 121}: "iRobot Corporation",
[3]byte{80, 20, 181}: "Richfit Information Technology Co., Ltd",
- [3]byte{80, 23, 255}: "Cisco",
+ [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",
+ [3]byte{80, 28, 176}: "Cisco Systems, Inc",
+ [3]byte{80, 28, 191}: "Cisco Systems, Inc",
+ [3]byte{80, 29, 147}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 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, 41, 245}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,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, 47, 168}: "Cisco Systems, Inc",
+ [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, 61, 229}: "CISCO SYSTEMS, INC.",
+ [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 INC.,",
+ [3]byte{80, 74, 110}: "NETGEAR",
+ [3]byte{80, 75, 91}: "CONTROLtronic GmbH",
+ [3]byte{80, 76, 126}: "THE 41ST INSTITUTE OF CETC",
+ [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, 80, 206}: "Hangzhou Dianyixia Communication Technology Co. Ltd.",
+ [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, 86, 191}: "Samsung Electronics Co.,Ltd",
+ [3]byte{80, 87, 156}: "Seiko Epson Corporation",
+ [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, 89, 103}: "Intent Solutions Inc",
[3]byte{80, 90, 198}: "GUANGDONG SUPER TELECOM CO.,LTD.",
+ [3]byte{80, 91, 194}: "Liteon Technology Corporation",
+ [3]byte{80, 93, 172}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{80, 96, 40}: "Xirrus Inc.",
- [3]byte{80, 97, 132}: "Avaya, Inc",
+ [3]byte{80, 97, 132}: "Avaya Inc",
+ [3]byte{80, 97, 191}: "Cisco Systems, 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, 103, 135}: "iTellus",
- [3]byte{80, 103, 174}: "Cisco",
- [3]byte{80, 103, 240}: "ZyXEL Communications Corporation",
+ [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, 75}: "Mellanox Technologies, Inc.",
+ [3]byte{80, 107, 141}: "Nutanix",
+ [3]byte{80, 108, 190}: "InnosiliconTechnology Ltd",
+ [3]byte{80, 110, 146}: "Innocent Technology Co., Ltd.",
+ [3]byte{80, 111, 119}: "HUAWEI TECHNOLOGIES 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, 118, 175}: "Intel Corporate",
+ [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, 133, 105}: "Samsung Electronics Co.,LTD",
- [3]byte{80, 135, 137}: "Cisco",
+ [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, 140, 245}: "China Mobile Group Device Co.,Ltd.",
[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, 149, 81}: "ARRIS Group, Inc.",
[3]byte{80, 151, 114}: "Westinghouse Digital",
[3]byte{80, 152, 113}: "Inventum Technologies Private Limited",
- [3]byte{80, 159, 39}: "Huawei Technologies Co., Ltd",
+ [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, 9}: "Xiaomi Communications Co Ltd",
[3]byte{80, 160, 84}: "Actineon",
+ [3]byte{80, 160, 164}: "Nokia",
[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, 127}: "Apple, Inc.",
[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, 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, 188, 150}: "Apple, Inc.",
[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 Electronics AS",
- [3]byte{80, 204, 248}: "Samsung Electro Mechanics",
+ [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 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, 219, 63}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{80, 220, 231}: "Amazon Technologies Inc.",
+ [3]byte{80, 220, 252}: "ECOCOM",
+ [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, 224, 239}: "Nokia",
+ [3]byte{80, 225, 74}: "Private",
[3]byte{80, 229, 73}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
- [3]byte{80, 234, 214}: "Apple",
+ [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, 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, 6, 139}: "Ningbo Deli Kebei Technology Co.LTD",
+ [3]byte{84, 9, 85}: "zte corporation",
[3]byte{84, 9, 141}: "deister electronic GmbH",
+ [3]byte{84, 16, 49}: "SMARTO",
+ [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, 38, 150}: "Apple",
- [3]byte{84, 39, 30}: "AzureWave Technonloies, Inc.",
+ [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, 39, 141}: "NXP (China) Management Ltd.",
[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, 62, 100}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [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, 74, 0}: "Cisco",
+ [3]byte{84, 72, 16}: "Dell Inc.",
+ [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, 114, 79}: "Apple",
+ [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, 106, 216}: "Elster Water Metering",
+ [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, 208}: "CISCO SYSTEMS, INC.",
- [3]byte{84, 120, 26}: "Cisco",
+ [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, 127, 238}: "Cisco Systems, Inc",
+ [3]byte{84, 128, 40}: "Hewlett Packard Enterprise",
+ [3]byte{84, 129, 45}: "PAX Computer Technology(Shenzhen) Ltd.",
[3]byte{84, 129, 173}: "Eagle Research Corporation",
+ [3]byte{84, 131, 58}: "Zyxel Communications Corporation",
[3]byte{84, 132, 123}: "Digital Devices GmbH",
- [3]byte{84, 136, 14}: "Samsung Electro Mechanics co., LTD.",
+ [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, 153, 99}: "Apple, Inc.",
+ [3]byte{84, 154, 17}: "IEEE Registration Authority",
[3]byte{84, 154, 22}: "Uzushio Electric Co.,Ltd.",
- [3]byte{84, 155, 18}: "Samsung Electronics",
+ [3]byte{84, 154, 76}: "GUANGDONG HOMECARE TECHNOLOGY CO.,LTD.",
+ [3]byte{84, 155, 18}: "Samsung Electronics Co.,Ltd",
+ [3]byte{84, 155, 114}: "Ericsson AB",
[3]byte{84, 157, 133}: "EnerAccess inc",
+ [3]byte{84, 159, 19}: "Apple, Inc.",
[3]byte{84, 159, 53}: "Dell Inc.",
+ [3]byte{84, 159, 174}: "iBASE Gaming 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, 165, 27}: "Shenzhen Huawei Communication Technologies 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, 166, 92}: "Technicolor CH USA Inc.",
[3]byte{84, 169, 212}: "Minibar Systems",
- [3]byte{84, 174, 39}: "Apple",
+ [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, 178, 3}: "PEGATRON CORPORATION",
+ [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, 183, 229}: "Rayson Technology Co., Ltd.",
+ [3]byte{84, 184, 2}: "Samsung Electronics 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, 191, 100}: "Dell Inc.",
+ [3]byte{84, 195, 62}: "Ciena 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, 226, 224}: "Pace plc",
+ [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, 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, 62}: "Samsung Electronics Co.,Ltd",
+ [3]byte{84, 250, 150}: "Nokia",
[3]byte{84, 251, 88}: "WISEWARE, Lda",
+ [3]byte{84, 252, 240}: "Samsung Electronics Co.,Ltd",
[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, 3, 251}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [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, 67}: "Private",
[3]byte{88, 9, 229}: "Kivic Inc.",
- [3]byte{88, 10, 32}: "Cisco",
+ [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 Ericsson Mobile Communications AB",
+ [3]byte{88, 22, 38}: "Avaya Inc",
+ [3]byte{88, 23, 12}: "Sony Mobile Communications Inc",
+ [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",
+ [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",
+ [3]byte{88, 33, 233}: "TWPI",
+ [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, 45, 52}: "Qingping Electronics (Suzhou) Co., Ltd",
[3]byte{88, 46, 254}: "Lighting Science Group",
+ [3]byte{88, 47, 64}: "Nintendo Co.,Ltd",
[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, 53, 217}: "Cisco Systems, Inc",
+ [3]byte{88, 56, 121}: "RICOH COMPANY, LTD.",
+ [3]byte{88, 59, 217}: "Fiberhome Telecommunication Technologies Co.,LTD",
[3]byte{88, 60, 198}: "Omneality Ltd.",
- [3]byte{88, 66, 228}: "Sigma International General Medical Apparatus, LLC.",
+ [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 Healthcare",
+ [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 Inc",
[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",
@@ -15159,78 +17190,139 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 85, 202}: "Apple",
+ [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, 95, 246}: "zte corporation",
+ [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.COM",
+ [3]byte{88, 103, 26}: "Barnes&Noble",
[3]byte{88, 103, 127}: "Clare Controls Inc.",
- [3]byte{88, 105, 108}: "Fujian Ruijie Networks co, ltd",
+ [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, 107, 20}: "Apple, Inc.",
[3]byte{88, 109, 143}: "Cisco-Linksys, LLC",
- [3]byte{88, 110, 214}: "PRIVATE",
+ [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, 122, 106}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
[3]byte{88, 123, 233}: "AirPro Technology India Pvt. Ltd",
- [3]byte{88, 126, 97}: "Hisense Electric Co., 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, 141, 9}: "CISCO SYSTEMS, INC.",
+ [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",
+ [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, 162, 181}: "LG Electronics",
+ [3]byte{88, 158, 198}: "Gigaset Communications GmbH",
+ [3]byte{88, 160, 203}: "TrackNet, Inc",
+ [3]byte{88, 162, 181}: "LG Electronics (Mobile Communications)",
+ [3]byte{88, 164, 142}: "PixArt Imaging Inc.",
[3]byte{88, 167, 111}: "iD corporation",
- [3]byte{88, 176, 53}: "Apple",
+ [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, 177, 15}: "Samsung Electronics Co.,Ltd",
+ [3]byte{88, 179, 252}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+ [3]byte{88, 180, 45}: "YSTen Technology Co.,Ltd",
+ [3]byte{88, 181, 104}: "SECURITAS DIRECT ESPAÑA, SAU",
+ [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, 186, 212}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 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",
+ [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, 200, 118}: "China Mobile (Hangzhou) Information Technology 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, 213, 110}: "D-Link International",
+ [3]byte{88, 214, 122}: "TCPlink",
[3]byte{88, 214, 211}: "Dairy Cheq Inc",
+ [3]byte{88, 215, 89}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{88, 217, 213}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{88, 219, 21}: "TECNO MOBILE LIMITED",
[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, 230, 186}: "Apple, Inc.",
[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",
+ [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, 135}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{88, 249, 142}: "SECUDOS GmbH",
- [3]byte{88, 252, 219}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
+ [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{88, 253, 190}: "Shenzhen Taikaida Technology Co., Ltd",
+ [3]byte{92, 0, 56}: "Viasat Group S.p.A.",
[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, 10, 91}: "SAMSUNG ELECTRO-MECHANICS CO., LTD.",
+ [3]byte{92, 9, 71}: "Apple, Inc.",
+ [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}: "Motorola",
+ [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",
@@ -15239,253 +17331,429 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 29, 217}: "Apple, Inc.",
[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, 38, 35}: "WaveLynx Technologies Corporation",
[3]byte{92, 42, 239}: "Open Access Pty Ltd",
- [3]byte{92, 43, 245}: "Vivint",
+ [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 Networkc Inc.",
- [3]byte{92, 53, 59}: "Compal Broadband Networks Inc.",
+ [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) Ltd.",
+ [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}: "Shenzhen Huawei Communication Technologies Co., Ltd",
- [3]byte{92, 80, 21}: "CISCO SYSTEMS, INC.",
+ [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, 89, 72}: "Apple",
+ [3]byte{92, 88, 25}: "Jingsheng Technology Co., Ltd.",
+ [3]byte{92, 89, 72}: "Apple, Inc.",
+ [3]byte{92, 90, 234}: "FORD",
+ [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, 99, 191}: "TP-LINK TECHNOLOGIES CO., LTD.",
+ [3]byte{92, 95, 103}: "Intel Corporate",
+ [3]byte{92, 99, 191}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{92, 99, 201}: "Intellithings 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, 125, 94}: "Huawei Technologies Co., Ltd",
+ [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, 141, 78}: "Apple",
+ [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",
+ [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",
- [3]byte{92, 151, 243}: "Apple",
- [3]byte{92, 154, 216}: "Fujitsu Limited",
- [3]byte{92, 163, 157}: "SAMSUNG ELECTRO-MECHANICS CO., LTD.",
+ [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",
+ [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, 181, 36}: "Sony Ericsson Mobile Communications AB",
+ [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, 179, 246}: "Human, Incorporated",
+ [3]byte{92, 180, 62}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{92, 181, 36}: "Sony Mobile Communications Inc",
+ [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, 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, 153}: "New H3C Technologies Co., Ltd",
[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, 203, 202}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD",
+ [3]byte{92, 204, 160}: "Gridwiz Inc.",
+ [3]byte{92, 204, 255}: "Techroutes Network Pvt Ltd",
+ [3]byte{92, 205, 124}: "MEIZU Technology Co.,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, 11}: "Yytek Co., Ltd.",
[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, 235}: "Samsung Electronics",
+ [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 Corp",
+ [3]byte{92, 244, 171}: "Zyxel Communications Corporation",
[3]byte{92, 245, 13}: "Institute of microelectronic applications",
- [3]byte{92, 246, 220}: "Samsung Electronics Co.,LTD",
- [3]byte{92, 248, 161}: "Murata Manufactuaring 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, 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, 251, 124}: "Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd",
+ [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 Corp.",
- [3]byte{96, 3, 8}: "Apple",
+ [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, 5, 138}: "Hitachi Metals, 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}: "Soluciones Tecnologicas para la Salud y el Bienestar SA",
+ [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, 29, 145}: "Motorola Mobility LLC, a Lenovo Company",
[3]byte{96, 30, 2}: "EltexAlatau",
- [3]byte{96, 33, 3}: "STCUBE.INC",
- [3]byte{96, 33, 192}: "Murata Manufactuaring Co.,Ltd.",
+ [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, 48, 212}: "Apple, Inc.",
+ [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",
+ [3]byte{96, 51, 75}: "Apple, Inc.",
[3]byte{96, 53, 83}: "Buwon Technology",
+ [3]byte{96, 53, 192}: "SFR",
[3]byte{96, 54, 150}: "The Sapling Company",
[3]byte{96, 54, 221}: "Intel Corporate",
- [3]byte{96, 56, 14}: "Alps Electric Co.,",
+ [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}: "Magic Leap, Inc.",
[3]byte{96, 80, 193}: "Kinetek Sports",
- [3]byte{96, 81, 44}: "TCT mobile limited",
+ [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, 95, 141}: "eero 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, 68}: "Apple, Inc.",
[3]byte{96, 105, 155}: "isepos GmbH",
- [3]byte{96, 107, 189}: "Samsung Electronics Co., LTD",
+ [3]byte{96, 107, 189}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 107, 255}: "Nintendo Co.,Ltd",
[3]byte{96, 108, 102}: "Intel Corporate",
- [3]byte{96, 115, 92}: "Cisco",
+ [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, 132, 189}: "BUFFALO.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, 74}: "Apple, Inc.",
+ [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, 146, 23}: "Apple",
- [3]byte{96, 150, 32}: "PRIVATE",
+ [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, 151, 221}: "MicroSys Electronics GmbH",
+ [3]byte{96, 152, 19}: "Shanghai Visking Digital Technology Co. LTD",
[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, 168, 254}: "Nokia Solutions and Networks",
+ [3]byte{96, 164, 208}: "Samsung Electronics Co.,Ltd",
+ [3]byte{96, 167, 48}: "Shenzhen Yipinfang Internet Technology 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 Tech.Co.,Ltd.",
+ [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",
+ [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",
+ [3]byte{96, 197, 71}: "Apple, Inc.",
[3]byte{96, 197, 168}: "Beijing LT Honway Technology Co.,Ltd",
- [3]byte{96, 199, 152}: "Verifone, Inc.",
+ [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, 206, 146}: "The Refined Industry Company Limited",
+ [3]byte{96, 208, 44}: "Ruckus Wireless",
[3]byte{96, 208, 169}: "Samsung Electronics Co.,Ltd",
[3]byte{96, 209, 170}: "Vishal Telecommunications Pvt Ltd",
+ [3]byte{96, 210, 28}: "Sunnovo International Limited",
+ [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, 199}: "Apple",
+ [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, 222, 243}: "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, 231, 1}: "Huawei 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, 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, 241, 138}: "HUAWEI TECHNOLOGIES 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, 250, 205}: "Apple",
- [3]byte{96, 251, 66}: "Apple",
+ [3]byte{96, 246, 119}: "Intel Corporate",
+ [3]byte{96, 248, 29}: "Apple, Inc.",
+ [3]byte{96, 250, 157}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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}: "2 Wire",
- [3]byte{96, 254, 197}: "Apple",
+ [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, 241}: "CISCO SYSTEMS, INC.",
+ [3]byte{100, 0, 106}: "Dell Inc.",
+ [3]byte{100, 0, 241}: "Cisco Systems, Inc",
+ [3]byte{100, 2, 203}: "ARRIS Group, 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 Electronics,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",
+ [3]byte{100, 15, 40}: "2Wire Inc",
[3]byte{100, 16, 132}: "HEXIUM Technical Development Co., Ltd.",
- [3]byte{100, 18, 37}: "Cisco",
- [3]byte{100, 22, 141}: "CISCO SYSTEMS, INC.",
- [3]byte{100, 22, 240}: "Shehzhen Huawei Communication Technologies Co., Ltd.",
- [3]byte{100, 26, 34}: "Heliospectra/Woodhill Investments",
+ [3]byte{100, 18, 37}: "Cisco Systems, Inc",
+ [3]byte{100, 18, 105}: "ARRIS Group, Inc.",
+ [3]byte{100, 19, 49}: "Bosch Car Multimedia (Wuhu) Co. Ltd.",
+ [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, 28, 174}: "Samsung Electronics Co.,Ltd",
+ [3]byte{100, 28, 176}: "Samsung Electronics Co.,Ltd",
[3]byte{100, 30, 129}: "Dowslake Microsystems",
- [3]byte{100, 32, 12}: "Apple",
+ [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 Company",
+ [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, 66}: "JETTER CO., Ltd.",
[3]byte{100, 79, 116}: "LENUS Co., Ltd.",
[3]byte{100, 79, 176}: "Hyunjin.com",
[3]byte{100, 81, 6}: "Hewlett Packard",
@@ -15496,104 +17764,155 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 86, 1}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{100, 88, 173}: "China Mobile IOT Company Limited",
+ [3]byte{100, 89, 248}: "Vodafone Omnitel B.V.",
[3]byte{100, 90, 4}: "Chicony Electronics Co., Ltd.",
+ [3]byte{100, 90, 237}: "Apple, Inc.",
+ [3]byte{100, 93, 134}: "Intel Corporate",
+ [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, 98, 138}: "evon GmbH",
+ [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, 102, 179}: "TP-LINK TECHNOLOGIES CO.,LTD.",
[3]byte{100, 103, 7}: "Beijing Omnific Technology, Ltd.",
- [3]byte{100, 104, 12}: "COMTREND",
+ [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, 109, 108}: "HUAWEI TECHNOLOGIES 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, 112, 2}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{100, 112, 51}: "Apple, Inc.",
[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",
+ [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, 206}: "Samsung Electronics Co.,Ltd",
[3]byte{100, 123, 212}: "Texas Instruments",
- [3]byte{100, 124, 52}: "Ubee Interactive Corp.",
+ [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}: "Pirelli Tyre S.p.A.",
+ [3]byte{100, 135, 215}: "ADB Broadband Italia",
[3]byte{100, 136, 255}: "Sichuan Changhong Electric Ltd.",
- [3]byte{100, 137, 154}: "LG Electronics",
+ [3]byte{100, 137, 154}: "LG Electronics (Mobile Communications)",
[3]byte{100, 141, 158}: "IVT Electronic Co.,Ltd",
+ [3]byte{100, 152, 41}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
[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 iSkoot, Inc.",
+ [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, 158, 243}: "Cisco Systems, Inc",
[3]byte{100, 159, 247}: "Kone OYj",
- [3]byte{100, 160, 231}: "CISCO SYSTEMS, INC.",
+ [3]byte{100, 160, 231}: "Cisco Systems, Inc",
[3]byte{100, 162, 50}: "OOO Samlight",
+ [3]byte{100, 162, 249}: "OnePlus Technology (Shenzhen) Co., Ltd",
[3]byte{100, 163, 65}: "Wonderlan (Beijing) Technology Co., Ltd.",
- [3]byte{100, 163, 203}: "Apple",
+ [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, 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, 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 Solutons LLC",
- [3]byte{100, 180, 115}: "Xiaomi inc.",
+ [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 Elec Co.,Ltd",
- [3]byte{100, 185, 232}: "Apple",
+ [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, 195, 214}: "Juniper Networks",
[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, 199, 83}: "Apple, Inc.",
[3]byte{100, 201, 68}: "LARK Technologies, Inc",
+ [3]byte{100, 203, 93}: "SIA TeleSet",
+ [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, 216, 20}: "Cisco Systems, Inc",
[3]byte{100, 217, 18}: "Solidica, Inc.",
- [3]byte{100, 217, 84}: "TAICANG AND W ELECTRONICS CO LTD",
- [3]byte{100, 217, 137}: "CISCO SYSTEMS, 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, 139}: "Hangzhou Hikvision Digital Technology 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",
+ [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",
+ [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, 238, 183}: "Netcore Technology Inc",
[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, 28}: "Huawei Technologies Co., Ltd.",
+ [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, 9, 39}: "Apple",
+ [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, 21, 144}: "SAGEMCOM SAS",
+ [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",
@@ -15601,34 +17920,60 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 216}: "Advanced Telemetry",
+ [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, 41, 220}: "Ficosa Electronics S.L.U.",
+ [3]byte{104, 44, 123}: "Cisco Systems, 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, 58, 30}: "Cisco Meraki",
[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, 67, 215}: "Agilecom Photonics Solutions Guangdong Limited",
+ [3]byte{104, 69, 241}: "TOSHIBA CLIENT SOLUTIONS CO., LTD.",
+ [3]byte{104, 71, 73}: "Texas Instruments",
[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, 84, 237}: "Alcatel-Lucent - Nuage",
+ [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, 87, 45}: "HANGZHOU AIXIANGJI TECHNOLOGY CO., LTD",
+ [3]byte{104, 88, 197}: "ZF TRW Automotive",
[3]byte{104, 89, 127}: "Alcatel Lucent",
- [3]byte{104, 91, 53}: "Apple",
+ [3]byte{104, 90, 207}: "Samsung Electronics Co.,Ltd",
+ [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",
+ [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, 118, 79}: "Sony Mobile Communications Inc",
[3]byte{104, 120, 72}: "Westunitis Co., Ltd.",
[3]byte{104, 120, 76}: "Nortel Networks",
[3]byte{104, 121, 36}: "ELS-GmbH & Co. KG",
@@ -15640,109 +17985,187 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 117}: "nuoxc",
+ [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, 46}: "Hitron Technologies. 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",
+ [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",
+ [3]byte{104, 152, 97}: "Beacon Inc",
+ [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",
- [3]byte{104, 160, 246}: "Huawei Technologies Co., Ltd",
+ [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 Bosch and Siemens Home Appliances GmbH",
- [3]byte{104, 168, 109}: "Apple",
+ [3]byte{104, 164, 14}: "BSH Hausgeräte GmbH",
+ [3]byte{104, 164, 125}: "Sun Cupid Technology (HK) LTD",
+ [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, 168, 225}: "Wacom Co.,Ltd.",
[3]byte{104, 170, 210}: "DATECS LTD.,",
+ [3]byte{104, 171, 30}: "Apple, Inc.",
[3]byte{104, 171, 138}: "RF IDeas",
- [3]byte{104, 174, 32}: "Apple",
+ [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 Company",
+ [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, 188, 12}: "CISCO SYSTEMS, INC.",
- [3]byte{104, 189, 171}: "CISCO SYSTEMS, 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, 202, 228}: "Cisco Systems, Inc",
+ [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, 186}: "Shenzhen YOUHUA Technology Co., Ltd",
[3]byte{104, 209, 253}: "Shenzhen Trimax Technology Co.,Ltd",
[3]byte{104, 210, 71}: "Portalis LC",
+ [3]byte{104, 212, 130}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
[3]byte{104, 217, 37}: "ProSys Development Services",
- [3]byte{104, 217, 60}: "Apple",
+ [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 inc.",
- [3]byte{104, 225, 102}: "PRIVATE",
+ [3]byte{104, 221, 38}: "Shanghai Focus Vision Security Technology Co.,Ltd",
+ [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, 231, 194}: "Samsung Electronics Co.,Ltd",
+ [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, 237, 67}: "Research In Motion",
+ [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, 239, 67}: "Apple, Inc.",
+ [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{104, 254, 218}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{104, 254, 247}: "Apple, Inc.",
+ [3]byte{108, 0, 107}: "Samsung Electronics Co.,Ltd",
[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 Ericsson Mobile Communications AB",
+ [3]byte{108, 11, 132}: "Universal Global Scientific Industrial Co., Ltd.",
+ [3]byte{108, 14, 13}: "Sony Mobile Communications Inc",
+ [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, 32, 86}: "Cisco",
+ [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, 33, 162}: "AMPAK Technology, Inc.",
[3]byte{108, 34, 171}: "Ainsworth Game Technology",
- [3]byte{108, 35, 185}: "Sony Ericsson Mobile Communications AB",
- [3]byte{108, 37, 185}: "BBK Electronics Corp., Ltd.,",
+ [3]byte{108, 35, 185}: "Sony Mobile Communications Inc",
+ [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, 43, 89}: "Dell Inc.",
[3]byte{108, 44, 6}: "OOO NPP Systemotechnika-NN",
+ [3]byte{108, 44, 220}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
[3]byte{108, 46, 51}: "Accelink Technologies Co.,Ltd.",
- [3]byte{108, 46, 133}: "SAGEMCOM",
+ [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, 56}: "Marking System Technology Co., Ltd.",
+ [3]byte{108, 56, 69}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [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",
+ [3]byte{108, 62, 109}: "Apple, Inc.",
[3]byte{108, 62, 156}: "KE Knestel Elektronik GmbH",
- [3]byte{108, 64, 8}: "Apple",
+ [3]byte{108, 64, 8}: "Apple, Inc.",
[3]byte{108, 64, 198}: "Nimbus Data Systems, Inc.",
- [3]byte{108, 65, 106}: "Cisco",
+ [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, 80, 77}: "CISCO SYSTEMS, INC.",
+ [3]byte{108, 75, 144}: "LiteON",
+ [3]byte{108, 77, 115}: "Apple, Inc.",
+ [3]byte{108, 78, 134}: "Third Millennium Systems Ltd.",
+ [3]byte{108, 80, 77}: "Cisco Systems, Inc",
+ [3]byte{108, 84, 205}: "LAMPEX ELECTRONICS LIMITED",
+ [3]byte{108, 86, 151}: "Amazon Technologies Inc.",
[3]byte{108, 87, 121}: "Aclima, Inc.",
+ [3]byte{108, 89, 64}: "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, 61}: "IEEE Registration Authority",
[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, 108, 211}: "Cisco Systems, Inc",
[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",
- [3]byte{108, 113, 217}: "AzureWave Technologies, Inc",
- [3]byte{108, 118, 96}: "KYOCERA Corporation",
+ [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.",
@@ -15751,885 +18174,1630 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 148, 248}: "Apple",
- [3]byte{108, 152, 235}: "Ocedo GmbH",
- [3]byte{108, 153, 137}: "Cisco",
+ [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, 155, 192}: "Chemoptics Inc.",
[3]byte{108, 156, 233}: "Nimble Storage",
- [3]byte{108, 156, 237}: "CISCO SYSTEMS, INC.",
+ [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, 40}: "HMD Global Oy",
[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 Technologies, Inc.",
+ [3]byte{108, 173, 248}: "AzureWave Technology Inc.",
[3]byte{108, 174, 139}: "IBM Corporation",
+ [3]byte{108, 175, 21}: "Webasto SE",
[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, 182, 202}: "DIVUS GmbH",
+ [3]byte{108, 183, 73}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{108, 183, 244}: "Samsung Electronics Co.,Ltd",
- [3]byte{108, 190, 233}: "Alcatel-Lucent-IPD",
+ [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",
+ [3]byte{108, 194, 107}: "Apple, Inc.",
+ [3]byte{108, 195, 116}: "Texas Instruments",
+ [3]byte{108, 196, 213}: "HMD Global Oy",
+ [3]byte{108, 199, 236}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [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 Inc",
+ [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, 223, 251}: "IEEE Registration Authority",
+ [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, 228, 218}: "NEC Platforms, Ltd.",
+ [3]byte{108, 232, 92}: "Apple, Inc.",
+ [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, 237, 81}: "NEXCONTROL Co.,Ltd",
+ [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, 250, 88}: "Avaya, Inc",
- [3]byte{108, 250, 137}: "Cisco",
- [3]byte{108, 250, 167}: "AMPAK Technology Inc.",
+ [3]byte{108, 249, 210}: "CHENGDU POVODO ELECTRONIC TECHNOLOGY CO., LTD",
+ [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, 1, 181}: "Cisco Systems, Inc",
[3]byte{112, 2, 88}: "01DB-METRAVIB",
- [3]byte{112, 5, 20}: "LG Electronics",
+ [3]byte{112, 3, 126}: "Technicolor CH USA Inc.",
+ [3]byte{112, 5, 20}: "LG Electronics (Mobile Communications)",
+ [3]byte{112, 6, 172}: "Eastcompeace Technology Co., Ltd",
+ [3]byte{112, 11, 1}: "Sagemcom Broadband SAS",
+ [3]byte{112, 11, 79}: "Cisco Systems, Inc",
[3]byte{112, 11, 192}: "Dewav Technology Company",
+ [3]byte{112, 15, 106}: "Cisco Systems, Inc",
[3]byte{112, 15, 199}: "SHENZHEN IKINLOOP TECHNOLOGY CO.,LTD.",
[3]byte{112, 15, 236}: "Poindus Systems Corp.",
- [3]byte{112, 16, 92}: "Cisco",
- [3]byte{112, 17, 36}: "Apple",
+ [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, 22, 159}: "EtherCAT Technology Group",
[3]byte{112, 24, 139}: "Hon Hai Precision Ind. Co.,Ltd.",
- [3]byte{112, 26, 4}: "Liteon Tech Corp.",
+ [3]byte{112, 25, 47}: "HUAWEI TECHNOLOGIES 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, 8}: "99IOT Shenzhen co.,ltd",
[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}: "Alcatel-Lucent",
- [3]byte{112, 37, 89}: "CyberTAN Technology, Inc.",
+ [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, 42, 213}: "Samsung Electronics Co.,Ltd",
[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, 46, 217}: "Guangzhou Shiyuan Electronics Co., Ltd.",
[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, 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, 53, 9}: "Cisco Systems, 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, 56, 238}: "Avaya Inc",
+ [3]byte{112, 58, 14}: "Aruba Networks",
+ [3]byte{112, 58, 81}: "Xiaomi Communications Co Ltd",
+ [3]byte{112, 58, 115}: "Shenzhen Sundray Technologies Company Limited",
+ [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, 62, 172}: "Apple",
+ [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, 82, 197}: "Avaya, Inc.",
+ [3]byte{112, 78, 102}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD",
+ [3]byte{112, 79, 8}: "Shenzhen Huisheng Information Technology Co., Ltd.",
+ [3]byte{112, 79, 87}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{112, 79, 184}: "ARRIS Group, Inc.",
+ [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, 180}: "Vestel Elektronik San ve Tic. A.Ş.",
[3]byte{112, 84, 210}: "PEGATRON CORPORATION",
[3]byte{112, 84, 245}: "HUAWEI TECHNOLOGIES CO.,LTD",
- [3]byte{112, 86, 129}: "Apple",
- [3]byte{112, 88, 18}: "Panasonic AVC Networks Company",
+ [3]byte{112, 85, 248}: "Cerebras Systems Inc",
+ [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, 172}: "Samsung Electronics Co.,Ltd",
[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, 93, 204}: "EFM Networks",
[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, 111, 129}: "PRIVATE",
+ [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, 105, 90}: "Cisco Systems, Inc",
+ [3]byte{112, 107, 185}: "Cisco Systems, Inc",
+ [3]byte{112, 109, 21}: "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, 60}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{112, 114, 207}: "EdgeCore Networks",
- [3]byte{112, 115, 203}: "Apple",
- [3]byte{112, 118, 48}: "Pace plc.",
+ [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, 121, 179}: "Cisco Systems, Inc",
[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, 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, 198}: "Pace plc.",
+ [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, 137, 204}: "China Mobile Group Device 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, 158, 41}: "Sony Computer Entertainment 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, 159, 169}: "TECNO MOBILE LIMITED",
[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}: "Research In Motion",
+ [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}: "Pace plc",
+ [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 - Please see OUI36 public listing for more information.",
+ [3]byte{112, 179, 23}: "Cisco Systems, Inc",
+ [3]byte{112, 179, 213}: "IEEE Registration Authority",
[3]byte{112, 181, 153}: "Embedded Technologies s.r.o.",
- [3]byte{112, 185, 33}: "FiberHome Telecommunication Technologies CO.,LTD",
+ [3]byte{112, 183, 170}: "vivo Mobile Communication Co., Ltd.",
+ [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, 187, 233}: "Xiaomi Communications Co Ltd",
+ [3]byte{112, 191, 62}: "Charles River Laboratories",
[3]byte{112, 198, 172}: "Bosch Automotive Aftermarket",
- [3]byte{112, 202, 155}: "CISCO SYSTEMS, INC.",
- [3]byte{112, 205, 96}: "Apple",
+ [3]byte{112, 199, 111}: "INNO S",
+ [3]byte{112, 200, 51}: "Wirepas Oy",
+ [3]byte{112, 201, 78}: "Liteon Technology Corporation",
+ [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, 208, 129}: "Beijing Netpower Technologies Inc.",
+ [3]byte{112, 211, 19}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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",
+ [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, 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, 239, 0}: "Apple, Inc.",
+ [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, 242, 32}: "Actiontec Electronics, Inc",
+ [3]byte{112, 243, 90}: "Cisco Systems, Inc",
[3]byte{112, 243, 149}: "Universal Global Scientific Industrial Co., Ltd.",
- [3]byte{112, 249, 39}: "Samsung Electronics",
+ [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, 253, 70}: "Samsung Electronics Co.,Ltd",
[3]byte{112, 255, 92}: "Cheerzing Communication(Xiamen)Technology Co.,Ltd",
[3]byte{112, 255, 118}: "Texas Instruments",
- [3]byte{116, 10, 188}: "JSJS Designs (Europe) Limited",
+ [3]byte{116, 3, 189}: "BUFFALO.INC",
+ [3]byte{116, 4, 43}: "Lenovo Mobile Communication (Wuhan) Company Limited",
+ [3]byte{116, 5, 165}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{116, 10, 188}: "LightwaveRF Technology Ltd",
[3]byte{116, 14, 219}: "Optowiz Co., Ltd",
+ [3]byte{116, 18, 187}: "Fiberhome Telecommunication Technologies Co.,LTD",
[3]byte{116, 20, 137}: "SRT Wireless",
[3]byte{116, 21, 226}: "Tri-Sen Systems Corporation",
- [3]byte{116, 25, 248}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
- [3]byte{116, 30, 147}: "Fiberhome Telecommunication Tech.Co.,Ltd.",
+ [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, 31, 121}: "YOUNGKOOK ELECTRONICS CO.,LTD",
+ [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",
+ [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, 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, 43, 98}: "FUJITSU LIMITED",
[3]byte{116, 45, 10}: "Norfolk Elektronik AG",
- [3]byte{116, 47, 104}: "Azurewave Technologies, Inc.",
+ [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, 52, 0}: "MTG Co., Ltd.",
+ [3]byte{116, 54, 109}: "Vodafone Italia S.p.A.",
[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, 64, 187}: "Hon Hai Precision Ind. Co.,Ltd.",
[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, 92, 159}: "TCT mobile ltd.",
+ [3]byte{116, 89, 51}: "Danal Entertainment",
+ [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, 144}: "LAM Technologies",
[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, 107, 171}: "GUANGDONG ENOK COMMUNICATION CO., LTD",
+ [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, 112, 253}: "Intel Corporate",
+ [3]byte{116, 114, 30}: "Edison Labs Inc.",
+ [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}: "ServiceAssure",
+ [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, 134, 122}: "Dell Inc",
+ [3]byte{116, 129, 20}: "Apple, Inc.",
+ [3]byte{116, 129, 154}: "PT. Hartono Istana Teknologi",
+ [3]byte{116, 131, 194}: "Ubiquiti Networks Inc.",
+ [3]byte{116, 131, 239}: "Arista Networks",
+ [3]byte{116, 133, 42}: "PEGATRON CORPORATION",
+ [3]byte{116, 133, 196}: "New H3C Technologies Co., Ltd",
+ [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, 135, 187}: "Ciena Corporation",
[3]byte{116, 136, 42}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{116, 136, 139}: "ADB Broadband Italia",
+ [3]byte{116, 138, 13}: "ARRIS Group, Inc.",
+ [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, 157, 220}: "2Wire",
+ [3]byte{116, 156, 227}: "KodaCloud Canada, Inc",
+ [3]byte{116, 157, 121}: "Sercomm Corporation.",
+ [3]byte{116, 157, 143}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 157, 220}: "2Wire Inc",
+ [3]byte{116, 158, 175}: "Apple, 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, 167, 34}: "LG Electronics",
+ [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, 185, 235}: "Fujian JinQianMao Electronic Technology Co.,Ltd",
+ [3]byte{116, 180, 114}: "CIESSE",
+ [3]byte{116, 181, 126}: "zte corporation",
+ [3]byte{116, 181, 135}: "Apple, Inc.",
+ [3]byte{116, 185, 30}: "Nanjing Bestway Automation System Co., Ltd",
+ [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, 191, 192}: "CANON INC.",
+ [3]byte{116, 193, 79}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{116, 193, 125}: "Infinix mobility limited",
+ [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, 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 - Please see MAM public listing for more information.",
- [3]byte{116, 225, 182}: "Apple",
- [3]byte{116, 226, 245}: "Apple",
+ [3]byte{116, 225, 74}: "IEEE Registration Authority",
+ [3]byte{116, 225, 130}: "Texas Instruments",
+ [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, 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, 235, 128}: "Samsung Electronics Co.,Ltd",
+ [3]byte{116, 236, 66}: "Fiberhome Telecommunication Technologies Co.,LTD",
[3]byte{116, 236, 241}: "Acumen",
- [3]byte{116, 240, 109}: "AzureWave Technologies, Inc.",
+ [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, 247, 55}: "KCE",
[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, 4, 115}: "Texas Instruments",
+ [3]byte{120, 5, 65}: "Queclink Wireless Solutions Co., Ltd",
+ [3]byte{120, 5, 95}: "Shenzhen WYC Technology 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, 12, 240}: "Cisco Systems, Inc",
+ [3]byte{120, 14, 209}: "TRUMPF Werkzeugmaschinen GmbH+Co.KG",
+ [3]byte{120, 15, 119}: "HangZhou Gubei Electronics Technology Co.,Ltd",
[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 Technologies, Inc.",
+ [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, 74}: "zte 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, 39}: "Samsung Electronics Co.,Ltd",
+ [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, 43, 203}: "Dell Inc",
+ [3]byte{120, 37, 122}: "LEO Innovation Lab",
+ [3]byte{120, 37, 173}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 40, 202}: "Sonos, Inc.",
+ [3]byte{120, 41, 237}: "ASKEY COMPUTER CORP",
+ [3]byte{120, 43, 203}: "Dell Inc.",
+ [3]byte{120, 45, 126}: "TRENDnet, Inc.",
[3]byte{120, 46, 239}: "Nokia Corporation",
+ [3]byte{120, 47, 23}: "Xlab Co.,Ltd",
[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",
+ [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, 58, 132}: "Apple",
+ [3]byte{120, 53, 160}: "Zurn Industries LLC",
+ [3]byte{120, 54, 144}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+ [3]byte{120, 54, 204}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,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 technology 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, 69, 196}: "Dell Inc.",
[3]byte{120, 70, 196}: "DAEHAP HYPER-TECH",
[3]byte{120, 71, 29}: "Samsung Electronics Co.,Ltd",
+ [3]byte{120, 71, 227}: "SICHUAN TIANYI COMHEART TELECOM 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, 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, 74}: "Ensenso GmbH",
[3]byte{120, 82, 98}: "Shenzhen Hojy Software Co., Ltd.",
+ [3]byte{120, 83, 100}: "SHIFT GmbH",
+ [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, 96}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 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, 97, 124}: "MITSUMI ELECTRIC CO.,LTD",
+ [3]byte{120, 93, 200}: "LG Electronics",
+ [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, 106, 137}: "Huawei Technologies Co., Ltd",
- [3]byte{120, 108, 28}: "Apple",
+ [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, 112, 82}: "Welotec GmbH",
+ [3]byte{120, 113, 156}: "ARRIS Group, Inc.",
+ [3]byte{120, 114, 93}: "Cisco Systems, Inc",
+ [3]byte{120, 123, 138}: "Apple, Inc.",
+ [3]byte{120, 125, 72}: "ITEL MOBILE LIMITED",
+ [3]byte{120, 125, 83}: "Aerohive Networks Inc.",
+ [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, 140, 84}: "Eltek Technologies LTD",
+ [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}: "Ping Communication",
[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",
+ [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, 228}: "Apple",
+ [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, 192}: "Hewlett-Packard Company",
+ [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, 175, 228}: "Comau S.p.A",
+ [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, 182, 236}: "Scuf Gaming International LLC",
[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",
+ [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, 210, 148}: "NETGEAR",
[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, 240}: "Samsung Electro Mechanics",
+ [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",
+ [3]byte{120, 218, 7}: "Zhejiang Tmall Technology Co., 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, 227, 181}: "Hewlett-Packard Company",
+ [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 Company",
+ [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, 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, 253, 148}: "Apple",
+ [3]byte{120, 248, 130}: "LG Electronics (Mobile Communications)",
+ [3]byte{120, 249, 68}: "Private",
+ [3]byte{120, 249, 180}: "Nokia",
+ [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",
- [3]byte{124, 3, 216}: "SAGEMCOM SAS",
+ [3]byte{124, 3, 76}: "Sagemcom Broadband SAS",
+ [3]byte{124, 3, 171}: "Xiaomi Communications Co Ltd",
+ [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, CIS",
+ [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, 14, 206}: "Cisco",
- [3]byte{124, 17, 190}: "Apple",
+ [3]byte{124, 11, 198}: "Samsung Electronics Co.,Ltd",
+ [3]byte{124, 12, 246}: "Guangdong Huiwei High-tech 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, 32, 100}: "Alcatel-Lucent IPD",
+ [3]byte{124, 36, 12}: "Telechips, Inc.",
+ [3]byte{124, 37, 134}: "Juniper Networks",
[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, 42, 49}: "Intel Corporate",
+ [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, 189}: "Google, Inc.",
+ [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, 57, 83}: "zte corporation",
[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, 65, 162}: "Nokia",
[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, 73, 235}: "XIAOMI Electronics,CO.,LTD",
[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, 105, 246}: "Cisco",
+ [3]byte{124, 103, 162}: "Intel Corporate",
+ [3]byte{124, 105, 107}: "Atmosic Technologies",
+ [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, 156}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [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",
- [3]byte{124, 109, 248}: "Apple",
+ [3]byte{124, 109, 98}: "Apple, Inc.",
+ [3]byte{124, 109, 166}: "Superwave Group LLC",
+ [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 - Please see MAM public listing for more information.",
+ [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, 104}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 137, 193}: "Palo Alto Networks",
+ [3]byte{124, 139, 181}: "Samsung Electronics Co.,Ltd",
+ [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, 243}: "Cisco",
+ [3]byte{124, 149, 177}: "Aerohive Networks Inc.",
+ [3]byte{124, 149, 243}: "Cisco Systems, Inc",
+ [3]byte{124, 150, 210}: "Fihonest communication co.,Ltd",
[3]byte{124, 151, 99}: "Openmatics s.r.o.",
+ [3]byte{124, 154, 84}: "Technicolor CH USA Inc.",
[3]byte{124, 154, 155}: "VSE valencia smart energy",
[3]byte{124, 161, 93}: "GN ReSound A/S",
+ [3]byte{124, 161, 119}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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",
+ [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}: "TCL King High Frequency EI,Co.,LTD",
+ [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, 188, 132}: "IEEE Registration Authority",
[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",
+ [3]byte{124, 195, 133}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{124, 195, 161}: "Apple, Inc.",
[3]byte{124, 196, 239}: "Devialet",
- [3]byte{124, 197, 55}: "Apple",
+ [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",
- [3]byte{124, 211, 10}: "INVENTEC Corporation",
+ [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, 219, 152}: "ASKEY COMPUTER CORP",
[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, 228, 170}: "PRIVATE",
+ [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, 237, 141}: "MICROSOFT",
+ [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",
+ [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, 250, 223}: "Apple",
+ [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, 77}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
[3]byte{124, 255, 98}: "Huizhou Super Electron Technology Co.,Ltd.",
[3]byte{128, 0, 11}: "Intel Corporate",
- [3]byte{128, 0, 16}: "ATT BELL LABORATORIES",
- [3]byte{128, 0, 110}: "Apple",
+ [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, 156}: "Gemtek Technology Co., Ltd.",
+ [3]byte{128, 2, 223}: "ORA Inc.",
+ [3]byte{128, 5, 136}: "Ruijie Networks Co.,LTD",
[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, 167}: "Samsung Eletronics Co., Ltd",
+ [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, 31, 18}: "Microchip Technology Inc.",
[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, 43, 249}: "Hon Hai Precision Ind. Co.,Ltd.",
[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, 48, 224}: "Hewlett Packard Enterprise",
[3]byte{128, 52, 87}: "OT Systems Limited",
- [3]byte{128, 55, 115}: "Netgear Inc",
+ [3]byte{128, 53, 193}: "Xiaomi Communications Co Ltd",
+ [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, 58, 244}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [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 Electronics Corp., Ltd.,",
+ [3]byte{128, 65, 38}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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 TELECOM CO.,LTD",
- [3]byte{128, 73, 113}: "Apple",
+ [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, 112}: "Samsung Electronics Co.,Ltd",
+ [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, 80, 246}: "ITEL MOBILE LIMITED",
+ [3]byte{128, 84, 106}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
[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, 79}: "FN-LINK TECHNOLOGY LIMITED",
+ [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, 108, 27}: "Motorola Mobility LLC",
+ [3]byte{128, 105, 51}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{128, 105, 64}: "LEXAR CO.,LIMITED",
+ [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, 111, 176}: "Texas Instruments",
[3]byte{128, 113, 31}: "Juniper Networks",
- [3]byte{128, 113, 122}: "Huawei Technologies Co., Ltd",
+ [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, 20}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{128, 125, 27}: "Neosystem Co. Ltd.",
+ [3]byte{128, 125, 58}: "Espressif Inc.",
[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, 35}: "Apple, Inc.",
[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",
+ [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, 33}: "Lenovo",
[3]byte{128, 150, 177}: "ARRIS Group, Inc.",
- [3]byte{128, 150, 202}: "Hon Hai Precision Ind Co.,Ltd",
+ [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, 167, 150}: "Neurotek LLC",
+ [3]byte{128, 168, 93}: "Osterhout Design Group",
[3]byte{128, 170, 164}: "USAG",
- [3]byte{128, 173, 103}: "Kasda Digital Technology Co.,Ltd",
+ [3]byte{128, 172, 172}: "Juniper Networks",
+ [3]byte{128, 173, 22}: "Xiaomi Communications Co Ltd",
+ [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, 179, 42}: "UK Grid Solutions Ltd",
+ [3]byte{128, 181, 117}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{128, 182, 36}: "IVS",
+ [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",
+ [3]byte{128, 190, 5}: "Apple, Inc.",
[3]byte{128, 193, 110}: "Hewlett Packard",
+ [3]byte{128, 197, 72}: "Shenzhen Zowee Technology Co.,Ltd",
+ [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 USA Inc.",
+ [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, 199, 197}: "Fiberhome Telecommunication Technologies Co.,LTD",
[3]byte{128, 200, 98}: "Openpeak, Inc",
+ [3]byte{128, 206, 98}: "Hewlett Packard",
[3]byte{128, 206, 177}: "Theissen Training Systems GmbH",
+ [3]byte{128, 206, 185}: "Samsung Electronics Co.,Ltd",
[3]byte{128, 207, 65}: "Lenovo Mobile Communication Technology Ltd.",
[3]byte{128, 208, 25}: "Embed, Inc",
+ [3]byte{128, 208, 101}: "CKS Corporation",
+ [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 Technologies, Inc",
+ [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, 230, 80}: "Apple",
- [3]byte{128, 234, 150}: "Apple",
+ [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, 251, 240}: "Quectel Wireless Solutions Co., Ltd.",
[3]byte{128, 255, 168}: "UNIDIS",
- [3]byte{132, 0, 210}: "Sony Ericsson Mobile Communications AB",
+ [3]byte{132, 0, 45}: "PEGATRON CORPORATION",
+ [3]byte{132, 0, 210}: "Sony Mobile Communications Inc",
[3]byte{132, 1, 167}: "Greyware Automation Products, Inc",
- [3]byte{132, 11, 45}: "SAMSUNG ELECTRO-MECHANICS CO., LTD",
+ [3]byte{132, 4, 210}: "Kirale Technologies SL",
+ [3]byte{132, 11, 45}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{132, 13, 142}: "Espressif Inc.",
[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 Electronics Co., Ltd",
+ [3]byte{132, 23, 102}: "WEIFANG GOERTEK ELECTRONICS CO.,LTD",
+ [3]byte{132, 23, 239}: "Technicolor CH USA Inc.",
[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, 36, 141}: "Motorola Solutions Inc",
- [3]byte{132, 37, 63}: "Silex Technology, Inc",
+ [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}: "Alcatel-Lucent",
+ [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",
+ [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, 111}: "GUANGZHOU AVA ELECTRONICS TECHNOLOGY CO.,LTD",
[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",
- [3]byte{132, 56, 56}: "Samsung Electro Mechanics co., LTD.",
+ [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 Elec 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, 104, 120}: "Apple, Inc.",
+ [3]byte{132, 106, 102}: "Sumitomo Kizai Co.,Ltd.",
[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, 120, 139}: "Apple",
- [3]byte{132, 120, 172}: "Cisco",
+ [3]byte{132, 116, 96}: "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, 127, 61}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [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, 131, 113}: "Avaya Inc",
[3]byte{132, 132, 51}: "Paradox Engineering SA",
- [3]byte{132, 133, 6}: "Apple",
+ [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, 137, 236}: "IEEE Registration Authority",
+ [3]byte{132, 138, 141}: "Cisco Systems, Inc",
[3]byte{132, 141, 132}: "Rajant Corporation",
[3]byte{132, 141, 199}: "Cisco SPVTG",
- [3]byte{132, 142, 12}: "Apple",
+ [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, 142, 223}: "Sony Mobile Communications Inc",
[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}: "Pace plc",
+ [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, 162, 77}: "Birds Eye Systems Private Limited",
+ [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, 168, 228}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [3]byte{132, 167, 136}: "Perples",
+ [3]byte{132, 168, 228}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{132, 169, 62}: "Hewlett Packard",
[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, 177, 83}: "Apple",
- [3]byte{132, 181, 156}: "Juniper networks",
+ [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, 179, 27}: "Kinexon GmbH",
+ [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, 200, 177}: "Incognito Software Inc.",
+ [3]byte{132, 199, 234}: "Sony Mobile Communications Inc",
+ [3]byte{132, 200, 177}: "Incognito Software Systems Inc.",
[3]byte{132, 201, 178}: "D-Link International",
+ [3]byte{132, 201, 198}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [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, 47}: "Sierra Wireless",
+ [3]byte{132, 219, 158}: "Aifloo AB",
+ [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, 224, 88}: "Pace plc",
+ [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, 229, 216}: "Guangdong UNIPOE IoT Technology Co.,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, 243, 235}: "Espressif Inc.",
[3]byte{132, 244, 147}: "OMS spol. s.r.o.",
[3]byte{132, 246, 76}: "Cross Point BV",
- [3]byte{132, 252, 254}: "Apple",
+ [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{136, 3, 85}: "Arcadyan Technology Corp.",
+ [3]byte{132, 254, 220}: "Borqs Beijing Ltd.",
+ [3]byte{136, 1, 24}: "BLT Co",
+ [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, 7}: "MKT Systemtechnik GmbH & Co. KG",
+ [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 Atheros",
+ [3]byte{136, 16, 143}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 17, 150}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 18, 78}: "Qualcomm Inc.",
[3]byte{136, 20, 43}: "Protonic Holland",
- [3]byte{136, 21, 68}: "Meraki, Inc.",
+ [3]byte{136, 21, 68}: "Cisco Meraki",
+ [3]byte{136, 23, 163}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
[3]byte{136, 24, 174}: "Tamron Co., Ltd",
- [3]byte{136, 29, 252}: "Cisco",
- [3]byte{136, 31, 161}: "Apple",
+ [3]byte{136, 25, 8}: "Apple, Inc.",
+ [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, 41, 80}: "Dalian Netmoon Tech Develop Co.,Ltd",
+ [3]byte{136, 37, 147}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{136, 40, 179}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{136, 41, 80}: "Netmoon Technology Co., Ltd",
+ [3]byte{136, 43, 215}: "ADDÉNERGIE TECHNOLOGIES",
+ [3]byte{136, 45, 83}: "Baidu Online Network Technology (Beijing) Co., Ltd.",
[3]byte{136, 46, 90}: "storONE",
- [3]byte{136, 48, 138}: "Murata Manufactuaring Co.,Ltd.",
- [3]byte{136, 50, 155}: "Samsung Electro Mechanics co.,LTD.",
+ [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, 52, 254}: "Bosch Automotive Products (Suzhou) Co. Ltd",
[3]byte{136, 53, 76}: "Transics",
+ [3]byte{136, 53, 193}: "OI ELECTRIC CO.,LTD",
[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, 61, 36}: "Google, Inc.",
+ [3]byte{136, 63, 74}: "Texas Instruments",
+ [3]byte{136, 63, 153}: "Siemens AG",
+ [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 Netowrks",
- [3]byte{136, 67, 225}: "CISCO SYSTEMS, INC.",
+ [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, 80, 246}: "Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd",
[3]byte{136, 81, 251}: "Hewlett Packard",
[3]byte{136, 83, 46}: "Intel Corporate",
- [3]byte{136, 83, 149}: "Apple",
- [3]byte{136, 83, 212}: "Huawei Technologies Co., Ltd",
+ [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, 90, 146}: "Cisco",
+ [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, 95, 232}: "IEEE Registration Authority",
[3]byte{136, 97, 90}: "Siano Mobile Silicon Ltd.",
- [3]byte{136, 99, 223}: "Apple",
+ [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, 177}: "ARRIS Group, Inc.",
+ [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",
+ [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, 78}: "ARRIS Group, Inc.",
[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, 101}: "exands",
[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, 111}: "Samsung Electronics Co.,Ltd",
[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, 169, 167}: "IEEE Registration Authority",
[3]byte{136, 172, 193}: "Generiton Co., Ltd.",
- [3]byte{136, 174, 29}: "COMPAL INFORMATION(KUNSHAN)CO.,LTD",
+ [3]byte{136, 173, 67}: "PEGATRON CORPORATION",
+ [3]byte{136, 173, 210}: "Samsung Electronics Co.,Ltd",
+ [3]byte{136, 174, 7}: "Apple, Inc.",
+ [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}: "AirTight Networks, Inc.",
+ [3]byte{136, 177, 225}: "Mojo Networks, Inc.",
+ [3]byte{136, 179, 98}: "Nokia Shanghai Bell Co. Ltd.)",
+ [3]byte{136, 180, 166}: "Motorola Mobility LLC, a Lenovo Company",
[3]byte{136, 182, 39}: "Gembird Europe BV",
+ [3]byte{136, 182, 107}: "easynetworks",
+ [3]byte{136, 182, 238}: "Dish Technologies Corp",
+ [3]byte{136, 184, 208}: "Dongguan Koppo Electronic Co.,Ltd",
[3]byte{136, 186, 127}: "Qfiednet Co., Ltd.",
+ [3]byte{136, 189, 69}: "Samsung Electronics Co.,Ltd",
+ [3]byte{136, 189, 120}: "Flaircomm Microelectronics,Inc.",
[3]byte{136, 191, 213}: "Simple Audio Ltd",
+ [3]byte{136, 191, 228}: "HUAWEI TECHNOLOGIES CO.,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, 198, 38}: "Logitech - Ultimate Ears",
- [3]byte{136, 198, 99}: "Apple",
- [3]byte{136, 201, 208}: "LG Electronics",
- [3]byte{136, 203, 135}: "Apple",
+ [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, 17}: "Eko Devices, Inc.",
+ [3]byte{136, 210, 116}: "zte corporation",
+ [3]byte{136, 210, 191}: "German Autolabs",
+ [3]byte{136, 211, 123}: "FirmTek, LLC",
+ [3]byte{136, 213, 12}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{136, 214, 82}: "AMERGINT Technologies",
[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, 124}: "Askey Computer Corp.",
+ [3]byte{136, 222, 169}: "Roku, Inc.",
+ [3]byte{136, 223, 158}: "New H3C Technologies Co., Ltd",
[3]byte{136, 224, 160}: "Shenzhen VisionSTOR Technologies Co., Ltd",
[3]byte{136, 224, 243}: "Juniper Networks",
- [3]byte{136, 227, 171}: "Huawei Technologies Co., Ltd",
+ [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, 15}: "innomdlelab",
[3]byte{136, 233, 23}: "Tamaggo",
+ [3]byte{136, 233, 254}: "Apple, Inc.",
[3]byte{136, 237, 28}: "Cudo Communication Co., Ltd.",
- [3]byte{136, 240, 49}: "Cisco",
- [3]byte{136, 240, 119}: "CISCO SYSTEMS, INC.",
+ [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 USA Inc.",
+ [3]byte{136, 247, 191}: "vivo Mobile Communication Co., 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",
- [3]byte{140, 4, 255}: "Technicolor USA Inc.",
+ [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, 14, 227}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD.",
+ [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, 20, 180}: "zte corporation",
+ [3]byte{140, 21, 199}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{140, 22, 69}: "LCFC(HeFei) Electronics Technology co., ltd",
+ [3]byte{140, 24, 80}: "China Mobile (Hangzhou) Information Technology Co., Ltd.",
[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, 28, 218}: "IEEE Registration Authority",
[3]byte{140, 31, 148}: "RF Surgical System Inc.",
- [3]byte{140, 33, 10}: "TP-LINK TECHNOLOGIES CO., LTD.",
+ [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",
- [3]byte{140, 45, 170}: "Apple",
+ [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, 58, 227}: "LG Electronics",
+ [3]byte{140, 52, 253}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{140, 53, 121}: "QDIQO Sp. z o.o.",
+ [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 TELECOMMUNICATIONS,INC.",
+ [3]byte{140, 60, 74}: "NAKAYO Inc",
[3]byte{140, 65, 242}: "RDA Technologies Ltd.",
+ [3]byte{140, 65, 244}: "IPmotion GmbH",
[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, 173}: "Evoluzn Inc.",
[3]byte{140, 76, 220}: "PLANEX COMMUNICATIONS INC.",
[3]byte{140, 77, 185}: "Unmonday Ltd",
[3]byte{140, 77, 234}: "Cerio Corporation",
@@ -16638,60 +19806,101 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [3]byte{140, 88, 119}: "Apple, Inc.",
+ [3]byte{140, 89, 115}: "Zyxel Communications Corporation",
[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, 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, 97, 163}: "ARRIS Group, Inc.",
[3]byte{140, 100, 11}: "Beyond Devices d.o.o.",
- [3]byte{140, 100, 34}: "Sony Ericsson Mobile Communications AB",
+ [3]byte{140, 100, 34}: "Sony Mobile Communications Inc",
[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, 109, 119}: "HUAWEI TECHNOLOGIES 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, 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, 123, 157}: "Apple",
- [3]byte{140, 124, 146}: "Apple",
+ [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, 123, 240}: "Xufeng Development Limited",
+ [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, 129, 38}: "ARCOM",
[3]byte{140, 130, 168}: "Insigma Technology Co.,Ltd",
- [3]byte{140, 132, 1}: "PRIVATE",
+ [3]byte{140, 131, 157}: "SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD",
+ [3]byte{140, 131, 225}: "Samsung Electronics 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, 133, 230}: "Cleondris GmbH",
+ [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, 144, 211}: "Alcatel Lucent",
+ [3]byte{140, 142, 242}: "Apple, Inc.",
+ [3]byte{140, 143, 139}: "China Mobile Chongqing branch",
+ [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, 146, 70}: "Oerlikon Textile Gmbh&Co.KG",
+ [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, 176, 233}: "Samsung Electronics.,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 Technology Co.,Ltd",
+ [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, 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",
@@ -16700,29 +19909,54 @@ var validMACPrefixMap = map[[3]byte]string{
[3]byte{140, 222, 153}: "Comlab Inc.",
[3]byte{140, 223, 157}: "NEC Corporation",
[3]byte{140, 224, 129}: "zte corporation",
- [3]byte{140, 231, 72}: "PRIVATE",
+ [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}: "MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{140, 245, 163}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{140, 247, 16}: "AMPAK Technology, Inc.",
+ [3]byte{140, 247, 115}: "Nokia",
[3]byte{140, 248, 19}: "ORANGE POLSKA",
[3]byte{140, 249, 69}: "Power Automation pte Ltd",
+ [3]byte{140, 249, 87}: "RuiXingHengFang Network (Shenzhen) Co.,Ltd",
[3]byte{140, 249, 201}: "MESADA Technology Co.,Ltd.",
- [3]byte{140, 250, 186}: "Apple",
- [3]byte{140, 253, 240}: "QUALCOMM Incorporated",
+ [3]byte{140, 250, 186}: "Apple, Inc.",
+ [3]byte{140, 252, 160}: "Shenzhen Smart Device Technology Co., LTD.",
+ [3]byte{140, 253, 240}: "Qualcomm Inc.",
+ [3]byte{140, 254, 87}: "Apple, Inc.",
+ [3]byte{140, 254, 116}: "Ruckus Wireless",
+ [3]byte{140, 254, 180}: "VSOONTECH ELECTRONICS CO., LIMITED",
[3]byte{144, 0, 78}: "Hon Hai Precision Ind. Co.,Ltd.",
- [3]byte{144, 1, 59}: "SAGEMCOM",
+ [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, 183}: "PARROT",
+ [3]byte{144, 2, 169}: "Zhejiang Dahua Technology Co., Ltd.",
+ [3]byte{144, 3, 37}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{144, 3, 114}: "Longnan Junya Digital Technology 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, 14, 179}: "Shenzhen Amediatech Technology Co., Ltd.",
+ [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, 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.",
@@ -16731,235 +19965,415 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 39, 228}: "Apple",
+ [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, 43, 210}: "HUAWEI TECHNOLOGIES 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}: "Alcatel-Lucent",
+ [3]byte{144, 58, 114}: "Ruckus Wireless",
+ [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, 104}: "G-Printec, Inc.",
[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 Corporation",
+ [3]byte{144, 73, 250}: "Intel Corporate",
+ [3]byte{144, 76, 129}: "Hewlett Packard Enterprise",
[3]byte{144, 76, 229}: "Hon Hai Precision Ind. Co.,Ltd.",
- [3]byte{144, 78, 43}: "Huawei Technologies 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, 81, 63}: "Elettronica Santerno",
+ [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, 95, 46}: "TCT Mobile Limited",
+ [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, 99, 59}: "Samsung Electronics Co.,Ltd",
[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",
+ [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, 114, 64}: "Apple",
+ [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, 16}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
[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}: "SNUPI Technologies",
+ [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, 75}: "BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD",
[3]byte{144, 131, 122}: "General Electric Water & Process Technologies",
- [3]byte{144, 132, 13}: "Apple",
+ [3]byte{144, 132, 13}: "Apple, Inc.",
+ [3]byte{144, 132, 43}: "LEGO System A/S",
+ [3]byte{144, 132, 139}: "HDR10+ Technologies, LLC",
+ [3]byte{144, 134, 116}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD",
+ [3]byte{144, 134, 155}: "zte corporation",
[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, 151}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 161, 55}: "Beijing Splendidtel Communication Technology Co,. Ltd",
+ [3]byte{144, 162, 16}: "United Telecoms Ltd",
[3]byte{144, 162, 218}: "GHEO SA",
- [3]byte{144, 164, 222}: "Wistron Neweb Corp.",
+ [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, 178, 31}: "Apple",
+ [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, 49}: "Apple, Inc.",
[3]byte{144, 185, 125}: "Johnson Outdoors Marine Electronics d/b/a Minnkota",
- [3]byte{144, 193, 21}: "Sony Ericsson Mobile Communications AB",
+ [3]byte{144, 193, 21}: "Sony Mobile Communications Inc",
+ [3]byte{144, 193, 198}: "Apple, Inc.",
+ [3]byte{144, 195, 95}: "Nanjing Jiahao Technology Co., Ltd.",
+ [3]byte{144, 197, 74}: "vivo Mobile Communication 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}: "Tesorion Nederland B.V.",
[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 Electric 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, 221, 93}: "Apple, Inc.",
[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, 225, 123}: "Apple, Inc.",
+ [3]byte{144, 226, 2}: "Texas Instruments",
[3]byte{144, 226, 186}: "Intel Corporate",
[3]byte{144, 230, 186}: "ASUSTek COMPUTER INC.",
+ [3]byte{144, 231, 16}: "New H3C Technologies Co., Ltd",
+ [3]byte{144, 231, 196}: "HTC Corporation",
[3]byte{144, 234, 96}: "SPI Lasers Ltd",
- [3]byte{144, 239, 104}: "ZyXEL Communications Corporation",
- [3]byte{144, 241, 170}: "Samsung Electronics Co.,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, 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",
+ [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, 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, 25, 58}: "Elvaco AB",
[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, 41, 12}: "Shenyang wisdom Foundation Technology Development Co., Ltd.",
+ [3]byte{148, 41, 141}: "Shanghai AdaptComm Technology 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 Electronic Solutions, Inc.",
+ [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",
+ [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, 79, 76}: "Sound United LLC",
[3]byte{148, 80, 71}: "Rechnerbetriebsgruppe",
- [3]byte{148, 81, 3}: "Samsung Electronics",
+ [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, 84, 223}: "YST CORP.",
+ [3]byte{148, 87, 165}: "Hewlett Packard",
+ [3]byte{148, 88, 203}: "Nintendo Co.,Ltd",
+ [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, 98, 105}: "ARRIS Group, Inc.",
+ [3]byte{148, 99, 114}: "vivo Mobile Communication Co., Ltd.",
[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, 106, 176}: "Arcadyan Corporation",
[3]byte{148, 112, 210}: "WINFIRM TECHNOLOGY",
- [3]byte{148, 113, 172}: "TCT Mobile Limited",
+ [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, 135, 224}: "Xiaomi Communications Co Ltd",
+ [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, 141, 239}: "Oetiker Schweiz AG",
[3]byte{148, 142, 137}: "INDUSTRIAS UNIDAS SA DE CV",
- [3]byte{148, 143, 238}: "Hughes Telematics, Inc.",
- [3]byte{148, 148, 38}: "Apple",
+ [3]byte{148, 143, 207}: "ARRIS Group, Inc.",
+ [3]byte{148, 143, 238}: "Verizon Telematics",
+ [3]byte{148, 145, 127}: "ASKEY COMPUTER CORP",
+ [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, 153, 144}: "VTC Telecommunications",
+ [3]byte{148, 154, 169}: "Microsoft Corporation",
+ [3]byte{148, 155, 44}: "Extreme Networks, Inc.",
[3]byte{148, 155, 253}: "Trans New Technology, Inc.",
[3]byte{148, 156, 85}: "Alta Data Technologies",
+ [3]byte{148, 157, 87}: "Panasonic do Brasil Limitada",
+ [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, 163, 202}: "KonnectONE, LLC",
+ [3]byte{148, 164, 12}: "Diehl Metering GmbH",
+ [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, 176, 31}: "Apple, Inc.",
+ [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, 109}: "Intel Corporate",
[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, 45}: "Apple, Inc.",
[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, 195, 228}: "Atlas Copco IAS GmbH",
[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, 44}: "Sony Mobile Communications Inc",
[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, 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",
+ [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, 224, 214}: "China Dragon Technology Limited",
+ [3]byte{148, 225, 172}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
[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, 233, 140}: "Alcatel-Lucent",
- [3]byte{148, 235, 44}: "Google Inc.",
- [3]byte{148, 235, 205}: "Research In Motion Limited",
+ [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, 234, 234}: "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO",
+ [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, 246, 214}: "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, 178}: "Shenzhen Gongjin Electronics 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, 244}: "SAGEMCOM",
+ [3]byte{148, 254, 34}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{148, 254, 157}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [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, 155}: "Mellanox Technologies, Inc.",
[3]byte{152, 3, 160}: "ABB n.v. Power Quality Products",
- [3]byte{152, 3, 216}: "Apple",
- [3]byte{152, 12, 130}: "Samsung Electro Mechanics",
+ [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, 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, 20, 210}: "Avonic",
[3]byte{152, 22, 236}: "IC Intracom",
+ [3]byte{152, 24, 136}: "Cisco Meraki",
+ [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, 44, 190}: "2Wire",
+ [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",
@@ -16967,244 +20381,446 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 59, 22}: "AMPAK Technology Inc",
+ [3]byte{152, 57, 142}: "Samsung Electronics Co.,Ltd",
+ [3]byte{152, 59, 22}: "AMPAK Technology, Inc.",
+ [3]byte{152, 59, 143}: "Intel Corporate",
[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, 69, 98}: "Shanghai Baud Data Communication Co.,Ltd.",
[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 Company",
+ [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",
+ [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, 130}: "Arista Networks",
+ [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}: "SAGEM COMMUNICATION",
+ [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, 212}: "ITEL MOBILE LIMITED",
[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, 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, 4}: "Ericsson AB",
+ [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, 176, 57}: "Alcatel-Lucent",
- [3]byte{152, 184, 227}: "Apple",
+ [3]byte{152, 170, 252}: "IEEE Registration Authority",
+ [3]byte{152, 174, 113}: "VVDN Technologies Pvt Ltd",
+ [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, 187, 153}: "Phicomm (Sichuan) Co.,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, 202, 51}: "Apple, Inc.",
+ [3]byte{152, 203, 39}: "Galore Networks Pvt. Ltd.",
+ [3]byte{152, 204, 77}: "Shenzhen mantunsci co., 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, 211, 231}: "Netafim L",
[3]byte{152, 214, 134}: "Chyi Lee industry Co., ltd.",
- [3]byte{152, 214, 187}: "Apple",
- [3]byte{152, 214, 247}: "LG Electronics",
+ [3]byte{152, 214, 187}: "Apple, Inc.",
+ [3]byte{152, 214, 247}: "LG Electronics (Mobile Communications)",
+ [3]byte{152, 216, 99}: "Shanghai High-Flying Electronics Technology Co., Ltd",
[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, 240, 171}: "Apple",
+ [3]byte{152, 237, 92}: "Tesla Motors, Inc",
+ [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 inc.",
+ [3]byte{152, 249, 199}: "IEEE Registration Authority",
+ [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",
+ [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",
+ [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, 12, 223}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
[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, 54}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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",
+ [3]byte{156, 32, 123}: "Apple, Inc.",
[3]byte{156, 33, 106}: "TP-LINK TECHNOLOGIES CO.,LTD.",
- [3]byte{156, 34, 14}: "TASCAN Service GmbH",
+ [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, 46, 161}: "Xiaomi Communications Co Ltd",
+ [3]byte{156, 47, 115}: "Universal Tiancheng Technology (Beijing) 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, 50, 206}: "CANON INC.",
+ [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, 67, 30}: "IEEE Registration Authority",
[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, 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, 90, 68}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.",
[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, 93, 18}: "Aerohive Networks Inc",
+ [3]byte{156, 92, 142}: "ASUSTek COMPUTER INC.",
+ [3]byte{156, 92, 249}: "Sony Mobile Communications Inc",
+ [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, 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, 100, 139}: "Apple, Inc.",
[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, 105, 55}: "Qorvo Utrecht B.V.",
[3]byte{156, 106, 190}: "QEES ApS.",
+ [3]byte{156, 108, 21}: "Microsoft Corporation",
+ [3]byte{156, 111, 82}: "zte corporation",
+ [3]byte{156, 113, 58}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 127, 87}: "UNIC Memory Technology Co Ltd",
[3]byte{156, 128, 125}: "SYSCABLE Korea Inc.",
[3]byte{156, 128, 223}: "Arcadyan Technology Corporation",
+ [3]byte{156, 130, 117}: "Yichip\u00a0Microelectronics (Hangzhou) Co.,Ltd",
+ [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, 140, 216}: "Hewlett Packard Enterprise",
[3]byte{156, 141, 26}: "INTEG process group inc",
- [3]byte{156, 142, 153}: "Hewlett-Packard Company",
+ [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, 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, 37}: "Shandong USR IOT Technology Limited",
[3]byte{156, 165, 119}: "Osorno Enterprises Inc.",
+ [3]byte{156, 165, 192}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{156, 166, 21}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{156, 166, 157}: "Whaley Technology Co.Ltd",
[3]byte{156, 169, 228}: "zte corporation",
+ [3]byte{156, 170, 27}: "Microsoft 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, 175, 202}: "CISCO SYSTEMS, 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 AG",
- [3]byte{156, 193, 114}: "Huawei Technologies Co., Ltd",
+ [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, 200, 252}: "ARRIS Group, Inc.",
+ [3]byte{156, 201, 80}: "Baumer Holding",
[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, 109}: "NETGEAR INC.,",
+ [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",
+ [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, 94}: "Apple, Inc.",
[3]byte{156, 230, 231}: "Samsung Electronics Co.,Ltd",
[3]byte{156, 231, 189}: "Winduskorea co., Ltd",
+ [3]byte{156, 232, 43}: "vivo Mobile Communication Co., Ltd.",
+ [3]byte{156, 232, 149}: "New H3C Technologies 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, 246, 221}: "IEEE Registration Authority",
[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, 254, 161}: "Fiberhome Telecommunication Technologies 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",
+ [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",
+ [3]byte{160, 11, 186}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
[3]byte{160, 12, 161}: "SKTB SKiT",
- [3]byte{160, 18, 144}: "Avaya, Inc",
+ [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}: "Copyright © HiTi Digital, Inc.",
+ [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, 25, 178}: "IEEE Registration Authority",
+ [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, 33, 149}: "Samsung Electronics Digital Imaging",
+ [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, 40, 51}: "IEEE Registration Authority",
[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, 56, 248}: "OURA Health Oy",
+ [3]byte{160, 57, 238}: "Sagemcom Broadband SAS",
+ [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, 71, 215}: "Best IT World (India) Pvt Ltd",
[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, 81, 198}: "Avaya, Inc",
- [3]byte{160, 85, 222}: "Pace plc",
+ [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, 86, 243}: "Apple, Inc.",
+ [3]byte{160, 87, 227}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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 s.r.l.",
+ [3]byte{160, 102, 16}: "FUJITSU LIMITED",
+ [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, 117, 234}: "BoxLock, Inc.",
[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",
@@ -17212,259 +20828,487 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 147, 71}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD.",
+ [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, 147, 81}: "Cisco Systems, Inc",
+ [3]byte{160, 149, 12}: "China Mobile IOT Company 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, 184}: "WISCLOUD",
[3]byte{160, 163, 226}: "Actiontec Electronics, Inc",
+ [3]byte{160, 164, 197}: "Intel Corporate",
+ [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, 176, 69}: "Halong Mining",
[3]byte{160, 177, 0}: "ShenZhen Cando Electronics Co.,Ltd",
[3]byte{160, 179, 204}: "Hewlett Packard",
- [3]byte{160, 180, 165}: "Samsung Elec Co.,Ltd",
+ [3]byte{160, 180, 55}: "GD Mission Systems",
+ [3]byte{160, 180, 165}: "Samsung Electronics Co.,Ltd",
+ [3]byte{160, 181, 73}: "Arcadyan Corporation",
[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, 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, 214, 53}: "WBS Technology",
+ [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, 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, 83}: "Sony Mobile Communications Inc",
+ [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 Inc",
+ [3]byte{160, 230, 23}: "MATIS",
+ [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, 237, 205}: "Apple",
+ [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, 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, 12, 102}: "Shenzhen Colorful Yugong Technology and Development 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, 17, 148}: "Lenovo",
[3]byte{164, 18, 66}: "NEC Platforms, Ltd.",
[3]byte{164, 19, 78}: "Luxul",
- [3]byte{164, 21, 102}: "Wei Fang Goertek Electronics Co.,Ltd",
+ [3]byte{164, 20, 55}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{164, 21, 102}: "WEIFANG GOERTEK ELECTRONICS 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, 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, 37, 27}: "Avaya, Inc",
+ [3]byte{164, 36, 221}: "Cambrionix Ltd",
+ [3]byte{164, 37, 27}: "Avaya Inc",
+ [3]byte{164, 38, 24}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{164, 38, 85}: "LTI Motion (Shanghai) Co., Ltd.",
[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, 51, 215}: "MitraStar Technology Corp.",
+ [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, 53, 35}: "Guangdong Donyan Network Technologies Co.,Ltd.",
+ [3]byte{164, 56, 49}: "RF elements s.r.o.",
+ [3]byte{164, 56, 204}: "Nintendo Co.,Ltd",
[3]byte{164, 56, 252}: "Plastic Logic",
[3]byte{164, 58, 105}: "Vers Inc",
- [3]byte{164, 59, 250}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
+ [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, 64, 39}: "zte corporation",
+ [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, 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, 80, 85}: "busware.de",
+ [3]byte{164, 79, 41}: "IEEE Registration Authority",
+ [3]byte{164, 80, 70}: "Xiaomi Communications Co Ltd",
+ [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 ELECTRONICS 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, 86, 48}: "Cisco Systems, Inc",
+ [3]byte{164, 86, 204}: "Technicolor CH USA 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, 103, 6}: "Apple",
+ [3]byte{164, 97, 145}: "NamJunSa",
+ [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, 108, 241}: "Samsung Electronics Co.,Ltd",
[3]byte{164, 110, 121}: "DFT System Co.Ltd",
- [3]byte{164, 112, 214}: "Motorola Mobility LLC",
- [3]byte{164, 119, 51}: "Google",
+ [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, 192}: "JLG Industries, Inc.",
+ [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, 147, 76}: "CISCO SYSTEMS, INC.",
+ [3]byte{164, 145, 177}: "Technicolor",
+ [3]byte{164, 146, 203}: "Nokia",
+ [3]byte{164, 147, 63}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{164, 147, 76}: "Cisco Systems, Inc",
+ [3]byte{164, 148, 38}: "Elgama-Elektronika Ltd.",
[3]byte{164, 151, 187}: "Hitachi Industrial Equipment Systems Co.,Ltd",
- [3]byte{164, 153, 71}: "Huawei Technologies 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}: "Burroughs Payment Systems, Inc.",
+ [3]byte{164, 155, 19}: "Digital Check",
+ [3]byte{164, 155, 79}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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 (EAB)",
+ [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",
+ [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, 43}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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",
+ [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",
+ [3]byte{164, 209, 210}: "Apple, Inc.",
[3]byte{164, 211, 181}: "GLITEL Stropkov, s.r.o.",
+ [3]byte{164, 212, 178}: "Shenzhen MeiG Smart Technology Co.,Ltd",
+ [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, 49}: "Apple, Inc.",
+ [3]byte{164, 217, 144}: "Samsung Electronics Co.,Ltd",
+ [3]byte{164, 217, 164}: "neXus ID Solutions AB",
+ [3]byte{164, 218, 34}: "IEEE Registration Authority",
+ [3]byte{164, 218, 50}: "Texas Instruments",
[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 Limited",
+ [3]byte{164, 228, 184}: "BlackBerry RTS",
+ [3]byte{164, 229, 151}: "Gessler GmbH",
+ [3]byte{164, 230, 21}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+ [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, 234, 142}: "Extreme Networks, Inc.",
[3]byte{164, 235, 211}: "Samsung Electronics Co.,Ltd",
+ [3]byte{164, 237, 67}: "IEEE Registration Authority",
[3]byte{164, 237, 78}: "ARRIS Group, Inc.",
- [3]byte{164, 238, 87}: "SEIKO EPSON CORPORATION",
+ [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, 119}: "Mega Well Limited",
[3]byte{164, 252, 206}: "Security Expert Ltd.",
+ [3]byte{168, 1, 109}: "Aiwa Corporation",
[3]byte{168, 1, 128}: "IMAGO Technologies GmbH",
[3]byte{168, 6, 0}: "Samsung Electronics Co.,Ltd",
- [3]byte{168, 12, 13}: "Cisco",
+ [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, 16, 135}: "Texas Instruments",
+ [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, 22, 178}: "LG Electronics",
+ [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, 22, 208}: "Samsung Electronics Co.,Ltd",
[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, 29, 22}: "AzureWave Technologies, Inc",
+ [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",
+ [3]byte{168, 32, 102}: "Apple, Inc.",
+ [3]byte{168, 35, 254}: "LG Electronics",
[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, 185}: "Samsung Electronics Co.,Ltd",
[3]byte{168, 43, 214}: "Shina System Co., Ltd",
- [3]byte{168, 48, 173}: "Wei Fang Goertek Electronics Co.,Ltd",
+ [3]byte{168, 48, 173}: "WEIFANG GOERTEK ELECTRONICS CO.,LTD",
[3]byte{168, 50, 154}: "Digicom Futuristic Technologies Ltd.",
+ [3]byte{168, 54, 122}: "frogblue TECHNOLOGY GmbH",
[3]byte{168, 57, 68}: "Actiontec Electronics, Inc",
+ [3]byte{168, 62, 14}: "HMD Global Oy",
+ [3]byte{168, 63, 161}: "IEEE Registration Authority",
[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, 84, 178}: "Wistron Neweb Corp.",
+ [3]byte{168, 78, 63}: "Hitron Technologies. Inc",
+ [3]byte{168, 81, 91}: "Samsung Electronics Co.,Ltd",
+ [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, 90, 243}: "Shanghai Siflower Communication Technology Co., Ltd",
+ [3]byte{168, 91, 108}: "Robert Bosch Gmbh, CM-CI2",
+ [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, 10}: "ARDUINO AG",
[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 Elec Co.,Ltd",
+ [3]byte{168, 124, 1}: "Samsung Electronics Co.,Ltd",
+ [3]byte{168, 125, 18}: "HUAWEI TECHNOLOGIES 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, 179}: "Samsung Electronics Co.,Ltd",
[3]byte{168, 135, 237}: "ARC Wireless LLC",
- [3]byte{168, 136, 8}: "Apple",
+ [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",
- [3]byte{168, 146, 44}: "LG Electronics",
+ [3]byte{168, 142, 36}: "Apple, Inc.",
+ [3]byte{168, 144, 8}: "Beijing Yuecheng Technology Co. Ltd.",
+ [3]byte{168, 144, 66}: "Beijing Wanwei Intelligent 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, 138}: "Apple",
+ [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, 153, 105}: "Dell Inc.",
+ [3]byte{168, 154, 147}: "Sagemcom Broadband SAS",
[3]byte{168, 155, 16}: "inMotion Ltd.",
- [3]byte{168, 157, 210}: "Shanghai DareGlobal Technologies Co., Ltd",
+ [3]byte{168, 156, 164}: "Furrion Limited",
+ [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, 177, 212}: "Cisco Systems, Inc",
+ [3]byte{168, 178, 218}: "FUJITSU LIMITED",
+ [3]byte{168, 180, 86}: "Cisco Systems, Inc",
+ [3]byte{168, 184, 110}: "LG Electronics (Mobile Communications)",
[3]byte{168, 185, 179}: "ESSYS",
- [3]byte{168, 187, 207}: "Apple",
+ [3]byte{168, 187, 80}: "WiZ IoT Company Limited",
+ [3]byte{168, 187, 207}: "Apple, Inc.",
+ [3]byte{168, 188, 156}: "Cloud Light Technology Limited",
[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, 202, 185}: "SAMSUNG ELECTRO MECHANICS 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}: "Wachendorff Elektronik GmbH & Co. KG",
+ [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, 212, 152}: "Avira Operations GmbH & Co. KG",
+ [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, 218, 1}: "Shenzhen NUOLIJIA Digital Technology Co.,Ltd",
[3]byte{168, 224, 24}: "Nokia Corporation",
- [3]byte{168, 227, 238}: "Sony Computer Entertainment Inc.",
+ [3]byte{168, 227, 238}: "Sony Interactive Entertainment Inc.",
[3]byte{168, 229, 57}: "Moimstone Co.,Ltd",
+ [3]byte{168, 229, 82}: "JUWEL Aquarium AG & Co. KG",
+ [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, 242, 116}: "Samsung Electronics",
+ [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, 245, 172}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{168, 245, 221}: "ARRIS Group, Inc.",
[3]byte{168, 247, 224}: "PLANET Technology Corporation",
[3]byte{168, 249, 75}: "Eltex Enterprise Ltd.",
- [3]byte{168, 250, 216}: "Apple",
+ [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",
@@ -17476,375 +21320,655 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 7, 95}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 21, 133}: "silergy corp",
[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, 23, 200}: "Cisco Meraki",
+ [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, 53, 238}: "FN-LINK TECHNOLOGY LIMITED",
[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",
- [3]byte{172, 60, 11}: "Apple",
+ [3]byte{172, 58, 122}: "Roku, Inc.",
+ [3]byte{172, 59, 119}: "Sagemcom Broadband SAS",
+ [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}: "Revolabs 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, 80, 147}: "Magna Electronics Europe GmbH & Co. OHG",
+ [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, 116}: "China Mobile IOT Company Limited",
[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",
+ [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.,Ltd",
+ [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, 117, 29}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 127, 62}: "Apple",
+ [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",
+ [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, 146, 50}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 160, 22}: "CISCO SYSTEMS, INC.",
+ [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, 174, 25}: "Roku, 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",
+ [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, 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, 222, 72}: "PRIVATE",
+ [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, 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, 232, 123}: "Huawei Technologies 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",
- [3]byte{172, 247, 243}: "XIAOMI CORPORATION",
+ [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, 112}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{172, 249, 126}: "ELESYS INC.",
+ [3]byte{172, 253, 147}: "WEIFANG GOERTEK ELECTRONICS CO.,LTD",
[3]byte{172, 253, 206}: "Intel Corporate",
- [3]byte{172, 253, 236}: "Apple, Inc",
- [3]byte{176, 0, 180}: "Cisco",
+ [3]byte{172, 253, 236}: "Apple, Inc.",
+ [3]byte{176, 0, 180}: "Cisco Systems, Inc",
+ [3]byte{176, 2, 71}: "AMPAK Technology, Inc.",
+ [3]byte{176, 2, 126}: "MULLER SERVICES",
[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, 24, 134}: "SmarDTV",
+ [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, 129}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
+ [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, 52, 149}: "Apple",
+ [3]byte{176, 37, 170}: "Private",
+ [3]byte{176, 38, 40}: "Broadcom Limited",
+ [3]byte{176, 38, 128}: "Cisco Systems, Inc",
+ [3]byte{176, 42, 67}: "Google, Inc.",
+ [3]byte{176, 51, 166}: "Juniper Networks",
+ [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, 65, 111}: "Shenzhen Maxtang Computer Co.,Ltd",
[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, 72, 122}: "TP-LINK TECHNOLOGIES CO., LTD.",
+ [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, 83, 101}: "China Mobile IOT Company Limited",
+ [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, 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",
+ [3]byte{176, 101, 189}: "Apple, Inc.",
+ [3]byte{176, 103, 47}: "Bowers & Wilkins",
[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}: "Alcatel-Lucent",
- [3]byte{176, 117, 213}: "ZTE Corporation",
+ [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",
+ [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, 17}: "Texas Instruments",
+ [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, 131, 214}: "ARRIS Group, Inc.",
+ [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, 139, 207}: "Cisco Systems, Inc",
[3]byte{176, 142, 26}: "URadio Systems Co., Ltd",
[3]byte{176, 144, 116}: "Fulan Electronics Limited",
+ [3]byte{176, 144, 126}: "Cisco Systems, Inc",
+ [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, 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",
+ [3]byte{176, 159, 186}: "Apple, Inc.",
[3]byte{176, 161, 10}: "Pivotal Systems Corporation",
- [3]byte{176, 163, 126}: "Qingdao Haier Electronics Co.,Ltd",
+ [3]byte{176, 162, 231}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{176, 163, 126}: "QING DAO 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, 172, 250}: "Fujitsu Limited",
- [3]byte{176, 173, 170}: "Avaya, Inc",
+ [3]byte{176, 170, 54}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{176, 170, 119}: "Cisco Systems, Inc",
+ [3]byte{176, 172, 210}: "zte corporation",
+ [3]byte{176, 172, 250}: "FUJITSU LIMITED",
+ [3]byte{176, 173, 170}: "Avaya Inc",
+ [3]byte{176, 174, 37}: "Varikorea",
+ [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, 179, 173}: "HUMAX Co., Ltd.",
[3]byte{176, 180, 72}: "Texas Instruments",
+ [3]byte{176, 184, 103}: "Hewlett Packard Enterprise",
[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, 190, 118}: "TP-LINK TECHNOLOGIES CO.,LTD.",
[3]byte{176, 191, 153}: "WIZITDONGDO",
- [3]byte{176, 196, 231}: "Samsung Electronics",
+ [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, 195, 135}: "GOEFER, 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, 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, 215, 197}: "STP KFT",
+ [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, 231, 84}: "2Wire",
- [3]byte{176, 232, 146}: "SEIKO EPSON CORPORATION",
+ [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, 235, 87}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{176, 236, 113}: "Samsung Electronics Co.,Ltd",
[3]byte{176, 236, 143}: "GMX SAS",
- [3]byte{176, 238, 69}: "AzureWave Technologies, Inc.",
+ [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, 250, 235}: "Cisco",
- [3]byte{176, 254, 189}: "PRIVATE",
+ [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, 13}: "Amazon Technologies 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, 7, 249}: "SAMSUNG ELECTRO-MECHANICS",
+ [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, 120}: "Brusa Elektronik AG",
[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, 20, 137}: "CISCO SYSTEMS, INC.",
+ [3]byte{180, 15, 59}: "Tenda Technology Co.,Ltd.Dongguan branch",
+ [3]byte{180, 15, 179}: "vivo Mobile Communication Co., Ltd.",
+ [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",
+ [3]byte{180, 24, 209}: "Apple, Inc.",
+ [3]byte{180, 28, 48}: "zte corporation",
+ [3]byte{180, 29, 43}: "Shenzhen YOUHUA Technology Co., Ltd",
[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, 46, 153}: "GIGA-BYTE TECHNOLOGY CO.,LTD.",
+ [3]byte{180, 46, 248}: "Eline Technology co.Ltd",
+ [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.,Ltd",
+ [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, 67, 38}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{180, 71, 94}: "Avaya Inc",
+ [3]byte{180, 71, 245}: "Earda Technologies co Ltd",
+ [3]byte{180, 75, 210}: "Apple, Inc.",
+ [3]byte{180, 75, 214}: "IEEE Registration Authority",
[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, 82, 125}: "Sony Mobile Communications Inc",
+ [3]byte{180, 82, 126}: "Sony Mobile Communications Inc",
[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}: "raytest GmbH",
+ [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, 116, 159}: "askey computer corp",
+ [3]byte{180, 105, 33}: "Intel Corporate",
+ [3]byte{180, 107, 252}: "Intel Corporate",
+ [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 co., LTD.",
+ [3]byte{180, 119, 72}: "Shenzhen Neoway Technology Co.,Ltd.",
+ [3]byte{180, 121, 167}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{180, 121, 200}: "Ruckus Wireless",
[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, 129, 191}: "Meta-Networks, LLC",
[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, 130, 254}: "ASKEY COMPUTER CORP",
[3]byte{180, 133, 71}: "Amptown System Company GmbH",
+ [3]byte{180, 134, 85}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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 Company",
+ [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, 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, 168, 185}: "Cisco Systems, Inc",
+ [3]byte{180, 169, 79}: "MERCURY CORPORATION",
+ [3]byte{180, 169, 90}: "Avaya Inc",
+ [3]byte{180, 169, 132}: "Symantec Corporation",
+ [3]byte{180, 169, 252}: "Quanta Computer Inc.",
+ [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, 111}: "Circle Reliance, Inc.",
- [3]byte{180, 176, 23}: "Avaya, Inc",
- [3]byte{180, 179, 98}: "ZTE 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, 182, 134}: "Hewlett Packard",
[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, 192, 245}: "Shenzhen TINNO Mobile Technology Corp.",
+ [3]byte{180, 193, 112}: "Yi chip Microelectronics (Hangzhou) Co., Ltd",
[3]byte{180, 196, 78}: "VXL eTech Pvt Ltd",
- [3]byte{180, 199, 153}: "Motorola Solutions Inc.",
+ [3]byte{180, 198, 46}: "Molex CMS",
+ [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, 203, 87}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
[3]byte{180, 204, 233}: "PROSYST",
+ [3]byte{180, 205, 39}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{180, 206, 246}: "HTC Corporation",
+ [3]byte{180, 206, 254}: "James Czekaj",
[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, 221, 208}: "Continental Automotive Hungary Kft",
+ [3]byte{180, 222, 49}: "Cisco Systems, Inc",
+ [3]byte{180, 222, 223}: "zte corporation",
[3]byte{180, 223, 59}: "Chromlech",
[3]byte{180, 223, 250}: "Litemax Electronics Inc.",
+ [3]byte{180, 224, 29}: "CONCEPTION ELECTRONIQUE",
[3]byte{180, 224, 205}: "Fusion-io, Inc",
- [3]byte{180, 225, 235}: "PRIVATE",
- [3]byte{180, 233, 176}: "Cisco",
+ [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, 230, 45}: "Espressif Inc.",
+ [3]byte{180, 231, 130}: "Vivalnk",
+ [3]byte{180, 233, 163}: "port GmbH",
+ [3]byte{180, 233, 176}: "Cisco Systems, Inc",
+ [3]byte{180, 236, 2}: "ALPS ELECTRIC CO.,LTD.",
[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, 240, 171}: "Apple",
- [3]byte{180, 242, 232}: "Pace plc",
+ [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, 247, 161}: "LG Electronics (Mobile Communications)",
+ [3]byte{180, 248, 30}: "Kinova",
+ [3]byte{180, 249, 73}: "optilink networks pvt ltd",
+ [3]byte{180, 251, 228}: "Ubiquiti Networks Inc.",
+ [3]byte{180, 251, 249}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 23, 194}: "Apple",
+ [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, 37, 154}: "Thalmic Labs",
[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",
+ [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, 114}: "Dell Inc.",
[3]byte{184, 42, 220}: "EFR Europäische Funk-Rundsteuerung GmbH",
- [3]byte{184, 44, 160}: "Honeywell HomMed",
+ [3]byte{184, 44, 160}: "Resideo",
[3]byte{184, 48, 168}: "Road-Track Telematics Development",
+ [3]byte{184, 49, 181}: "Microsoft Corporation",
+ [3]byte{184, 50, 65}: "Wuhan Tianyu Information Industry Co., Ltd.",
[3]byte{184, 54, 216}: "Videoswitch",
- [3]byte{184, 56, 97}: "Cisco",
+ [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, 62, 89}: "Roku, Inc.",
[3]byte{184, 65, 95}: "ASP AG",
+ [3]byte{184, 65, 164}: "Apple, Inc.",
[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 Wireless Broadband(AWB), Corp.",
- [3]byte{184, 98, 31}: "CISCO SYSTEMS, INC.",
+ [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, 105, 244}: "Routerboard.com",
+ [3]byte{184, 106, 151}: "Edgecore Networks Corporation",
[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.",
@@ -17852,203 +21976,355 @@ var validMACPrefixMap = map[[3]byte]string{
[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}: "Decagon Devices, Inc.",
- [3]byte{184, 120, 46}: "Apple",
+ [3]byte{184, 119, 195}: "METER Group",
+ [3]byte{184, 120, 38}: "Nintendo Co.,Ltd",
+ [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, 111}: "NXP (China) Management Ltd.",
[3]byte{184, 124, 242}: "Aerohive Networks Inc.",
+ [3]byte{184, 129, 152}: "Intel Corporate",
+ [3]byte{184, 131, 3}: "Hewlett Packard Enterprise",
+ [3]byte{184, 133, 132}: "Dell Inc.",
+ [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, 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",
+ [3]byte{184, 138, 236}: "Nintendo Co.,Ltd",
+ [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, 54}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 154}: "Xin Shi Jia Technology (Beijing) Co.,Ltd",
+ [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, 159, 9}: "Wistron Neweb Corporation",
+ [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, 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 Company",
+ [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, 183, 241}: "Wistron Neweb Corporation",
+ [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, 190, 191}: "Cisco Systems, Inc",
+ [3]byte{184, 190, 244}: "devolo AG",
[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, 194, 39}: "PSTec",
+ [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",
+ [3]byte{184, 199, 74}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD",
+ [3]byte{184, 199, 93}: "Apple, Inc.",
[3]byte{184, 200, 85}: "Shanghai GBCOM Communication Technology Co.,Ltd.",
- [3]byte{184, 202, 58}: "Dell Inc",
+ [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, 216, 18}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
- [3]byte{184, 217, 206}: "Samsung Electronics",
+ [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, 222, 94}: "LONGCHEER TELECOMMUNICATION LIMITED",
[3]byte{184, 223, 107}: "SpotCam Co., Ltd.",
[3]byte{184, 229, 137}: "Payter BV",
- [3]byte{184, 230, 37}: "2Wire",
+ [3]byte{184, 230, 37}: "2Wire Inc",
[3]byte{184, 231, 121}: "9Solutions Oy",
- [3]byte{184, 232, 86}: "Apple",
+ [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",
+ [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, 249, 52}: "Sony Ericsson Mobile Communications AB",
+ [3]byte{184, 248, 131}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{184, 248, 190}: "BLUECOM",
+ [3]byte{184, 249, 52}: "Sony Mobile Communications Inc",
+ [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",
+ [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, 15, 167}: "Ouster",
[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, 22, 101}: "Cisco",
- [3]byte{188, 22, 245}: "Cisco",
+ [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, 32, 164}: "Samsung Electronics",
+ [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, 34, 251}: "RF Industries",
+ [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, 38, 67}: "Elprotronic Inc.",
+ [3]byte{188, 38, 199}: "Cisco Systems, Inc",
+ [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 Corp.",
- [3]byte{188, 52, 0}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
+ [3]byte{188, 48, 125}: "Wistron Neweb Corporation",
+ [3]byte{188, 48, 126}: "Wistron Neweb Corporation",
+ [3]byte{188, 48, 217}: "Arcadyan Corporation",
+ [3]byte{188, 50, 95}: "Zhejiang Dahua Technology Co., Ltd.",
+ [3]byte{188, 52, 0}: "IEEE Registration Authority",
[3]byte{188, 53, 229}: "Hydro Systems Company",
+ [3]byte{188, 56, 101}: "JWCNETWORKS",
[3]byte{188, 56, 210}: "Pandachip Limited",
[3]byte{188, 57, 166}: "CSUN System Technology Co.,LTD",
- [3]byte{188, 59, 175}: "Apple",
+ [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, 65, 0}: "Codaco Electronic s.r.o.",
+ [3]byte{188, 63, 78}: "Teleepoch Ltd",
+ [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}: "Alcatel-Lucent",
- [3]byte{188, 82, 183}: "Apple",
+ [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, 94, 161}: "PsiKick, Inc.",
[3]byte{188, 95, 244}: "ASRock Incorporation",
+ [3]byte{188, 95, 246}: "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, 102, 65}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
- [3]byte{188, 103, 28}: "Cisco",
- [3]byte{188, 103, 120}: "Apple",
+ [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, 107, 77}: "Alcatel-Lucent",
+ [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 Inc",
[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, 117, 150}: "Beijing Broadwit Technology Co., Ltd.",
[3]byte{188, 118, 78}: "Rackspace US, Inc.",
- [3]byte{188, 118, 112}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [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, 131, 167}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LT",
- [3]byte{188, 133, 31}: "Samsung Electronics",
+ [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 co.,LTD.",
- [3]byte{188, 141, 14}: "Alcatel-Lucent",
- [3]byte{188, 146, 107}: "Apple",
- [3]byte{188, 150, 128}: "Shenzhen Gongjin Electronics Co.,Ltd",
- [3]byte{188, 152, 137}: "Fiberhome Telecommunication Tech.Co.,Ltd.",
+ [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, 147, 37}: "Ningbo Joyson Preh Car Connect Co.,Ltd.",
+ [3]byte{188, 150, 128}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{188, 152, 137}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{188, 153, 17}: "Zyxel Communications Corporation",
[3]byte{188, 153, 188}: "FonSee Technology Inc.",
+ [3]byte{188, 155, 104}: "Technicolor CH USA 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, 165, 139}: "Samsung Electronics Co.,Ltd",
+ [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, 171, 124}: "TRnP KOREA Co Ltd",
+ [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, 175, 145}: "TE Connectivity Sensor Solutions",
[3]byte{188, 177, 129}: "SHARP CORPORATION",
- [3]byte{188, 177, 243}: "Samsung Electronics",
+ [3]byte{188, 177, 243}: "Samsung Electronics Co.,Ltd",
+ [3]byte{188, 178, 43}: "EM-Tech",
+ [3]byte{188, 179, 8}: "HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED",
[3]byte{188, 184, 82}: "Cybera, Inc.",
+ [3]byte{188, 184, 99}: "Apple, 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, 66}: "Panasonic System Networks Co., Ltd.",
+ [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}: "Tinno Mobile Technology Corp",
+ [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, 221, 194}: "Espressif Inc.",
[3]byte{188, 224, 157}: "Eoslink",
+ [3]byte{188, 225, 67}: "Apple, Inc.",
+ [3]byte{188, 226, 101}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 231, 150}: "Wireless CCTV 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",
+ [3]byte{188, 243, 16}: "Aerohive Networks Inc.",
+ [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, 254, 217}: "Apple, Inc.",
[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, 3, 128}: "Juniper Networks",
+ [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, 19, 43}: "Sichuan Changhong Electric Ltd.",
[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, 27, 35}: "SICHUAN TIANYI COMHEART TELECOM CO.,LTD",
[3]byte{192, 30, 155}: "Pixavi AS",
- [3]byte{192, 34, 80}: "PRIVATE",
+ [3]byte{192, 33, 13}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.",
+ [3]byte{192, 34, 80}: "Koss Corporation",
[3]byte{192, 37, 6}: "AVM GmbH",
- [3]byte{192, 37, 92}: "Cisco",
+ [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}: "Shen Zhen Horn audio Co., Ltd.",
+ [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",
@@ -18056,676 +22332,1151 @@ var validMACPrefixMap = map[[3]byte]string{
[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 Mochui Network Technology Co., Ltd",
+ [3]byte{192, 61, 70}: "Shanghai Sango Network Technology Co.,Ltd",
+ [3]byte{192, 61, 217}: "MitraStar Technology Corp.",
[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, 63, 213}: "Elitegroup Computer Systems Co.,Ltd.",
+ [3]byte{192, 64, 4}: "Medicaroid Corporation",
+ [3]byte{192, 65, 246}: "LG ELECTRONICS INC",
+ [3]byte{192, 66, 208}: "Juniper Networks",
[3]byte{192, 67, 1}: "Epec Oy",
[3]byte{192, 68, 227}: "Shenzhen Sinkna Electronics Co., LTD",
+ [3]byte{192, 72, 230}: "Samsung Electronics Co.,Ltd",
+ [3]byte{192, 72, 251}: "Shenzhen JingHanDa 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, 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, 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",
+ [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",
+ [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, 123, 188}: "Cisco",
+ [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, 116, 173}: "Grandstream Networks, Inc.",
+ [3]byte{192, 120, 120}: "FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.",
+ [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, 53}: "Ningbo Forfan technology Co., LTD",
[3]byte{192, 129, 112}: "Effigis GeoSolutions",
- [3]byte{192, 131, 10}: "2Wire",
- [3]byte{192, 132, 122}: "Apple",
+ [3]byte{192, 131, 10}: "2Wire Inc",
+ [3]byte{192, 131, 89}: "IEEE Registration Authority",
+ [3]byte{192, 132, 122}: "Apple, Inc.",
+ [3]byte{192, 132, 125}: "AMPAK Technology, 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",
+ [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, 218}: "China Mobile IOT Company Limited",
[3]byte{192, 152, 229}: "University of Michigan",
+ [3]byte{192, 154, 113}: "XIAMEN MEITU MOBILE TECHNOLOGY CO.LTD",
+ [3]byte{192, 154, 208}: "Apple, Inc.",
+ [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, 66}: "Apple",
+ [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, 166, 0}: "Apple, Inc.",
+ [3]byte{192, 168, 240}: "Adamson Systems Engineering",
[3]byte{192, 170, 104}: "OSASI Technos Inc.",
- [3]byte{192, 172, 84}: "SAGEMCOM",
+ [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, 182, 88}: "Apple, Inc.",
+ [3]byte{192, 182, 249}: "Intel Corporate",
+ [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, 200}: "Samsung Electronics Co.,Ltd",
+ [3]byte{192, 189, 209}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)",
+ [3]byte{192, 191, 167}: "Juniper Networks",
+ [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, 68}: "SAGEMCOM",
- [3]byte{192, 217, 98}: "Askey Computer Corp.",
+ [3]byte{192, 208, 18}: "Apple, Inc.",
+ [3]byte{192, 208, 68}: "Sagemcom Broadband SAS",
+ [3]byte{192, 208, 255}: "China Mobile IOT Company Limited",
+ [3]byte{192, 210, 243}: "Hui Zhou Gaoshengda Technology Co.,LTD",
+ [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, 229, 78}: "DENX Computer Systems GmbH",
+ [3]byte{192, 228, 45}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{192, 229, 78}: "ARIES Embedded GmbH",
+ [3]byte{192, 232, 98}: "Apple, Inc.",
[3]byte{192, 234, 228}: "Sonicwall",
+ [3]byte{192, 238, 64}: "Laird Technologies",
+ [3]byte{192, 238, 181}: "Enice Network.",
[3]byte{192, 238, 251}: "OnePlus Tech (Shenzhen) Ltd",
[3]byte{192, 241, 196}: "Pacidal Corporation Ltd.",
- [3]byte{192, 242, 251}: "Apple",
+ [3]byte{192, 242, 251}: "Apple, Inc.",
+ [3]byte{192, 244, 230}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 0, 173}: "Advantech Technology (CHINA) Co., Ltd.",
[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 INC.,",
- [3]byte{196, 5, 40}: "Huawei Technologies Co., Ltd",
- [3]byte{196, 8, 74}: "Alcatel-Lucent",
+ [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, 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, 20, 60}: "Cisco",
+ [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, 33, 200}: "KYOCERA CORPORATION",
[3]byte{196, 35, 122}: "WhizNets Inc.",
+ [3]byte{196, 35, 162}: "PT. Emsonic Indonesia",
[3]byte{196, 36, 46}: "Galvanic Applied Sciences Inc",
+ [3]byte{196, 36, 86}: "Palo Alto Networks",
[3]byte{196, 38, 40}: "Airo Wireless",
- [3]byte{196, 39, 149}: "Technicolor USA Inc.",
+ [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",
+ [3]byte{196, 44, 3}: "Apple, Inc.",
+ [3]byte{196, 44, 79}: "Qingdao Hisense Mobile Communication Technology Co,Ltd",
+ [3]byte{196, 47, 144}: "Hangzhou Hikvision Digital Technology Co.,Ltd.",
+ [3]byte{196, 48, 24}: "MCS Logic Inc.",
+ [3]byte{196, 51, 6}: "China Mobile Group Device Co.,Ltd.",
[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 Inc",
[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",
+ [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, 79, 51}: "Espressif Inc.",
[3]byte{196, 80, 6}: "Samsung Electronics Co.,Ltd",
+ [3]byte{196, 81, 141}: "Shenzhen YOUHUA Technology 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, 110}: "Samsung Electronics Co.,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, 97, 139}: "Apple, Inc.",
[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, 100, 19}: "Cisco Systems, Inc",
+ [3]byte{196, 100, 227}: "Texas Instruments",
+ [3]byte{196, 102, 153}: "vivo Mobile Communication Co., Ltd.",
[3]byte{196, 103, 181}: "Libratone A/S",
- [3]byte{196, 106, 183}: "Xiaomi Technology,Inc.",
+ [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, 110, 31}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{196, 110, 123}: "SHENZHEN RF-LINK TECHNOLOGY 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, 254}: "CISCO SYSTEMS, INC.",
- [3]byte{196, 115, 30}: "Samsung Eletronics Co., Ltd",
+ [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, 116, 248}: "Hot Pepper, Inc.",
+ [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, 125, 79}: "CISCO SYSTEMS, INC.",
- [3]byte{196, 125, 204}: "Motorola Solutions 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, 132, 102}: "Apple, Inc.",
[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, 147, 217}: "Samsung Electronics Co.,Ltd",
+ [3]byte{196, 149, 0}: "Amazon Technologies Inc.",
[3]byte{196, 149, 162}: "SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD",
[3]byte{196, 152, 5}: "Minieum Networks, Inc",
+ [3]byte{196, 152, 92}: "Hui Zhou Gaoshengda Technology Co.,LTD",
+ [3]byte{196, 152, 128}: "Apple, 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, 76}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 184, 180}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 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}: "D&D GROUP sp. z o.o.",
+ [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, 6}: "Piper Networks, Inc.",
+ [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}: "Oclaro, Inc.",
+ [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, 253, 230}: "DRTECH",
+ [3]byte{196, 254, 226}: "AMICCOM Electronics Corporation",
+ [3]byte{196, 255, 31}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{196, 255, 188}: "IEEE Registration Authority",
+ [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, 10, 169}: "Quanta Computer Inc.",
- [3]byte{200, 14, 119}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Co.,Ltd",
+ [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, 189}: "HISENSE ELECTRIC 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, 31, 102}: "Dell Inc",
+ [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",
+ [3]byte{200, 42, 20}: "Apple, Inc.",
+ [3]byte{200, 46, 71}: "Suzhou SmartChip Semiconductor Co., LTD",
[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",
+ [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, 59, 69}: "JRI-Maxant",
+ [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}: "Shanghai Enlogic Electric Technology Co., Ltd.",
+ [3]byte{200, 69, 68}: "Asia Pacific CIS (Wuxi) Co, Ltd",
+ [3]byte{200, 69, 143}: "Wyler AG",
+ [3]byte{200, 71, 130}: "Areson Technology Corp.",
+ [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, 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, 84, 75}: "Zyxel Communications Corporation",
[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 Corp",
+ [3]byte{200, 108, 135}: "Zyxel Communications Corporation",
[3]byte{200, 108, 182}: "Optcom Co., Ltd.",
- [3]byte{200, 111, 29}: "Apple",
+ [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, 101}: "Tiesse SpA",
+ [3]byte{200, 119, 139}: "Mercury Systems – Trusted Mission Solutions, Inc.",
[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",
+ [3]byte{200, 133, 80}: "Apple, Inc.",
+ [3]byte{200, 134, 41}: "Shenzhen Duubee Intelligent Technologies Co.,LTD.",
+ [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, 143, 38}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd",
[3]byte{200, 144, 62}: "Pakton Technologies",
- [3]byte{200, 145, 249}: "SAGEMCOM",
+ [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 SYSTEM CO., LTD.",
+ [3]byte{200, 156, 19}: "Inspiremobile",
+ [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, 204}: "PRIVATE",
+ [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, 177, 238}: "Qorvo",
+ [3]byte{200, 178, 30}: "CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.",
[3]byte{200, 179, 115}: "Cisco-Linksys, LLC",
- [3]byte{200, 181, 183}: "Apple",
- [3]byte{200, 186, 148}: "Samsung Electro Mechanics co., LTD.",
+ [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, 186, 233}: "QDIS",
[3]byte{200, 187, 211}: "Embrane",
- [3]byte{200, 188, 200}: "Apple",
+ [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, 194, 245}: "FLEXTRONICS MANUFACTURING(ZHUHAI)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",
+ [3]byte{200, 205, 114}: "Sagemcom Broadband SAS",
[3]byte{200, 208, 25}: "Shanghai Tigercel Communication Technology Co.,Ltd",
+ [3]byte{200, 208, 131}: "Apple, Inc.",
[3]byte{200, 209, 11}: "Nokia Corporation",
- [3]byte{200, 209, 94}: "Huawei Technologies Co., Ltd",
+ [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 Consumer Products, LLC",
+ [3]byte{200, 215, 25}: "Cisco-Linksys, LLC",
+ [3]byte{200, 215, 121}: "QING DAO HAIER TELECOM CO.,LTD.",
+ [3]byte{200, 215, 176}: "Samsung Electronics Co.,Ltd",
+ [3]byte{200, 217, 210}: "Hewlett Packard",
+ [3]byte{200, 219, 38}: "Logitech",
[3]byte{200, 221, 201}: "Lenovo Mobile Communication Technology Ltd.",
- [3]byte{200, 222, 81}: "Integra Networks, Inc.",
+ [3]byte{200, 222, 81}: "IntegraOptics",
+ [3]byte{200, 222, 201}: "Coriant",
[3]byte{200, 223, 124}: "Nokia Corporation",
- [3]byte{200, 224, 235}: "Apple",
+ [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, 216}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
+ [3]byte{200, 231, 118}: "PTCOM Technology",
+ [3]byte{200, 231, 216}: "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",
+ [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, 249}: "CISCO SYSTEMS, INC.",
+ [3]byte{200, 249, 200}: "NewSharp Technology(SuZhou)Co,Ltd",
+ [3]byte{200, 249, 249}: "Cisco Systems, Inc",
+ [3]byte{200, 250, 225}: "ARQ Digital LLC",
[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, 250}: "Technicolor CH USA",
+ [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, 224}: "Apple",
+ [3]byte{204, 8, 141}: "Apple, Inc.",
+ [3]byte{204, 8, 224}: "Apple, Inc.",
+ [3]byte{204, 8, 251}: "TP-LINK TECHNOLOGIES CO.,LTD.",
[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, 33, 25}: "Samsung Electronics Co.,Ltd",
[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, 183}: "Apple, 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 SAS",
+ [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 USA Inc.",
+ [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, 59, 88}: "Curiouser Products Inc",
[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, 74, 225}: "fourtec -Fourier Technologies",
+ [3]byte{204, 75, 115}: "AMPAK Technology, Inc.",
[3]byte{204, 75, 251}: "Hellberg Safety AB",
+ [3]byte{204, 77, 56}: "Carnegie Technologies",
[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, 80, 227}: "Espressif Inc.",
+ [3]byte{204, 81, 180}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
[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, 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, 114, 134}: "Xi'an Fengyu Information Technology Co., Ltd.",
+ [3]byte{204, 115, 20}: "HONG KONG WHEATEK TECHNOLOGY LIMITED",
[3]byte{204, 116, 152}: "Filmetrics Inc.",
+ [3]byte{204, 117, 226}: "ARRIS Group, Inc.",
[3]byte{204, 118, 105}: "SEETECH",
- [3]byte{204, 120, 95}: "Apple",
+ [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, 123, 97}: "NIKKISO CO., LTD.",
[3]byte{204, 125, 55}: "ARRIS Group, Inc.",
- [3]byte{204, 126, 231}: "Panasonic AVC Networks Company",
+ [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, 142, 113}: "Cisco Systems, Inc",
[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, 147, 74}: "Sierra Wireless",
[3]byte{204, 148, 74}: "Pfeiffer Vacuum GmbH",
- [3]byte{204, 149, 215}: "VIZIO, Inc",
- [3]byte{204, 150, 160}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [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, 139}: "SONY Visual Products Inc.",
+ [3]byte{204, 152, 145}: "Cisco Systems, Inc",
+ [3]byte{204, 153, 22}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
[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, 35}: "Huawei Technologies Co., Ltd",
+ [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, 187, 254}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 192, 121}: "Murata Manufacturing Co., Ltd.",
[3]byte{204, 193, 4}: "Applied Technical Systems",
- [3]byte{204, 195, 234}: "Motorola Mobility LLC",
+ [3]byte{204, 194, 224}: "Raisecom Technology CO., LTD",
+ [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, 229}: "Dell Inc.",
+ [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, 201, 44}: "Schindler - PORT Technology",
[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, 213, 57}: "Cisco",
+ [3]byte{204, 211, 30}: "IEEE Registration Authority",
+ [3]byte{204, 211, 193}: "Vestel Elektronik San ve Tic. A.Ş.",
+ [3]byte{204, 211, 226}: "Jiangsu Yinhe Electronics Co.,Ltd.",
+ [3]byte{204, 212, 161}: "MitraStar Technology Corp.",
+ [3]byte{204, 213, 57}: "Cisco Systems, Inc",
[3]byte{204, 216, 17}: "Aiconn Technology Corporation",
- [3]byte{204, 216, 193}: "Cisco",
+ [3]byte{204, 216, 193}: "Cisco Systems, Inc",
[3]byte{204, 217, 233}: "SCR Engineers Ltd.",
- [3]byte{204, 225, 127}: "juniper networks",
- [3]byte{204, 225, 213}: "Buffalo Inc.",
+ [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}: "Deto Mechatronic GmbH",
- [3]byte{204, 239, 72}: "CISCO SYSTEMS, INC.",
+ [3]byte{204, 238, 217}: "VAHLE Automation GmbH",
+ [3]byte{204, 239, 72}: "Cisco Systems, Inc",
+ [3]byte{204, 240, 253}: "China Mobile (Hangzhou) Information Technology Co., Ltd.",
[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, 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",
+ [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, 254, 60}: "Samsung Electronics",
+ [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, 3, 223}: "Samsung Electronics Co.,Ltd",
+ [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, 22, 180}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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 - Please see MAM public listing for more information.",
- [3]byte{208, 34, 190}: "Samsung Electro Mechanics co.,LTD.",
- [3]byte{208, 35, 219}: "Apple",
- [3]byte{208, 39, 136}: "Hon Hai Precision Ind.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}: "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, 43, 32}: "Apple, Inc.",
[3]byte{208, 44, 69}: "littleBits Electronics, Inc.",
- [3]byte{208, 45, 179}: "Huawei Technologies Co., Ltd",
+ [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, 79, 126}: "Apple",
+ [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, 81, 98}: "Sony Mobile Communications Inc",
[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, 87, 76}: "CISCO SYSTEMS, INC.",
+ [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, 88, 252}: "BSkyB Ltd",
+ [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, 102, 123}: "Samsung Electronics Co., LTD",
- [3]byte{208, 103, 229}: "Dell Inc",
+ [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, 114, 220}: "Cisco",
+ [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 - Please see MAM public listing for more information.",
- [3]byte{208, 122, 181}: "Huawei Technologies Co., Ltd",
+ [3]byte{208, 118, 80}: "IEEE Registration Authority",
+ [3]byte{208, 118, 231}: "TP-LINK TECHNOLOGIES CO.,LTD.",
+ [3]byte{208, 119, 20}: "Motorola Mobility LLC, a Lenovo Company",
+ [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, 132, 176}: "Sagemcom",
+ [3]byte{208, 127, 160}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 127, 196}: "Ou Wei Technology Co.,Ltd. of Shenzhen City",
+ [3]byte{208, 129, 122}: "Apple, Inc.",
+ [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, 138, 145}: "Technicolor CH USA Inc.",
[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, 146, 250}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [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, 179, 63}: "SHENZHEN TINNO MOBILE TECHNOLOGY CO.,LTD.",
+ [3]byte{208, 176, 205}: "Moen",
+ [3]byte{208, 177, 40}: "Samsung Electronics Co.,Ltd",
+ [3]byte{208, 178, 20}: "PoeWit Inc",
+ [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, 182, 10}: "Xingluo Technology Company Limited",
+ [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, 194, 130}: "Cisco Systems, Inc",
[3]byte{208, 196, 47}: "Tamagawa Seiki Co.,Ltd.",
- [3]byte{208, 199, 137}: "Cisco",
+ [3]byte{208, 197, 211}: "AzureWave Technology Inc.",
+ [3]byte{208, 197, 216}: "LATECOERE",
+ [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, 253}: "CISCO SYSTEMS, INC.",
+ [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, 215, 131}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 225, 64}: "Apple, Inc.",
[3]byte{208, 227, 71}: "Yoga",
[3]byte{208, 228, 11}: "Wearable Inc.",
- [3]byte{208, 229, 77}: "Pace plc",
- [3]byte{208, 231, 130}: "Azurewave Technologies, 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, 239, 193}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{208, 240, 219}: "Ericsson",
[3]byte{208, 242, 127}: "SteadyServ Technoligies, LLC",
- [3]byte{208, 247, 59}: "Helmut Mauell GmbH",
+ [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, 255, 80}: "Texas Instruments, Inc",
+ [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 Corporation",
+ [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, 67}: "AMPAK Technology, 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}: "TVI Vision Oy",
+ [3]byte{212, 31, 12}: "JAI Oy",
[3]byte{212, 32, 109}: "HTC Corporation",
- [3]byte{212, 33, 34}: "Sercomm 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, 96}: "GoPro",
[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 Inc",
[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, 96, 227}: "Sercomm Corporation.",
+ [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, 218}: "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 Tech.Co.,Ltd.",
+ [3]byte{212, 102, 168}: "Riedo Networks Ltd",
+ [3]byte{212, 103, 97}: "United Gulf Gate Co.",
+ [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, 105, 165}: "Miura Systems Ltd.",
+ [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, 110, 92}: "Huawei Technologies Co., Ltd",
+ [3]byte{212, 109, 80}: "Cisco Systems, Inc",
+ [3]byte{212, 109, 109}: "Intel Corporate",
+ [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, 114, 38}: "zte corporation",
+ [3]byte{212, 116, 27}: "Beijing HuaDa ZhiBao Electronic System Co.,Ltd.",
+ [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, 124, 68}: "IEEE Registration Authority",
+ [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, 133, 100}: "Hewlett-Packard Company",
- [3]byte{212, 135, 216}: "Samsung Electronics",
+ [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, 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, 156}: "Apple, Inc.",
+ [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 CORPORATION",
- [3]byte{212, 154, 32}: "Apple",
- [3]byte{212, 156, 40}: "JayBird Gear LLC",
+ [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, 156, 244}: "Palo Alto Networks",
+ [3]byte{212, 158, 5}: "zte corporation",
[3]byte{212, 158, 109}: "Wuhan Zhongyuan Huadian Science & Technology Co.,",
- [3]byte{212, 160, 42}: "CISCO SYSTEMS, INC.",
+ [3]byte{212, 160, 42}: "Cisco Systems, Inc",
+ [3]byte{212, 161, 72}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 163, 61}: "Apple, Inc.",
[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, 171, 130}: "ARRIS Group, Inc.",
[3]byte{212, 172, 78}: "BODi rS, LLC",
- [3]byte{212, 173, 45}: "Fiberhome Telecommunication Tech.Co.,Ltd.",
- [3]byte{212, 174, 82}: "Dell Inc",
+ [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, 190, 217}: "Dell Inc",
+ [3]byte{212, 184, 255}: "Home Control Singapore Pte Ltd",
+ [3]byte{212, 189, 30}: "5VT Technologies,Taiwan 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, 158}: "Ruckus Wireless",
+ [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, 75}: "Motorola Mobility LLC, a Lenovo Company",
+ [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, 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}: "Alcatel-Lucent",
- [3]byte{212, 232, 178}: "Samsung Electronics",
- [3]byte{212, 234, 14}: "Avaya, Inc",
+ [3]byte{212, 227, 63}: "Nokia",
+ [3]byte{212, 230, 183}: "Samsung Electronics Co.,Ltd",
+ [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, 244, 111}: "Apple",
+ [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{216, 0, 77}: "Apple",
+ [3]byte{212, 247, 134}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{212, 249, 161}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{212, 252, 19}: "Fiberhome Telecommunication 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, 23}: "TP-LINK TECHNOLOGIES CO.,LTD.",
[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, 24, 211}: "Juniper Networks",
+ [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, 28, 121}: "Apple, Inc.",
+ [3]byte{216, 29, 114}: "Apple, Inc.",
[3]byte{216, 30, 222}: "B&W Group Ltd",
- [3]byte{216, 36, 189}: "CISCO SYSTEMS, INC.",
- [3]byte{216, 37, 34}: "Pace plc",
- [3]byte{216, 38, 185}: "Guangdong Coagent Electronics S &T Co., 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, 119}: "Universal Electric Corporation",
+ [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",
@@ -18734,245 +23485,465 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [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, 50, 227}: "Xiaomi Communications Co Ltd",
[3]byte{216, 51, 127}: "Office FA.com Co.,Ltd.",
- [3]byte{216, 60, 105}: "Tinno Mobile Technology Corp",
+ [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, 68, 92}: "DEV Tecnologia Ind Com Man Eq LTDA",
+ [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, 87, 239}: "Samsung Electronics",
+ [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, 93, 76}: "TP-LINK Technologies Co.,Ltd.",
+ [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, 251}: "PRIVATE",
+ [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, 103, 217}: "Cisco Systems, Inc",
+ [3]byte{216, 104, 195}: "Samsung Electronics Co.,Ltd",
[3]byte{216, 105, 96}: "Steinsvik",
[3]byte{216, 107, 247}: "Nintendo Co., Ltd.",
- [3]byte{216, 108, 233}: "SAGEMCOM SAS",
+ [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, 121, 136}: "Hon Hai Precision Ind. Co.,Ltd.",
[3]byte{216, 124, 221}: "SANIX INCORPORATED",
+ [3]byte{216, 125, 127}: "Sagemcom Broadband SAS",
[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",
+ [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, 145, 42}: "Zyxel Communications Corporation",
+ [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",
+ [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, 156, 103}: "Hon Hai Precision Ind. Co.,Ltd.",
[3]byte{216, 157, 103}: "Hewlett Packard",
[3]byte{216, 157, 185}: "eMegatech International Corp.",
- [3]byte{216, 158, 63}: "Apple",
- [3]byte{216, 162, 94}: "Apple",
+ [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, 166, 253}: "Ghost Locomotion",
+ [3]byte{216, 167, 86}: "Sagemcom Broadband SAS",
+ [3]byte{216, 169, 139}: "Texas Instruments",
+ [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, 46}: "Guangzhou Zonerich Business Machine Co., LTD.",
[3]byte{216, 176, 76}: "Jinan USR IOT Technology Co., Ltd.",
- [3]byte{216, 177, 42}: "Panasonic Mobile Communications 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",
+ [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",
- [3]byte{216, 209, 203}: "Apple",
+ [3]byte{216, 206, 58}: "Xiaomi Communications 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 Company",
+ [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, 214, 243}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
+ [3]byte{216, 215, 35}: "IDS, Inc",
+ [3]byte{216, 215, 117}: "Sagemcom Broadband SAS",
+ [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 Limited",
+ [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, 242, 202}: "Intel Corporate",
+ [3]byte{216, 243, 219}: "Post CH AG",
[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, 15}: "Apple, Inc.",
+ [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, 14, 161}: "COMPAL INFORMATION (KUNSHAN) CO., LTD",
+ [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, 22, 178}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 33, 185}: "Sentec Co.Ltd",
+ [3]byte{220, 40, 52}: "HAKKO Corporation",
+ [3]byte{220, 41, 25}: "AltoBeam (Xiamen) Technology Ltd, Co.",
+ [3]byte{220, 41, 58}: "Shenzhen Nuoshi Technology Co., LTD.",
[3]byte{220, 42, 20}: "Shanghai Longjing Technology Co.",
- [3]byte{220, 43, 97}: "Apple",
+ [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}: "QING DAO 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, 87}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
[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, 56, 225}: "Juniper Networks",
+ [3]byte{220, 57, 121}: "Cisco Systems, Inc",
+ [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, 65, 229}: "Shenzhen Zhixin Data Service Co., Ltd.",
+ [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, 78, 244}: "Shenzhen MTN Electronics 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, 86, 231}: "Apple, Inc.",
[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",
- [3]byte{220, 123, 148}: "CISCO SYSTEMS, INC.",
+ [3]byte{220, 112, 20}: "Private",
+ [3]byte{220, 113, 68}: "SAMSUNG ELECTRO MECHANICS CO., LTD.",
+ [3]byte{220, 114, 155}: "HUAWEI TECHNOLOGIES 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, 133, 222}: "Azurewave Technologies., inc.",
- [3]byte{220, 134, 216}: "Apple, Inc",
+ [3]byte{220, 130, 246}: "iPort",
+ [3]byte{220, 133, 222}: "AzureWave Technology Inc.",
+ [3]byte{220, 134, 216}: "Apple, Inc.",
+ [3]byte{220, 139, 40}: "Intel Corporate",
+ [3]byte{220, 144, 136}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{220, 153, 20}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{220, 154, 142}: "Nanjing Cocomm electronics co., LTD",
[3]byte{220, 155, 30}: "Intercom, Inc.",
- [3]byte{220, 155, 156}: "Apple",
+ [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, 165, 244}: "Cisco",
+ [3]byte{220, 159, 219}: "Ubiquiti Networks Inc.",
+ [3]byte{220, 162, 102}: "Hon Hai Precision Ind. Co.,Ltd.",
+ [3]byte{220, 163, 51}: "Shenzhen YOUHUA Technology Co., Ltd",
+ [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}: "Burkert Werke GmbH",
+ [3]byte{220, 175, 104}: "WEIFANG GOERTEK ELECTRONICS CO.,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, 172}: "FLEXTRONICS MANUFACTURING(ZHUHAI)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.,tld",
+ [3]byte{220, 211, 33}: "HUMAX Co., Ltd.",
+ [3]byte{220, 211, 162}: "Apple, Inc.",
[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, 218, 128}: "New H3C Technologies Co., Ltd",
+ [3]byte{220, 219, 112}: "Tonfunk Systementwicklung und Service GmbH",
+ [3]byte{220, 220, 7}: "TRP Systems BV",
+ [3]byte{220, 221, 36}: "Energica Motor Company SpA",
+ [3]byte{220, 222, 79}: "Gionee Communication Equipment Co Ltd",
[3]byte{220, 222, 202}: "Akyllor",
+ [3]byte{220, 224, 38}: "Patrol Tag, Inc",
+ [3]byte{220, 224, 235}: "Nanjing Aozheng Information Technology Co.Ltd",
+ [3]byte{220, 225, 173}: "Shenzhen Wintop Photoelectric Technology Co., Ltd",
[3]byte{220, 226, 172}: "Lumens Digital Optics Inc.",
+ [3]byte{220, 227, 5}: "ZAO NPK Rotek",
+ [3]byte{220, 229, 51}: "IEEE Registration Authority",
[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, 244, 1}: "Dell Inc.",
+ [3]byte{220, 245, 5}: "AzureWave Technology Inc.",
+ [3]byte{220, 247, 25}: "Cisco Systems, Inc",
[3]byte{220, 247, 85}: "SITRONIK",
+ [3]byte{220, 247, 86}: "Samsung Electronics Co.,Ltd",
[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{224, 5, 197}: "TP-LINK Technologies Co.,Ltd.",
+ [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}: "PRIVATE",
+ [3]byte{224, 13, 185}: "Cree, Inc.",
+ [3]byte{224, 14, 218}: "Cisco Systems, Inc",
+ [3]byte{224, 14, 225}: "We Corporation Inc.",
[3]byte{224, 16, 127}: "Ruckus Wireless",
+ [3]byte{224, 18, 131}: "Shenzhen Fanzhuo Communication Technology Co., Lt",
+ [3]byte{224, 19, 181}: "vivo Mobile Communication Co., Ltd.",
[3]byte{224, 20, 62}: "Modoosis Inc.",
- [3]byte{224, 24, 119}: "Fujitsu Limited",
+ [3]byte{224, 24, 119}: "FUJITSU LIMITED",
+ [3]byte{224, 24, 159}: "EM Microelectronic",
+ [3]byte{224, 25, 29}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{224, 25, 216}: "BH TECHNOLOGIES",
+ [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, 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, 47, 109}: "Cisco",
+ [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, 51, 142}: "Apple, Inc.",
+ [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, 56, 63}: "zte corporation",
[3]byte{224, 57, 215}: "Plexxi, Inc.",
[3]byte{224, 60, 91}: "SHENZHEN JIAXINJIE ELECTRON CO.,LTD",
- [3]byte{224, 62, 68}: "Broadcom Corporation",
+ [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, 69, 109}: "China Mobile Group Device Co.,Ltd.",
[3]byte{224, 70, 154}: "NETGEAR",
+ [3]byte{224, 70, 229}: "Gosuncn Technology Group Co., Ltd.",
+ [3]byte{224, 72, 175}: "Premietech Limited",
+ [3]byte{224, 72, 211}: "MOBIWIRE MOBILES (NINGBO) CO.,LTD",
+ [3]byte{224, 73, 237}: "Audeze LLC",
+ [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, 92}: "Oy Everon Ab",
[3]byte{224, 93, 166}: "Detlef Fink Elektronik & Softwareentwicklung",
- [3]byte{224, 95, 185}: "CISCO SYSTEMS, INC.",
+ [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, 103}: "Xiaomi Communications 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, 99, 218}: "Ubiquiti Networks Inc.",
+ [3]byte{224, 99, 229}: "Sony Mobile Communications Inc",
[3]byte{224, 100, 187}: "DigiView S.r.l.",
- [3]byte{224, 102, 120}: "Apple",
+ [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 ERECTORIC CO.,LTD.",
- [3]byte{224, 117, 125}: "Motorola Mobility LLC",
+ [3]byte{224, 115, 95}: "NUCOM",
+ [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, 121, 94}: "Wuxi Xiaohu Technology Co.,Ltd.",
+ [3]byte{224, 124, 19}: "zte corporation",
[3]byte{224, 124, 98}: "Whistle Labs, Inc.",
+ [3]byte{224, 125, 234}: "Texas Instruments",
[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, 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",
@@ -18980,51 +23951,80 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 165, 9}: "Bitmain Technologies Inc",
[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, 241}: "Cisco",
- [3]byte{224, 174, 94}: "ALPS Co,. Ltd.",
+ [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, 175, 79}: "Deutsche Telekom AG",
[3]byte{224, 178, 241}: "FN-LINK TECHNOLOGY LIMITED",
- [3]byte{224, 181, 45}: "Apple",
- [3]byte{224, 183, 177}: "Pace plc",
- [3]byte{224, 185, 165}: "Azurewave",
- [3]byte{224, 185, 186}: "Apple",
+ [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, 186, 180}: "Arrcus, Inc",
[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, 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",
+ [3]byte{224, 201, 122}: "Apple, Inc.",
[3]byte{224, 202, 77}: "Shenzhen Unistar Communication Co.,LTD",
- [3]byte{224, 202, 148}: "Askey Computer",
- [3]byte{224, 203, 29}: "PRIVATE",
+ [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, 85}: "Dell Inc",
+ [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 Electrical Apparatus Ltd., Suzhou Chengdu Branch",
+ [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, 46}: "TCT mobile ltd",
[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",
@@ -19032,294 +24032,539 @@ var validMACPrefixMap = map[[3]byte]string{
[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",
+ [3]byte{224, 245, 198}: "Apple, Inc.",
[3]byte{224, 245, 202}: "CHENG UEI PRECISION INDUSTRY CO.,LTD.",
- [3]byte{224, 248, 71}: "Apple",
+ [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, 14, 238}: "HUAWEI TECHNOLOGIES CO.,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, 31, 233}: "Dunkermotoren GmbH",
+ [3]byte{228, 34, 165}: "PLANTRONICS, INC.",
[3]byte{228, 35, 84}: "SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD",
- [3]byte{228, 37, 231}: "Apple",
+ [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 Limited",
- [3]byte{228, 47, 38}: "Fiberhome Telecommunication Tech.Co.,Ltd.",
+ [3]byte{228, 45, 2}: "TCT mobile ltd",
+ [3]byte{228, 45, 123}: "China Mobile IOT Company Limited",
+ [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, 48, 34}: "Hanwha Techwin Security Vietnam",
[3]byte{228, 50, 203}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 52, 147}: "HUAWEI TECHNOLOGIES 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, 140}: "Digital Products Limited",
[3]byte{228, 56, 242}: "Advantage Controls",
+ [3]byte{228, 58, 110}: "Shenzhen Zeroone Technology CO.,LTD",
+ [3]byte{228, 60, 128}: "University of Oklahoma",
+ [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, 67, 75}: "Dell Inc.",
[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, 78, 118}: "CHAMPIONTECH ENTERPRISE (SHENZHEN) INC",
[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, 93, 82}: "Avaya, 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, 96, 89}: "Pingtek 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, 124, 249}: "Samsung Electronics 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, 127, 178}: "Fujitsu Limited",
- [3]byte{228, 129, 132}: "Alcatel-Lucent",
+ [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, 130, 204}: "Jumptronic GmbH",
[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",
+ [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, 143, 101}: "Yelatma Instrument Making Enterprise, JSC",
[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 - Please see MAM public listing for more information.",
+ [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, 214}: "Apple, Inc",
+ [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, 178, 251}: "Apple, Inc.",
+ [3]byte{228, 179, 24}: "Intel Corporate",
+ [3]byte{228, 185, 122}: "Dell Inc.",
[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, 196, 131}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,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",
+ [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, 143}: "Apple",
+ [3]byte{228, 202, 18}: "zte corporation",
+ [3]byte{228, 203, 89}: "Beijing Loveair Science and Technology Co. Ltd.",
+ [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, 209, 36}: "Mojo Networks, Inc.",
[3]byte{228, 211, 50}: "TP-LINK TECHNOLOGIES CO.,LTD.",
- [3]byte{228, 211, 241}: "Cisco",
+ [3]byte{228, 211, 170}: "FUJITSU CONNECTED TECHNOLOGIES LIMITED",
+ [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, 219, 109}: "Beijing Xiaomi Electronics Co., Ltd.",
[3]byte{228, 221, 121}: "En-Vision America, Inc.",
- [3]byte{228, 224, 197}: "Samsung Electronics Co., LTD",
+ [3]byte{228, 224, 166}: "Apple, Inc.",
+ [3]byte{228, 224, 197}: "Samsung Electronics Co.,Ltd",
+ [3]byte{228, 225, 48}: "TCT mobile ltd",
[3]byte{228, 228, 9}: "LEIFHEIT AG",
+ [3]byte{228, 228, 171}: "Apple, Inc.",
+ [3]byte{228, 234, 131}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
[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, 241, 76}: "Private",
[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, 239}: "Samsung Elec Co.,Ltd",
+ [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, 252, 130}: "Juniper Networks",
+ [3]byte{228, 254, 217}: "EDMI Europe Ltd",
[3]byte{228, 255, 221}: "ELECTRON INDIA",
- [3]byte{232, 3, 154}: "Samsung Electronics CO., LTD",
- [3]byte{232, 4, 11}: "Apple",
- [3]byte{232, 4, 16}: "PRIVATE",
- [3]byte{232, 4, 98}: "CISCO SYSTEMS, INC.",
+ [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",
- [3]byte{232, 8, 139}: "Huawei Technologies Co., Ltd",
+ [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, 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, 23, 252}: "NIFTY Corporation",
- [3]byte{232, 24, 99}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
+ [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, 26, 88}: "TECHNOLOGIC SYSTEMS",
+ [3]byte{232, 26, 172}: "ORFEO SOUNDWORKS Inc.",
+ [3]byte{232, 28, 186}: "Fortinet, Inc.",
+ [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, 44, 109}: "SmartRG, Inc.",
[3]byte{232, 46, 36}: "Out of the Fog Research LLC",
+ [3]byte{232, 51, 13}: "Xaptec GmbH",
[3]byte{232, 51, 129}: "ARRIS Group, Inc.",
+ [3]byte{232, 52, 62}: "Beijing Infosec Technologies Co., LTD.",
+ [3]byte{232, 54, 23}: "Apple, Inc.",
+ [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",
- [3]byte{232, 58, 151}: "OCZ Technology Group",
+ [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, 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, 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, 90, 209}: "Fiberhome Telecommunication Technologies Co.,LTD",
[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, 93, 134}: "CHANG YOW TECHNOLOGIES INTERNATIONAL CO.,LTD.",
[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, 106, 100}: "LCFC(HeFei) Electronics Technology 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, 110}: "Control & Display Systems Ltd t/a CDSRail",
+ [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",
+ [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",
+ [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",
+ [3]byte{232, 146, 164}: "LG Electronics (Mobile Communications)",
+ [3]byte{232, 147, 9}: "Samsung Electronics Co.,Ltd",
+ [3]byte{232, 147, 99}: "Nokia",
[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, 152, 109}: "Palo Alto Networks",
[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, 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, 136}: "XIAMEN LEELEN TECHNOLOGY CO., LTD",
+ [3]byte{232, 167, 242}: "sTraffic",
+ [3]byte{232, 171, 243}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{232, 171, 250}: "Shenzhen Reecam Tech.Ltd.",
+ [3]byte{232, 173, 166}: "Sagemcom Broadband SAS",
[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, 183, 72}: "CISCO SYSTEMS, INC.",
- [3]byte{232, 186, 112}: "CISCO SYSTEMS, INC.",
+ [3]byte{232, 180, 200}: "Samsung Electronics Co.,Ltd",
+ [3]byte{232, 181, 65}: "zte corporation",
+ [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, 190, 129}: "SAGEMCOM",
+ [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, 184}: "Nanjing Bangzhong Electronic Commerce Limited",
+ [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, 197, 122}: "Ufispace Co., 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, 205, 45}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{232, 206, 6}: "SkyHawke Technologies, LLC.",
+ [3]byte{232, 208, 153}: "Fiberhome Telecommunication Technologies Co.,LTD",
[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, 0}: "ChongQing GuanFang Technology Co.,LTD",
[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, 222, 251}: "MESOTIC SAS",
+ [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",
+ [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 Electroncs LTD",
+ [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",
+ [3]byte{232, 237, 243}: "Cisco Systems, Inc",
[3]byte{232, 239, 137}: "OPMEX Tech.",
- [3]byte{232, 241, 176}: "SAGEMCOM SAS",
+ [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, 250, 247}: "Guangdong Uniteddata Holding Group Co., Ltd.",
[3]byte{232, 252, 96}: "ELCOM Innovations Private Limited",
- [3]byte{232, 252, 175}: "NETGEAR INC.,",
+ [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, 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, 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, 44, 226}: "Apple, Inc.",
[3]byte{236, 46, 78}: "HITACHI-LG DATA STORAGE INC",
- [3]byte{236, 48, 145}: "CISCO SYSTEMS, INC.",
- [3]byte{236, 53, 134}: "Apple",
+ [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, 115}: "Juniper Networks",
+ [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, 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, 88, 234}: "Ruckus Wireless",
[3]byte{236, 89, 231}: "Microsoft Corporation",
+ [3]byte{236, 90, 134}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd",
+ [3]byte{236, 92, 104}: "CHONGQING FUGUI ELECTRONICS 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, 101, 204}: "Panasonic Automotive Systems Company of America",
[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, 111, 11}: "FADU, Inc.",
+ [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, 121, 242}: "Startel",
[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, 127, 198}: "ECCEL CORPORATION SAS",
[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",
- [3]byte{236, 136, 143}: "TP-LINK TECHNOLOGIES CO., LTD.",
+ [3]byte{236, 131, 213}: "GIRD Systems Inc",
+ [3]byte{236, 132, 180}: "CIG SHANGHAI 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, 20}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 154}: "HUAWEI 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, 101}: "Mapper.ai, Inc.",
+ [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, 139}: "Hewlett Packard Enterprise",
+ [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, 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, 175, 151}: "GIT",
+ [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, 179, 19}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
[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, 196, 13}: "Nintendo Co.,Ltd",
+ [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, 224, 155}: "Samsung electronics CO., LTD",
- [3]byte{236, 225, 169}: "Cisco",
+ [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",
@@ -19327,465 +24572,826 @@ var validMACPrefixMap = map[[3]byte]string{
[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, 240, 14}: "Abocom",
+ [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, 240, 254}: "zte corporation",
[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, 187}: "Dell Inc",
+ [3]byte{236, 244, 81}: "Arcadyan Corporation",
+ [3]byte{236, 244, 187}: "Dell Inc.",
+ [3]byte{236, 246, 189}: "SNCF MOBILITÉS",
[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, 14, 29}: "Megafone Limited",
+ [3]byte{240, 14, 191}: "ZettaHash Inc.",
+ [3]byte{240, 15, 236}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{240, 19, 195}: "SHENZHEN FENDA TECHNOLOGY CO., LTD",
[3]byte{240, 21, 160}: "KyungDong One Co., Ltd.",
- [3]byte{240, 28, 19}: "LG Electronics",
+ [3]byte{240, 21, 185}: "PlayFusion Limited",
+ [3]byte{240, 24, 43}: "LG Chem",
+ [3]byte{240, 24, 152}: "Apple, Inc.",
+ [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, 31, 175}: "Dell Inc",
+ [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, 37, 114}: "CISCO SYSTEMS, INC.",
- [3]byte{240, 37, 183}: "Samsung Electro Mechanics co., LTD.",
+ [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, 101}: "Murata Manufactuaring Co.,Ltd.",
- [3]byte{240, 41, 41}: "Cisco",
+ [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, 65, 200}: "IEEE Registration Authority",
+ [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, 58}: "Juniper Networks",
[3]byte{240, 75, 106}: "Scientific Production Association Siberian Arsenal, Ltd.",
[3]byte{240, 75, 242}: "JTECH Communications, Inc.",
+ [3]byte{240, 76, 213}: "Maxlinear, Inc",
[3]byte{240, 77, 162}: "Dell Inc.",
- [3]byte{240, 79, 124}: "PRIVATE",
+ [3]byte{240, 79, 124}: "Private",
+ [3]byte{240, 84, 148}: "Honeywell Connected Building",
[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, 99, 249}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [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, 118, 111}: "Apple, Inc.",
[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",
+ [3]byte{240, 127, 6}: "Cisco Systems, Inc",
[3]byte{240, 127, 12}: "Leopold Kostal GmbH &Co. KG",
+ [3]byte{240, 129, 115}: "Amazon Technologies Inc.",
[3]byte{240, 129, 175}: "IRZ AUTOMATION TECHNOLOGIES LTD",
- [3]byte{240, 130, 97}: "SAGEMCOM",
+ [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 Tech.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, 149, 241}: "Carl Zeiss AG",
+ [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, 182}: "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",
- [3]byte{240, 162, 37}: "PRIVATE",
+ [3]byte{240, 156, 215}: "Guangzhou Blue Cheetah Intelligent Technology Co., Ltd.",
+ [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, 159, 252}: "SHARP Corporation",
+ [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, 180, 121}: "Apple",
+ [3]byte{240, 175, 80}: "Phantom Intelligence",
+ [3]byte{240, 175, 133}: "ARRIS Group, Inc.",
+ [3]byte{240, 176, 20}: "AVM Audiovisuelles Marketing und Computersysteme GmbH",
+ [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, 181, 183}: "Disruptive Technologies Research AS",
+ [3]byte{240, 181, 209}: "Texas Instruments",
[3]byte{240, 182, 235}: "Poslab Technology Co., Ltd.",
[3]byte{240, 188, 200}: "MaxID (Pty) Ltd",
+ [3]byte{240, 188, 201}: "PFU LIMITED",
+ [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",
+ [3]byte{240, 201, 209}: "GD Midea Air-Conditioning Equipment Co.,Ltd.",
+ [3]byte{240, 203, 161}: "Apple, Inc.",
[3]byte{240, 209, 79}: "LINEAR LLC",
- [3]byte{240, 209, 169}: "Apple",
+ [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, 215, 220}: "Wesine (Wuhan) Technology Co., Ltd.",
+ [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, 248}: "Apple",
- [3]byte{240, 220, 226}: "Apple",
+ [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 (Kunshan)Co",
+ [3]byte{240, 222, 241}: "Wistron Infocomm (Zhongshan) Corporation",
+ [3]byte{240, 227, 220}: "Tecon MT, LLC",
[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, 240, 143}: "Nextek Solutions Pte 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, 243, 54}: "TP-LINK TECHNOLOGIES CO.,LTD.",
[3]byte{240, 245, 174}: "Adaptrum Inc.",
- [3]byte{240, 246, 28}: "Apple",
+ [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, 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 LP",
+ [3]byte{240, 252, 200}: "ARRIS Group, Inc.",
+ [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, 22}: "Apple, Inc.",
[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 co., LTD.",
- [3]byte{244, 11, 147}: "Research In Motion",
- [3]byte{244, 14, 17}: "IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.",
- [3]byte{244, 15, 27}: "Cisco",
+ [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, 27, 161}: "Apple",
+ [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, 194}: "Cisco",
+ [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",
+ [3]byte{244, 55, 183}: "Apple, Inc.",
[3]byte{244, 56, 20}: "Shanghai Howell Electronic Co.,Ltd",
+ [3]byte{244, 57, 9}: "Hewlett Packard",
[3]byte{244, 61, 128}: "FAG Industrial Services GmbH",
- [3]byte{244, 62, 97}: "Shenzhen Gongjin Electronics Co., Ltd",
+ [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, 78, 5}: "Cisco",
+ [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, 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, 96, 226}: "Xiaomi Communications Co Ltd",
+ [3]byte{244, 98, 208}: "Not for Radio, LLC",
+ [3]byte{244, 99, 31}: "HUAWEI TECHNOLOGIES CO.,LTD",
[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, 113, 144}: "Samsung Electronics 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 Eletronics Co., Ltd",
- [3]byte{244, 127, 53}: "CISCO SYSTEMS, INC.",
+ [3]byte{244, 123, 94}: "Samsung Electronics Co.,Ltd",
+ [3]byte{244, 125, 239}: "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, 132, 76}: "Texas Instruments",
+ [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, 149, 27}: "Hefei Radio Communication Technology Co., 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, 159, 84}: "Samsung Electronics",
- [3]byte{244, 159, 243}: "Huawei Technologies Co., Ltd",
+ [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, 172, 193}: "CISCO SYSTEMS, 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, 47}: "Juniper networks",
- [3]byte{244, 181, 73}: "Yeastar Technology Co., Ltd.",
+ [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, 94}: "Texas Instruments",
+ [3]byte{244, 184, 167}: "zte corporation",
+ [3]byte{244, 188, 151}: "Shenzhen Crave Communication Co., LTD",
[3]byte{244, 189, 124}: "Chengdu jinshi communication Co., LTD",
+ [3]byte{244, 191, 128}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{244, 194, 72}: "Samsung Electronics 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}: "Shenzhen Huawei Communication Technologies Co., Ltd",
+ [3]byte{244, 199, 20}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{244, 199, 149}: "WEY Elektronik AG",
- [3]byte{244, 202, 229}: "FREEBOX SA",
+ [3]byte{244, 199, 200}: "Kelvin Inc.",
+ [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 Company",
- [3]byte{244, 207, 226}: "Cisco",
+ [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, 209, 8}: "Intel Corporate",
[3]byte{244, 210, 97}: "SEMOCON Co., Ltd",
- [3]byte{244, 217, 251}: "Samsung Electronics CO., LTD",
+ [3]byte{244, 215, 178}: "LGS Innovations, LLC",
+ [3]byte{244, 217, 251}: "Samsung Electronics Co.,Ltd",
+ [3]byte{244, 219, 230}: "Cisco Systems, Inc",
+ [3]byte{244, 220, 65}: "YOUNGZONE CULTURE (SHANGHAI) CORP",
[3]byte{244, 220, 77}: "Beijing CCD Digital Technology Co., Ltd",
+ [3]byte{244, 220, 165}: "DAWON DNS",
[3]byte{244, 220, 218}: "Zhuhai Jiahe Communication Technology Co., limited",
- [3]byte{244, 220, 249}: "Huawei Technologies Co., Ltd",
+ [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, 30}: "Texas Instruments",
[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, 234, 103}: "CISCO SYSTEMS, INC.",
- [3]byte{244, 236, 56}: "TP-LINK TECHNOLOGIES CO., LTD.",
- [3]byte{244, 238, 20}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.",
- [3]byte{244, 241, 90}: "Apple",
- [3]byte{244, 241, 225}: "Motorola Mobility LLC",
+ [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}: "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, 151}: "EMTAKE 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, 245, 165}: "Nokia corporation",
- [3]byte{244, 245, 232}: "Google",
+ [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",
+ [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, 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",
- [3]byte{248, 13, 67}: "Hon Hai Precision Ind. 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, 13, 241}: "Sontex SA",
+ [3]byte{248, 15, 65}: "Wistron Infocomm (Zhongshan) Corporation",
+ [3]byte{248, 15, 111}: "Cisco Systems, Inc",
[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, 19, 8}: "Nokia",
+ [3]byte{248, 21, 71}: "Avaya Inc",
[3]byte{248, 22, 84}: "Intel Corporate",
- [3]byte{248, 26, 103}: "TP-LINK TECHNOLOGIES CO., LTD.",
+ [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",
+ [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, 39, 46}: "Mercku",
+ [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, 45, 124}: "Apple, Inc.",
+ [3]byte{248, 45, 192}: "ARRIS Group, Inc.",
[3]byte{248, 46, 219}: "RTW GmbH & Co. KG",
+ [3]byte{248, 47, 8}: "Molex CMS",
[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, 54, 155}: "Texas Instruments",
+ [3]byte{248, 56, 128}: "Apple, Inc.",
[3]byte{248, 61, 78}: "Softlink Automation System Co., Ltd",
- [3]byte{248, 61, 255}: "Huawei Technologies 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, 67, 96}: "INGENICO",
+ [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",
+ [3]byte{248, 79, 87}: "Cisco Systems, Inc",
+ [3]byte{248, 80, 28}: "Tianjin Geneuo Technology Co.,Ltd",
[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, 94, 60}: "SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD",
[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, 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, 111, 193}: "Apple, Inc.",
[3]byte{248, 113, 254}: "The Goldman Sachs Group, Inc.",
- [3]byte{248, 114, 234}: "Cisco",
- [3]byte{248, 115, 148}: "NETGEAR 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, 139, 55}: "ARRIS Group, Inc.",
[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 Fiber, Inc",
+ [3]byte{248, 142, 133}: "Comtrend Corporation",
+ [3]byte{248, 143, 202}: "Google, Inc.",
+ [3]byte{248, 144, 102}: "Nain 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, 149, 234}: "Apple, Inc.",
[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, 152, 239}: "HUAWEI TECHNOLOGIES CO.,LTD",
+ [3]byte{248, 153, 16}: "Integrated Device Technology (Malaysia) Sdn. Bhd.",
[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, 164, 95}: "Beijing Xiaomi communications co.,ltd",
+ [3]byte{248, 162, 214}: "Liteon Technology Corporation",
+ [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",
+ [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, 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, 188, 18}: "Dell Inc",
+ [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",
+ [3]byte{248, 193, 32}: "Xi'an Link-Science Technology Co.,Ltd",
+ [3]byte{248, 194, 73}: "Private",
+ [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, 195, 158}: "HUAWEI TECHNOLOGIES CO.,LTD",
[3]byte{248, 198, 120}: "Carefusion",
- [3]byte{248, 208, 172}: "Sony Computer Entertainment Inc.",
+ [3]byte{248, 201, 108}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [3]byte{248, 202, 184}: "Dell Inc.",
+ [3]byte{248, 204, 110}: "DEPO Electronics Ltd",
+ [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, 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, 217, 184}: "Open Mesh, Inc.",
+ [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, 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",
+ [3]byte{248, 223, 21}: "Sunitec Enterprise Co.,Ltd",
+ [3]byte{248, 223, 168}: "zte corporation",
+ [3]byte{248, 224, 121}: "Motorola Mobility LLC, a Lenovo Company",
+ [3]byte{248, 228, 78}: "MCOT INC.",
[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, 78}: "Apple, Inc.",
[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}: "Orion Networks International, Inc",
- [3]byte{248, 241, 182}: "Motorola Mobility LLC",
+ [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, 245, 50}: "ARRIS Group, Inc.",
[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, 3, 159}: "Samsung Electronics Co.,Ltd",
[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}: "Motorola Solutions Inc.",
- [3]byte{252, 15, 230}: "Sony Computer Entertainment Inc.",
+ [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, 24, 60}: "Apple, Inc.",
[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, 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",
+ [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, 42, 156}: "Apple, 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",
+ [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, 97, 233}: "Fiberhome Telecommunication Technologies Co.,LTD",
[3]byte{252, 98, 110}: "Beijing MDC Telecom",
- [3]byte{252, 98, 185}: "ALPS ERECTRIC CO.,LTD",
+ [3]byte{252, 98, 185}: "ALPS ELECTRIC CO.,LTD.",
+ [3]byte{252, 100, 58}: "Samsung Electronics 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, 105, 71}: "Texas Instruments",
+ [3]byte{252, 107, 240}: "TOPWELL INTERNATIONAL HOLDINDS LIMITED",
[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, 119, 116}: "Intel Corporate",
[3]byte{252, 121, 11}: "Hitachi High Technologies America, Inc.",
+ [3]byte{252, 124, 2}: "Phicomm (Shanghai) Co., Ltd.",
[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, 139, 151}: "Shenzhen Gongjin Electronics Co.,Ltd",
- [3]byte{252, 142, 126}: "Pace plc",
+ [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, 125}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT",
+ [3]byte{252, 143, 144}: "Samsung Electronics Co.,Ltd",
[3]byte{252, 143, 196}: "Intelligent Technology Inc.",
+ [3]byte{252, 144, 250}: "Independent Technologies",
+ [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 USA Inc.",
- [3]byte{252, 153, 71}: "Cisco",
+ [3]byte{252, 148, 206}: "zte corporation",
+ [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, 155, 198}: "Sumavision Technologies Co.,Ltd",
+ [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",
- [3]byte{252, 168, 65}: "Avaya, Inc",
+ [3]byte{252, 161, 62}: "Samsung Electronics Co.,Ltd",
+ [3]byte{252, 161, 131}: "Amazon Technologies Inc.",
+ [3]byte{252, 162, 42}: "PT. Callysta Multi Engineering",
+ [3]byte{252, 163, 134}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD",
+ [3]byte{252, 166, 33}: "Samsung Electronics Co.,Ltd",
+ [3]byte{252, 166, 103}: "Amazon Technologies Inc.",
+ [3]byte{252, 166, 205}: "Fiberhome Telecommunication Technologies Co.,LTD",
+ [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, 170, 182}: "Samsung Electronics Co.,Ltd",
[3]byte{252, 173, 15}: "QTS NETWORKS",
- [3]byte{252, 175, 106}: "Conemtech AB",
- [3]byte{252, 176, 196}: "Shanghai DareGlobal Technologies Co., Ltd",
+ [3]byte{252, 174, 52}: "ARRIS Group, Inc.",
+ [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, 177, 13}: "Shenzhen Tian Kun Technology 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, 182, 216}: "Apple, Inc.",
+ [3]byte{252, 183, 240}: "Idaho National Laboratory",
[3]byte{252, 187, 161}: "Shenzhen Minicreate Technology Co.,Ltd",
+ [3]byte{252, 188, 156}: "Vimar Spa",
+ [3]byte{252, 190, 123}: "vivo Mobile Communication Co., Ltd.",
+ [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, 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, 230, 106}: "Industrial Software Co",
[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 Tech.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, 251, 251}: "Cisco Systems, Inc",
+ [3]byte{252, 252, 72}: "Apple, Inc.",
[3]byte{252, 254, 119}: "Hitachi Reftechno, Inc.",
- [3]byte{252, 255, 170}: "IEEE REGISTRATION AUTHORITY - Please see MAL public listing for more information.",
+ [3]byte{252, 254, 194}: "Invensys Controls UK Limited",
+ [3]byte{252, 255, 170}: "IEEE Registration Authority",
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/packet.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/packet.go
index f2a576d85ef..e2e9a341a96 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/packet.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/packet.go
@@ -16,6 +16,7 @@ import (
"reflect"
"runtime/debug"
"strings"
+ "syscall"
"time"
)
@@ -29,6 +30,12 @@ type CaptureInfo struct {
// Length is the size of the original packet. Should always be >=
// CaptureLength.
Length int
+ // InterfaceIndex
+ InterfaceIndex int
+ // The packet source can place ancillary data of various types here.
+ // For example, the afpacket source can report the VLAN of captured
+ // packets this way.
+ AncillaryData []interface{}
}
// PacketMetadata contains metadata for a packet.
@@ -108,9 +115,7 @@ type packet struct {
// metadata is the PacketMetadata for this packet
metadata PacketMetadata
- // recoverPanics is true if we should recover from panics we see while
- // decoding and set a DecodeFailure layer.
- recoverPanics bool
+ decodeOptions DecodeOptions
// Pointers to the various important layers
link LinkLayer
@@ -172,6 +177,10 @@ 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 {
@@ -184,7 +193,7 @@ func (p *packet) addFinalDecodeError(err error, stack []byte) {
}
func (p *packet) recoverDecodeError() {
- if p.recoverPanics {
+ if !p.decodeOptions.SkipDecodeRecovery {
if r := recover(); r != nil {
p.addFinalDecodeError(fmt.Errorf("%v", r), debug.Stack())
}
@@ -204,7 +213,7 @@ func (p *packet) recoverDecodeError() {
// 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(l, false, false))
+ 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
@@ -242,20 +251,21 @@ func LayerDump(l Layer) string {
// 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(i interface{}, anonymous bool, writeSpace bool) string {
+func layerString(v reflect.Value, anonymous bool, writeSpace bool) string {
// Let String() functions take precedence.
- if s, ok := i.(fmt.Stringer); ok {
- return s.String()
+ 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.
- v := reflect.ValueOf(i)
switch v.Type().Kind() {
case reflect.Interface, reflect.Ptr:
if v.IsNil() {
return "nil"
}
r := v.Elem()
- return layerString(r.Interface(), anonymous, writeSpace)
+ return layerString(r, anonymous, writeSpace)
case reflect.Struct:
var b bytes.Buffer
typ := v.Type()
@@ -267,7 +277,7 @@ func layerString(i interface{}, anonymous bool, writeSpace bool) string {
ftype := typ.Field(i)
f := v.Field(i)
if ftype.Anonymous {
- anonStr := layerString(f.Interface(), true, writeSpace)
+ anonStr := layerString(f, true, writeSpace)
writeSpace = writeSpace || anonStr != ""
b.WriteString(anonStr)
} else if ftype.PkgPath == "" { // exported
@@ -275,7 +285,7 @@ func layerString(i interface{}, anonymous bool, writeSpace bool) string {
b.WriteByte(' ')
}
writeSpace = true
- fmt.Fprintf(&b, "%s=%s", typ.Field(i).Name, layerString(f.Interface(), false, writeSpace))
+ fmt.Fprintf(&b, "%s=%s", typ.Field(i).Name, layerString(f, false, writeSpace))
}
}
if !anonymous {
@@ -292,7 +302,7 @@ func layerString(i interface{}, anonymous bool, writeSpace bool) string {
if j != 0 {
b.WriteString(", ")
}
- b.WriteString(layerString(v.Index(j).Interface(), false, false))
+ b.WriteString(layerString(v.Index(j), false, false))
}
}
b.WriteByte(']')
@@ -356,7 +366,7 @@ func layerGoString(i interface{}, b *bytes.Buffer) {
t := v.Type()
b.WriteString(t.String())
b.WriteByte('{')
- for i := 0; i < v.NumField(); i += 1 {
+ for i := 0; i < v.NumField(); i++ {
if i > 0 {
b.WriteString(", ")
}
@@ -421,11 +431,11 @@ type eagerPacket struct {
packet
}
-var nilDecoderError = errors.New("NextDecoder passed nil decoder, probably an unsupported decode type")
+var errNilDecoder = errors.New("NextDecoder passed nil decoder, probably an unsupported decode type")
func (p *eagerPacket) NextDecoder(next Decoder) error {
if next == nil {
- return nilDecoderError
+ return errNilDecoder
}
if p.last == nil {
return errors.New("NextDecoder called, but no layers added yet")
@@ -492,7 +502,7 @@ type lazyPacket struct {
func (p *lazyPacket) NextDecoder(next Decoder) error {
if next == nil {
- return nilDecoderError
+ return errNilDecoder
}
p.next = next
return nil
@@ -612,6 +622,11 @@ type DecodeOptions struct {
// 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
@@ -621,13 +636,16 @@ type DecodeOptions struct {
// 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 = DecodeOptions{}
+var Default = DecodeOptions{}
// Lazy is a DecodeOptions with just Lazy set.
-var Lazy DecodeOptions = DecodeOptions{Lazy: true}
+var Lazy = DecodeOptions{Lazy: true}
// NoCopy is a DecodeOptions with just NoCopy set.
-var NoCopy DecodeOptions = DecodeOptions{NoCopy: true}
+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,
@@ -640,11 +658,10 @@ func NewPacket(data []byte, firstLayerDecoder Decoder, options DecodeOptions) Pa
}
if options.Lazy {
p := &lazyPacket{
- packet: packet{data: data},
+ packet: packet{data: data, decodeOptions: options},
next: firstLayerDecoder,
}
p.layers = p.initialLayers[:0]
- p.recoverPanics = !options.SkipDecodeRecovery
// 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
@@ -658,10 +675,9 @@ func NewPacket(data []byte, firstLayerDecoder Decoder, options DecodeOptions) Pa
return p
}
p := &eagerPacket{
- packet: packet{data: data},
+ packet: packet{data: data, decodeOptions: options},
}
p.layers = p.initialLayers[:0]
- p.recoverPanics = !options.SkipDecodeRecovery
p.initialDecode(firstLayerDecoder)
return p
}
@@ -681,6 +697,31 @@ type PacketDataSource interface {
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
@@ -726,7 +767,7 @@ type ZeroCopyPacketDataSource interface {
// importantly the io.EOF error in cases where packets are being read from
// a file.
// for {
-// packet, err := packetSource.NextPacket() {
+// packet, err := packetSource.NextPacket()
// if err == io.EOF {
// break
// } else if err != nil {
@@ -774,7 +815,7 @@ func (p *PacketSource) packetsToChannel() {
defer close(p.c)
for {
packet, err := p.NextPacket()
- if err == io.EOF {
+ if err == io.EOF || err == syscall.EBADF {
return
} else if err == nil {
p.c <- packet
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/packet_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/packet_test.go
new file mode 100644
index 00000000000..bd0544888b8
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/packet_test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/parser.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/parser.go
index f786834ef1f..e5dc0e45d8d 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/parser.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/parser.go
@@ -116,7 +116,7 @@ func NewDecodingLayerParser(first LayerType, decoders ...DecodingLayer) *Decodin
// decodedLayers := make([]gopacket.LayerType, 0, 10)
// for {
// data, _, err := source.ReadPacketData()
-// if err == nil {
+// if err != nil {
// fmt.Println("Error reading packet data: ", err)
// continue
// }
@@ -158,6 +158,9 @@ func (l *DecodingLayerParser) DecodeLayers(data []byte, decoded *[]LayerType) (e
for len(data) > 0 {
decoder, ok := l.decoders[typ]
if !ok {
+ if l.IgnoreUnsupported {
+ return nil
+ }
return UnsupportedLayerType(typ)
} else if err = decoder.DecodeFromBytes(data, l.df); err != nil {
return err
@@ -195,4 +198,10 @@ type DecodingLayerParserOptions struct {
// callers. IgnorePanic defaults to false, thus if the caller does
// nothing decode panics will be returned as errors.
IgnorePanic bool
+ // IgnoreUnsupported will stop parsing and return a nil error when it
+ // encounters a layer it doesn't have a parser for, instead of returning an
+ // UnsupportedLayerType error. If this is true, it's up to the caller to make
+ // sure that all expected layers have been parsed (by checking the decoded
+ // slice).
+ IgnoreUnsupported bool
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/bpf_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/bpf_test.go
new file mode 100644
index 00000000000..409055544fe
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/bpf_test.go
@@ -0,0 +1,70 @@
+// Copyright 2018 The GoPacket Authors. 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 (
+ "testing"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+var (
+ snaplen = 65535
+ packet = [...]byte{
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // dst mac
+ 0x0, 0x11, 0x22, 0x33, 0x44, 0x55, // src mac
+ 0x08, 0x0, // ether type
+ 0x45, 0x0, 0x0, 0x3c, 0xa6, 0xc3, 0x40, 0x0, 0x40, 0x06, 0x3d, 0xd8, // ip header
+ 0xc0, 0xa8, 0x50, 0x2f, // src ip
+ 0xc0, 0xa8, 0x50, 0x2c, // dst ip
+ 0xaf, 0x14, // src port
+ 0x0, 0x50, // dst port
+ }
+ matchingBPFFilter = "ip and tcp and port 80"
+ nonmatchingBPFFilter = "udp and port 80"
+)
+
+func BenchmarkPcapNonmatchingBPFFilter(b *testing.B) {
+ bpf, err := NewBPF(layers.LinkTypeEthernet, snaplen, nonmatchingBPFFilter)
+ if err != nil {
+ b.Fatal("incorrect filter")
+ }
+
+ ci := gopacket.CaptureInfo{
+ InterfaceIndex: 0,
+ CaptureLength: len(packet),
+ Length: len(packet),
+ Timestamp: time.Now(),
+ }
+
+ for i := 0; i < b.N; i++ {
+ if bpf.Matches(ci, packet[:]) {
+ b.Fatal("filter must not match the packet")
+ }
+ }
+}
+
+func BenchmarkPcapMatchingBPFFilter(b *testing.B) {
+ bpf, err := NewBPF(layers.LinkTypeEthernet, snaplen, matchingBPFFilter)
+ if err != nil {
+ b.Fatal("incorrect filter")
+ }
+
+ ci := gopacket.CaptureInfo{
+ InterfaceIndex: 0,
+ CaptureLength: len(packet),
+ Length: len(packet),
+ Timestamp: time.Now(),
+ }
+
+ for i := 0; i < b.N; i++ {
+ if !bpf.Matches(ci, packet[:]) {
+ b.Fatal("filter must match the packet")
+ }
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/defs_windows_386.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/defs_windows_386.go
new file mode 100644
index 00000000000..774e907e8ea
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/defs_windows_386.go
@@ -0,0 +1,74 @@
+// Copyright 2019 The GoPacket Authors. 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 necessary structs/constants generated from libpcap headers with cgo -godefs
+// generated with: generate_defs.exe
+// DO NOT MODIFY
+
+package pcap
+
+import "syscall"
+
+const errorBufferSize = 0x100
+
+const (
+ pcapErrorNotActivated = -0x3
+ pcapErrorActivated = -0x4
+ pcapWarningPromisc = 0x2
+ pcapErrorNoSuchDevice = -0x5
+ pcapErrorDenied = -0x8
+ pcapErrorNotUp = -0x9
+ pcapError = -0x1
+ pcapWarning = 0x1
+ pcapDIN = 0x1
+ pcapDOUT = 0x2
+ pcapDINOUT = 0x0
+ pcapNetmaskUnknown = 0xffffffff
+ pcapTstampPrecisionMicro = 0x0
+ pcapTstampPrecisionNano = 0x1
+)
+
+type timeval struct {
+ Sec int32
+ Usec int32
+}
+type pcapPkthdr struct {
+ Ts timeval
+ Caplen uint32
+ Len uint32
+}
+type pcapTPtr uintptr
+type pcapBpfInstruction struct {
+ Code uint16
+ Jt uint8
+ Jf uint8
+ K uint32
+}
+type pcapBpfProgram struct {
+ Len uint32
+ Insns *pcapBpfInstruction
+}
+type pcapStats struct {
+ Recv uint32
+ Drop uint32
+ Ifdrop uint32
+}
+type pcapCint int32
+type pcapIf struct {
+ Next *pcapIf
+ Name *int8
+ Description *int8
+ Addresses *pcapAddr
+ Flags uint32
+}
+
+type pcapAddr struct {
+ Next *pcapAddr
+ Addr *syscall.RawSockaddr
+ Netmask *syscall.RawSockaddr
+ Broadaddr *syscall.RawSockaddr
+ Dstaddr *syscall.RawSockaddr
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/defs_windows_amd64.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/defs_windows_amd64.go
new file mode 100644
index 00000000000..9619215903e
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/defs_windows_amd64.go
@@ -0,0 +1,76 @@
+// Copyright 2019 The GoPacket Authors. 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 necessary structs/constants generated from libpcap headers with cgo -godefs
+// generated with: generate_defs.exe
+// DO NOT MODIFY
+
+package pcap
+
+import "syscall"
+
+const errorBufferSize = 0x100
+
+const (
+ pcapErrorNotActivated = -0x3
+ pcapErrorActivated = -0x4
+ pcapWarningPromisc = 0x2
+ pcapErrorNoSuchDevice = -0x5
+ pcapErrorDenied = -0x8
+ pcapErrorNotUp = -0x9
+ pcapError = -0x1
+ pcapWarning = 0x1
+ pcapDIN = 0x1
+ pcapDOUT = 0x2
+ pcapDINOUT = 0x0
+ pcapNetmaskUnknown = 0xffffffff
+ pcapTstampPrecisionMicro = 0x0
+ pcapTstampPrecisionNano = 0x1
+)
+
+type timeval struct {
+ Sec int32
+ Usec int32
+}
+type pcapPkthdr struct {
+ Ts timeval
+ Caplen uint32
+ Len uint32
+}
+type pcapTPtr uintptr
+type pcapBpfInstruction struct {
+ Code uint16
+ Jt uint8
+ Jf uint8
+ K uint32
+}
+type pcapBpfProgram struct {
+ Len uint32
+ Pad_cgo_0 [4]byte
+ Insns *pcapBpfInstruction
+}
+type pcapStats struct {
+ Recv uint32
+ Drop uint32
+ Ifdrop uint32
+}
+type pcapCint int32
+type pcapIf struct {
+ Next *pcapIf
+ Name *int8
+ Description *int8
+ Addresses *pcapAddr
+ Flags uint32
+ Pad_cgo_0 [4]byte
+}
+
+type pcapAddr struct {
+ Next *pcapAddr
+ Addr *syscall.RawSockaddr
+ Netmask *syscall.RawSockaddr
+ Broadaddr *syscall.RawSockaddr
+ Dstaddr *syscall.RawSockaddr
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/doc.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/doc.go
index 6289b2faf69..38b3141fcc0 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/doc.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/doc.go
@@ -12,6 +12,12 @@ 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.
+Depending on libpcap version, os support, or file timestamp resolution,
+nanosecond resolution is used for the internal timestamps. Returned timestamps
+are always scaled to nanosecond resolution due to the usage of time.Time.
+libpcap must be at least version 1.5 to support nanosecond timestamps. OpenLive
+supports only microsecond resolution.
+
Reading PCAP Files
The following code can be used to read in data from a pcap file.
@@ -28,7 +34,7 @@ The following code can be used to read in data from a pcap file.
Reading Live Packets
The following code can be used to read in data from a live device, in this case
-"eth0".
+"eth0". Be aware, that OpenLive only supports microsecond resolution.
if handle, err := pcap.OpenLive("eth0", 1600, true, pcap.BlockForever); err != nil {
panic(err)
@@ -96,5 +102,11 @@ 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 Users
+
+gopacket can use winpcap or npcap. If both are installed at the same time,
+npcap is preferred. Make sure the right windows service is loaded (npcap for npcap
+and npf for winpcap).
*/
package pcap
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/generate_defs.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/generate_defs.go
new file mode 100644
index 00000000000..bcbf161cf19
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/generate_defs.go
@@ -0,0 +1,157 @@
+// Copyright 2019 The GoPacket Authors. 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
+
+// This file generates the godefs needed for the windows version.
+// Rebuild is only necessary if additional libpcap functionality is implemented, or a new arch is implemented in golang.
+// Call with go run generate_windows.go [-I includepath]
+// Needs npcap sdk, go tool cgo, and gofmt to work. Location of npcap includes can be specified with -I
+
+import (
+ "bytes"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "log"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+)
+
+const header = `// Copyright 2019 The GoPacket Authors. 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 necessary structs/constants generated from libpcap headers with cgo -godefs
+// generated with: %s
+// DO NOT MODIFY
+
+`
+
+const source = `
+package pcap
+
+//#include <pcap.h>
+import "C"
+
+import "syscall" // needed for RawSockaddr
+
+const errorBufferSize = C.PCAP_ERRBUF_SIZE
+
+const (
+ pcapErrorNotActivated = C.PCAP_ERROR_NOT_ACTIVATED
+ pcapErrorActivated = C.PCAP_ERROR_ACTIVATED
+ pcapWarningPromisc = C.PCAP_WARNING_PROMISC_NOTSUP
+ pcapErrorNoSuchDevice = C.PCAP_ERROR_NO_SUCH_DEVICE
+ pcapErrorDenied = C.PCAP_ERROR_PERM_DENIED
+ pcapErrorNotUp = C.PCAP_ERROR_IFACE_NOT_UP
+ pcapError = C.PCAP_ERROR
+ pcapWarning = C.PCAP_WARNING
+ pcapDIN = C.PCAP_D_IN
+ pcapDOUT = C.PCAP_D_OUT
+ pcapDINOUT = C.PCAP_D_INOUT
+ pcapNetmaskUnknown = C.PCAP_NETMASK_UNKNOWN
+ pcapTstampPrecisionMicro = C.PCAP_TSTAMP_PRECISION_MICRO
+ pcapTstampPrecisionNano = C.PCAP_TSTAMP_PRECISION_NANO
+)
+
+type timeval C.struct_timeval
+type pcapPkthdr C.struct_pcap_pkthdr
+type pcapTPtr uintptr
+type pcapBpfInstruction C.struct_bpf_insn
+type pcapBpfProgram C.struct_bpf_program
+type pcapStats C.struct_pcap_stat
+type pcapCint C.int
+type pcapIf C.struct_pcap_if
+// +godefs map struct_sockaddr syscall.RawSockaddr
+type pcapAddr C.struct_pcap_addr
+`
+
+var includes = flag.String("I", "C:\\npcap-sdk-1.01\\Include", "Include path containing libpcap headers")
+
+func main() {
+ flag.Parse()
+
+ infile, err := ioutil.TempFile(".", "defs.*.go")
+ if err != nil {
+ log.Fatal("Couldn't create temporary source file: ", err)
+ }
+ defer infile.Close()
+ defer os.Remove(infile.Name())
+
+ _, err = infile.WriteString(source)
+ if err != nil {
+ log.Fatalf("Couldn't write definitions to temporary file %s: %s", infile.Name(), err)
+ }
+ err = infile.Close()
+ if err != nil {
+ log.Fatalf("Couldn't close temporary source file %s: %s", infile.Name(), err)
+ }
+
+ archs := []string{"386", "amd64"}
+ for _, arch := range archs {
+ env := append(os.Environ(), "GOARCH="+arch)
+ cmd := exec.Command("go", "tool", "cgo", "-godefs", "--", "-I", *includes, infile.Name())
+ cmd.Env = env
+ cmd.Stderr = os.Stderr
+ var generated bytes.Buffer
+ cmd.Stdout = &generated
+ err := cmd.Run()
+ if err != nil {
+ log.Fatalf("Couldn't generated defs for %s: %s\n", arch, err)
+ }
+
+ cmd = exec.Command("gofmt")
+ cmd.Env = env
+ cmd.Stderr = os.Stderr
+ outName := fmt.Sprintf("defs_windows_%s.go", arch)
+ out, err := os.Create(outName)
+ if err != nil {
+ log.Fatalf("Couldn't open file %s: %s", outName, err)
+ }
+ cmd.Stdout = out
+ in, err := cmd.StdinPipe()
+ if err != nil {
+ log.Fatal("Couldn't create input pipe for gofmt: ", err)
+ }
+ err = cmd.Start()
+ if err != nil {
+ log.Fatal("Couldn't start gofmt: ", err)
+ }
+
+ _, err = fmt.Fprintf(in, header, strings.Join(append([]string{filepath.Base(os.Args[0])}, os.Args[1:]...), " "))
+ if err != nil {
+ log.Fatal("Couldn't write header to gofmt: ", err)
+ }
+
+ for {
+ line, err := generated.ReadBytes('\n')
+ if err != nil {
+ break
+ }
+ // remove godefs comments
+ if bytes.HasPrefix(line, []byte("//")) {
+ continue
+ }
+ _, err = in.Write(line)
+ if err != nil {
+ log.Fatal("Couldn't write line to gofmt: ", err)
+ }
+ }
+ in.Close()
+ err = cmd.Wait()
+ if err != nil {
+ log.Fatal("gofmt failed: ", err)
+ }
+ out.Close()
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap.go
index cfc86531700..6eeeb6535e8 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap.go
@@ -7,98 +7,17 @@
package pcap
-/*
-#cgo linux LDFLAGS: -lpcap
-#cgo freebsd LDFLAGS: -lpcap
-#cgo openbsd 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
-#define gopacket_time_secs_t time_t
-#define gopacket_time_usecs_t suseconds_t
-#endif
-*/
-import "C"
-
import (
"errors"
"fmt"
"io"
"net"
+ "os"
"reflect"
"runtime"
"strconv"
"sync"
+ "sync/atomic"
"syscall"
"time"
"unsafe"
@@ -107,9 +26,10 @@ import (
"github.com/google/gopacket/layers"
)
-const errorBufferSize = 256
+// ErrNotActive is returned if handle is not activated
+const ErrNotActive = pcapErrorNotActivated
-// Maximum number of BPF instructions supported (BPF_MAXINSNS),
+// 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
@@ -124,17 +44,25 @@ const bpfInstructionBufferSize = 8 * MaxBpfInstructions
//
// Handles are already pcap_activate'd
type Handle struct {
+ // stop is set to a non-zero value by Handle.Close to signal to
+ // getNextBufPtrLocked to stop trying to read packets
+ // This must be the first entry to ensure alignment for sync.atomic
+ stop uint64
// cptr is the handle for the actual pcap C object.
- cptr *C.pcap_t
- blockForever bool
- device string
- mu sync.Mutex
+ cptr pcapTPtr
+ timeout time.Duration
+ device string
+ deviceIndex int
+ mu sync.Mutex
+ closeMu sync.Mutex
+ nanoSecsFactor int64
+
// 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
- buf_ptr *C.u_char
+ pkthdr *pcapPkthdr
+ bufptr *uint8
}
// Stats contains statistics on how many packets were handled by a pcap handle,
@@ -149,8 +77,8 @@ type Stats struct {
type Interface struct {
Name string
Description string
+ Flags uint32
Addresses []InterfaceAddress
- // TODO: add more elements
}
// Datalink describes the datalink
@@ -162,15 +90,17 @@ type Datalink struct {
// 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 ?
+ IP net.IP
+ Netmask net.IPMask // Netmask may be nil if we were unable to retrieve it.
+ Broadaddr net.IP // Broadcast address for this IP may be nil
+ P2P net.IP // P2P destination address for this IP may be nil
}
// 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
+ bpf pcapBpfProgram // takes a finalizer, not overriden by outsiders
+ hdr pcapPkthdr // allocate on the heap to enable optimizations
}
// BPFInstruction is a byte encoded structure holding a BPF instruction
@@ -181,12 +111,12 @@ type BPFInstruction struct {
K uint32
}
-// BlockForever, when passed into OpenLive/SetTimeout, causes it to block forever
-// waiting for packets, while still returning incoming packets to userland relatively
+// 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 {
+func timeoutMillis(timeout time.Duration) int {
// Flip sign if necessary. See package docs on timeout for reasoning behind this.
if timeout < 0 {
timeout *= -1
@@ -195,48 +125,85 @@ func timeoutMillis(timeout time.Duration) C.int {
if timeout != 0 && timeout < time.Millisecond {
timeout = time.Millisecond
}
- return C.int(timeout / time.Millisecond)
+ return 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.
+// mode, and a timeout. Warning: this function supports only microsecond timestamps.
+// For nanosecond resolution use an InactiveHandle.
//
// 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
+ var pro int
if promisc {
pro = 1
}
- p := &Handle{}
- p.blockForever = timeout < 0
- p.device = device
- dev := C.CString(device)
- defer C.free(unsafe.Pointer(dev))
+ p, err := pcapOpenLive(device, int(snaplen), pro, timeoutMillis(timeout))
+ if err != nil {
+ return nil, err
+ }
+ p.timeout = timeout
+ p.device = device
- 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))
+ 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
+ }
+
+ p.nanoSecsFactor = 1000
+
+ // Only set the PCAP handle into non-blocking mode if we have a timeout
+ // greater than zero. If the user wants to block forever, we'll let libpcap
+ // handle that.
+ if p.timeout > 0 {
+ if err := p.setNonBlocking(); err != nil {
+ p.pcapClose()
+ return nil, err
+ }
}
+
return p, nil
}
-// OpenOffline opens a file and returns its contents as a *Handle.
+// OpenOffline opens a file and returns its contents as a *Handle. Depending on libpcap support and
+// on the timestamp resolution used in the file, nanosecond or microsecond resolution is used
+// internally. All returned timestamps are scaled to nanosecond resolution. Resolution() can be used
+// to query the actual resolution used.
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))
+ handle, err = openOffline(file)
+ if err != nil {
+ return
+ }
+ if pcapGetTstampPrecision(handle.cptr) == pcapTstampPrecisionNano {
+ handle.nanoSecsFactor = 1
+ } else {
+ handle.nanoSecsFactor = 1000
+ }
+ return
+}
- cptr := C.pcap_open_offline(cf, buf)
- if cptr == nil {
- return nil, errors.New(C.GoString(buf))
+// OpenOfflineFile returns contents of input file as a *Handle. Depending on libpcap support and
+// on the timestamp resolution used in the file, nanosecond or microsecond resolution is used
+// internally. All returned timestamps are scaled to nanosecond resolution. Resolution() can be used
+// to query the actual resolution used.
+func OpenOfflineFile(file *os.File) (handle *Handle, err error) {
+ handle, err = openOfflineFile(file)
+ if err != nil {
+ return
}
- return &Handle{cptr: cptr}, nil
+ if pcapGetTstampPrecision(handle.cptr) == pcapTstampPrecisionNano {
+ handle.nanoSecsFactor = 1
+ } else {
+ handle.nanoSecsFactor = 1000
+ }
+ return
}
// NextError is the return code from a call to Next.
@@ -259,6 +226,7 @@ func (n NextError) Error() string {
return strconv.Itoa(int(n))
}
+// NextError values.
const (
NextErrorOk NextError = 1
NextErrorTimeoutExpired NextError = 0
@@ -269,28 +237,33 @@ const (
NextErrorNotActivated NextError = -3
)
-// NextError returns the next packet read from the pcap handle, along with an error
+// 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.buf_ptr), C.int(ci.CaptureLength))
+ data = make([]byte, ci.CaptureLength)
+ copy(data, (*(*[1 << 30]byte)(unsafe.Pointer(p.bufptr)))[:])
}
p.mu.Unlock()
+ if err == NextErrorTimeoutExpired {
+ runtime.Gosched()
+ }
return
}
-type activateError C.int
+type activateError 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
+ aeNoError = activateError(0)
+ aeActivated = activateError(pcapErrorActivated)
+ aePromisc = activateError(pcapWarningPromisc)
+ aeNoSuchDevice = activateError(pcapErrorNoSuchDevice)
+ aeDenied = activateError(pcapErrorDenied)
+ aeNotUp = activateError(pcapErrorNotUp)
+ aeWarning = activateError(pcapWarning)
)
func (a activateError) Error() string {
@@ -307,6 +280,8 @@ func (a activateError) Error() string {
return "Permission Denied"
case aeNotUp:
return "Interface Not Up"
+ case aeWarning:
+ return fmt.Sprintf("Warning: %v", activateErrMsg.Error())
default:
return fmt.Sprintf("unknown activated error: %d", a)
}
@@ -315,29 +290,52 @@ func (a activateError) Error() string {
// getNextBufPtrLocked is shared code for ReadPacketData and
// ZeroCopyReadPacketData.
func (p *Handle) getNextBufPtrLocked(ci *gopacket.CaptureInfo) error {
- if p.cptr == nil {
+ if !p.isOpen() {
return io.EOF
}
- var result NextError
- for {
- result = NextError(C.pcap_next_ex(p.cptr, &p.pkthdr, &p.buf_ptr))
- if p.blockForever && result == NextErrorTimeoutExpired {
- continue
- }
- break
- }
- if result != NextErrorOk {
- if result == NextErrorNoMorePackets {
+
+ // set after we have call waitForPacket for the first time
+ var waited bool
+
+ for atomic.LoadUint64(&p.stop) == 0 {
+ // try to read a packet if one is immediately available
+ result := p.pcapNextPacketEx()
+
+ switch result {
+ case NextErrorOk:
+ sec := p.pkthdr.getSec()
+ // convert micros to nanos
+ nanos := int64(p.pkthdr.getUsec()) * p.nanoSecsFactor
+
+ ci.Timestamp = time.Unix(sec, nanos)
+ ci.CaptureLength = p.pkthdr.getCaplen()
+ ci.Length = p.pkthdr.getLen()
+ ci.InterfaceIndex = p.deviceIndex
+
+ return nil
+ case NextErrorNoMorePackets:
+ // no more packets, return EOF rather than libpcap-specific error
return io.EOF
- } else {
+ case NextErrorTimeoutExpired:
+ // we've already waited for a packet and we're supposed to time out
+ //
+ // we should never actually hit this if we were passed BlockForever
+ // since we should block on C.pcap_next_ex until there's a packet
+ // to read.
+ if waited && p.timeout > 0 {
+ return result
+ }
+
+ // wait for packet before trying again
+ p.waitForPacket()
+ waited = true
+ default:
return result
}
}
- ci.Timestamp = time.Unix(int64(p.pkthdr.ts.tv_sec),
- int64(p.pkthdr.ts.tv_usec)*1000) // convert micros to nanos
- ci.CaptureLength = int(p.pkthdr.caplen)
- ci.Length = int(p.pkthdr.len)
- return nil
+
+ // stop must be set
+ return io.EOF
}
// ZeroCopyReadPacketData reads the next packet off the wire, and returns its data.
@@ -355,140 +353,103 @@ func (p *Handle) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo,
err = p.getNextBufPtrLocked(&ci)
if err == nil {
slice := (*reflect.SliceHeader)(unsafe.Pointer(&data))
- slice.Data = uintptr(unsafe.Pointer(p.buf_ptr))
+ 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.mu.Lock()
- if p.cptr == nil {
+ p.closeMu.Lock()
+ defer p.closeMu.Unlock()
+
+ if !p.isOpen() {
return
}
- C.pcap_close(p.cptr)
- p.cptr = nil
- p.mu.Unlock()
+
+ atomic.StoreUint64(&p.stop, 1)
+
+ // wait for packet reader to stop
+ p.mu.Lock()
+ defer p.mu.Unlock()
+
+ p.pcapClose()
}
// 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)))
+ return p.pcapGeterr()
}
// 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
+ return p.pcapStats()
}
-// Obtains a list of all possible data link types supported for an interface.
+// ListDataLinks obtains a list of all possible data link types supported for an interface.
func (p *Handle) ListDataLinks() (datalinks []Datalink, err error) {
- var dlt_buf *C.int
-
- n := int(C.pcap_list_datalinks(p.cptr, &dlt_buf))
- if -1 == n {
- return nil, p.Error()
- }
-
- defer C.pcap_free_datalinks(dlt_buf)
-
- datalinks = make([]Datalink, n)
-
- dltArray := (*[100]C.int)(unsafe.Pointer(dlt_buf))
-
- 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
+ return p.pcapListDatalinks()
}
-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
+// compileBPFFilter always returns an allocated C.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) (pcapBpfProgram, error) {
+ var maskp = uint32(pcapNetmaskUnknown)
// 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,
- ) {
+ var err error
+ _, maskp, err = pcapLookupnet(p.device)
+ if err != nil {
// We can't lookup the network, but that could be because the interface
// doesn't have an IPv4.
+ maskp = uint32(pcapNetmaskUnknown)
}
}
- var bpf _Ctype_struct_bpf_program
- cexpr := C.CString(expr)
- defer C.free(unsafe.Pointer(cexpr))
+ return p.pcapCompile(expr, maskp)
+}
- if -1 == C.pcap_compile(p.cptr, &bpf, cexpr, 1, C.bpf_u_int32(maskp)) {
- return bpf, p.Error()
+// 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) {
+ h, err := pcapOpenDead(linkType, captureLength)
+ if err != nil {
+ return nil, err
}
-
- return bpf, nil
+ 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 bpf.free()
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)
- }
-
- C.pcap_freecode(&bpf)
-
- return bpfInstruction, nil
+ return bpf.toBPFInstruction(), 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 bpf.free()
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
+ return p.pcapSetfilter(bpf)
}
// SetBPFInstructionFilter may be used to apply a filter in BPF asm byte code format.
@@ -525,17 +486,12 @@ func (p *Handle) SetBPFInstructionFilter(bpfInstructions []BPFInstruction) (err
if err != nil {
return err
}
+ defer bpf.free()
- if -1 == C.pcap_setfilter(p.cptr, &bpf) {
- C.pcap_freecode(&bpf)
- return p.Error()
- }
-
- C.pcap_freecode(&bpf)
-
- return nil
+ return p.pcapSetfilter(bpf)
}
-func bpfInstructionFilter(bpfInstructions []BPFInstruction) (bpf _Ctype_struct_bpf_program, err error) {
+
+func bpfInstructionFilter(bpfInstructions []BPFInstruction) (bpf pcapBpfProgram, err error) {
if len(bpfInstructions) < 1 {
return bpf, errors.New("bpfInstructions must not be empty")
}
@@ -544,13 +500,7 @@ func bpfInstructionFilter(bpfInstructions []BPFInstruction) (bpf _Ctype_struct_b
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
+ return pcapBpfProgramFromInstructions(bpfInstructions), nil
}
// NewBPF compiles the given string into a new filter program.
@@ -559,17 +509,37 @@ func bpfInstructionFilter(bpfInstructions []BPFInstruction) (bpf _Ctype_struct_b
// 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))
- if C.pcap_compile(p.cptr, &bpf.bpf, cexpr /* optimize */, 1, C.PCAP_NETMASK_UNKNOWN) != 0 {
- return nil, p.Error()
+ var err error
+ bpf.bpf, err = p.pcapCompile(expr, pcapNetmaskUnknown)
+ if err != nil {
+ return nil, err
}
runtime.SetFinalizer(bpf, destroyBPF)
return bpf, nil
}
+// NewBPF allows to create a BPF without requiring an existing handle.
+// This allows to match packets obtained from a-non GoPacket capture source
+// to be matched.
+//
+// buf := make([]byte, MaxFrameSize)
+// bpfi, _ := pcap.NewBPF(layers.LinkTypeEthernet, MaxFrameSize, "icmp")
+// n, _ := someIO.Read(buf)
+// ci := gopacket.CaptureInfo{CaptureLength: n, Length: n}
+// if bpfi.Matches(ci, buf) {
+// doSomething()
+// }
+func NewBPF(linkType layers.LinkType, captureLength int, expr string) (*BPF, error) {
+ h, err := pcapOpenDead(linkType, captureLength)
+ if err != nil {
+ return nil, err
+ }
+ defer h.Close()
+ return h.NewBPF(expr)
+}
+
// NewBPFInstructionFilter sets the given BPFInstructions as new filter program.
//
// More details see func SetBPFInstructionFilter
@@ -589,7 +559,7 @@ func (p *Handle) NewBPFInstructionFilter(bpfInstructions []BPFInstruction) (*BPF
return bpf, nil
}
func destroyBPF(bpf *BPF) {
- C.pcap_freecode(&bpf.bpf)
+ bpf.bpf.free()
}
// String returns the original string this BPF filter was compiled from.
@@ -599,93 +569,98 @@ func (b *BPF) String() string {
// 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
+ return b.pcapOfflineFilter(ci, data)
}
// Version returns pcap_lib_version.
func Version() string {
- return C.GoString(C.pcap_lib_version())
+ return pcapLibVersion()
}
// LinkType returns pcap_datalink, as a layers.LinkType.
func (p *Handle) LinkType() layers.LinkType {
- return layers.LinkType(C.pcap_datalink(p.cptr))
+ return p.pcapDatalink()
}
// 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
+ return p.pcapSetDatalink(dlt)
+}
+
+// DatalinkValToName returns pcap_datalink_val_to_name as string
+func DatalinkValToName(dlt int) string {
+ return pcapDatalinkValToName(dlt)
+}
+
+// DatalinkValToDescription returns pcap_datalink_val_to_description as string
+func DatalinkValToDescription(dlt int) string {
+ return pcapDatalinkValToDescription(dlt)
+}
+
+// DatalinkNameToVal returns pcap_datalink_name_to_val as int
+func DatalinkNameToVal(name string) int {
+ return pcapDatalinkNameToVal(name)
}
// 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) {
+ alldevsp, err := pcapFindAllDevs()
+ if err != nil {
+ return nil, err
+ }
+ defer alldevsp.free()
+
+ for alldevsp.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++
+ iface.Name = alldevsp.name()
+ iface.Description = alldevsp.description()
+ iface.Addresses = findalladdresses(alldevsp.addresses())
+ iface.Flags = alldevsp.flags()
+ ifs = append(ifs, iface)
}
return
}
-func findalladdresses(addresses *_Ctype_struct_pcap_addr) (retval []InterfaceAddress) {
+func findalladdresses(addresses pcapAddresses) (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) {
+ for addresses.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 {
+ if addresses.addr() == nil {
continue
}
var a InterfaceAddress
var err error
- if a.IP, err = sockaddr_to_IP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.addr))); err != nil {
+ if a.IP, err = sockaddrToIP(addresses.addr()); err != nil {
continue
}
// To be safe, we'll also check for netmask.
- if curaddr.netmask == nil {
+ if addresses.netmask() == nil {
continue
}
- if a.Netmask, err = sockaddr_to_IP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.netmask))); err != nil {
+ if a.Netmask, err = sockaddrToIP(addresses.netmask()); err != nil {
// If we got an IP address but we can't get a netmask, just return the IP
// address.
a.Netmask = nil
}
+ if a.Broadaddr, err = sockaddrToIP(addresses.broadaddr()); err != nil {
+ a.Broadaddr = nil
+ }
+ if a.P2P, err = sockaddrToIP(addresses.dstaddr()); err != nil {
+ a.P2P = nil
+ }
retval = append(retval, a)
}
return
}
-func sockaddr_to_IP(rsa *syscall.RawSockaddr) (IP []byte, err error) {
+func sockaddrToIP(rsa *syscall.RawSockaddr) (IP []byte, err error) {
+ if rsa == nil {
+ err = errors.New("Value not set")
+ return
+ }
switch rsa.Family {
case syscall.AF_INET:
pp := (*syscall.RawSockaddrInet4)(unsafe.Pointer(rsa))
@@ -708,19 +683,17 @@ func sockaddr_to_IP(rsa *syscall.RawSockaddr) (IP []byte, err error) {
// 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
+ return p.pcapSendpacket(data)
}
// 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
+ DirectionIn = Direction(pcapDIN)
+ DirectionOut = Direction(pcapDOUT)
+ DirectionInOut = Direction(pcapDINOUT)
)
// SetDirection sets the direction for which packets will be captured.
@@ -728,61 +701,87 @@ 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 p.pcapSetdirection(direction)
+}
+
+// SnapLen returns the snapshot length
+func (p *Handle) SnapLen() int {
+ return p.pcapSnapshot()
+}
+
+// Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.
+func (p *Handle) Resolution() gopacket.TimestampResolution {
+ if p.nanoSecsFactor == 1 {
+ return gopacket.TimestampResolutionMicrosecond
}
- return nil
+ return gopacket.TimestampResolutionNanosecond
}
// TimestampSource tells PCAP which type of timestamp to use for packets.
-type TimestampSource C.int
+type TimestampSource 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)))
+ return t.pcapTstampTypeValToName()
}
// TimestampSourceFromString translates a string into a timestamp type, case
// insensitive.
func TimestampSourceFromString(s string) (TimestampSource, error) {
- t := C.pcap_tstamp_type_name_to_val(C.CString(s))
- 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)))
+ return pcapTstampTypeNameToVal(s)
}
// 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
- blockForever bool
+ cptr pcapTPtr
+ device string
+ deviceIndex int
+ timeout time.Duration
+}
+
+// holds the err messoge in case activation returned a Warning
+var activateErrMsg error
+
+// Error returns the current error associated with a pcap handle (pcap_geterr).
+func (p *InactiveHandle) Error() error {
+ return p.pcapGeterr()
}
// 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))
+ // ignore error with set_tstamp_precision, since the actual precision is queried later anyway
+ pcapSetTstampPrecision(p.cptr, pcapTstampPrecisionNano)
+ handle, err := p.pcapActivate()
if err != aeNoError {
+ if err == aeWarning {
+ activateErrMsg = p.Error()
+ }
return nil, err
}
- h := &Handle{cptr: p.cptr, device: p.device, blockForever: p.blockForever}
- p.cptr = nil
- return h, nil
+ handle.timeout = p.timeout
+ if p.timeout > 0 {
+ if err := handle.setNonBlocking(); err != nil {
+ handle.pcapClose()
+ return nil, err
+ }
+ }
+ handle.device = p.device
+ handle.deviceIndex = p.deviceIndex
+ if pcapGetTstampPrecision(handle.cptr) == pcapTstampPrecisionNano {
+ handle.nanoSecsFactor = 1
+ } else {
+ handle.nanoSecsFactor = 1000
+ }
+ return handle, 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)
- }
+ p.pcapClose()
}
// NewInactiveHandle creates a new InactiveHandle, which wraps an un-activated PCAP handle.
@@ -790,71 +789,57 @@ func (p *InactiveHandle) CleanUp() {
// 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))
+ handle, err := pcapCreate(device)
+ if err != nil {
+ return nil, err
}
- return &InactiveHandle{cptr: cptr, device: device}, nil
+ handle.device = device
+ handle.deviceIndex = deviceIndex
+ return handle, 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
+ return p.pcapSetSnaplen(snaplen)
}
// 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
+ return p.pcapSetPromisc(promisc)
}
// 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 {
- p.blockForever = timeout < 0
- if status := C.pcap_set_timeout(p.cptr, timeoutMillis(timeout)); status < 0 {
- return statusError(status)
+ err := p.pcapSetTimeout(timeout)
+ if err != nil {
+ return err
}
+ 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
+ return p.pcapListTstampTypes()
}
// 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
+ return p.pcapSetTstampType(t)
}
// CannotSetRFMon is returned by SetRFMon if the handle does not allow
@@ -865,42 +850,17 @@ var CannotSetRFMon = errors.New("Cannot set rfmon for this handle")
// 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
+ return p.pcapSetRfmon(monitor)
}
// 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
+ return p.pcapSetBufferSize(bufferSize)
}
// 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
+ return p.pcapSetImmediateMode(mode)
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_test.go
index f26590846f5..e823da4ba31 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_test.go
@@ -9,51 +9,95 @@ 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)
+ }
+ invalidPcap.Close() // if the file is still open later, the invalid test fails with permission denied on windows
+ defer os.Remove(invalidPcap.Name())
+
+ err = ioutil.WriteFile(invalidPcap.Name(), invalidData, 0644)
+ if err != nil {
+ t.Fatal(err)
+ }
+
for _, file := range []struct {
filename string
num int
expectedLayers []gopacket.LayerType
+ err string
}{
- {"test_loopback.pcap",
- 24,
- []gopacket.LayerType{
+ {filename: "test_loopback.pcap",
+ num: 24,
+ expectedLayers: []gopacket.LayerType{
layers.LayerTypeLoopback,
layers.LayerTypeIPv6,
layers.LayerTypeTCP,
},
},
- {"test_ethernet.pcap",
- 16,
- []gopacket.LayerType{
+ {filename: "test_ethernet.pcap",
+ num: 10,
+ expectedLayers: []gopacket.LayerType{
layers.LayerTypeEthernet,
layers.LayerTypeIPv4,
layers.LayerTypeTCP,
},
},
- {"test_dns.pcap",
- 10,
- []gopacket.LayerType{
+ {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 {
- t.Fatal(err)
+ 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)
@@ -116,71 +160,73 @@ func TestBPFInstruction(t *testing.T) {
oversizedBpfInstructionBuffer := [MaxBpfInstructions + 1]BPFInstruction{}
for _, expected := range []struct {
+ Filter string
BpfInstruction []BPFInstruction
Error bool
Result bool
}{
// {"foobar", true, false},
- {[]BPFInstruction{}, true, false},
+ {"foobar", []BPFInstruction{}, true, false},
- // {"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)", false, true},
// tcpdump -dd '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},
-
- // {"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack", false, true},
+ {"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'
- {[]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},
-
- // {"udp", false, false},
+ {"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'
- {[]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},
+ {"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 {
@@ -191,6 +237,26 @@ func TestBPFInstruction(t *testing.T) {
} 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])
+ }
+ }
+ }
+ }
}
}
@@ -233,10 +299,4 @@ func ExampleBPF() {
// 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_tester.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_tester.go
index e04da37c6a3..7873a96c0cd 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_tester.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_tester.go
@@ -11,14 +11,15 @@
package main
import (
+ "errors"
"flag"
"fmt"
- "github.com/google/gopacket/pcap"
"log"
- "net"
"net/http"
"os"
"time"
+
+ "github.com/google/gopacket/pcap"
)
var mode = flag.String("mode", "basic", "One of: basic,filtered,timestamp")
@@ -33,7 +34,7 @@ func generatePackets() {
func main() {
flag.Parse()
- ifaces, err := net.Interfaces()
+ ifaces, err := pcap.FindAllDevs()
if err != nil {
log.Fatal(err)
}
@@ -49,9 +50,9 @@ func main() {
os.Exit(1)
}
-func tryCapture(iface net.Interface) error {
+func tryCapture(iface pcap.Interface) error {
if iface.Name[:2] == "lo" {
- return fmt.Errorf("skipping loopback")
+ return errors.New("skipping loopback")
}
var h *pcap.Handle
var err error
@@ -86,7 +87,7 @@ func tryCapture(iface net.Interface) error {
}
sources := u.SupportedTimestamps()
if len(sources) == 0 {
- return fmt.Errorf("no supported timestamp sources")
+ 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 {
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_unix.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_unix.go
new file mode 100644
index 00000000000..4d6a4fbe42f
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_unix.go
@@ -0,0 +1,709 @@
+// 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
+
+import (
+ "errors"
+ "os"
+ "sync"
+ "syscall"
+ "time"
+ "unsafe"
+
+ "github.com/google/gopacket"
+
+ "github.com/google/gopacket/layers"
+)
+
+/*
+#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
+#include <stdlib.h>
+#include <pcap.h>
+#include <stdint.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
+#define PCAP_ERROR_TSTAMP_PRECISION_NOTSUP -12
+
+int pcap_set_immediate_mode(pcap_t *p, int mode) {
+ return PCAP_ERROR;
+}
+
+// libpcap version < v1.5 doesn't have timestamp precision (everything is microsecond)
+//
+// This means *_tstamp_* functions and macros are missing. Therefore, we emulate these
+// functions here and pretend the setting the precision works. This is actually the way
+// the pcap_open_offline_with_tstamp_precision works, because it doesn't return an error
+// if it was not possible to set the precision, which depends on support by the given file.
+// => The rest of the functions always pretend as if they could set nano precision and
+// verify the actual precision with pcap_get_tstamp_precision, which is emulated for <v1.5
+// to always return micro resolution.
+
+#define PCAP_TSTAMP_PRECISION_MICRO 0
+#define PCAP_TSTAMP_PRECISION_NANO 1
+
+pcap_t *pcap_open_offline_with_tstamp_precision(const char *fname, u_int precision,
+ char *errbuf) {
+ return pcap_open_offline(fname, errbuf);
+}
+
+pcap_t *pcap_fopen_offline_with_tstamp_precision(FILE *fp, u_int precision,
+ char *errbuf) {
+ return pcap_fopen_offline(fp, errbuf);
+}
+
+int pcap_set_tstamp_precision(pcap_t *p, int tstamp_precision) {
+ if (tstamp_precision == PCAP_TSTAMP_PRECISION_MICRO)
+ return 0;
+ return PCAP_ERROR_TSTAMP_PRECISION_NOTSUP;
+}
+
+int pcap_get_tstamp_precision(pcap_t *p) {
+ return PCAP_TSTAMP_PRECISION_MICRO;
+}
+
+#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
+
+// Windows, Macs, and Linux all use different time types. Joy.
+#ifdef __APPLE__
+#define gopacket_time_secs_t __darwin_time_t
+#define gopacket_time_usecs_t __darwin_suseconds_t
+#elif __ANDROID__
+#define gopacket_time_secs_t __kernel_time_t
+#define gopacket_time_usecs_t __kernel_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
+
+// The things we do to avoid pointers escaping to the heap...
+// According to https://github.com/the-tcpdump-group/libpcap/blob/1131a7c26c6f4d4772e4a2beeaf7212f4dea74ac/pcap.c#L398-L406 ,
+// the return value of pcap_next_ex could be greater than 1 for success.
+// Let's just make it 1 if it comes bigger than 1.
+int pcap_next_ex_escaping(pcap_t *p, uintptr_t pkt_hdr, uintptr_t pkt_data) {
+ int ex = pcap_next_ex(p, (struct pcap_pkthdr**)(pkt_hdr), (const u_char**)(pkt_data));
+ if (ex > 1) {
+ ex = 1;
+ }
+ return ex;
+}
+
+int pcap_offline_filter_escaping(struct bpf_program *fp, uintptr_t pkt_hdr, uintptr_t pkt) {
+ return pcap_offline_filter(fp, (struct pcap_pkthdr*)(pkt_hdr), (const u_char*)(pkt));
+}
+
+// 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"
+
+const errorBufferSize = C.PCAP_ERRBUF_SIZE
+
+const (
+ pcapErrorNotActivated = C.PCAP_ERROR_NOT_ACTIVATED
+ pcapErrorActivated = C.PCAP_ERROR_ACTIVATED
+ pcapWarningPromisc = C.PCAP_WARNING_PROMISC_NOTSUP
+ pcapErrorNoSuchDevice = C.PCAP_ERROR_NO_SUCH_DEVICE
+ pcapErrorDenied = C.PCAP_ERROR_PERM_DENIED
+ pcapErrorNotUp = C.PCAP_ERROR_IFACE_NOT_UP
+ pcapWarning = C.PCAP_WARNING
+ pcapDIN = C.PCAP_D_IN
+ pcapDOUT = C.PCAP_D_OUT
+ pcapDINOUT = C.PCAP_D_INOUT
+ pcapNetmaskUnknown = C.PCAP_NETMASK_UNKNOWN
+ pcapTstampPrecisionMicro = C.PCAP_TSTAMP_PRECISION_MICRO
+ pcapTstampPrecisionNano = C.PCAP_TSTAMP_PRECISION_NANO
+)
+
+type pcapPkthdr C.struct_pcap_pkthdr
+type pcapTPtr *C.struct_pcap
+type pcapBpfProgram C.struct_bpf_program
+
+func (h *pcapPkthdr) getSec() int64 {
+ return int64(h.ts.tv_sec)
+}
+
+func (h *pcapPkthdr) getUsec() int64 {
+ return int64(h.ts.tv_usec)
+}
+
+func (h *pcapPkthdr) getLen() int {
+ return int(h.len)
+}
+
+func (h *pcapPkthdr) getCaplen() int {
+ return int(h.caplen)
+}
+
+func pcapGetTstampPrecision(cptr pcapTPtr) int {
+ return int(C.pcap_get_tstamp_precision(cptr))
+}
+
+func pcapSetTstampPrecision(cptr pcapTPtr, precision int) error {
+ ret := C.pcap_set_tstamp_precision(cptr, C.int(precision))
+ if ret < 0 {
+ return errors.New(C.GoString(C.pcap_geterr(cptr)))
+ }
+ return nil
+}
+
+func statusError(status C.int) error {
+ return errors.New(C.GoString(C.pcap_statustostr(status)))
+}
+
+func pcapOpenLive(device string, snaplen int, pro int, timeout int) (*Handle, error) {
+ buf := (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(buf))
+
+ dev := C.CString(device)
+ defer C.free(unsafe.Pointer(dev))
+
+ cptr := C.pcap_open_live(dev, C.int(snaplen), C.int(pro), C.int(timeout), buf)
+ if cptr == nil {
+ return nil, errors.New(C.GoString(buf))
+ }
+ return &Handle{cptr: cptr}, nil
+}
+
+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_with_tstamp_precision(cf, C.PCAP_TSTAMP_PRECISION_NANO, buf)
+ if cptr == nil {
+ return nil, errors.New(C.GoString(buf))
+ }
+ return &Handle{cptr: cptr}, nil
+}
+
+func (p *Handle) pcapClose() {
+ if p.cptr != nil {
+ C.pcap_close(p.cptr)
+ }
+ p.cptr = nil
+}
+
+func (p *Handle) pcapGeterr() error {
+ return errors.New(C.GoString(C.pcap_geterr(p.cptr)))
+}
+
+func (p *Handle) pcapStats() (*Stats, error) {
+ var cstats C.struct_pcap_stat
+ if C.pcap_stats(p.cptr, &cstats) < 0 {
+ return nil, p.pcapGeterr()
+ }
+ return &Stats{
+ PacketsReceived: int(cstats.ps_recv),
+ PacketsDropped: int(cstats.ps_drop),
+ PacketsIfDropped: int(cstats.ps_ifdrop),
+ }, nil
+}
+
+// for libpcap < 1.8 pcap_compile is NOT thread-safe, so protect it.
+var pcapCompileMu sync.Mutex
+
+func (p *Handle) pcapCompile(expr string, maskp uint32) (pcapBpfProgram, error) {
+ var bpf pcapBpfProgram
+ cexpr := C.CString(expr)
+ defer C.free(unsafe.Pointer(cexpr))
+
+ pcapCompileMu.Lock()
+ defer pcapCompileMu.Unlock()
+ if C.pcap_compile(p.cptr, (*C.struct_bpf_program)(&bpf), cexpr, 1, C.bpf_u_int32(maskp)) < 0 {
+ return bpf, p.pcapGeterr()
+ }
+ return bpf, nil
+}
+
+func (p pcapBpfProgram) free() {
+ C.pcap_freecode((*C.struct_bpf_program)(&p))
+}
+
+func (p pcapBpfProgram) toBPFInstruction() []BPFInstruction {
+ bpfInsn := (*[bpfInstructionBufferSize]C.struct_bpf_insn)(unsafe.Pointer(p.bf_insns))[0:p.bf_len:p.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
+}
+
+func pcapBpfProgramFromInstructions(bpfInstructions []BPFInstruction) pcapBpfProgram {
+ var bpf pcapBpfProgram
+ bpf.bf_len = C.u_int(len(bpfInstructions))
+ cbpfInsns := C.calloc(C.size_t(len(bpfInstructions)), C.size_t(unsafe.Sizeof(bpfInstructions[0])))
+ gbpfInsns := (*[bpfInstructionBufferSize]C.struct_bpf_insn)(cbpfInsns)
+
+ for i, v := range bpfInstructions {
+ gbpfInsns[i].code = C.u_short(v.Code)
+ gbpfInsns[i].jt = C.u_char(v.Jt)
+ gbpfInsns[i].jf = C.u_char(v.Jf)
+ gbpfInsns[i].k = C.bpf_u_int32(v.K)
+ }
+
+ bpf.bf_insns = (*C.struct_bpf_insn)(cbpfInsns)
+ return bpf
+}
+
+func pcapLookupnet(device string) (netp, maskp uint32, err error) {
+ errorBuf := (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(errorBuf))
+ dev := C.CString(device)
+ defer C.free(unsafe.Pointer(dev))
+ if C.pcap_lookupnet(
+ dev,
+ (*C.bpf_u_int32)(unsafe.Pointer(&netp)),
+ (*C.bpf_u_int32)(unsafe.Pointer(&maskp)),
+ errorBuf,
+ ) < 0 {
+ return 0, 0, errors.New(C.GoString(errorBuf))
+ // We can't lookup the network, but that could be because the interface
+ // doesn't have an IPv4.
+ }
+ return
+}
+
+func (b *BPF) pcapOfflineFilter(ci gopacket.CaptureInfo, data []byte) bool {
+ hdr := (*C.struct_pcap_pkthdr)(&b.hdr)
+ 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_escaping((*C.struct_bpf_program)(&b.bpf),
+ C.uintptr_t(uintptr(unsafe.Pointer(hdr))),
+ C.uintptr_t(uintptr(unsafe.Pointer(dataptr)))) != 0
+}
+
+func (p *Handle) pcapSetfilter(bpf pcapBpfProgram) error {
+ if C.pcap_setfilter(p.cptr, (*C.struct_bpf_program)(&bpf)) < 0 {
+ return p.pcapGeterr()
+ }
+ return nil
+}
+
+func (p *Handle) pcapListDatalinks() (datalinks []Datalink, err error) {
+ var dltbuf *C.int
+
+ n := int(C.pcap_list_datalinks(p.cptr, &dltbuf))
+ if n < 0 {
+ return nil, p.pcapGeterr()
+ }
+
+ defer C.pcap_free_datalinks(dltbuf)
+
+ datalinks = make([]Datalink, n)
+
+ dltArray := (*[1 << 28]C.int)(unsafe.Pointer(dltbuf))
+
+ for i := 0; i < n; i++ {
+ datalinks[i].Name = pcapDatalinkValToName(int((*dltArray)[i]))
+ datalinks[i].Description = pcapDatalinkValToDescription(int((*dltArray)[i]))
+ }
+
+ return datalinks, nil
+}
+
+func pcapOpenDead(linkType layers.LinkType, captureLength int) (*Handle, error) {
+ cptr := C.pcap_open_dead(C.int(linkType), C.int(captureLength))
+ if cptr == nil {
+ return nil, errors.New("error opening dead capture")
+ }
+
+ return &Handle{cptr: cptr}, nil
+}
+
+func (p *Handle) pcapNextPacketEx() NextError {
+ // This horrible magic allows us to pass a ptr-to-ptr to pcap_next_ex
+ // without causing that ptr-to-ptr to itself be allocated on the heap.
+ // Since Handle itself survives through the duration of the pcap_next_ex
+ // call, this should be perfectly safe for GC stuff, etc.
+
+ return NextError(C.pcap_next_ex_escaping(p.cptr, C.uintptr_t(uintptr(unsafe.Pointer(&p.pkthdr))), C.uintptr_t(uintptr(unsafe.Pointer(&p.bufptr)))))
+}
+
+func (p *Handle) pcapDatalink() layers.LinkType {
+ return layers.LinkType(C.pcap_datalink(p.cptr))
+}
+
+func (p *Handle) pcapSetDatalink(dlt layers.LinkType) error {
+ if C.pcap_set_datalink(p.cptr, C.int(dlt)) < 0 {
+ return p.pcapGeterr()
+ }
+ return nil
+}
+
+func pcapDatalinkValToName(dlt int) string {
+ return C.GoString(C.pcap_datalink_val_to_name(C.int(dlt)))
+}
+
+func pcapDatalinkValToDescription(dlt int) string {
+ return C.GoString(C.pcap_datalink_val_to_description(C.int(dlt)))
+}
+
+func pcapDatalinkNameToVal(name string) int {
+ cptr := C.CString(name)
+ defer C.free(unsafe.Pointer(cptr))
+ return int(C.pcap_datalink_name_to_val(cptr))
+}
+
+func pcapLibVersion() string {
+ return C.GoString(C.pcap_lib_version())
+}
+
+func (p *Handle) isOpen() bool {
+ return p.cptr != nil
+}
+
+type pcapDevices struct {
+ all, cur *C.pcap_if_t
+}
+
+func (p pcapDevices) free() {
+ C.pcap_freealldevs((*C.pcap_if_t)(p.all))
+}
+
+func (p *pcapDevices) next() bool {
+ if p.cur == nil {
+ p.cur = p.all
+ if p.cur == nil {
+ return false
+ }
+ return true
+ }
+ if p.cur.next == nil {
+ return false
+ }
+ p.cur = p.cur.next
+ return true
+}
+
+func (p pcapDevices) name() string {
+ return C.GoString(p.cur.name)
+}
+
+func (p pcapDevices) description() string {
+ return C.GoString(p.cur.description)
+}
+
+func (p pcapDevices) flags() uint32 {
+ return uint32(p.cur.flags)
+}
+
+type pcapAddresses struct {
+ all, cur *C.pcap_addr_t
+}
+
+func (p *pcapAddresses) next() bool {
+ if p.cur == nil {
+ p.cur = p.all
+ if p.cur == nil {
+ return false
+ }
+ return true
+ }
+ if p.cur.next == nil {
+ return false
+ }
+ p.cur = p.cur.next
+ return true
+}
+
+func (p pcapAddresses) addr() *syscall.RawSockaddr {
+ return (*syscall.RawSockaddr)(unsafe.Pointer(p.cur.addr))
+}
+
+func (p pcapAddresses) netmask() *syscall.RawSockaddr {
+ return (*syscall.RawSockaddr)(unsafe.Pointer(p.cur.netmask))
+}
+
+func (p pcapAddresses) broadaddr() *syscall.RawSockaddr {
+ return (*syscall.RawSockaddr)(unsafe.Pointer(p.cur.broadaddr))
+}
+
+func (p pcapAddresses) dstaddr() *syscall.RawSockaddr {
+ return (*syscall.RawSockaddr)(unsafe.Pointer(p.cur.dstaddr))
+}
+
+func (p pcapDevices) addresses() pcapAddresses {
+ return pcapAddresses{all: p.cur.addresses}
+}
+
+func pcapFindAllDevs() (pcapDevices, error) {
+ var buf *C.char
+ buf = (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(buf))
+ var alldevsp pcapDevices
+
+ if C.pcap_findalldevs((**C.pcap_if_t)(&alldevsp.all), buf) < 0 {
+ return pcapDevices{}, errors.New(C.GoString(buf))
+ }
+ return alldevsp, nil
+}
+
+func (p *Handle) pcapSendpacket(data []byte) error {
+ if C.pcap_sendpacket(p.cptr, (*C.u_char)(&data[0]), (C.int)(len(data))) < 0 {
+ return p.pcapGeterr()
+ }
+ return nil
+}
+
+func (p *Handle) pcapSetdirection(direction Direction) error {
+ if status := C.pcap_setdirection(p.cptr, (C.pcap_direction_t)(direction)); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+func (p *Handle) pcapSnapshot() int {
+ return int(C.pcap_snapshot(p.cptr))
+}
+
+func (t TimestampSource) pcapTstampTypeValToName() string {
+ return C.GoString(C.pcap_tstamp_type_val_to_name(C.int(t)))
+}
+
+func pcapTstampTypeNameToVal(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 (p *InactiveHandle) pcapGeterr() error {
+ return errors.New(C.GoString(C.pcap_geterr(p.cptr)))
+}
+
+func (p *InactiveHandle) pcapActivate() (*Handle, activateError) {
+ ret := activateError(C.pcap_activate(p.cptr))
+ if ret != aeNoError {
+ return nil, ret
+ }
+ h := &Handle{
+ cptr: p.cptr,
+ }
+ p.cptr = nil
+ return h, ret
+}
+
+func (p *InactiveHandle) pcapClose() {
+ if p.cptr != nil {
+ C.pcap_close(p.cptr)
+ }
+}
+
+func pcapCreate(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))
+
+ cptr := C.pcap_create(dev, buf)
+ if cptr == nil {
+ return nil, errors.New(C.GoString(buf))
+ }
+ return &InactiveHandle{cptr: cptr}, nil
+}
+
+func (p *InactiveHandle) pcapSetSnaplen(snaplen int) error {
+ if status := C.pcap_set_snaplen(p.cptr, C.int(snaplen)); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapSetPromisc(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
+}
+
+func (p *InactiveHandle) pcapSetTimeout(timeout time.Duration) error {
+ if status := C.pcap_set_timeout(p.cptr, C.int(timeoutMillis(timeout))); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapListTstampTypes() (out []TimestampSource) {
+ var types *C.int
+ n := int(C.pcap_list_tstamp_types(p.cptr, &types))
+ if n < 0 {
+ return // public interface doesn't have error :(
+ }
+ defer C.pcap_free_tstamp_types(types)
+ typesArray := (*[1 << 28]C.int)(unsafe.Pointer(types))
+ for i := 0; i < n; i++ {
+ out = append(out, TimestampSource((*typesArray)[i]))
+ }
+ return
+}
+
+func (p *InactiveHandle) pcapSetTstampType(t TimestampSource) error {
+ if status := C.pcap_set_tstamp_type(p.cptr, C.int(t)); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapSetRfmon(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
+}
+
+func (p *InactiveHandle) pcapSetBufferSize(bufferSize int) error {
+ if status := C.pcap_set_buffer_size(p.cptr, C.int(bufferSize)); status < 0 {
+ return statusError(status)
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapSetImmediateMode(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
+}
+
+func (p *Handle) setNonBlocking() 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, C.int(usec))
+}
+
+// openOfflineFile returns contents of input file as a *Handle.
+func openOfflineFile(file *os.File) (handle *Handle, err error) {
+ buf := (*C.char)(C.calloc(errorBufferSize, 1))
+ defer C.free(unsafe.Pointer(buf))
+ cmode := C.CString("rb")
+ defer C.free(unsafe.Pointer(cmode))
+ cf := C.fdopen(C.int(file.Fd()), cmode)
+
+ cptr := C.pcap_fopen_offline_with_tstamp_precision(cf, C.PCAP_TSTAMP_PRECISION_NANO, buf)
+ if cptr == nil {
+ return nil, errors.New(C.GoString(buf))
+ }
+ return &Handle{cptr: cptr}, nil
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_windows.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_windows.go
new file mode 100644
index 00000000000..d8e86cd431c
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcap_windows.go
@@ -0,0 +1,810 @@
+// 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 (
+ "errors"
+ "fmt"
+ "os"
+ "runtime"
+ "sync"
+ "syscall"
+ "time"
+ "unsafe"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+const npcapPath = "\\Npcap"
+
+func initDllPath(kernel32 syscall.Handle) {
+ setDllDirectory, err := syscall.GetProcAddress(kernel32, "SetDllDirectoryA")
+ if err != nil {
+ // we can't do anything since SetDllDirectoryA is missing - fall back to use first wpcap.dll we encounter
+ return
+ }
+ getSystemDirectory, err := syscall.GetProcAddress(kernel32, "GetSystemDirectoryA")
+ if err != nil {
+ // we can't do anything since SetDllDirectoryA is missing - fall back to use first wpcap.dll we encounter
+ return
+ }
+ buf := make([]byte, 4096)
+ r, _, _ := syscall.Syscall(getSystemDirectory, 2, uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)), 0)
+ if r == 0 || r > 4096-uintptr(len(npcapPath))-1 {
+ // we can't do anything since SetDllDirectoryA is missing - fall back to use first wpcap.dll we encounter
+ return
+ }
+ copy(buf[r:], npcapPath)
+ _, _, _ = syscall.Syscall(setDllDirectory, 1, uintptr(unsafe.Pointer(&buf[0])), 0, 0)
+ // ignore errors here - we just fallback to load wpcap.dll from default locations
+}
+
+// loadedDllPath will hold the full pathname of the loaded wpcap.dll after init if possible
+var loadedDllPath = "wpcap.dll"
+
+func initLoadedDllPath(kernel32 syscall.Handle) {
+ getModuleFileName, err := syscall.GetProcAddress(kernel32, "GetModuleFileNameA")
+ if err != nil {
+ // we can't get the filename of the loaded module in this case - just leave default of wpcap.dll
+ return
+ }
+ buf := make([]byte, 4096)
+ r, _, _ := syscall.Syscall(getModuleFileName, 3, uintptr(wpcapHandle), uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)))
+ if r == 0 {
+ // we can't get the filename of the loaded module in this case - just leave default of wpcap.dll
+ return
+ }
+ loadedDllPath = string(buf[:int(r)])
+}
+
+func mustLoad(fun string) uintptr {
+ addr, err := syscall.GetProcAddress(wpcapHandle, fun)
+ if err != nil {
+ panic(fmt.Sprintf("Couldn't load function %s from %s", fun, loadedDllPath))
+ }
+ return addr
+}
+
+func mightLoad(fun string) uintptr {
+ addr, err := syscall.GetProcAddress(wpcapHandle, fun)
+ if err != nil {
+ return 0
+ }
+ return addr
+}
+
+func byteSliceToString(bval []byte) string {
+ for i := range bval {
+ if bval[i] == 0 {
+ return string(bval[:i])
+ }
+ }
+ return string(bval[:])
+}
+
+// bytePtrToString returns a string copied from pointer to a null terminated byte array
+// WARNING: ONLY SAFE WITH IF r POINTS TO C MEMORY!
+// govet will complain about this function for the reason stated above
+func bytePtrToString(r uintptr) string {
+ if r == 0 {
+ return ""
+ }
+ bval := (*[1 << 30]byte)(unsafe.Pointer(r))
+ return byteSliceToString(bval[:])
+}
+
+var wpcapHandle syscall.Handle
+var msvcrtHandle syscall.Handle
+var (
+ callocPtr,
+ pcapStrerrorPtr,
+ pcapStatustostrPtr,
+ pcapOpenLivePtr,
+ pcapOpenOfflinePtr,
+ pcapClosePtr,
+ pcapGeterrPtr,
+ pcapStatsPtr,
+ pcapCompilePtr,
+ pcapFreecodePtr,
+ pcapLookupnetPtr,
+ pcapOfflineFilterPtr,
+ pcapSetfilterPtr,
+ pcapListDatalinksPtr,
+ pcapFreeDatalinksPtr,
+ pcapDatalinkValToNamePtr,
+ pcapDatalinkValToDescriptionPtr,
+ pcapOpenDeadPtr,
+ pcapNextExPtr,
+ pcapDatalinkPtr,
+ pcapSetDatalinkPtr,
+ pcapDatalinkNameToValPtr,
+ pcapLibVersionPtr,
+ pcapFreealldevsPtr,
+ pcapFindalldevsPtr,
+ pcapSendpacketPtr,
+ pcapSetdirectionPtr,
+ pcapSnapshotPtr,
+ pcapTstampTypeValToNamePtr,
+ pcapTstampTypeNameToValPtr,
+ pcapListTstampTypesPtr,
+ pcapFreeTstampTypesPtr,
+ pcapSetTstampTypePtr,
+ pcapGetTstampPrecisionPtr,
+ pcapSetTstampPrecisionPtr,
+ pcapOpenOfflineWithTstampPrecisionPtr,
+ pcapHOpenOfflineWithTstampPrecisionPtr,
+ pcapActivatePtr,
+ pcapCreatePtr,
+ pcapSetSnaplenPtr,
+ pcapSetPromiscPtr,
+ pcapSetTimeoutPtr,
+ pcapCanSetRfmonPtr,
+ pcapSetRfmonPtr,
+ pcapSetBufferSizePtr,
+ pcapSetImmediateModePtr,
+ pcapHopenOfflinePtr uintptr
+)
+
+func init() {
+ kernel32, err := syscall.LoadLibrary("kernel32.dll")
+ if err != nil {
+ panic("couldn't load kernel32.dll")
+ }
+ defer syscall.FreeLibrary(kernel32)
+
+ initDllPath(kernel32)
+
+ wpcapHandle, err = syscall.LoadLibrary("wpcap.dll")
+ if err != nil {
+ panic("Couldn't load wpcap.dll")
+ }
+ initLoadedDllPath(kernel32)
+ msvcrtHandle, err = syscall.LoadLibrary("msvcrt.dll")
+ if err != nil {
+ panic("Couldn't load msvcrt.dll")
+ }
+ callocPtr, err = syscall.GetProcAddress(msvcrtHandle, "calloc")
+ if err != nil {
+ panic("Couldn't get calloc function")
+ }
+
+ pcapStrerrorPtr = mustLoad("pcap_strerror")
+ pcapStatustostrPtr = mightLoad("pcap_statustostr") // not available on winpcap
+ pcapOpenLivePtr = mustLoad("pcap_open_live")
+ pcapOpenOfflinePtr = mustLoad("pcap_open_offline")
+ pcapClosePtr = mustLoad("pcap_close")
+ pcapGeterrPtr = mustLoad("pcap_geterr")
+ pcapStatsPtr = mustLoad("pcap_stats")
+ pcapCompilePtr = mustLoad("pcap_compile")
+ pcapFreecodePtr = mustLoad("pcap_freecode")
+ pcapLookupnetPtr = mustLoad("pcap_lookupnet")
+ pcapOfflineFilterPtr = mustLoad("pcap_offline_filter")
+ pcapSetfilterPtr = mustLoad("pcap_setfilter")
+ pcapListDatalinksPtr = mustLoad("pcap_list_datalinks")
+ pcapFreeDatalinksPtr = mustLoad("pcap_free_datalinks")
+ pcapDatalinkValToNamePtr = mustLoad("pcap_datalink_val_to_name")
+ pcapDatalinkValToDescriptionPtr = mustLoad("pcap_datalink_val_to_description")
+ pcapOpenDeadPtr = mustLoad("pcap_open_dead")
+ pcapNextExPtr = mustLoad("pcap_next_ex")
+ pcapDatalinkPtr = mustLoad("pcap_datalink")
+ pcapSetDatalinkPtr = mustLoad("pcap_set_datalink")
+ pcapDatalinkNameToValPtr = mustLoad("pcap_datalink_name_to_val")
+ pcapLibVersionPtr = mustLoad("pcap_lib_version")
+ pcapFreealldevsPtr = mustLoad("pcap_freealldevs")
+ pcapFindalldevsPtr = mustLoad("pcap_findalldevs")
+ pcapSendpacketPtr = mustLoad("pcap_sendpacket")
+ pcapSetdirectionPtr = mustLoad("pcap_setdirection")
+ pcapSnapshotPtr = mustLoad("pcap_snapshot")
+ //libpcap <1.2 doesn't have pcap_*_tstamp_* functions
+ pcapTstampTypeValToNamePtr = mightLoad("pcap_tstamp_type_val_to_name")
+ pcapTstampTypeNameToValPtr = mightLoad("pcap_tstamp_type_name_to_val")
+ pcapListTstampTypesPtr = mightLoad("pcap_list_tstamp_types")
+ pcapFreeTstampTypesPtr = mightLoad("pcap_free_tstamp_types")
+ pcapSetTstampTypePtr = mightLoad("pcap_set_tstamp_type")
+ pcapGetTstampPrecisionPtr = mightLoad("pcap_get_tstamp_precision")
+ pcapSetTstampPrecisionPtr = mightLoad("pcap_set_tstamp_precision")
+ pcapOpenOfflineWithTstampPrecisionPtr = mightLoad("pcap_open_offline_with_tstamp_precision")
+ pcapHOpenOfflineWithTstampPrecisionPtr = mightLoad("pcap_hopen_offline_with_tstamp_precision")
+ pcapActivatePtr = mustLoad("pcap_activate")
+ pcapCreatePtr = mustLoad("pcap_create")
+ pcapSetSnaplenPtr = mustLoad("pcap_set_snaplen")
+ pcapSetPromiscPtr = mustLoad("pcap_set_promisc")
+ pcapSetTimeoutPtr = mustLoad("pcap_set_timeout")
+ //winpcap does not support rfmon
+ pcapCanSetRfmonPtr = mightLoad("pcap_can_set_rfmon")
+ pcapSetRfmonPtr = mightLoad("pcap_set_rfmon")
+ pcapSetBufferSizePtr = mustLoad("pcap_set_buffer_size")
+ //libpcap <1.5 does not have pcap_set_immediate_mode
+ pcapSetImmediateModePtr = mightLoad("pcap_set_immediate_mode")
+ pcapHopenOfflinePtr = mustLoad("pcap_hopen_offline")
+}
+
+func (h *pcapPkthdr) getSec() int64 {
+ return int64(h.Ts.Sec)
+}
+
+func (h *pcapPkthdr) getUsec() int64 {
+ return int64(h.Ts.Usec)
+}
+
+func (h *pcapPkthdr) getLen() int {
+ return int(h.Len)
+}
+
+func (h *pcapPkthdr) getCaplen() int {
+ return int(h.Caplen)
+}
+
+func statusError(status pcapCint) error {
+ var ret uintptr
+ if pcapStatustostrPtr == 0 {
+ ret, _, _ = syscall.Syscall(pcapStrerrorPtr, 1, uintptr(status), 0, 0)
+ } else {
+ ret, _, _ = syscall.Syscall(pcapStatustostrPtr, 1, uintptr(status), 0, 0)
+ }
+ return errors.New(bytePtrToString(ret))
+}
+
+func pcapGetTstampPrecision(cptr pcapTPtr) int {
+ if pcapGetTstampPrecisionPtr == 0 {
+ return pcapTstampPrecisionMicro
+ }
+ ret, _, _ := syscall.Syscall(pcapGetTstampPrecisionPtr, 1, uintptr(cptr), 0, 0)
+ return int(pcapCint(ret))
+}
+
+func pcapSetTstampPrecision(cptr pcapTPtr, precision int) error {
+ if pcapSetTstampPrecisionPtr == 0 {
+ return errors.New("Not supported")
+ }
+ ret, _, _ := syscall.Syscall(pcapSetTstampPrecisionPtr, 2, uintptr(cptr), uintptr(precision), 0)
+ if pcapCint(ret) < 0 {
+ return errors.New("Not supported")
+ }
+ return nil
+}
+
+func pcapOpenLive(device string, snaplen int, pro int, timeout int) (*Handle, error) {
+ buf := make([]byte, errorBufferSize)
+ dev, err := syscall.BytePtrFromString(device)
+ if err != nil {
+ return nil, err
+ }
+
+ cptr, _, _ := syscall.Syscall6(pcapOpenLivePtr, 5, uintptr(unsafe.Pointer(dev)), uintptr(snaplen), uintptr(pro), uintptr(timeout), uintptr(unsafe.Pointer(&buf[0])), 0)
+
+ if cptr == 0 {
+ return nil, errors.New(byteSliceToString(buf))
+ }
+ return &Handle{cptr: pcapTPtr(cptr)}, nil
+}
+
+func openOffline(file string) (handle *Handle, err error) {
+ buf := make([]byte, errorBufferSize)
+ f, err := syscall.BytePtrFromString(file)
+ if err != nil {
+ return nil, err
+ }
+
+ var cptr uintptr
+ if pcapOpenOfflineWithTstampPrecisionPtr == 0 {
+ cptr, _, _ = syscall.Syscall(pcapOpenOfflinePtr, 2, uintptr(unsafe.Pointer(f)), uintptr(unsafe.Pointer(&buf[0])), 0)
+ } else {
+ cptr, _, _ = syscall.Syscall(pcapOpenOfflineWithTstampPrecisionPtr, 3, uintptr(unsafe.Pointer(f)), uintptr(pcapTstampPrecisionNano), uintptr(unsafe.Pointer(&buf[0])))
+ }
+
+ if cptr == 0 {
+ return nil, errors.New(byteSliceToString(buf))
+ }
+
+ h := &Handle{cptr: pcapTPtr(cptr)}
+ return h, nil
+}
+
+func (p *Handle) pcapClose() {
+ if p.cptr != 0 {
+ _, _, _ = syscall.Syscall(pcapClosePtr, 1, uintptr(p.cptr), 0, 0)
+ }
+ p.cptr = 0
+}
+
+func (p *Handle) pcapGeterr() error {
+ ret, _, _ := syscall.Syscall(pcapGeterrPtr, 1, uintptr(p.cptr), 0, 0)
+ return errors.New(bytePtrToString(ret))
+}
+
+func (p *Handle) pcapStats() (*Stats, error) {
+ var cstats pcapStats
+ ret, _, _ := syscall.Syscall(pcapStatsPtr, 2, uintptr(p.cptr), uintptr(unsafe.Pointer(&cstats)), 0)
+ if pcapCint(ret) < 0 {
+ return nil, p.pcapGeterr()
+ }
+ return &Stats{
+ PacketsReceived: int(cstats.Recv),
+ PacketsDropped: int(cstats.Drop),
+ PacketsIfDropped: int(cstats.Ifdrop),
+ }, nil
+}
+
+// for libpcap < 1.8 pcap_compile is NOT thread-safe, so protect it.
+var pcapCompileMu sync.Mutex
+
+func (p *Handle) pcapCompile(expr string, maskp uint32) (pcapBpfProgram, error) {
+ var bpf pcapBpfProgram
+ cexpr, err := syscall.BytePtrFromString(expr)
+ if err != nil {
+ return pcapBpfProgram{}, err
+ }
+ pcapCompileMu.Lock()
+ defer pcapCompileMu.Unlock()
+ res, _, _ := syscall.Syscall6(pcapCompilePtr, 5, uintptr(p.cptr), uintptr(unsafe.Pointer(&bpf)), uintptr(unsafe.Pointer(cexpr)), uintptr(1), uintptr(maskp), 0)
+ if pcapCint(res) < 0 {
+ return bpf, p.pcapGeterr()
+ }
+ return bpf, nil
+}
+
+func (p pcapBpfProgram) free() {
+ _, _, _ = syscall.Syscall(pcapFreecodePtr, 1, uintptr(unsafe.Pointer(&p)), 0, 0)
+}
+
+func (p pcapBpfProgram) toBPFInstruction() []BPFInstruction {
+ bpfInsn := (*[bpfInstructionBufferSize]pcapBpfInstruction)(unsafe.Pointer(p.Insns))[0:p.Len:p.Len]
+ bpfInstruction := make([]BPFInstruction, len(bpfInsn), len(bpfInsn))
+
+ for i, v := range bpfInsn {
+ bpfInstruction[i].Code = v.Code
+ bpfInstruction[i].Jt = v.Jt
+ bpfInstruction[i].Jf = v.Jf
+ bpfInstruction[i].K = v.K
+ }
+ return bpfInstruction
+}
+
+func pcapBpfProgramFromInstructions(bpfInstructions []BPFInstruction) pcapBpfProgram {
+ var bpf pcapBpfProgram
+ bpf.Len = uint32(len(bpfInstructions))
+ cbpfInsns, _, _ := syscall.Syscall(callocPtr, 2, uintptr(len(bpfInstructions)), uintptr(unsafe.Sizeof(bpfInstructions[0])), 0)
+ gbpfInsns := (*[bpfInstructionBufferSize]pcapBpfInstruction)(unsafe.Pointer(cbpfInsns))
+
+ for i, v := range bpfInstructions {
+ gbpfInsns[i].Code = v.Code
+ gbpfInsns[i].Jt = v.Jt
+ gbpfInsns[i].Jf = v.Jf
+ gbpfInsns[i].K = v.K
+ }
+
+ bpf.Insns = (*pcapBpfInstruction)(unsafe.Pointer(cbpfInsns))
+ return bpf
+}
+
+func pcapLookupnet(device string) (netp, maskp uint32, err error) {
+ buf := make([]byte, errorBufferSize)
+ dev, err := syscall.BytePtrFromString(device)
+ if err != nil {
+ return 0, 0, err
+ }
+ e, _, _ := syscall.Syscall6(pcapLookupnetPtr, 4, uintptr(unsafe.Pointer(dev)), uintptr(unsafe.Pointer(&netp)), uintptr(unsafe.Pointer(&maskp)), uintptr(unsafe.Pointer(&buf[0])), 0, 0)
+ if pcapCint(e) < 0 {
+ return 0, 0, errors.New(byteSliceToString(buf))
+ }
+ return
+}
+
+func (b *BPF) pcapOfflineFilter(ci gopacket.CaptureInfo, data []byte) bool {
+ var hdr pcapPkthdr
+ hdr.Ts.Sec = int32(ci.Timestamp.Unix())
+ hdr.Ts.Usec = int32(ci.Timestamp.Nanosecond() / 1000)
+ hdr.Caplen = uint32(len(data)) // Trust actual length over ci.Length.
+ hdr.Len = uint32(ci.Length)
+ e, _, _ := syscall.Syscall(pcapOfflineFilterPtr, 3, uintptr(unsafe.Pointer(&b.bpf)), uintptr(unsafe.Pointer(&hdr)), uintptr(unsafe.Pointer(&data[0])))
+ return e != 0
+}
+
+func (p *Handle) pcapSetfilter(bpf pcapBpfProgram) error {
+ e, _, _ := syscall.Syscall(pcapSetfilterPtr, 2, uintptr(p.cptr), uintptr(unsafe.Pointer(&bpf)), 0)
+ if pcapCint(e) < 0 {
+ return p.pcapGeterr()
+ }
+ return nil
+}
+
+func (p *Handle) pcapListDatalinks() (datalinks []Datalink, err error) {
+ var dltbuf *pcapCint
+ ret, _, _ := syscall.Syscall(pcapListDatalinksPtr, 2, uintptr(p.cptr), uintptr(unsafe.Pointer(&dltbuf)), 0)
+
+ n := int(pcapCint(ret))
+
+ if n < 0 {
+ return nil, p.pcapGeterr()
+ }
+ defer syscall.Syscall(pcapFreeDatalinksPtr, 1, uintptr(unsafe.Pointer(dltbuf)), 0, 0)
+
+ datalinks = make([]Datalink, n)
+
+ dltArray := (*[1 << 28]pcapCint)(unsafe.Pointer(dltbuf))
+
+ for i := 0; i < n; i++ {
+ datalinks[i].Name = pcapDatalinkValToName(int((*dltArray)[i]))
+ datalinks[i].Description = pcapDatalinkValToDescription(int((*dltArray)[i]))
+ }
+
+ return datalinks, nil
+}
+
+func pcapOpenDead(linkType layers.LinkType, captureLength int) (*Handle, error) {
+ cptr, _, _ := syscall.Syscall(pcapOpenDeadPtr, 2, uintptr(linkType), uintptr(captureLength), 0)
+ if cptr == 0 {
+ return nil, errors.New("error opening dead capture")
+ }
+
+ return &Handle{cptr: pcapTPtr(cptr)}, nil
+}
+
+func (p *Handle) pcapNextPacketEx() NextError {
+ r, _, _ := syscall.Syscall(pcapNextExPtr, 3, uintptr(p.cptr), uintptr(unsafe.Pointer(&p.pkthdr)), uintptr(unsafe.Pointer(&p.bufptr)))
+ ret := pcapCint(r)
+ // According to https://github.com/the-tcpdump-group/libpcap/blob/1131a7c26c6f4d4772e4a2beeaf7212f4dea74ac/pcap.c#L398-L406 ,
+ // the return value of pcap_next_ex could be greater than 1 for success.
+ // Let's just make it 1 if it comes bigger than 1.
+ if ret > 1 {
+ ret = 1
+ }
+ return NextError(ret)
+}
+
+func (p *Handle) pcapDatalink() layers.LinkType {
+ ret, _, _ := syscall.Syscall(pcapDatalinkPtr, 1, uintptr(p.cptr), 0, 0)
+ return layers.LinkType(ret)
+}
+
+func (p *Handle) pcapSetDatalink(dlt layers.LinkType) error {
+ ret, _, _ := syscall.Syscall(pcapSetDatalinkPtr, 2, uintptr(p.cptr), uintptr(dlt), 0)
+ if pcapCint(ret) < 0 {
+ return p.pcapGeterr()
+ }
+ return nil
+}
+
+func pcapDatalinkValToName(dlt int) string {
+ ret, _, _ := syscall.Syscall(pcapDatalinkValToNamePtr, 1, uintptr(dlt), 0, 0)
+ return bytePtrToString(ret)
+}
+
+func pcapDatalinkValToDescription(dlt int) string {
+ ret, _, _ := syscall.Syscall(pcapDatalinkValToDescriptionPtr, 1, uintptr(dlt), 0, 0)
+ return bytePtrToString(ret)
+}
+
+func pcapDatalinkNameToVal(name string) int {
+ cptr, err := syscall.BytePtrFromString(name)
+ if err != nil {
+ return 0
+ }
+ ret, _, _ := syscall.Syscall(pcapDatalinkNameToValPtr, 1, uintptr(unsafe.Pointer(cptr)), 0, 0)
+ return int(pcapCint(ret))
+}
+
+func pcapLibVersion() string {
+ ret, _, _ := syscall.Syscall(pcapLibVersionPtr, 0, 0, 0, 0)
+ return bytePtrToString(ret)
+}
+
+func (p *Handle) isOpen() bool {
+ return p.cptr != 0
+}
+
+type pcapDevices struct {
+ all, cur *pcapIf
+}
+
+func (p pcapDevices) free() {
+ syscall.Syscall(pcapFreealldevsPtr, 1, uintptr(unsafe.Pointer(p.all)), 0, 0)
+}
+
+func (p *pcapDevices) next() bool {
+ if p.cur == nil {
+ p.cur = p.all
+ if p.cur == nil {
+ return false
+ }
+ return true
+ }
+ if p.cur.Next == nil {
+ return false
+ }
+ p.cur = p.cur.Next
+ return true
+}
+
+func (p pcapDevices) name() string {
+ return bytePtrToString(uintptr(unsafe.Pointer(p.cur.Name)))
+}
+
+func (p pcapDevices) description() string {
+ return bytePtrToString(uintptr(unsafe.Pointer(p.cur.Description)))
+}
+
+func (p pcapDevices) flags() uint32 {
+ return p.cur.Flags
+}
+
+type pcapAddresses struct {
+ all, cur *pcapAddr
+}
+
+func (p *pcapAddresses) next() bool {
+ if p.cur == nil {
+ p.cur = p.all
+ if p.cur == nil {
+ return false
+ }
+ return true
+ }
+ if p.cur.Next == nil {
+ return false
+ }
+ p.cur = p.cur.Next
+ return true
+}
+
+func (p pcapAddresses) addr() *syscall.RawSockaddr {
+ return p.cur.Addr
+}
+
+func (p pcapAddresses) netmask() *syscall.RawSockaddr {
+ return p.cur.Netmask
+}
+
+func (p pcapAddresses) broadaddr() *syscall.RawSockaddr {
+ return p.cur.Broadaddr
+}
+
+func (p pcapAddresses) dstaddr() *syscall.RawSockaddr {
+ return p.cur.Dstaddr
+}
+
+func (p pcapDevices) addresses() pcapAddresses {
+ return pcapAddresses{all: p.cur.Addresses}
+}
+
+func pcapFindAllDevs() (pcapDevices, error) {
+ buf := make([]byte, errorBufferSize)
+ var alldevsp pcapDevices
+
+ ret, _, _ := syscall.Syscall(pcapFindalldevsPtr, 2, uintptr(unsafe.Pointer(&alldevsp.all)), uintptr(unsafe.Pointer(&buf[0])), 0)
+
+ if pcapCint(ret) < 0 {
+ return pcapDevices{}, errors.New(byteSliceToString(buf))
+ }
+ return alldevsp, nil
+}
+
+func (p *Handle) pcapSendpacket(data []byte) error {
+ ret, _, _ := syscall.Syscall(pcapSendpacketPtr, 3, uintptr(p.cptr), uintptr(unsafe.Pointer(&data[0])), uintptr(len(data)))
+ if pcapCint(ret) < 0 {
+ return p.pcapGeterr()
+ }
+ return nil
+}
+
+func (p *Handle) pcapSetdirection(direction Direction) error {
+ status, _, _ := syscall.Syscall(pcapSetdirectionPtr, 2, uintptr(p.cptr), uintptr(direction), 0)
+ if pcapCint(status) < 0 {
+ return statusError(pcapCint(status))
+ }
+ return nil
+}
+
+func (p *Handle) pcapSnapshot() int {
+ ret, _, _ := syscall.Syscall(pcapSnapshotPtr, 1, uintptr(p.cptr), 0, 0)
+ return int(pcapCint(ret))
+}
+
+func (t TimestampSource) pcapTstampTypeValToName() string {
+ //libpcap <1.2 doesn't have pcap_*_tstamp_* functions
+ if pcapTstampTypeValToNamePtr == 0 {
+ return "pcap timestamp types not supported"
+ }
+ ret, _, _ := syscall.Syscall(pcapTstampTypeValToNamePtr, 1, uintptr(t), 0, 0)
+ return bytePtrToString(ret)
+}
+
+func pcapTstampTypeNameToVal(s string) (TimestampSource, error) {
+ //libpcap <1.2 doesn't have pcap_*_tstamp_* functions
+ if pcapTstampTypeNameToValPtr == 0 {
+ return 0, statusError(pcapCint(pcapError))
+ }
+ cs, err := syscall.BytePtrFromString(s)
+ if err != nil {
+ return 0, err
+ }
+ ret, _, _ := syscall.Syscall(pcapTstampTypeNameToValPtr, 1, uintptr(unsafe.Pointer(cs)), 0, 0)
+ t := pcapCint(ret)
+ if t < 0 {
+ return 0, statusError(pcapCint(t))
+ }
+ return TimestampSource(t), nil
+}
+
+func (p *InactiveHandle) pcapGeterr() error {
+ ret, _, _ := syscall.Syscall(pcapGeterrPtr, 1, uintptr(p.cptr), 0, 0)
+ return errors.New(bytePtrToString(ret))
+}
+
+func (p *InactiveHandle) pcapActivate() (*Handle, activateError) {
+ r, _, _ := syscall.Syscall(pcapActivatePtr, 1, uintptr(p.cptr), 0, 0)
+ ret := activateError(pcapCint(r))
+ if ret != aeNoError {
+ return nil, ret
+ }
+ h := &Handle{
+ cptr: p.cptr,
+ }
+ p.cptr = 0
+ return h, ret
+}
+
+func (p *InactiveHandle) pcapClose() {
+ if p.cptr != 0 {
+ _, _, _ = syscall.Syscall(pcapClosePtr, 1, uintptr(p.cptr), 0, 0)
+ }
+ p.cptr = 0
+}
+
+func pcapCreate(device string) (*InactiveHandle, error) {
+ buf := make([]byte, errorBufferSize)
+ dev, err := syscall.BytePtrFromString(device)
+ if err != nil {
+ return nil, err
+ }
+ cptr, _, _ := syscall.Syscall(pcapCreatePtr, 2, uintptr(unsafe.Pointer(dev)), uintptr(unsafe.Pointer(&buf[0])), 0)
+ if cptr == 0 {
+ return nil, errors.New(byteSliceToString(buf))
+ }
+ return &InactiveHandle{cptr: pcapTPtr(cptr)}, nil
+}
+
+func (p *InactiveHandle) pcapSetSnaplen(snaplen int) error {
+ status, _, _ := syscall.Syscall(pcapSetSnaplenPtr, 2, uintptr(p.cptr), uintptr(snaplen), 0)
+ if pcapCint(status) < 0 {
+ return statusError(pcapCint(status))
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapSetPromisc(promisc bool) error {
+ var pro uintptr
+ if promisc {
+ pro = 1
+ }
+ status, _, _ := syscall.Syscall(pcapSetPromiscPtr, 2, uintptr(p.cptr), pro, 0)
+ if pcapCint(status) < 0 {
+ return statusError(pcapCint(status))
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapSetTimeout(timeout time.Duration) error {
+ status, _, _ := syscall.Syscall(pcapSetTimeoutPtr, 2, uintptr(p.cptr), uintptr(timeoutMillis(timeout)), 0)
+
+ if pcapCint(status) < 0 {
+ return statusError(pcapCint(status))
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapListTstampTypes() (out []TimestampSource) {
+ //libpcap <1.2 doesn't have pcap_*_tstamp_* functions
+ if pcapListTstampTypesPtr == 0 {
+ return
+ }
+ var types *pcapCint
+ ret, _, _ := syscall.Syscall(pcapListTstampTypesPtr, 2, uintptr(p.cptr), uintptr(unsafe.Pointer(&types)), 0)
+ n := int(pcapCint(ret))
+ if n < 0 {
+ return // public interface doesn't have error :(
+ }
+ defer syscall.Syscall(pcapFreeTstampTypesPtr, 1, uintptr(unsafe.Pointer(types)), 0, 0)
+ typesArray := (*[1 << 28]pcapCint)(unsafe.Pointer(types))
+ for i := 0; i < n; i++ {
+ out = append(out, TimestampSource((*typesArray)[i]))
+ }
+ return
+}
+
+func (p *InactiveHandle) pcapSetTstampType(t TimestampSource) error {
+ //libpcap <1.2 doesn't have pcap_*_tstamp_* functions
+ if pcapSetTstampTypePtr == 0 {
+ return statusError(pcapError)
+ }
+ status, _, _ := syscall.Syscall(pcapSetTstampTypePtr, 2, uintptr(p.cptr), uintptr(t), 0)
+ if pcapCint(status) < 0 {
+ return statusError(pcapCint(status))
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapSetRfmon(monitor bool) error {
+ //winpcap does not support rfmon
+ if pcapCanSetRfmonPtr == 0 {
+ return CannotSetRFMon
+ }
+ var mon uintptr
+ if monitor {
+ mon = 1
+ }
+ canset, _, _ := syscall.Syscall(pcapCanSetRfmonPtr, 1, uintptr(p.cptr), 0, 0)
+ switch canset {
+ case 0:
+ return CannotSetRFMon
+ case 1:
+ // success
+ default:
+ return statusError(pcapCint(canset))
+ }
+ status, _, _ := syscall.Syscall(pcapSetRfmonPtr, 2, uintptr(p.cptr), mon, 0)
+ if status != 0 {
+ return statusError(pcapCint(status))
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapSetBufferSize(bufferSize int) error {
+ status, _, _ := syscall.Syscall(pcapSetBufferSizePtr, 2, uintptr(p.cptr), uintptr(bufferSize), 0)
+ if pcapCint(status) < 0 {
+ return statusError(pcapCint(status))
+ }
+ return nil
+}
+
+func (p *InactiveHandle) pcapSetImmediateMode(mode bool) error {
+ //libpcap <1.5 does not have pcap_set_immediate_mode
+ if pcapSetImmediateModePtr == 0 {
+ return statusError(pcapError)
+ }
+ var md uintptr
+ if mode {
+ md = 1
+ }
+ status, _, _ := syscall.Syscall(pcapSetImmediateModePtr, 2, uintptr(p.cptr), md, 0)
+ if pcapCint(status) < 0 {
+ return statusError(pcapCint(status))
+ }
+ return nil
+}
+
+func (p *Handle) setNonBlocking() 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()
+}
+
+// openOfflineFile returns contents of input file as a *Handle.
+func openOfflineFile(file *os.File) (handle *Handle, err error) {
+ buf := make([]byte, errorBufferSize)
+ cf := file.Fd()
+
+ var cptr uintptr
+ if pcapOpenOfflineWithTstampPrecisionPtr == 0 {
+ cptr, _, _ = syscall.Syscall(pcapHopenOfflinePtr, 2, cf, uintptr(unsafe.Pointer(&buf[0])), 0)
+ } else {
+ cptr, _, _ = syscall.Syscall(pcapHOpenOfflineWithTstampPrecisionPtr, 3, cf, uintptr(pcapTstampPrecisionNano), uintptr(unsafe.Pointer(&buf[0])))
+ }
+
+ if cptr == 0 {
+ return nil, errors.New(byteSliceToString(buf))
+ }
+ return &Handle{cptr: pcapTPtr(cptr)}, nil
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcapnggo_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcapnggo_test.go
new file mode 100644
index 00000000000..79b26e4d0a7
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/pcapnggo_test.go
@@ -0,0 +1,60 @@
+// Copyright 2018 The GoPacket Authors. 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"
+ "io/ioutil"
+ "reflect"
+ "testing"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcapgo"
+)
+
+func TestPCAPGoNgWrite(t *testing.T) {
+ f, err := ioutil.TempFile("", "pcapnggo")
+ if err != nil {
+ t.Fatal(err)
+ }
+ data := []byte{0xab, 0xcd, 0xef, 0x01, 0x02, 0x03, 0x04}
+ ci := gopacket.CaptureInfo{
+ Timestamp: time.Unix(12345667, 1234567123),
+ Length: 700,
+ CaptureLength: len(data),
+ }
+ func() {
+ defer f.Close()
+ w, err := pcapgo.NewNgWriter(f, layers.LinkTypeEthernet)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err := w.WritePacket(ci, data); err != nil {
+ t.Fatal(err)
+ }
+ if err := w.Flush(); 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap
index 1f8a87c326f..1d01bd91850 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/capture.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/capture.go
new file mode 100644
index 00000000000..3c890e648c6
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/capture.go
@@ -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.
+// +build linux
+
+package pcapgo
+
+import (
+ "net"
+ "syscall"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/mdlayher/raw"
+)
+
+// EthernetHandle wraps a raw.Conn, implementing gopacket.PacketDataSource so
+// that the handle can be used with gopacket.NewPacketSource.
+type EthernetHandle struct {
+ *raw.Conn
+}
+
+// ReadPacketData implements gopacket.PacketDataSource.
+func (h *EthernetHandle) ReadPacketData() ([]byte, gopacket.CaptureInfo, error) {
+ b := make([]byte, 4096) // TODO(correctness): how much space do we need?
+ n, _, err := h.ReadFrom(b)
+ if err != nil {
+ return nil, gopacket.CaptureInfo{}, err
+ }
+ data := b[:n]
+ return data, gopacket.CaptureInfo{
+ CaptureLength: len(data),
+ Length: len(data),
+ Timestamp: time.Now(),
+ }, nil
+}
+
+// NewEthernetHandle implements pcap.OpenLive for ethernet interfaces only.
+func NewEthernetHandle(ifname string) (*EthernetHandle, error) {
+ intf, err := net.InterfaceByName(ifname)
+ if err != nil {
+ return nil, err
+ }
+
+ conn, err := raw.ListenPacket(intf, syscall.ETH_P_ALL, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ return &EthernetHandle{conn}, nil
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/capture_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/capture_test.go
new file mode 100644
index 00000000000..dafa9baea81
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/capture_test.go
@@ -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 pcapgo_test
+
+import (
+ "log"
+ "os"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+ "github.com/google/gopacket/pcapgo"
+)
+
+func Example_captureEthernet() {
+ f, err := os.Create("/tmp/lo.pcap")
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer f.Close()
+ pcapw := pcapgo.NewWriter(f)
+ if err := pcapw.WriteFileHeader(1600, layers.LinkTypeEthernet); err != nil {
+ log.Fatalf("WriteFileHeader: %v", err)
+ }
+
+ handle, err := pcapgo.NewEthernetHandle("lo")
+ if err != nil {
+ log.Fatalf("OpenEthernet: %v", err)
+ }
+
+ pkgsrc := gopacket.NewPacketSource(handle, layers.LayerTypeEthernet)
+ for packet := range pkgsrc.Packets() {
+ if err := pcapw.WritePacket(packet.Metadata().CaptureInfo, packet.Data()); err != nil {
+ log.Fatalf("pcap.WritePacket(): %v", err)
+ }
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/doc.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/doc.go
new file mode 100644
index 00000000000..f2e0b95774b
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/doc.go
@@ -0,0 +1,63 @@
+// Copyright 2018 The GoPacket Authors. 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.
+
+Overview
+
+This package contains implementations for native PCAP support. Currently supported are
+
+ * pcap-files read/write: Reader, Writer
+ * pcapng-files read/write: NgReader, NgWriter
+ * raw socket capture (linux only): EthernetHandle
+
+Basic Usage pcapng
+
+Pcapng files can be read and written. Reading supports both big and little endian files, packet blocks,
+simple packet blocks, enhanced packets blocks, interface blocks, and interface statistics blocks. All
+the options also by Wireshark are supported. The default reader options match libpcap behaviour. Have
+a look at NgReaderOptions for more advanced usage. Both ReadPacketData and ZeroCopyReadPacketData is
+supported (which means PacketDataSource and ZeroCopyPacketDataSource is supported).
+
+ f, err := os.Open("somefile.pcapng")
+ if err != nil {
+ ...
+ }
+ defer f.Close()
+
+ r, err := NewNgReader(f, DefaultNgReaderOptions)
+ if err != nil {
+ ...
+ }
+
+ data, ci, err := r.ReadPacketData()
+ ...
+
+Write supports only little endian, enhanced packets blocks, interface blocks, and interface statistics
+blocks. The same options as with writing are supported. Interface timestamp resolution is fixed to
+10^-9s to match time.Time. Any other values are ignored. Upon creating a writer, a section, and an
+interface block is automatically written. Additional interfaces can be added at any time. Since
+the writer uses a bufio.Writer internally, Flush must be called before closing the file! Have a look
+at NewNgWriterInterface for more advanced usage.
+
+ f, err := os.Create("somefile.pcapng")
+ if err != nil {
+ ...
+ }
+ defer f.Close()
+
+ r, err = NewNgWriter(f, layers.LinkTypeEthernet)
+ if err != nil {
+ ...
+ }
+ defer r.Flush()
+
+ err = r.WritePacket(ci, data)
+ ...
+
+*/
+package pcapgo
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngread.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngread.go
new file mode 100644
index 00000000000..16aabb9008e
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngread.go
@@ -0,0 +1,606 @@
+// Copyright 2018 The GoPacket Authors. 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 (
+ "bufio"
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "io"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+// NgReaderOptions holds options for reading a pcapng file
+type NgReaderOptions struct {
+ // WantMixedLinkType enables reading a pcapng file containing multiple interfaces with varying link types. If false all link types must match, which is the libpcap behaviour and LinkType returns the link type of the first interface.
+ // If true the link type of the packet is also exposed via ci.AncillaryData[0].
+ WantMixedLinkType bool
+ // ErrorOnMismatchingLinkType enables returning an error if a packet with a link type not matching the first interface is encountered and WantMixedLinkType == false.
+ // If false packets those packets are just silently ignored, which is the libpcap behaviour.
+ ErrorOnMismatchingLinkType bool
+ // SkipUnknownVersion enables automatically skipping sections with an unknown version, which is recommended by the pcapng standard. Otherwise ErrVersionMismatch is returned.
+ SkipUnknownVersion bool
+ // SectionEndCallback gets called at the end of a section (execept for the last section, which is ends on EOF). The current list of interfaces and additional section information is provided.
+ // This is a good way to read interface statistics.
+ SectionEndCallback func([]NgInterface, NgSectionInfo)
+ // StatisticsCallback is called when a interface statistics block is read. The interface id and the read statistics are provided.
+ StatisticsCallback func(int, NgInterfaceStatistics)
+}
+
+// DefaultNgReaderOptions provides sane defaults for a pcapng reader.
+var DefaultNgReaderOptions = NgReaderOptions{}
+
+// NgReader wraps an underlying bufio.NgReader to read packet data in pcapng.
+type NgReader struct {
+ r *bufio.Reader
+ options NgReaderOptions
+ sectionInfo NgSectionInfo
+ linkType layers.LinkType
+ ifaces []NgInterface
+ currentBlock ngBlock
+ currentOption ngOption
+ buf [24]byte
+ packetBuf []byte
+ ci gopacket.CaptureInfo
+ ancil [1]interface{}
+ blen int
+ firstSectionFound bool
+ activeSection bool
+ bigEndian bool
+}
+
+// NewNgReader initializes a new writer, reads the first section header, and if necessary according to the options the first interface.
+func NewNgReader(r io.Reader, options NgReaderOptions) (*NgReader, error) {
+ ret := &NgReader{
+ r: bufio.NewReader(r),
+ currentOption: ngOption{
+ value: make([]byte, 1024),
+ },
+ options: options,
+ }
+
+ //pcapng _must_ start with a section header
+ if err := ret.readBlock(); err != nil {
+ return nil, err
+ }
+ if ret.currentBlock.typ != ngBlockTypeSectionHeader {
+ return nil, fmt.Errorf("Unknown magic %x", ret.currentBlock.typ)
+ }
+
+ if err := ret.readSectionHeader(); err != nil {
+ return nil, err
+ }
+
+ return ret, nil
+}
+
+// First a couple of helper functions to speed things up
+
+// This is way faster than calling io.ReadFull since io.ReadFull needs an itab lookup, does an additional function call into ReadAtLeast, and ReadAtLeast does additional stuff we don't need
+// Additionally this removes the bounds check compared to io.ReadFull due to the use of uint
+func (r *NgReader) readBytes(buffer []byte) error {
+ n := uint(0)
+ for n < uint(len(buffer)) {
+ nn, err := r.r.Read(buffer[n:])
+ n += uint(nn)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// The following functions make the binary.* functions inlineable (except for getUint64, which is too big, but not in any hot path anyway)
+// Compared to storing binary.*Endian in a binary.ByteOrder this shaves off about 20% for (ZeroCopy)ReadPacketData, which is caused by the needed itab lookup + indirect go call
+func (r *NgReader) getUint16(buffer []byte) uint16 {
+ if r.bigEndian {
+ return binary.BigEndian.Uint16(buffer)
+ }
+ return binary.LittleEndian.Uint16(buffer)
+}
+
+func (r *NgReader) getUint32(buffer []byte) uint32 {
+ if r.bigEndian {
+ return binary.BigEndian.Uint32(buffer)
+ }
+ return binary.LittleEndian.Uint32(buffer)
+}
+
+func (r *NgReader) getUint64(buffer []byte) uint64 {
+ if r.bigEndian {
+ return binary.BigEndian.Uint64(buffer)
+ }
+ return binary.LittleEndian.Uint64(buffer)
+}
+
+// Now the pcapng implementation
+
+// readBlock reads a the blocktype and length from the file. If the type is a section header, endianess is also read.
+func (r *NgReader) readBlock() error {
+ if err := r.readBytes(r.buf[0:8]); err != nil {
+ return err
+ }
+ r.currentBlock.typ = ngBlockType(r.getUint32(r.buf[0:4]))
+ // The next part is a bit fucked up since a section header could change the endianess...
+ // So first read then length just into a buffer, check if its a section header and then do the endianess part...
+ if r.currentBlock.typ == ngBlockTypeSectionHeader {
+ if err := r.readBytes(r.buf[8:12]); err != nil {
+ return err
+ }
+ if binary.BigEndian.Uint32(r.buf[8:12]) == ngByteOrderMagic {
+ r.bigEndian = true
+ } else if binary.LittleEndian.Uint32(r.buf[8:12]) == ngByteOrderMagic {
+ r.bigEndian = false
+ } else {
+ return errors.New("Wrong byte order value in Section Header")
+ }
+ // Set length to remaining length (length - (type + lengthfield = 8) - 4 for byteOrderMagic)
+ r.currentBlock.length = r.getUint32(r.buf[4:8]) - 8 - 4
+ return nil
+ }
+ // Set length to remaining length (length - (type + lengthfield = 8)
+ r.currentBlock.length = r.getUint32(r.buf[4:8]) - 8
+ return nil
+}
+
+// readOption reads a single arbitrary option (type and value). If there is no space left for options and end of options is missing, it is faked.
+func (r *NgReader) readOption() error {
+ if r.currentBlock.length == 4 {
+ // no more options
+ r.currentOption.code = ngOptionCodeEndOfOptions
+ return nil
+ }
+ if err := r.readBytes(r.buf[:4]); err != nil {
+ return err
+ }
+ r.currentBlock.length -= 4
+ r.currentOption.code = ngOptionCode(r.getUint16(r.buf[:2]))
+ length := r.getUint16(r.buf[2:4])
+ if r.currentOption.code == ngOptionCodeEndOfOptions {
+ if length != 0 {
+ return errors.New("End of Options must be zero length")
+ }
+ return nil
+ }
+ if length != 0 {
+ if length < uint16(cap(r.currentOption.value)) {
+ r.currentOption.value = r.currentOption.value[:length]
+ } else {
+ r.currentOption.value = make([]byte, length)
+ }
+ if err := r.readBytes(r.currentOption.value); err != nil {
+ return err
+ }
+ //consume padding
+ padding := length % 4
+ if padding > 0 {
+ padding = 4 - padding
+ if _, err := r.r.Discard(int(padding)); err != nil {
+ return err
+ }
+ }
+ r.currentBlock.length -= uint32(length + padding)
+ }
+ return nil
+}
+
+// readSectionHeader parses the full section header and implements section skipping in case of version mismatch
+// if needed, the first interface is read
+func (r *NgReader) readSectionHeader() error {
+ if r.options.SectionEndCallback != nil && r.activeSection {
+ interfaces := make([]NgInterface, len(r.ifaces))
+ for i := range r.ifaces {
+ interfaces[i] = r.ifaces[i]
+ }
+ r.options.SectionEndCallback(interfaces, r.sectionInfo)
+ }
+ // clear the interfaces
+ r.ifaces = r.ifaces[:0]
+ r.activeSection = false
+
+RESTART:
+ // read major, minor, section length
+ if err := r.readBytes(r.buf[:12]); err != nil {
+ return err
+ }
+ r.currentBlock.length -= 12
+
+ vMajor := r.getUint16(r.buf[0:2])
+ vMinor := r.getUint16(r.buf[2:4])
+ if vMajor != ngVersionMajor || vMinor != ngVersionMinor {
+ if !r.options.SkipUnknownVersion {
+ // Well the standard actually says to skip unknown version section headers,
+ // but this would mean user would be kept in the dark about whats going on...
+ return ErrNgVersionMismatch
+ }
+ if _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {
+ return err
+ }
+ if err := r.skipSection(); err != nil {
+ return err
+ }
+ goto RESTART
+ }
+
+ var section NgSectionInfo
+
+OPTIONS:
+ for {
+ if err := r.readOption(); err != nil {
+ return err
+ }
+ switch r.currentOption.code {
+ case ngOptionCodeEndOfOptions:
+ break OPTIONS
+ case ngOptionCodeComment:
+ section.Comment = string(r.currentOption.value)
+ case ngOptionCodeHardware:
+ section.Hardware = string(r.currentOption.value)
+ case ngOptionCodeOS:
+ section.OS = string(r.currentOption.value)
+ case ngOptionCodeUserApplication:
+ section.Application = string(r.currentOption.value)
+ }
+ }
+
+ if _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {
+ return err
+ }
+ r.activeSection = true
+ r.sectionInfo = section
+
+ if !r.options.WantMixedLinkType {
+ // If we don't want mixed link type, we need the first interface to fill Reader.LinkType()
+ // This handles most of the pcapngs out there, since they start with an IDB
+ if err := r.firstInterface(); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// skipSection skips blocks until the next section
+func (r *NgReader) skipSection() error {
+ for {
+ if err := r.readBlock(); err != nil {
+ return err
+ }
+ if r.currentBlock.typ == ngBlockTypeSectionHeader {
+ return nil
+ }
+ if _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {
+ return err
+ }
+ }
+}
+
+// SkipSection skips the contents of the rest of the current section and reads the next section header.
+func (r *NgReader) SkipSection() error {
+ if err := r.skipSection(); err != nil {
+ return err
+ }
+ return r.readSectionHeader()
+}
+
+// firstInterface reads the first interface from the section and panics if a packet is encountered.
+func (r *NgReader) firstInterface() error {
+ for {
+ if err := r.readBlock(); err != nil {
+ return err
+ }
+ switch r.currentBlock.typ {
+ case ngBlockTypeInterfaceDescriptor:
+ if err := r.readInterfaceDescriptor(); err != nil {
+ return err
+ }
+ if !r.firstSectionFound {
+ r.linkType = r.ifaces[0].LinkType
+ r.firstSectionFound = true
+ } else if r.linkType != r.ifaces[0].LinkType {
+ if r.options.ErrorOnMismatchingLinkType {
+ return ErrNgLinkTypeMismatch
+ }
+ continue
+ }
+ return nil
+ case ngBlockTypePacket, ngBlockTypeEnhancedPacket, ngBlockTypeSimplePacket, ngBlockTypeInterfaceStatistics:
+ return errors.New("A section must have an interface before a packet block")
+ }
+ if _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {
+ return err
+ }
+ }
+}
+
+// readInterfaceDescriptor parses an interface descriptor, prepares timing calculation, and adds the interface details to the current list
+func (r *NgReader) readInterfaceDescriptor() error {
+ if err := r.readBytes(r.buf[:8]); err != nil {
+ return err
+ }
+ r.currentBlock.length -= 8
+ var intf NgInterface
+ intf.LinkType = layers.LinkType(r.getUint16(r.buf[:2]))
+ intf.SnapLength = r.getUint32(r.buf[4:8])
+
+OPTIONS:
+ for {
+ if err := r.readOption(); err != nil {
+ return err
+ }
+ switch r.currentOption.code {
+ case ngOptionCodeEndOfOptions:
+ break OPTIONS
+ case ngOptionCodeInterfaceName:
+ intf.Name = string(r.currentOption.value)
+ case ngOptionCodeComment:
+ intf.Comment = string(r.currentOption.value)
+ case ngOptionCodeInterfaceDescription:
+ intf.Description = string(r.currentOption.value)
+ case ngOptionCodeInterfaceFilter:
+ // ignore filter type (first byte) since it is not specified
+ intf.Filter = string(r.currentOption.value[1:])
+ case ngOptionCodeInterfaceOS:
+ intf.OS = string(r.currentOption.value)
+ case ngOptionCodeInterfaceTimestampOffset:
+ intf.TimestampOffset = r.getUint64(r.currentOption.value[:8])
+ case ngOptionCodeInterfaceTimestampResolution:
+ intf.TimestampResolution = NgResolution(r.currentOption.value[0])
+ }
+ }
+ if _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {
+ return err
+ }
+ if intf.TimestampResolution == 0 {
+ intf.TimestampResolution = 6
+ }
+
+ //parse options
+ if intf.TimestampResolution.Binary() {
+ //negative power of 2
+ intf.secondMask = 1 << intf.TimestampResolution.Exponent()
+ } else {
+ //negative power of 10
+ intf.secondMask = 1
+ for j := uint8(0); j < intf.TimestampResolution.Exponent(); j++ {
+ intf.secondMask *= 10
+ }
+ }
+ intf.scaleDown = 1
+ intf.scaleUp = 1
+ if intf.secondMask < 1e9 {
+ intf.scaleUp = 1e9 / intf.secondMask
+ } else {
+ intf.scaleDown = intf.secondMask / 1e9
+ }
+ r.ifaces = append(r.ifaces, intf)
+ return nil
+}
+
+// convertTime adds offset + shifts the given time value according to the given interface
+func (r *NgReader) convertTime(ifaceID int, ts uint64) (int64, int64) {
+ iface := r.ifaces[ifaceID]
+ return int64(ts/iface.secondMask + iface.TimestampOffset), int64(ts % iface.secondMask * iface.scaleUp / iface.scaleDown)
+}
+
+// readInterfaceStatistics updates the statistics of the given interface
+func (r *NgReader) readInterfaceStatistics() error {
+ if err := r.readBytes(r.buf[:12]); err != nil {
+ return err
+ }
+ r.currentBlock.length -= 12
+ ifaceID := int(r.getUint32(r.buf[:4]))
+ ts := uint64(r.getUint32(r.buf[4:8]))<<32 | uint64(r.getUint32(r.buf[8:12]))
+ if int(ifaceID) >= len(r.ifaces) {
+ return fmt.Errorf("Interface id %d not present in section (have only %d interfaces)", ifaceID, len(r.ifaces))
+ }
+ stats := &r.ifaces[ifaceID].Statistics
+ *stats = ngEmptyStatistics
+ stats.LastUpdate = time.Unix(r.convertTime(ifaceID, ts)).UTC()
+
+OPTIONS:
+ for {
+ if err := r.readOption(); err != nil {
+ return err
+ }
+ switch r.currentOption.code {
+ case ngOptionCodeEndOfOptions:
+ break OPTIONS
+ case ngOptionCodeComment:
+ stats.Comment = string(r.currentOption.value)
+ case ngOptionCodeInterfaceStatisticsStartTime:
+ ts = uint64(r.getUint32(r.currentOption.value[:4]))<<32 | uint64(r.getUint32(r.currentOption.value[4:8]))
+ stats.StartTime = time.Unix(r.convertTime(ifaceID, ts)).UTC()
+ case ngOptionCodeInterfaceStatisticsEndTime:
+ ts = uint64(r.getUint32(r.currentOption.value[:4]))<<32 | uint64(r.getUint32(r.currentOption.value[4:8]))
+ stats.EndTime = time.Unix(r.convertTime(ifaceID, ts)).UTC()
+ case ngOptionCodeInterfaceStatisticsInterfaceReceived:
+ stats.PacketsReceived = r.getUint64(r.currentOption.value[:8])
+ case ngOptionCodeInterfaceStatisticsInterfaceDropped:
+ stats.PacketsDropped = r.getUint64(r.currentOption.value[:8])
+ }
+ }
+ if _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {
+ return err
+ }
+ if r.options.StatisticsCallback != nil {
+ r.options.StatisticsCallback(ifaceID, *stats)
+ }
+ return nil
+}
+
+// readPacketHeader looks for a packet (enhanced, simple, or packet) and parses the header.
+// If an interface descriptor, an interface statistics block, or a section header is encountered, those are handled accordingly.
+// All other block types are skipped. New block types must be added here.
+func (r *NgReader) readPacketHeader() error {
+RESTART:
+FIND_PACKET:
+ for {
+ if err := r.readBlock(); err != nil {
+ return err
+ }
+ switch r.currentBlock.typ {
+ case ngBlockTypeEnhancedPacket:
+ if err := r.readBytes(r.buf[:20]); err != nil {
+ return err
+ }
+ r.currentBlock.length -= 20
+ r.ci.InterfaceIndex = int(r.getUint32(r.buf[:4]))
+ if r.ci.InterfaceIndex >= len(r.ifaces) {
+ return fmt.Errorf("Interface id %d not present in section (have only %d interfaces)", r.ci.InterfaceIndex, len(r.ifaces))
+ }
+ r.ci.Timestamp = time.Unix(r.convertTime(r.ci.InterfaceIndex, uint64(r.getUint32(r.buf[4:8]))<<32|uint64(r.getUint32(r.buf[8:12])))).UTC()
+ r.ci.CaptureLength = int(r.getUint32(r.buf[12:16]))
+ r.ci.Length = int(r.getUint32(r.buf[16:20]))
+ break FIND_PACKET
+ case ngBlockTypeSimplePacket:
+ if err := r.readBytes(r.buf[:4]); err != nil {
+ return err
+ }
+ r.currentBlock.length -= 4
+ r.ci.Timestamp = time.Time{}
+ r.ci.InterfaceIndex = 0
+ r.ci.Length = int(r.getUint32(r.buf[:4]))
+ r.ci.CaptureLength = r.ci.Length
+ if len(r.ifaces) == 0 {
+ return errors.New("At least one Interface is needed for a packet")
+ }
+ if r.ifaces[0].SnapLength != 0 && uint32(r.ci.CaptureLength) > r.ifaces[0].SnapLength {
+ r.ci.CaptureLength = int(r.ifaces[0].SnapLength)
+ }
+ break FIND_PACKET
+ case ngBlockTypeInterfaceDescriptor:
+ if err := r.readInterfaceDescriptor(); err != nil {
+ return err
+ }
+ case ngBlockTypeInterfaceStatistics:
+ if err := r.readInterfaceStatistics(); err != nil {
+ return err
+ }
+ case ngBlockTypeSectionHeader:
+ if err := r.readSectionHeader(); err != nil {
+ return err
+ }
+ case ngBlockTypePacket:
+ if err := r.readBytes(r.buf[:20]); err != nil {
+ return err
+ }
+ r.currentBlock.length -= 20
+ r.ci.InterfaceIndex = int(r.getUint16(r.buf[0:2]))
+ if r.ci.InterfaceIndex >= len(r.ifaces) {
+ return fmt.Errorf("Interface id %d not present in section (have only %d interfaces)", r.ci.InterfaceIndex, len(r.ifaces))
+ }
+ r.ci.Timestamp = time.Unix(r.convertTime(r.ci.InterfaceIndex, uint64(r.getUint32(r.buf[4:8]))<<32|uint64(r.getUint32(r.buf[8:12])))).UTC()
+ r.ci.CaptureLength = int(r.getUint32(r.buf[12:16]))
+ r.ci.Length = int(r.getUint32(r.buf[16:20]))
+ break FIND_PACKET
+ default:
+ if _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {
+ return err
+ }
+ }
+ }
+ if !r.options.WantMixedLinkType {
+ if r.ifaces[r.ci.InterfaceIndex].LinkType != r.linkType {
+ if _, err := r.r.Discard(int(r.currentBlock.length)); err != nil {
+ return err
+ }
+ if r.options.ErrorOnMismatchingLinkType {
+ return ErrNgLinkTypeMismatch
+ }
+ goto RESTART
+ }
+ return nil
+ }
+ r.ancil[0] = r.ifaces[r.ci.InterfaceIndex].LinkType
+ return nil
+}
+
+// ReadPacketData returns the next packet available from this data source.
+// If WantMixedLinkType is true, ci.AncillaryData[0] contains the link type.
+func (r *NgReader) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ if err = r.readPacketHeader(); err != nil {
+ return
+ }
+ ci = r.ci
+ if r.options.WantMixedLinkType {
+ ci.AncillaryData = make([]interface{}, 1)
+ ci.AncillaryData[0] = r.ancil[0]
+ }
+ data = make([]byte, r.ci.CaptureLength)
+ if err = r.readBytes(data); err != nil {
+ return
+ }
+ // handle options somehow - this would be expensive
+ _, err = r.r.Discard(int(r.currentBlock.length) - r.ci.CaptureLength)
+ return
+}
+
+// ZeroCopyReadPacketData returns the next packet available from this data source.
+// If WantMixedLinkType is true, ci.AncillaryData[0] contains the link type.
+// Warning: Like data, ci.AncillaryData is also reused and overwritten on the next call to ZeroCopyReadPacketData.
+//
+// It is not true zero copy, as data is still copied from the underlying reader. However,
+// this method avoids allocating heap memory for every packet.
+func (r *NgReader) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ if err = r.readPacketHeader(); err != nil {
+ return
+ }
+ ci = r.ci
+ if r.options.WantMixedLinkType {
+ ci.AncillaryData = r.ancil[:]
+ }
+ if cap(r.packetBuf) < ci.CaptureLength {
+ snaplen := int(r.ifaces[ci.InterfaceIndex].SnapLength)
+ if snaplen < ci.CaptureLength {
+ snaplen = ci.CaptureLength
+ }
+ r.packetBuf = make([]byte, snaplen)
+ }
+ data = r.packetBuf[:ci.CaptureLength]
+ if err = r.readBytes(data); err != nil {
+ return
+ }
+ // handle options somehow - this would be expensive
+ _, err = r.r.Discard(int(r.currentBlock.length) - ci.CaptureLength)
+ return
+}
+
+// LinkType returns the link type of the first interface, as a layers.LinkType. This is only valid, if WantMixedLinkType is false.
+func (r *NgReader) LinkType() layers.LinkType {
+ return r.linkType
+}
+
+// SectionInfo returns information about the current section.
+func (r *NgReader) SectionInfo() NgSectionInfo {
+ return r.sectionInfo
+}
+
+// Interface returns interface information and statistics of interface with the given id.
+func (r *NgReader) Interface(i int) (NgInterface, error) {
+ if i >= len(r.ifaces) || i < 0 {
+ return NgInterface{}, fmt.Errorf("Interface %d invalid. There are only %d interfaces", i, len(r.ifaces))
+ }
+ return r.ifaces[i], nil
+}
+
+// NInterfaces returns the current number of interfaces.
+func (r *NgReader) NInterfaces() int {
+ return len(r.ifaces)
+}
+
+// Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.
+func (r *NgReader) Resolution() gopacket.TimestampResolution {
+ if r.options.WantMixedLinkType {
+ return gopacket.TimestampResolution{}
+ }
+ return r.ifaces[0].Resolution()
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngread_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngread_test.go
new file mode 100644
index 00000000000..471a5e861de
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngread_test.go
@@ -0,0 +1,1931 @@
+// Copyright 2018 The GoPacket Authors. 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 (
+ "bufio"
+ "bytes"
+ "encoding/hex"
+ "io"
+ "log"
+ "os"
+ "path/filepath"
+ "reflect"
+ "testing"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+func ngMustDecode(s string) []byte {
+ ret, err := hex.DecodeString(s)
+ if err != nil {
+ log.Panic("Initialization failed")
+ }
+ return ret
+}
+
+var ngPacketSource = [...][]byte{
+ ngMustDecode("ffffffffffff000b8201fc4208004500012ca8360000fa11178b00000000ffffffff004400430118591f0101060000003d1d0000000000000000000000000000000000000000000b8201fc4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501013d0701000b8201fc4232040000000037040103062aff00000000000000"),
+ ngMustDecode("000b8201fc42000874adf19b0800450001480445000080110000c0a80001c0a8000a00430044013422330201060000003d1d0000000000000000c0a8000ac0a8000100000000000b8201fc4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501020104ffffff003a04000007083b0400000c4e330400000e103604c0a80001ff0000000000000000000000000000000000000000000000000000"),
+ ngMustDecode("ffffffffffff000b8201fc4208004500012ca8370000fa11178a00000000ffffffff0044004301189fbd0101060000003d1e0000000000000000000000000000000000000000000b8201fc4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501033d0701000b8201fc423204c0a8000a3604c0a8000137040103062aff00"),
+ ngMustDecode("000b8201fc42000874adf19b0800450001480446000080110000c0a80001c0a8000a004300440134dfdb0201060000003d1e0000000000000000c0a8000a0000000000000000000b8201fc4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501053a04000007083b0400000c4e330400000e103604c0a800010104ffffff00ff0000000000000000000000000000000000000000000000000000"),
+ ngMustDecode("02000000450000a4c6ce00004011f147c0a8018bffffffff445c445c0090ba037b22686f73745f696e74223a20343039343531343438332c202276657273696f6e223a205b312c20385d2c2022646973706c61796e616d65223a2022222c2022706f7274223a2031373530302c20226e616d65737061636573223a205b32303532343235372c203633393533393037322c203633393533393333372c203633393533393535355d7d"),
+}
+
+type ngFileReadTestPacket struct {
+ data []byte
+ ci gopacket.CaptureInfo
+ err error
+}
+
+type ngFileReadTestSection struct {
+ sectionInfo NgSectionInfo
+ ifaces []NgInterface
+}
+
+type ngFileReadTest struct {
+ testName string
+ testContents io.Reader
+ testType string
+ skip string
+ wantMixedLinkType bool
+ errorOnMismatchingLinkType bool
+ skipUnknownVersion bool
+
+ linkType layers.LinkType
+ sections []ngFileReadTestSection
+ packets []ngFileReadTestPacket
+}
+
+func ngRunFileReadTest(test ngFileReadTest, be string, zerocopy bool, t *testing.T) {
+ var err error
+ var f io.Reader
+ if test.testContents == nil {
+ testf, err := os.Open(filepath.Join("tests", be, test.testName+".pcapng"))
+ if err != nil {
+ t.Fatal("Couldn't open file:", err)
+ }
+ defer testf.Close()
+ f = testf
+ } else {
+ f = test.testContents
+ }
+
+ var r *NgReader
+
+ section := 0
+ checkInterface := func(intf NgInterface, i int) {
+ currentInterface := test.sections[section].ifaces[i]
+
+ // fix non-zero defaults
+ if currentInterface.TimestampResolution == 0 {
+ currentInterface.TimestampResolution = 6
+ }
+ // clear private values
+ intf.scaleDown = 0
+ intf.scaleUp = 0
+ intf.secondMask = 0
+
+ if !reflect.DeepEqual(intf, currentInterface) {
+ t.Fatalf("[section %d] interface %d mismatches:\ngot:\n%#v\nwant:\n%#v\n\n", section, i, intf, currentInterface)
+ }
+ }
+ testSection := func(intf []NgInterface, sectionInfo NgSectionInfo) {
+ currentSection := test.sections[section]
+
+ if !reflect.DeepEqual(sectionInfo, currentSection.sectionInfo) {
+ t.Fatalf("[section header %d] section info mismatch:\ngot:\n%#v\nwant:\n%#v\n\n", section, sectionInfo, currentSection.sectionInfo)
+ }
+
+ if intf == nil {
+ if r.NInterfaces() != len(test.sections[section].ifaces) {
+ t.Fatalf("[section %d] Expected at least %d interfaces, but got only %d", section, len(test.sections[section].ifaces), r.NInterfaces())
+ }
+ for i := 0; i < r.NInterfaces(); i++ {
+ in, err := r.Interface(i)
+ if err != nil {
+ t.Fatalf("Unexpected error querying interface %d", i)
+ }
+ checkInterface(in, i)
+ }
+ } else {
+ if len(intf) != len(test.sections[section].ifaces) {
+ t.Fatalf("[section %d] Expected at least %d interfaces, but got only %d", section, len(test.sections[section].ifaces), len(intf))
+ }
+ for i, in := range intf {
+ checkInterface(in, i)
+ }
+ }
+
+ section++
+ }
+
+ options := DefaultNgReaderOptions
+ options.ErrorOnMismatchingLinkType = test.errorOnMismatchingLinkType
+ options.WantMixedLinkType = test.wantMixedLinkType
+ options.SkipUnknownVersion = test.skipUnknownVersion
+ if len(test.sections) > 1 {
+ options.SectionEndCallback = testSection
+ }
+
+ r, err = NewNgReader(f, options)
+ if err != nil {
+ t.Fatal("Couldn't read start of file:", err)
+ }
+
+ if test.wantMixedLinkType {
+ if r.LinkType() != 0 {
+ t.Fatalf("[first interface (section %d)] LinkType should be 0 with WantMixedLinkType, but is %s", section, r.LinkType())
+ }
+ } else {
+ if r.LinkType() != test.linkType {
+ t.Fatalf("[first interface (section %d)] LinkType mismatch: Should be %s but is %s", section, test.linkType, r.LinkType())
+ }
+ }
+
+ for i, packet := range test.packets {
+ var data []byte
+ var ci gopacket.CaptureInfo
+ var err error
+
+ if zerocopy {
+ data, ci, err = r.ZeroCopyReadPacketData()
+ } else {
+ data, ci, err = r.ReadPacketData()
+ }
+ if err == io.EOF {
+ t.Fatalf("[packets] Expected %d packets, but got only %d", len(test.packets), i)
+ }
+ if err != nil {
+ if err != packet.err {
+ t.Fatalf("[packet %d] Expected error %s, but got %s", i, packet.err, err)
+ }
+ if err != ErrNgVersionMismatch {
+ testSection(nil, r.SectionInfo())
+ }
+ return
+ }
+
+ if bytes.Compare(data, packet.data) != 0 {
+ t.Log(data)
+ t.Log(packet.data)
+ t.Fatalf("[packet %d] data mismatch", i)
+ }
+
+ if !reflect.DeepEqual(ci, packet.ci) {
+ t.Fatalf("[packet %d] ci mismatch:\ngot:\n%#v\nwant:\n%#v\n\n", i, ci, packet.ci)
+ }
+ }
+
+ if zerocopy {
+ _, _, err = r.ZeroCopyReadPacketData()
+ } else {
+ _, _, err = r.ReadPacketData()
+ }
+ if err != io.EOF {
+ t.Fatalf("[packets] Expected only %d packet(s), but got at least one more!", len(test.packets))
+ }
+
+ testSection(nil, r.SectionInfo())
+
+ if section != len(test.sections) {
+ t.Fatalf("File should have %d sections, but has %d", len(test.sections), section)
+ }
+}
+
+func TestNgFileRead(t *testing.T) {
+ for _, todo := range []ngFileReadTest{
+ {
+ testName: "test001",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test001",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "silly ethernet interface",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: len(ngPacketSource[1]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0).UTC(),
+ Length: len(ngPacketSource[2]),
+ CaptureLength: len(ngPacketSource[2]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: len(ngPacketSource[3]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test002",
+ wantMixedLinkType: true,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test002",
+ },
+ },
+ },
+ },
+ {
+ testName: "test003",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test003",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "silly ethernet interface",
+ },
+ },
+ },
+ },
+ },
+ {
+ testName: "test004",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test004",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ },
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 128,
+ Name: "en1",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 128,
+ InterfaceIndex: 1,
+ },
+ },
+ {
+ data: ngPacketSource[2][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+3000*1000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: 128,
+ InterfaceIndex: 1,
+ },
+ },
+ },
+ },
+ {
+ testName: "test005",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test005",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ },
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 128,
+ Name: "en1",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 128,
+ InterfaceIndex: 1,
+ },
+ },
+ {
+ data: ngPacketSource[2][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+3000*1000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: 128,
+ InterfaceIndex: 1,
+ },
+ },
+ },
+ },
+ {
+ testName: "test006",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test006",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ Name: "en1",
+ },
+ },
+ },
+ },
+
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+3000*1000).UTC(),
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+4000*1000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test006",
+ testType: "/ErrorOnMismatchingLink",
+ errorOnMismatchingLinkType: true,
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test006",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ Name: "en1",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {err: ErrNgLinkTypeMismatch},
+ },
+ },
+ {
+ testName: "test006",
+ testType: "/WantMixedLinkType",
+ wantMixedLinkType: true,
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test006",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ Name: "en1",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ AncillaryData: []interface{}{layers.LinkTypeEthernet},
+ },
+ },
+ {
+ data: ngPacketSource[4],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ Length: len(ngPacketSource[4]),
+ CaptureLength: len(ngPacketSource[4]),
+ InterfaceIndex: 1,
+ AncillaryData: []interface{}{layers.LinkTypeNull},
+ },
+ },
+ {
+ data: ngPacketSource[1][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ AncillaryData: []interface{}{layers.LinkTypeEthernet},
+ },
+ },
+ {
+ data: ngPacketSource[2][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+3000*1000).UTC(),
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ AncillaryData: []interface{}{layers.LinkTypeEthernet},
+ },
+ },
+ {
+ data: ngPacketSource[3][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+4000*1000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ AncillaryData: []interface{}{layers.LinkTypeEthernet},
+ },
+ },
+ },
+ },
+ {
+ testName: "test007",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test007",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test008",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test008",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth-_0 foo",
+ Comment: "test008, and more\nfoo\r\nbar",
+ Description: "silly ethernet interface",
+ Filter: "tcp port 23 and host 192.0.2.5",
+ OS: "Microsoft Windows for Workgroups 3.11b\npatch 42",
+ TimestampResolution: 9,
+ },
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 128,
+ Name: "en1",
+ Comment: "test008",
+ Description: "silly ethernet interface 2",
+ Filter: "tcp port 23 and host 192.0.2.5",
+ OS: "Novell NetWare 4.11\nbut not using IPX",
+ TimestampResolution: 9,
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa+1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 128,
+ InterfaceIndex: 1,
+ },
+ },
+ {
+ data: ngPacketSource[2][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa+2000).UTC(),
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa+3000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: 128,
+ InterfaceIndex: 1,
+ },
+ },
+ },
+ },
+ {
+ testName: "test009",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test009",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: len(ngPacketSource[1]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test010",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test010",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[1]),
+ CaptureLength: len(ngPacketSource[1]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[2]),
+ CaptureLength: len(ngPacketSource[2]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[3]),
+ CaptureLength: len(ngPacketSource[3]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test011",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test011",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: len(ngPacketSource[1]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[2]),
+ CaptureLength: len(ngPacketSource[2]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+1000*2000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: len(ngPacketSource[3]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test012",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test012",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 315,
+ Name: "eth0",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1][:315],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 315,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0).UTC(),
+ Length: len(ngPacketSource[2]),
+ CaptureLength: len(ngPacketSource[2]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3][:315],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: 315,
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test013",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test013",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "silly ethernet interface",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0).UTC(),
+ StartTime: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ EndTime: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ PacketsDropped: 10,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ },
+ },
+ },
+ },
+ {
+ testName: "test014",
+ wantMixedLinkType: true,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test014",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ StartTime: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ EndTime: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ PacketsDropped: 10,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ SnapLength: 0,
+ Name: "null1",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ StartTime: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ EndTime: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ PacketsDropped: 10,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 128,
+ Name: "silly ethernet interface 2",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ StartTime: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ EndTime: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ PacketsDropped: 10,
+ PacketsReceived: NgNoValue64,
+ Comment: "test014 ISB",
+ },
+ },
+ },
+ },
+ },
+ },
+ {
+ testName: "test015",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test015",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "silly ethernet interface",
+ Comment: "test015 IDB",
+ },
+ },
+ },
+ },
+ },
+ {
+ testName: "test016",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test016",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: len(ngPacketSource[1]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[2]),
+ CaptureLength: len(ngPacketSource[2]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+1000*2000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: len(ngPacketSource[3]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test017",
+ wantMixedLinkType: true,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test017",
+ },
+ },
+ },
+ },
+ {
+ testName: "test018",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test018",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: len(ngPacketSource[1]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[2]),
+ CaptureLength: len(ngPacketSource[2]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+1000*2000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: len(ngPacketSource[3]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test100",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test100",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ SnapLength: 0,
+ Name: "null1",
+ },
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 128,
+ Name: "wifi2?",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: len(ngPacketSource[1]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[2]),
+ CaptureLength: len(ngPacketSource[2]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+1000*2000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: len(ngPacketSource[3]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test101",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test101",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0).UTC(),
+ PacketsDropped: NgNoValue64,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ SnapLength: 0,
+ Name: "null1",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000-1000*1000).UTC(),
+ PacketsDropped: NgNoValue64,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 128,
+ Name: "silly ethernet interface 2",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ StartTime: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ EndTime: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ PacketsDropped: 10,
+ PacketsReceived: NgNoValue64,
+ Comment: "test101 ISB-2",
+ },
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 128,
+ InterfaceIndex: 2,
+ },
+ },
+ {
+ data: ngPacketSource[2][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test102",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test102",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0).UTC(),
+ PacketsDropped: NgNoValue64,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ SnapLength: 0,
+ Name: "null1",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000-1000*1000).UTC(),
+ PacketsDropped: NgNoValue64,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "silly!\r\nethernet interface 2",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ StartTime: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ EndTime: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ PacketsDropped: 10,
+ PacketsReceived: NgNoValue64,
+ Comment: "test102 ISB-2",
+ },
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: len(ngPacketSource[1]),
+ InterfaceIndex: 2,
+ },
+ },
+ {
+ data: ngPacketSource[2][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000+2000*1000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test200",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test200",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ },
+ },
+ },
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test200",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ },
+ },
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test200",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeNull,
+ SnapLength: 128,
+ Name: "null1",
+ },
+ },
+ },
+ },
+ },
+ {
+ testName: "test201",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test201 SHB-0",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ SnapLength: 0,
+ Name: "null1",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ PacketsDropped: NgNoValue64,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ },
+ },
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test201 SHB-1",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 128,
+ Name: "silly ethernet interface 2",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ StartTime: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ EndTime: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ PacketsDropped: 10,
+ PacketsReceived: NgNoValue64,
+ Comment: "test201 ISB-2",
+ },
+ },
+ },
+ },
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test201 SHB-2",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0).UTC(),
+ PacketsDropped: NgNoValue64,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ SnapLength: 0,
+ Name: "null1",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 128,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 128,
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test202",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test202 SHB-0",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ SnapLength: 0,
+ Name: "null1",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ PacketsDropped: NgNoValue64,
+ PacketsReceived: NgNoValue64,
+ },
+ },
+ },
+ },
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test202 SHB-1",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 128,
+ Name: "silly ethernet interface 2",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ StartTime: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ EndTime: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ PacketsDropped: 10,
+ PacketsReceived: NgNoValue64,
+ Comment: "test202 ISB-2",
+ },
+ },
+ },
+ },
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "Apple MBP",
+ OS: "OS-X 10.10.5",
+ Application: "pcap_writer.lua",
+ Comment: "test202 SHB-2",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 96,
+ Name: "eth0",
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(0, 0).UTC(),
+ StartTime: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ EndTime: time.Unix(0, 0x4c39764ca47aa*1000+1000*1000).UTC(),
+ PacketsReceived: 100,
+ PacketsDropped: 1,
+ Comment: "test202 ISB-0",
+ },
+ },
+ {
+ LinkType: layers.LinkTypeNull,
+ SnapLength: 0,
+ Name: "null1",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[0][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[0]),
+ CaptureLength: 128,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[1][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: 128,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Time{},
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 128,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3][:128],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: 128,
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test901",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "my computer",
+ OS: "linux",
+ Application: "pcap_writer.lua",
+ Comment: "test901 SHB-0",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {err: ErrNgVersionMismatch},
+ },
+ },
+ {
+ testName: "test901",
+ skipUnknownVersion: true,
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "my computer",
+ OS: "linux",
+ Application: "pcap_writer.lua",
+ Comment: "test901 SHB-0",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ },
+ },
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "my computer",
+ OS: "linux",
+ Application: "pcap_writer.lua",
+ Comment: "test901 SHB-2",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0x4c39764ca47aa*1000).UTC(),
+ Length: len(ngPacketSource[2]),
+ CaptureLength: len(ngPacketSource[2]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ {
+ testName: "test902",
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Hardware: "my computer",
+ OS: "linux",
+ Application: "pcap_writer.lua",
+ Comment: "test902",
+ },
+ ifaces: []NgInterface{
+ {
+ LinkType: layers.LinkTypeEthernet,
+ SnapLength: 0,
+ Name: "eth0",
+ TimestampResolution: 0x88,
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1519128000, 195312500).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ },
+ } {
+ test := todo
+ t.Run(test.testName+"/be"+test.testType, func(t *testing.T) {
+ if test.skip != "" {
+ t.Skip(test.skip)
+ }
+ t.Parallel()
+ ngRunFileReadTest(test, "be", false, t)
+ })
+ t.Run(test.testName+"/le"+test.testType, func(t *testing.T) {
+ if test.skip != "" {
+ t.Skip(test.skip)
+ }
+ t.Parallel()
+ ngRunFileReadTest(test, "le", false, t)
+ })
+ t.Run(test.testName+"/be/zerocopy"+test.testType, func(t *testing.T) {
+ if test.skip != "" {
+ t.Skip(test.skip)
+ }
+ t.Parallel()
+ ngRunFileReadTest(test, "be", true, t)
+ })
+ t.Run(test.testName+"/le/zerocopy"+test.testType, func(t *testing.T) {
+ if test.skip != "" {
+ t.Skip(test.skip)
+ }
+ t.Parallel()
+ ngRunFileReadTest(test, "le", true, t)
+ })
+ }
+}
+
+type endlessNgPacketReader struct {
+ packet []byte
+}
+
+func (e endlessNgPacketReader) Read(p []byte) (n int, err error) {
+ n = copy(p, e.packet)
+ return
+}
+
+func setupNgReadBenchmark(b *testing.B) *NgReader {
+ header := bytes.NewBuffer([]byte{
+ 0x0A, 0x0D, 0x0D, 0x0A, // Section Header
+ 0, 0, 0, 28, // block total length
+ 0x1A, 0x2B, 0x3C, 0x4D, // BOM
+ 0, 1, 0, 0, //Version
+ 0, 0, 0, 0, //Section length
+ 0, 0, 0, 0, //Section length
+ 0, 0, 0, 28, //block total length
+
+ 0, 0, 0, 1, // IDB
+ 0, 0, 0, 20, // block total length
+ 0, 1, 0, 0, // Ethernet
+ 0, 0, 0, 0, // Snap length
+ 0, 0, 0, 20, // block total length
+ })
+
+ packet := endlessNgPacketReader{
+ []byte{
+ 0, 0, 0, 6, // EPB
+ 0, 0, 0, 48, // block total length
+ 0, 0, 0, 0, // interface ID
+ 0, 0, 0, 0, // time (high)
+ 0, 0, 0, 0, // time (low)
+ 0, 0, 0, 16, // capture packet length
+ 0, 0, 0, 16, // original packet length
+ 1, 2, 3, 4,
+ 5, 6, 7, 8,
+ 9, 10, 11, 12,
+ 13, 14, 15, 16,
+ 0, 0, 0, 48, // block total length
+ 0, 0, 0, 6, // EPB
+ 0, 0, 0, 40, // block total length
+ 0, 0, 0, 0, // interface ID
+ 0, 0, 0, 0, // time (high)
+ 0, 0, 0, 0, // time (low)
+ 0, 0, 0, 8, // capture packet length
+ 0, 0, 0, 8, // original packet length
+ 8, 7, 6, 5,
+ 4, 3, 2, 1,
+ 0, 0, 0, 40, // block total length
+ },
+ }
+ packetReader := bufio.NewReaderSize(packet, len(packet.packet))
+
+ r, err := NewNgReader(header, DefaultNgReaderOptions)
+
+ if err != nil {
+ b.Fatal("Couldn't read header + IDB:", err)
+ }
+ r.r = packetReader
+ return r
+}
+
+func BenchmarkNgReadPacketData(b *testing.B) {
+ r := setupNgReadBenchmark(b)
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ _, _, _ = r.ReadPacketData()
+ }
+}
+
+func BenchmarkNgZeroCopyReadPacketData(b *testing.B) {
+ r := setupNgReadBenchmark(b)
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ _, _, _ = r.ZeroCopyReadPacketData()
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngwrite.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngwrite.go
new file mode 100644
index 00000000000..d0787c56975
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngwrite.go
@@ -0,0 +1,397 @@
+// Copyright 2018 The GoPacket Authors. 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 (
+ "bufio"
+ "encoding/binary"
+ "fmt"
+ "io"
+ "runtime"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+// NgWriterOptions holds options for creating a pcapng file
+type NgWriterOptions struct {
+ // SectionInfo will be written to the section header
+ SectionInfo NgSectionInfo
+}
+
+// DefaultNgWriterOptions contain defaults for a pcapng writer used by NewWriter
+var DefaultNgWriterOptions = NgWriterOptions{
+ SectionInfo: NgSectionInfo{
+ Hardware: runtime.GOARCH,
+ OS: runtime.GOOS,
+ Application: "gopacket", //spread the word
+ },
+}
+
+// DefaultNgInterface contains default interface options used by NewWriter
+var DefaultNgInterface = NgInterface{
+ Name: "intf0",
+ OS: runtime.GOOS,
+ SnapLength: 0, //unlimited
+ TimestampResolution: 9,
+}
+
+// NgWriter holds the internal state of a pcapng file writer. Internally a bufio.NgWriter is used, therefore Flush must be called before closing the underlying file.
+type NgWriter struct {
+ w *bufio.Writer
+ options NgWriterOptions
+ intf uint32
+ buf [28]byte
+}
+
+// NewNgWriter initializes and returns a new writer. Additionally, one section and one interface (without statistics) is written to the file. Interface and section options are used from DefaultNgInterface and DefaultNgWriterOptions.
+// Flush must be called before the file is closed, or if eventual unwritten information should be written out to the storage device.
+//
+// Written files are in little endian format. Interface timestamp resolution is fixed to 9 (to match time.Time).
+func NewNgWriter(w io.Writer, linkType layers.LinkType) (*NgWriter, error) {
+ intf := DefaultNgInterface
+ intf.LinkType = linkType
+ return NewNgWriterInterface(w, intf, DefaultNgWriterOptions)
+}
+
+// NewNgWriterInterface initializes and returns a new writer. Additionally, one section and one interface (without statistics) is written to the file.
+// Flush must be called before the file is closed, or if eventual unwritten information should be written out to the storage device.
+//
+// Written files are in little endian format. Interface timestamp resolution is fixed to 9 (to match time.Time).
+func NewNgWriterInterface(w io.Writer, intf NgInterface, options NgWriterOptions) (*NgWriter, error) {
+ ret := &NgWriter{
+ w: bufio.NewWriter(w),
+ options: options,
+ }
+ if err := ret.writeSectionHeader(); err != nil {
+ return nil, err
+ }
+
+ if _, err := ret.AddInterface(intf); err != nil {
+ return nil, err
+ }
+ return ret, nil
+}
+
+// ngOptionLength returns the needed length for one option value (without padding)
+func ngOptionLength(option ngOption) int {
+ switch val := option.raw.(type) {
+ case []byte:
+ return len(val)
+ case string:
+ return len(val)
+ case time.Time:
+ return 8
+ case uint64:
+ return 8
+ case uint32:
+ return 4
+ case uint8:
+ return 1
+ default:
+ panic("This should never happen")
+ }
+}
+
+// prepareNgOptions fills out the length value of the given options and returns the number of octets needed for all the given options including padding.
+func prepareNgOptions(options []ngOption) uint32 {
+ var ret uint32
+ for i, option := range options {
+ length := ngOptionLength(option)
+ options[i].length = uint16(length)
+ length += (4-length&3)&3 + // padding
+ 4 //header
+ ret += uint32(length)
+ }
+ if ret > 0 {
+ ret += 4 // end of options
+ }
+ return ret
+}
+
+// writeOptions writes the given options to the file. prepareOptions must be called beforehand.
+func (w *NgWriter) writeOptions(options []ngOption) error {
+ if len(options) == 0 {
+ return nil
+ }
+
+ var zero [4]byte
+ for _, option := range options {
+ binary.LittleEndian.PutUint16(w.buf[0:2], uint16(option.code))
+ binary.LittleEndian.PutUint16(w.buf[2:4], option.length)
+ if _, err := w.w.Write(w.buf[:4]); err != nil {
+ return err
+ }
+ switch val := option.raw.(type) {
+ case []byte:
+ if _, err := w.w.Write(val); err != nil {
+ return err
+ }
+ padding := uint8((4 - option.length&3) & 3)
+ if padding < 4 {
+ if _, err := w.w.Write(zero[:padding]); err != nil {
+ return err
+ }
+ }
+ case string:
+ if _, err := w.w.Write([]byte(val)); err != nil {
+ return err
+ }
+ padding := uint8((4 - option.length&3) & 3)
+ if padding < 4 {
+ if _, err := w.w.Write(zero[:padding]); err != nil {
+ return err
+ }
+ }
+ case time.Time:
+ ts := val.UnixNano()
+ binary.LittleEndian.PutUint32(w.buf[:4], uint32(ts>>32))
+ binary.LittleEndian.PutUint32(w.buf[4:8], uint32(ts))
+ if _, err := w.w.Write(w.buf[:8]); err != nil {
+ return err
+ }
+ case uint64:
+ binary.LittleEndian.PutUint64(w.buf[:8], val)
+ if _, err := w.w.Write(w.buf[:8]); err != nil {
+ return err
+ }
+ case uint32:
+ binary.LittleEndian.PutUint32(w.buf[:4], val)
+ if _, err := w.w.Write(w.buf[:4]); err != nil {
+ return err
+ }
+ case uint8:
+ binary.LittleEndian.PutUint32(w.buf[:4], 0) // padding
+ w.buf[0] = val
+ if _, err := w.w.Write(w.buf[:4]); err != nil {
+ return err
+ }
+ default:
+ panic("This should never happen")
+ }
+ }
+
+ // options must be folled by an end of options option
+ binary.LittleEndian.PutUint16(w.buf[0:2], uint16(ngOptionCodeEndOfOptions))
+ binary.LittleEndian.PutUint16(w.buf[2:4], 0)
+ _, err := w.w.Write(w.buf[:4])
+ return err
+}
+
+// writeSectionHeader writes a section header to the file
+func (w *NgWriter) writeSectionHeader() error {
+ var scratch [4]ngOption
+ i := 0
+ info := w.options.SectionInfo
+ if info.Application != "" {
+ scratch[i].code = ngOptionCodeUserApplication
+ scratch[i].raw = info.Application
+ i++
+ }
+ if info.Comment != "" {
+ scratch[i].code = ngOptionCodeComment
+ scratch[i].raw = info.Comment
+ i++
+ }
+ if info.Hardware != "" {
+ scratch[i].code = ngOptionCodeHardware
+ scratch[i].raw = info.Hardware
+ i++
+ }
+ if info.OS != "" {
+ scratch[i].code = ngOptionCodeOS
+ scratch[i].raw = info.OS
+ i++
+ }
+ options := scratch[:i]
+
+ length := prepareNgOptions(options) +
+ 24 + // header
+ 4 // trailer
+
+ binary.LittleEndian.PutUint32(w.buf[:4], uint32(ngBlockTypeSectionHeader))
+ binary.LittleEndian.PutUint32(w.buf[4:8], length)
+ binary.LittleEndian.PutUint32(w.buf[8:12], ngByteOrderMagic)
+ binary.LittleEndian.PutUint16(w.buf[12:14], ngVersionMajor)
+ binary.LittleEndian.PutUint16(w.buf[14:16], ngVersionMinor)
+ binary.LittleEndian.PutUint64(w.buf[16:24], 0xFFFFFFFFFFFFFFFF) // unspecified
+ if _, err := w.w.Write(w.buf[:24]); err != nil {
+ return err
+ }
+
+ if err := w.writeOptions(options); err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint32(w.buf[0:4], length)
+ _, err := w.w.Write(w.buf[:4])
+ return err
+}
+
+// AddInterface adds the specified interface to the file, excluding statistics. Interface timestamp resolution is fixed to 9 (to match time.Time). Empty values are not written.
+func (w *NgWriter) AddInterface(intf NgInterface) (id int, err error) {
+ id = int(w.intf)
+ w.intf++
+
+ var scratch [7]ngOption
+ i := 0
+ if intf.Name != "" {
+ scratch[i].code = ngOptionCodeInterfaceName
+ scratch[i].raw = intf.Name
+ i++
+ }
+ if intf.Comment != "" {
+ scratch[i].code = ngOptionCodeComment
+ scratch[i].raw = intf.Comment
+ i++
+ }
+ if intf.Description != "" {
+ scratch[i].code = ngOptionCodeInterfaceDescription
+ scratch[i].raw = intf.Description
+ i++
+ }
+ if intf.Filter != "" {
+ scratch[i].code = ngOptionCodeInterfaceFilter
+ scratch[i].raw = append([]byte{0}, []byte(intf.Filter)...)
+ i++
+ }
+ if intf.OS != "" {
+ scratch[i].code = ngOptionCodeInterfaceOS
+ scratch[i].raw = intf.OS
+ i++
+ }
+ if intf.TimestampOffset != 0 {
+ scratch[i].code = ngOptionCodeInterfaceTimestampOffset
+ scratch[i].raw = intf.TimestampOffset
+ i++
+ }
+ scratch[i].code = ngOptionCodeInterfaceTimestampResolution
+ scratch[i].raw = uint8(9) // fix resolution to nanoseconds (time.Time) in decimal
+ i++
+ options := scratch[:i]
+
+ length := prepareNgOptions(options) +
+ 16 + // header
+ 4 // trailer
+
+ binary.LittleEndian.PutUint32(w.buf[:4], uint32(ngBlockTypeInterfaceDescriptor))
+ binary.LittleEndian.PutUint32(w.buf[4:8], length)
+ binary.LittleEndian.PutUint16(w.buf[8:10], uint16(intf.LinkType))
+ binary.LittleEndian.PutUint16(w.buf[10:12], 0) // reserved value
+ binary.LittleEndian.PutUint32(w.buf[12:16], intf.SnapLength)
+ if _, err := w.w.Write(w.buf[:16]); err != nil {
+ return 0, err
+ }
+
+ if err := w.writeOptions(options); err != nil {
+ return 0, err
+ }
+
+ binary.LittleEndian.PutUint32(w.buf[0:4], length)
+ _, err = w.w.Write(w.buf[:4])
+ return id, err
+}
+
+// WriteInterfaceStats writes the given interface statistics for the given interface id to the file. Empty values are not written.
+func (w *NgWriter) WriteInterfaceStats(intf int, stats NgInterfaceStatistics) error {
+ if intf >= int(w.intf) || intf < 0 {
+ return fmt.Errorf("Can't send statistics for non existent interface %d; have only %d interfaces", intf, w.intf)
+ }
+
+ var scratch [4]ngOption
+ i := 0
+ if !stats.StartTime.IsZero() {
+ scratch[i].code = ngOptionCodeInterfaceStatisticsStartTime
+ scratch[i].raw = stats.StartTime
+ i++
+ }
+ if !stats.EndTime.IsZero() {
+ scratch[i].code = ngOptionCodeInterfaceStatisticsEndTime
+ scratch[i].raw = stats.EndTime
+ i++
+ }
+ if stats.PacketsDropped != NgNoValue64 {
+ scratch[i].code = ngOptionCodeInterfaceStatisticsInterfaceDropped
+ scratch[i].raw = stats.PacketsDropped
+ i++
+ }
+ if stats.PacketsReceived != NgNoValue64 {
+ scratch[i].code = ngOptionCodeInterfaceStatisticsInterfaceReceived
+ scratch[i].raw = stats.PacketsReceived
+ i++
+ }
+ options := scratch[:i]
+
+ length := prepareNgOptions(options) + 24
+
+ ts := stats.LastUpdate.UnixNano()
+ if stats.LastUpdate.IsZero() {
+ ts = 0
+ }
+
+ binary.LittleEndian.PutUint32(w.buf[:4], uint32(ngBlockTypeInterfaceStatistics))
+ binary.LittleEndian.PutUint32(w.buf[4:8], length)
+ binary.LittleEndian.PutUint32(w.buf[8:12], uint32(intf))
+ binary.LittleEndian.PutUint32(w.buf[12:16], uint32(ts>>32))
+ binary.LittleEndian.PutUint32(w.buf[16:20], uint32(ts))
+ if _, err := w.w.Write(w.buf[:20]); err != nil {
+ return err
+ }
+
+ if err := w.writeOptions(options); err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint32(w.buf[0:4], length)
+ _, err := w.w.Write(w.buf[:4])
+ return err
+}
+
+// WritePacket writes out packet with the given data and capture info. The given InterfaceIndex must already be added to the file. InterfaceIndex 0 is automatically added by the NewWriter* methods.
+func (w *NgWriter) WritePacket(ci gopacket.CaptureInfo, data []byte) error {
+ if ci.InterfaceIndex >= int(w.intf) || ci.InterfaceIndex < 0 {
+ return fmt.Errorf("Can't send statistics for non existent interface %d; have only %d interfaces", ci.InterfaceIndex, w.intf)
+ }
+ 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)
+ }
+
+ length := uint32(len(data)) + 32
+ padding := (4 - length&3) & 3
+ length += padding
+
+ ts := ci.Timestamp.UnixNano()
+
+ binary.LittleEndian.PutUint32(w.buf[:4], uint32(ngBlockTypeEnhancedPacket))
+ binary.LittleEndian.PutUint32(w.buf[4:8], length)
+ binary.LittleEndian.PutUint32(w.buf[8:12], uint32(ci.InterfaceIndex))
+ binary.LittleEndian.PutUint32(w.buf[12:16], uint32(ts>>32))
+ binary.LittleEndian.PutUint32(w.buf[16:20], uint32(ts))
+ binary.LittleEndian.PutUint32(w.buf[20:24], uint32(ci.CaptureLength))
+ binary.LittleEndian.PutUint32(w.buf[24:28], uint32(ci.Length))
+
+ if _, err := w.w.Write(w.buf[:28]); err != nil {
+ return err
+ }
+
+ if _, err := w.w.Write(data); err != nil {
+ return err
+ }
+
+ binary.LittleEndian.PutUint32(w.buf[:4], 0)
+ _, err := w.w.Write(w.buf[4-padding : 8]) // padding + length
+ return err
+}
+
+// Flush writes out buffered data to the storage media. Must be called before closing the underlying file.
+func (w *NgWriter) Flush() error {
+ return w.w.Flush()
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngwrite_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngwrite_test.go
new file mode 100644
index 00000000000..8041c1e25bd
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/ngwrite_test.go
@@ -0,0 +1,239 @@
+// Copyright 2018 The GoPacket Authors. 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"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+func TestNgWriteSimple(t *testing.T) {
+ buffer := &bytes.Buffer{}
+
+ w, err := NewNgWriter(buffer, layers.LinkTypeEthernet)
+ if err != nil {
+ t.Fatal("Opening file failed with: ", err)
+ }
+ ci := gopacket.CaptureInfo{
+ Timestamp: time.Unix(0, 0).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ }
+ err = w.WritePacket(ci, ngPacketSource[0])
+ if err != nil {
+ t.Fatal("Couldn't write packet", err)
+ }
+ err = w.Flush()
+ if err != nil {
+ t.Fatal("Couldn't flush buffer", err)
+ }
+
+ interf := DefaultNgInterface
+ interf.LinkType = layers.LinkTypeEthernet
+
+ test := ngFileReadTest{
+ testContents: bytes.NewReader(buffer.Bytes()),
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: DefaultNgWriterOptions.SectionInfo,
+ ifaces: []NgInterface{
+ interf,
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: ci,
+ },
+ },
+ }
+
+ ngRunFileReadTest(test, "", false, t)
+}
+
+func TestNgWriteComplex(t *testing.T) {
+ test := ngFileReadTest{
+ linkType: layers.LinkTypeEthernet,
+ sections: []ngFileReadTestSection{
+ {
+ sectionInfo: NgSectionInfo{
+ Comment: "A test",
+ },
+ ifaces: []NgInterface{
+ {
+ Name: "in0",
+ Comment: "test0",
+ Description: "some test interface",
+ LinkType: layers.LinkTypeEthernet,
+ TimestampResolution: 3,
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(1519128000, 195312500).UTC(),
+ StartTime: time.Unix(1519128000-100, 195312500).UTC(),
+ EndTime: time.Unix(1519128000, 195312500).UTC(),
+ PacketsReceived: 100,
+ PacketsDropped: 1,
+ },
+ },
+ {
+ Name: "null0",
+ Description: "some test interface",
+ Filter: "none",
+ OS: "not needed",
+ LinkType: layers.LinkTypeEthernet,
+ TimestampOffset: 100,
+ Statistics: NgInterfaceStatistics{
+ LastUpdate: time.Unix(1519128000, 195312500).UTC(),
+ },
+ },
+ },
+ },
+ },
+ packets: []ngFileReadTestPacket{
+ {
+ data: ngPacketSource[0],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1519128000-900, 195312500).UTC(),
+ Length: len(ngPacketSource[0]),
+ CaptureLength: len(ngPacketSource[0]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[4],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1519128000-800, 195312500).UTC(),
+ Length: len(ngPacketSource[4]),
+ CaptureLength: len(ngPacketSource[4]),
+ InterfaceIndex: 1,
+ },
+ },
+ {
+ data: ngPacketSource[1],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1519128000-500, 195312500).UTC(),
+ Length: len(ngPacketSource[1]),
+ CaptureLength: len(ngPacketSource[1]),
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[2][:96],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1519128000-300, 195312500).UTC(),
+ Length: len(ngPacketSource[2]),
+ CaptureLength: 96,
+ InterfaceIndex: 0,
+ },
+ },
+ {
+ data: ngPacketSource[3],
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1519128000-200, 195312500).UTC(),
+ Length: len(ngPacketSource[3]),
+ CaptureLength: len(ngPacketSource[3]),
+ InterfaceIndex: 0,
+ },
+ },
+ },
+ }
+
+ buffer := &bytes.Buffer{}
+
+ options := NgWriterOptions{
+ SectionInfo: test.sections[0].sectionInfo,
+ }
+
+ w, err := NewNgWriterInterface(buffer, test.sections[0].ifaces[0], options)
+ if err != nil {
+ t.Fatal("Opening file failed with: ", err)
+ }
+
+ packets := test.packets
+ err = w.WritePacket(packets[0].ci, packets[0].data)
+ if err != nil {
+ t.Fatal("Couldn't write packet", err)
+ }
+ id, err := w.AddInterface(test.sections[0].ifaces[1])
+ if err != nil {
+ t.Fatal("Couldn't add interface", err)
+ }
+ if id != 1 {
+ t.Fatalf("Expected interface id 1, but got %d", id)
+ }
+ err = w.WritePacket(packets[1].ci, packets[1].data)
+ if err != nil {
+ t.Fatal("Couldn't write packet", err)
+ }
+ err = w.WriteInterfaceStats(1, test.sections[0].ifaces[1].Statistics)
+ if err != nil {
+ t.Fatal("Couldn't write interface stats", err)
+ }
+ err = w.WritePacket(packets[2].ci, packets[2].data)
+ if err != nil {
+ t.Fatal("Couldn't write packet", err)
+ }
+ err = w.WritePacket(packets[3].ci, packets[3].data)
+ if err != nil {
+ t.Fatal("Couldn't write packet", err)
+ }
+ err = w.WritePacket(packets[4].ci, packets[4].data)
+ if err != nil {
+ t.Fatal("Couldn't write packet", err)
+ }
+ err = w.WriteInterfaceStats(0, test.sections[0].ifaces[0].Statistics)
+ if err != nil {
+ t.Fatal("Couldn't write interface stats", err)
+ }
+
+ err = w.Flush()
+ if err != nil {
+ t.Fatal("Couldn't flush buffer", err)
+ }
+
+ // writer fixes resolution to 9
+ test.sections[0].ifaces[0].TimestampResolution = 9
+ test.sections[0].ifaces[1].TimestampResolution = 9
+
+ // compensate for offset on interface 1
+ test.sections[0].ifaces[1].Statistics.LastUpdate = test.sections[0].ifaces[1].Statistics.LastUpdate.Add(100 * time.Second)
+ test.packets[1].ci.Timestamp = test.packets[1].ci.Timestamp.Add(100 * time.Second)
+
+ test.testContents = bytes.NewReader(buffer.Bytes())
+
+ ngRunFileReadTest(test, "", false, t)
+}
+
+type ngDevNull struct{}
+
+func (w *ngDevNull) Write(p []byte) (n int, err error) {
+ return len(p), nil
+}
+
+func BenchmarkNgWritePacket(b *testing.B) {
+ 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}
+ w, err := NewNgWriter(&ngDevNull{}, layers.LinkTypeEthernet)
+ if err != nil {
+ b.Fatal("Failed creating writer:", err)
+ }
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ w.WritePacket(ci, data)
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/pcapng.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/pcapng.go
new file mode 100644
index 00000000000..2382e199b20
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/pcapng.go
@@ -0,0 +1,187 @@
+// Copyright 2018 The GoPacket Authors. 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 (
+ "errors"
+ "math"
+ "time"
+
+ "github.com/google/gopacket"
+ "github.com/google/gopacket/layers"
+)
+
+// ErrNgVersionMismatch gets returned for unknown pcapng section versions. This can only happen if ReaderOptions.SkipUnknownVersion == false
+var ErrNgVersionMismatch = errors.New("Unknown pcapng Version in Section Header")
+
+// ErrNgLinkTypeMismatch gets returned if the link type of an interface is not the same as the link type from the first interface. This can only happen if ReaderOptions.ErrorOnMismatchingLinkType == true && ReaderOptions.WantMixedLinkType == false
+var ErrNgLinkTypeMismatch = errors.New("Link type of current interface is different from first one")
+
+const (
+ ngByteOrderMagic = 0x1A2B3C4D
+
+ // We can handle only version 1.0
+ ngVersionMajor = 1
+ ngVersionMinor = 0
+)
+
+type ngBlockType uint32
+
+const (
+ ngBlockTypeInterfaceDescriptor ngBlockType = 1 // Interface description block
+ ngBlockTypePacket ngBlockType = 2 // Packet block (deprecated)
+ ngBlockTypeSimplePacket ngBlockType = 3 // Simple packet block
+ ngBlockTypeInterfaceStatistics ngBlockType = 5 // Interface statistics block
+ ngBlockTypeEnhancedPacket ngBlockType = 6 // Enhanced packet block
+ ngBlockTypeSectionHeader ngBlockType = 0x0A0D0D0A // Section header block (same in both endians)
+)
+
+type ngOptionCode uint16
+
+const (
+ ngOptionCodeEndOfOptions ngOptionCode = iota // end of options. must be at the end of options in a block
+ ngOptionCodeComment // comment
+ ngOptionCodeHardware // description of the hardware
+ ngOptionCodeOS // name of the operating system
+ ngOptionCodeUserApplication // name of the application
+)
+
+const (
+ ngOptionCodeInterfaceName ngOptionCode = iota + 2 // interface name
+ ngOptionCodeInterfaceDescription // interface description
+ ngOptionCodeInterfaceIPV4Address // IPv4 network address and netmask for the interface
+ ngOptionCodeInterfaceIPV6Address // IPv6 network address and prefix length for the interface
+ ngOptionCodeInterfaceMACAddress // interface hardware MAC address
+ ngOptionCodeInterfaceEUIAddress // interface hardware EUI address
+ ngOptionCodeInterfaceSpeed // interface speed in bits/s
+ ngOptionCodeInterfaceTimestampResolution // timestamp resolution
+ ngOptionCodeInterfaceTimezone // time zone
+ ngOptionCodeInterfaceFilter // capture filter
+ ngOptionCodeInterfaceOS // operating system
+ ngOptionCodeInterfaceFCSLength // length of the Frame Check Sequence in bits
+ ngOptionCodeInterfaceTimestampOffset // offset (in seconds) that must be added to packet timestamp
+)
+
+const (
+ ngOptionCodeInterfaceStatisticsStartTime ngOptionCode = iota + 2 // Start of capture
+ ngOptionCodeInterfaceStatisticsEndTime // End of capture
+ ngOptionCodeInterfaceStatisticsInterfaceReceived // Packets received by physical interface
+ ngOptionCodeInterfaceStatisticsInterfaceDropped // Packets dropped by physical interface
+ ngOptionCodeInterfaceStatisticsFilterAccept // Packets accepted by filter
+ ngOptionCodeInterfaceStatisticsOSDrop // Packets dropped by operating system
+ ngOptionCodeInterfaceStatisticsDelivered // Packets delivered to user
+)
+
+// ngOption is a pcapng option
+type ngOption struct {
+ code ngOptionCode
+ value []byte
+ raw interface{}
+ length uint16
+}
+
+// ngBlock is a pcapng block header
+type ngBlock struct {
+ typ ngBlockType
+ length uint32 // remaining length of block
+}
+
+// NgResolution represents a pcapng timestamp resolution
+type NgResolution uint8
+
+// Binary returns true if the timestamp resolution is a negative power of two. Otherwise NgResolution is a negative power of 10.
+func (r NgResolution) Binary() bool {
+ if r&0x80 == 0x80 {
+ return true
+ }
+ return false
+}
+
+// Exponent returns the negative exponent of the resolution.
+func (r NgResolution) Exponent() uint8 {
+ return uint8(r) & 0x7f
+}
+
+// ToTimestampResolution converts an NgResolution to a gopaket.TimestampResolution
+func (r NgResolution) ToTimestampResolution() (ret gopacket.TimestampResolution) {
+ if r.Binary() {
+ ret.Base = 2
+ } else {
+ ret.Base = 10
+ }
+ ret.Exponent = -int(r.Exponent())
+ return
+}
+
+// NgNoValue64 is a placeholder for an empty numeric 64 bit value.
+const NgNoValue64 = math.MaxUint64
+
+// NgInterfaceStatistics hold the statistic for an interface at a single point in time. These values are already supposed to be accumulated. Most pcapng files contain this information at the end of the file/section.
+type NgInterfaceStatistics struct {
+ // LastUpdate is the last time the statistics were updated.
+ LastUpdate time.Time
+ // StartTime is the time packet capture started on this interface. This value might be zero if this option is missing.
+ StartTime time.Time
+ // EndTime is the time packet capture ended on this interface This value might be zero if this option is missing.
+ EndTime time.Time
+ // Comment can be an arbitrary comment. This value might be empty if this option is missing.
+ Comment string
+ // PacketsReceived are the number of received packets. This value might be NoValue64 if this option is missing.
+ PacketsReceived uint64
+ // PacketsReceived are the number of received packets. This value might be NoValue64 if this option is missing.
+ PacketsDropped uint64
+}
+
+var ngEmptyStatistics = NgInterfaceStatistics{
+ PacketsReceived: NgNoValue64,
+ PacketsDropped: NgNoValue64,
+}
+
+// NgInterface holds all the information of a pcapng interface.
+type NgInterface struct {
+ // Name is the name of the interface. This value might be empty if this option is missing.
+ Name string
+ // Comment can be an arbitrary comment. This value might be empty if this option is missing.
+ Comment string
+ // Description is a description of the interface. This value might be empty if this option is missing.
+ Description string
+ // Filter is the filter used during packet capture. This value might be empty if this option is missing.
+ Filter string
+ // OS is the operating system this interface was controlled by. This value might be empty if this option is missing.
+ OS string
+ // LinkType is the linktype of the interface.
+ LinkType layers.LinkType
+ // TimestampResolution is the timestamp resolution of the packets in the pcapng file belonging to this interface.
+ TimestampResolution NgResolution
+ // TimestampResolution is the timestamp offset in seconds of the packets in the pcapng file belonging to this interface.
+ TimestampOffset uint64
+ // SnapLength is the maximum packet length captured by this interface. 0 for unlimited
+ SnapLength uint32
+ // Statistics holds the interface statistics
+ Statistics NgInterfaceStatistics
+
+ secondMask uint64
+ scaleUp uint64
+ scaleDown uint64
+}
+
+// Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.
+func (i NgInterface) Resolution() gopacket.TimestampResolution {
+ return i.TimestampResolution.ToTimestampResolution()
+}
+
+// NgSectionInfo contains additional information of a pcapng section
+type NgSectionInfo struct {
+ // Hardware is the hardware this file was generated on. This value might be empty if this option is missing.
+ Hardware string
+ // OS is the operating system this file was generated on. This value might be empty if this option is missing.
+ OS string
+ // Application is the user space application this file was generated with. This value might be empty if this option is missing.
+ Application string
+ // Comment can be an arbitrary comment. This value might be empty if this option is missing.
+ Comment string
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read.go
index 922d4a1ddea..6ea1643a630 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read.go
@@ -13,6 +13,9 @@ import (
"io"
"time"
+ "bufio"
+ "compress/gzip"
+
"github.com/google/gopacket"
"github.com/google/gopacket/layers"
)
@@ -23,6 +26,9 @@ import (
//
// 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
@@ -34,13 +40,18 @@ type Reader struct {
snaplen uint32
linkType layers.LinkType
// reusable buffer
- buf []byte
+ buf [16]byte
+ // buffer for ZeroCopyReadPacketData
+ packetBuf []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.
@@ -60,6 +71,20 @@ func NewReader(r io.Reader) (*Reader, error) {
}
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
@@ -79,43 +104,70 @@ func (r *Reader) readHeader() error {
r.byteOrder = binary.BigEndian
r.nanoSecsFactor = 1000
} else {
- return errors.New(fmt.Sprintf("Unknown maigc %x", magic))
+ return fmt.Errorf("Unknown magic %x", magic)
}
if r.versionMajor = r.byteOrder.Uint16(buf[4:6]); r.versionMajor != versionMajor {
- return errors.New(fmt.Sprintf("Unknown major version %d", r.versionMajor))
+ return fmt.Errorf("Unknown major version %d", r.versionMajor)
}
if r.versionMinor = r.byteOrder.Uint16(buf[6:8]); r.versionMinor != versionMinor {
- return errors.New(fmt.Sprintf("Unknown minor version %d", r.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.buf = make([]byte, r.snaplen+16)
r.linkType = layers.LinkType(r.byteOrder.Uint32(buf[20:24]))
return nil
}
-// Read next packet from file
+// 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", ci.CaptureLength, r.snaplen)
+ return
+ }
+ if ci.CaptureLength > ci.Length {
+ err = fmt.Errorf("capture length exceeds original packet length: %d > %d", ci.CaptureLength, ci.Length)
+ return
+ }
+ data = make([]byte, ci.CaptureLength)
+ _, err = io.ReadFull(r.r, data)
+ return data, ci, err
+}
- var n int
- data = r.buf[16 : 16+ci.CaptureLength]
- if n, err = io.ReadFull(r.r, data); err != nil {
+// ZeroCopyReadPacketData reads next packet from file. The data buffer is owned by the Reader,
+// and each call to ZeroCopyReadPacketData invalidates data returned by the previous one.
+//
+// It is not true zero copy, as data is still copied from the underlying reader. However,
+// this method avoids allocating heap memory for every packet.
+func (r *Reader) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ if ci, err = r.readPacketHeader(); err != nil {
return
- } else if n < ci.CaptureLength {
- err = io.ErrUnexpectedEOF
}
- return
+ if ci.CaptureLength > int(r.snaplen) {
+ err = fmt.Errorf("capture length exceeds snap length: %d > %d", ci.CaptureLength, r.snaplen)
+ return
+ }
+ if ci.CaptureLength > ci.Length {
+ err = fmt.Errorf("capture length exceeds original packet length: %d > %d", ci.CaptureLength, ci.Length)
+ return
+ }
+
+ if cap(r.packetBuf) < ci.CaptureLength {
+ snaplen := int(r.snaplen)
+ if snaplen < ci.CaptureLength {
+ snaplen = ci.CaptureLength
+ }
+ r.packetBuf = make([]byte, snaplen)
+ }
+ data = r.packetBuf[:ci.CaptureLength]
+ _, err = io.ReadFull(r.r, data)
+ return data, ci, err
}
func (r *Reader) readPacketHeader() (ci gopacket.CaptureInfo, err error) {
- var n int
- if n, err = io.ReadFull(r.r, r.buf[0:16]); err != nil {
- return
- } else if n < 16 {
- err = io.ErrUnexpectedEOF
+ 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()
@@ -129,7 +181,51 @@ 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
+}
+
+// SetSnaplen sets the snapshot length of the capture file.
+//
+// This is useful when a pcap file contains packets bigger than then snaplen.
+// Pcapgo will error when reading packets bigger than snaplen, then it dumps those
+// packets and reads the next 16 bytes, which are part of the "faulty" packet's payload, but pcapgo
+// thinks it's the next header, which is probably also faulty because it's not really a packet header.
+// This can lead to a lot of faulty reads.
+//
+// The SetSnaplen function can be used to set a bigger snaplen to prevent those read errors.
+//
+// This snaplen situation can happen when a pcap writer doesn't truncate packets to the snaplen size while writing packets to file.
+// E.g. In Python, dpkt.pcap.Writer sets snaplen by default to 1500 (https://dpkt.readthedocs.io/en/latest/api/api_auto.html#dpkt.pcap.Writer)
+// but doesn't enforce this when writing packets (https://dpkt.readthedocs.io/en/latest/_modules/dpkt/pcap.html#Writer.writepkt).
+// When reading, tools like tcpdump, tcpslice, mergecap and wireshark ignore the snaplen and use
+// their own defined snaplen.
+// E.g. When reading packets, tcpdump defines MAXIMUM_SNAPLEN (https://github.com/the-tcpdump-group/tcpdump/blob/6e80fcdbe9c41366df3fa244ffe4ac8cce2ab597/netdissect.h#L290)
+// and uses it (https://github.com/the-tcpdump-group/tcpdump/blob/66384fa15b04b47ad08c063d4728df3b9c1c0677/print.c#L343-L358).
+//
+// For further reading:
+// - https://github.com/the-tcpdump-group/tcpdump/issues/389
+// - https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8808
+// - https://www.wireshark.org/lists/wireshark-dev/201307/msg00061.html
+// - https://github.com/wireshark/wireshark/blob/bfd51199e707c1d5c28732be34b44a9ee8a91cd8/wiretap/pcap-common.c#L723-L742
+// - https://github.com/wireshark/wireshark/blob/f07fb6cdfc0904905627707b88450054e921f092/wiretap/libpcap.c#L592-L598
+// - https://github.com/wireshark/wireshark/blob/f07fb6cdfc0904905627707b88450054e921f092/wiretap/libpcap.c#L714-L727
+// - https://github.com/the-tcpdump-group/tcpdump/commit/d033c1bc381c76d13e4aface97a4f4ec8c3beca2
+// - https://github.com/the-tcpdump-group/tcpdump/blob/88e87cb2cb74c5f939792171379acd9e0efd8b9a/netdissect.h#L263-L290
+func (r *Reader) SetSnaplen(newSnaplen uint32) {
+ r.snaplen = newSnaplen
+}
+
// 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)
}
+
+// Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.
+func (r *Reader) Resolution() gopacket.TimestampResolution {
+ if r.nanoSecsFactor == 1 {
+ return gopacket.TimestampResolutionMicrosecond
+ }
+ return gopacket.TimestampResolutionNanosecond
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read_test.go
index c2e6397d21c..bdd153e2272 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/read_test.go
@@ -117,3 +117,125 @@ func TestPacketNano(t *testing.T) {
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)
+ }
+}
+
+func TestPacketZeroCopy(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
+ 0x05, 0x06, 0x07, 0x08, // data
+ }
+
+ buf := bytes.NewBuffer(test)
+ r, err := NewReader(buf)
+
+ data1, _, err := r.ZeroCopyReadPacketData()
+ 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.ZeroCopyReadPacketData()
+ if err != nil {
+ t.Error(err)
+ t.FailNow()
+ }
+ if want := []byte{5, 6, 7, 8}; !bytes.Equal(data2, want) {
+ t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data2)
+ }
+
+ if &data1[0] != &data2[0] {
+ t.Error("different buffers returned by subsequent ZeroCopyReadPacketData calls")
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/README.md b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/README.md
new file mode 100644
index 00000000000..c2665946126
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/README.md
@@ -0,0 +1 @@
+This directory contains the test data generated with https://github.com/hadrielk/pcapng-test-generator and two additional tests. \ No newline at end of file
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test001.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test001.pcapng
new file mode 100644
index 00000000000..464a206ce4f
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test001.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test002.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test002.pcapng
new file mode 100644
index 00000000000..773ff803260
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test002.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test003.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test003.pcapng
new file mode 100644
index 00000000000..a6afe6d220d
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test003.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test004.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test004.pcapng
new file mode 100644
index 00000000000..af144a18275
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test004.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test005.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test005.pcapng
new file mode 100644
index 00000000000..e63bfacb291
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test005.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test006.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test006.pcapng
new file mode 100644
index 00000000000..b2c897d8630
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test006.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test007.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test007.pcapng
new file mode 100644
index 00000000000..27181eeea57
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test007.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test008.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test008.pcapng
new file mode 100644
index 00000000000..9ec562b0180
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test008.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test009.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test009.pcapng
new file mode 100644
index 00000000000..205cb19e4d6
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test009.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test010.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test010.pcapng
new file mode 100644
index 00000000000..031795e2958
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test010.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test011.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test011.pcapng
new file mode 100644
index 00000000000..6610f99b2b7
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test011.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test012.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test012.pcapng
new file mode 100644
index 00000000000..a45c8dce2dc
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test012.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test013.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test013.pcapng
new file mode 100644
index 00000000000..54416c6928b
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test013.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test014.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test014.pcapng
new file mode 100644
index 00000000000..a1e8c607b23
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test014.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test015.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test015.pcapng
new file mode 100644
index 00000000000..a414527a661
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test015.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test016.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test016.pcapng
new file mode 100644
index 00000000000..e7ae4879a51
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test016.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test017.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test017.pcapng
new file mode 100644
index 00000000000..a28fec6dbef
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test017.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test018.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test018.pcapng
new file mode 100644
index 00000000000..7955462ea1a
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test018.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test100.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test100.pcapng
new file mode 100644
index 00000000000..a6a6c54a6d3
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test100.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test101.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test101.pcapng
new file mode 100644
index 00000000000..c8c5a710abb
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test101.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test102.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test102.pcapng
new file mode 100644
index 00000000000..82fa8150fbf
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test102.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test200.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test200.pcapng
new file mode 100644
index 00000000000..e817e2c9935
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test200.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test201.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test201.pcapng
new file mode 100644
index 00000000000..90ba7c0a507
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test201.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test202.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test202.pcapng
new file mode 100644
index 00000000000..012d1a3efe5
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test202.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test901.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test901.pcapng
new file mode 100644
index 00000000000..5b381d7e2b3
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test901.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test902.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test902.pcapng
new file mode 100644
index 00000000000..b112d9e259b
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/be/test902.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test001.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test001.pcapng
new file mode 100644
index 00000000000..662fe2975fd
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test001.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test002.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test002.pcapng
new file mode 100644
index 00000000000..9ee5f84bb44
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test002.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test003.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test003.pcapng
new file mode 100644
index 00000000000..88823253df1
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test003.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test004.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test004.pcapng
new file mode 100644
index 00000000000..97b80eda5e8
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test004.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test005.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test005.pcapng
new file mode 100644
index 00000000000..412b6e90870
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test005.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test006.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test006.pcapng
new file mode 100644
index 00000000000..8bb44b2bdd9
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test006.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test007.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test007.pcapng
new file mode 100644
index 00000000000..cc67f9517ee
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test007.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test008.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test008.pcapng
new file mode 100644
index 00000000000..966a451cb1b
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test008.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test009.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test009.pcapng
new file mode 100644
index 00000000000..5b8f3b311bc
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test009.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test010.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test010.pcapng
new file mode 100644
index 00000000000..394e3e5863a
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test010.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test011.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test011.pcapng
new file mode 100644
index 00000000000..067d8910a01
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test011.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test012.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test012.pcapng
new file mode 100644
index 00000000000..14ad7a9e898
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test012.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test013.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test013.pcapng
new file mode 100644
index 00000000000..260d09ecdbd
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test013.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test014.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test014.pcapng
new file mode 100644
index 00000000000..96df83a408b
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test014.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test015.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test015.pcapng
new file mode 100644
index 00000000000..4d1121215fd
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test015.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test016.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test016.pcapng
new file mode 100644
index 00000000000..8726e67f3a9
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test016.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test017.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test017.pcapng
new file mode 100644
index 00000000000..79aee351c43
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test017.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test018.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test018.pcapng
new file mode 100644
index 00000000000..77fdf276676
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test018.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test100.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test100.pcapng
new file mode 100644
index 00000000000..5f590058de2
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test100.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test101.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test101.pcapng
new file mode 100644
index 00000000000..ad9c92d5b23
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test101.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test102.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test102.pcapng
new file mode 100644
index 00000000000..61173153b38
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test102.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test200.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test200.pcapng
new file mode 100644
index 00000000000..47142909c3e
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test200.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test201.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test201.pcapng
new file mode 100644
index 00000000000..8e8f7fa20c4
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test201.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test202.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test202.pcapng
new file mode 100644
index 00000000000..a41b85afcb4
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test202.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test901.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test901.pcapng
new file mode 100644
index 00000000000..1a71d0cb44c
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test901.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test902.pcapng b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test902.pcapng
new file mode 100644
index 00000000000..0105a9119dd
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/le/test902.pcapng
Binary files differ
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/test901.lua b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/test901.lua
new file mode 100644
index 00000000000..71a474b143c
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/test901.lua
@@ -0,0 +1,43 @@
+-- prevent wireshark loading this file as a plugin
+if not _G['pcapng_test_gen'] then return end
+
+
+local block = require "blocks"
+local input = require "input"
+
+
+local test = {
+ category = 'difficult',
+ description = "Multible SHB sections, one with invalid version number",
+}
+
+
+local timestamp = UInt64(0x64ca47aa, 0x0004c397)
+
+function test:compile()
+ local idb0 = block.IDB(0, input.linktype.ETHERNET, 0, "eth0")
+
+ self.blocks = {
+ block.SHB("my computer", "linux", "pcap_writer.lua")
+ :addOption('comment', self.testname .. " SHB-0"),
+ idb0,
+
+ block.EPB( idb0, input:getData(1), timestamp ),
+
+ block.SHB("my computer", "linux", "pcap_writer.lua")
+ :addOption('comment', self.testname .. " SHB-1")
+ :setVersion(2, 0),
+ idb0,
+
+ block.EPB( idb0, input:getData(2), timestamp ),
+
+ block.SHB("my computer", "linux", "pcap_writer.lua")
+ :addOption('comment', self.testname .. " SHB-2"),
+ idb0,
+
+ block.EPB( idb0, input:getData(3), timestamp ),
+ }
+end
+
+
+return test
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/test902.lua b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/test902.lua
new file mode 100644
index 00000000000..210c0849cb6
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/tests/test902.lua
@@ -0,0 +1,30 @@
+-- prevent wireshark loading this file as a plugin
+if not _G['pcapng_test_gen'] then return end
+
+
+local block = require "blocks"
+local input = require "input"
+
+
+local test = {
+ category = 'difficult',
+ description = "idb with binary resolution",
+}
+
+
+local timestamp = UInt64(0x8c0dc032, 0x0000005a)
+
+function test:compile()
+ local idb0 = block.IDB(0, input.linktype.ETHERNET, 0, "eth0")
+ :addOption( block.OptionFormat ('if_tsresol', "B", 0x88) )
+
+ self.blocks = {
+ block.SHB("my computer", "linux", "pcap_writer.lua")
+ :addOption('comment', self.testname),
+ idb0,
+ block.EPB( idb0, input:getData(1), timestamp ),
+ }
+end
+
+
+return test
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write.go
index bfc312fd5a5..46a5f399572 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write.go
@@ -4,8 +4,6 @@
// 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 (
@@ -26,6 +24,9 @@ import (
// timestamp resolution and little-endian encoding.
type Writer struct {
w io.Writer
+
+ // Moving this into the struct seems to save an allocation for each call to writePacketHeader
+ buf [16]byte
}
const magicMicroseconds = 0xA1B2C3D4
@@ -71,19 +72,17 @@ func (w *Writer) WriteFileHeader(snaplen uint32, linktype layers.LinkType) error
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[:])
+ binary.LittleEndian.PutUint32(w.buf[0:4], uint32(secs))
+ binary.LittleEndian.PutUint32(w.buf[4:8], uint32(usecs))
+ binary.LittleEndian.PutUint32(w.buf[8:12], uint32(ci.CaptureLength))
+ binary.LittleEndian.PutUint32(w.buf[12:16], uint32(ci.Length))
+ _, err := w.w.Write(w.buf[:])
return err
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write_test.go
index 5b87d6a5aa7..fa81fc82a92 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pcapgo/write_test.go
@@ -8,9 +8,10 @@ package pcapgo
import (
"bytes"
- "github.com/google/gopacket"
"testing"
"time"
+
+ "github.com/google/gopacket"
)
func TestWriteHeader(t *testing.T) {
@@ -47,6 +48,23 @@ func TestWritePacket(t *testing.T) {
}
}
+func BenchmarkWritePacket(b *testing.B) {
+ b.StopTimer()
+ 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)
+ b.StartTimer()
+
+ for i := 0; i < b.N; i++ {
+ w.WritePacket(ci, data)
+ }
+}
+
func TestCaptureInfoErrors(t *testing.T) {
data := []byte{1, 2, 3, 4}
ts := time.Unix(0, 0)
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/doc.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/doc.go
index a7fbcb8857f..32baaf67ae2 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/doc.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/doc.go
@@ -4,7 +4,7 @@
// 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.
+/*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
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/pfring.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/pfring.go
index 34269b625d1..b9b8fb0abfc 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/pfring.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/pfring.go
@@ -8,10 +8,43 @@
package pfring
/*
+// lpcap is needed for bpf
#cgo LDFLAGS: -lpfring -lpcap
#include <stdlib.h>
#include <pfring.h>
+#include <stdint.h>
#include <linux/pf_ring.h>
+
+struct metadata {
+ u_int64_t timestamp_ns;
+ u_int32_t caplen;
+ u_int32_t len;
+ int32_t if_index;
+};
+
+// In pfring 7.2 pfring_pkthdr struct was changed to packed
+// Since this is incompatible with go, copy the values we need to a custom
+// struct (struct metadata above).
+// Another way to do this, would be to store the struct offsets in defines
+// and use encoding/binary in go-land. But this has the downside, that there is
+// no native endianess in encoding/binary and storing ByteOrder in a variable
+// leads to an expensive itab lookup + call (instead of very fast inlined and
+// optimized movs). Using unsafe magic could lead to problems with unaligned
+// access.
+// Additionally, this does the same uintptr-dance as pcap.
+int pfring_readpacketdatato_wrapper(
+ pfring* ring,
+ uintptr_t buffer,
+ uintptr_t meta) {
+ struct metadata* ci = (struct metadata* )meta;
+ struct pfring_pkthdr hdr;
+ int ret = pfring_recv(ring, (u_char**)buffer, 0, &hdr, 1);
+ ci->timestamp_ns = hdr.extended_hdr.timestamp_ns;
+ ci->caplen = hdr.caplen;
+ ci->len = hdr.len;
+ ci->if_index = hdr.extended_hdr.if_index;
+ return ret;
+}
*/
import "C"
@@ -21,33 +54,34 @@ import "C"
import (
"fmt"
- "github.com/google/gopacket"
+ "net"
"os"
+ "reflect"
"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
-
- 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
- buf_ptr *C.u_char
+ cptr *C.pfring
+ useExtendedPacketHeader bool
+ interfaceIndex int
+ mu sync.Mutex
+
+ meta C.struct_metadata
+ 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
@@ -68,7 +102,16 @@ func NewRing(device string, snaplen uint32, flags Flag) (ring *Ring, _ error) {
if cptr == nil || err != nil {
return nil, fmt.Errorf("pfring NewRing error: %v", err)
}
- ring = &Ring{cptr: cptr, snaplen: int(snaplen)}
+ ring = &Ring{cptr: cptr}
+
+ 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
}
@@ -82,6 +125,7 @@ func (r *Ring) Close() {
// 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
@@ -104,43 +148,82 @@ func (n NextResult) Error() string {
return strconv.Itoa(int(n))
}
+// shared code (Read-functions), that fetches a packet + metadata from pf_ring
+func (r *Ring) getNextBufPtrLocked(ci *gopacket.CaptureInfo) error {
+ result := NextResult(C.pfring_readpacketdatato_wrapper(r.cptr, C.uintptr_t(uintptr(unsafe.Pointer(&r.bufPtr))), C.uintptr_t(uintptr(unsafe.Pointer(&r.meta)))))
+ if result != NextOk {
+ return result
+ }
+ ci.Timestamp = time.Unix(0, int64(r.meta.timestamp_ns))
+ ci.CaptureLength = int(r.meta.caplen)
+ ci.Length = int(r.meta.len)
+ if r.useExtendedPacketHeader {
+ ci.InterfaceIndex = int(r.meta.if_index)
+ } else {
+ ci.InterfaceIndex = r.interfaceIndex
+ }
+ return nil
+}
+
// 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.
+//
+// Deprecated: This function is provided for legacy code only. Use ReadPacketData or ZeroCopyReadPacketData
+// This function does an additional copy, and is therefore slower than ZeroCopyReadPacketData.
+// The old implementation did the same inside the pf_ring library.
func (r *Ring) ReadPacketDataTo(data []byte) (ci gopacket.CaptureInfo, err error) {
- // This tricky buf_ptr points to the start of our slice data, so pfring_recv
- // will actually write directly into our Go slice. Nice!
r.mu.Lock()
- r.buf_ptr = (*C.u_char)(unsafe.Pointer(&data[0]))
- result := NextResult(C.pfring_recv(r.cptr, &r.buf_ptr, C.u_int(len(data)), &r.pkthdr, 1))
- if result != NextOk {
- err = result
- r.mu.Unlock()
- return
+ err = r.getNextBufPtrLocked(&ci)
+ if err == nil {
+ var buf []byte
+ slice := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
+ slice.Data = uintptr(unsafe.Pointer(r.bufPtr))
+ slice.Len = ci.CaptureLength
+ slice.Cap = ci.CaptureLength
+ copy(data, buf)
}
- 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)
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
+// ReadPacketData returns the next packet read from pf_ring, 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
+ r.mu.Lock()
+ err = r.getNextBufPtrLocked(&ci)
+ if err == nil {
+ data = C.GoBytes(unsafe.Pointer(r.bufPtr), C.int(ci.CaptureLength))
}
- data = data[:ci.CaptureLength]
+ r.mu.Unlock()
return
}
+// ZeroCopyReadPacketData returns the next packet read from pf_ring, along with an error
+// code associated with that packet.
+// The slice returned by ZeroCopyReadPacketData points to bytes inside a pf_ring
+// ring. Each call to ZeroCopyReadPacketData might invalidate 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 (r *Ring) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) {
+ r.mu.Lock()
+ err = r.getNextBufPtrLocked(&ci)
+ if err == nil {
+ slice := (*reflect.SliceHeader)(unsafe.Pointer(&data))
+ slice.Data = uintptr(unsafe.Pointer(r.bufPtr))
+ slice.Len = ci.CaptureLength
+ slice.Cap = ci.CaptureLength
+ }
+ r.mu.Unlock()
+ return
+}
+
+// ClusterType is a type of clustering used when balancing across multiple
+// rings.
type ClusterType C.cluster_type
const (
@@ -188,9 +271,30 @@ func (r *Ring) SetSamplingRate(rate int) error {
return nil
}
+// SetPollWatermark sets the pfring's poll watermark packet count
+func (r *Ring) SetPollWatermark(count uint16) error {
+ if rv := C.pfring_set_poll_watermark(r.cptr, C.u_int16_t(count)); rv != 0 {
+ return fmt.Errorf("Unable to set poll watermark, got error code %d", rv)
+ }
+ return nil
+}
+
+// SetPriority sets the pfring poll threads CPU usage limit
+func (r *Ring) SetPriority(cpu uint16) {
+ C.pfring_config(C.u_short(cpu))
+}
+
+// SetPollDuration sets the pfring's poll duration before it yields/returns
+func (r *Ring) SetPollDuration(durationMillis uint) error {
+ if rv := C.pfring_set_poll_duration(r.cptr, C.u_int(durationMillis)); rv != 0 {
+ return fmt.Errorf("Unable to set poll duration, got error code %d", rv)
+ }
+ return nil
+}
+
// SetBPFFilter sets the BPF filter for the ring.
-func (r *Ring) SetBPFFilter(bpf_filter string) error {
- filter := C.CString(bpf_filter)
+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)
@@ -209,7 +313,7 @@ func (r *Ring) RemoveBPFFilter() error {
// 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 {
+ 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
@@ -233,6 +337,7 @@ func (r *Ring) Disable() error {
return nil
}
+// Stats provides simple statistics on a ring.
type Stats struct {
Received, Dropped uint64
}
@@ -249,6 +354,8 @@ func (r *Ring) Stats() (s Stats, err error) {
return
}
+// Direction is a simple enum to set which packets (TX, RX, or both) a ring
+// captures.
type Direction C.packet_direction
const (
@@ -271,6 +378,7 @@ func (r *Ring) SetDirection(d Direction) error {
return nil
}
+// SocketMode is an enum for setting whether a ring should read, write, or both.
type SocketMode C.socket_mode
const (
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/pfring_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/pfring_test.go
new file mode 100644
index 00000000000..e7727881433
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/pfring/pfring_test.go
@@ -0,0 +1,70 @@
+// Copyright 2019 The GoPacket Authors. 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
+
+import (
+ "flag"
+ "log"
+ "testing"
+)
+
+var iface = flag.String("i", "eth0", "Interface to read packets from")
+
+func BenchmarkPfringRead(b *testing.B) {
+ var ring *Ring
+ var err error
+ if ring, err = NewRing(*iface, 65536, FlagPromisc); err != nil {
+ log.Fatalln("pfring ring creation error:", err)
+ }
+ if err = ring.SetSocketMode(ReadOnly); err != nil {
+ log.Fatalln("pfring SetSocketMode error:", err)
+ } else if err = ring.Enable(); err != nil {
+ log.Fatalln("pfring Enable error:", err)
+ }
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ _, ci, _ := ring.ReadPacketData()
+ b.SetBytes(int64(ci.CaptureLength))
+ }
+}
+
+func BenchmarkPfringReadZero(b *testing.B) {
+ var ring *Ring
+ var err error
+ if ring, err = NewRing(*iface, 65536, FlagPromisc); err != nil {
+ log.Fatalln("pfring ring creation error:", err)
+ }
+ if err = ring.SetSocketMode(ReadOnly); err != nil {
+ log.Fatalln("pfring SetSocketMode error:", err)
+ } else if err = ring.Enable(); err != nil {
+ log.Fatalln("pfring Enable error:", err)
+ }
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ _, ci, _ := ring.ZeroCopyReadPacketData()
+ b.SetBytes(int64(ci.CaptureLength))
+ }
+}
+
+func BenchmarkPfringReadTo(b *testing.B) {
+ var ring *Ring
+ var err error
+ if ring, err = NewRing(*iface, 65536, FlagPromisc); err != nil {
+ log.Fatalln("pfring ring creation error:", err)
+ }
+ if err = ring.SetSocketMode(ReadOnly); err != nil {
+ log.Fatalln("pfring SetSocketMode error:", err)
+ } else if err = ring.Enable(); err != nil {
+ log.Fatalln("pfring Enable error:", err)
+ }
+ buffer := make([]byte, 65536*2)
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ ci, _ := ring.ReadPacketDataTo(buffer)
+ b.SetBytes(int64(ci.CaptureLength))
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/cap2test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/cap2test.go
new file mode 100644
index 00000000000..1d43f1dfb08
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/cap2test.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/memory.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/memory.go
new file mode 100644
index 00000000000..c1b2ae7510d
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/memory.go
@@ -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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpassembly.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpassembly.go
new file mode 100644
index 00000000000..f22785a9dad
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpassembly.go
@@ -0,0 +1,1331 @@
+// 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
+ var r byteContainer
+ for _, r = range rl.all {
+ if current >= offset {
+ return r.captureInfo()
+ }
+ current += r.length()
+ }
+ if r != nil && current >= offset {
+ return r.captureInfo()
+ }
+ // 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, nextSeq 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) lastSeen() time.Time {
+ if c.c2s.lastSeen.Before(c.s2c.lastSeen) {
+ return c.s2c.lastSeen
+ }
+
+ return c.c2s.lastSeen
+}
+
+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, 0, 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 *debugLog {
+ if half.nextSeq < rev.ackSeq {
+ log.Printf("Delay detected on %v, data is acked but not assembled yet (acked %v, nextSeq %v)", key, rev.ackSeq, half.nextSeq)
+ }
+ }
+
+ if !half.stream.Accept(t, ci, half.dir, half.nextSeq, &a.start, ac) {
+ if *debugLog {
+ log.Printf("Ignoring packet")
+ }
+ return
+ }
+ if half.closed {
+ // this way is closed
+ if *debugLog {
+ log.Printf("%v got packet on closed half", key)
+ }
+ 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: %v 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: %v 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
+ }
+ s += diff
+ if s >= e {
+ // Completely included in sent
+ s = e
+ }
+ bytes = bytes[s:]
+ return bytes, half.nextSeq
+}
+
+// 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
+ }
+ }
+ // Close the connection only if both halfs of the connection last seen before tc.
+ if !half.closed && half.first == nil && conn.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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go
new file mode 100644
index 00000000000..37fc45b0923
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go
@@ -0,0 +1,1817 @@
+// 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...(%v)\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],
+ },
+ },
+ },
+ })
+}
+
+func testFlush(t *testing.T, s []testSequence, delay time.Duration, flushInterval time.Duration) {
+ fact := &testFactory{}
+ p := NewStreamPool(fact)
+ a := NewAssembler(p)
+ a.MaxBufferedPagesPerConnection = 10
+ port := layers.TCPPort(0)
+
+ for i, test := range s {
+ fact.reassembly = []Reassembly{}
+ if testDebug {
+ fmt.Printf("#### test: #%d: sending:%s\n", i, hex.EncodeToString(test.in.BaseLayer.Payload))
+ }
+
+ flow := netFlow
+ if port == 0 {
+ port = test.in.SrcPort
+ }
+ if port != test.in.SrcPort {
+ flow = flow.Reverse()
+ }
+ a.Assemble(flow, &test.in)
+ time.Sleep(delay)
+ a.FlushCloseOlderThan(time.Now().Add(-1 * flushInterval))
+
+ 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.Errorf("test %v:\nwant: %v\n got: %v\n", i, final, fact.reassembly)
+ }
+
+ if testDebug {
+ fmt.Printf("test %v passing...(%v)\n", i, final)
+ }
+ }
+}
+
+func TestFlush(t *testing.T) {
+ for _, test := range []struct {
+ seq []testSequence
+ delay, flushOlderThan time.Duration
+ }{
+ {
+ seq: []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1001,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{
+ // flushed after flush interval.
+ Reassembly{
+ Skip: -1,
+ Bytes: []byte{1, 2, 3},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1010,
+ BaseLayer: layers.BaseLayer{Payload: []byte{4, 5, 6, 7}},
+ },
+ want: []Reassembly{
+ // flushed after flush interval.
+ Reassembly{
+ Skip: -1,
+ Bytes: []byte{4, 5, 6, 7},
+ },
+ },
+ },
+ },
+ delay: time.Millisecond * 50,
+ flushOlderThan: time.Millisecond * 40,
+ },
+ {
+ // two way stream.
+ seq: []testSequence{
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1001,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ want: []Reassembly{},
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 2,
+ DstPort: 1,
+ Seq: 890,
+ BaseLayer: layers.BaseLayer{Payload: []byte{11, 22, 33}},
+ },
+ want: []Reassembly{
+ // First half is flushed after flush interval.
+ Reassembly{
+ Skip: -1,
+ Bytes: []byte{1, 2, 3},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 2,
+ DstPort: 1,
+ Seq: 893,
+ BaseLayer: layers.BaseLayer{Payload: []byte{44, 55, 66, 77}},
+ },
+ want: []Reassembly{
+ // continues data is flushed.
+ Reassembly{
+ Skip: -1,
+ Bytes: []byte{11, 22, 33, 44, 55, 66, 77},
+ },
+ },
+ },
+ {
+ in: layers.TCP{
+ SrcPort: 1,
+ DstPort: 2,
+ Seq: 1004,
+ BaseLayer: layers.BaseLayer{Payload: []byte{8, 9}},
+ },
+ want: []Reassembly{
+ Reassembly{
+ // Should be flushed because is continues.
+ Bytes: []byte{8, 9},
+ },
+ },
+ },
+ },
+ delay: time.Millisecond * 50,
+ flushOlderThan: time.Millisecond * 99,
+ },
+ } {
+ testFlush(t, test.seq, test.delay, test.flushOlderThan)
+ }
+}
+
+/*
+ * 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpcheck.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpcheck.go
new file mode 100644
index 00000000000..508359b22ef
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpcheck.go
@@ -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, nextSeq 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 nextSeq != invalidSequence {
+ revOptions := t.getOptions(dir.Reverse())
+ length := len(tcp.Payload)
+
+ // Check packet is in the correct window
+ diff := nextSeq.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, nextSeq)
+ } 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/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go
new file mode 100644
index 00000000000..87da266752b
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go
@@ -0,0 +1,417 @@
+// 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 (%v): got %v, expected %v. 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,
+ },
+ })
+ }
+}
+
+/*
+ * Option tests
+ */
+
+type testCheckOptionsSequence struct {
+ tcp layers.TCP
+ ci gopacket.CaptureInfo
+ dir TCPFlowDirection
+ nextSeq Sequence
+ expected bool
+ start bool
+}
+
+func testCheckOptions(t *testing.T, title string, s []testCheckOptionsSequence) {
+ opt := NewTCPOptionCheck()
+ for i, test := range s {
+ err := opt.Accept(&test.tcp, test.ci, test.dir, test.nextSeq, &test.start)
+ res := err == nil
+ if res != test.expected {
+ t.Fatalf("'%v' #%d: packet rejected (%v): got %v, expected %v.", title, i, gopacket.LayerDump(&test.tcp), res, test.expected)
+ }
+ }
+}
+
+func TestCheckOptions(t *testing.T) {
+ for _, test := range []struct {
+ title string
+ sequence []testCheckOptionsSequence
+ }{
+ {
+ title: "simle valid flow",
+ sequence: []testCheckOptionsSequence{
+ {
+ dir: TCPDirClientToServer,
+ nextSeq: -1, // no packets received yet.
+ tcp: layers.TCP{
+ SrcPort: 35721,
+ DstPort: 80,
+ Seq: 374511116,
+ Ack: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 566690000),
+ },
+ expected: true,
+ },
+ {
+ dir: TCPDirServerToClient,
+ nextSeq: -1,
+ tcp: layers.TCP{
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787765,
+ Ack: 374511119,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590332000),
+ },
+ expected: true,
+ },
+ {
+ dir: TCPDirClientToServer,
+ nextSeq: 374511119,
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511119,
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 3, 4}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ expected: true,
+ },
+ },
+ },
+ {
+ title: "ack received before data",
+ sequence: []testCheckOptionsSequence{
+ {
+ dir: TCPDirServerToClient,
+ nextSeq: -1,
+ tcp: layers.TCP{
+ SrcPort: 53,
+ DstPort: 54842,
+ Seq: 3465787765,
+ Ack: 374511119,
+ BaseLayer: layers.BaseLayer{Payload: []byte{}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590332000),
+ },
+ expected: true,
+ },
+ {
+ dir: TCPDirClientToServer,
+ nextSeq: 37451116, // this is the next expected sequence.
+ tcp: layers.TCP{
+ SrcPort: 35721,
+ DstPort: 80,
+ Seq: 374511116,
+ Ack: 0,
+ BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 566690000),
+ },
+ expected: true,
+ },
+ {
+ dir: TCPDirClientToServer,
+ nextSeq: 374511119,
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511119,
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 3, 4}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ expected: true,
+ },
+ {
+ dir: TCPDirClientToServer,
+ nextSeq: 374511122, // 10 bytes skipped
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511132,
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{22, 33, 44}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ expected: true,
+ },
+ {
+ dir: TCPDirClientToServer,
+ nextSeq: 374511132,
+ tcp: layers.TCP{
+ ACK: true,
+ SrcPort: 54842,
+ DstPort: 53,
+ Seq: 374511119, // retransmission of reassembled data.
+ Ack: 3465787766,
+ BaseLayer: layers.BaseLayer{Payload: []byte{2, 3, 4}},
+ },
+ ci: gopacket.CaptureInfo{
+ Timestamp: time.Unix(1432538521, 590346000),
+ },
+ expected: false,
+ },
+ },
+ },
+ } {
+ testCheckOptions(t, test.title, test.sequence)
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/routing/routing.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/routing/routing.go
index 7271cb6bf58..cbbeb6ef76e 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/routing/routing.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/routing/routing.go
@@ -18,6 +18,7 @@ package routing
import (
"bytes"
+ "errors"
"fmt"
"net"
"sort"
@@ -91,15 +92,14 @@ func (r *router) Route(dst net.IP) (iface *net.Interface, gateway, preferredSrc
}
func (r *router) RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) {
- length := len(dst)
var ifaceIndex int
- switch length {
- case 4:
+ switch {
+ case dst.To4() != nil:
ifaceIndex, gateway, preferredSrc, err = r.route(r.v4, input, src, dst)
- case 16:
+ case dst.To16() != nil:
ifaceIndex, gateway, preferredSrc, err = r.route(r.v6, input, src, dst)
default:
- err = fmt.Errorf("IP length is not 4 or 16")
+ err = errors.New("IP is not valid as IPv4 or IPv6")
return
}
@@ -108,10 +108,10 @@ func (r *router) RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *n
iface = &r.ifaces[ifaceIndex]
if preferredSrc == nil {
- switch length {
- case 4:
+ switch {
+ case dst.To4() != nil:
preferredSrc = r.addrs[ifaceIndex].v4
- case 16:
+ case dst.To16() != nil:
preferredSrc = r.addrs[ifaceIndex].v6
}
}
@@ -207,35 +207,35 @@ loop:
}
sort.Sort(rtr.v4)
sort.Sort(rtr.v6)
- if ifaces, err := net.Interfaces(); err != nil {
+ ifaces, err := net.Interfaces()
+ if err != nil {
return nil, err
- } else {
- 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
- if ifaceAddrs, err := iface.Addrs(); err != nil {
- return nil, err
- } else {
- 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
- }
+ }
+ 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)
}
+ rtr.addrs = append(rtr.addrs, addrs)
}
return rtr, nil
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly.go
index 03f43d3d001..bde2e9255c8 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly.go
@@ -32,7 +32,7 @@ var memLog = flag.Bool("assembly_memuse_log", false, "If true, the github.com/go
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
+const uint32Size = 1 << 32
// 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
@@ -52,17 +52,17 @@ type Sequence int64
// 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
+ if s > uint32Size-uint32Size/4 && t < uint32Size/4 {
+ t += uint32Size
+ } else if t > uint32Size-uint32Size/4 && s < uint32Size/4 {
+ s += uint32Size
}
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
+ return (s + Sequence(t)) & (uint32Size - 1)
}
// Reassembly objects are passed by an Assembler into Streams using the
@@ -124,7 +124,7 @@ func (c *pageCache) grow() {
pages := make([]page, c.pcSize)
c.pages = append(c.pages, pages)
c.size += c.pcSize
- for i, _ := range pages {
+ for i := range pages {
c.free = append(c.free, &pages[i])
}
if *memLog {
@@ -148,8 +148,7 @@ func (c *pageCache) next(ts time.Time) (p *page) {
p, c.free = c.free[i], c.free[:i]
p.prev = nil
p.next = nil
- p.Seen = ts
- p.Bytes = p.buf[:0]
+ p.Reassembly = Reassembly{Bytes: p.buf[:0], Seen: ts}
c.used++
return p
}
@@ -201,7 +200,13 @@ func (p *StreamPool) connections() []*connection {
return conns
}
-// FlushOlderThan finds any streams waiting for packets older than
+// 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).
//
@@ -221,9 +226,13 @@ func (p *StreamPool) connections() []*connection {
// 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) FlushOlderThan(t time.Time) (flushed, closed int) {
+func (a *Assembler) FlushWithOptions(opt FlushOptions) (flushed, closed int) {
conns := a.connPool.connections()
closes := 0
flushes := 0
@@ -235,7 +244,7 @@ func (a *Assembler) FlushOlderThan(t time.Time) (flushed, closed int) {
conn.mu.Unlock()
continue
}
- for conn.first != nil && conn.first.Seen.Before(t) {
+ for conn.first != nil && conn.first.Seen.Before(opt.T) {
a.skipFlush(conn)
flushed = true
if conn.closed {
@@ -243,7 +252,7 @@ func (a *Assembler) FlushOlderThan(t time.Time) (flushed, closed int) {
break
}
}
- if !conn.closed && conn.first == nil && conn.lastSeen.Before(t) {
+ if opt.CloseAll && !conn.closed && conn.first == nil && conn.lastSeen.Before(opt.T) {
flushed = true
a.closeConnection(conn)
closes++
@@ -256,6 +265,11 @@ func (a *Assembler) FlushOlderThan(t time.Time) (flushed, closed int) {
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.
@@ -307,7 +321,7 @@ type StreamPool struct {
func (p *StreamPool) grow() {
conns := make([]connection, p.nextAlloc)
p.all = append(p.all, conns)
- for i, _ := range conns {
+ for i := range conns {
p.free = append(p.free, &conns[i])
}
if *memLog {
@@ -666,8 +680,8 @@ func (a *Assembler) closeConnection(conn *connection) {
// 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 (conn *connection) traverseConn(seq Sequence) (prev, current *page) {
- prev = conn.last
+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
@@ -679,16 +693,16 @@ func (conn *connection) traverseConn(seq Sequence) (prev, current *page) {
// 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 (conn *connection) pushBetween(prev, next, first, last *page) {
+func (c *connection) pushBetween(prev, next, first, last *page) {
// Maintain our doubly linked list
- if next == nil || conn.last == nil {
- conn.last = last
+ if next == nil || c.last == nil {
+ c.last = last
} else {
last.next = next
next.prev = last
}
- if prev == nil || conn.first == nil {
- conn.first = first
+ if prev == nil || c.first == nil {
+ c.first = first
} else {
first.prev = prev
prev.next = first
@@ -699,7 +713,7 @@ 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)
+ p, p2, numPages := a.pagesFromTCP(t, ts)
prev, current := conn.traverseConn(Sequence(t.Seq))
conn.pushBetween(prev, current, p, p2)
conn.pages += numPages
@@ -712,12 +726,12 @@ func (a *Assembler) insertIntoConn(t *layers.TCP, conn *connection, ts time.Time
}
}
-// pagesFromTcp creates a page (or set of pages) from a TCP packet. Note that
+// 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) {
+func (a *Assembler) pagesFromTCP(t *layers.TCP, ts time.Time) (p, p2 *page, numPages int) {
first := a.pc.next(ts)
current := first
numPages++
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go
index a7b81d430cb..fed4dd8ff1c 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go
@@ -23,6 +23,12 @@ func init() {
layers.NewIPEndpoint(net.IP{5, 6, 7, 8}))
}
+func TestSequenceOverflow(t *testing.T) {
+ if want, got := 20, Sequence((1<<32)-10).Difference(Sequence(10)); want != got {
+ t.Errorf("overflow diff failure: got %d want %d", got, want)
+ }
+}
+
type testSequence struct {
in layers.TCP
want []Reassembly
@@ -554,7 +560,7 @@ func BenchmarkMultiStreamConn(b *testing.B) {
if i%65536 == 65535 {
if t.SYN {
t.SYN = false
- t.Seq += 1
+ t.Seq++
}
t.Seq += 10
}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go
index 91d30f90835..377f9c14ff5 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go
@@ -12,7 +12,7 @@
// 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
+// parse 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:
//
@@ -113,6 +113,7 @@ type ReaderStream struct {
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
@@ -157,7 +158,7 @@ func (r *ReaderStream) stripEmpty() {
// DataLost is returned by the ReaderStream's Read function when it encounters
// a Reassembly with Skip != 0.
-var DataLost error = errors.New("lost data")
+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
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/time.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/time.go
new file mode 100644
index 00000000000..6d116cdfbc7
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/time.go
@@ -0,0 +1,72 @@
+// Copyright 2018 The GoPacket Authors. 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"
+ "math"
+ "time"
+)
+
+// TimestampResolution represents the resolution of timestamps in Base^Exponent.
+type TimestampResolution struct {
+ Base, Exponent int
+}
+
+func (t TimestampResolution) String() string {
+ return fmt.Sprintf("%d^%d", t.Base, t.Exponent)
+}
+
+// ToDuration returns the smallest representable time difference as a time.Duration
+func (t TimestampResolution) ToDuration() time.Duration {
+ if t.Base == 0 {
+ return 0
+ }
+ if t.Exponent == 0 {
+ return time.Second
+ }
+ switch t.Base {
+ case 10:
+ return time.Duration(math.Pow10(t.Exponent + 9))
+ case 2:
+ if t.Exponent < 0 {
+ return time.Second >> uint(-t.Exponent)
+ }
+ return time.Second << uint(t.Exponent)
+ default:
+ // this might loose precision
+ return time.Duration(float64(time.Second) * math.Pow(float64(t.Base), float64(t.Exponent)))
+ }
+}
+
+// TimestampResolutionInvalid represents an invalid timestamp resolution
+var TimestampResolutionInvalid = TimestampResolution{}
+
+// TimestampResolutionMillisecond is a resolution of 10^-3s
+var TimestampResolutionMillisecond = TimestampResolution{10, -3}
+
+// TimestampResolutionMicrosecond is a resolution of 10^-6s
+var TimestampResolutionMicrosecond = TimestampResolution{10, -6}
+
+// TimestampResolutionNanosecond is a resolution of 10^-9s
+var TimestampResolutionNanosecond = TimestampResolution{10, -9}
+
+// TimestampResolutionNTP is the resolution of NTP timestamps which is 2^-32 ≈ 233 picoseconds
+var TimestampResolutionNTP = TimestampResolution{2, -32}
+
+// TimestampResolutionCaptureInfo is the resolution used in CaptureInfo, which his currently nanosecond
+var TimestampResolutionCaptureInfo = TimestampResolutionNanosecond
+
+// PacketSourceResolution is an interface for packet data sources that
+// support reporting the timestamp resolution of the aqcuired timestamps.
+// Returned timestamps will always have NanosecondTimestampResolution due
+// to the use of time.Time, but scaling might have occured if acquired
+// timestamps have a different resolution.
+type PacketSourceResolution interface {
+ // Resolution returns the timestamp resolution of acquired timestamps before scaling to NanosecondTimestampResolution.
+ Resolution() TimestampResolution
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/time_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/time_test.go
new file mode 100644
index 00000000000..c9b99e0bd75
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/time_test.go
@@ -0,0 +1,73 @@
+// Copyright 2019 The GoPacket Authors. 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 (
+ "testing"
+ "time"
+)
+
+func TestToDuration(t *testing.T) {
+ for i, test := range []struct {
+ r TimestampResolution
+ d time.Duration
+ }{
+ {
+ TimestampResolutionMillisecond,
+ time.Millisecond,
+ },
+ {
+ TimestampResolutionMicrosecond,
+ time.Microsecond,
+ },
+ {
+ TimestampResolutionNanosecond,
+ time.Nanosecond,
+ },
+ {
+ TimestampResolutionNTP,
+ 0, // this is not representable since it's ~0.233 nanoseconds
+ },
+ {
+ TimestampResolution{2, -16},
+ 15258,
+ },
+ {
+ TimestampResolution{2, 1},
+ 2 * time.Second,
+ },
+ {
+ TimestampResolution{10, 1},
+ 10 * time.Second,
+ },
+ {
+ TimestampResolution{10, 0},
+ time.Second,
+ },
+ {
+ TimestampResolution{2, 0},
+ time.Second,
+ },
+ {
+ TimestampResolution{0, 0},
+ 0,
+ },
+ {
+ TimestampResolution{3, 2},
+ 9 * time.Second,
+ },
+ {
+ TimestampResolution{3, -2},
+ 111111111,
+ },
+ } {
+ d := test.r.ToDuration()
+ if d != test.d {
+ t.Errorf("%d: resolution: %s want: %d got: %d", i, test.r, test.d, d)
+ }
+ }
+}
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/writer.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/writer.go
index dff8bf2da0a..c6d79634c13 100644
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/writer.go
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/writer.go
@@ -6,7 +6,9 @@
package gopacket
-import ()
+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.
@@ -34,6 +36,8 @@ type SerializableLayer interface {
// LayerPayload. It just serializes based on struct fields, neither
// modifying nor using contents/payload.
SerializeTo(b SerializeBuffer, opts SerializeOptions) error
+ // LayerType returns the type of the layer that is being serialized to the buffer
+ LayerType() LayerType
}
// SerializeOptions provides options for behaviors that SerializableLayers may want to
@@ -86,7 +90,7 @@ type SerializeBuffer interface {
// 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 prepends the current bytes in this
+ // 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.
@@ -95,12 +99,19 @@ type SerializeBuffer interface {
// the byte slice returned by any previous call to Bytes() for this buffer
// should be considered invalidated.
Clear() error
+ // Layers returns all the Layers that have been successfully serialized into this buffer
+ // already.
+ Layers() []LayerType
+ // PushLayer adds the current Layer to the list of Layers that have been serialized
+ // into this buffer.
+ PushLayer(LayerType)
}
type serializeBuffer struct {
data []byte
start int
prepended, appended int
+ layers []LayerType
}
// NewSerializeBuffer creates a new instance of the default implementation of
@@ -169,9 +180,18 @@ func (w *serializeBuffer) AppendBytes(num int) ([]byte, error) {
func (w *serializeBuffer) Clear() error {
w.start = w.prepended
w.data = w.data[:w.start]
+ w.layers = w.layers[:0]
return nil
}
+func (w *serializeBuffer) Layers() []LayerType {
+ return w.layers
+}
+
+func (w *serializeBuffer) PushLayer(l LayerType) {
+ w.layers = append(w.layers, l)
+}
+
// 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()
@@ -191,6 +211,22 @@ func SerializeLayers(w SerializeBuffer, opts SerializeOptions, layers ...Seriali
if err != nil {
return err
}
+ w.PushLayer(layer.LayerType())
}
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...)
+}